diff --git a/src/fp/fp0700.cpp b/src/fp/fp0700.cpp index 528178cbb..7742a93dd 100644 --- a/src/fp/fp0700.cpp +++ b/src/fp/fp0700.cpp @@ -67,6 +67,13 @@ void TPAR_mask::save_all_fields() ini_set_string(CONFIG_DITTA, "fp", "CAUSALE", codcaus, r); _causali.add(codcaus); } + for (int i = scaus.items(); ; i++) + { + + if (!ini_remove(CONFIG_DITTA, "fp", "CAUSALE", i)) + break; + } + } void TPAR_mask::force_reload_sheet() @@ -92,7 +99,10 @@ void TPAR_mask::load_all_fields() TString16 caus = ini_get_string(CONFIG_DITTA, "fp", "CAUSALE", "", i); if (caus.full()) - scaus.set_row_cell(S_COD_CAUS, caus); + { + int r = scaus.set_row_cell(S_COD_CAUS, caus); + scaus.set_row_cell(S_DESCR, cache().get(LF_CAUSALI, caus, CAU_DESCR), r); + } else break; } @@ -165,7 +175,7 @@ void TPAR_mask::fill() const TCli_for & cli = cached_clifor(mov.get_char(MOV_TIPO), mov.get_long(MOV_CODCF)); bool sent = false; - if (chiave_paf_mov(mov, hfatt, bfatt)) + if (chiave_paf_mov(mov, tipodocsdi, hfatt, bfatt)) { if (paf0100f.search(nullptr, hfatt, bfatt) && paf0100f.sq_get("P1_GESTIONE") != " " && paf0100f.sq_get("P1_ERRINT") != "*") { @@ -219,7 +229,7 @@ void TPAR_mask::fill() } regs.set_row_cell(S_SPLITPAY, split, r); regs.set_row_cell(S_ATTACH, false, r); // verificare - regs.set_row_cell(S_ONLYGEN, true, r); // verificare + regs.set_row_cell(S_ONLYGEN, get_bool(F_PROVVISORIO), r); // verificare } regs.force_update(); @@ -387,46 +397,49 @@ void TPAR_mask::export_paf() { int ndocs = 0; TSheet_field& sht = sfield(F_REGS); - TReg_fp elab(get(F_TIPO_SDI)); + const TString &tipo_doc_sdi = get(F_TIPO_SDI); + TReg_fp elab(tipo_doc_sdi); //elab.set_cache_insert(true); if (!sht.empty()) { - TProgress_monitor pi(sht.items(), "Esportazione Regolarizzazioni"); - - FOR_EACH_SHEET_ROW_LOOP(sht, r) { - if (!pi.add_status()) - break; + TProgress_monitor pi(sht.items(), "Esportazione Regolarizzazioni"); - if (sht.get_bool_row_cell(r, S_SELECTED)) + FOR_EACH_SHEET_ROW_LOOP(sht, r) { - const long nreg = sht.get_long_row_cell(r, S_NUMREG); + if (!pi.add_status()) + break; - // Verifico che il codice sdi nello sheet sia lo stesso sulla testata del documento in caso contrario lo aggiorno - TMovimento_contabile mov(nreg); - - if (elab.reg_to_paf(mov)) - ndocs++; - else + if (sht.get_bool_row_cell(r, S_SELECTED)) { - TString msg; + const long nreg = sht.get_long_row_cell(r, S_NUMREG); - msg.format("La registrazione numero %ld non è stata esportata, continuare?", nreg); - elab.log().log(2, msg); - if (!yesno_box(msg)) - break; + // Verifico che il codice sdi nello sheet sia lo stesso sulla testata del documento in caso contrario lo aggiorno + TMovimento_contabile mov(nreg); + + if (elab.reg_to_paf(mov)) + ndocs++; + else + { + TString msg; + + msg.format("La registrazione numero %ld non è stata esportata, continuare?", nreg); + elab.log().log(2, msg); + if (!yesno_box(msg)) + break; + } } } - } - if (elab.force_commit() <= 0) - { - TString msg; + if (elab.force_commit() <= 0) + { + TString msg; - msg.format("Errore durante il cambiamento di stato finale, potrebbero esser rimaste delle fatture in Pronto"); - elab.log().log(2, msg); - error_box(msg); + msg.format("Errore durante il cambiamento di stato finale, potrebbero esser rimaste delle fatture in Pronto"); + elab.log().log(2, msg); + error_box(msg); + } } elab.show_log(); } @@ -594,7 +607,7 @@ void TPAR_mask::set_err_paf() TString hfatt, bfatt; TPaf_record paf0100f("PAF0100F"); - if (chiave_paf_mov(mov, hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt)) + if (chiave_paf_mov(mov, tipodocsdi, hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt)) { TString query; query << diff --git a/src/fp/fp0700a.h b/src/fp/fp0700a.h index d90170604..c348fe660 100644 --- a/src/fp/fp0700a.h +++ b/src/fp/fp0700a.h @@ -4,8 +4,9 @@ #define F_CAUSALI_TIPO 404 #define F_TIPO_SDI 405 #define F_REGS 406 +#define F_PROVVISORIO 407 #define START_MASK F_DATAINI -#define END_MASK F_REGS +#define END_MASK F_PROVVISORIO #define S_COD_CAUS 101 diff --git a/src/fp/fp0700a.uml b/src/fp/fp0700a.uml index 523d5a0fd..3d09e9450 100644 --- a/src/fp/fp0700a.uml +++ b/src/fp/fp0700a.uml @@ -91,6 +91,11 @@ BEGIN ITEM "TD20|TD20 Autofattura" END + BOOLEAN F_PROVVISORIO + BEGIN + PROMPT 1 15 "Provvisorio" + END + STRING DLG_PROFILE 50 BEGIN PROMPT 1 -1 "Profilo " diff --git a/src/fp/fplib.h b/src/fp/fplib.h index d040a98fc..8d19f5481 100644 --- a/src/fp/fplib.h +++ b/src/fp/fplib.h @@ -36,7 +36,7 @@ TString& complete_num_fp(const TCodice_numerazione& codnum, const int numdoc); // Genera la chiave per i paf -bool chiave_paf_mov(const TRectype& mov, TString& hfatt, TString& bfatt); +bool chiave_paf_mov(const TRectype& mov, const char* tipo_doc_sdi, TString& hfatt, TString& bfatt); bool chiave_paf_doc(const TDocumento& doc, TString& hfatt, TString& bfatt); bool chiave_paf_doc(const TRectype& doc, TString& hfatt, TString& bfatt); // Ritorna cod sdi, pec o vuoto. Chiama get_coddest() diff --git a/src/fp/fplib01.cpp b/src/fp/fplib01.cpp index 576c105a3..5bf17a8d6 100644 --- a/src/fp/fplib01.cpp +++ b/src/fp/fplib01.cpp @@ -166,7 +166,7 @@ TString& complete_num_fp(const TCodice_numerazione& codnum, const int numdoc) */ // Crea la coppia di chiavi per il db PAF a partire da un movimento -bool chiave_paf_mov(const TRectype& mov, TString& hfatt, TString& bfatt) +bool chiave_paf_mov(const TRectype& mov, const char* tipo_doc_sdi, TString& hfatt, TString& bfatt) { TCli_for cli(mov.get_char(MOV_TIPO), mov.get_long(MOV_CODCF)); hfatt.cut(0); @@ -180,8 +180,8 @@ bool chiave_paf_mov(const TRectype& mov, TString& hfatt, TString& bfatt) TString numdoc = mov.get(MOV_NUMDOC); numdoc.lpad(mov.length(DOC_NDOC), '0'); - bfatt = mov.get_date(MOV_DATAREG).date2ansi(); - bfatt << '_' << numdoc; + bfatt.cut(0); + bfatt << mov.get_date(MOV_DATAREG).date2ansi() << '_' << tipo_doc_sdi << '_' << numdoc; return hfatt.full() && bfatt.full(); } @@ -2752,7 +2752,7 @@ bool TReg_fp::initialize(const TMovimento_contabile& mov) // Paese del documento _paese = "IT"; - if (!chiave_paf_mov(mov, _hfatt, _bfatt)) + if (!chiave_paf_mov(mov, _tipo_doc_sdi, _hfatt, _bfatt)) return false; // Preparo il log _log.log(-1, _bfatt); @@ -2948,143 +2948,131 @@ bool TReg_fp::reg_to_paf(const TMovimento_contabile& mov) ok &= export_paf3200f(); // TPaf_record& paf0200f = _paf_container.get_paf("PAF0200F"); - TAnagrafica cliente(mov.clifo()); + TAnagrafica fornitore(mov.clifo()); if (!paf0200f.is_full()) { - if (_ditta.partita_IVA().full()) + if (fornitore.partita_IVA().full()) { - paf0200f.set("P2_FISCIVAPAESE", _ditta.stato_partita_IVA()); - paf0200f.set("P2_FISCIVACOD", _ditta.partita_IVA()); + paf0200f.set("P2_FISCIVAPAESE", fornitore.stato_partita_IVA()); + paf0200f.set("P2_FISCIVACOD", fornitore.partita_IVA()); } - paf0200f.set("P2_CODFISCALE", _ditta.codice_fiscale()); + paf0200f.set("P2_CODFISCALE", fornitore.codice_fiscale()); // if (_ditta.fisica()) { - paf0200f.set("P2_ANANOME", _ditta.nome()); - paf0200f.set("P2_ANACOGNOME", _ditta.cognome()); + paf0200f.set("P2_ANANOME", fornitore.nome()); // + paf0200f.set("P2_ANACOGNOME", fornitore.cognome()); // } else { - paf0200f.set("P2_ANADENOMIN", _ditta.ragione_sociale()); + paf0200f.set("P2_ANADENOMIN", fornitore.ragione_sociale()); // } paf0200f.set("P2_REGFISCALE", ""); //TODO DA RF01 A RF09 // DatiSede - paf0200f.set("P2_SEDEIND", _ditta.via_residenza()); - paf0200f.set("P2_SEDENRCIVICO", _ditta.civico_residenza().left(8)); - paf0200f.set("P2_SEDECAP", _ditta.CAP_residenza()); - paf0200f.set("P2_SEDECOMUNE", _ditta.comune_residenza()); - paf0200f.set("P2_SEDEPROV", _ditta.provincia_residenza()); - paf0200f.set("P2_SEDENAZ", _paese); + paf0200f.set("P2_SEDEIND", fornitore.via_residenza()); // + paf0200f.set("P2_SEDENRCIVICO", fornitore.civico_residenza().left(8)); // + paf0200f.set("P2_SEDECOMUNE", fornitore.comune_residenza()); // + paf0200f.set("P2_SEDENAZ", fornitore.stato_residenza_ISO()); // paf0200f.set("P2_GESTIONE", "D"); - paf0200f.set("P2_RIFAMMINISTR", mov.clifo().vendite().get(CFV_PARIFAMM)); - paf0200f.set("P2_ISCRREASOCIOU", _ditta.sociounico() == 'S' ? "SU" : "SM"); - TISAM_recordset unloc("USE UNLOC\nJOIN COMUNI INTO COM==COMCCIAA\nFROM CODDITTA=#DITTA\nTO CODDITTA=#DITTA"); - unloc.set_var("#DITTA", get_firm().get(NDT_CODDITTA)); - if (unloc.move_first()) + // I clienti esteri possono avere CAP alfanumerici, li tolgo + if (fornitore.stato_residenza_ISO() != "IT") { - const TString& numrea = unloc.get(ULC_NUMCCIAA).as_string(); - if (numrea.full()) - { - paf0200f.set("P2_ISCRREANUM", numrea); - paf0200f.set("P2_ISCRREAUFF", unloc.get("13->" COM_PROVCOM)); - } - } - if (_ditta.giuridica()) - { - TISAM_recordset anagiu("USE ANAGIU\nFROM CODANAGR=#CODICE\nTO CODANAGR=#CODICE"); - - anagiu.set_var("#CODICE", get_firm().get(NDT_CODANAGR)); - if (anagiu.move_first()) - { - paf0200f.set("P2_ISCRREACAP", anagiu.get(ANG_CAPSOC)); - const int ss = anagiu.get(ANG_STATOSOC).as_int(); - paf0200f.set("P2_ISCRREASLIQUID", (ss == 2 || ss == 3) ? "LS" : "LN"); - } + paf0200f.set("P2_SEDECAP", "00000");// } else - paf0200f.set("P2_ISCRREASLIQUID", "LN"); - } - ok &= insert(paf0200f); - // - // - TPaf_record& paf0400f = _paf_container.get_paf("PAF0400F"); - - TString stato = cliente.stato_partita_IVA(); - TTable tab_codiso("%SCE"); - tab_codiso.tab(); - tab_codiso.put("CODTAB", stato); tab_codiso.read(); - TString piva = cliente.partita_IVA(), - fisc = cliente.codice_fiscale(); - if (!stato.full()) - stato = "IT"; - if (tab_codiso.get_bool("B0") || stato == "IT") // Cliente EU - { - if (piva.full()) { - if (piva.len() == 11 && (piva[0] == '8' || piva[0] == '9')) - { - fisc = piva; - piva.cut(0); - } + paf0200f.set("P2_SEDECAP", fornitore.CAP_residenza()); // + paf0200f.set("P2_SEDEPROV", fornitore.provincia_residenza()); // } - else if (fisc.full() && fisc.len() == 11 && (fisc[0] == '8' || fisc[0] == '9')) - piva.cut(0); + } + + ok &= insert(paf0200f); + + + // + // + // + TPaf_record& paf0400f = _paf_container.get_paf("PAF0400F"); - if (piva.full()) + TString stato = _ditta.stato_partita_IVA(); + TTable tab_codiso("%SCE"); + tab_codiso.tab(); + tab_codiso.put("CODTAB", stato); tab_codiso.read(); + TString piva = _ditta.partita_IVA(); + TString fisc = _ditta.codice_fiscale(); + + if (!stato.full()) + stato = "IT"; + if (tab_codiso.get_bool("B0") || stato == "IT") // Cliente EU + { + if (piva.full()) + { + if (piva.len() == 11 && (piva[0] == '8' || piva[0] == '9')) + { + fisc = piva; + piva.cut(0); + } + } + else if (fisc.full() && fisc.len() == 11 && (fisc[0] == '8' || fisc[0] == '9')) + piva.cut(0); + + if (piva.full()) + { + paf0400f.set("P4_FISCIVAPAESE", stato); // + paf0400f.set("P4_FISCIVACOD", piva); // + } + if (fisc.full()) + paf0400f.set("P4_CODFISC", fisc); // + } + else // Cliente EXTRA-EU sempre nel campo della partita iva sui paf { paf0400f.set("P4_FISCIVAPAESE", stato); - paf0400f.set("P4_FISCIVACOD", piva); + if (fisc.full()) // Guardo prima l'id fiscale, perche' e' qui che dovrebbero stare in Campo + paf0400f.set("P4_FISCIVACOD", fisc); + else if (piva.full()) // Altrimenti dovrebbe essere nella partita iva + paf0400f.set("P4_FISCIVACOD", piva); } - if (fisc.full()) - paf0400f.set("P4_CODFISC", fisc); - } - else // Cliente EXTRA-EU sempre nel campo della partita iva sui paf - { - paf0400f.set("P4_FISCIVAPAESE", stato); - if (fisc.full()) // Guardo prima l'id fiscale, perche' e' qui che dovrebbero stare in Campo - paf0400f.set("P4_FISCIVACOD", fisc); - else if (piva.full()) // Altrimenti dovrebbe essere nella partita iva - paf0400f.set("P4_FISCIVACOD", piva); - } - if (cliente.fisica() && cliente.nome().full()) - { - paf0400f.set("P4_ANANOME", cliente.nome()); - paf0400f.set("P4_ANACOGNOME", cliente.cognome()); - } - else - { - paf0400f.set("P4_ANADENOM", cliente.ragione_sociale()); - } - // DatiSede - paf0400f.set("P4_SEDEIND", cliente.via_residenza()); - paf0400f.set("P4_SEDENRCIVICO", cliente.civico_residenza().left(8)); - paf0400f.set("P4_SEDECOMUNE", cliente.comune_residenza()); - paf0400f.set("P4_SEDENAZ", cliente.stato_residenza_ISO()); - // I clienti esteri possono avere CAP alfanumerici, li tolgo - if (cliente.stato_residenza_ISO() != "IT") - { - paf0400f.set("P4_SEDECAP", "00000"); - } - else - { - paf0400f.set("P4_SEDECAP", cliente.CAP_residenza()); - paf0400f.set("P4_SEDEPROV", cliente.provincia_residenza()); - } - // Titolo onorifico! - const TString& titolo = (mov.clifo().vendite().get(CFV_TITOLO)); + if (_ditta.fisica() && _ditta.nome().full()) + { + paf0400f.set("P4_ANANOME", _ditta.nome()); // + paf0400f.set("P4_ANACOGNOME", _ditta.cognome()); // + } + else + { + paf0400f.set("P4_ANADENOM", _ditta.ragione_sociale()); // + } + // DatiSede + paf0400f.set("P4_SEDEIND", _ditta.via_residenza()); + paf0400f.set("P4_SEDENRCIVICO", _ditta.civico_residenza().left(8)); + paf0400f.set("P4_SEDECAP", _ditta.CAP_residenza()); + paf0400f.set("P4_SEDECOMUNE", _ditta.comune_residenza()); + paf0400f.set("P4_SEDEPROV", _ditta.provincia_residenza()); + paf0400f.set("P4_SEDENAZ", _ditta.stato_residenza_ISO()); - if (titolo.full()) - paf0400f.set("P4_ANATITOLO", cache().get("TIT", titolo, "S0")); - paf0400f.set("P4_GESTIONE", "D"); - ok &= insert(paf0400f); - // - // + // Titolo onorifico! + const TString& titolo = (mov.clifo().vendite().get(CFV_TITOLO)); + + if (titolo.full()) + paf0400f.set("P4_ANATITOLO", cache().get("TIT", titolo, "S0")); + paf0400f.set("P4_GESTIONE", "D"); + ok &= insert(paf0400f); + // TPaf_record& paf0700f = _paf_container.get_paf("PAF0700F"); paf0700f.set("P7_TIPODOC", _tipo_doc_sdi); paf0700f.set("P7_DIVISA", "EUR"); // Fisso su euro in quanto effettuiamo il cambio paf0700f.set("P7_DATA", mov.get_date(MOV_DATADOC)); - paf0700f.set("P7_NUMERO", ""); //da chiedere ad ilaria + TString numdoc = mov.get(MOV_NUMDOCEXT); + + if (numdoc.blank()) + numdoc = mov.get(MOV_NUMDOC); + else + { + if (numdoc.len() > 20) + numdoc = numdoc.mid(30); + } + + paf0700f.set("P7_NUMERO", numdoc); paf0700f.set("P7_GESTIONE", "D"); TPaf_record& paf2700f = _paf_container.get_paf("PAF2700F"); @@ -3132,18 +3120,18 @@ bool TReg_fp::reg_to_paf(const TMovimento_contabile& mov) pafw300f.set("PW_CODSDI", "**********"); */ pafw300f.set("PW_CDEST", _coddest); - pafw300f.set("PW_RAGSOC", cliente.ragione_sociale().left(35)); - pafw300f.set("PW_PAESE", cliente.stato_residenza_ISO()); - pafw300f.set("PW_CODICE", cliente.codice_fiscale_estero()); - pafw300f.set("PW_CFISCA", cliente.codice_fiscale()); - pafw300f.set("PW_DENOM", cliente.ragione_sociale()); - if (cliente.fisica() && cliente.nome().full()) + pafw300f.set("PW_RAGSOC", fornitore.ragione_sociale().left(35)); + pafw300f.set("PW_PAESE", fornitore.stato_residenza_ISO()); + pafw300f.set("PW_CODICE", fornitore.codice_fiscale_estero()); + pafw300f.set("PW_CFISCA", fornitore.codice_fiscale()); + pafw300f.set("PW_DENOM", fornitore.ragione_sociale()); + if (fornitore.fisica() && fornitore.nome().full()) { - pafw300f.set("PW_NOME", cliente.nome()); - pafw300f.set("PW_COGN", cliente.cognome()); + pafw300f.set("PW_NOME", fornitore.nome()); + pafw300f.set("PW_COGN", fornitore.cognome()); } else - pafw300f.set("PW_RAGSOC", cliente.ragione_sociale().left(35)); + pafw300f.set("PW_RAGSOC", fornitore.ragione_sociale().left(35)); pafw300f.set("PW_IMPO", mov.get_real(MOV_TOTDOC)); //TODO controllare ????? ok &= insert(pafw300f); return _to_commit = (ok && save_paf()); @@ -3196,6 +3184,6 @@ bool TReg_fp::show_log() TFilename name = "fp_err.log"; b.add(_log); - b.export_text(name, false, 132); + b.export_text(name); return _log.preview(); }