From dc46bc0acc0be0c97650327b1e775d0f5e121635 Mon Sep 17 00:00:00 2001 From: guy Date: Mon, 27 Oct 2014 08:19:49 +0000 Subject: [PATCH] Modifiche per gestione IVA x cassa registrata in ritardo git-svn-id: svn://10.65.10.50/branches/R_10_00@23002 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- cg/cg2100.cpp | 3 +++ cg/cg4301.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++----- cg/cg4400.cpp | 8 +++---- cg/cg5800a.frm | 2 +- cg/cglib01.h | 2 +- cg/cglib03.cpp | 2 +- cg/cgsaldac.cpp | 28 ++++++++++++++--------- cg/cgsaldac.h | 3 ++- cg/cgtbbnp.h | 1 + cg/cgtbbnp.uml | 10 ++++++++- 10 files changed, 93 insertions(+), 25 deletions(-) diff --git a/cg/cg2100.cpp b/cg/cg2100.cpp index 3be8587fb..65a40813f 100755 --- a/cg/cg2100.cpp +++ b/cg/cg2100.cpp @@ -2396,8 +2396,11 @@ bool TPrimanota_application::link_anal(const TMask& msk, const char* action) { TConfig config(ini, "Transaction"); config.set("Action", action); + + /* Attualmente genera solo problemi al Cigno che ha CI e CM ma non ha CA if (has_module(CIAUT) && !has_module(CAAUT)) config.set("Mode", "A"); // Salva automaticamente i movimenti di sola industriale + */ TString4 para; para << LF_MOVANA; config.set_paragraph(para); diff --git a/cg/cg4301.cpp b/cg/cg4301.cpp index 9e5d0f726..2ab4b9461 100755 --- a/cg/cg4301.cpp +++ b/cg/cg4301.cpp @@ -640,9 +640,14 @@ bool TLiquidazione_app::sarebbe_da_pagare(const TRectype& mov, const TDate& fine if (mov.get_int(MOV_TIPOMOV) != tm_fattura) return false; - const TDate datareg = mov.get(MOV_DATAREG); - const long giorni = fine - datareg; - if (giorni < 0) + // La data di riferimento sarebbe quella di consegna della merce, ma non avendola usiamo la data documento. + // In assenza della data documento siamo costretti ad usare la data di registrazione + const TDate data_reg = mov.get(MOV_DATAREG); + const TDate data_doc = mov.get(MOV_DATADOC); + const TDate data_rif = data_doc.ok() && data_doc < data_reg ? data_doc : data_reg; + + const long giorni = fine - data_rif; + if (giorni < 0 || fine < data_reg) // Diana 2000 registra a Settebre 2014 fatture con data ducumento nel 2013! return false; if (mov.get_bool(MOV_LIQDIFF)) @@ -1075,7 +1080,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) } #ifndef NDEBUG - if (_mov->get_long(MOV_NUMREG) == 14281) + if (_mov->get_long(MOV_NUMREG) == 15985) int cazzone = 1; #endif @@ -1142,7 +1147,48 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) } if (sarebbe_da_pagare(_mov->curr(), fine)) { - rp.calcola_pagato_periodo(TDate(0L), fine, pg, nc, NULL); + TPointer_array pagscaold; + rp.calcola_pagato_periodo(TDate(0L), fine, pg, nc, &pagscaold); + + // Controllo se ci siam persi delle note di credito negli anni scorsi + if (!nc.is_zero() && pagscaold.items() > pagscatt.items()) + { + FOR_EACH_ARRAY_ITEM(pagscaold, i, obj) + { + const TRectype& pagsca = *(const TRectype*)obj; + const int anno = pagsca.get_int(PAGSCA_ANNO); + const int nrigp = pagsca.get_int(PAGSCA_NRIGP); + // Appartiene all'anno scorso? + if (anno < year_int && nrigp < 999) // 9999 on pagsca -> 999 on ivadiff + { + const TPartita& p = arrpart.partita(pagsca); + const TRiga_partite& rp = p.riga(nrigp); + // E' veramente una nota di credito? + if (rp.tipo() == tm_nota_credito) + { + bool found = false; + FOR_EACH_ARRAY_ITEM(pagscatt, j, ps) + { + if (ps == obj) + { + found = true; + break; + } + } + if (!found) + { + TLocalisamfile id(LF_IVADIFF); + id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); + id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); + id.put("NUMPRO", nrigp); + if (id.read(_isequal) != NOERR || id.get_int("ANNOLIQ") == 0) + pagscatt.add(obj); + } + } + } + } + } + TImporto saldo = rp.importo(false); saldo += pg; saldo += nc; saldo.normalize(sezfat); @@ -1394,6 +1440,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) if (!d.ok()) d = rp.get(PART_DATAREG); idcurr.put("DATAREGP", d); + idcurr.put("ANNOLIQ", d.year()); pagtmp = p.importo_pagsca(pagsca); pagtmp.normalize(sezpag); ultimo = (r == pagscatt.last()) && partita_chiusa_al(p, fine); @@ -1405,11 +1452,11 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) idcurr.put("NUMREGP", _mov->get(MOV_NUMREG)); idcurr.put("NUMRIGP", nrigp); idcurr.put("DATAREGP", _mov->get(MOV_DATAINC)); + idcurr.put("ANNOLIQ", year_int); pagtmp.set(sezpag, pagsca.get_real(PAGSCA_IMPORTO)); ultimo = true; } - idcurr.put("ANNOLIQ", year_int); int meseliq = id.get_date("DATAREGP").month(); if (_freqviva[0] == 'T') { diff --git a/cg/cg4400.cpp b/cg/cg4400.cpp index 179ea668c..6c3bf7efb 100755 --- a/cg/cg4400.cpp +++ b/cg/cg4400.cpp @@ -1228,11 +1228,11 @@ messaggio TStampa_registri_app::controlla_liquidazione() } if (need_refresh) { - continua = yesno_box(FR("Ditta %s: la liquidazione di alcuni mesi precedenti deve " - "essere ricalcolata.\n" - "Si desidera ugualmente proseguire?"),(const char*)ditta); + continua = yesno_box(FR("Ditta %s: la liquidazione di alcuni mesi precedenti deve essere ricalcolata.\n" + "Si desidera ugualmente proseguire?"), (const char*)ditta); if (!continua) return non_proseguire; - continua = yesno_box(TR("Si desidera proseguire con il calcolo e la stampa di liquidazione? \n (altrimenti si prosegue con la sola stampa liquidazione)")); + continua = yesno_box(TR("Si desidera proseguire con il calcolo e la stampa di liquidazione?\n" + "(altrimenti si prosegue con la sola stampa liquidazione)")); if (!continua) return prosegui_stampa; return prosegui_cal_stampa; } diff --git a/cg/cg5800a.frm b/cg/cg5800a.frm index 96fdec370..90d56ce18 100755 --- a/cg/cg5800a.frm +++ b/cg/cg5800a.frm @@ -367,7 +367,7 @@ END VALUTA FFR_REGIMP(11) 18 BEGIN - PROMPT 1 36 "" + PROMPT 29 36 "" END VALUTA FFR_REGIVA(11) 18 diff --git a/cg/cglib01.h b/cg/cglib01.h index 012e15f1f..b8511bfb9 100755 --- a/cg/cglib01.h +++ b/cg/cglib01.h @@ -64,7 +64,7 @@ public: virtual ~TEsercizi_contabili() {} }; -TEsercizi_contabili & esercizi(); +TEsercizi_contabili& esercizi(); enum TipoIVA { diff --git a/cg/cglib03.cpp b/cg/cglib03.cpp index 385ced729..2378b43c9 100755 --- a/cg/cglib03.cpp +++ b/cg/cglib03.cpp @@ -33,7 +33,7 @@ static int codind2tipodet(const TString & codind, real& perc) return tipodet; } -real indetraibile_al(const TString& codind, const TCausale& caus, int annodoc, int & tipodet,const bool is_liq) +real indetraibile_al(const TString& codind, const TCausale& caus, int /*annodoc*/, int & tipodet,const bool is_liq) { real perc; diff --git a/cg/cgsaldac.cpp b/cg/cgsaldac.cpp index 26d3fe13e..7ed17e001 100755 --- a/cg/cgsaldac.cpp +++ b/cg/cgsaldac.cpp @@ -1119,6 +1119,11 @@ int TRiga_partite::calcola_pagato_periodo(const TDate& dal, const TDate& al, TIm if (!is_fattura()) return flag; +#ifdef DBG + if (get_long(PART_NREG) == 15985) + int cazzone = 2; +#endif + TPointer_array pags; const int lastr = rate(); @@ -1139,17 +1144,20 @@ int TRiga_partite::calcola_pagato_periodo(const TDate& dal, const TDate& al, TIm } } - // Cerco di gestire anche i non assegnati sulla unica fattura di una partita - const TRecord_array& unas = partita().unassigned(); - if (unas.rows() > 0) + // Conto le fatture presenti in partita + int fatture = 0; + for (int r = partita().last(); r > 0 && fatture < 2; r = partita().pred(r)) { - int fatture = 0; - for (int r = partita().last(); r > 0 && fatture < 2; r = partita().pred(r)) - { - if (partita().riga(r).tipo() == tm_fattura) - fatture++; - } - if (fatture == 1) + const TRiga_partite& rp = partita().riga(r); + fatture += rp.tipo() == tm_fattura ? 1 : 0; + } + + // Se c'è una sola fattura posso fare dei ragionamenti + if (fatture == 1) + { + // Cerco di gestire anche i non assegnati + const TRecord_array& unas = partita().unassigned(); + if (unas.rows() > 0) { for(int r = unas.last_row(); r > 0; r = unas.pred_row(r)) { diff --git a/cg/cgsaldac.h b/cg/cgsaldac.h index 64c2cadc1..44efb6cb1 100755 --- a/cg/cgsaldac.h +++ b/cg/cgsaldac.h @@ -184,8 +184,9 @@ public: tipo_movimento tipo() const; tipo_pagamento tipo_pag() const; - bool is_fattura() const { return tipo() == tm_fattura; } + bool is_fattura() const { return tipo() == tm_fattura; } bool is_nota_credito() const { return tipo() == tm_nota_credito; } + bool is_insoluto() const { return tipo() == tm_insoluto; } int ultima_ratapagata() const; int ultimo_pagamento(int rata) const; int ultima_rata_con_abbuoni_diffcam() const; diff --git a/cg/cgtbbnp.h b/cg/cgtbbnp.h index 1e01b3cee..7d0628e4f 100755 --- a/cg/cgtbbnp.h +++ b/cg/cgtbbnp.h @@ -48,6 +48,7 @@ #define F_IBAN_INC 152 #define F_PROG 153 +#define F_CREDITOR_ID 154 #endif//__CGTBBNP_H diff --git a/cg/cgtbbnp.uml b/cg/cgtbbnp.uml index 86eecd7e6..1ea3eb540 100755 --- a/cg/cgtbbnp.uml +++ b/cg/cgtbbnp.uml @@ -405,7 +405,7 @@ ENDPAGE PAGE "Parametri Distinte" 0 -1 77 20 -GROUPBOX DLG_NULL 78 5 +GROUPBOX DLG_NULL 78 6 BEGIN PROMPT 1 1 "@bParametri emissione distinte su file" END @@ -426,6 +426,14 @@ BOOLEAN F_IBAN_INC BEGIN PROMPT 2 4 "Genera IBAN su distinte di incasso" FIELD B2 + MESSAGE FALSE DISABLE,F_CREDITOR_ID + MESSAGE TRUE ENABLE, F_CREDITOR_ID +END + +STRING F_CREDITOR_ID 25 +BEGIN + PROMPT 2 5 "Creditor ID per R.I.D. " + FIELD S4 END ENDPAGE