From 97b82a31b0a47f3c977c3ec740bfc6dd847d049c Mon Sep 17 00:00:00 2001 From: Alessandro Bonazzi Date: Sun, 26 Jul 2020 19:53:27 +0200 Subject: [PATCH] Patch level : 12.0 982 Files correlati : Commento : Ristrutturato modulo li --- src/cg/cg0200a.uml | 16 ++-- src/cg/cglib.h | 18 +++++ src/cg/cglib01.cpp | 198 +++++++++++++++++++++++++++++++++++++++++++++ src/cg/cglib06.cpp | 77 ------------------ 4 files changed, 227 insertions(+), 82 deletions(-) diff --git a/src/cg/cg0200a.uml b/src/cg/cg0200a.uml index aa7decf1a..48e325bd3 100755 --- a/src/cg/cg0200a.uml +++ b/src/cg/cg0200a.uml @@ -1923,9 +1923,11 @@ BEGIN CHECKTYPE NORMAL FLAG "U" END -GROUPBOX DLG_NULL 76 4 + +STRING DLG_NULL 76 4 BEGIN PROMPT 1 13 "Dati lettera esenzione" + FLAGS "DH" // NON PIU UTILIZZATI END STRING F_VSNRPROT 7 @@ -1934,6 +1936,7 @@ BEGIN FIELD LF_CFVEN->VSNRPROT GROUP 7 HELP "Vostro nr. di protocollo della lettera" + FLAGS "DH" // NON PIU UTILIZZATI END DATE F_VSDATAREG @@ -1942,6 +1945,7 @@ BEGIN FIELD LF_CFVEN->VSDATAREG GROUP 7 HELP "Data di registrazione della lettera" + FLAGS "DH" // NON PIU UTILIZZATI END STRING F_NSNRPROT 7 @@ -1950,19 +1954,21 @@ BEGIN FIELD LF_CFVEN->NSNPROT GROUP 7 HELP "Nostro nr. di protocollo della lettera" + FLAGS "DH" // NON PIU UTILIZZATI END DATE F_NSDATAREG BEGIN - PROMPT 40 15 "Ns data registrazione " + PROMPT 40 13 "Ns data registrazione " FIELD LF_CFVEN->NSDATAREG GROUP 7 HELP "Data di registrazione della lettera" + FLAGS "DH" // NON PIU UTILIZZATI END NUMBER F_CODCFFATT 6 BEGIN - PROMPT 2 17 "Fatturare a " + PROMPT 2 13 "Fatturare a " FIELD CODCFFATT FLAGS "GR" USE LF_CLIFO KEY 1 @@ -1981,7 +1987,7 @@ END STRING F_DESCFFATT 50 30 BEGIN - PROMPT 25 17 "" + PROMPT 25 13 "" USE LF_CLIFO KEY 2 INPUT TIPOCF F_TIPOCF SELECT INPUT RAGSOC F_DESCFFATT @@ -1997,7 +2003,7 @@ END STRING F_CATFIN 2 BEGIN - PROMPT 2 18 "Categoria finanziaria " + PROMPT 2 14 "Categoria finanziaria " FIELD LF_CFVEN->CATFIN USE %CFI INPUT CODTAB F_CATFIN diff --git a/src/cg/cglib.h b/src/cg/cglib.h index 1afd19c35..7aaea3e83 100644 --- a/src/cg/cglib.h +++ b/src/cg/cglib.h @@ -1295,6 +1295,24 @@ public: ~TTransfer_file(); }; +class TConti_array : private TAssoc_array +{ +public: // TObject + virtual bool ok() const { return items() != 0; } + +public: + bool add(const TBill& conto, const real& importo); + real importo(const TBill& conto); + bool remove(const TBill& conto); + + bool add_iva(bool det, const real& importo); + real importo_iva(bool det); + bool remove_iva(bool det); + + TConti_array() {} + virtual ~TConti_array() {} +}; + class TMovimentoPN : public TRelation { // class TMovimentoPN : public TRelation diff --git a/src/cg/cglib01.cpp b/src/cg/cglib01.cpp index a3f6e42be..0529c20df 100755 --- a/src/cg/cglib01.cpp +++ b/src/cg/cglib01.cpp @@ -2063,3 +2063,201 @@ int TMovimentoPN::remove() return err; } + +/////////////////////////////////////////////////////////// +// Aggiustamento movimenti rovinati o convertiti male +/////////////////////////////////////////////////////////// + +bool TConti_array::add(const TBill& conto, const real& importo) +{ + const char* key = conto.string(); + real* imp = (real*)objptr(key); + + if (imp == nullptr) + TAssoc_array::add(key, importo); + else + *imp += importo; + return imp != nullptr; +} + +real TConti_array::importo(const TBill& conto) +{ + const char* key = conto.string(); + const real* imp = (real*)objptr(key); + return imp ? *imp : ZERO; +} + +bool TConti_array::remove(const TBill& conto) +{ + const char* key = conto.string(); + return TAssoc_array::remove(key); +} + +bool TConti_array::add_iva(bool det, const real& importo) +{ + real* imp = nullptr; + + if (!importo.is_zero()) + { + const char* const key = det ? "D" : "N"; + + imp = (real*)objptr(key); + if (imp == nullptr) + TAssoc_array::add(key, importo); + else + *imp += importo; + } + return imp != nullptr; +} + +real TConti_array::importo_iva(bool det) +{ + const char* const key = det ? "D" : "N"; + const real* imp = (real*)objptr(key); + return imp ? *imp : ZERO; +} + +bool TConti_array::remove_iva(bool det) +{ + const char* const key = det ? "D" : "N"; + return TAssoc_array::remove(key); +} + +real TMovimentoPN::indetraibile_al(const TString& codind, const TCausale& caus, int annodoc) const +{ + int tipodet = 0; + return ::indetraibile_al(codind, caus, annodoc, tipodet); +} + +int TMovimentoPN::analizza_riga_IVA(const real& imptot, const real& ivatot, const TCausale& caus, + int annodoc, const TString& codiva, const TString& codind, + real& imp_det, real& iva_det, real& imp_ind, real& iva_ind) const +{ + const real perc_ind = indetraibile_al(codind, caus, annodoc); + const bool corrispettivo = caus.corrispettivi(); + TBill billind; caus.bill(RIGA_IVA_NON_DETRAIBILE, billind); + const bool iva_ind_al_costo = !billind.ok(); + return analizza_IVA(imptot, ivatot, perc_ind, corrispettivo, iva_ind_al_costo, + codiva, imp_det, iva_det, imp_ind, iva_ind); +} + +// Aggiusta i row types se sono andati persi o non sono stati convertiti +void TMovimentoPN::adjust_rowtypes() +{ + const TRectype& mov = curr(); + const char tipo = mov.get_char(MOV_TIPO); + const long codice = mov.get_long(MOV_CODCF); + const int annoiva = mov.get_int(MOV_ANNOIVA); + const int annodoc = mov.get_date(MOV_DATADOC).year(); + const TCausale causale(mov.get(MOV_CODCAUS), annoiva); + + TConti_array conti; + int r; + + for (r = 0; r < _iva.rows(); r++) + { + const TRectype& row = iva(r); + const TBill bill(row); + const real imponibile(row.get(RMI_IMPONIBILE)); + const real imposta(row.get(RMI_IMPOSTA)); + const TString4 codiva = row.get(RMI_CODIVA); + const TString4 codind = row.get(RMI_TIPODET); + real imp_det, iva_det, imp_ind, iva_ind; + analizza_riga_IVA(imponibile, imposta, causale, annodoc, codiva, codind, + imp_det, iva_det, imp_ind, iva_ind); + + conti.add(bill, imp_det + imp_ind); + conti.add_iva(false, iva_ind); + conti.add_iva(true, iva_det); + } + + bool totale = FALSE; + bool ritfis = mov.get_real(MOV_RITFIS).is_zero(); + bool ritsoc = mov.get_real(MOV_RITSOC).is_zero(); + bool ivadet = conti.importo_iva(true).is_zero(); + bool ivanon = conti.importo_iva(FALSE).is_zero(); + + for (r = 0; r < _cg.rows(); r++) + { + TRectype& row = cg(r); + const char rt = row.get_char(RMV_ROWTYPE); + switch (rt) + { + case 'F': ritfis = true; break; + case 'S': ritsoc = true; break; + case 'T': totale = true; break; + default: break; + } + if (rt > ' ') continue; + + if (!totale && row.get_char(RMV_TIPOC) == tipo && row.get_long(RMV_SOTTOCONTO) == codice) + { + row.put(RMV_ROWTYPE, 'T'); + totale = true; + continue; + } + + const real importo(row.get(RMV_IMPORTO)); + const TBill bill(row); + + if (!ritfis && importo == mov.get_real(MOV_RITFIS)) + { + TBill conto_rit; causale.bill(RIGA_PAG_RITFIS, conto_rit); + if (!conto_rit.ok() || conto_rit == bill) + { + row.put(RMV_ROWTYPE, 'F'); + ritfis = true; + continue; + } + } + + if (!ritsoc && importo == mov.get_real(MOV_RITSOC)) + { + TBill conto_rit; causale.bill(RIGA_PAG_RITSOC, conto_rit); + if (!conto_rit.ok() || conto_rit == bill) + { + row.put(RMV_ROWTYPE, 'S'); + ritsoc = true; + continue; + } + } + + if (!conti.ok()) + continue; // Ho esaurito i conti IVA + + if (importo == conti.importo(bill)) + { + row.put(RMV_ROWTYPE, 'I'); + conti.remove(bill); + continue; + } + + if (!ivadet && importo == conti.importo_iva(true)) + { + row.put(RMV_ROWTYPE, 'D'); + conti.remove_iva(true); + continue; + } + + if (!ivanon && importo == conti.importo_iva(FALSE)) + { + row.put(RMV_ROWTYPE, 'N'); + conti.remove_iva(FALSE); + continue; + } + } +} + +TMovimentoPN& TMovimentoPN::get_sum_imponibile_imposta(real& s_imponibili, real& s_imposte) +{ + TRecord_array& iva = iva_rows(); + s_imponibili = ZERO; + s_imposte = ZERO; + for (int i = iva.first_row(); i <= iva.rows(); ++i) + { + TRectype& r = iva[i]; + s_imponibili += r.get_real("IMPONIBILE"); + s_imposte += r.get_real("IMPOSTA"); + } + return *this; +} diff --git a/src/cg/cglib06.cpp b/src/cg/cglib06.cpp index 569ec0417..6a6a276ab 100644 --- a/src/cg/cglib06.cpp +++ b/src/cg/cglib06.cpp @@ -370,83 +370,6 @@ real TMovimento_contabile::imposta(const char * codiva) const return imposta; } -/////////////////////////////////////////////////////////// -// Aggiustamento movimenti rovinati o convertiti male -/////////////////////////////////////////////////////////// - -class TConti_array : private TAssoc_array -{ -public: // TObject - virtual bool ok() const { return items() != 0; } - -public: - bool add(const TBill& conto, const real& importo); - real importo(const TBill& conto); - bool remove(const TBill& conto); - - bool add_iva(bool det, const real& importo); - real importo_iva(bool det); - bool remove_iva(bool det); - - TConti_array() {} - virtual ~TConti_array() {} -}; - -bool TConti_array::add(const TBill& conto, const real& importo) -{ - const char* key = conto.string(); - real* imp = (real*)objptr(key); - - if (imp == nullptr) - TAssoc_array::add(key, importo); - else - *imp += importo; - return imp != nullptr; -} - -real TConti_array::importo(const TBill& conto) -{ - const char* key = conto.string(); - const real* imp = (real*)objptr(key); - return imp ? *imp : ZERO; -} - -bool TConti_array::remove(const TBill& conto) -{ - const char* key = conto.string(); - return TAssoc_array::remove(key); -} - -bool TConti_array::add_iva(bool det, const real& importo) -{ - real* imp = nullptr; - - if (!importo.is_zero()) - { - const char* const key = det ? "D" : "N"; - - imp = (real*)objptr(key); - if (imp == nullptr) - TAssoc_array::add(key, importo); - else - *imp += importo; - } - return imp != nullptr; -} - -real TConti_array::importo_iva(bool det) -{ - const char* const key = det ? "D" : "N"; - const real* imp = (real*)objptr(key); - return imp ? *imp : ZERO; -} - -bool TConti_array::remove_iva(bool det) -{ - const char* const key = det ? "D" : "N"; - return TAssoc_array::remove(key); -} - // Aggiusta i row types se sono andati persi o non sono stati convertiti void TMovimento_contabile::adjust_rowtypes() {