campo-sirio/ci/ci0700.cpp

160 lines
4.0 KiB
C++

#include <applicat.h>
#include <config.h>
#include <execp.h>
#include <recarray.h>
#include <recset.h>
#include <doc.h>
#include <rdoc.h>
#include "../ca/movana.h"
#include "../ca/rmovana.h"
#include <../mg/anamag.h>
#include <../mg/umart.h>
class TCaCi_app : public TSkeleton_application
{
public:
virtual void main_loop();
};
void TCaCi_app::main_loop()
{
const TFilename inia = argv(2) + 2;
if (!inia.exist())
{
cantread_box(inia);
return;
}
const TString4 codnum = ini_get_string(CONFIG_DITTA, "ci", "CODNUMNI");
const TString4 tipodoc = ini_get_string(CONFIG_DITTA, "ci", "TIPODOCNI");
const TString4 tiporiga= ini_get_string(CONFIG_DITTA, "ci", "TIPORIGA", "01");
const TString4 codiva = ini_get_string(CONFIG_DITTA, "ci", "CODIVANI");
if (codnum.blank() || tipodoc.blank())
{
error_box("E' necessario configurare i parametri dei documenti NON IVA in contabilità industriale");
return;
}
TConfig cfga(inia, LF_MOVANA);
const long numregca = cfga.get_long(MOVANA_NUMREG);
const TDate datareg = cfga.get(MOVANA_DATAREG);
const TDate datacomp = cfga.get(MOVANA_DATACOMP);
TDate datadoc = cfga.get(MOVANA_DATADOC);
if (!datadoc.ok())
{
datadoc = datacomp;
if (!datadoc.ok())
datadoc = datareg;
}
const int anno = datadoc.year();
long ndoc = 0L;
if (anno > 0 && codnum.full() && numregca > 0) // dummy test
{
TString filter; filter << "PROVV=D ANNO=" << anno << " CODNUM=" << codnum;
TString query;
query << "USE DOC SELECT NUMREGCA=" << numregca
<< "\nFROM " << filter << "\nTO " << filter;
TISAM_recordset docs(query);
if (docs.move_first())
ndoc = docs.get(DOC_NDOC).as_int();
}
TFilename inid; inid.tempdir(); inid.add("mov_cive.ini");
inid.fremove();
TConfig cfgd(inid, "Transaction");
cfgd.set("Action", ndoc > 0 ? "MODIFY" : "INSERT");
cfgd.set_paragraph("33");
cfgd.set(DOC_PROVV, "D");
cfgd.set(DOC_ANNO, anno);
cfgd.set(DOC_CODNUM, codnum);
cfgd.set(DOC_TIPODOC, tipodoc);
if (ndoc > 0)
cfgd.set(DOC_NDOC, ndoc);
else
cfgd.set(DOC_NUMREGCA, numregca);
cfgd.set(DOC_DATADOC, datadoc);
for (int r = 1; ; r++)
{
TString8 para; para.format("%d,%d", LF_RMOVANA, r);
if (!cfga.set_paragraph(para))
break;
const TString& cms = cfga.get(RMOVANA_CODCMS);
if (cms.full())
{
cfgd.set(DOC_CODCMS, cms);
cfgd.set(DOC_FASCMS, cfga.get(RMOVANA_CODFASE));
cfgd.set(DOC_CODCOSTO, cfga.get(RMOVANA_CODCCOSTO));
break;
}
}
for (int r = 1; ; r++)
{
TString8 para;
para.format("%d,%d", LF_RMOVANA, r);
if (!cfga.set_paragraph(para))
break;
TString80 codart = cfga.get(RMOVANA_CODART);
para.format("%d,%d", LF_RIGHEDOC, r);
cfgd.set_paragraph(para);
cfgd.set(RDOC_PROVV, "D");
cfgd.set(RDOC_ANNO, anno);
cfgd.set(RDOC_CODNUM, codnum);
if (ndoc > 0)
cfgd.set(RDOC_NDOC, ndoc);
cfgd.set(RDOC_NRIGA, r);
cfgd.set(RDOC_TIPORIGA, tiporiga);
cfgd.set(RDOC_CODART, codart);
cfgd.set(RDOC_QTA, 1);
cfgd.set(RDOC_CODIVA, codiva);
cfgd.set(RDOC_PREZZO, cfga.get(RMOVANA_IMPORTO));
cfgd.set(RDOC_CODCMS, cfga.get(RMOVANA_CODCMS));
cfgd.set(RDOC_FASCMS, cfga.get(RMOVANA_CODFASE));
cfgd.set(RDOC_CODCOSTO, cfga.get(RMOVANA_CODCCOSTO));
const TString& descr = cfga.get(RMOVANA_DESCR);
if (descr.full())
cfgd.set(RDOC_DESCR, descr);
else
{
const TString& descart = cache().get(LF_ANAMAG, codart, ANAMAG_DESCR);
if (descart.full())
cfgd.set(RDOC_DESCR, descart);
}
if (codart.full())
{
codart << "|1";
const TString& umart = cache().get(LF_UMART, codart, UMART_UM);
cfgd.set(RDOC_UMQTA, umart);
}
}
cfgd.set_paragraph("");
TString cmd; cmd << "ve0 -0 -i" << inid;
TExternal_app app(cmd);
app.run();
}
int ci0700(int argc, char *argv[])
{
if (argc >= 3)
{
TCaCi_app app;
app.run(argc, argv, TR("Generazione movimento industriale"));
}
return 0;
}