campo-sirio/tp/tp0900.cpp
luca 32a92bd876 Patch level :10.0 4.0
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :prima generazione del .csv del CONAI (non propriamente una bellezza!)


git-svn-id: svn://10.65.10.50/trunk@16195 c028cbd2-c16b-5b4b-a496-9718f37d4682
2008-02-18 11:19:10 +00:00

236 lines
5.6 KiB
C++
Executable File

#include "tp0900a.h"
#include <applicat.h>
#include <automask.h>
#include <config.h>
#include <modaut.h>
#include <progind.h>
#include <reprint.h>
#include <reputils.h>
#include <textset.h>
#include <rdoc.h>
///////////////////////////////////////////////////////////
// MASCHERA
///////////////////////////////////////////////////////////
class TDichiarazione_CONAI_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TDichiarazione_CONAI_mask();
virtual ~TDichiarazione_CONAI_mask() {}
};
TDichiarazione_CONAI_mask::TDichiarazione_CONAI_mask() : TAutomask("tp0900a")
{
}
bool TDichiarazione_CONAI_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_PERIODO:
break;
default:
break;
}
return true;
}
/////////////////////////////////////////////////////////////
// CSV RECORDSET
/////////////////////////////////////////////////////////////
class TDichiarazione_CONAI_csv_recordset : public TCSV_recordset
{
public:
TDichiarazione_CONAI_csv_recordset();
};
TDichiarazione_CONAI_csv_recordset::TDichiarazione_CONAI_csv_recordset()
: TCSV_recordset("CSV(,)\n")
{
}
///////////////////////////////////////////////////////////
// APPLICAZIONE
///////////////////////////////////////////////////////////
class TDichiarazione_CONAI : public TSkeleton_application
{
protected:
void crea_csv(const TMask& mask) const;
public:
virtual bool create();
virtual void main_loop();
};
//metodo di base per la ricerca delle righe documento che soddisfano i parametri dell'utonto
void TDichiarazione_CONAI::crea_csv(const TMask& mask) const
{
//Tanto per cominciare stabilisce il range di date...
const int anno = mask.get_int(F_ANNO);
TDate dataini(1, 1, anno);
TDate datafin(31, 12, anno);
const int tipo_periodo = mask.get_int(F_PERIODO);
//se il periodo scelto non e' un anno intero...
switch (tipo_periodo)
{
case 2:
{
const int mese = mask.get_int(F_TRIMESTRE);
dataini.set_month(mese);
datafin = dataini;
datafin.addmonth(2);
datafin.set_end_month();
}
break;
case 3:
{
const int mese = mask.get_int(F_MESE);
dataini.set_month(mese);
datafin = dataini;
datafin.set_end_month();
}
break;
default:
break;
}
//Adesso tocca al codice articolo in base alla specie CONAI
const int specie_conai = mask.get_int(F_SPECIECONAI);
TConfig ditta_ini(CONFIG_DITTA, "ve");
TVariant codart;
switch (specie_conai)
{
case 1:
codart = ditta_ini.get("CODACC"); //acciaio
break;
case 2:
codart = ditta_ini.get("CODALL"); //alluminio
break;
case 3:
codart = ditta_ini.get("CODCAR"); //carta
break;
case 4:
codart = ditta_ini.get("CODPLA"); //plastica
break;
case 5:
codart = ditta_ini.get("CODLEG"); //legno
break;
case 6:
codart = ditta_ini.get("CODVET"); //vetro
break;
default:
break;
}
//Adesso prende le numerazioni e i tipi documento
TSheet_field& sf = mask.sfield(F_TIPI);
//la query e' sulle righe documento
TString query;
query << "USE RDOC KEY 5\n";
query << "SELECT ((NUM(ANSI(33.DATADOC))>=NUM(ANSI(#DADATA)))&&(NUM(ANSI(33.DATADOC))<=NUM(ANSI(#ADATA))))&&(33.TIPODOC=#TIPODOC)&&(GENERATA=\"X\")\n";
query << "JOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC\n";
query << "FROM CODART=#CODART ANNO=#ANNO CODNUM=#CODNUM PROVV=\"D\"\n";
query << "TO CODART=#CODART ANNO=#ANNO CODNUM=#CODNUM PROVV=\"D\"\n";
//crea il recordset ed assegna subito i valori delle variabili che restano costanti al cambio..
//..numerazione/tipo: sono le date ed il codice articolo
TISAM_recordset rdoc(query);
rdoc.set_var("#ANNO", TVariant((long)anno));
rdoc.set_var("#DADATA", dataini);
rdoc.set_var("#ADATA", datafin);
rdoc.set_var("#CODART", codart);
//creazione del csv recordset che verra' riempito dai record del recordset rdoc
TDichiarazione_CONAI_csv_recordset csv;
const TString path = "C:/temp/cazzone.csv";
//quante righe dello sheet processa?
const long tot_items = sf.items();
//Visto che e' possibile avere una secchiata di numerazioni, gli tocca fare un giro per ogni numerazione
FOR_EACH_SHEET_ROW(sf, r, row)
{
//estrazione definitiva dei record che soddisfano il casino di parametri richiesti
rdoc.set_var("#CODNUM", TVariant(row->get(0)));
rdoc.set_var("#TIPODOC", TVariant(row->get(2)));
const long items = rdoc.items();
#ifdef DBG
warning_box("Hai trovato %ld righe bello!", items);
#endif
//E crea pure la progind..
TProgind pi(tot_items, TR("Estrazione righe..."), true, true);
for (bool ok = rdoc.move_first(); ok; ok = rdoc.move_next())
{
if (!pi.addstatus(1))
break;
//creazione di un nuovo record da esportare
csv.new_rec("");
csv.set(0, rdoc.get(RDOC_CODNUM));
csv.set(1, rdoc.get(RDOC_ANNO));
csv.set(2, rdoc.get(RDOC_NDOC));
csv.set(3, rdoc.get(RDOC_NRIGA));
csv.set(4, rdoc.get(RDOC_CODART));
csv.set(5, rdoc.get(RDOC_PREZZO));
csv.set(6, rdoc.get(RDOC_UMQTA));
csv.set(7, rdoc.get(RDOC_QTA));
}
csv.save_as(path, fmt_text);
}
#ifdef DBG
xvt_sys_goto_url(path, "open");
#endif
}
void TDichiarazione_CONAI::main_loop()
{
TDichiarazione_CONAI_mask mask;
while (mask.run() == K_ENTER)
{
crea_csv(mask);
}
}
bool TDichiarazione_CONAI::create()
{
if (!has_module(DCAUT))
return error_box(TR("Modulo non autorizzato"));
return TSkeleton_application::create();
}
int tp0900(int argc, char* argv[])
{
TDichiarazione_CONAI dc;
dc.run(argc, argv, TR("Dichiarazione CONAI"));
return 0;
}