예제 #1
0
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;
}
예제 #2
0
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;
}