From 2d4a8bddbabf96b94ce8fbb49e323ee8fd97676f Mon Sep 17 00:00:00 2001 From: angelo Date: Wed, 19 Feb 1997 08:46:05 +0000 Subject: [PATCH] Correzione alla stampa riepilogo progressivi relativamente allo scorporo dei corrispettivi (campo R3 in PIM). git-svn-id: svn://10.65.10.50/trunk@4138 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- cg/cg0400.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/cg/cg0400.cpp b/cg/cg0400.cpp index 3c7e66abe..907e334a0 100755 --- a/cg/cg0400.cpp +++ b/cg/cg0400.cpp @@ -125,6 +125,7 @@ class TProgressivi_iva : public TPrintapp bool _st_inizio_anno, _prima_pagina; TIva_array _iva_array,_iva1_array; TGen_array _gen_array,_gen1_array; + TAssoc_array _corr_array; TString _cap,_cofi,_paiva,_ragsoc,_comunefis,_provfis,_viafis,_codivamsk,_codattmsk; TString _datast, _cod_att; Importi _mesi[13]; @@ -143,6 +144,7 @@ public: virtual bool preprocess_page(int,int); virtual print_action postprocess_page(int,int); + void lordo2netto(const real& totale, real& imponibile, real& imposta, const real& aliquota); void cerca_i_pim(); void azzera_mesi(); void get_dati_ditta(); @@ -179,6 +181,17 @@ const char* TProgressivi_iva::desc_attivita(const char* codatt) return TMP; } +void TProgressivi_iva::lordo2netto(const real& totale, real& imponibile, real& imposta, const real& aliquota) +{ + imposta = (abs(totale) * aliquota)/(aliquota + 1.00); + imposta.ceil(); + if (totale.sign() < 0) imposta = -imposta; + imponibile = totale - imposta; + real delta = totale - imponibile - imposta; + if (!delta.is_zero()) + imposta += delta; +} + const char* TProgressivi_iva::desc_iva(const TString& cod) { @@ -256,10 +269,15 @@ void TProgressivi_iva::look_pim() { TTable pim("PIM"); TTable reg("REG"); + TTable tabiva("%IVA"); TString80 codtab; TString16 codatt,codiva,tipoiva,codreg; TToken_string a13("",'!'); real imponibile, imposta,afi,afv,a13i,a13v; + real corr_item,*cp,aliquota; + bool is_key; + + _corr_array.destroy(); for (pim.first(); !pim.eof(); pim.next()) { @@ -296,6 +314,13 @@ void TProgressivi_iva::look_pim() if (reg.read() != NOERR) reg.zero(); const bool corrisp = reg.get_bool("B0"); + is_key = _corr_array.is_key(codiva); + corr_item = ZERO; + real& ci = is_key ? (real&) _corr_array[codiva] : corr_item; + ci += pim.get_real("R3"); // accumula i corrispettivi + if (!is_key) + _corr_array.add(codiva,ci); + while (classify_pim(pim.curr(), imponibile, imposta, tipo, TRUE)) { switch(tipo) @@ -355,6 +380,19 @@ void TProgressivi_iva::look_pim() } } } + // Scorpora i corrispettivi + for (cp = (real*) _corr_array.first_item(); cp != NULL; cp = (real*) _corr_array.succ_item()) + { + codiva = _corr_array.get_hashobj()->key(); + tabiva.put("CODTAB",codiva); + if (tabiva.read() == NOERR) aliquota = tabiva.get_real("R0"); + else aliquota = ZERO; + lordo2netto(*cp,imponibile,imposta,aliquota/100.0); + if (_mese != 13) + _gen_array.add_riga(codiva,imponibile,imposta,ZERO,ZERO,ZERO,ZERO); + if (_st_inizio_anno || _mese == 13) //lo metto in un array a parte + _gen1_array.add_riga(codiva,imponibile,imposta,ZERO,ZERO,ZERO,ZERO); + } _gen_array.sort(compare_rows); // ordinamento per codice iva _gen1_array.sort(compare_rows); // ordinamento per codice iva }