#include #include "../ve/ve6200.h" #include "../ve/ve6200a.h" #include class TFatturazione_cooperative : public TFatturazione_bolle { virtual void campi_raggruppamento_righe(TToken_string& campi_riga) const; virtual void campi_raggruppamento(TToken_string& campi) const; virtual bool doc_raggruppabile(const TDocumento & doc) const { return true; } virtual bool doc_raggruppabile(const TDocumento & doc_in, const TDocumento & doc_out, TToken_string & campi) const; virtual void add_rows(TRiga_documento & rout, TRiga_documento & rin); virtual void create_row(TDocumento& doc_out, const TRiga_documento & rin); virtual const TString & get_tipo_out(const TDocumento & doc_out); public: TFatturazione_cooperative(const char* cod) : TFatturazione_bolle(cod) {} virtual ~TFatturazione_cooperative() { } }; void TFatturazione_cooperative::campi_raggruppamento_righe(TToken_string& campi_riga) const { campi_riga = "CODART|UMQTA"; // Uguali sempre } void TFatturazione_cooperative::campi_raggruppamento(TToken_string& campi) const { campi = "TIPOCF|CODCF|CODVAL|CODLIN"; } void TFatturazione_cooperative::add_rows(TRiga_documento & rout, TRiga_documento & rin) { real valore = rout.get_real(RDOC_PREZZO); real qta = rout.get_real(RDOC_QTA); valore += rin.doc().get_real("TOTMER")+rin.doc().get_real("SPESMER"); valore.round(2); rout.put(RDOC_PREZZO, valore); qta += rin.get_real(RDOC_QTA); rout.put(RDOC_QTA, qta); } bool TFatturazione_cooperative::doc_raggruppabile(const TDocumento & doc_in, const TDocumento & doc_out, TToken_string & campi) const { if (doc_in.physical_rows() > 0 && doc_out.physical_rows() > 0) { const TRiga_documento & rout = doc_out[1]; const TRiga_documento & rin = doc_in[1]; const TString art_in = rin.get(RDOC_CODART); const TString art_out = rout.get(RDOC_CODART); bool raggruppa = art_in == art_out; if (raggruppa) { const TString & art = rin.get(RDOC_CODARTMAG); const TString & iva_in = cache().get(LF_ANAMAG, art, ANAMAG_USER4); const TString iva_out = rout.get(RDOC_CODIVA); raggruppa = iva_in == iva_out; } return raggruppa; } return false; } void TFatturazione_cooperative::create_row(TDocumento& doc_out, const TRiga_documento & rin) { if (rin.get_int(RDOC_NRIGA) == 1) { TFatturazione_bolle::create_row(doc_out, rin); TRiga_documento & rout = doc_out[1]; real valore = rin.doc().get_real("TOTMER")+rin.doc().get_real("SPESMER"); valore.round(2); rout.put(RDOC_PREZZO, valore); rout.zero(RDOC_SCONTO); rout.put(RDOC_CODAGG1, "X"); const TString & art = rout.get(RDOC_CODARTMAG); const TString & codiva= cache().get(LF_ANAMAG, art, ANAMAG_USER4); if (codiva.full()) rout.put(RDOC_CODIVA, codiva); } } const TString & TFatturazione_cooperative::get_tipo_out(const TDocumento & doc_out) { const TString & art = doc_out[1].get(RDOC_CODARTMAG); const TString & tipodoc = cache().get(LF_ANAMAG, art, ANAMAG_USER2); if (tipodoc.full() && !cache().get("%TIP", tipodoc).empty()) return tipodoc; else return get("S8"); }; class TFatturazione_cooperative_app : public TFatturazione_bolle_app { protected: virtual TFatturazione_bolle * elab(const TString & cod) const { return new TFatturazione_cooperative(cod);} }; int co1400(int argc, char *argv[]) { TFatturazione_cooperative_app a; a.run (argc, argv, "Fatturazione Conferimenti"); return TRUE; }