campo-sirio/co/co1400.cpp

112 lines
3.3 KiB
C++
Raw Normal View History

#include <progind.h>
#include "../ve/ve6200.h"
#include "../ve/ve6200a.h"
#include <doc.h>
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;
}