Patch level : 10.0 patch 804
Files correlati : ve0.exe ve6.exe Ricompilazione Demo : [ ] Commento : Bug 0001690: Gestione documenti (ve0), Contabilizzazione documenti( ve6) Aggiungere la possibilità di distribuire le spese sui conti contabili quando quest'ultime non hanno un conto proprio git-svn-id: svn://10.65.10.50/branches/R_10_00@20829 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
3f11c4443a
commit
5d6a9bef1a
@ -1,5 +1,6 @@
|
||||
#include <applicat.h>
|
||||
#include "clifor.h"
|
||||
#include "velib.h"
|
||||
#include "../li/letint.h"
|
||||
#include <modaut.h>
|
||||
#include <relation.h>
|
||||
@ -173,6 +174,38 @@ void TCli_for::init()
|
||||
_use_lettere = ini_get_bool(CONFIG_DITTA, "ve", "USELETTERE");
|
||||
}
|
||||
|
||||
void TCli_for::cli2doc(TDocumento & doc)
|
||||
{
|
||||
const TRectype & v = vendite();
|
||||
|
||||
doc.put(DOC_CODVAL, get(CLI_CODVAL));
|
||||
doc.put(DOC_CODLIN, get(CLI_CODLIN));
|
||||
doc.put(DOC_CODPAG, get(CLI_CODPAG));
|
||||
doc.put(DOC_CODABIA, get(CLI_CODABI));
|
||||
doc.put(DOC_CODCABA, get(CLI_CODCAB));
|
||||
doc.put(DOC_IBAN, get(CLI_IBAN));
|
||||
doc.put(DOC_CODABIP, v.get(CFV_CODABIPR));
|
||||
doc.put(DOC_CODCABP, v.get(CFV_CODCABPR));
|
||||
doc.put(DOC_RAGGR, v.get(CFV_RAGGDOC));
|
||||
doc.put(DOC_RAGGREFF, v.get(CFV_RAGGEFF));
|
||||
doc.put(DOC_CODINDSP, v.get(CFV_CODINDSP));
|
||||
doc.put(DOC_CODAG, v.get(CFV_CODAG));
|
||||
doc.put(DOC_CODAGVIS, v.get(CFV_CODAG1));
|
||||
doc.put(DOC_CODSPMEZZO, v.get(CFV_CODSPMEZZO));
|
||||
doc.put(DOC_CODPORTO, v.get(CFV_CODPORTO));
|
||||
doc.put(DOC_CODNOTESP1, v.get(CFV_CODNOTESP1));
|
||||
doc.put(DOC_CODNOTESP2, v.get(CFV_CODNOTESP2));
|
||||
doc.put(DOC_CODNOTE, v.get(CFV_CODNOTE));
|
||||
doc.put(DOC_CODVETT1, v.get(CFV_CODVETT1));
|
||||
doc.put(DOC_CODVETT2, v.get(CFV_CODVETT2));
|
||||
doc.put(DOC_CODVETT3, v.get(CFV_CODVETT3));
|
||||
doc.put(DOC_PERCSPINC, v.get(CFV_PERCSPINC));
|
||||
doc.put(DOC_ADDBOLLI, v.get(CFV_ADDBOLLI));
|
||||
doc.put(DOC_CATVEN, v.get(CFV_CATVEN));
|
||||
doc.put(DOC_LIQDIFF, get_int(CLI_ALLEG) == 7 && v.get_bool(CFV_FATTSOSP) ? "X" : "");
|
||||
}
|
||||
|
||||
|
||||
TCli_for::TCli_for(char tipo, long codice) : TMultiple_rectype( LF_CLIFO ), _ven_rec(LF_CFVEN),
|
||||
_letint(LF_LETINT), _use_lettere(false), _lettera_found(false)
|
||||
{
|
||||
|
@ -21,6 +21,8 @@
|
||||
#include <occas.h>
|
||||
#endif
|
||||
|
||||
class TDocumento;
|
||||
|
||||
class TOccasionale : public TRectype
|
||||
{
|
||||
public:
|
||||
@ -67,6 +69,7 @@ public:
|
||||
virtual int read(const TRectype& rec, word op = _isequal, word lockop = _nolock);
|
||||
int read(char tipo, long codice, word op = _isequal, word lockop = _nolock);
|
||||
virtual int remove(TBaseisamfile& f) const;
|
||||
void cli2doc(TDocumento & doc);
|
||||
|
||||
TCli_for(char tipo = ' ', long codice = 0L);
|
||||
TCli_for(const TRectype & rec);
|
||||
|
@ -868,6 +868,8 @@ public:
|
||||
const TString & codesiva() const;
|
||||
void get_protocolli_esenzione(TString & esenzione, TString & data_esenzione,
|
||||
TString & registrazione, TString & data_registrazione) const;
|
||||
|
||||
void cli2doc() { clifor().cli2doc(*this); }
|
||||
TDocumento ();
|
||||
TDocumento (const TDocumento & d);
|
||||
TDocumento(char provv, int anno, const char* codnum, long numdoc);
|
||||
|
10
ve/velib04.h
10
ve/velib04.h
@ -428,8 +428,11 @@ protected:
|
||||
error_type compile_head_mov(TDocumento&);
|
||||
// Compila la testata del movimento per le fatture da emettere / ricevere;
|
||||
error_type compile_head_mov_re(TDocumento&);
|
||||
bool spalma_spese() const { return get("I2") == "X"; }
|
||||
// Funzione per distribuire le spese
|
||||
void split_sp_amount(const real & amount, int decimals);
|
||||
// Funzione per ricercare il conto di costo/ricavo
|
||||
error_type search_costo_ricavo(TBill&, const TRiga_documento&);
|
||||
error_type search_costo_ricavo(TBill& conto, const TRiga_documento& r, real & amount_to_split, const real & valore);
|
||||
// Funzione per ricercare il conto di costo/ricavo materiali
|
||||
error_type search_costo_ricavo_mat(TBill&, const TRiga_documento&);
|
||||
// Funzione per aggiungere la riga iva al TAssoc_array _righe_iva
|
||||
@ -613,7 +616,9 @@ class TContabilizzazione_analitica : public TElaborazione // velib04f
|
||||
|
||||
protected:
|
||||
bool find_conti_iva_indetraibile(const TRiga_documento& riga, const TBill & bill, TString_array& conti, int annoes, const char tipomov, bool & pareggio);
|
||||
bool find_conti(const TRiga_documento& riga, TString_array& conti, int annoes, bool riclassifica_fdr_fde, const char tipomov, bool & pareggio);
|
||||
bool spalma_spese() const { return get("I2") == "X"; }
|
||||
void split_sp_amount(TAnal_mov & mov, char sezione, bool pareggio, const real & amount, const real & no_ca_amount, int decimals);
|
||||
bool find_conti(const TRiga_documento& riga, TString_array& conti, int annoes, bool riclassifica_fdr_fde, const char tipomov, real & amount_to_split, real & no_ca_amount, const real & valore, bool & pareggio);
|
||||
void init();
|
||||
|
||||
virtual const TCausale& doc2caus(const TDocumento& doc);
|
||||
@ -632,6 +637,7 @@ public:
|
||||
|
||||
TContabilizzazione_analitica(const char* cod = NULL);
|
||||
TContabilizzazione_analitica(const TRectype& rec);
|
||||
TContabilizzazione_analitica(const TContabilizzazione & el);
|
||||
virtual ~TContabilizzazione_analitica();
|
||||
};
|
||||
|
||||
|
112
ve/velib04b.cpp
112
ve/velib04b.cpp
@ -1597,7 +1597,7 @@ error_type TContabilizzazione::compile_head_mov_re(TDocumento& doc)
|
||||
return _error;
|
||||
}
|
||||
|
||||
error_type TContabilizzazione::search_costo_ricavo(TBill& conto, const TRiga_documento& r)
|
||||
error_type TContabilizzazione::search_costo_ricavo(TBill& conto, const TRiga_documento& r, real & amount_to_split, const real & valore)
|
||||
{
|
||||
const int items = _search_seq->items();
|
||||
TLocalisamfile & cli_file = _clifo->lfile(); // YES, arriva qui dentro quando la relazione e' gia' posizionata
|
||||
@ -1770,6 +1770,11 @@ error_type TContabilizzazione::search_costo_ricavo(TBill& conto, const TRiga_doc
|
||||
|
||||
if (!conto.ok() && t == RIGA_SPESEDOC && !__searching)
|
||||
{
|
||||
if (spalma_spese())
|
||||
{
|
||||
amount_to_split += valore;
|
||||
return _error;
|
||||
}
|
||||
const int rows = r.doc().physical_rows();
|
||||
int row = -1;
|
||||
|
||||
@ -1783,7 +1788,7 @@ error_type TContabilizzazione::search_costo_ricavo(TBill& conto, const TRiga_doc
|
||||
if (row > 0)
|
||||
{
|
||||
__searching = true;
|
||||
search_costo_ricavo(conto, r.doc()[row]);
|
||||
search_costo_ricavo(conto, r.doc()[row], amount_to_split, valore);
|
||||
__searching = false;
|
||||
}
|
||||
}
|
||||
@ -2228,12 +2233,39 @@ bool TContabilizzazione::valid_row_type(const char* rt) const
|
||||
return !tri.empty();
|
||||
}
|
||||
|
||||
void TContabilizzazione::split_sp_amount(const real & amount, int decimals)
|
||||
{
|
||||
TGeneric_distrib d(amount, decimals);
|
||||
|
||||
FOR_EACH_ASSOC_OBJECT((*_righe_iva), obj, key, itm)
|
||||
{
|
||||
TRectype & r = (TRectype &)*itm;
|
||||
|
||||
const real imp = r.get_real(RMI_IMPONIBILE);
|
||||
d.add(imp);
|
||||
}
|
||||
FOR_EACH_ASSOC_OBJECT((*_righe_iva), obj1, key1, itm1)
|
||||
{
|
||||
TRectype & r = (TRectype &)*itm1;
|
||||
|
||||
real imp = r.get_real(RMI_IMPONIBILE);
|
||||
const TCodiceIVA i(r.get(RMI_CODIVA));
|
||||
|
||||
imp += d.get();
|
||||
r.put(RMI_IMPONIBILE, imp);
|
||||
real const imposta = i.imposta(imp);
|
||||
r.put(RMI_IMPOSTA, imposta);
|
||||
}
|
||||
}
|
||||
|
||||
error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
|
||||
// Compila le righe
|
||||
{
|
||||
TString4 tiporiga, codiva1, codiva2;
|
||||
const int rows = doc.rows();
|
||||
const int ndec = doc.decimals();
|
||||
real amount_to_split;
|
||||
|
||||
|
||||
const bool fat_com = doc.tipo().fattura_commerciale();
|
||||
|
||||
@ -2280,7 +2312,7 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
|
||||
{
|
||||
if (!riga_omaggio && r.imponibile().is_zero())
|
||||
continue;
|
||||
search_costo_ricavo(conto,r); // l'errore eventuale viene settato qui dentro
|
||||
search_costo_ricavo(conto, r, amount_to_split, r.imponibile()); // l'errore eventuale viene settato qui dentro
|
||||
|
||||
if (good())
|
||||
{
|
||||
@ -2330,6 +2362,7 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
|
||||
r.put(RDOC_CODIVA, codiva2); //Restore
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ritenuta)
|
||||
{
|
||||
TCurrency_documento c(r.ritenuta(tipo_rit));
|
||||
@ -2355,7 +2388,6 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (riga_omaggio)
|
||||
{
|
||||
_error = _righe_iva->add_omaggi(r, conto);
|
||||
@ -2363,40 +2395,39 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
|
||||
_nrow = i;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (contomat.ok() && contomat != conto && pricemat != 0)
|
||||
{
|
||||
TRiga_documento rlav(r);
|
||||
TRiga_documento rmat(r);
|
||||
const real prezzo = r.get_real(RDOC_PREZZO);
|
||||
rmat.put(RDOC_PREZZO, pricemat);
|
||||
rmat.zero(RDOC_SCONTO);
|
||||
const real valmat = rmat.imponibile();
|
||||
const real diff = r.imponibile() - valmat;
|
||||
if (contomat.ok() && contomat != conto && pricemat != 0)
|
||||
{
|
||||
TRiga_documento rlav(r);
|
||||
TRiga_documento rmat(r);
|
||||
const real prezzo = r.get_real(RDOC_PREZZO);
|
||||
rmat.put(RDOC_PREZZO, pricemat);
|
||||
rmat.zero(RDOC_SCONTO);
|
||||
const real valmat = rmat.imponibile();
|
||||
const real diff = r.imponibile() - valmat;
|
||||
|
||||
rlav.put(RDOC_PREZZO, diff);
|
||||
rlav.put(RDOC_QTA, 1);
|
||||
rlav.zero(RDOC_SCONTO);
|
||||
rmat.put(RDOC_PREZZO, valmat);
|
||||
rmat.put(RDOC_QTA, 1);
|
||||
rmat.zero(RDOC_SCONTO);
|
||||
_righe_iva->add(rlav, conto);
|
||||
_righe_iva->add(rmat, contomat);
|
||||
}
|
||||
else
|
||||
_righe_iva->add(r, conto);
|
||||
}
|
||||
rlav.put(RDOC_PREZZO, diff);
|
||||
rlav.put(RDOC_QTA, 1);
|
||||
rlav.zero(RDOC_SCONTO);
|
||||
rmat.put(RDOC_PREZZO, valmat);
|
||||
rmat.put(RDOC_QTA, 1);
|
||||
rmat.zero(RDOC_SCONTO);
|
||||
_righe_iva->add(rlav, conto);
|
||||
_righe_iva->add(rmat, contomat);
|
||||
}
|
||||
else
|
||||
if (conto.ok())
|
||||
_righe_iva->add(r, conto);
|
||||
|
||||
if (r.doc().tipo().calcolo_lordo()) // Si ricorda che calcolo_lordo() e fattura_commerciale() sono esclusivi.
|
||||
{
|
||||
// Totalizza per ogni codice iva il lordo
|
||||
const TString& cod = r.get(RDOC_CODIVA);
|
||||
if (!_totali_lordi.is_key(cod))
|
||||
_totali_lordi.add(cod, new real);
|
||||
real& rl = (real&) _totali_lordi[cod];
|
||||
rl += r.imponibile(true);
|
||||
}
|
||||
if (!ritenuta && r.doc().tipo().calcolo_lordo()) // Si ricorda che calcolo_lordo() e fattura_commerciale() sono esclusivi.
|
||||
{
|
||||
// Totalizza per ogni codice iva il lordo
|
||||
const TString& cod = r.get(RDOC_CODIVA);
|
||||
if (!_totali_lordi.is_key(cod))
|
||||
_totali_lordi.add(cod, new real);
|
||||
real& rl = (real&) _totali_lordi[cod];
|
||||
rl += r.imponibile(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2408,6 +2439,9 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
|
||||
|
||||
}
|
||||
|
||||
if (amount_to_split != ZERO)
|
||||
split_sp_amount(amount_to_split, ndec);
|
||||
|
||||
if (good() && _righe_iva->empty())
|
||||
_error = no_rows_error;
|
||||
|
||||
@ -2501,6 +2535,7 @@ error_type TContabilizzazione::compile_rows_mov_re(TDocumento& doc)
|
||||
{
|
||||
const int rows = doc.rows();
|
||||
const int ndec = doc.decimals();
|
||||
real amount_to_split;
|
||||
|
||||
_righe_iva->destroy(); // resetta l'assoc_array delle righe di iva
|
||||
for (int i=1; good() && i<=rows; i++) // browse all this fucked document rows
|
||||
@ -2512,10 +2547,12 @@ error_type TContabilizzazione::compile_rows_mov_re(TDocumento& doc)
|
||||
const char tipo = r.tipo().tipo();
|
||||
// Le righe omaggio senza addebito IVA vanno saltate
|
||||
const bool riga_omaggio = tipo == RIGA_OMAGGI && r.get_bool(RDOC_ADDIVA);
|
||||
const bool spesa = r.tipo().tipo() == RIGA_SPESEDOC;
|
||||
|
||||
if ((tipo != RIGA_DESCRIZIONI && tipo != RIGA_SCONTI && tipo != RIGA_RETTIFICHE) && !riga_omaggio)
|
||||
{
|
||||
TBill conto;
|
||||
search_costo_ricavo(conto,r); // l'errore eventuale viene settato qui dentro
|
||||
search_costo_ricavo(conto, r, amount_to_split, r.imponibile()); // l'errore eventuale viene settato qui dentro
|
||||
if (good())
|
||||
_righe_iva->add(r, conto);
|
||||
}
|
||||
@ -2527,6 +2564,7 @@ error_type TContabilizzazione::compile_rows_mov_re(TDocumento& doc)
|
||||
}
|
||||
|
||||
}
|
||||
split_sp_amount(amount_to_split, ndec);
|
||||
|
||||
if (good() && _righe_iva->items() == 0)
|
||||
_error = no_rows_error;
|
||||
@ -3692,7 +3730,7 @@ error_type TContabilizzazione::write_anal(TDocumento& doc, const TMovimentoPN& m
|
||||
}
|
||||
if (has_anal_bill)
|
||||
{
|
||||
TContabilizzazione_analitica canal;
|
||||
TContabilizzazione_analitica canal(*this);
|
||||
const long numreg_cg = movimento.curr().get_long(MOV_NUMREG);
|
||||
TAnal_mov mov;
|
||||
canal.elabora(doc, numreg_cg, _viswin, _can_write, mov);
|
||||
|
@ -263,9 +263,11 @@ bool TContabilizzazione_analitica::search_costo_ricavo(const TRiga_documento& r,
|
||||
}
|
||||
|
||||
static int __searching = false;
|
||||
|
||||
if (!conto.ok() && t == RIGA_SPESEDOC && !__searching)
|
||||
{
|
||||
if (spalma_spese())
|
||||
return true;
|
||||
|
||||
const int rows = r.doc().physical_rows();
|
||||
int row = -1;
|
||||
|
||||
@ -367,7 +369,7 @@ bool TContabilizzazione_analitica::find_conti_iva_indetraibile(const TRiga_docum
|
||||
return !conti.empty();
|
||||
}
|
||||
|
||||
bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TString_array& conti, int annoes, bool riclassifica_fdr_fde, const char tipomov, bool & pareggio)
|
||||
bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TString_array& conti, int annoes, bool riclassifica_fdr_fde, const char tipomov, real & amount_to_split, real & no_ca_amount, const real & valore, bool & pareggio)
|
||||
{
|
||||
bool bArcticleFound = false;
|
||||
|
||||
@ -392,8 +394,11 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri
|
||||
{
|
||||
if (!search_costo_ricavo(riga, bill, riclassifica_fdr_fde))
|
||||
return true;
|
||||
if (!bill.is_analitico())
|
||||
if (!bill.is_analitico() && !_usepdcc && !riga.is_spese())
|
||||
{
|
||||
no_ca_amount += valore;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (riga.is_articolo())
|
||||
{
|
||||
@ -406,8 +411,8 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri
|
||||
}
|
||||
else
|
||||
{
|
||||
if (riga.is_spese() || riga.is_prestazione() ||
|
||||
riga.is_risorsa() || riga.is_attrezzatura())
|
||||
if (riga.is_spese() || riga.is_prestazione() ||
|
||||
riga.is_risorsa() || riga.is_attrezzatura())
|
||||
{
|
||||
const char tipo = riga.tipo().tipo();
|
||||
const TSpesa_prest spp(riga.get(RDOC_CODART), tipo);
|
||||
@ -417,6 +422,12 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri
|
||||
contanal.format("%03d%03d%06ld", bill.gruppo(), bill.conto(), bill.sottoconto());
|
||||
else
|
||||
contanal = tipocf == 'F' ? spp.conto_analitico_acquisti() : spp.conto_analitico_vendite() ;
|
||||
|
||||
TFilename pname;
|
||||
|
||||
if (ini_get_bool(riga.doc().tipo().profile_name(pname), "MAIN", "DistribuzioneSpese", true) &&
|
||||
riga.is_spese() && (contanal.blank() || atoi(contanal)))
|
||||
amount_to_split += valore;
|
||||
}
|
||||
}
|
||||
if (!bArcticleFound) // Se l'anagrafica non esiste va bene cosi'
|
||||
@ -438,28 +449,32 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri
|
||||
conto.add(100, 4);
|
||||
conti.add(conto);
|
||||
}
|
||||
const TAnal_ripartizioni_batch & rip = _rip.righe(bill, annoes, tipomov);
|
||||
|
||||
pareggio = rip.rows() > 0;
|
||||
for (int i = 1; i <= rip.rows(); i++)
|
||||
if (bill.ok())
|
||||
{
|
||||
const TRectype& rigarip = rip.row(i);
|
||||
const TAnal_ripartizioni_batch & rip = _rip.righe(bill, annoes, tipomov);
|
||||
|
||||
conto = rigarip.get(RRIP_CODCONTO);
|
||||
pareggio = rip.rows() > 0;
|
||||
for (int i = 1; i <= rip.rows(); i++)
|
||||
{
|
||||
const TRectype& rigarip = rip.row(i);
|
||||
|
||||
const TString costo = rigarip.get(RRIP_CODCOSTO);
|
||||
conto = rigarip.get(RRIP_CODCONTO);
|
||||
|
||||
conto.add(costo.full() ? costo : riga_cos, 1);
|
||||
const TString costo = rigarip.get(RRIP_CODCOSTO);
|
||||
|
||||
const TString & commessa = rigarip.get(RRIP_CODCMS);
|
||||
conto.add(costo.full() ? costo : riga_cos, 1);
|
||||
|
||||
conto.add(commessa.full() ? commessa : riga_cms, 2);
|
||||
const TString & commessa = rigarip.get(RRIP_CODCMS);
|
||||
|
||||
const TString & fase = rigarip.get(RRIP_CODFASE);
|
||||
conto.add(commessa.full() ? commessa : riga_cms, 2);
|
||||
|
||||
conto.add(fase.full() ? fase: riga_fsc, 3);
|
||||
conto.add(rigarip.get(RRIP_RIPARTO), 4);
|
||||
conti.add(conto);
|
||||
const TString & fase = rigarip.get(RRIP_CODFASE);
|
||||
|
||||
conto.add(fase.full() ? fase: riga_fsc, 3);
|
||||
conto.add(rigarip.get(RRIP_RIPARTO), 4);
|
||||
conti.add(conto);
|
||||
}
|
||||
}
|
||||
|
||||
return !conti.empty();
|
||||
@ -492,6 +507,37 @@ void TContabilizzazione_analitica::calcola_date_comp(const TDocumento& doc, TDat
|
||||
annoes = esercizi().date2esc(datacomp); //ci potrebbe andare datacomp? All'analisi l'ardua sentenza
|
||||
}
|
||||
|
||||
void TContabilizzazione_analitica::split_sp_amount(TAnal_mov & mov, char sezione, bool pareggio, const real & amount, const real & no_ca_amount, int decimals)
|
||||
{
|
||||
TGeneric_distrib w(amount, decimals);
|
||||
|
||||
w.add(mov.get_real(MOVANA_TOTDOC));
|
||||
w.add(no_ca_amount);
|
||||
const real ca_amount = w.get();
|
||||
|
||||
TGeneric_distrib d(ca_amount, decimals);
|
||||
const int rows = mov.rows();
|
||||
|
||||
for (int i = pareggio ? 2 : 1; i <= rows; i++)
|
||||
{
|
||||
TRectype& r = mov.body()[i];
|
||||
TImporto imp(r.get_char(RMOVANA_SEZIONE), r.get_real(RMOVANA_IMPORTO));
|
||||
|
||||
imp.normalize(sezione);
|
||||
d.add(imp.valore());
|
||||
}
|
||||
for (int i = pareggio ? 2 : 1; i <= rows; i++)
|
||||
{
|
||||
TRectype& r = mov.body()[i];
|
||||
TImporto imp(r.get_char(RMOVANA_SEZIONE), r.get_real(RMOVANA_IMPORTO));
|
||||
|
||||
imp += TImporto(imp.sezione(), d.get());
|
||||
imp.normalize();
|
||||
r.put(RMOVANA_IMPORTO, imp.valore());
|
||||
r.put(RMOVANA_SEZIONE, imp.sezione());
|
||||
}
|
||||
}
|
||||
|
||||
bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TViswin* viswin, bool can_write, TAnal_mov& mov, bool riclassifica_fdr_fde)
|
||||
{
|
||||
TDate datareg, datacomp, datafcomp;
|
||||
@ -579,6 +625,9 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
||||
const TipoIVA tiva = caus.iva();
|
||||
const bool vendita = tiva == iva_vendite;
|
||||
TBill bill; caus.bill(RIGA_IVA_NON_DETRAIBILE, bill);
|
||||
bool has_pareggio = false;
|
||||
real amount_to_split;
|
||||
real no_ca_amount;
|
||||
|
||||
// Scandisco le righe del documento,
|
||||
const int righe_doc = doc.physical_rows(); //ignora sconti ed esenzioni (sennò sarebbe doc.rows()
|
||||
@ -652,7 +701,7 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
||||
|
||||
TString_array conti;
|
||||
const char tipomov = mov.get_char(MOVANA_TIPOMOV);
|
||||
const bool ok = find_conti(riga, conti, annoes, riclassifica_fdr_fde, tipomov, pareggio);
|
||||
const bool ok = find_conti(riga, conti, annoes, riclassifica_fdr_fde, tipomov, amount_to_split, no_ca_amount, valore, pareggio);
|
||||
if (!ok)
|
||||
{
|
||||
if (viswin != NULL)
|
||||
@ -690,6 +739,7 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
||||
rmov.put(RMOVANA_IMPORTO, imp.valore());
|
||||
totdoc += imp;
|
||||
}
|
||||
has_pareggio |= pareggio;
|
||||
}
|
||||
|
||||
if (_usepdcc)
|
||||
@ -746,6 +796,9 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
||||
}
|
||||
}
|
||||
|
||||
if (amount_to_split != ZERO)
|
||||
split_sp_amount(mov, sezione, has_pareggio, amount_to_split, no_ca_amount, doc.decimals());
|
||||
|
||||
if (can_write && mov.rows() > 0)
|
||||
{
|
||||
totdoc.normalize();
|
||||
@ -894,6 +947,13 @@ TContabilizzazione_analitica::TContabilizzazione_analitica(const TRectype& rec)
|
||||
init();
|
||||
}
|
||||
|
||||
TContabilizzazione_analitica::TContabilizzazione_analitica(const TContabilizzazione & el)
|
||||
: TElaborazione(el), _error(no_error), _caus(NULL)
|
||||
{
|
||||
put("I0", 7);
|
||||
init();
|
||||
}
|
||||
|
||||
TContabilizzazione_analitica::~TContabilizzazione_analitica()
|
||||
{
|
||||
if (_caus != NULL)
|
||||
|
@ -82,6 +82,7 @@
|
||||
#define F_USA_DOCRIF 331
|
||||
#define F_RIF_DOCIN 332
|
||||
#define F_COMMESSA 333
|
||||
#define F_SPALMA 334
|
||||
|
||||
#define F_PREZZO_DA_ORDINE 340
|
||||
#define F_AGGIORNA_PREZZO 341
|
||||
|
@ -741,9 +741,18 @@ BEGIN
|
||||
FIELD B8
|
||||
END
|
||||
|
||||
LISTBOX F_SPALMA 1 12
|
||||
BEGIN
|
||||
PROMPT 2 17 "Spalma le spese"
|
||||
ITEM " |Non spalmare"
|
||||
ITEM "X|Spalma"
|
||||
FIELD I2
|
||||
GROUP 3 9
|
||||
END
|
||||
|
||||
STRING F_RIF_DOCIN 4
|
||||
BEGIN
|
||||
PROMPT 2 17 "Numerazione documenti in entrata "
|
||||
PROMPT 40 17 "Numerazione documenti in entrata"
|
||||
USE %NUM
|
||||
INPUT CODTAB F_RIF_DOCIN
|
||||
DISPLAY "Codice" CODTAB
|
||||
|
Loading…
x
Reference in New Issue
Block a user