Patch level : 10.0 256

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Pirmo commit della fatturazione lavanderie


git-svn-id: svn://10.65.10.50/trunk@18491 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2009-03-11 01:17:10 +00:00
parent 446afed179
commit 46d0d59f8d
5 changed files with 170 additions and 151 deletions

View File

@ -22,169 +22,181 @@ class TFatturazione_lavanderie:public TFatturazione_bolle
protected: protected:
virtual void add_rows(TRiga_documento & rout, TRiga_documento & rin); virtual void add_rows(TRiga_documento & rout, TRiga_documento & rin);
virtual void create_row(TDocumento& doc_out, const TRiga_documento & rin); virtual void create_row(TDocumento& doc_out, const TRiga_documento & rin);
real fat_lav_pre(TRiga_documento & rin, const real& qta); virtual void pre_process_input(TLista_documenti& doc_in) {}
virtual void post_process(TDocumento & doc); 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; }
public: public:
TFatturazione_lavanderie(const char* cod);
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo = false); const TDate& data_elab, bool interattivo = false);
TFatturazione_lavanderie(const char* cod);
~TFatturazione_lavanderie() {}
}; };
TFatturazione_lavanderie::TFatturazione_lavanderie(const char* cod) TFatturazione_lavanderie::TFatturazione_lavanderie(const char* cod)
: TFatturazione_bolle(cod) : TFatturazione_bolle(cod)
{ {
} }
bool TFatturazione_lavanderie::da_raggruppare(const TRiga_documento & rin)
real TFatturazione_lavanderie::fat_lav_pre(TRiga_documento & rin, const real& qta)
{ {
const TString80 codart=rin.get(RDOC_CODART); const long clifo = rin.doc().get_long(DOC_CODCF);
const long clifo=rin.doc().get_long(DOC_CODCF); const int indsped = rin.doc().get_int(DOC_CODINDSP);
const int indsped=rin.doc().get_int(DOC_CODINDSP); TLaundry_contract contr(clifo, indsped, _data_elab);
const TString8 causale=rin.get(RDOC_CODAGG1); const TString80 codart = rin.get(RDOC_CODART);
const TRectype & rcont = contr.row(codart);
real new_qta; const int tipoforf = rcont.get_int(LVRCONDV_TIPOFORF);
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"));
int sgn_rit = rit.sgn(s_consmese);
}*/
if (cau.get_bool("B1"))
{
const TCausale_magazzino& con = cached_causale_magazzino(cau.get("S2"));
int sgn_con = con.sgn(s_consmese);
new_qta=sgn_con*qta;
}
TLaundry_contract contr(clifo,indsped,_data_elab);
const TRectype & rcont=contr.row(codart);
const TString4 tipodot=rcont.get(LVRCONDV_NOLCIC);
const TString4 artcli=rcont.get(LVRCONDV_VCARTCLI);
const real dot;
TArticolo_lavanderie artlav(codart,'C',clifo,indsped);
return new_qta;
return tipoforf > 1;
} }
void TFatturazione_lavanderie::post_process(TDocumento & doc)
void TFatturazione_lavanderie::post_process_output(TLista_documenti& doc_out)
{ {
const int rows = doc.physical_rows(); for (int id = 0; id < doc_out.items(); id++)
for (int i = 1; i <= rows; i++) {
{ TDocumento& doc = doc_out[id];
TRiga_documento& rout = doc[i]; const int rows = doc.physical_rows();
const TString80 codart=rout.get(RDOC_CODART); const long clifo = doc.get_long(DOC_CODCF);
const long clifo=rout.doc().get_long(DOC_CODCF); const int indsped = doc.get_int(DOC_CODINDSP);
const int indsped=rout.doc().get_int(DOC_CODINDSP); TLaundry_contract contr(clifo,indsped,_data_elab);
TLaundry_contract contr(clifo,indsped,_data_elab); for (int i = 1; i <= rows; i++)
const TRectype & rcont=contr.row(codart); {
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);
const TString4 tipodot=rcont.get(LVRCONDV_NOLCIC); if (tipodot=="I")
const TString4 artcli=rcont.get(LVRCONDV_VCARTCLI); dot=artlav.get_real("DOTIN");
real dot; else
TArticolo_lavanderie artlav(codart,'C',clifo,indsped); 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 (tipodot=="I") if (tipolist==0)
dot=artlav.get_real("DOTIN"); rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO));
else else
dot=artlav.get_real("DOTOD"); {
TString query;
int tipoforf=rcont.get_int(LVRCONDV_TIPOFORF); query << "USE UMART KEY 2 \n"
<< "FROM " << "CODART=#CODART UM=#UM \n"
switch (tipoforf) << "TO " << "TCODART=#CODART UM=#UM \n";
{
case 0: TISAM_recordset recset(query);
break; recset.set_var("#CODART",clifo);
case 1: recset.set_var("#UM",rcont.get(LVRCONDV_UM));
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,recset.get(UMART_PREZZO).as_real());
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); rout.put(RDOC_QTA, dot);
} }
break; break;
case 4: default:
{ break;
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) void TFatturazione_lavanderie::add_rows(TRiga_documento & rout, TRiga_documento & rin)
{ {
const real qta=rin.get_real(RDOC_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
rout.add(RDOC_QTA, fat_lav_pre(rin,qta) ); 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) void TFatturazione_lavanderie::create_row(TDocumento& doc_out, const TRiga_documento & rin)
{ {
TFatturazione_bolle::create_row(doc_out, 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, bool TFatturazione_lavanderie::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo) const TDate& data_elab, bool interattivo)
{ {
_data_elab=data_elab; _data_elab = data_elab;
bool ok=TFatturazione_bolle::elabora(doc_in, doc_out, data_elab, interattivo); return TFatturazione_bolle::elabora(doc_in, doc_out, data_elab, interattivo);
return ok;
} }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -217,65 +229,67 @@ protected:
void TFatturazione_lav_app::main_loop() void TFatturazione_lav_app::main_loop()
{ {
TFatturazione_msk msk; TFatturazione_msk msk;
TLocalisamfile doc(LF_DOC);
TLocalisamfile rdoc(LF_RIGHEDOC);
while (msk.run()!=K_QUIT) while (msk.run()!=K_QUIT)
{ {
TString query; TString query;
query << "USE DOC KEY 2 SELECT BETWEEN(DATADOC,#DADATA,#ADATA)\n" query << "USE DOC KEY 3 SELECT (TIPOCF==\"C\")&&(BETWEEN(DATADOC,#DADATA,#ADATA))\n"
<< "FROM " << "TIPOCF=C PROVV=D ANNO=#ANNO DATADOC=#DADATA \n" << "BY TIPOCF CODCF DATADOC\n"
<< "TO " << "TIPOCF=C PROVV=D ANNO=#ANNO DATADOC=#ADATA \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); TISAM_recordset recset(query);
recset.set_var("#DADATA",msk.get_date(F_DADATA)); recset.set_var("#DADATA",msk.get_date(F_DADATA));
recset.set_var("#ADATA",msk.get_date(F_ADATA)); recset.set_var("#ADATA",msk.get_date(F_ADATA));
recset.set_var("#ANNO",long(msk.get_date(F_ADATA).year())); recset.set_var("#ANNO",long(msk.get_date(F_ADATA).year()));
TFatturazione_lavanderie elab(msk.get(F_CODICE_ELAB)); TFatturazione_lavanderie elab(msk.get(F_COD_ELAB));
TLista_documenti docsin; TLista_documenti docsin;
TLista_documenti docsout; TLista_documenti docsout;
long lastcli=0; long lastcli=0;
const int period=msk.get_int(F_PERFAT); const int period=msk.get_int(F_PERFAT);
const TDate datafat=msk.get_date(F_DATAFAT); const TDate datafat=msk.get_date(F_DATAFAT);
long indsped; long indsped;
for (bool ok=recset.move_first(); ok; ok=recset.move_next()) for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{ {
const long clifo=recset.get(DOC_CODCF).as_int(); const long clifo = recset.get(DOC_CODCF).as_int();
if (clifo!=lastcli) if (clifo != lastcli)
{ {
if (docsin.items()!=0) if (docsin.items()!=0)
{ {
elab.elabora(docsin,docsout,datafat); elab.elabora(docsin, docsout, datafat);
docsout.write(); docsout.write();
docsout.destroy(-1) ; docsout.destroy(-1) ;
docsin.rewrite(); docsin.rewrite();
docsin.destroy(-1); docsin.destroy(-1);
// gestire qui salvataggio fatture
} }
lastcli=clifo; lastcli = clifo;
} }
if (elab.is_document_ok(recset.cursor()->curr())) if (elab.is_document_ok(recset.cursor()->curr()))
{ {
indsped=recset.get(DOC_CODINDSP).as_int(); indsped = recset.get(DOC_CODINDSP).as_int();
TLaundry_contract contr(clifo,indsped,datafat); TLaundry_contract contr(clifo, indsped, datafat);
int contrper=contr.get_int(LVCONDV_PERFATT); const int contrper = contr.get_int(LVCONDV_PERFAT);
if (contrper<=period) if (contrper <= period)
{
docsin.add(new TDocumento(recset.cursor()->curr())); docsin.add(new TDocumento(recset.cursor()->curr()));
}
} }
} }
if (docsin.items()!=0) if (docsin.items()!=0)
{ {
elab.elabora(docsin,docsout,datafat); elab.elabora(docsin, docsout, datafat);
docsout.write(); docsout.write();
docsout.destroy(-1); docsout.destroy(-1);
docsin.rewrite(); docsin.rewrite();
docsin.destroy(-1); docsin.destroy(-1);
// gestire qui salvataggio fatture
} }
} }

View File

@ -1,4 +1,4 @@
#include "lv2600a.h" #include "lv2500a.h"
TOOLBAR "" 0 0 0 2 TOOLBAR "" 0 0 0 2
#include <elabar.h> #include <elabar.h>

View File

@ -16,7 +16,7 @@
#define LVCONDV_STPRZBOL "STPRZBOL" #define LVCONDV_STPRZBOL "STPRZBOL"
#define LVCONDV_CONTSPOR "CONTSPOR" #define LVCONDV_CONTSPOR "CONTSPOR"
#define LVCONDV_DOCCP "DOCCP" #define LVCONDV_DOCCP "DOCCP"
#define LVCONDV_PERFATT "PERFATT" #define LVCONDV_PERFAT "PERFAT"
#define LVCONDV_INPERFAT "INPERFAT" #define LVCONDV_INPERFAT "INPERFAT"
#define LVCONDV_FATTPARZ "FATTPARZ" #define LVCONDV_FATTPARZ "FATTPARZ"
#define LVCONDV_DOTTMPPRZD "DOTTMPPRZD" #define LVCONDV_DOTTMPPRZD "DOTTMPPRZD"

View File

@ -249,7 +249,10 @@ protected:
virtual void add_rows(TRiga_documento & rout, TRiga_documento & rin) { rout += rin; } virtual void add_rows(TRiga_documento & rout, TRiga_documento & rin) { rout += rin; }
virtual void create_row(TDocumento& doc_out, const TRiga_documento & rin); virtual void create_row(TDocumento& doc_out, const TRiga_documento & rin);
virtual const TString & get_tipo_out(const TDocumento & doc_out) { return get("S8"); } virtual const TString & get_tipo_out(const TDocumento & doc_out) { return get("S8"); }
virtual void post_process(TDocumento & doc) {} 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) { return false; }
public: public:
virtual bool raggruppa(TDocumento& din, TDocumento& dout); virtual bool raggruppa(TDocumento& din, TDocumento& dout);

View File

@ -245,7 +245,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
if (rout.sola_descrizione()) // Ignora le righe descrittive if (rout.sola_descrizione()) // Ignora le righe descrittive
continue; continue;
if (rin.raggruppabile(rout, campi_riga)) // Se esiste una riga compatibile ... if (da_raggruppare(rin) || rin.raggruppabile(rout, campi_riga)) // Se esiste una riga compatibile ...
{ {
add_rows(rout, rin); add_rows(rout, rin);
elaborata = true; // Ricorda di averla gia' elaborata elaborata = true; // Ricorda di averla gia' elaborata
@ -298,6 +298,7 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
campi_raggruppamento(campi_doc); campi_raggruppamento(campi_doc);
pre_process_input(doc_in);
for (int id = 0; id < doc_in.items(); id++) for (int id = 0; id < doc_in.items(); id++)
{ {
TDocumento& campione = doc_in[id]; TDocumento& campione = doc_in[id];
@ -364,6 +365,7 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
campione.flush_rows(); campione.flush_rows();
} }
post_process_input(doc_in);
const int tot = doc_out.items(); const int tot = doc_out.items();
const TString4 codnum(codice_numerazione_finale()); const TString4 codnum(codice_numerazione_finale());
@ -381,8 +383,8 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
td = tipo_cli.empty() ? tipo_out : tipo_cli; td = tipo_cli.empty() ? tipo_out : tipo_cli;
const TString& sconto = d.get(DOC_SCONTOPERC); const TString& sconto = d.get(DOC_SCONTOPERC);
d.put(DOC_SCONTOPERC, sconto); d.put(DOC_SCONTOPERC, sconto);
post_process(d);
} }
post_process_output(doc_out);
return tot > 0; return tot > 0;
} }