Patch level : 12.00 1286

Files correlati     : sc0.exe
Commento            :

Programma di esportazione partite
This commit is contained in:
Alessandro Bonazzi 2023-10-16 20:45:39 +02:00
parent 9bf716335f
commit ebfb6b49fc
6 changed files with 188 additions and 0 deletions

View File

@ -10,6 +10,7 @@ int main(int argc, char** argv)
case 1: sc0200(argc,argv); break; // Gestione partite case 1: sc0200(argc,argv); break; // Gestione partite
case 2: sc0300(argc, argv); break; // Pareggio partite case 2: sc0300(argc, argv); break; // Pareggio partite
case 3: sc0400(argc, argv); break; // Controllo partite case 3: sc0400(argc, argv); break; // Controllo partite
case 4: sc0500(argc, argv); break; // Controllo partite
default: sc0100(argc,argv); break; // Gestione classica default: sc0100(argc,argv); break; // Gestione classica
} }
return 0; return 0;

View File

@ -2,3 +2,4 @@ int sc0100(int argc, char* argv[]);
int sc0200(int argc, char* argv[]); int sc0200(int argc, char* argv[]);
int sc0300(int argc, char* argv[]); int sc0300(int argc, char* argv[]);
int sc0400(int argc, char* argv[]); int sc0400(int argc, char* argv[]);
int sc0500(int argc, char* argv[]);

145
src/sc/sc0500.cpp Normal file
View File

@ -0,0 +1,145 @@
#include <applicat.h>
#include <mask.h>
#include <progind.h>
#include <textset.h>
#include <relation.h>
#include <reputils.h>
#include "../cg/cgsaldac.h"
#include <nditte.h>
#include <partite.h>
#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;
}

5
src/sc/sc0500.h Normal file
View File

@ -0,0 +1,5 @@
#define F_DATE 101
#define F_DIR 102
#define F_FILE 103

35
src/sc/sc0500a.uml Normal file
View File

@ -0,0 +1,35 @@
#include "sc0500.h"
TOOLBAR "" 0 0 0 2
#include <stdbar.h>
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

View File

@ -25,4 +25,5 @@ Item_04 = "Abbuoni automatici", "sc1 -3", "F"
Item_05 = "Controllo pagamenti doppi", "sc1 -4", "F" Item_05 = "Controllo pagamenti doppi", "sc1 -4", "F"
Item_06 = "Controllo partite chiuse", "sc1 -5", "F" Item_06 = "Controllo partite chiuse", "sc1 -5", "F"
Item_07 = "Controllo partite errate", "sc0 -3", "F" Item_07 = "Controllo partite errate", "sc0 -3", "F"
Item_08 = "ESportazione partite", "sc0 -4", "F"