Patch level : nopatch

Files correlati     :
Commento        :

Implementazione nuovo modulo FP
This commit is contained in:
smen 2021-11-30 17:34:40 +01:00
parent 7137749816
commit 99e9ff1229
5 changed files with 161 additions and 154 deletions

View File

@ -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 <<

View File

@ -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

View File

@ -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 "

View File

@ -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()

View File

@ -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();
// <CedentePrestatore>
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);
// </CedentePrestatore>
// <CessionarioCommittente>
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);
// </CedentePrestatore>
// </CedentePrestatore>
// <CessionarioCommittente>
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);
// </CessionarioCommittente>
// <DatiGenerali>
// 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);
// </CessionarioCommittente>
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();
}