campo-sirio/ps/pd1890100.cpp
alex c434cad322 Patch level : 4.0 451
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Riportata la versione 3.1 patch 650


git-svn-id: svn://10.65.10.50/trunk@14148 c028cbd2-c16b-5b4b-a496-9718f37d4682
2006-07-11 13:10:51 +00:00

187 lines
5.5 KiB
C++
Executable File

#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 "pd1890.h"
#include "pd1890100.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();
int calcola_esposto(const TRiga_scadenze& scad, const TDate& dataanalisi, const TDate& dataesposto,
TDate& datascad, TImporto& esposto) const;
public:
TMask& mask() { return *_msk; }
TPartite2Euroasis() {};
virtual ~TPartite2Euroasis() {}
};
bool TPartite2Euroasis::create()
{
open_files(LF_SCADENZE, LF_PARTITE, LF_CLIFO, 0);
_msk = new TMask("pd1890100a");
return TSkeleton_application::create();
}
bool TPartite2Euroasis::destroy()
{
delete _msk;
return TSkeleton_application::destroy();
}
int TPartite2Euroasis::calcola_esposto(const TRiga_scadenze& scad, const TDate& dataanalisi, const TDate& dataesposto,
TDate& datascad, TImporto& esposto) const
{
const bool rischio = dataanalisi != dataesposto;
int tipo = scad.get_int(SCAD_TIPOPAG);
datascad = scad.get_date(SCAD_DATASCAD);
for (int i=scad.last(); i>0; i= scad.pred(i))
{
const TRiga_partite& pag = scad.partita().riga(i);
const int tp = pag.get_int(PART_TIPOPAG);
if (tp >= 2 && tp <= 7)
{
tipo = tp;
const TDate datapag = pag.get_date(PART_DATAPAG);
bool is_esposto = FALSE;
if (rischio && datapag > dataesposto && datapag <= dataanalisi)
is_esposto = TRUE;
else
if (datapag > dataanalisi)
is_esposto = TRUE;
if (is_esposto)
{
const char sez = pag.sezione();
const TImporto imp(sez, scad.row(i).get_real(PAGSCA_IMPORTO));
esposto+=imp;
}
if (datapag > datascad)
datascad = datapag;
}
}
return tipo;
}
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->TIPOC == \"C\"", 2); // verificare la chiave
TMask& m = mask();
TConfig config("pd1890100.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 = "pd1890.trr";
scadtrr.custom_path();
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& 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);
const int nriga = recscad.get_int(SCAD_NRIGA);
const int nrata = recscad.get_int(SCAD_NRATA);
const long codcli = recscad.get_long(SCAD_SOTTOCONTO);
if (codcli == 11062)
{
int i = 0;
i++;
}
TPartita partita(recpartita);
const TRiga_scadenze& scad = partita.rata(nriga, nrata);
const TRiga_partite& rigapartite = scad.riga();
TDate datascad = scad.get(SCAD_DATASCAD);
TImporto esposto;
const int tipop = calcola_esposto(scad, dataanalisi, dataesposto, datascad, esposto);
if (!scad.chiusa() || !esposto.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);
if (tipop >= 2 && tipop <= 7)
filescad.put("TIPOPAG", "RB");
else
filescad.put("TIPOPAG", "RD");
filescad.put("DATASCAD", datascad);
filescad.put("IMPORTO", importo.valore());
filescad.put("ESPOSTO", esposto.valore());
err = filescad.write();
}
}
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 pd1890100(int argc, char** argv)
{
TPartite2Euroasis app;
app.run(argc, argv, "Esportazione scadenzario");
return 0;
}