Files correlati : Ricompilazione Demo : [ ] Commento : git-svn-id: svn://10.65.10.50/trunk@14719 c028cbd2-c16b-5b4b-a496-9718f37d4682
254 lines
7.7 KiB
C++
Executable File
254 lines
7.7 KiB
C++
Executable File
#include <applicat.h>
|
|
#include <execp.h>
|
|
#include <config.h>
|
|
#include <mask.h>
|
|
#include <relation.h>
|
|
#include <utility.h>
|
|
#include "..\cg\cgsaldac.h"
|
|
#include "cgp2100a.h"
|
|
#include "mov.h"
|
|
#include "rmov.h"
|
|
#include "doc.h"
|
|
#include "rdoc.h"
|
|
#include "partite.h"
|
|
#include "pagsca.h"
|
|
#include "clifo.h"
|
|
|
|
class TGenera_ord_bon : public TSkeleton_application
|
|
{
|
|
TArray _files;
|
|
TMask *_m;
|
|
void add_totaledoc(TConfig *ordbon,int nrigadoc,const char * tiporiga, const char * codspesa, real & importo);
|
|
protected:
|
|
bool create();
|
|
bool destroy();
|
|
void main_loop();
|
|
void genera_ordini(TCursor & cur);
|
|
public:
|
|
~TGenera_ord_bon ()
|
|
{;}
|
|
};
|
|
|
|
bool TGenera_ord_bon::create()
|
|
{
|
|
_files.add(new TLocalisamfile(LF_PARTITE));
|
|
_files.add(new TLocalisamfile(LF_SCADENZE));
|
|
_files.add(new TLocalisamfile(LF_PAGSCA));
|
|
|
|
_m = new TMask ("cgp2100a.msk");
|
|
return TSkeleton_application::create();
|
|
}
|
|
|
|
bool TGenera_ord_bon::destroy()
|
|
{
|
|
delete _m;
|
|
return TSkeleton_application::destroy();
|
|
}
|
|
|
|
void TGenera_ord_bon::main_loop()
|
|
{
|
|
TConfig params("crpa.ini","Main"); // configurazione bonifici
|
|
_m->set(F_CAUS,params.get("caus"));
|
|
_m->set(F_ABIPRES,params.get("abi_pres"));
|
|
_m->set(F_CABPRES,params.get("cab_pres"));
|
|
if (_m->run() != K_QUIT)
|
|
{
|
|
// build cursor
|
|
TRectype from(LF_RMOV),to(LF_RMOV);
|
|
TRelation *rel= new TRelation(LF_RMOV);
|
|
rel->add(LF_MOV,"NUMREG==NUMREG");
|
|
rel->add(LF_CLIFO,"TIPOCF==TIPOC|CODCF==SOTTOCONTO");
|
|
|
|
from.put(RMV_NUMREG,_m->get(F_FROMREG));
|
|
to.put(RMV_NUMREG,_m->get(F_TOREG));
|
|
TString filter,sortexp;
|
|
if (*_m->get(F_FROMDATA))
|
|
{
|
|
filter << '(' << LF_MOV << "->" << MOV_DATACOMP << ">=" << '"' << _m->get(F_FROMDATA) << '"' << ")";
|
|
filter << "&&";
|
|
}
|
|
if (*_m->get(F_TODATA))
|
|
{
|
|
filter << '(' << LF_MOV << "->" << MOV_DATACOMP << "<=" << '"' << _m->get(F_TODATA) << '"' << ")";
|
|
filter << "&&";
|
|
}
|
|
filter << '(' << LF_RMOV << "->" << RMV_SEZIONE << "==\"D\")";
|
|
filter << "&&";
|
|
filter << '(' << LF_RMOV << "->" << RMV_TIPOC << "==\"F\")";
|
|
filter << "&&";
|
|
filter << "(" <<LF_MOV << "->" << MOV_CODCAUS << "==" << '"'<< _m->get(F_CAUS)<< '"' << ')';
|
|
|
|
sortexp << LF_RMOV << "->" << RMV_SOTTOCONTO << "|" << LF_MOV << "->" << MOV_DATACOMP
|
|
<< "|" << LF_MOV << "->" << MOV_NUMREG;
|
|
|
|
TSorted_cursor movs(rel,sortexp);
|
|
|
|
movs.setfilter(filter,TRUE);
|
|
movs.setregion(from,to);
|
|
genera_ordini(movs);
|
|
}
|
|
}
|
|
void TGenera_ord_bon::genera_ordini(TCursor & cur)
|
|
{
|
|
{
|
|
TString_array transactions;
|
|
list_files("crpat*.ini", transactions);
|
|
FOR_EACH_ARRAY_ROW(transactions, row, name)
|
|
remove(*name);
|
|
}
|
|
TConfig params("crpa.ini","Main"); // configurazione bonifici
|
|
const TString16 tipodoc(params.get("tipodoc"));
|
|
const TString16 codnum(params.get("codnum"));
|
|
const TString16 tiporiga(params.get("tiporiga"));
|
|
const TString16 codspesa(params.get("codspesa"));
|
|
const TDate datadoc(_m->get(F_DATADOC));
|
|
const long firm(get_firm());
|
|
|
|
TString descrmov;
|
|
|
|
TConfig *ordbon=NULL;
|
|
|
|
TPartite_array partite;
|
|
long abi(0),cab(0); // abi e cab di presentazione
|
|
long curr_numreg(-1);
|
|
int curr_numrig;
|
|
long curr_codfor(-1);
|
|
int ntransac=0; // contatore di transazione
|
|
int nrigadoc=0; // contatore di riga
|
|
real totaledoc(ZERO);
|
|
|
|
const long items=cur.items();
|
|
for (long c=0 ;c < items; c++)
|
|
{
|
|
cur = c;
|
|
if (cur.relation()->lfile(LF_RMOV).get_long(RMV_SOTTOCONTO)!=curr_codfor)
|
|
{
|
|
if (curr_codfor >=0)
|
|
{
|
|
if (abi==0)
|
|
{
|
|
abi=_m->get_long(F_ABIPRES);
|
|
cab=_m->get_long(F_CABPRES);
|
|
}
|
|
ordbon->set_paragraph(format("%d",LF_DOC));
|
|
ordbon->set(DOC_CODABIP,abi);
|
|
ordbon->set(DOC_CODCABP,cab);
|
|
add_totaledoc(ordbon,nrigadoc,tiporiga, codspesa, totaledoc);
|
|
delete ordbon;
|
|
if (nrigadoc)
|
|
{
|
|
nrigadoc=0;
|
|
totaledoc=0;
|
|
abi=0;
|
|
cab=0;
|
|
} else
|
|
remove(format("crpat%03d.ini",ntransac));
|
|
}
|
|
curr_codfor=cur.relation()->lfile(LF_RMOV).get_long(RMV_SOTTOCONTO);
|
|
// ciclo sui fornitori
|
|
ntransac++;
|
|
ordbon = new TConfig(format("crpat%03d.ini",ntransac));
|
|
ordbon->set_paragraph("Transaction");
|
|
ordbon->set("Action","INSERT");
|
|
ordbon->set("Mode","AUTO");
|
|
ordbon->set("Firm",firm);
|
|
ordbon->set_paragraph(format("%d",LF_DOC));
|
|
ordbon->set("ANNO",cur.relation()->lfile(LF_MOV).get(MOV_ANNOES));
|
|
ordbon->set("PROVV","D");
|
|
ordbon->set("CODNUM",codnum);
|
|
ordbon->set("TIPODOC",tipodoc);
|
|
ordbon->set("DATADOC",datadoc);
|
|
ordbon->set("TIPOCF","F");
|
|
ordbon->set("CODCF",cur.relation()->lfile(LF_RMOV).get(RMV_SOTTOCONTO));
|
|
ordbon->set(DOC_CODABIA,cur.relation()->lfile(LF_CLIFO).get(CLI_CODABI));
|
|
ordbon->set(DOC_CODCABA,cur.relation()->lfile(LF_CLIFO).get(CLI_CODCAB));
|
|
}
|
|
if (cur.relation()->lfile(LF_MOV).get_long(MOV_NUMREG) != curr_numreg)
|
|
{
|
|
curr_numreg=cur.relation()->lfile(LF_MOV).get_long(MOV_NUMREG);
|
|
partite.destroy();
|
|
partite.add_numreg(curr_numreg);
|
|
|
|
}
|
|
curr_numrig=cur.relation()->lfile(LF_RMOV).get_int(RMV_NUMRIG);
|
|
for (TPartita* game = partite.first(); game; game = partite.next())
|
|
{
|
|
const int r = game->mov2rig(curr_numreg,curr_numrig);
|
|
if (r > 0)
|
|
{
|
|
// immette la riga
|
|
TRiga_partite &rpart = game->riga(r);
|
|
nrigadoc++;
|
|
ordbon->set_paragraph(format("%d,%d",LF_RIGHEDOC, nrigadoc));
|
|
ordbon->set(RDOC_TIPORIGA,tiporiga);
|
|
ordbon->set(RDOC_CODART,codspesa);
|
|
ordbon->set(RDOC_PREZZO,rpart.get(PART_IMPORTO));
|
|
totaledoc+=rpart.get_real(PART_IMPORTO);
|
|
// cerca il riferimento alla fattura per la descrizione
|
|
descrmov.cut(0);
|
|
TPartita & part=rpart.partita();
|
|
const int rigafattura = part.prima_fattura();
|
|
TRiga_partite &rpart_fatt = part.riga(rigafattura);
|
|
const TDate datadocrif=rpart_fatt.get_date(PART_DATADOC);
|
|
const int numdocrif=rpart_fatt.get_int(PART_NUMDOC);
|
|
if (numdocrif)
|
|
descrmov << "Documento" << format(" n.%d ",numdocrif) << "del " << datadocrif;
|
|
|
|
if (descrmov.blank())
|
|
descrmov=rpart.get(PART_DESCR);
|
|
if (descrmov.blank())
|
|
descrmov=cur.relation()->lfile(LF_RMOV).get(RMV_DESCR);
|
|
if (descrmov.blank())
|
|
descrmov=cur.relation()->lfile(LF_MOV).get(MOV_DESCR);
|
|
ordbon->set(RDOC_DESCR,descrmov);
|
|
ordbon->set(RDOC_LIVELLO,rpart.get(PART_NUMPART));
|
|
// aggiunge la banca di presentazione
|
|
if (abi==0)
|
|
{
|
|
const int numrate=rpart_fatt.rate();
|
|
if (numrate)
|
|
{
|
|
abi = rpart_fatt.rata(1).get_long(PAGSCA_CODABIPR);
|
|
cab = rpart_fatt.rata(1).get_long(PAGSCA_CODCABPR);
|
|
}
|
|
}
|
|
}
|
|
} // cicloo partite
|
|
}
|
|
// genera l'ultimo documento
|
|
if (items)
|
|
{
|
|
if (abi==0)
|
|
{
|
|
abi=_m->get_long(F_ABIPRES);
|
|
cab=_m->get_long(F_CABPRES);
|
|
}
|
|
ordbon->set_paragraph(format("%d",LF_DOC));
|
|
ordbon->set(DOC_CODABIP,abi);
|
|
ordbon->set(DOC_CODCABP,cab);
|
|
|
|
add_totaledoc(ordbon,nrigadoc,tiporiga, codspesa, totaledoc);
|
|
delete ordbon;
|
|
}
|
|
TExternal_app gestdoc("ve0.exe -1 -icrpat*.ini ");
|
|
gestdoc.run();
|
|
}
|
|
|
|
void TGenera_ord_bon::add_totaledoc(TConfig *ordbon,int nrigadoc,const char * tiporiga, const char * codspesa, real & importo)
|
|
{
|
|
return;
|
|
nrigadoc++;
|
|
ordbon->set_paragraph(format("%d,%d",LF_RIGHEDOC, nrigadoc));
|
|
ordbon->set(RDOC_TIPORIGA,tiporiga);
|
|
ordbon->set(RDOC_CODART,codspesa);
|
|
ordbon->set(RDOC_PREZZO, importo.string());
|
|
ordbon->set(RDOC_DESCR,"Totale");
|
|
}
|
|
|
|
int cgp2100 (int argc, char** argv)
|
|
{
|
|
TGenera_ord_bon a;
|
|
a.run(argc,argv,"Generazione ordini di bonifico");
|
|
return 0;
|
|
}
|