campo-sirio/lv/lv2800.cpp
lvietri 7fcbd1557d Patch level :10.0
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :Stampa Venduto 12 mesi


git-svn-id: svn://10.65.10.50/trunk@18175 c028cbd2-c16b-5b4b-a496-9718f37d4682
2009-02-02 14:27:54 +00:00

333 lines
8.9 KiB
C++
Executable File
Raw Blame History

#include <Textset.h>
#include <Applicat.h>
#include <Automask.h>
#include <Reprint.h>
#include "lv0.h"
#include "lv2800a.h"
#include <config.h>
//Stampa Venduto Per Cliente nei 12 Mesi
//lvietri
class TVend_cli_recordset: public TCSV_recordset
{
public:
TVend_cli_recordset(): TCSV_recordset("CSV(\"\t\")") {}
};
struct TStruttura_venduto: public TObject
{
long _cliente;
const TString _articolo;
const TString _descr;
TDate _dataDoc;
int _numeroDoc;
long _qta;
TStruttura_venduto():_cliente(0),_articolo(""),_descr(""),_dataDoc(""),_numeroDoc(0),_qta(0) {}
TStruttura_venduto(long cliente, TString articolo, TString descr,
TDate dataDoc, int numeroDoc,long qta):
_cliente(cliente),_articolo(articolo),
_descr(descr),_dataDoc(dataDoc),_numeroDoc(numeroDoc),_qta(qta) {}
};
class TVend_cli_mask: public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TVend_cli_mask():TAutomask("lv2800a"){}
};
bool TVend_cli_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return true;
}
class TVend_cli_report : public TReport
{
protected:
virtual bool use_mask() { return false; }
};
class TVend_cli_app: public TSkeleton_application
{
protected:
virtual void main_loop();
void elabora(const TMask& mask) const;
TString getQuery() const;
bool ctl(TDate dataInizio,
TDate dataFine,
bool isAnno) const;
bool erroreBox(TString aMsg) const;
};
TString TVend_cli_app::getQuery() const
{
//Stringhe x composizione query
TString query, select, between, orderBy, join, from , to;
//Richiamo parametri della ditta di configurazione
//file Ditta.ini
TConfig lvini(CONFIG_DITTA, "lv");
const TString4 codnum = lvini.get("NUM_FAT");
const TString4 tipodoc = lvini.get("TIPODOC_FAT");
select << "USE RDOC KEY 1\n";
select << "SELECT ((DOC.TIPODOC='" << tipodoc << "')&&";
between << "(BETWEEN(DOC.ZONA,#F_ZONA_FROM,#F_ZONA_FROM))";
between << "&&(BETWEEN(CODART,#F_CODART_FROM,#F_CODART_TO))";
between << "&&(BETWEEN(DOC.DATADOC,#F_DATA_FROM,#F_DATA_TO))";
between << "&&(BETWEEN(DOC.CODCF,#F_CODCF_FROM,#F_CODCF_TO)))\n";
orderBy << "BY DOC.CODCF CODART DOC.DATADOC NDOC\n";
join << "JOIN DOC TO RDOC ALIAS 1000 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC\n";
from << "FROM CODNUM='" << codnum << "'\n";
to << "TO CODNUM='" << codnum << "'";
query << select << between << orderBy << join << from << to;
return query;
}
class TRiepVendCli: public TArray
{
public:
void add(long cliente, TString articolo, TString descr,
TDate dataDoc, int numeroDoc, long qta);
TRiepVendCli():TArray(){}
};
void TRiepVendCli::add(long cliente, TString articolo, TString descr,
TDate dataDoc, int numeroDoc, long qta)
{
TStruttura_venduto* struttura = new TStruttura_venduto(cliente,articolo, descr,dataDoc,numeroDoc,qta);
TArray::add(struttura);
}
/*
Metodo di visualizzazione pop errore
ritorna sempre false.
*/
bool TVend_cli_app::erroreBox(TString aMsg) const
{
error_box (aMsg);
return false;
}
/*
Effettuo Controlli. Ritorna false-Errore se:
- data iniziale vuota
- data finale vuota
- date appartenenti ad anno differente
(msk gestisce controllo se data iniziale <20> maggiore di
quella finale)
*/
bool TVend_cli_app:: ctl(TDate dataInizio,
TDate dataFine,
bool isAnno) const
{
if(!isAnno)
{
int annoInizio = dataInizio.year();
int annoFine = dataFine.year();
if(annoInizio!=annoFine)
{
return erroreBox(TR("le date non fanno parte dello stesso anno!"));;
}
}
return true;
}
//metodo principale di elaborazione
void TVend_cli_app:: elabora(const TMask& mask)const
{
/*
Se i controlli vanno a buon fine, allora
va avanti nella gestione
*/
if(ctl(mask.get_date(F_DATA_DA),
mask.get_date(F_DATA_A),
mask.get_bool(F_CHECK_ANNO)))
{
TISAM_recordset riep(getQuery());
TDate dataDa = mask.get_date(F_DATA_DA);
TDate dataA = mask.get_date(F_DATA_A);
if(mask.get_bool(F_CHECK_ANNO))
{
dataDa.set_day(1);
dataDa.set_month(1);
dataDa.set_year(mask.get_int(F_ANNO));
dataA.set_day(31);
dataA.set_month(12);
dataA.set_year(mask.get_int(F_ANNO));
}
//inserire parametri filtri
riep.set_var("#F_DATA_FROM",dataDa);
riep.set_var("#F_DATA_TO",dataA);
riep.set_var("#F_CODCF_FROM",TVariant(mask.get(F_CODCF_DA)));
riep.set_var("#F_CODCF_TO",TVariant(mask.get(F_CODCF_A)));
riep.set_var("#F_ZONA_FROM",TVariant(mask.get(F_ZONA)));
riep.set_var("#F_ANNO_TO",TVariant(mask.get(F_ANNO)));
riep.set_var("#F_CHECK_ANNO_TO",TVariant(mask.get(F_CHECK_ANNO)));
riep.set_var("#F_CODART_FROM",TVariant(mask.get(F_CODART_FROM)));
riep.set_var("#F_CODART_TO",TVariant(mask.get(F_CODART_TO)));
TRiepVendCli riepilogo;
//inizializzazione variabili da utilizzare nella
//struttura
TDate dataDoc;
TString articolo;
TString descr;
int numeroDoc;
long cliente;
long qta;
for(bool ok = riep.move_first();ok;ok=riep.move_next())
{
dataDoc = riep.get("DOC.DATADOC").as_date();
articolo = riep.get("CODART").as_string();
descr = riep.get("DESCR").as_string();
numeroDoc = riep.get("NDOC").as_int();
cliente = riep.get("DOC.CODCF").as_int();
qta = riep.get("QTA").as_int();
riepilogo.add(cliente,articolo,descr,dataDoc,numeroDoc,qta);
}
//gestione report
TVend_cli_report rep;
bool stampa = rep.load("lv2800a");
TVend_cli_recordset* riep_set = new TVend_cli_recordset();
rep.set_recordset(riep_set);
//inizializzazione variabili
TString articoloOld;
TString descrOld;
int clienteOld = 0;
bool start = true;
int colonna = 0;
//inizializzazione array di quantit<69>
//12 mesi valorizzati inizialmente a 0
int qtaArray[12];
for(int a = 0; a<13; a++) {qtaArray[a] = 0;}
int meseArray = 0;
//scandisce clienti e tiene buoni solo quelli valorizzati
FOR_EACH_ARRAY_ITEM(riepilogo,c,obj)
{
TStruttura_venduto& s = *(TStruttura_venduto*) obj;
//Solo la prima volta setto le variabili altrimenti
//entrerebbe sempre nel metodo creazione record
//in report
if(start)
{
clienteOld=s._cliente;
articoloOld=s._articolo;
start = false;
}
//metodo creazione record in report
if((clienteOld!=s._cliente ||
articoloOld!=s._articolo))
{
riep_set->new_rec();
colonna = 0;
riep_set->set(colonna,TVariant(long (clienteOld)));//CAMPO DI ROTTURA
colonna++;
riep_set->set(colonna,TVariant(long (clienteOld)));
colonna++;
riep_set->set(colonna,TVariant(articoloOld));
colonna++;
riep_set->set(colonna,TVariant(descrOld));
for(int a = 1; a<13; a++)
{
//colonna=3
riep_set->set((colonna+a),TVariant(long (qtaArray[a])));
qtaArray[a] = 0;
}
clienteOld = s._cliente;
articoloOld= s._articolo;
descrOld = s._descr;
}
//Gestione Somma qta in base al mese
meseArray = (s._dataDoc).month();
qtaArray[meseArray] = qtaArray[meseArray] + s._qta;
}
//Stampa Ultimo record se ne ha fatto almeno 1
if(!start)
{
riep_set->new_rec();
colonna = 0;
riep_set->set(colonna,TVariant(long (clienteOld)));//CAMPO DI ROTTURA
colonna++;
riep_set->set(colonna,TVariant(long (clienteOld)));
colonna++;
riep_set->set(colonna,TVariant(articoloOld));
colonna++;
riep_set->set(colonna,TVariant(descrOld));
for(int a = 1; a<13; a++)
{
//colonna=3
riep_set->set((colonna+a),TVariant(long (qtaArray[a])));
qtaArray[a] = 0;
}
}
//Crea file che contiene il recordset
//riep_set->save_as("c:\\riepilogoBolla.txt");
//Se il report esiste..
if(stampa)
{
//carica tutte le variabili del report.
rep.mask2report(mask);
TReport_book b;
bool ok = b.add(rep);// Richiede parametri di stampa in base alla maschera omonima
if (ok)
{
//Se esiste almeno 1 pagina
if (b.pages() > 0)
b.print_or_preview(); // Stampa effettivamente
else
warning_box (TR("Nessun record estratto per i parametri inseriti"));
}
}
}
}
void TVend_cli_app::main_loop()
{
TVend_cli_mask mask;
//Settaggio della data finale come
//31-12-(anno in corso)
TString data = "31-12-";
data << mask.get_int(F_ANNO);
mask.set("#F_DATA_TO",data);
while(mask.run()==K_ENTER)
{
elabora(mask);
}
}
int lv2800(int argc, char* argv[])
{
TVend_cli_app app;
app.run(argc, argv, TR("Stampa Venduto Per Cliente nei 12 Mesi"));
return 0;
}