Patch level : 12.00 140
Files correlati : ve010.exe fp010.exe Commento : Invio ritente e casse previdenziali
This commit is contained in:
parent
f5c520de78
commit
f9f2a94979
@ -181,7 +181,6 @@ public:
|
|||||||
bool is_ritenuta() const { return tipo_ritenuta() != '\0'; }
|
bool is_ritenuta() const { return tipo_ritenuta() != '\0'; }
|
||||||
bool is_ritenuta_fiscale() const { return tipo_ritenuta() == RITENUTA_FISCALE; }
|
bool is_ritenuta_fiscale() const { return tipo_ritenuta() == RITENUTA_FISCALE; }
|
||||||
bool is_ritenuta_sociale() const { return tipo_ritenuta() == RITENUTA_SOCIALE; }
|
bool is_ritenuta_sociale() const { return tipo_ritenuta() == RITENUTA_SOCIALE; }
|
||||||
const TString& codice_tipo_ritenuta() const { return get("S13").left(4); }
|
|
||||||
const TString& tipo_riga() const { return get("S8"); }
|
const TString& tipo_riga() const { return get("S8"); }
|
||||||
char genere() const;
|
char genere() const;
|
||||||
const TString& conto_analitico_vendite() const { return ((cod() == "ATR") || (cod() == "RSS")) ? EMPTY_STRING : get_tmp_string() = get("S1").sleft(20); }
|
const TString& conto_analitico_vendite() const { return ((cod() == "ATR") || (cod() == "RSS")) ? EMPTY_STRING : get_tmp_string() = get("S1").sleft(20); }
|
||||||
@ -194,8 +193,9 @@ public:
|
|||||||
const int codtrib() const { return get_int("S10"); }
|
const int codtrib() const { return get_int("S10"); }
|
||||||
const TRectype& rec_caus_770() const;
|
const TRectype& rec_caus_770() const;
|
||||||
const int caus_770() const { return get_int("I6"); }
|
const int caus_770() const { return get_int("I6"); }
|
||||||
const int quadro_770() const { return get_int("S12"); }
|
const TString& quadro_770() const { return get("S12"); }
|
||||||
const int quadroLA_770() const { return get_int("S14"); }
|
const TString& quadroLA_770() const { return get("S14"); }
|
||||||
|
const TString& codice_tipo_ritenuta() const { return get("S13").left(4); }
|
||||||
const TString& codice_cassa_previdenziale() const { return get("S13").left(4); }
|
const TString& codice_cassa_previdenziale() const { return get("S13").left(4); }
|
||||||
bool sogg_a_rit() const { return get_bool("B0"); }
|
bool sogg_a_rit() const { return get_bool("B0"); }
|
||||||
bool spe_cal_rit() const { return get_bool("B1"); }
|
bool spe_cal_rit() const { return get_bool("B1"); }
|
||||||
@ -1147,7 +1147,7 @@ public:
|
|||||||
real spese(const TString & tipo_spesa) const;
|
real spese(const TString & tipo_spesa) const;
|
||||||
real prestazioni() const;
|
real prestazioni() const;
|
||||||
real ritenute(const char tipo = '\0', bool lordo = false, int ndec = AUTO_DECIMALS) const;
|
real ritenute(const char tipo = '\0', bool lordo = false, int ndec = AUTO_DECIMALS) const;
|
||||||
int find_riga_ritenute(const TSpesa_prest * sp, const char tipo = '\0', int from_row = 1);
|
int find_riga_ritenute(const char tipo = '\0', int from_row = 1);
|
||||||
real provvigione(bool first = true, int ndec = AUTO_DECIMALS) const;
|
real provvigione(bool first = true, int ndec = AUTO_DECIMALS) const;
|
||||||
real valore(bool totale, bool lordo = false, int ndec = AUTO_DECIMALS) const;
|
real valore(bool totale, bool lordo = false, int ndec = AUTO_DECIMALS) const;
|
||||||
|
|
||||||
|
|||||||
@ -846,17 +846,17 @@ void TDocumento::copy_data(TRectype& dst, const TRectype& src)
|
|||||||
// Ripristina tutti i campi chiave
|
// Ripristina tutti i campi chiave
|
||||||
set_key(dst, provv, anno, codnum, numdoc);
|
set_key(dst, provv, anno, codnum, numdoc);
|
||||||
dst.init_memo(RECORD_NON_FISICO);
|
dst.init_memo(RECORD_NON_FISICO);
|
||||||
if (is_riga)
|
if (is_riga)
|
||||||
{
|
{
|
||||||
dst.put(RDOC_NRIGA, nriga);
|
dst.put(RDOC_NRIGA, nriga);
|
||||||
dst.put(RDOC_IDRIGA, idriga);
|
dst.put(RDOC_IDRIGA, idriga);
|
||||||
dst.zero(RDOC_MOVMAG);
|
dst.zero(RDOC_MOVMAG);
|
||||||
const TString& memo = src.get(RDOC_DESCEST);
|
const TString& memo = src.get(RDOC_DESCEST);
|
||||||
dst.put(RDOC_DESCEST, memo);
|
dst.put(RDOC_DESCEST, memo);
|
||||||
|
|
||||||
const TString& g1 = src.get(RDOC_RG1);
|
const TString& g1 = src.get(RDOC_RG1);
|
||||||
|
|
||||||
dst.put(RDOC_RG1, g1);
|
dst.put(RDOC_RG1, g1);
|
||||||
((TRiga_documento &) dst).load_memo();
|
((TRiga_documento &) dst).load_memo();
|
||||||
// ((TRiga_documento &)dst).reset_fields((TAuto_variable_rectype &)dst, false);
|
// ((TRiga_documento &)dst).reset_fields((TAuto_variable_rectype &)dst, false);
|
||||||
((TRiga_documento &)dst).set_fields((TAuto_variable_rectype &)src);
|
((TRiga_documento &)dst).set_fields((TAuto_variable_rectype &)src);
|
||||||
@ -1659,7 +1659,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
|
|||||||
const TString80 codcms(get(DOC_CODCMS));
|
const TString80 codcms(get(DOC_CODCMS));
|
||||||
const TString80 fascms(get(DOC_FASCMS));
|
const TString80 fascms(get(DOC_FASCMS));
|
||||||
const TString80 codcos(get(DOC_CODCOSTO));
|
const TString80 codcos(get(DOC_CODCOSTO));
|
||||||
|
|
||||||
/* if (get(DOC_TIPODOC).full() && tipo().causale().full())
|
/* if (get(DOC_TIPODOC).full() && tipo().causale().full())
|
||||||
{
|
{
|
||||||
const TCausale & caus = cached_causale(tipo().causale());
|
const TCausale & caus = cached_causale(tipo().causale());
|
||||||
@ -1708,7 +1708,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
|
|||||||
}
|
}
|
||||||
if (r.is_evadibile() && datacons.ok()) // on 27-9-2013 was if (r.is_evadibile() && is_ordine())
|
if (r.is_evadibile() && datacons.ok()) // on 27-9-2013 was if (r.is_evadibile() && is_ordine())
|
||||||
{
|
{
|
||||||
docevaso &= r.is_evasa();
|
docevaso &= r.is_evasa();
|
||||||
const TDate dcons = r.get_date(RDOC_DATACONS);
|
const TDate dcons = r.get_date(RDOC_DATACONS);
|
||||||
if (!dcons.ok())
|
if (!dcons.ok())
|
||||||
r.put(RDOC_DATACONS, datacons);
|
r.put(RDOC_DATACONS, datacons);
|
||||||
@ -2278,45 +2278,45 @@ bool TDocumento::raggruppabile(const TDocumento& doc, TToken_string& campi) cons
|
|||||||
|
|
||||||
void TDocumento::set_fields(TAuto_variable_rectype & rec)
|
void TDocumento::set_fields(TAuto_variable_rectype & rec)
|
||||||
{
|
{
|
||||||
if (tipo_valido())
|
if (tipo_valido())
|
||||||
{
|
{
|
||||||
TTipo_documento& tipo_doc = (TTipo_documento&)tipo(); // first_formula() is NOT const
|
TTipo_documento& tipo_doc = (TTipo_documento&)tipo(); // first_formula() is NOT const
|
||||||
const TString& tot_doc = tipo_doc.totale_doc();
|
const TString& tot_doc = tipo_doc.totale_doc();
|
||||||
|
|
||||||
for (const TFormula_documento* f = tipo_doc.first_formula(); f; f = tipo_doc.succ_formula())
|
for (const TFormula_documento* f = tipo_doc.first_formula(); f; f = tipo_doc.succ_formula())
|
||||||
{
|
{
|
||||||
TExpr_documento* exp = f->expr();
|
TExpr_documento* exp = f->expr();
|
||||||
if (exp != nullptr) // Puo' succedere che sia NULL con dati incoerenti
|
if (exp != nullptr) // Puo' succedere che sia NULL con dati incoerenti
|
||||||
{
|
{
|
||||||
if (tot_doc == f->name())
|
if (tot_doc == f->name())
|
||||||
{
|
{
|
||||||
TString16 tot_doc_netto(tot_doc);
|
TString16 tot_doc_netto(tot_doc);
|
||||||
tot_doc_netto.insert("_");
|
tot_doc_netto.insert("_");
|
||||||
|
|
||||||
const TFixed_string netto_def(exp->string());
|
const TFixed_string netto_def(exp->string());
|
||||||
TExpr_documento netto_exp(netto_def, _numexpr, this);
|
TExpr_documento netto_exp(netto_def, _numexpr, this);
|
||||||
|
|
||||||
add_field(new TDocumento_variable_field(tot_doc_netto, netto_exp));
|
add_field(new TDocumento_variable_field(tot_doc_netto, netto_exp));
|
||||||
|
|
||||||
if (netto_def == "IMPONIBILI()+IMPOSTE()")
|
if (netto_def == "IMPONIBILI()+IMPOSTE()")
|
||||||
{
|
{
|
||||||
TExpr_documento tot_exp("IMPONIBILI(1)+IMPOSTE(1)", _numexpr, this);
|
TExpr_documento tot_exp("IMPONIBILI(1)+IMPOSTE(1)", _numexpr, this);
|
||||||
add_field(new TDocumento_variable_field(tot_doc, tot_exp));
|
add_field(new TDocumento_variable_field(tot_doc, tot_exp));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TExpr_documento tot_exp(format("%s + _BOLLI(%s)", (const char *) tot_doc_netto,
|
TExpr_documento tot_exp(format("%s + _BOLLI(%s)", (const char *) tot_doc_netto,
|
||||||
(const char*)tot_doc_netto), _numexpr, this);
|
(const char*)tot_doc_netto), _numexpr, this);
|
||||||
add_field(new TDocumento_variable_field(tot_doc, tot_exp));
|
add_field(new TDocumento_variable_field(tot_doc, tot_exp));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
exp->set_doc(this);
|
exp->set_doc(this);
|
||||||
add_field(new TDocumento_variable_field(f->name(), *exp));
|
add_field(new TDocumento_variable_field(f->name(), *exp));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (TVariable_field* src_field = rec.first_variable_field();
|
for (TVariable_field* src_field = rec.first_variable_field();
|
||||||
src_field != nullptr; src_field = rec.succ_variable_field())
|
src_field != nullptr; src_field = rec.succ_variable_field())
|
||||||
@ -2325,7 +2325,7 @@ void TDocumento::set_fields(TAuto_variable_rectype & rec)
|
|||||||
if (src_field->expression() == nullptr)
|
if (src_field->expression() == nullptr)
|
||||||
put(fieldname, rec.get(fieldname));
|
put(fieldname, rec.get(fieldname));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
real TDocumento::imponibile(bool spese, int ndec) const
|
real TDocumento::imponibile(bool spese, int ndec) const
|
||||||
@ -2918,23 +2918,23 @@ real TDocumento::ritenute(const char tipo, bool lordo, int ndec) const
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TDocumento::find_riga_ritenute(const TSpesa_prest * sp, const char tipo, int from_row)
|
int TDocumento::find_riga_ritenute(const char tipo, int from_row)
|
||||||
{
|
{
|
||||||
sp = nullptr;
|
|
||||||
const int nrows = rows();
|
const int nrows = rows();
|
||||||
int r = from_row;
|
int r = from_row;
|
||||||
|
bool found = false;
|
||||||
|
|
||||||
for (; r <= nrows; r++)
|
for (; r <= nrows; r++)
|
||||||
{
|
{
|
||||||
TRiga_documento & riga = row(r);
|
TRiga_documento & riga = row(r);
|
||||||
|
|
||||||
if (riga.is_spese() && riga.spesa().tipo() == tipo)
|
if (riga.is_spese() && riga.spesa().tipo_ritenuta() == tipo)
|
||||||
{
|
{
|
||||||
sp = (const TSpesa_prest *)& riga.spesa();
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return sp == nullptr ? -1 : r ;
|
return found ? r : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
TPagamento& TDocumento::pagamento()
|
TPagamento& TDocumento::pagamento()
|
||||||
@ -3335,10 +3335,10 @@ void TDocumento::update_raee()
|
|||||||
|
|
||||||
void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old, TSheet_field* sh, bool force)
|
void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old, TSheet_field* sh, bool force)
|
||||||
{
|
{
|
||||||
const bool updated = get_bool(DOC_SPESEUPD);
|
const bool updated = get_bool(DOC_SPESEUPD);
|
||||||
|
|
||||||
if (!force && updated)
|
if (!force && updated)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const bool interactive = sh != NULL;
|
const bool interactive = sh != NULL;
|
||||||
|
|
||||||
@ -3376,70 +3376,70 @@ void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old,
|
|||||||
|
|
||||||
if (sp.read(s) != NOERR)
|
if (sp.read(s) != NOERR)
|
||||||
warning_box("Codice spesa '%s' assente", (const char*)s);
|
warning_box("Codice spesa '%s' assente", (const char*)s);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const TString4 tipo(sp.tipo_riga());
|
const TString4 tipo(sp.tipo_riga());
|
||||||
TRiga_documento& riga = new_row(tipo);
|
TRiga_documento& riga = new_row(tipo);
|
||||||
|
|
||||||
riga.put(RDOC_CODART, s);
|
riga.put(RDOC_CODART, s);
|
||||||
riga.generata();
|
riga.generata();
|
||||||
riga.put(RDOC_DESCR, sp.descrizione());
|
riga.put(RDOC_DESCR, sp.descrizione());
|
||||||
if (cod_iva_cli.blank())
|
if (cod_iva_cli.blank())
|
||||||
riga.put(RDOC_CODIVA, sp.cod_iva());
|
riga.put(RDOC_CODIVA, sp.cod_iva());
|
||||||
else
|
else
|
||||||
riga.put(RDOC_CODIVA, cod_iva_cli);
|
riga.put(RDOC_CODIVA, cod_iva_cli);
|
||||||
switch (sp.tipo())
|
switch (sp.tipo())
|
||||||
{
|
{
|
||||||
case 'Q':
|
case 'Q':
|
||||||
{
|
{
|
||||||
real qta = sp.qta();
|
real qta = sp.qta();
|
||||||
if (qta == ZERO)
|
if (qta == ZERO)
|
||||||
qta = UNO;
|
qta = UNO;
|
||||||
riga.put("QTA", qta);
|
riga.put("QTA", qta);
|
||||||
}
|
}
|
||||||
// Continua perche' e' quantita' e valore
|
// Continua perche' e' quantita' e valore
|
||||||
case 'V':
|
case 'V':
|
||||||
{
|
{
|
||||||
const real cambio = get_real(DOC_CAMBIO);
|
const real cambio = get_real(DOC_CAMBIO);
|
||||||
const TString4 valuta = get(DOC_CODVAL);
|
const TString4 valuta = get(DOC_CODVAL);
|
||||||
real prezzo = sp.prezzo();
|
real prezzo = sp.prezzo();
|
||||||
|
|
||||||
sppr_calc(sp, valuta, cambio, prezzo);
|
sppr_calc(sp, valuta, cambio, prezzo);
|
||||||
if (this->tipo().calcolo_lordo())
|
if (this->tipo().calcolo_lordo())
|
||||||
{
|
{
|
||||||
prezzo = riga.iva().lordo(prezzo, ALL_DECIMALS);
|
prezzo = riga.iva().lordo(prezzo, ALL_DECIMALS);
|
||||||
riga.put(RDOC_PREZZOL, prezzo);
|
riga.put(RDOC_PREZZOL, prezzo);
|
||||||
}
|
|
||||||
riga.put(RDOC_PREZZO, prezzo);
|
|
||||||
riga.put(RDOC_UMQTA, sp.um());
|
|
||||||
}
|
}
|
||||||
|
riga.put(RDOC_PREZZO, prezzo);
|
||||||
|
riga.put(RDOC_UMQTA, sp.um());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'P':
|
||||||
|
default:
|
||||||
|
riga.put(RDOC_QTA, sp.perc());
|
||||||
break;
|
break;
|
||||||
case 'P':
|
}
|
||||||
default:
|
|
||||||
riga.put(RDOC_QTA, sp.perc());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (cod_iva_cli.empty())
|
if (cod_iva_cli.empty())
|
||||||
riga.put(RDOC_CODIVA, sp.cod_iva());
|
riga.put(RDOC_CODIVA, sp.cod_iva());
|
||||||
else
|
else
|
||||||
riga.put(RDOC_CODIVA, cod_iva_cli);
|
riga.put(RDOC_CODIVA, cod_iva_cli);
|
||||||
|
|
||||||
riga.put(RDOC_CODCOSTO, sp.cdc());
|
riga.put(RDOC_CODCOSTO, sp.cdc());
|
||||||
riga.put(RDOC_CODCMS, sp.cms());
|
riga.put(RDOC_CODCMS, sp.cms());
|
||||||
riga.put(RDOC_FASCMS, sp.fase());
|
riga.put(RDOC_FASCMS, sp.fase());
|
||||||
riga.cms2tipodet();
|
riga.cms2tipodet();
|
||||||
|
|
||||||
if (interactive)
|
if (interactive)
|
||||||
{
|
{
|
||||||
const int nrow = sh->insert(-1, FALSE);
|
const int nrow = sh->insert(-1, FALSE);
|
||||||
riga.autoload(*sh);
|
riga.autoload(*sh);
|
||||||
sh->check_row(nrow);
|
sh->check_row(nrow);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
put(DOC_SPESEUPD, true);
|
put(DOC_SPESEUPD, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TDocumento::update_conai_qta()
|
void TDocumento::update_conai_qta()
|
||||||
|
|||||||
@ -619,21 +619,20 @@ bool TDocumento::add_dati_generali(TXmlItem & dati_generali)
|
|||||||
dati_generali_doc.AddEnclosedText("Numero", complete_numdoc());
|
dati_generali_doc.AddEnclosedText("Numero", complete_numdoc());
|
||||||
|
|
||||||
const real fiscali = ritenute('F');
|
const real fiscali = ritenute('F');
|
||||||
const TSpesa_prest * fiscale = nullptr;
|
|
||||||
|
for (int r = find_riga_ritenute('F'); r > 0; r = find_riga_ritenute('F', r + 1))
|
||||||
for (int r = find_riga_ritenute(fiscale, 'F'); r > 0; r = find_riga_ritenute(fiscale, 'F', r + 1))
|
|
||||||
{
|
{
|
||||||
if (fiscali != ZERO && fiscale != nullptr) // ritenuta
|
const TSpesa_prest & fiscale = row(r).spesa();
|
||||||
|
|
||||||
|
if (fiscali != ZERO) // ritenuta
|
||||||
{
|
{
|
||||||
TXmlItem & ritenuta = dati_generali_doc.AddChild("DatiRitenuta");
|
TXmlItem & ritenuta = dati_generali_doc.AddChild("DatiRitenuta");
|
||||||
TString tipo;
|
|
||||||
const TRiga_documento & rdoc = row(r);
|
const TRiga_documento & rdoc = row(r);
|
||||||
|
|
||||||
tipo << fiscale->tipo_ritenuta();
|
ritenuta.AddEnclosedTextFull("TipoRitenuta", fiscale.codice_tipo_ritenuta());
|
||||||
ritenuta.AddEnclosedText("TipoRitenuta", tipo);
|
|
||||||
ritenuta.AddEnclosedValue("ImportoRitenuta", rdoc.ritenuta());
|
ritenuta.AddEnclosedValue("ImportoRitenuta", rdoc.ritenuta());
|
||||||
ritenuta.AddEnclosedAliquota("AliquotaRitenuta", fiscale->perc());
|
ritenuta.AddEnclosedAliquota("AliquotaRitenuta", fiscale.perc());
|
||||||
ritenuta.AddEnclosedInt("CausalePagamento", fiscale->quadroLA_770());
|
ritenuta.AddEnclosedTextFull("CausalePagamento", fiscale.quadroLA_770());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (bolli_esenti_dovuti()) // <DatiBollo>
|
if (bolli_esenti_dovuti()) // <DatiBollo>
|
||||||
@ -644,35 +643,30 @@ bool TDocumento::add_dati_generali(TXmlItem & dati_generali)
|
|||||||
bollo.AddEnclosedText("BolloVirtuale", "SI");
|
bollo.AddEnclosedText("BolloVirtuale", "SI");
|
||||||
bollo.AddEnclosedValue("ImportoBollo", bolli_es);
|
bollo.AddEnclosedValue("ImportoBollo", bolli_es);
|
||||||
}
|
}
|
||||||
|
for (int r = find_riga_ritenute('S'); r > 0; r = find_riga_ritenute('S',r +1))
|
||||||
const TSpesa_prest * previdenziale = nullptr;
|
|
||||||
|
|
||||||
for (int r = find_riga_ritenute(previdenziale, 'S'); r > 0; r = find_riga_ritenute(previdenziale, 'S',r +1))
|
|
||||||
{
|
{
|
||||||
if (previdenziale != nullptr) //cassa previdenziale
|
const TSpesa_prest & previdenziale = row(r).spesa();
|
||||||
{
|
const real imponibile = prestazioni();//calc_ritenuta(rdoc.doc());
|
||||||
const real imponibile = prestazioni();//calc_ritenuta(rdoc.doc());
|
const real importo_cassa = imponibile * previdenziale.perc() / CENTO;
|
||||||
const real importo_cassa = imponibile * previdenziale->perc() / CENTO;
|
|
||||||
|
|
||||||
// Inserisco il tutto nei dati riepilogo
|
// Inserisco il tutto nei dati riepilogo
|
||||||
TXmlItem & cassa = dati_generali_doc.AddChild("DatiCassaPrevidenziale");
|
TXmlItem & cassa = dati_generali_doc.AddChild("DatiCassaPrevidenziale");
|
||||||
|
|
||||||
cassa.AddEnclosedText("TipoCassa", previdenziale->codice_cassa_previdenziale());
|
cassa.AddEnclosedText("TipoCassa", previdenziale.codice_cassa_previdenziale());
|
||||||
cassa.AddEnclosedReal("AlCassa", previdenziale->perc());
|
cassa.AddEnclosedReal("AlCassa", previdenziale.perc());
|
||||||
cassa.AddEnclosedValue("ImportoContributoCassa", importo_cassa);
|
cassa.AddEnclosedValue("ImportoContributoCassa", importo_cassa);
|
||||||
cassa.AddEnclosedValue("ImponibileCassa", imponibile); // qui
|
cassa.AddEnclosedValue("ImponibileCassa", imponibile); // qui
|
||||||
|
|
||||||
const TCodiceIVA & i = cached_codIVA(previdenziale->cod_iva());
|
const TCodiceIVA & i = cached_codIVA(previdenziale.cod_iva());
|
||||||
|
|
||||||
cassa.AddEnclosedAliquota("AliquotaIVA", i.percentuale());
|
cassa.AddEnclosedAliquota("AliquotaIVA", i.percentuale());
|
||||||
if (previdenziale->sogg_a_rit())
|
if (previdenziale.sogg_a_rit())
|
||||||
cassa.AddEnclosedText("Ritenuta", "SI");
|
cassa.AddEnclosedText("Ritenuta", "SI");
|
||||||
cassa.AddEnclosedText("Natura", i.natura());
|
cassa.AddEnclosedText("Natura", i.natura());
|
||||||
|
|
||||||
TString rifamm = previdenziale->descrizione().sleft(30);
|
TString rifamm = previdenziale.descrizione().sleft(30);
|
||||||
|
|
||||||
cassa.AddEnclosedTextFull("RiferimentoAmministrazione", rifamm.trim());
|
cassa.AddEnclosedTextFull("RiferimentoAmministrazione", rifamm.trim());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/*if (false) //sconto qui Lo sconto in testata stato disabilitato in quanto su Campo influenza solo le righe merci mentre dovrebbe modificare tutte le righe
|
/*if (false) //sconto qui Lo sconto in testata stato disabilitato in quanto su Campo influenza solo le righe merci mentre dovrebbe modificare tutte le righe
|
||||||
{
|
{
|
||||||
@ -1194,20 +1188,20 @@ const TString& TDocumento::descrizione(const TRiga_documento& rdoc)
|
|||||||
{
|
{
|
||||||
if (rdoc.get_bool(RDOC_DESCLUNGA))
|
if (rdoc.get_bool(RDOC_DESCLUNGA))
|
||||||
{
|
{
|
||||||
TString& tmp = get_tmp_string();
|
TString& tmp = get_tmp_string();
|
||||||
|
|
||||||
tmp << rdoc.get(RDOC_DESCR) << rdoc.get(RDOC_DESCEST);
|
tmp << rdoc.get(RDOC_DESCR) << rdoc.get(RDOC_DESCEST);
|
||||||
|
|
||||||
tmp.replace('\n', ' ');
|
tmp.replace('\n', ' ');
|
||||||
tmp.strip_double_spaces();
|
tmp.strip_double_spaces();
|
||||||
tmp.trim();
|
tmp.trim();
|
||||||
if (tmp.len() > 1000)
|
if (tmp.len() > 1000)
|
||||||
{
|
{
|
||||||
TString err;
|
TString err;
|
||||||
|
|
||||||
err << "Il documento " << rdoc.doc().anno() << " " << rdoc.doc().codice_numerazione().codice() << " " << rdoc.doc().numero() << " ha la riga numero " << rdoc.numero() << " pi lunga di quanto supportato dal formato dell'agenzia delle entrate, verr troncata a 1000 caratteri";
|
err << "Il documento " << rdoc.doc().anno() << " " << rdoc.doc().codice_numerazione().codice() << " " << rdoc.doc().numero() << " ha la riga numero " << rdoc.numero() << " pi lunga di quanto supportato dal formato dell'agenzia delle entrate, verr troncata a 1000 caratteri";
|
||||||
get_xml_log()->log(1, err);
|
get_xml_log()->log(1, err);
|
||||||
}
|
}
|
||||||
return tmp.left(1000);
|
return tmp.left(1000);
|
||||||
}
|
}
|
||||||
return rdoc.get(RDOC_DESCR);
|
return rdoc.get(RDOC_DESCR);
|
||||||
@ -2064,8 +2058,8 @@ bool TDocumento::get_bank(TTipo_pag tipo, TString& iban, TString& abi, TString&
|
|||||||
if (tipo == _bonfico)
|
if (tipo == _bonfico)
|
||||||
return get_bank_presentazione(iban, abi, cab, istituto);
|
return get_bank_presentazione(iban, abi, cab, istituto);
|
||||||
else
|
else
|
||||||
if (tipo == _ric_ban || tipo == _rid)
|
if (tipo == _ric_ban || tipo == _rid)
|
||||||
return get_bank_appoggio(iban, abi, cab, istituto);
|
return get_bank_appoggio(iban, abi, cab, istituto);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2091,13 +2085,13 @@ bool TDocumento::get_bank_presentazione(TString& iban, TString& abi, TString& ca
|
|||||||
key.add(codcf());
|
key.add(codcf());
|
||||||
key.add("N");
|
key.add("N");
|
||||||
key.add(1);
|
key.add(1);
|
||||||
const TRectype& cfban = cache().get(LF_CFBAN, key);
|
const TRectype& cfban = cache().get(LF_CFBAN, key);
|
||||||
if (!cfban.empty())
|
if (!cfban.empty())
|
||||||
{
|
{
|
||||||
abi = cfban.get(CFBAN_ABI);
|
abi = cfban.get(CFBAN_ABI);
|
||||||
cab = cfban.get(CFBAN_CAB);
|
cab = cfban.get(CFBAN_CAB);
|
||||||
found = abi.full() && cab.full();
|
found = abi.full() && cab.full();
|
||||||
iban = cfban.get(CFBAN_IBAN);
|
iban = cfban.get(CFBAN_IBAN);
|
||||||
if (found && iban.blank())
|
if (found && iban.blank())
|
||||||
get_bnp_iban(abi, cab, -1, iban);
|
get_bnp_iban(abi, cab, -1, iban);
|
||||||
}
|
}
|
||||||
@ -2130,13 +2124,13 @@ bool TDocumento::get_bank_appoggio(TString& iban, TString& abi, TString& cab, TS
|
|||||||
key.add(codcf());
|
key.add(codcf());
|
||||||
key.add("V");
|
key.add("V");
|
||||||
key.add(1);
|
key.add(1);
|
||||||
const TRectype& cfban = cache().get(LF_CFBAN, key);
|
const TRectype& cfban = cache().get(LF_CFBAN, key);
|
||||||
if (!cfban.empty())
|
if (!cfban.empty())
|
||||||
{
|
{
|
||||||
const TString& abi_cf = cfban.get(CFBAN_ABI);
|
const TString& abi_cf = cfban.get(CFBAN_ABI);
|
||||||
const TString& cab_cf = cfban.get(CFBAN_CAB);
|
const TString& cab_cf = cfban.get(CFBAN_CAB);
|
||||||
const bool found_cf = abi_cf.full() && cab_cf.full();
|
const bool found_cf = abi_cf.full() && cab_cf.full();
|
||||||
iban = cfban.get(CFBAN_IBAN);
|
iban = cfban.get(CFBAN_IBAN);
|
||||||
if (found_cf && iban.blank())
|
if (found_cf && iban.blank())
|
||||||
get_bnp_iban(abi_cf, cab_cf, -1, iban);
|
get_bnp_iban(abi_cf, cab_cf, -1, iban);
|
||||||
}
|
}
|
||||||
@ -2253,33 +2247,33 @@ bool TDocumento::add_allegati(TXmlItem & body)
|
|||||||
|
|
||||||
if (get_fp_bool_var(FP_ALLEG_FAT))
|
if (get_fp_bool_var(FP_ALLEG_FAT))
|
||||||
{
|
{
|
||||||
if (!tipo().main_print_profile(rep, 2))
|
if (!tipo().main_print_profile(rep, 2))
|
||||||
get_xml_log()->log(1, "Impossibile generare la fattura, non disponibile un profilo di stampa per questo tipo documento!");
|
get_xml_log()->log(1, "Impossibile generare la fattura, non disponibile un profilo di stampa per questo tipo documento!");
|
||||||
else
|
|
||||||
{
|
|
||||||
//ve1 -2 {CODNUM} {ANNO} {PROVV} {NDOC}(-{ANDOC}) {TIPO_ELABORAZIONE} {TIPO_STAMPA} {NUM_COPIE} {ARCHIVIAZIONE}
|
|
||||||
// Costruisco la chiamata
|
|
||||||
TString commandline = "ve011 -2 ";
|
|
||||||
|
|
||||||
commandline << get(DOC_CODNUM) << ' ' << get(DOC_ANNO) << ' ' << get(DOC_PROVV) << ' ' << get(DOC_NDOC) << " X P 1 D"; // X: stampa su disco, P: provvisorio, 1: 1 copia, D: disabilita archiviazione
|
|
||||||
|
|
||||||
TExternal_app interattivo(commandline);
|
|
||||||
|
|
||||||
if (interattivo.run() != NOERR)
|
|
||||||
{
|
|
||||||
TString msgerr = "Fallita generazione PDF documento ";
|
|
||||||
msgerr << get(DOC_CODNUM) << ' ' << get(DOC_ANNO) << ' ' << get(DOC_PROVV) << ' ' << get(DOC_NDOC);
|
|
||||||
error_box(msgerr);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TFilename pdf; pdf.tempdir();
|
//ve1 -2 {CODNUM} {ANNO} {PROVV} {NDOC}(-{ANDOC}) {TIPO_ELABORAZIONE} {TIPO_STAMPA} {NUM_COPIE} {ARCHIVIAZIONE}
|
||||||
pdf << SLASH << get(DOC_ANNO) << '_' << get(DOC_CODNUM) << '_' << get(DOC_NDOC) << ".pdf";
|
// Costruisco la chiamata
|
||||||
if (!pdf.exist() && !yesno_box("Attenzione! Non stato possibile creare il pdf, continuare?"))
|
TString commandline = "ve011 -2 ";
|
||||||
return false;
|
|
||||||
add_allegato(body, pdf, "Fattura di cortesia");
|
commandline << get(DOC_CODNUM) << ' ' << get(DOC_ANNO) << ' ' << get(DOC_PROVV) << ' ' << get(DOC_NDOC) << " X P 1 D"; // X: stampa su disco, P: provvisorio, 1: 1 copia, D: disabilita archiviazione
|
||||||
}
|
|
||||||
}
|
TExternal_app interattivo(commandline);
|
||||||
|
|
||||||
|
if (interattivo.run() != NOERR)
|
||||||
|
{
|
||||||
|
TString msgerr = "Fallita generazione PDF documento ";
|
||||||
|
msgerr << get(DOC_CODNUM) << ' ' << get(DOC_ANNO) << ' ' << get(DOC_PROVV) << ' ' << get(DOC_NDOC);
|
||||||
|
error_box(msgerr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TFilename pdf; pdf.tempdir();
|
||||||
|
pdf << SLASH << get(DOC_ANNO) << '_' << get(DOC_CODNUM) << '_' << get(DOC_NDOC) << ".pdf";
|
||||||
|
if (!pdf.exist() && !yesno_box("Attenzione! Non stato possibile creare il pdf, continuare?"))
|
||||||
|
return false;
|
||||||
|
add_allegato(body, pdf, "Fattura di cortesia");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TToken_string allegati(get(DOC_CARTACEI), '\n');
|
TToken_string allegati(get(DOC_CARTACEI), '\n');
|
||||||
@ -2474,7 +2468,7 @@ bool TDocumento::generate_xml(TLog_report * log)
|
|||||||
if (update)
|
if (update)
|
||||||
{
|
{
|
||||||
put(DOC_PRG_INVIO, prg);
|
put(DOC_PRG_INVIO, prg);
|
||||||
set_fp_var(FP_PRG_INVIO, prg);
|
set_fp_var(FP_PRG_INVIO, prg);
|
||||||
put(DOC_XML_NAME, fname);
|
put(DOC_XML_NAME, fname);
|
||||||
}
|
}
|
||||||
if (get(DOC_STATO_SDI).blank())
|
if (get(DOC_STATO_SDI).blank())
|
||||||
@ -3119,7 +3113,6 @@ bool TDocumento::get_dati_generali(TXmlItem & dati_generali, real & totale_imp)
|
|||||||
put(DOC_MESELIQ, datarif.month());
|
put(DOC_MESELIQ, datarif.month());
|
||||||
|
|
||||||
const real fiscali = ritenute('F');
|
const real fiscali = ritenute('F');
|
||||||
const TSpesa_prest * fiscale = nullptr;
|
|
||||||
TXmlItem * ritenuta = dati_generali_doc->FindFirstChild("DatiRitenuta");
|
TXmlItem * ritenuta = dati_generali_doc->FindFirstChild("DatiRitenuta");
|
||||||
int child = 0;
|
int child = 0;
|
||||||
|
|
||||||
@ -3127,16 +3120,14 @@ bool TDocumento::get_dati_generali(TXmlItem & dati_generali, real & totale_imp)
|
|||||||
{
|
{
|
||||||
int riga_ritfisc = -1;
|
int riga_ritfisc = -1;
|
||||||
|
|
||||||
for (int r = find_riga_ritenute(fiscale, 'F'); riga_ritfisc < 0 && r > 0; r = find_riga_ritenute(fiscale, 'F', r + 1))
|
for (int r = find_riga_ritenute('F'); riga_ritfisc < 0 && r > 0; r = find_riga_ritenute('F', r + 1))
|
||||||
{
|
{
|
||||||
if (fiscale != nullptr) // ritenuta
|
const TSpesa_prest & fiscale = row(r).spesa();
|
||||||
{
|
TString tipo;
|
||||||
TString tipo;
|
const TRiga_documento & rdoc = row(r);
|
||||||
const TRiga_documento & rdoc = row(r);
|
|
||||||
|
|
||||||
if (ritenuta->GetEnclosedText("TipoRitenuta") == fiscale->codice_tipo_ritenuta())
|
if (ritenuta->GetEnclosedText("TipoRitenuta") == fiscale.codice_tipo_ritenuta())
|
||||||
riga_ritfisc = r;
|
riga_ritfisc = r;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (riga_ritfisc < 0)
|
if (riga_ritfisc < 0)
|
||||||
{
|
{
|
||||||
@ -3181,7 +3172,6 @@ bool TDocumento::get_dati_generali(TXmlItem & dati_generali, real & totale_imp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
TXmlItem * cassaprev = dati_generali_doc->FindFirstChild("DatiCassaPrevidenziale");
|
TXmlItem * cassaprev = dati_generali_doc->FindFirstChild("DatiCassaPrevidenziale");
|
||||||
const TSpesa_prest * cassa = nullptr;
|
|
||||||
|
|
||||||
child = 0;
|
child = 0;
|
||||||
for (TXmlItem * cassaprev = dati_generali_doc->FindChild("DatiCassaPrevidenziale", child); cassaprev != nullptr; cassaprev = dati_generali_doc->FindChild("DatiCassaPrevidenziale", child))
|
for (TXmlItem * cassaprev = dati_generali_doc->FindChild("DatiCassaPrevidenziale", child); cassaprev != nullptr; cassaprev = dati_generali_doc->FindChild("DatiCassaPrevidenziale", child))
|
||||||
@ -3194,16 +3184,15 @@ bool TDocumento::get_dati_generali(TXmlItem & dati_generali, real & totale_imp)
|
|||||||
|
|
||||||
const bool soggrit = strsoggrit == "si";
|
const bool soggrit = strsoggrit == "si";
|
||||||
|
|
||||||
for (int r = find_riga_ritenute(cassa, 'S'); riga_ritsoc < 0 && r > 0; r = find_riga_ritenute(cassa, 'S', r + 1))
|
for (int r = find_riga_ritenute('S'); riga_ritsoc < 0 && r > 0; r = find_riga_ritenute('S', r + 1))
|
||||||
{
|
{
|
||||||
if (cassa != nullptr) // ritenuta
|
const TSpesa_prest & cassa = row(r).spesa();
|
||||||
{
|
TString tipo;
|
||||||
TString tipo;
|
const TRiga_documento & rdoc = row(r);
|
||||||
const TRiga_documento & rdoc = row(r);
|
|
||||||
|
if (codicesdi == cassa.codice_cassa_previdenziale())
|
||||||
|
riga_ritsoc = r;
|
||||||
|
|
||||||
if (codicesdi == cassa->codice_cassa_previdenziale())
|
|
||||||
riga_ritsoc = r;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (riga_ritsoc < 0)
|
if (riga_ritsoc < 0)
|
||||||
{
|
{
|
||||||
@ -3262,7 +3251,6 @@ bool TDocumento::get_dati_generali(TXmlItem & dati_generali, real & totale_imp)
|
|||||||
if (codiva.blank())
|
if (codiva.blank())
|
||||||
codiva = sp->cod_iva();
|
codiva = sp->cod_iva();
|
||||||
}
|
}
|
||||||
|
|
||||||
riga.put(RDOC_DESCR, sp->descrizione());
|
riga.put(RDOC_DESCR, sp->descrizione());
|
||||||
riga.put(RDOC_UMQTA, sp->um());
|
riga.put(RDOC_UMQTA, sp->um());
|
||||||
riga.put(RDOC_CODIVA, codiva);
|
riga.put(RDOC_CODIVA, codiva);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user