Changeset e481d13 in observatorio for simulacion/ModuloDinamico


Ignore:
Timestamp:
Jan 16, 2015, 11:29:08 AM (9 years ago)
Author:
Alejandro <amujica@…>
Branches:
simulacion
Children:
faed520
Parents:
23f4971
Message:

reparado error al agrupar proveedores declarados multiples veces

Location:
simulacion/ModuloDinamico
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • simulacion/ModuloDinamico/io_manager.H

    r23f4971 re481d13  
    532532                      )
    533533                    );
     534
     535                    if (input.get_nationality() != "E")
     536                      {
     537                        Imported_Product * ptr_imported_product =
     538                          static_cast<Imported_Product *>(
     539                            src->get_info().get());
     540
     541                        ptr_imported_product->set_imports(
     542                          ptr_imported_product->get_imports() +
     543                          ip_relationship.get_bought_quantity()
     544                        );
     545                      }
    534546
    535547                    src->get_info()->set_level(
  • simulacion/ModuloDinamico/queries.C

    r16eed2b re481d13  
    245245}
    246246
    247 std::string get_supplier_name(const std::string & rif)
    248 {
    249   AutoConnection conn;
    250 
    251   DBQuery query(conn);
    252 
    253   StrQuery str_query;
    254 
    255   str_query.addSelect(DB::NAME);
    256   str_query.addFrom(DB::SUPPLIER_TABLE_NAME);
    257   str_query.addWhere(op(DB::RIF, single_quote(rif)));
    258 
    259   if (not query.exec(str_query))
    260     {
    261       std::string msg = "Cannot execute query: " + std::string(str_query);
    262 
    263       throw std::logic_error(msg);
    264     }
    265 
    266   if (not query.next())
    267     {
    268       std::stringstream msg;
    269 
    270       msg << "Supplier with R.I.F. = " << rif
    271           << " does not exists in database";
    272 
    273       throw std::domain_error(msg.str());
    274     }
    275 
    276   return query.getValue(0);
    277 }
    278 
    279247void list_inputs(const db_id_t & input_id, const std::string & year,
    280248                 List<Input> & inputs)
     
    324292  query.clear();
    325293
    326   std::string strquery =
    327     "SELECT " +
    328     concatas(DB::SUPPLIER_TABLE_NAME, DB::RIF) + ',' +
    329     concatas(DB::SUPPLIER_TABLE_NAME, DB::NATIONALITY) + ',' +
    330     concatas(DB::COUNTRY_TABLE_NAME, DB::NAME) +
    331     " FROM " +
    332     DB::INPUT_SUPPLIER_TABLE_NAME + ',' +
    333     DB::SUPPLIER_TABLE_NAME + ',' +
    334     DB::COUNTRY_TABLE_NAME +
    335     " WHERE " +
    336     op(concat(DB::INPUT_SUPPLIER_TABLE_NAME, DB::YEAR_R), year) + " AND " +
    337     op(concat(DB::INPUT_SUPPLIER_TABLE_NAME, DB::INPUT_ID),
    338                        id_to_str(input_id)) + " AND " +
    339     op(concat(DB::INPUT_SUPPLIER_TABLE_NAME, DB::SUPPLIER_ID),
    340        concat(DB::SUPPLIER_TABLE_NAME, DB::ID)) + " AND " +
    341     op(concat(DB::COUNTRY_TABLE_NAME, DB::ID),
    342        concat(DB::SUPPLIER_TABLE_NAME, DB::ORIG_COUNTRY_ID)) +
    343     " GROUP BY " +
    344     concat(DB::SUPPLIER_TABLE_NAME, DB::RIF, '_') + ',' +
    345     concat(DB::SUPPLIER_TABLE_NAME, DB::NATIONALITY, '_') + ',' +
    346     concat(DB::COUNTRY_TABLE_NAME, DB::NAME, '_');
    347 
    348 
    349   if (not query.exec(strquery))
    350     {
    351       std::string msg = "Cannot execute query: " + std::string(strquery);
    352       throw std::logic_error(msg);
    353     }
     294  str_query.addSelect(concatas(DB::SUPPLIER_TABLE_NAME, DB::RIF));
     295  str_query.addSelect(concatas(DB::SUPPLIER_TABLE_NAME, DB::NAME));
     296  str_query.addSelect(concatas(DB::SUPPLIER_TABLE_NAME, DB::NATIONALITY));
     297  str_query.addSelect(concatas(DB::COUNTRY_TABLE_NAME, DB::NAME));
     298
     299  str_query.addFrom(DB::INPUT_SUPPLIER_TABLE_NAME);
     300  str_query.addFrom(DB::SUPPLIER_TABLE_NAME);
     301  str_query.addFrom(DB::COUNTRY_TABLE_NAME);
     302
     303  str_query.addWhere(op(concat(DB::INPUT_SUPPLIER_TABLE_NAME, DB::YEAR_R),
     304                        year));
     305  str_query.addWhere(op(concat(DB::INPUT_SUPPLIER_TABLE_NAME, DB::INPUT_ID),
     306                     id_to_str(input_id)));
     307  str_query.addWhere(op(concat(DB::INPUT_SUPPLIER_TABLE_NAME, DB::SUPPLIER_ID),
     308                        concat(DB::SUPPLIER_TABLE_NAME, DB::ID)));
     309  str_query.addWhere(op(concat(DB::COUNTRY_TABLE_NAME, DB::ID),
     310                        concat(DB::SUPPLIER_TABLE_NAME,
     311                               DB::ORIG_COUNTRY_ID)));
     312
     313  str_query.addOrderBy(concat(DB::SUPPLIER_TABLE_NAME, DB::RIF));
     314  str_query.setOrderByOption("ASC");
     315
     316  if (not query.exec(str_query))
     317    {
     318      std::string msg = "Cannot execute query: " + std::string(str_query);
     319      throw std::logic_error(msg);
     320    }
     321
     322  std::string last_rif = "";
    354323
    355324  while (query.next())
    356325    {
    357       input.set_company_rif(
    358         query.getValue(concat(DB::SUPPLIER_TABLE_NAME, DB::RIF, '_'))
     326      std::string rif =
     327        query.getValue(concat(DB::SUPPLIER_TABLE_NAME, DB::RIF, '_'));
     328
     329      std::string nationality = query.getValue(concat(DB::SUPPLIER_TABLE_NAME,
     330                                                      DB::NATIONALITY, '_'));
     331
     332      if (nationality != "E" and rif == last_rif)
     333        continue;
     334
     335      last_rif = rif;
     336
     337      input.set_company_rif(rif);
     338      input.set_company_name(
     339        query.getValue(concat(DB::SUPPLIER_TABLE_NAME, DB::NAME, '_'))
    359340      );
    360       input.set_company_name(get_supplier_name(input.get_company_rif()));
    361341      input.set_company_location(
    362342        query.getValue(concat(DB::COUNTRY_TABLE_NAME, DB::NAME, '_'))
    363343      );
    364       input.set_nationality(query.getValue(concat(DB::SUPPLIER_TABLE_NAME,
    365                                                   DB::NATIONALITY, '_')));
     344      input.set_nationality(nationality);
    366345      inputs.append(input);
    367346    }
Note: See TracChangeset for help on using the changeset viewer.