Patch level : 12.0 384

Files correlati     : cg4.exe

Corretto in funzionamento per fatture per cassa pagate in anticipo e calcolo pro-rata per le fatture per cassa.

git-svn-id: svn://10.65.10.50/branches/R_10_00@23783 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
bonazzi 2017-05-07 01:48:56 +00:00
parent 66db6678e5
commit d750fa72d5
3 changed files with 63 additions and 27 deletions

View File

@ -169,6 +169,7 @@ public:
_r10, _r11, _r12, _r13, _r14, _r15, _r16, _r17, _r18, _r19,
_r20, _r21, _r22, _r23, _r24, _r25, _r26, _r27, _r28, _r29,
_r30, _r31, _r32, _r33;
real _ra0, _ra1, _ra2, _ra3, _ra4 ,_ra5, _ra6, _ra7, _ra8;
TArray _arr;
TDate _d0, _d1;
real _diff_ven_ap, _diff_ven_ap_iva, _diff_acq_ap, _diff_acq_ap_iva;
@ -305,6 +306,7 @@ class TLiquidazione_app : public TPrint_application
bool _definitiva;
real _diff_ven_ap, _diff_ven_ap_iva, _diff_acq_ap, _diff_acq_ap_iva;
real _imposta_inc_diff_ven, _imposta_inc_cassa_ven, _imposta_inc_diff_acq, _imposta_inc_cassa_acq;
// main cursor
TRelation* _rel;

View File

@ -233,6 +233,7 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
// stato effettuato per scelta dello stronzo commercialista.
// Gestione IVA differita, da non confondere con _isdifferita
_isdiff = ini_get_bool(CONFIG_DITTA, "cg", "GesLiqDiff");
TAssoc_array caus_reg;
@ -249,6 +250,11 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
}
}
_imposta_inc_diff_ven = ZERO;
_imposta_inc_cassa_ven = ZERO;
_imposta_inc_diff_acq = ZERO;
_imposta_inc_cassa_acq = ZERO;
_isdiffacc = is_acconto_differito(); // Gestione differimento acconto IVA
_isdifferita = _isdiffacc;
@ -467,7 +473,7 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
// Se siamo in annuale e se non e' stato indicato di ricalcolare (stampa liquidazione chiamata
// dalla stampa registri) non riscrivere i risultati delle liquidazioni,
if ((is_month_ok_strict(month) && _month != 13 && _recalc != never) || _is_interactive /*month == 13*/ )
if ((is_month_ok_strict(month) && _month != 13 && _recalc != never) || (_is_interactive && _recalc != never))
write_liq(month, atts);
// occorre poterla chiamare altre volte con mesi diversi
@ -1178,7 +1184,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
#ifdef DBG
const long nr = _mov->get_long(MOV_NUMREG);
if (nr == 25144 || nr == 25145)
if (nr == 92218)
int i = 1 ;
#endif
@ -1194,7 +1200,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
const long numreg = _mov->get_long(MOV_NUMREG);
TDate datainc;
real tot_incassato, tot_da_incassare;
int flag_pg_nc = 0; // Ci sono pagamenti (0x1) e/o note di credito(0x2) ?
int flag_pg_nc = 0; // Ci sono pagamenti (0x1) e/o note di credito(0x2) ?
bool game_found = false;
if (has_sc)
@ -1216,8 +1222,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
orizzonte = data_rif;
}
TImporto pg_per, nc_per;
flag_pg_nc = rp.calcola_pagato_periodo(inizio+1L, orizzonte, pg_per, nc_per, &pagscatt);
TImporto pg_per, nc_per;
bool regular_month = orizzonte >= date;
bool first_month = regular_month && date > inizio + 1L;
flag_pg_nc = rp.calcola_pagato_periodo(first_month ? botime : inizio + 1L, orizzonte, pg_per, nc_per, &pagscatt) && regular_month;
if (pagscatt.items() >= 2)
{
// Fondo tra loro le righe generate dallo stesso pagamento
@ -1311,6 +1319,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
datainc = data_maturazione_IVA_diff(_mov->curr());
_mov->put(MOV_DATAINC, datainc);
if (datainc < date)
datainc = date;
}
if (tot_incassato > ZERO && is_date_ok(datainc, month, liqmonth, year_int))
{
@ -1592,10 +1602,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
if (resto > 0)
meseliq += 3-resto;
}
if (is_detr_diff > 0) // indetraibile
if (is_detr_diff > 0 || civa.senza_imposta()) // indetraibile
{
const int annoliq = id.get_date(MOV_DATAREG).year();
const int meseliq = id.get_date(MOV_DATAREG).month();
const int annoliq = _mov->get_date(MOV_DATAREG).year();
const int meseliq = _mov->get_date(MOV_DATAREG).month();
id.put("ANNOLIQ", annoliq);
id.put("MESELIQ", meseliq);
@ -1649,9 +1659,26 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
val_iva = civa.scorpora(val_imp, TCurrency::get_firm_dec());
id.put("IMPORTO", val_imp + val_iva);
id.put(RMI_IMPONIBILE, val_imp);
id.put(RMI_IMPOSTA, val_iva);
if (is_detr_diff == 0) // detraibile
{
if (tipomov == vendita)
{
if (iva_cass)
_imposta_inc_cassa_ven += val_iva;
else
_imposta_inc_diff_ven+= val_iva;
}
else
{
if (iva_cass)
_imposta_inc_cassa_acq+= val_iva;
else
_imposta_inc_diff_acq+= val_iva;
}
}
if (tipomov_pag >= tm_pagamento && is_detr_diff == 0)
{
incdiff_imp += val_imp;
@ -4205,7 +4232,11 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
_lam->put("R1", iva_acq);
_lam->put("R2", cred_prec);
_lam->put("R3", debt_precd);
_lam->put("R5", _imposta_inc_diff_ven);
_lam->put("R6", _imposta_inc_cassa_ven);
_lam->put("R7", _imposta_inc_diff_acq);
_lam->put("R8", _imposta_inc_cassa_acq);
lim.put("B0","");
// AWFUL! se siamo in annuale, occorre arrotondare alle 1000 lire
@ -4315,7 +4346,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
lim.put("R30", fdiff_imp_acq);
lim.put("R31", fdiff_iva_acq);
lim.put("R32", fdiffinc_imp_acq);
lim.put("R33", fdiffinc_iva_acq);
lim.put("R21", fdiffinc_iva_acq);
// ciapa
}
put_lim(lim);

View File

@ -1249,8 +1249,11 @@ void TLiquidazione_app::describe_liq(int month, const char* codatts, _DescrItem*
tt.add(_lam->get("R2")); // Credito precedente
tt.add(_lam->get("R3")); // Debito precedente
tt.add(_lam->get("R4"));
d->_s0 = tt;
d->_ra5 = _lam->get_real("R5");
d->_ra6 = _lam->get_real("R6");
d->_ra7 = _lam->get_real("R7");
d->_ra8 = _lam->get_real("R8");
d->_s1 = lim.get("R11"); // Acc. dec.
d->_s2 = lim.get("R12");
d->_s3 = lim.get("R13");
@ -1682,7 +1685,7 @@ int TLiquidazione_app::calc_inc_diff(int tipoiva, real& imponibile_diff, real& i
{
int m = atoi(ip.get("CODTAB").as_string().mid(10));
real p = ip.get("R12").as_real();
if (m == _month && p != ZERO)
if (m == _month && (p > ZERO && p <= CENTO))
perc_prorata = p;
}
@ -2506,25 +2509,25 @@ void TLiquidazione_app::set_grand_2000(_DescrItem& d, int &rw)
const real& versamenti = d._r8;
const real& vers_int = d._r9;
real diffinc_iva = d._r29;
real diffinc_iva_acq = d._r33;
real xcasinc_iva = ZERO;
real xcasinc_iva_acq = ZERO;
real diffinc_iva = d._ra5;
real diffinc_iva_acq = d._ra7;
real xcasinc_iva = d._ra6;
real xcasinc_iva_acq = d._ra8;
if (has_module(ICAUT) && (!diffinc_iva.is_zero() || !diffinc_iva_acq.is_zero()))
{
real dimp, diva, ximp, xiva;
if (!diffinc_iva.is_zero() && calc_inc_diff(1, dimp, diva, ximp, xiva))
{
diffinc_iva = diva;
xcasinc_iva = xiva;
}
if (!diffinc_iva_acq.is_zero() && calc_inc_diff(2, dimp, diva, ximp, xiva))
{
diffinc_iva_acq = diva;
xcasinc_iva_acq = xiva;
}
// if (!diffinc_iva.is_zero() && calc_inc_diff(1, dimp, diva, ximp, xiva))
// {
// diffinc_iva = _imposta_inc_diff_ven;
// xcasinc_iva = _imposta_inc_cassa_ven;
// }
// if (!diffinc_iva_acq.is_zero() && calc_inc_diff(2, dimp, diva, ximp, xiva))
// {
// diffinc_iva_acq = _imposta_inc_diff_acq;
// xcasinc_iva_acq = _imposta_inc_cassa_acq;
// }
}
TToken_string tt(d._s0);