Patch level : 12.0 982

Files correlati     :
Commento            :

Ristrutturato modulo li
This commit is contained in:
Alessandro Bonazzi 2020-07-26 19:53:27 +02:00
parent 27abaa5446
commit 97b82a31b0
4 changed files with 227 additions and 82 deletions

View File

@ -1923,9 +1923,11 @@ BEGIN
CHECKTYPE NORMAL
FLAG "U"
END
GROUPBOX DLG_NULL 76 4
STRING DLG_NULL 76 4
BEGIN
PROMPT 1 13 "Dati lettera esenzione"
FLAGS "DH" // NON PIU UTILIZZATI
END
STRING F_VSNRPROT 7
@ -1934,6 +1936,7 @@ BEGIN
FIELD LF_CFVEN->VSNRPROT
GROUP 7
HELP "Vostro nr. di protocollo della lettera"
FLAGS "DH" // NON PIU UTILIZZATI
END
DATE F_VSDATAREG
@ -1942,6 +1945,7 @@ BEGIN
FIELD LF_CFVEN->VSDATAREG
GROUP 7
HELP "Data di registrazione della lettera"
FLAGS "DH" // NON PIU UTILIZZATI
END
STRING F_NSNRPROT 7
@ -1950,19 +1954,21 @@ BEGIN
FIELD LF_CFVEN->NSNPROT
GROUP 7
HELP "Nostro nr. di protocollo della lettera"
FLAGS "DH" // NON PIU UTILIZZATI
END
DATE F_NSDATAREG
BEGIN
PROMPT 40 15 "Ns data registrazione "
PROMPT 40 13 "Ns data registrazione "
FIELD LF_CFVEN->NSDATAREG
GROUP 7
HELP "Data di registrazione della lettera"
FLAGS "DH" // NON PIU UTILIZZATI
END
NUMBER F_CODCFFATT 6
BEGIN
PROMPT 2 17 "Fatturare a "
PROMPT 2 13 "Fatturare a "
FIELD CODCFFATT
FLAGS "GR"
USE LF_CLIFO KEY 1
@ -1981,7 +1987,7 @@ END
STRING F_DESCFFATT 50 30
BEGIN
PROMPT 25 17 ""
PROMPT 25 13 ""
USE LF_CLIFO KEY 2
INPUT TIPOCF F_TIPOCF SELECT
INPUT RAGSOC F_DESCFFATT
@ -1997,7 +2003,7 @@ END
STRING F_CATFIN 2
BEGIN
PROMPT 2 18 "Categoria finanziaria "
PROMPT 2 14 "Categoria finanziaria "
FIELD LF_CFVEN->CATFIN
USE %CFI
INPUT CODTAB F_CATFIN

View File

@ -1295,6 +1295,24 @@ public:
~TTransfer_file();
};
class TConti_array : private TAssoc_array
{
public: // TObject
virtual bool ok() const { return items() != 0; }
public:
bool add(const TBill& conto, const real& importo);
real importo(const TBill& conto);
bool remove(const TBill& conto);
bool add_iva(bool det, const real& importo);
real importo_iva(bool det);
bool remove_iva(bool det);
TConti_array() {}
virtual ~TConti_array() {}
};
class TMovimentoPN : public TRelation
{
// class TMovimentoPN : public TRelation

View File

@ -2063,3 +2063,201 @@ int TMovimentoPN::remove()
return err;
}
///////////////////////////////////////////////////////////
// Aggiustamento movimenti rovinati o convertiti male
///////////////////////////////////////////////////////////
bool TConti_array::add(const TBill& conto, const real& importo)
{
const char* key = conto.string();
real* imp = (real*)objptr(key);
if (imp == nullptr)
TAssoc_array::add(key, importo);
else
*imp += importo;
return imp != nullptr;
}
real TConti_array::importo(const TBill& conto)
{
const char* key = conto.string();
const real* imp = (real*)objptr(key);
return imp ? *imp : ZERO;
}
bool TConti_array::remove(const TBill& conto)
{
const char* key = conto.string();
return TAssoc_array::remove(key);
}
bool TConti_array::add_iva(bool det, const real& importo)
{
real* imp = nullptr;
if (!importo.is_zero())
{
const char* const key = det ? "D" : "N";
imp = (real*)objptr(key);
if (imp == nullptr)
TAssoc_array::add(key, importo);
else
*imp += importo;
}
return imp != nullptr;
}
real TConti_array::importo_iva(bool det)
{
const char* const key = det ? "D" : "N";
const real* imp = (real*)objptr(key);
return imp ? *imp : ZERO;
}
bool TConti_array::remove_iva(bool det)
{
const char* const key = det ? "D" : "N";
return TAssoc_array::remove(key);
}
real TMovimentoPN::indetraibile_al(const TString& codind, const TCausale& caus, int annodoc) const
{
int tipodet = 0;
return ::indetraibile_al(codind, caus, annodoc, tipodet);
}
int TMovimentoPN::analizza_riga_IVA(const real& imptot, const real& ivatot, const TCausale& caus,
int annodoc, const TString& codiva, const TString& codind,
real& imp_det, real& iva_det, real& imp_ind, real& iva_ind) const
{
const real perc_ind = indetraibile_al(codind, caus, annodoc);
const bool corrispettivo = caus.corrispettivi();
TBill billind; caus.bill(RIGA_IVA_NON_DETRAIBILE, billind);
const bool iva_ind_al_costo = !billind.ok();
return analizza_IVA(imptot, ivatot, perc_ind, corrispettivo, iva_ind_al_costo,
codiva, imp_det, iva_det, imp_ind, iva_ind);
}
// Aggiusta i row types se sono andati persi o non sono stati convertiti
void TMovimentoPN::adjust_rowtypes()
{
const TRectype& mov = curr();
const char tipo = mov.get_char(MOV_TIPO);
const long codice = mov.get_long(MOV_CODCF);
const int annoiva = mov.get_int(MOV_ANNOIVA);
const int annodoc = mov.get_date(MOV_DATADOC).year();
const TCausale causale(mov.get(MOV_CODCAUS), annoiva);
TConti_array conti;
int r;
for (r = 0; r < _iva.rows(); r++)
{
const TRectype& row = iva(r);
const TBill bill(row);
const real imponibile(row.get(RMI_IMPONIBILE));
const real imposta(row.get(RMI_IMPOSTA));
const TString4 codiva = row.get(RMI_CODIVA);
const TString4 codind = row.get(RMI_TIPODET);
real imp_det, iva_det, imp_ind, iva_ind;
analizza_riga_IVA(imponibile, imposta, causale, annodoc, codiva, codind,
imp_det, iva_det, imp_ind, iva_ind);
conti.add(bill, imp_det + imp_ind);
conti.add_iva(false, iva_ind);
conti.add_iva(true, iva_det);
}
bool totale = FALSE;
bool ritfis = mov.get_real(MOV_RITFIS).is_zero();
bool ritsoc = mov.get_real(MOV_RITSOC).is_zero();
bool ivadet = conti.importo_iva(true).is_zero();
bool ivanon = conti.importo_iva(FALSE).is_zero();
for (r = 0; r < _cg.rows(); r++)
{
TRectype& row = cg(r);
const char rt = row.get_char(RMV_ROWTYPE);
switch (rt)
{
case 'F': ritfis = true; break;
case 'S': ritsoc = true; break;
case 'T': totale = true; break;
default: break;
}
if (rt > ' ') continue;
if (!totale && row.get_char(RMV_TIPOC) == tipo && row.get_long(RMV_SOTTOCONTO) == codice)
{
row.put(RMV_ROWTYPE, 'T');
totale = true;
continue;
}
const real importo(row.get(RMV_IMPORTO));
const TBill bill(row);
if (!ritfis && importo == mov.get_real(MOV_RITFIS))
{
TBill conto_rit; causale.bill(RIGA_PAG_RITFIS, conto_rit);
if (!conto_rit.ok() || conto_rit == bill)
{
row.put(RMV_ROWTYPE, 'F');
ritfis = true;
continue;
}
}
if (!ritsoc && importo == mov.get_real(MOV_RITSOC))
{
TBill conto_rit; causale.bill(RIGA_PAG_RITSOC, conto_rit);
if (!conto_rit.ok() || conto_rit == bill)
{
row.put(RMV_ROWTYPE, 'S');
ritsoc = true;
continue;
}
}
if (!conti.ok())
continue; // Ho esaurito i conti IVA
if (importo == conti.importo(bill))
{
row.put(RMV_ROWTYPE, 'I');
conti.remove(bill);
continue;
}
if (!ivadet && importo == conti.importo_iva(true))
{
row.put(RMV_ROWTYPE, 'D');
conti.remove_iva(true);
continue;
}
if (!ivanon && importo == conti.importo_iva(FALSE))
{
row.put(RMV_ROWTYPE, 'N');
conti.remove_iva(FALSE);
continue;
}
}
}
TMovimentoPN& TMovimentoPN::get_sum_imponibile_imposta(real& s_imponibili, real& s_imposte)
{
TRecord_array& iva = iva_rows();
s_imponibili = ZERO;
s_imposte = ZERO;
for (int i = iva.first_row(); i <= iva.rows(); ++i)
{
TRectype& r = iva[i];
s_imponibili += r.get_real("IMPONIBILE");
s_imposte += r.get_real("IMPOSTA");
}
return *this;
}

View File

@ -370,83 +370,6 @@ real TMovimento_contabile::imposta(const char * codiva) const
return imposta;
}
///////////////////////////////////////////////////////////
// Aggiustamento movimenti rovinati o convertiti male
///////////////////////////////////////////////////////////
class TConti_array : private TAssoc_array
{
public: // TObject
virtual bool ok() const { return items() != 0; }
public:
bool add(const TBill& conto, const real& importo);
real importo(const TBill& conto);
bool remove(const TBill& conto);
bool add_iva(bool det, const real& importo);
real importo_iva(bool det);
bool remove_iva(bool det);
TConti_array() {}
virtual ~TConti_array() {}
};
bool TConti_array::add(const TBill& conto, const real& importo)
{
const char* key = conto.string();
real* imp = (real*)objptr(key);
if (imp == nullptr)
TAssoc_array::add(key, importo);
else
*imp += importo;
return imp != nullptr;
}
real TConti_array::importo(const TBill& conto)
{
const char* key = conto.string();
const real* imp = (real*)objptr(key);
return imp ? *imp : ZERO;
}
bool TConti_array::remove(const TBill& conto)
{
const char* key = conto.string();
return TAssoc_array::remove(key);
}
bool TConti_array::add_iva(bool det, const real& importo)
{
real* imp = nullptr;
if (!importo.is_zero())
{
const char* const key = det ? "D" : "N";
imp = (real*)objptr(key);
if (imp == nullptr)
TAssoc_array::add(key, importo);
else
*imp += importo;
}
return imp != nullptr;
}
real TConti_array::importo_iva(bool det)
{
const char* const key = det ? "D" : "N";
const real* imp = (real*)objptr(key);
return imp ? *imp : ZERO;
}
bool TConti_array::remove_iva(bool det)
{
const char* const key = det ? "D" : "N";
return TAssoc_array::remove(key);
}
// Aggiusta i row types se sono andati persi o non sono stati convertiti
void TMovimento_contabile::adjust_rowtypes()
{