Files correlati : Ricompilazione Demo : [ ] Commento : resi virtuali i metodi gestione_riferimenti() e riferimenti_in_testa() in TFatturazione_bolle git-svn-id: svn://10.65.10.50/trunk@18511 c028cbd2-c16b-5b4b-a496-9718f37d4682
305 lines
8.9 KiB
C++
Executable File
305 lines
8.9 KiB
C++
Executable File
#include <progind.h>
|
|
|
|
#include "lvlib.h"
|
|
#include "lv2500a.h"
|
|
|
|
#include "lvcondv.h"
|
|
#include "lvrcondv.h"
|
|
|
|
#include "../ve/ve6200.h"
|
|
#include "../ve/ve6200a.h"
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TFatturazione_lavanderie
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TFatturazione_lavanderie:public TFatturazione_bolle
|
|
{
|
|
TDate _data_elab;
|
|
|
|
protected:
|
|
virtual void add_rows(TRiga_documento & rout, TRiga_documento & rin);
|
|
virtual void create_row(TDocumento& doc_out, const TRiga_documento & rin);
|
|
virtual void pre_process_input(TLista_documenti& doc_in) {}
|
|
virtual void post_process_input(TLista_documenti& doc_out) {}
|
|
virtual void post_process_output(TLista_documenti& doc_out);
|
|
virtual bool da_raggruppare(const TRiga_documento & rin);
|
|
virtual bool doc_raggruppabile(const TDocumento & doc) const { return true; }
|
|
virtual bool gestione_riferimenti() const { return true; }
|
|
virtual bool riferimenti_in_testa() const { return true; }
|
|
|
|
public:
|
|
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
|
const TDate& data_elab, bool interattivo = false);
|
|
|
|
TFatturazione_lavanderie(const char* cod);
|
|
~TFatturazione_lavanderie() {}
|
|
};
|
|
|
|
TFatturazione_lavanderie::TFatturazione_lavanderie(const char* cod)
|
|
: TFatturazione_bolle(cod)
|
|
|
|
{
|
|
}
|
|
|
|
bool TFatturazione_lavanderie::da_raggruppare(const TRiga_documento & rin)
|
|
{
|
|
const long clifo = rin.doc().get_long(DOC_CODCF);
|
|
const int indsped = rin.doc().get_int(DOC_CODINDSP);
|
|
TLaundry_contract contr(clifo, indsped, _data_elab);
|
|
const TString80 codart = rin.get(RDOC_CODART);
|
|
const TRectype & rcont = contr.row(codart);
|
|
const int tipoforf = rcont.get_int(LVRCONDV_TIPOFORF);
|
|
|
|
return tipoforf > 1;
|
|
}
|
|
|
|
|
|
void TFatturazione_lavanderie::post_process_output(TLista_documenti& doc_out)
|
|
{
|
|
for (int id = 0; id < doc_out.items(); id++)
|
|
{
|
|
TDocumento& doc = doc_out[id];
|
|
const int rows = doc.physical_rows();
|
|
const long clifo = doc.get_long(DOC_CODCF);
|
|
const int indsped = doc.get_int(DOC_CODINDSP);
|
|
TLaundry_contract contr(clifo,indsped,_data_elab);
|
|
|
|
for (int i = 1; i <= rows; i++)
|
|
{
|
|
TRiga_documento& rout = doc[i];
|
|
const TString80 codart=rout.get(RDOC_CODART);
|
|
const TRectype & rcont=contr.row(codart);
|
|
const TString4 tipodot = rcont.get(LVRCONDV_NOLCIC);
|
|
const TString4 artcli = rcont.get(LVRCONDV_VCARTCLI);
|
|
real dot;
|
|
TArticolo_lavanderie artlav(codart, 'C', clifo, indsped);
|
|
|
|
if (tipodot=="I")
|
|
dot=artlav.get_real("DOTIN");
|
|
else
|
|
dot=artlav.get_real("DOTOD");
|
|
|
|
const int tipoforf = rcont.get_int(LVRCONDV_TIPOFORF);
|
|
|
|
switch (tipoforf)
|
|
{
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO));
|
|
break;
|
|
case 2:
|
|
{
|
|
rout.put(RDOC_QTA, UNO);
|
|
rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_IMPFISART));
|
|
// gestione in base codice per valore fisso ??? tolta la scelta dell'articolo o del cliente
|
|
}
|
|
break;
|
|
case 3:
|
|
{
|
|
int tipolist=contr.get_int(LVCONDV_TIPOLIS);
|
|
|
|
if (tipolist==0)
|
|
rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO));
|
|
else
|
|
{
|
|
TString query;
|
|
query << "USE UMART KEY 2 \n"
|
|
<< "FROM " << "CODART=#CODART UM=#UM \n"
|
|
<< "TO " << "TCODART=#CODART UM=#UM \n";
|
|
|
|
TISAM_recordset recset(query);
|
|
recset.set_var("#CODART",clifo);
|
|
recset.set_var("#UM",rcont.get(LVRCONDV_UM));
|
|
|
|
rout.put(RDOC_PREZZO,recset.get(UMART_PREZZO).as_real());
|
|
}
|
|
|
|
rout.put(RDOC_QTA, dot);
|
|
}
|
|
break;
|
|
case 4:
|
|
{
|
|
rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO));
|
|
const real cicl=rcont.get_real(LVRCONDV_MINCIC)*dot;
|
|
const real qta=rout.get(RDOC_QTA);
|
|
rout.put(RDOC_QTA, cicl > qta ? cicl : qta);
|
|
}
|
|
break;
|
|
case 5:
|
|
{
|
|
rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_VALCONV));
|
|
rout.put(RDOC_QTA, dot*rcont.get_real(LVRCONDV_FORFPERCL));
|
|
}
|
|
break;
|
|
case 6:
|
|
{
|
|
rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO));
|
|
|
|
rout.put(RDOC_QTA, dot);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
void TFatturazione_lavanderie::add_rows(TRiga_documento & rout, TRiga_documento & rin)
|
|
{
|
|
const TString8 causale = rin.get(RDOC_CODAGG1);
|
|
const TRectype& cau = cache().get("&CAU", causale);
|
|
//movimento o meno la dotazione temporanea/odierna a seconda di cosa prevede la causale
|
|
|
|
if (cau.get_bool("B0"))
|
|
{
|
|
const TCausale_magazzino& rit = cached_causale_magazzino(cau.get("S1"));
|
|
const real qta = rit.sgn(s_consmese) * rin.get_real(RDOC_QTA);
|
|
|
|
rout.add(RDOC_QTA, qta);
|
|
|
|
}
|
|
if (cau.get_bool("B1"))
|
|
{
|
|
const TCausale_magazzino& con = cached_causale_magazzino(cau.get("S2"));
|
|
const real qta = con.sgn(s_consmese) * rin.get_real(RDOC_QTA);
|
|
|
|
rout.add(RDOC_QTA, qta);
|
|
}
|
|
}
|
|
|
|
void TFatturazione_lavanderie::create_row(TDocumento& doc_out, const TRiga_documento & rin)
|
|
{
|
|
real qta;
|
|
const TString8 causale = rin.get(RDOC_CODAGG1);
|
|
const TRectype& cau = cache().get("&CAU", causale);
|
|
//movimento o meno la dotazione temporanea/odierna a seconda di cosa prevede la causale
|
|
|
|
if (cau.get_bool("B0"))
|
|
{
|
|
const TCausale_magazzino& rit = cached_causale_magazzino(cau.get("S1"));
|
|
qta += rit.sgn(s_consmese) * rin.get_real(RDOC_QTA);
|
|
}
|
|
if (cau.get_bool("B1"))
|
|
{
|
|
const TCausale_magazzino& con = cached_causale_magazzino(cau.get("S2"));
|
|
qta += con.sgn(s_consmese) * rin.get_real(RDOC_QTA);
|
|
}
|
|
if (qta != ZERO)
|
|
TFatturazione_bolle::create_row(doc_out, rin);
|
|
}
|
|
|
|
bool TFatturazione_lavanderie::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
|
const TDate& data_elab, bool interattivo)
|
|
{
|
|
_data_elab = data_elab;
|
|
return TFatturazione_bolle::elabora(doc_in, doc_out, data_elab, interattivo);
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TFatturazione_msk
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
|
class TFatturazione_msk: public TAutomask
|
|
{
|
|
protected:
|
|
virtual bool on_field_event(TOperable_field& o,TField_event e,long jolly){return true;}
|
|
public:
|
|
TFatturazione_msk();
|
|
};
|
|
|
|
TFatturazione_msk::TFatturazione_msk():TAutomask("lv2500a")
|
|
{
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TFatturazione_lav_app
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TFatturazione_lav_app: public TSkeleton_application
|
|
{
|
|
protected:
|
|
virtual void main_loop();
|
|
};
|
|
|
|
void TFatturazione_lav_app::main_loop()
|
|
{
|
|
TFatturazione_msk msk;
|
|
TLocalisamfile doc(LF_DOC);
|
|
TLocalisamfile rdoc(LF_RIGHEDOC);
|
|
|
|
while (msk.run()!=K_QUIT)
|
|
{
|
|
TString query;
|
|
query << "USE DOC KEY 3 SELECT (TIPOCF==\"C\")&&(BETWEEN(DATADOC,#DADATA,#ADATA))\n"
|
|
<< "BY TIPOCF CODCF DATADOC\n"
|
|
<< "FROM " << "DATADOC=#DADATA PROVV=D ANNO=#ANNO\n"
|
|
<< "TO " << " DATADOC=#ADATA PROVV=D ANNO=#ANNO\n";
|
|
// query << "USE DOC KEY 2 SELECT BETWEEN(DATADOC,#DADATA,#ADATA)\n"
|
|
// << "FROM " << "TIPOCF=C PROVV=D ANNO=#ANNO DATADOC=#DADATA \n"
|
|
// << "TO " << "TIPOCF=C PROVV=D ANNO=#ANNO DATADOC=#ADATA \n";
|
|
|
|
TISAM_recordset recset(query);
|
|
recset.set_var("#DADATA",msk.get_date(F_DADATA));
|
|
recset.set_var("#ADATA",msk.get_date(F_ADATA));
|
|
recset.set_var("#ANNO",long(msk.get_date(F_ADATA).year()));
|
|
|
|
TFatturazione_lavanderie elab(msk.get(F_COD_ELAB));
|
|
TLista_documenti docsin;
|
|
TLista_documenti docsout;
|
|
long lastcli=0;
|
|
const int period=msk.get_int(F_PERFAT);
|
|
const TDate datafat=msk.get_date(F_DATAFAT);
|
|
long indsped;
|
|
|
|
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
|
{
|
|
const long clifo = recset.get(DOC_CODCF).as_int();
|
|
|
|
if (clifo != lastcli)
|
|
{
|
|
if (docsin.items()!=0)
|
|
{
|
|
elab.elabora(docsin, docsout, datafat);
|
|
docsout.write();
|
|
docsout.destroy(-1) ;
|
|
docsin.rewrite();
|
|
docsin.destroy(-1);
|
|
}
|
|
lastcli = clifo;
|
|
}
|
|
|
|
if (elab.is_document_ok(recset.cursor()->curr()))
|
|
{
|
|
indsped = recset.get(DOC_CODINDSP).as_int();
|
|
TLaundry_contract contr(clifo, indsped, datafat);
|
|
const int contrper = contr.get_int(LVCONDV_PERFAT);
|
|
|
|
if (contrper <= period)
|
|
docsin.add(new TDocumento(recset.cursor()->curr()));
|
|
}
|
|
}
|
|
if (docsin.items()!=0)
|
|
{
|
|
elab.elabora(docsin, docsout, datafat);
|
|
docsout.write();
|
|
docsout.destroy(-1);
|
|
docsin.rewrite();
|
|
docsin.destroy(-1);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
int lv2500(int argc, char *argv[])
|
|
{
|
|
TFatturazione_lav_app a;
|
|
a.run (argc, argv, "Fatturazione lavanderie");
|
|
return TRUE;
|
|
}
|