Patch level : 12.0 618

Files correlati     : tf
Commento            :
- Reso non vincolante il controllo della liquidazione, su alcune installazioni viene rilevato erroneamente
- Sistemato errore calcolo del prorata, veniva effettuato solo se era presente iva differita
This commit is contained in:
Mattia Tollari 2018-09-07 10:07:19 +02:00
parent 63a708a083
commit 611ca2c0aa

View File

@ -1,4 +1,4 @@
#include <relapp.h>
#include <relapp.h>
#include <automask.h>
#include <config.h>
#include <lffiles.h>
@ -67,7 +67,7 @@ const TRectype getLAM(int anno, int mese)
// Ritorna il record valido richiesto di tabcom.VER
const TRectype getVER(int anno, int mese)
{
// Questa tabella ha come chiave l'inizio validità, creo un cursore e scorro finche non trovo l'ultimo periodo valido
// Questa tabella ha come chiave l'inizio validità, creo un cursore e scorro finche non trovo l'ultimo periodo valido
static TRelation rver(LF_TABCOM);
static TRectype from(rver.curr()); from.put("COD", "VER");
static TRectype to(rver.curr()); to.put("COD" , "VER");
@ -97,7 +97,7 @@ const TRectype getVER(int anno, int mese)
}
/* Scopiazzata e divisa in due da cg4304.cpp
* Calcola solo le imposte, aggiunto controllo indetraibilità, non devono essere presi in considerazione
* Calcola solo le imposte, aggiunto controllo indetraibilità, non devono essere presi in considerazione
* i movimenti se indetraibili
*/
@ -152,14 +152,23 @@ int calc_inc_diff(int anno, int mese, int tipoiva, real& imposta_diff, real& imp
perc_prorata = p;
}
if (imposta_diff > ZERO && perc_prorata > ZERO)
if (perc_prorata > ZERO)
{
real ind = imposta_diff * perc_prorata / CENTO;
ind.round(TCurrency::get_firm_dec());
imposta_diff -= ind;
ind = imposta_xcas * perc_prorata / CENTO;
ind.round(TCurrency::get_firm_dec());
imposta_xcas -= ind;
real ind = ZERO;
if (imposta_diff > ZERO)
{
ind = imposta_diff * perc_prorata / CENTO;
ind.round(TCurrency::get_firm_dec());
imposta_diff -= ind;
}
if (imposta_xcas > ZERO)
{
ind = imposta_xcas * perc_prorata / CENTO;
ind.round(TCurrency::get_firm_dec());
imposta_xcas -= ind;
}
}
}
@ -186,7 +195,7 @@ void calcolaCreditoPrec(real& creprec, real& creaprec, bool mensile, int anno, i
for(curLiq = 0; curLiq.pos() < curLiq.items(); ++curLiq)
{
TRectype rowLiq = curLiq.curr();
if(rowLiq.get_int("MESE") >= mese) break; // Perchè li prende lo stesso?
if(rowLiq.get_int("MESE") >= mese) break; // Perchè li prende lo stesso?
trovato = trovato || rowLiq.get_real("CREAPREC") > ZERO;
creprec = rowLiq.get_real("IVAVERC");
@ -205,7 +214,7 @@ class ComLiqPerIva_mask : public TAutomask
{
protected:
bool mensile;
// Aggiunta questa variabile per specificare se è stato impostato un tipo di liquidazione.
// Aggiunta questa variabile per specificare se è stato impostato un tipo di liquidazione.
// In Release sembra che durante la ricerca salta l'inizializzazione e imposta prima gli altri campi
bool initLiq;
TRectype trueData;
@ -269,10 +278,10 @@ bool ComLiqPerIva_mask::on_field_event(TOperable_field& o, TField_event e, long
// Vado a prendere i dati di quel mese dalla liquidazione IVA
if(e == fe_button)
{
// Controllo che non ci sia già
// Controllo che non ci sia già
if(!cache().get(LF_IVALIQ, TString(get(F_ANNO)) << "|" << get(F_MESE) << "|U").empty())
{
if(!yesno_box("Sono già stati elaborati questi dati, si desidera ricalcolarli?"))
if(!yesno_box("Sono già stati elaborati questi dati, si desidera ricalcolarli?"))
break;
}
extractinator();
@ -342,7 +351,7 @@ bool ComLiqPerIva_mask::on_field_event(TOperable_field& o, TField_event e, long
// Ricalcolo VP13 e VP14
real debito = get_real(F_IVADOV) + get_real(F_DEBPREC) + get_real(F_INTLIQTRI);
/* Se il credito anno precedente è negativo devo mantenerlo tale ma sottrarlo al credito dell'anno precedente delle dichiarazioni precedenti */
/* Se il credito anno precedente è negativo devo mantenerlo tale ma sottrarlo al credito dell'anno precedente delle dichiarazioni precedenti */
real creaprec = get_real(F_CREAPREC);
if(creaprec < ZERO)
{
@ -376,9 +385,9 @@ bool ComLiqPerIva_mask::on_field_event(TOperable_field& o, TField_event e, long
// Funzione che effettivamente estrapola i dati necessari
void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO
{
/* Devo estrapolare più mesi, per farlo vado ciclo n volte (1 o 3) in base se stiamo parlando di trimestralità o meno
/* Devo estrapolare più mesi, per farlo vado ciclo n volte (1 o 3) in base se stiamo parlando di trimestralità o meno
* I dati da prelevare saranno in PRM, LIM e %LIA
* In PRM e LIM troverò le informazioni suddivise per mese, mentre in %LIA ho l'anno di liquidazione
* In PRM e LIM troverò le informazioni suddivise per mese, mentre in %LIA ho l'anno di liquidazione
*/
int start = mensile ? get_int(F_MESE) : (((get_int(F_TRIMESTRE) - 1) * 3) + 1);
int end = mensile ? start : start + 2;
@ -425,10 +434,9 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO
// Riga LIM
const TRectype rowLim = getLIM(anno, start);
// Controllo che la liquidazione è stata effettuata, controllo da fare solo nella 12
if(dongle().year_assist() > 2121 && (rowLim.empty() || rowLim.get_bool("B0")))
// Controllo che la liquidazione è stata effettuata, controllo da fare solo nella 12
if (dongle().year_assist() > 2121 && (rowLim.empty() || rowLim.get_bool("B0")) && !yesno_box("Attenzione non <20> stata calcolata la liquidazione del periodo corrente, si desidera proseguire ugualmente?"))
{
error_box("Attenzione non è stata calcolata la liquidazione del periodo corrente");
return;
}
@ -459,7 +467,7 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO
real imp = curIva.get("25.IMPONIBILE").as_real();
real imposta = curIva.get("25.IMPOSTA").as_real();
// Se è un movimento IvaXCassa o LiqDiff
// Se è un movimento IvaXCassa o LiqDiff
if(hasIXC && (curIva.get("23.IVAXCASSA").as_bool() || curIva.get("23.LIQDIFF").as_bool()))
{
if(tiporeg == REG_ATT)
@ -476,10 +484,10 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO
TString keyRC = curIva.get("23.NUMREG").as_string(); keyRC << "|1";
if(!cache().get(LF_RMOV, keyRC).empty())
{
// Controllo se è un corrispettivo non scorporato (imponibile e iva assieme)
// Controllo se è un corrispettivo non scorporato (imponibile e iva assieme)
if(isCorrispettivo && codiva.percentuale() > ZERO && imposta == ZERO)
{
// Nell'imponibile è presente il totale fattura, devo calcolare l'imposta e sottrarla
// Nell'imponibile è presente il totale fattura, devo calcolare l'imposta e sottrarla
// Es iva 22% => imp : 122 = x : 100
codiva.scorpora(imp);
}
@ -495,7 +503,7 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO
// Sommiamo i corrispettivi al registro delle vendite
// Se ha attiva l'IVA x cassa calcolo le imposte (imponibili per comodità già calcolati sopra)
// Se ha attiva l'IVA x cassa calcolo le imposte (imponibili per comodità già calcolati sopra)
if(hasIXC)
{
// IVA esigibile
@ -522,7 +530,7 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO
TRectype rowLam = getLAM(anno, start);
/* É saltato fuori che in caso di liquidazione trimestrale l'importo ivaes e ivadet
/* É saltato fuori che in caso di liquidazione trimestrale l'importo ivaes e ivadet
* viene scritto su ogni mese, quindi prendo solo quando
* start == end -> iva mensile o ultimo mese della trimestrale */
@ -560,12 +568,12 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO
TRectype rowVer = getVER(anno, start);
if(rowVer.empty() || rowVer.get_real("R5") == ZERO)
{
error_box("Non è stata valorizzato correttamente il campo \"Periodico\" in \"Versamenti ed interessi IVA\"");
error_box("Non è stata valorizzato correttamente il campo \"Periodico\" in \"Versamenti ed interessi IVA\"");
return;
}
else
{
if(debprec > rowVer.get_real("R5")) // Se è maggiore di 25.82€ va azzerato
if(debprec > rowVer.get_real("R5")) // Se è maggiore di 25.82€ va azzerato
debprec = ZERO;
}
// Calcolo ivadov/ivadovc
@ -650,7 +658,7 @@ void ComLiqPerIva_mask::saveGen()
trueData.put("ANNO", get(F_ANNO));
trueData.put("MESE", get(F_MESE));
trueData.put("TRIMESTRE", get(F_TRIMESTRE));
trueData.put("GENERATA", 'G'); // Segno che è generata da campo
trueData.put("GENERATA", 'G'); // Segno che è generata da campo
trueData.put("TOTOPATT", get(F_TOTOPATT));
trueData.put("TOTOPATTXC", get(F_TOTOPATTXC));
trueData.put("TOTOPPAS", get(F_TOTOPPAS));
@ -689,7 +697,7 @@ void ComLiqPerIva_mask::checkOldValue(int field, real val)
}
real trueVal = ZERO;
// Modo più intelligente di uno stupido switch case?
// Modo più intelligente di uno stupido switch case?
switch(field)
{
case F_TOTOPATT: