2009-01-13 11:24:23 +00:00
|
|
|
|
#include <applicat.h>
|
|
|
|
|
#include <automask.h>
|
|
|
|
|
#include <reprint.h>
|
2009-03-12 12:15:09 +00:00
|
|
|
|
#include <textset.h>
|
|
|
|
|
|
2009-12-14 16:56:24 +00:00
|
|
|
|
#include "lvlib.h"
|
2009-01-12 16:16:11 +00:00
|
|
|
|
#include "lv2300a.h"
|
|
|
|
|
|
|
|
|
|
class TGiri_recordset: public TCSV_recordset
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
TGiri_recordset(): TCSV_recordset("CSV(\"\t\")") {}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//Variabili del singolo giorno contrenenti il codice cliente;
|
|
|
|
|
//ordine fermata e eventualmente l'ora
|
|
|
|
|
struct TPassaggio: public TObject
|
|
|
|
|
{
|
|
|
|
|
long _codcf;
|
|
|
|
|
int _ordfer;
|
|
|
|
|
int _ora;
|
2009-01-13 11:24:23 +00:00
|
|
|
|
TString4 _iter;
|
|
|
|
|
|
|
|
|
|
TPassaggio() :_codcf(0),_ordfer(0),_ora(0) {}
|
|
|
|
|
TPassaggio(long codcf, int ordfer, int ora, const TString& iter) :_codcf(codcf),_ordfer(ordfer),_ora(ora),_iter(iter) {}
|
2009-01-12 16:16:11 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class TPassaggi: public TArray
|
|
|
|
|
{
|
|
|
|
|
int _count;
|
|
|
|
|
public:
|
|
|
|
|
void add(TPassaggio* p);
|
|
|
|
|
TPassaggio& passaggio(int p);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
TPassaggio& TPassaggi:: passaggio(int p)
|
|
|
|
|
{
|
|
|
|
|
TPassaggio* h = (TPassaggio*)objptr(p);
|
|
|
|
|
|
|
|
|
|
if(h==NULL)
|
|
|
|
|
{
|
|
|
|
|
h = new TPassaggio();
|
|
|
|
|
TArray::add(h,p);
|
|
|
|
|
}
|
|
|
|
|
return *h;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TPassaggi::add(TPassaggio* p)
|
|
|
|
|
{
|
|
|
|
|
const int of = p->_ordfer;
|
|
|
|
|
if(of>0 && of<1000)
|
|
|
|
|
{
|
|
|
|
|
int first=0;
|
|
|
|
|
int last=_count-1;
|
|
|
|
|
int guess=0;
|
|
|
|
|
while(first<=last)
|
|
|
|
|
{
|
|
|
|
|
guess=(first+last)/2;
|
|
|
|
|
TPassaggio& h = passaggio(guess);
|
|
|
|
|
if(h._ordfer==p->_ordfer)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
if(h._ordfer>p->_ordfer)
|
|
|
|
|
last=guess-1;
|
|
|
|
|
else
|
|
|
|
|
first=guess+1;
|
|
|
|
|
}
|
|
|
|
|
TArray::insert(p,guess);
|
|
|
|
|
_count++;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
TArray::add(p);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2009-03-12 12:15:09 +00:00
|
|
|
|
//Tutti i passaggi settimanali di un singolo itinerario
|
2009-01-12 16:16:11 +00:00
|
|
|
|
class TSettimana: public TArray
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
void add(int g,TPassaggio* p);
|
|
|
|
|
TPassaggio& passaggio(int g, int p);//giorno, fermata
|
|
|
|
|
int passaggi(int g) const;
|
|
|
|
|
int passaggi() const;
|
|
|
|
|
TSettimana():TArray(7){}//7 gg = settimana
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//Tutti i records all'interno del giorno
|
|
|
|
|
int TSettimana::passaggi(int g) const
|
|
|
|
|
{
|
|
|
|
|
int n=0;
|
|
|
|
|
TArray* p= (TArray* ) objptr(g);
|
|
|
|
|
if(p!=NULL) n=p->items();
|
|
|
|
|
|
|
|
|
|
return n;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Ritorno il numero di elementi con + passaggi
|
|
|
|
|
int TSettimana::passaggi() const
|
|
|
|
|
{
|
|
|
|
|
int n=0;
|
|
|
|
|
FOR_EACH_ARRAY_ITEM((*this), i, obj)
|
|
|
|
|
{
|
|
|
|
|
TArray* p = (TArray*) obj;
|
|
|
|
|
const int e = p->items();
|
|
|
|
|
if(e>n) n=e;
|
|
|
|
|
}
|
|
|
|
|
return n;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TSettimana::add(int g,TPassaggio* p)
|
|
|
|
|
{
|
|
|
|
|
TPassaggi* a= (TPassaggi*) objptr(g);
|
|
|
|
|
if(a==NULL)
|
|
|
|
|
{
|
|
|
|
|
a=new TPassaggi();
|
|
|
|
|
TArray::add(a,g);
|
|
|
|
|
}
|
|
|
|
|
a->add(p);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TPassaggio& TSettimana ::passaggio(int g,int p)
|
|
|
|
|
{
|
|
|
|
|
TPassaggi* a= (TPassaggi*) objptr(g);
|
|
|
|
|
if(a==NULL)
|
|
|
|
|
{
|
|
|
|
|
a=new TPassaggi();
|
|
|
|
|
TArray::add(a,g);
|
|
|
|
|
}
|
|
|
|
|
return a->passaggio(p);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TItinerari: public TArray
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
void add(long i,int g,TPassaggio* p);
|
|
|
|
|
void add(long i,int g,long codcf, int ordfer, int ora,TString iter);
|
|
|
|
|
TSettimana& settimana(long codIti);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void TItinerari::add(long i,int g,TPassaggio* p)
|
|
|
|
|
{
|
|
|
|
|
settimana(i).add(g,p);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TItinerari::add(long i,int g,long codcf, int ordfer, int ora, TString iter)
|
|
|
|
|
{
|
|
|
|
|
TPassaggio* p = new TPassaggio(codcf,ordfer,ora,iter);
|
|
|
|
|
add(i,g,p);
|
|
|
|
|
}
|
|
|
|
|
TSettimana& TItinerari::settimana(long codIti)
|
|
|
|
|
{
|
2009-01-13 11:24:23 +00:00
|
|
|
|
TSettimana* a = (TSettimana*)objptr(codIti);
|
2009-01-12 16:16:11 +00:00
|
|
|
|
if(a==NULL)
|
|
|
|
|
{
|
2009-01-13 11:24:23 +00:00
|
|
|
|
a = new TSettimana;
|
2009-01-12 16:16:11 +00:00
|
|
|
|
TArray::add(a,codIti);
|
|
|
|
|
}
|
|
|
|
|
return *a;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class TGiri_mask: public TAutomask
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
|
public:
|
|
|
|
|
TGiri_mask():TAutomask("lv2300a"){}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
bool TGiri_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2009-12-18 11:42:00 +00:00
|
|
|
|
class TGiri_report : public TLV_report
|
2009-01-12 16:16:11 +00:00
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool use_mask() { return false; }
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
TGiri_report(bool settimanale) { load(settimanale ? "lv2300a" : "lv2200z"); }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class TGiri_app: public TSkeleton_application
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual void main_loop();
|
|
|
|
|
void elabora(const TMask& mask) const;
|
|
|
|
|
};
|
|
|
|
|
|
2009-01-13 11:24:23 +00:00
|
|
|
|
void TGiri_app::elabora(const TMask& mask) const
|
2009-01-12 16:16:11 +00:00
|
|
|
|
{
|
|
|
|
|
TISAM_recordset giri("USE LVRCONSPLAN KEY 2\n"
|
|
|
|
|
"SELECT (BETWEEN(CODITI,#FROM_CODITI,#TO_CODITI))"
|
|
|
|
|
"&&(BETWEEN(CODCF,#FROM_CODCF,#TO_CODCF))"
|
|
|
|
|
"&&(BETWEEN(CODAUT,#FROM_CODAUT,#TO_CODAUT))\n"
|
|
|
|
|
"FROM DTCONS=#FROM_DATA\n "
|
|
|
|
|
"TO DTCONS=#TO_DATA"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
//inserire parametri filtri
|
|
|
|
|
giri.set_var("#FROM_DATA",mask.get_date(F_DATA_FROM));
|
|
|
|
|
giri.set_var("#TO_DATA",mask.get_date(F_DATA_TO));
|
|
|
|
|
giri.set_var("#FROM_CODITI", TVariant(mask.get(F_CODITI_FROM)));
|
|
|
|
|
giri.set_var("#TO_CODITI",TVariant(mask.get(F_CODITI_TO)));
|
|
|
|
|
giri.set_var("#FROM_CODAUT",TVariant(mask.get(F_CODAUT_FROM)));
|
|
|
|
|
giri.set_var("#TO_CODAUT",TVariant(mask.get(F_CODAUT_TO)));
|
|
|
|
|
giri.set_var("#FROM_CODCF",TVariant(mask.get(F_CODCF_FROM)));
|
|
|
|
|
giri.set_var("#TO_CODCF",TVariant(mask.get(F_CODCF_TO)));
|
2009-12-14 08:02:55 +00:00
|
|
|
|
giri.set_var("#F_CHECK_MNEM",TVariant(mask.get(F_CHECK_MNEM_TO)));
|
2009-01-12 16:16:11 +00:00
|
|
|
|
|
|
|
|
|
TItinerari iti;
|
|
|
|
|
|
|
|
|
|
for(bool ok = giri.move_first();ok;ok=giri.move_next())
|
|
|
|
|
{
|
|
|
|
|
TDate giorno = giri.get("DTCONS").as_date();
|
|
|
|
|
int wday = giorno.wday();//1=luned<65>
|
|
|
|
|
long itinerario=giri.get("CODITI").as_int();
|
|
|
|
|
TString iter=giri.get("CODITI").as_string();
|
|
|
|
|
long cliente=giri.get("CODCF").as_int();
|
|
|
|
|
int ordfer=giri.get("ORDFER").as_int();
|
|
|
|
|
int ora = 0;//in attesa che venga inserito
|
|
|
|
|
|
|
|
|
|
iti.add(itinerario,wday,cliente,ordfer,ora,iter);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TGiri_report r(true);
|
|
|
|
|
TGiri_recordset* giri_set = new TGiri_recordset();
|
|
|
|
|
r.set_recordset(giri_set);
|
|
|
|
|
FOR_EACH_ARRAY_ITEM(iti,i,obj)//scandisce itinerario e tiene
|
|
|
|
|
//buoni solo quelli valorizzati
|
|
|
|
|
{
|
|
|
|
|
TSettimana& s = *(TSettimana*) obj;
|
|
|
|
|
const int max = s.passaggi();
|
|
|
|
|
|
|
|
|
|
for(int j=0; j<max;j++)
|
|
|
|
|
{
|
|
|
|
|
giri_set->new_rec();
|
|
|
|
|
|
|
|
|
|
TString4 str_iti;
|
|
|
|
|
str_iti.format("%03d", i);
|
|
|
|
|
giri_set->set(0,TVariant(str_iti));
|
|
|
|
|
|
|
|
|
|
for(int g=1; g<=7;g++)
|
|
|
|
|
{
|
|
|
|
|
const TPassaggio& pass = s.passaggio(g,j);
|
|
|
|
|
const int column = (g-1)*3+1;
|
|
|
|
|
|
|
|
|
|
giri_set->set(column,pass._codcf);
|
|
|
|
|
giri_set->set(column + 1,TVariant(long (pass._ordfer)));
|
|
|
|
|
giri_set->set(column + 2,TVariant(long (pass._ora)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-13 11:24:23 +00:00
|
|
|
|
// riporta tutte le variabili del report.
|
|
|
|
|
const TString_array& vars = giri.variables();
|
|
|
|
|
FOR_EACH_ARRAY_ROW(vars, v, var)
|
|
|
|
|
{
|
|
|
|
|
const char* varname = var->get(0);
|
|
|
|
|
giri_set->set_var(varname, giri.get_var(varname), true);
|
|
|
|
|
}
|
2009-01-12 16:16:11 +00:00
|
|
|
|
|
|
|
|
|
TReport_book b;
|
|
|
|
|
bool ok = b.add(r);// 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 TGiri_app::main_loop()
|
|
|
|
|
{
|
|
|
|
|
TGiri_mask m;
|
|
|
|
|
while(m.run()==K_ENTER)
|
|
|
|
|
{
|
|
|
|
|
if(m.get(F_CHOICE)=="S")
|
|
|
|
|
{
|
2009-01-13 11:24:23 +00:00
|
|
|
|
elabora(m); //Stampa Giro Settimanale
|
2009-01-12 16:16:11 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2009-01-13 11:24:23 +00:00
|
|
|
|
TGiri_report r(false); //Stampa Giro Giornaliero
|
2009-01-30 10:26:09 +00:00
|
|
|
|
r.mask2report(m);
|
2009-01-12 16:16:11 +00:00
|
|
|
|
TReport_book b;
|
|
|
|
|
bool ok = b.add(r); // Richiede parametri di stampa in base alla maschera omonima
|
|
|
|
|
if (ok)
|
2009-01-13 11:24:23 +00:00
|
|
|
|
{
|
|
|
|
|
if (b.pages() > 0)
|
2009-01-12 16:16:11 +00:00
|
|
|
|
b.print_or_preview(); // Stampa effettivamente
|
|
|
|
|
else
|
|
|
|
|
warning_box (TR("Nessun record estratto per i parametri inseriti"));
|
2009-01-13 11:24:23 +00:00
|
|
|
|
}
|
2009-01-12 16:16:11 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-09-12 13:30:15 +00:00
|
|
|
|
|
|
|
|
|
int lv2300(int argc, char* argv[])
|
|
|
|
|
{
|
2009-01-12 16:16:11 +00:00
|
|
|
|
TGiri_app app;
|
|
|
|
|
app.run(argc, argv, TR("Stampa Giri"));
|
2008-09-12 13:30:15 +00:00
|
|
|
|
return 0;
|
2009-01-12 16:16:11 +00:00
|
|
|
|
}
|