#include "lilib01.h" #define FINO_A_PLAFOND 2 void TLi_manager::elabTipiStati(TToken_string& tipi, TToken_string& stati) { for(int i = 0; i < tipidoc.items(); i++) { TToken_string statidoc(ini_get_string(CONFIG_DITTA, "li", tipidoc.get(i)), ','); for(int j = 0; j < statidoc.items(); j++) { tipi.add(tipidoc.get(i)); stati.add(statidoc.get(j)); } } } void TLi_manager::elabPlafond() { TRelation letint(LF_LETINT); TRectype filtro(letint.curr()); filtro.add("CODCLI", codcli); if(year != -1) filtro.add("ANNO", year); // Creo un cursore ordinato e prelevo la prima riga non chiusa TSorted_cursor c_dicint(&letint, "ANNO-|NUMPROT-", "", 2, &filtro, &filtro); validPlafond = false; if(c_dicint.items() > 0) { for(c_dicint = 0; c_dicint.pos() < c_dicint.items(); ++c_dicint) { TRectype row = c_dicint.curr(); if(!row.get_bool("CHIUSA")) { if(row.get_int("TIPOOP") != FINO_A_PLAFOND) { plafond = -UNO; return; } year = row.get_int("ANNO"); iniDicInt = row.get_date("VSDATA"); plafond = row.get_real("IMPORTO"); validPlafond = true; return; } } } plafond = -UNO; } const real TLi_manager::getPlaRes() { if(!validPlafond) return -UNO; real resPlafond = plafond; TLista_documenti din; // Legge tutti i documenti di input TToken_string tipi, stati; elabTipiStati(tipi, stati); TDate ad(TString(year)<<"1201"); // Trovo tutti i documenti che mi interessano e sottraggo l'imponibile al plafond din.read('D', tipocf, codcli, year, tipi, stati, iniDicInt, ad); for(int i = 0; i < din.items(); i++) { TAssoc_array tabIva = din[i].tabella_iva(true); TString numerazione = din[i].numerazione(); int numdoc = din[i].numero(); int anno = din[i].anno(); TRiepilogo_iva * totali = static_cast(tabIva.get()); if(totali->cod_iva() == codiva) { resPlafond -= totali->imp_orig(); } if(resPlafond < 0) break; } return resPlafond; } bool TLi_manager::testPlafond(TLista_documenti dout, TLog_report& lerr) { bool err = false; real resPlafond = getPlaRes(); real testPlafond = getPlaRes(); real totFatt; int i = 0; // Faccio un ragionamento identico a getPlaRes, ma in input ho la lista di documenti appena elaborati for(int i = 0; i < dout.items(); i++) { TAssoc_array tabIva = dout[i].tabella_iva(true); TString numerazione = dout[i].numerazione(); int numdoc = dout[i].numero(); int anno = dout[i].anno(); TRiepilogo_iva * totali = static_cast(tabIva.get()); if(totali->cod_iva() == codiva) { resPlafond -= totali->imp_orig(); totFatt += totali->imp_orig(); } } if(resPlafond < 0) { err = true; // Alzo il flag dell'errore TString msgerr; msgerr << "Superata dichiarazione di intento cliente N." << dout[i].codcf() << "\nPlafond rimanente: " << resPlafond + totFatt << "\nTotale fatture generate: " << totFatt << "\nSforato di: " << -resPlafond << "\n"; lerr.log(2, msgerr); // 2 <- Errore } return err; } // TIPOCF, CODCLI, ANNO TLi_manager::TLi_manager(const char t, const long c, int y) : tipocf(t), codcli(c), year(y), iniDicInt() { tipidoc = ini_get_string(CONFIG_DITTA, "li", "TIPIDOC"); elabPlafond(); // Estrapolo il codice iva codiva = TCodiceIVA(ini_get_string(CONFIG_DITTA, "li", "CODIVA")); }