campo-sirio/sc/scp0100.cpp

186 lines
5.8 KiB
C++
Raw Normal View History

#include <config.h>
#include <currency.h>
#include <execp.h>
#include <mask.h>
#include <printapp.h>
#include <progind.h>
#include <utility.h>
#include "../cg/cgsaldac.h"
#include "../cg/cglib02.h"
#include "scp0.h"
#include "scp0100.h"
#include <clifo.h>
#include <nditte.h>
#include <pconti.h>
class TPartite2Euroasis : public TSkeleton_application
{
TMask* _msk;
protected:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
public:
TMask& mask() { return *_msk; }
TPartite2Euroasis() {};
virtual ~TPartite2Euroasis() {}
};
bool TPartite2Euroasis::create()
{
open_files(LF_SCADENZE, LF_PARTITE, LF_CLIFO, 0);
_msk = new TMask("scp0100a");
return TSkeleton_application::create();
}
bool TPartite2Euroasis::destroy()
{
delete _msk;
return TSkeleton_application::destroy();
}
void TPartite2Euroasis::main_loop()
{
TRelation rel(LF_SCADENZE);
rel.add(LF_PARTITE,"TIPOC==TIPOC|GRUPPO==GRUPPO|CONTO==CONTO|SOTTOCONTO==SOTTOCONTO|ANNO=ANNO|NUMPART==NUMPART",1,0);
rel.add(LF_PAGSCA, "TIPOC==TIPOC|GRUPPO==GRUPPO|CONTO==CONTO|SOTTOCONTO==SOTTOCONTO|ANNO==ANNO|NUMPART==NUMPART|NRIGA==NRIGA|NRATA==NRATA");
//TCursor cur(&rel, "29->PAGATA != \"X\" && 29->TIPOC == \"C\"", 2); // verificare la chiave
TCursor cur(&rel, "29->TIPOC == \"C\"", 2); // verificare la chiave
TMask& m = mask();
TConfig config("scp0100.ini");
TString80 exe = config.get("EXE");
m.set(F_PATH, config.get("PATH"));
while (m.run() != K_QUIT)
{
const TString& path = m.get(F_PATH);
config.set("PATH", path);
TFilename scadname = path;
scadname.ext("dbf");
TFilename scadtrr = "oasis";
scadtrr.ext("trr");
TExternisamfile filescad(scadname, scadtrr);
filescad.zap();
const TDate oggi(TODAY);
TString16 ora;
time_t tempo;
time(&tempo);
const struct tm* d = localtime(&tempo);
ora.format("%02d:%02d:%02d", d->tm_hour, d->tm_min, d->tm_sec);
const TDate dataanalisi = m.get_date(F_DATA);
const int giorni = m.get_int(F_GIORNI);
const TDate dataesposto = dataanalisi - (long) giorni;
//TRectype from(LF_SCADENZE), to(LF_SCADENZE);
//from.put(SCAD_DATASCAD, _datascadi);
//to.put(SCAD_DATASCAD, _datascadf);
//_cur->setregion(from, to);
TRectype& recscad = cur.curr();
const TRectype& recpartita = cur.curr(LF_PARTITE);
const long items = cur.items();
TProgind p(items, "Elaborazione scadenze in corso ...", TRUE, TRUE, 10);
p.setstatus(1);
int err = NOERR;
for (cur=0; cur.pos()<items && !p.iscancelled() && err==NOERR; ++(cur))
{
p.addstatus(1);
TPartita partita(recpartita);
const int nriga = recscad.get_int(SCAD_NRIGA);
const int nrata = recscad.get_int(SCAD_NRATA);
TRiga_scadenze scad = partita.rata(nriga, nrata);
TRiga_partite rigapartite = scad.riga();
const int nrigp = rigapartite.get_int(PART_NRIGA);
const char sez = rigapartite.sezione();
const int last = partita.last();
const TDate datapag = rigapartite.get_date(PART_DATAPAG);
const bool rischio = dataanalisi != dataesposto;
//const bool valuta = FALSE;
//const TRectype & pag = scad.row(nrigp);
//const TImporto imp(sez, pag.get_real(valuta ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO));
TDate data(scad.get(SCAD_DATASCAD));
const int lasts = scad.last();
bool esposto = FALSE;
bool sbf = FALSE;
bool found_pag = TRUE;
for (int p = scad.first(); p <= lasts; p = scad.succ(p))
{
if (p != nrigp)
{
const TRiga_partite & prow = partita.riga(p);
const int tp = prow.get_int(PART_TIPOPAG);
if (tp >= 2 && tp <= 7)
{
const TDate dataprow = prow.get(PART_DATAPAG);
if (dataprow < datapag)
{
data = datapag;
break;
}
}
}
}
if (rischio && data > dataesposto && data <= dataanalisi)
{
esposto = TRUE;
sbf = TRUE;
}
else
if (data > dataanalisi)
esposto = TRUE;
TImporto pagato = scad.importo_pagato(FALSE);
if (!scad.chiusa() || esposto && !pagato.is_zero())
{
TImporto importo = scad.residuo(FALSE);
importo.normalize('D');
filescad.zero();
filescad.put("DATAGEN", oggi);
filescad.put("ORAGEN", ora);
filescad.put("GIORNI", giorni);
filescad.put("DATA", dataanalisi);
filescad.put("CLIENTE", recscad.get(SCAD_SOTTOCONTO));
TString16 tipodoc = " ";
if (rigapartite.is_fattura())
tipodoc = "FV";
else if (rigapartite.is_nota_credito())
tipodoc = "NC";
filescad.put("TIPODOC", tipodoc);
filescad.put("NUMDOC", recpartita.get(PART_NUMDOC));
TString16 strpartita = recpartita.get(PART_ANNO);
strpartita << "/";
strpartita << recpartita.get(PART_NUMPART);
filescad.put("PARTITA", strpartita);
const int tipopag = recscad.get_int(SCAD_TIPOPAG);
if (tipopag >= 2 && tipopag <= 7)
filescad.put("TIPOPAG", "RB");
else
filescad.put("TIPOPAG", "RD");
filescad.put("DATASCAD", recscad.get(SCAD_DATASCAD));
filescad.put("IMPORTO", importo.valore());
filescad.put("ESPOSTO", pagato.valore());
err = filescad.write();
//if (err != NOERR)
// error_box("Errore %d in scrittura file dbf", err);
}
}
if (err == NOERR)
{
if (exe.not_empty())
{
TExternal_app oasis(exe);
if (oasis.can_run())
oasis.run();
}
}
else
error_box("Errore %d in scrittura file dbf. Elaborazione non terminata.", err);
}
}
int scp0100(int argc, char** argv)
{
TPartite2Euroasis app;
app.run(argc, argv, "Esportazione scadenzario");
return 0;
}