2009-01-20 13:43:25 +00:00
|
|
|
|
#include <Textset.h>
|
|
|
|
|
#include <Applicat.h>
|
|
|
|
|
#include <Automask.h>
|
|
|
|
|
#include <Reprint.h>
|
|
|
|
|
#include "lv0.h"
|
|
|
|
|
#include "lv2700a.h"
|
2009-01-23 10:04:04 +00:00
|
|
|
|
#include <config.h>
|
|
|
|
|
|
2009-01-20 13:43:25 +00:00
|
|
|
|
|
|
|
|
|
class TRiepBolle_recordset: public TCSV_recordset
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
TRiepBolle_recordset(): TCSV_recordset("CSV(\"\t\")") {}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct TStruttura: public TObject
|
|
|
|
|
{
|
|
|
|
|
long _cliente;
|
2009-01-23 10:04:04 +00:00
|
|
|
|
TString _articolo;
|
2009-01-20 13:43:25 +00:00
|
|
|
|
TString _descr;
|
|
|
|
|
TDate _dataDoc;
|
|
|
|
|
int _numeroDoc;
|
|
|
|
|
long _qta;
|
|
|
|
|
TStruttura():_cliente(0),_articolo(""),_descr(""),_dataDoc(""),_numeroDoc(0),_qta(0) {}
|
|
|
|
|
TStruttura(long cliente, TString articolo, TString descr,
|
|
|
|
|
TDate dataDoc, int numeroDoc, long qta):_cliente(cliente),_articolo(articolo),_descr(descr),_dataDoc(dataDoc),_numeroDoc(numeroDoc),_qta(qta) {}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct TStrutturaData: public TObject
|
|
|
|
|
{
|
|
|
|
|
TDate _dataDoc;
|
|
|
|
|
int _numeroDoc;
|
|
|
|
|
int _cliente;
|
|
|
|
|
int _posizione;
|
|
|
|
|
TStrutturaData():_cliente(0),_dataDoc(""),_numeroDoc(0),_posizione(0) {}
|
|
|
|
|
TStrutturaData(int posizione, int cliente,
|
|
|
|
|
TDate dataDoc, int numeroDoc):_posizione(posizione), _dataDoc(dataDoc),_numeroDoc(numeroDoc) {}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TRiepBolle_mask: public TAutomask
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
|
public:
|
|
|
|
|
TRiepBolle_mask():TAutomask("lv2700a"){}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
bool TRiepBolle_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class TRiepBolle_report : public TReport
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool use_mask() { return false; }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class TRiepBolle_app: public TSkeleton_application
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual void main_loop();
|
|
|
|
|
void elabora(const TMask& mask) const;
|
2009-01-23 10:04:04 +00:00
|
|
|
|
TString getQuery(bool isArticolo) const;
|
2009-01-20 13:43:25 +00:00
|
|
|
|
};
|
|
|
|
|
|
2009-01-23 10:04:04 +00:00
|
|
|
|
TString TRiepBolle_app::getQuery(bool isArticolo) const
|
|
|
|
|
{
|
|
|
|
|
/*
|
|
|
|
|
RICHIESTA QUERY:
|
|
|
|
|
estrazione di tutte le bolle in base ai range della parametrica:
|
|
|
|
|
- cliente
|
|
|
|
|
- data
|
|
|
|
|
- zona
|
|
|
|
|
Inoltre estrarre in base alla causale di lavanderia tutte quelle
|
|
|
|
|
righe che non sono di reso (2000@.B2!='X').
|
|
|
|
|
Dalla causale di lavanderia agganciare la causale di magazzino
|
|
|
|
|
consegnata e verificare che abbiano il segno '+' nel campo
|
|
|
|
|
consegnato mese (3000@.S2[37,38] ='+1').
|
|
|
|
|
le bolle sono determinate dal file di configurazione Ditta.ini
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
//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_GEN");
|
|
|
|
|
const TString4 tipodoc = lvini.get("TIPODOC_GEN");
|
|
|
|
|
|
|
|
|
|
select << "USE RDOC KEY 1\n";
|
|
|
|
|
select << "SELECT ((2000@.B2!='X')&&(3000@.S2[37,38] ='+1')&&(DOC.TIPODOC='" << tipodoc << "')&&";
|
|
|
|
|
between << "(BETWEEN(DOC.ZONA,#F_ZONA_FROM,#F_ZONA_FROM))&&(BETWEEN(DOC.DATADOC,#F_DATA_FROM,#F_DATA_TO))&&(BETWEEN(DOC.CODCF,#F_CODCF_FROM,#F_CODCF_TO)))\n";
|
|
|
|
|
|
|
|
|
|
if(isArticolo)
|
|
|
|
|
orderBy << "BY DOC.CODCF CODART DOC.DATADOC NDOC\n";
|
|
|
|
|
else
|
|
|
|
|
orderBy << "BY DOC.CODCF DOC.DATADOC NDOC\n";
|
|
|
|
|
|
|
|
|
|
join << "JOIN DOC TO RDOC ALIAS 1000 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC\n";
|
|
|
|
|
join << "JOIN &LVCAU TO RDOC ALIAS 2000 INTO CODTAB==CODAGG1\n";
|
|
|
|
|
join << "JOIN %CAU TO &LVCAU ALIAS 3000 INTO CODTAB==S2\n";
|
|
|
|
|
|
|
|
|
|
from_ << "FROM CODNUM='" << codnum << "'\n";
|
|
|
|
|
to_ << "TO CODNUM='" << codnum << "'";
|
|
|
|
|
|
|
|
|
|
query << select << between << orderBy << join << from_ << to_;
|
|
|
|
|
|
|
|
|
|
return query;
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-20 13:43:25 +00:00
|
|
|
|
class TRiepilogo: public TArray
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
void add(int count,long cliente, TString articolo, TString descr,
|
|
|
|
|
TDate dataDoc, int numeroDoc, long qta);
|
|
|
|
|
TRiepilogo():TArray(9){}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class TRiepilogoData: public TArray
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
void add(int posizione,int cliente, TDate dataDoc, int numeroDoc);
|
|
|
|
|
TRiepilogoData():TArray(){}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void TRiepilogo::add(int count,long cliente, TString articolo, TString descr,
|
|
|
|
|
TDate dataDoc, int numeroDoc, long qta)
|
|
|
|
|
{
|
|
|
|
|
TStruttura* struttura = new TStruttura(cliente,articolo, descr,dataDoc,numeroDoc,qta);
|
|
|
|
|
TArray::add(struttura,count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TRiepilogoData::add(int posizione,int cliente, TDate dataDoc, int numeroDoc)
|
|
|
|
|
{
|
|
|
|
|
TStrutturaData* strutturaData = new TStrutturaData(posizione,cliente, dataDoc,numeroDoc);
|
|
|
|
|
TArray::add(strutturaData,posizione);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TRiepBolle_app:: elabora(const TMask& mask)const
|
|
|
|
|
{
|
2009-01-23 10:04:04 +00:00
|
|
|
|
TISAM_recordset riep(getQuery(true));
|
2009-01-20 13:43:25 +00:00
|
|
|
|
|
|
|
|
|
//inserire parametri filtri
|
|
|
|
|
riep.set_var("#F_DATA_FROM",mask.get_date(F_DATA_DA));
|
|
|
|
|
riep.set_var("#F_DATA_TO",mask.get_date(F_DATA_A));
|
|
|
|
|
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)));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TRiepilogo riepilogo;
|
|
|
|
|
TRiepilogoData riepilogoData;
|
|
|
|
|
TRiepilogoData riepilogoData2;
|
|
|
|
|
int count = 1;
|
|
|
|
|
|
|
|
|
|
for(bool ok = riep.move_first();ok;ok=riep.move_next())
|
|
|
|
|
{
|
|
|
|
|
TDate dataDoc = riep.get("DOC.DATADOC").as_date();
|
|
|
|
|
long cliente = riep.get("DOC.CODCF").as_int();
|
|
|
|
|
TString articolo = riep.get("CODART").as_string();
|
|
|
|
|
TString descr = riep.get("DESCR").as_string();
|
|
|
|
|
int numeroDoc = riep.get("NDOC").as_int();
|
|
|
|
|
long qta = riep.get("QTA").as_int();
|
|
|
|
|
|
|
|
|
|
riepilogo.add(count,cliente,articolo,descr,dataDoc,numeroDoc,qta);
|
|
|
|
|
count++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TRiepBolle_report rep;
|
|
|
|
|
bool stampa = rep.load("lv2700a");
|
|
|
|
|
TRiepBolle_recordset* riep_set = new TRiepBolle_recordset();
|
|
|
|
|
rep.set_recordset(riep_set);
|
|
|
|
|
|
|
|
|
|
int clienteOld = 0;
|
|
|
|
|
TString articoloOld;
|
|
|
|
|
int contatore = 0;
|
|
|
|
|
|
|
|
|
|
FOR_EACH_ARRAY_ITEM(riepilogo,c,obj)//scandisce clienti e tiene
|
|
|
|
|
//buoni solo quelli valorizzati
|
|
|
|
|
{
|
|
|
|
|
TStruttura& s = *(TStruttura*) obj;
|
|
|
|
|
|
|
|
|
|
if(clienteOld!=s._cliente ||
|
|
|
|
|
articoloOld!=s._articolo)
|
|
|
|
|
{
|
|
|
|
|
riep_set->new_rec();
|
|
|
|
|
|
|
|
|
|
riep_set->set(0,TVariant(long (s._cliente)));//CAMPO DI ROTTURA
|
|
|
|
|
riep_set->set(1,TVariant(long (s._cliente)));
|
|
|
|
|
riep_set->set(2,TVariant(s._articolo));
|
|
|
|
|
riep_set->set(3,TVariant(s._descr));
|
|
|
|
|
|
|
|
|
|
contatore=4;
|
|
|
|
|
|
|
|
|
|
if(clienteOld!=s._cliente)
|
|
|
|
|
{
|
|
|
|
|
//Per ogni cliente creo una struttura di date. <20> necessario
|
|
|
|
|
//per il report.
|
2009-01-23 10:04:04 +00:00
|
|
|
|
TISAM_recordset dateDocAll(getQuery(false));
|
2009-01-20 13:43:25 +00:00
|
|
|
|
|
|
|
|
|
//inserire parametri filtri
|
|
|
|
|
dateDocAll.set_var("#F_DATA_FROM",mask.get_date(F_DATA_DA));
|
|
|
|
|
dateDocAll.set_var("#F_DATA_TO",mask.get_date(F_DATA_A));
|
|
|
|
|
dateDocAll.set_var("#F_CODCF_FROM",TVariant(long (s._cliente)));
|
|
|
|
|
dateDocAll.set_var("#F_CODCF_TO",TVariant(long (s._cliente)));
|
|
|
|
|
dateDocAll.set_var("#F_ZONA_FROM",TVariant(mask.get(F_ZONA)));
|
|
|
|
|
|
|
|
|
|
TDate dateOld;
|
|
|
|
|
int numeroOld=0;
|
|
|
|
|
int cliente=0;
|
|
|
|
|
int posizione = 4;
|
|
|
|
|
|
|
|
|
|
for(bool ok = dateDocAll.move_first();ok;ok=dateDocAll.move_next())
|
|
|
|
|
{
|
|
|
|
|
TDate dataDocTot = dateDocAll.get("DOC.DATADOC").as_date();
|
|
|
|
|
int numeroDocTot = dateDocAll.get("NDOC").as_int();
|
|
|
|
|
int clientDocTot = dateDocAll.get("DOC.CODCF").as_int();
|
|
|
|
|
|
|
|
|
|
if(dateOld !=dataDocTot ||
|
|
|
|
|
numeroOld !=numeroDocTot ||
|
|
|
|
|
cliente!=clientDocTot )
|
|
|
|
|
{
|
|
|
|
|
dateOld=dataDocTot;
|
|
|
|
|
numeroOld=numeroDocTot;
|
|
|
|
|
cliente=clientDocTot;
|
|
|
|
|
riepilogoData.add(posizione,clientDocTot,dataDocTot,numeroDocTot);
|
|
|
|
|
riepilogoData2.add(posizione,clientDocTot,dataDocTot,numeroDocTot);
|
|
|
|
|
posizione=posizione+3;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
clienteOld=s._cliente;
|
|
|
|
|
articoloOld=s._articolo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FOR_EACH_ARRAY_ITEM(riepilogoData,f,obj)
|
|
|
|
|
{
|
|
|
|
|
TStrutturaData& sD = *(TStrutturaData*) obj;
|
|
|
|
|
|
|
|
|
|
//ogni primo record riporto come titolo tutte le date-numero
|
|
|
|
|
if(contatore==4)
|
|
|
|
|
{
|
|
|
|
|
FOR_EACH_ARRAY_ITEM(riepilogoData2,f,obj)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
TStrutturaData& sD2 = *(TStrutturaData*) obj;
|
|
|
|
|
int contatore2 = sD2._posizione;
|
|
|
|
|
|
2009-01-23 10:04:04 +00:00
|
|
|
|
TString tt = sD2._dataDoc;
|
|
|
|
|
TString tt2 = tt.sub(0,5);
|
2009-01-20 13:43:25 +00:00
|
|
|
|
|
|
|
|
|
riep_set->set(contatore2,TVariant(tt2));
|
|
|
|
|
contatore2++;
|
|
|
|
|
riep_set->set(contatore2,TVariant(long (sD2._numeroDoc)));
|
|
|
|
|
contatore2++;
|
|
|
|
|
riep_set->set(contatore2,TVariant(long (0)));
|
|
|
|
|
contatore2++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//posizionamento qta in base alla data-numero
|
|
|
|
|
if(s._dataDoc==sD._dataDoc && s._numeroDoc==sD._numeroDoc)
|
|
|
|
|
{
|
|
|
|
|
contatore = sD._posizione;
|
|
|
|
|
|
2009-01-23 10:04:04 +00:00
|
|
|
|
TString tt = s._dataDoc;
|
|
|
|
|
TString tt2 = tt.sub(0,5);
|
2009-01-20 13:43:25 +00:00
|
|
|
|
|
|
|
|
|
riep_set->set(contatore,TVariant(tt2));
|
|
|
|
|
contatore++;
|
|
|
|
|
riep_set->set(contatore,TVariant(long (s._numeroDoc)));
|
|
|
|
|
contatore++;
|
|
|
|
|
riep_set->set(contatore,TVariant(long (s._qta)));
|
|
|
|
|
contatore++;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TArray* p = (TArray*) obj;
|
|
|
|
|
int e = p->size();
|
|
|
|
|
e=e+1;
|
|
|
|
|
while(72>contatore)
|
|
|
|
|
{
|
|
|
|
|
contatore++;
|
|
|
|
|
contatore++;
|
|
|
|
|
riep_set->set(contatore,TVariant(long (0)));
|
|
|
|
|
contatore++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
contatore++;
|
|
|
|
|
contatore++;
|
|
|
|
|
riep_set->set(contatore,TVariant(long (0)));
|
|
|
|
|
contatore++;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Crea file che contiene il recordset
|
|
|
|
|
//riep_set->save_as("c:\\riepilogoBolla.txt");
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
|
if (b.pages() > 0)
|
|
|
|
|
b.print_or_preview(); // Stampa effettivamente
|
|
|
|
|
else
|
|
|
|
|
warning_box (TR("Nessun record estratto per i parametri inseriti"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TRiepBolle_app::main_loop()
|
|
|
|
|
{
|
|
|
|
|
TRiepBolle_mask m;
|
|
|
|
|
while(m.run()==K_ENTER)
|
|
|
|
|
{
|
|
|
|
|
elabora(m);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int lv2700(int argc, char* argv[])
|
|
|
|
|
{
|
|
|
|
|
TRiepBolle_app app;
|
|
|
|
|
app.run(argc, argv, TR("Stampa Riepilogo Bolle di Lavanderia"));
|
|
|
|
|
return 0;
|
|
|
|
|
}
|