void Reportes::reportePorEleccion(int idEleccion, bool guardaEncriptado, string claveEncriptado) { ABMConteo *abmConteo = new ABMConteo(); std::stringstream out; vector<Conteo> resultados = abmConteo->GetConteoByEleccion(idEleccion); if(resultados.size() == 0) { out << "No se encontraron resultados." << endl; return; } //Ordeno por cantidad de votos resultados = Reportes::GroupByLista(resultados); resultados = Reportes::OrderByCantidadVotos(resultados); ABMLista* abmLista = new ABMLista(); for(int i = 0; i < resultados.size(); i++){ Lista* lista = abmLista->GetLista(resultados[i].GetIdLista()); out << "Lista: " << lista->GetNombre() << ". Votos: " << resultados[i].GetCountVotos() << endl; } if (guardaEncriptado) { string fileName = ConfigurationMananger::getInstance()->getReportFileDirectory().append("ReportexEleccion"); fileName.append(Helper::IntToString(Identities::GetNextNroReporteXEleccion())).append(".ecr"); string reporteEncriptado = Vigenere::encriptar(claveEncriptado, out.str()); ofstream file; file.open(fileName.c_str(), ios::app); file.write(reporteEncriptado.c_str(), reporteEncriptado.size()); file.close(); cout << "Reporte encriptado correctamente" << endl; } else{ cout << out.str(); } delete abmConteo; delete abmLista; }
void Reportes::reportePorDistrito(int idDistrito, bool guardaEncriptado, string claveEncriptado) { ABMConteo *abmConteo = new ABMConteo(); ABMEleccion* abmEleccion = new ABMEleccion(); ABMCargo* abmCargo = new ABMCargo(); ABMDistrito* abmDistrito = new ABMDistrito(); std::stringstream out; vector<Conteo> resultados = abmConteo->GetConteoByDistrito(idDistrito); if(resultados.size() == 0){ out << "No se encontraron resultados." << endl; return; } //Primero ordeno por fecha de eleccion resultados = Reportes::OrderByFecha(resultados); //Agrupo por fecha de eleccion vector< vector<Conteo> > resAgrupados; vector<Conteo> cs; cs.push_back(resultados[0]); resAgrupados.push_back(cs); int idEleccionActual = resultados[0].GetIdEleccion(); //Tengo que agrupar por eleccion for(int i = 1; i < resultados.size(); i++){ Conteo conteo = resultados[i]; if(conteo.GetIdEleccion() == idEleccionActual){ resAgrupados[resAgrupados.size() - 1].push_back(conteo); } else{ //Nuevo grupo de eleccion vector<Conteo> cs; cs.push_back(conteo); resAgrupados.push_back(cs); idEleccionActual = conteo.GetIdEleccion(); } } for(int i = 0; i < resAgrupados.size(); i++){ vector<Conteo> aux = Reportes::OrderByCantidadVotos(resAgrupados[i]); resAgrupados[i] = aux; } out << endl << endl << endl; ABMLista* abmLista = new ABMLista(); for(int i = 0; i < resAgrupados.size(); i++){ vector<Conteo> cs = resAgrupados[i]; if(resAgrupados.size() > 0){ Conteo conteo = cs[0]; Eleccion* e = abmEleccion->GetEleccion(conteo.GetIdEleccion()); string cargo = abmCargo->GetCargo(e->GetIdCargo())->GetNombre(); Fecha fecha = e->GetDate().getStrFecha(); out << "Eleccion: (" << fecha.getFriendlyStr() << " - " << cargo << ")" << endl; for(int j = 0; j < cs.size(); j++){ Conteo res = cs[j]; Lista* lista = abmLista->GetLista(res.GetIdLista()); out << " Lista: " << lista->GetNombre() << " tiene " << res.GetCountVotos() << " votos." << endl; } } } if (guardaEncriptado) { string fileName = ConfigurationMananger::getInstance()->getReportFileDirectory().append("ReportexDistrito"); fileName.append(Helper::IntToString(Identities::GetNextNroReporteXDistrito())).append(".ecr"); string reporteEncriptado = Vigenere::encriptar(claveEncriptado, out.str()); ofstream file; file.open(fileName.c_str(), ios::app); file.write(reporteEncriptado.c_str(), reporteEncriptado.size()); file.close(); cout << "Reporte encriptado correctamente" << endl; } else{ cout << out.str(); } delete abmConteo; delete abmEleccion; delete abmCargo; delete abmDistrito; delete abmLista; }