Patch level : 12.0 982
Files correlati : Commento : Ristrutturato modulo li
This commit is contained in:
parent
27abaa5446
commit
97b82a31b0
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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()
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user