diff --git a/cg/cg3800.cpp b/cg/cg3800.cpp new file mode 100755 index 000000000..ae3cd8a06 --- /dev/null +++ b/cg/cg3800.cpp @@ -0,0 +1,219 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "..\cg\cgsaldac.h" +#include "..\ve\velib.h" + +#include "cg3800a.h" +#include "cg3800.h" + + +//=============================================================================================== +//maschera + +class TDouble_fatt_mask: public TAutomask +{ +public: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + + TDouble_fatt_mask():TAutomask("cg3800a") {} + +}; + +bool TDouble_fatt_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ +/* switch (o.dlg()) + { + default: break; + }*/ + return true; +} + + +//=============================================================================================== +//form +class TDouble_fatt_form : public TForm +{ + +protected: + bool validate(TForm_item &cf, TToken_string &s); + +public: + void print(const TMask& m); + TDouble_fatt_form(); + virtual ~TDouble_fatt_form(); +}; + + +bool TDouble_fatt_form::validate(TForm_item &cf, TToken_string &s) +{ +/* if (s == "_NEXTPAG") + { + _curr_pag ++; //aggiorna il contatore pagamenti quando ne trova uno sull'arrayone + return true; + }*/ + return TForm::validate(cf,s); +} + +void TDouble_fatt_form::print(const TMask& m) +{ + TPrint_section& header = section('H', odd_page); + header.find_field(FR_DADATA).set(m.get(F_DADATA)); + header.find_field(FR_ADATA).set(m.get(F_ADATA)); + + TForm::print(); //chiama la vera print dopo aver azzerato il contatore +} + +TDouble_fatt_form::TDouble_fatt_form() :TForm ("cg3800a") +{ +} + +TDouble_fatt_form::~TDouble_fatt_form() +{ +} + + +//=============================================================================================== +//Applicazione + +class TDouble_fatt : public TSkeleton_application +{ + TAssoc_array _movimenti; //assocarray con tutti i movimenti + TPointer_array _duplicati; + + TDouble_fatt_mask* _mask; + TDouble_fatt_form* _form; + +protected: + virtual void main_loop(); + virtual bool create(); + virtual bool destroy(); + + static bool mov_callback(const TRelation& rel, void* pJolly); + void store_mov(const TRectype& mov); + +public: + +}; + + +bool TDouble_fatt::create() +{ + _mask = new TDouble_fatt_mask; + _form = new TDouble_fatt_form(); + + + return TSkeleton_application::create(); +} + +bool TDouble_fatt::destroy() +{ + delete _mask; + delete _form; + return TRUE; +} + +// Mettere in libreria al piu' presto!!!! +typedef bool (*SCAN_FUNC)(const TRelation& rel, void* pJolly); + +bool scan_cursor(TCursor& cur, const char* msg, SCAN_FUNC func, void* pJolly) +{ + TRecnotype items = 0; // Temporarily + TProgind pi(items, msg, true, true); + + { + TWait_cursor hourglass; + items = cur.items(); + } + + bool ok = true; + if (items > 0) + { + cur.freeze(); + pi.setmax(items); + for (cur = 0; cur.pos() < items; ++cur) + { + pi.addstatus(1); + if (pi.iscancelled()) + { + ok = false; + break; + } + if (!func(*cur.relation(), pJolly)) + { + ok = false; + break; + } + } + cur.freeze(false); + } + return ok; +} + +void TDouble_fatt::store_mov(const TRectype& mov) +{ + TString key; + key << mov.get(MOV_CODCF) << '_' << mov.get_date(MOV_DATADOC).year() << '_' << mov.get(MOV_NUMDOC); + const long numreg = mov.get_long(MOV_NUMREG); + + TPointer_array* pa = (TPointer_array*)_movimenti.objptr(key); //elemento dell' assocarray + + if (pa == NULL) //se non c'e' il valore lo aggiungo all'assocarray + { + pa = new TPointer_array; + _movimenti.add(key,pa); + } + pa->add_long(numreg); + if (pa->items() > 1) + _duplicati.add(pa); +} + + +bool TDouble_fatt::mov_callback(const TRelation& rel, void* pJolly) +{ + TDouble_fatt* app = (TDouble_fatt*)pJolly; + + app -> store_mov(rel.curr()); + + return true; +} + + +void TDouble_fatt::main_loop() +{ + TDate d(TODAY); + _mask->set(F_ADATA, d); + d.set_day(1); d.set_month(1); + _mask->set(F_DADATA, d); + + while (_mask->run() == K_ENTER) + { + TRelation rel(LF_MOV); + + TRectype darec(LF_MOV), arec(LF_MOV); + const TDate dataini(1,1,_mask->get_date(F_DADATA).year()-1); + const TDate datafin(31,12,_mask->get_date(F_ADATA).year()+1); + + darec.put(MOV_DATAREG, dataini); + arec.put(MOV_DATAREG, datafin); + + TCursor cur(&rel, "TIPO=='F'", 2, &darec, &arec); + _movimenti.destroy(); + scan_cursor(cur, "Ricerca fatture doppie...", mov_callback, this); + } +} + +int cg3800(int argc, char* argv[]) +{ + TDouble_fatt a; + a.run(argc,argv,TR("Stampa lista fatture doppie")); + return 0; +} diff --git a/cg/cg3800.h b/cg/cg3800.h new file mode 100755 index 000000000..a1dbf2643 --- /dev/null +++ b/cg/cg3800.h @@ -0,0 +1,7 @@ +// campi del form cg3800a.frm + +#define FR_DADATA 11 +#define FR_ADATA 12 + + + diff --git a/cg/cg3800a.frm b/cg/cg3800a.frm new file mode 100755 index 000000000..e00428f37 --- /dev/null +++ b/cg/cg3800a.frm @@ -0,0 +1,159 @@ +#include "cg3800.h" + +SECTION GRAPHICS ODD + +LINEA -1 132 1 +BEGIN + PROMPT 1 5 "@b" +END + +LINEA -1 132 1 +BEGIN + PROMPT 1 7 "@b" +END + +END + +// intestazione generale stampa pagato per commessa +SECTION HEADER ODD 7 + +NUMERO -1 +BEGIN + KEY "Nr. pagina" + PROMPT 1 1 "Pag. " + MESSAGE _PAGENO +END + +STRINGA -1 +BEGIN + KEY "Data" + PROMPT 115 1 "Data " + MESSAGE _TODAY +END + +STRINGA -1 +BEGIN + KEY "Intestazione stampa" + PROMPT 56 2 "@bLISTA FATTURE DOPPIE" +END + +DATA FR_DADATA +BEGIN + KEY "Parametri stampa: data iniziale" + PROMPT 1 3 "@bMovimenti dal " +END + +DATA FR_ADATA +BEGIN + KEY "Parametri stampa: data finale" + PROMPT 40 3 "al " +END + +LINEA -1 132 1 +BEGIN + PROMPT 1 4 "B" +END + +STRINGA -1 +BEGIN + KEY "anno documento" + PROMPT 1 5 "@bANNO" +END + +STRINGA -1 +BEGIN + KEY "numero documento" + PROMPT 6 5 "@bNUM. DOC. " +END + +STRING -1 +BEGIN + KEY "codice fornitore" + PROMPT 18 5 "@bFORNITORE" +END + +STRING -1 +BEGIN + KEY "ragione sociale" + PROMPT 28 5 "@bRAGIONE SOCIALE" +END + +STRING -1 +BEGIN + KEY "numero registrazione" + PROMPT 6 6 "@bNum.Reg." +END + +STRING -1 +BEGIN + KEY "data registrazione" + PROMPT 15 6 "@bData Reg." +END + +STRING -1 +BEGIN + KEY "descrizione registrazione" + PROMPT 26 6 "@bDescrizione" +END + +LINEA -1 132 1 +BEGIN + PROMPT 1 7 "B" +END + +END // section header odd + +// riga di stampa (utilizzata per ogni movimento) +SECTION BODY ODD 1 + +NUMERO FR_ANNODOC 4 +BEGIN + KEY "anno doc" + PROMPT +END + +STRINGA FR_NDOC 7 +BEGIN + KEY "num doc" +END + +NUMERO FR_CODCF 6 +BEGIN + KEY "codice clifo" +END + +STRINGA FR_RAGSOC 50 +BEGIN + KEY "ragsoc" +END + + SECTION REGISTRAZIONI 2 1 1 FILE LF_MOV GROUP LF_MOV-> + + NUMERO FR_NUMREG + BEGIN + KEY "numero registrazione" + PROMPT "" + END + + DATA FR_DATAREG + BEGIN + KEY "data registrazione" + PROMPT "" + END + + STRINGA FR_DESCREG 50 + BEGIN + KEY "descrizione registrazione" + PROMPT "" + END + + END //end section registrazioni + + + +END // section body odd + +SECTION FOOTER ODD 1 +END + +END // form diff --git a/cg/cg3800a.h b/cg/cg3800a.h new file mode 100755 index 000000000..45634f96a --- /dev/null +++ b/cg/cg3800a.h @@ -0,0 +1,6 @@ +#define F_CODDITTA 101 +#define F_RAGSOC 102 +#define F_DADATA 103 +#define F_ADATA 104 + + diff --git a/cg/cg3800a.uml b/cg/cg3800a.uml new file mode 100755 index 000000000..78b0f7e66 --- /dev/null +++ b/cg/cg3800a.uml @@ -0,0 +1,51 @@ +#include "cg3800a.h" + +PAGE "Stampa lista fatture doppie" -1 -1 64 8 + +GROUPBOX DLG_NULL 62 4 +BEGIN + PROMPT 1 0 "@bDitta" +END + +NUMBER F_CODDITTA 5 +BEGIN + PROMPT 2 1 "Codice " + FLAGS "DFR" + USE LF_NDITTE + INPUT CODDITTA F_CODDITTA + OUTPUT F_RAGSOC RAGSOC + CHECKTYPE REQUIRED +END + +STRING F_RAGSOC 50 +BEGIN + PROMPT 2 2 "Rag.Soc. " + FLAGS "D" +END + +DATE F_DADATA +BEGIN + PROMPT 2 4 "Dal " + CHECKTYPE REQUIRED +END + +DATE F_ADATA +BEGIN + PROMPT 2 5 "Al " + VALIDATE DATE_CMP_FUNC >= F_DADATA + WARNING "Data finale non valida" +END + +BUTTON DLG_PRINT 10 2 +BEGIN + PROMPT -12 -1 "" + MESSAGE EXIT,K_ENTER +END + +BUTTON DLG_QUIT 10 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE +ENDMASK