//Definición de los métodos de la clase Pedido Pedido::Pedido (Usuario_Pedido& up, Pedido_Articulo& pa, Usuario& u, const Tarjeta& t, const Fecha& f) : num_(N_pedidos + 1), tarjeta_(&t), fecha_(f), total_(0) { if (t.caducidad() < f) throw Tarjeta::Caducada(t.caducidad()); if (&u != t.titular()) throw Pedido::Impostor(u); Fecha actual = Fecha(); for(auto& i : u.compra()) { if (LibroDigital* ld = dynamic_cast<LibroDigital*> (i.first)) { if (ld->f_expir() < actual) u.compra(*ld, 0); } else { ArticuloAlmacenable* pa = dynamic_cast<ArticuloAlmacenable*> (i.first); if (i.second > pa->stock()){ Articulo& aux = *(i.first); vaciar_carrito(u); throw Pedido::SinStock(aux); } } } if (u.n_articulos() == 0) throw Pedido::Vacio(u); for(auto& i : u.compra()) { if (ArticuloAlmacenable* aa = dynamic_cast<ArticuloAlmacenable*> (i.first)){ aa->stock() = aa->stock() - 1; } pa.pedir (*this, *(i.first), (i.first)->precio(), i.second); total_ += (i.first)->precio() * i.second; u.compra (*(i.first), 0); } up.asocia(u, *this); N_pedidos++; }
Eleccion* ABMEleccion::GetEleccion(int idEleccion){ if (ExistsKey(idEleccion)){ Element * el = this->bpPlusTree->findExact(idEleccion); char* data = el->getData(); //data = fecha|idcargo|distritos int sfecha; vector<int> distritos; int idCargo; ProcessData::obtenerDataEleccion(data, el->getDataSize(), sfecha, idCargo, distritos); //TODO: no anda bien obtenerData para devolver la fecha Fecha fecha = Fecha(Helper::IntToString(sfecha)); //Busco los distritos Eleccion * eleccion = new Eleccion(idCargo, fecha, idEleccion); for(int i = 0; i < distritos.size(); i++){ eleccion->AddDistrito(distritos[i]); } return eleccion; } else { return NULL; } }
Fecha::Fecha(const char* cad) { int d,m,a; if(sscanf(cad,"%d/%d/%d",&d,&m,&a)!=3) throw Invalida(" Formato incorrecto"); else *this = Fecha(d,m,a); }
Eleccion* ABMConteo::GenerateEleccion(string idEleccion){ vector<string> splitedEleccion = Helper::split(idEleccion, '_'); int idCargo = Helper::StringToInt(splitedEleccion[1]); Fecha fecha = Fecha(splitedEleccion[0]); Eleccion* e = new Eleccion(idCargo, fecha); return e; }
Tarjeta::Tarjeta(Tarjeta::Tipo t, const Numero& num, Usuario& u,const Fecha& f) :tipo_{t}, num_{num}, titular_{&u}, f_cad_{f} { if(caducidad() < Fecha()) throw Tarjeta::Caducada(caducidad()); else { titular_facial_= u.nombre() +" "+u.apellidos(); for(int i = 0; i<titular_facial_.length(); i++) titular_facial_[i]= std::toupper(titular_facial_[i]); u.es_titular_de(*this); } }
Fecha operator -( const Fecha& f, int dias) { return Fecha( f ) += -dias; }