From ebfb6b49fcfbed70fc9220d29335225942bfe881 Mon Sep 17 00:00:00 2001 From: Alessandro Bonazzi Date: Mon, 16 Oct 2023 20:45:39 +0200 Subject: [PATCH] Patch level : 12.00 1286 Files correlati : sc0.exe Commento : Programma di esportazione partite --- src/sc/sc0.cpp | 1 + src/sc/sc0.h | 1 + src/sc/sc0500.cpp | 145 +++++++++++++++++++++++++++++++++++++++++++++ src/sc/sc0500.h | 5 ++ src/sc/sc0500a.uml | 35 +++++++++++ src/sc/scmenu.men | 1 + 6 files changed, 188 insertions(+) create mode 100644 src/sc/sc0500.cpp create mode 100644 src/sc/sc0500.h create mode 100644 src/sc/sc0500a.uml diff --git a/src/sc/sc0.cpp b/src/sc/sc0.cpp index a8a5241c4..08c945314 100755 --- a/src/sc/sc0.cpp +++ b/src/sc/sc0.cpp @@ -10,6 +10,7 @@ int main(int argc, char** argv) case 1: sc0200(argc,argv); break; // Gestione partite case 2: sc0300(argc, argv); break; // Pareggio partite case 3: sc0400(argc, argv); break; // Controllo partite + case 4: sc0500(argc, argv); break; // Controllo partite default: sc0100(argc,argv); break; // Gestione classica } return 0; diff --git a/src/sc/sc0.h b/src/sc/sc0.h index ff313fc84..18a21618e 100755 --- a/src/sc/sc0.h +++ b/src/sc/sc0.h @@ -2,3 +2,4 @@ int sc0100(int argc, char* argv[]); int sc0200(int argc, char* argv[]); int sc0300(int argc, char* argv[]); int sc0400(int argc, char* argv[]); +int sc0500(int argc, char* argv[]); diff --git a/src/sc/sc0500.cpp b/src/sc/sc0500.cpp new file mode 100644 index 000000000..afb66993c --- /dev/null +++ b/src/sc/sc0500.cpp @@ -0,0 +1,145 @@ +#include +#include +#include +#include +#include +#include +#include "../cg/cgsaldac.h" +#include +#include +#include "sc0500.h" + +/////////////////////////////////////////////////////////// +// TEsportazione_partite +/////////////////////////////////////////////////////////// + +class TEsportazione_partite : public TSkeleton_application +{ +protected: + virtual void main_loop(); +}; + +void TEsportazione_partite::main_loop() +{ + TMask m("sc0500a"); + + while (m.run() == K_ENTER) + { + TCursor part(new TRelation(LF_PARTITE)); + TString4 last_tipocf; + int last_gruppo = -1; + int last_conto = -1; + long last_sottoconto = -1L; + int last_anno = -1; + TString last_npart; + const long items = part.items(); + TCSV_recordset out("CSV(\";\")"); + TDate al = m.get_date(F_DATE); + TFilename file = m.get(F_DIR); + TProgress_monitor p(items, "Controllo partite"); + + file.add(m.get(F_FILE)); + file.ext("csv"); + out.create_column("GRUPPO", _intfld); + out.create_column("CONTO", _intfld); + out.create_column("SOTTOCONTO", _longfld); + out.create_column("NUMDOC", _alfafld); + out.create_column("DATADOC", _datefld); + out.create_column("SALDO", _realfld); + out.create_column("SEZIONE", _alfafld); + out.create_column("DATASCAD", _datefld); + part.freeze(); + for (part = 0L; p.addstatus() && part.pos() < items; ++part) + { + const TString4 tipocf = part.curr().get(PART_TIPOCF); + const int gruppo = part.curr().get_int(PART_GRUPPO); + const int conto = part.curr().get_int(PART_CONTO); + const long sottoconto = part.curr().get_long(PART_SOTTOCONTO); + const TString npart = part.curr().get(PART_NUMPART); + const int anno = part.curr().get_int(PART_ANNO); + + if ((tipocf != last_tipocf) || (gruppo != last_gruppo) || + (conto != last_conto) || (sottoconto != last_sottoconto) || + (npart != last_npart) || (anno != last_anno)) + { + last_tipocf = tipocf; + last_gruppo = gruppo; + last_conto = conto; + last_sottoconto = sottoconto; + last_npart = npart; + last_anno = anno; + + TPartita p(part.curr()); + TImporto saldo = p.calcola_saldo_al(false, al); + + if (!saldo.is_zero()) + { + int row = p.prima_fattura(); + + if (row <= 0) + row = p.first(); + + TRiga_partite & riga = p.riga(row); + int gruppo = riga.get_int(PART_GRUPPO); + + out.new_rec(); + if (gruppo == 0) + gruppo = riga.get_int(PART_GRUPPOCL); + out.set("GRUPPO", gruppo); + + int conto = riga.get_int(PART_CONTO); + + if (conto == 0) + conto = riga.get_int(PART_CONTOCL); + out.set("CONTO", conto); + out.set("SOTTOCONTO", riga.get_long(PART_SOTTOCONTO)); + out.set("NUMDOC", riga.get(PART_NUMDOC)); + out.set("DATADOC", riga.get(PART_DATADOC)); + + TString sezione; + + out.set("SALDO", saldo.valore().stringa()); + sezione << saldo.sezione(); + out.set("SEZIONE", sezione); + + TDate data = botime; + + for (int r = row; r <= p.last(); r = p.succ(r)) + { + TRiga_partite & riga = p.riga(r); + + if (riga.is_fattura()) + { + int nrate = riga.rate(); + for (int s = 1; s <= nrate; s++) + { + TRiga_scadenze & scad = riga.rata(s); + + if (!scad.residuo(false).is_zero()) + { + TDate data_scad = scad.get_date(SCAD_DATASCAD); + + if (data_scad <= al && data_scad > data) + data = data_scad; + } + } + } + } + out.set("DATASCAD", data.stringa()); + } + } + } + out.save_as(file, fmt_csv); + } +} + +/////////////////////////////////////////////////////////// +// Main +/////////////////////////////////////////////////////////// + +int sc0500(int argc, char* argv[]) +{ + TEsportazione_partite pp; + pp.run(argc, argv, TR("Esportazione Partite")); + return 0; +} diff --git a/src/sc/sc0500.h b/src/sc/sc0500.h new file mode 100644 index 000000000..aae55a8b0 --- /dev/null +++ b/src/sc/sc0500.h @@ -0,0 +1,5 @@ + +#define F_DATE 101 +#define F_DIR 102 +#define F_FILE 103 + diff --git a/src/sc/sc0500a.uml b/src/sc/sc0500a.uml new file mode 100644 index 000000000..56189f34d --- /dev/null +++ b/src/sc/sc0500a.uml @@ -0,0 +1,35 @@ +#include "sc0500.h" + +TOOLBAR "" 0 0 0 2 + +#include + +ENDPAGE + +PAGE "Esportazione partite" 0 0 0 0 + +DATE F_DATE +BEGIN + PROMPT 2 2 "Saldo dele partite sino al " + HELP "Data Sino a cui eliminare le partite" + CHECKTYPE REQUIRED + WARNING "Si deve specificare la data limite per le partite" + FLAGS "A" +END + +STRING F_DIR 50 +BEGIN + PROMPT 2 4 "Cartella " + WARNING "Manca la cartella di output" + CHECKTYPE REQUIRED + DSELECT +END + +STRING F_FILE 20 +BEGIN + PROMPT 2 6 "File " + WARNING "Manca il file di output" + CHECKTYPE REQUIRED +END + +ENDMASK diff --git a/src/sc/scmenu.men b/src/sc/scmenu.men index 75f32bb68..56fc5af88 100755 --- a/src/sc/scmenu.men +++ b/src/sc/scmenu.men @@ -25,4 +25,5 @@ Item_04 = "Abbuoni automatici", "sc1 -3", "F" Item_05 = "Controllo pagamenti doppi", "sc1 -4", "F" Item_06 = "Controllo partite chiuse", "sc1 -5", "F" Item_07 = "Controllo partite errate", "sc0 -3", "F" +Item_08 = "ESportazione partite", "sc0 -4", "F"