Patch level : 12.0 386

Files correlati     : tf
Commento            : 
- Aggiornata funzione di calcolo del credito precedente, adesso calcola anno + credito e fa le dovute verifiche.
- Aggiunta variabile controllo per l'inizializzazione della maschera, in Release ci sono dei problemi durante il caricamento (viene calcolato il campo mese come se fossi in un trimestre).
- Modificata lettura dati per il totale delle operazioni da PRM a PAM, in quest'ultima sono già presenti i totali per codice attività con i corrispettivi già sommati

git-svn-id: svn://10.65.10.50/branches/R_10_00@23797 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
mtollari 2017-05-10 07:47:50 +00:00
parent f4c571b032
commit a9d9e1c1dc

View File

@ -35,7 +35,7 @@ const TRectype getLIM(int anno, int mese)
TString key; key << anno;
if(mese < 10)
key << "0";
keyLim << mese;
key << mese;
return cache().get("LIM", key);
}
@ -160,14 +160,13 @@ int calc_inc_diff(int anno, int mese, int tipoiva, real& imponibile_diff, real&
}
/* Funzione per determinare il credito dell'anno precedente delle dichiarazioni precedenti */
real calcolaCreditoAnnoPrec(bool mensile, int anno, int mese)
void calcolaCreditoPrec(real& creprec, real& creaprec, bool mensile, int anno, int mese)
{
// Credito anno precedente
/* Per calcolare il credito dell'anno precedente inizio a leggere i record precedenti su IVALIQ
* fino a quando ne trovo uno >= 0.
* Questi geni hanno messo la possibilità di mettere un valore <0 se voglio utilizzare del credito precedente */
real creaprec = ZERO;
TRectype rowLia = getLIA(anno);
if(mensile || (!mensile && ((mese - 1) % 3) == 0))
@ -179,11 +178,19 @@ real calcolaCreditoAnnoPrec(bool mensile, int anno, int mese)
TSorted_cursor curLiq(&ivaLiq, "MESE-", "GENERATA!=\"G\"", 1, &from, &to);
bool trovato = false;
for(curLiq = 0; curLiq.pos() < curLiq.items() && !trovato; ++curLiq)
for(curLiq = 0; curLiq.pos() < curLiq.items(); ++curLiq)
{
TRectype rowLiq = curLiq.curr();
if(rowLiq.get_int("MESE") >= mese) continue; // Perchè li prende lo stesso?
creaprec = creaprec + rowLiq.get_real("CREAPREC") - rowLiq.get_real("IVADOV");
if(rowLiq.get_real("IVADOVC") > ZERO)
creprec += rowLiq.get_real("IVADOVC");
else
creprec -= rowLiq.get_real("IVADOV");
// Sommo finchè non trovo il primo valore positivo
if(!trovato)
creaprec = creaprec + rowLiq.get_real("CREAPREC");
// Se è > 0 Ho trovato il primo valore messo nella dichiarazione
if(rowLiq.get_real("CREAPREC") > ZERO)
@ -191,35 +198,35 @@ real calcolaCreditoAnnoPrec(bool mensile, int anno, int mese)
trovato = true;
}
}
/* Se non ho trovato nessun valore positivo (i negativi senza nessun positivo prima non sono validi)
* vado a leggere la liquidazione di quest'anno */
if(!trovato)
{
creaprec = rowLia.get_real("R0");
}
else if(creaprec < ZERO)
/* Se ho esaurito il credito del periodo precedente lo sottraggo a quello dell'anno precedente e lo azzero */
if(creprec < ZERO)
{
creaprec = ZERO;
creaprec -= creprec;
creprec = ZERO;
}
}
/* Se siamo in una liquidazione trimestrale la scadenza della dichiarazione IVA è il 28 febbraio
* quindi so per certo che il valore calcolato in LIA.R0 è stato trasmesso */
else if(!mensile && mese == 3)
{
creaprec = rowLia.get_real("R0");
}
return creaprec;
}
class ComLiqPerIva_mask : public TAutomask
{
protected:
bool mensile;
// 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;
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
void extractinator();
void checkOldValue(int field, real val);
public:
ComLiqPerIva_mask() : TAutomask("tf0200a"), trueData(LF_IVALIQ) { first_focus(F_ANNO); }
ComLiqPerIva_mask() : TAutomask("tf0200a"), trueData(LF_IVALIQ), initLiq(false) { first_focus(F_ANNO); }
void saveGen();
};
@ -240,25 +247,27 @@ bool ComLiqPerIva_mask::on_field_event(TOperable_field& o, TField_event e, long
if(cache().get("%LIA", cod, "S7") == "M")
{
mensile = true;
initLiq = true;
enable(F_MESE);
disable(F_TRIMESTRE);
}
else
{
mensile = false;
initLiq = true;
disable(F_MESE);
enable(F_TRIMESTRE);
}
}
break;
case F_MESE:
if(e == fe_modify && mensile)
if(e == fe_modify && mensile && initLiq)
set(F_TRIMESTRE, (get_int(F_MESE) - 1) / 3 + 1);
break;
case F_TRIMESTRE:
if(e == fe_init && !query_mode())
disable(F_TRIMESTRE);
if(e == fe_modify && !mensile && query_mode())
if(e == fe_modify && !mensile && initLiq && query_mode())
{
set(F_MESE, get_int(F_TRIMESTRE) * 3);
disable(F_TRIMESTRE);
@ -349,11 +358,13 @@ bool ComLiqPerIva_mask::on_field_event(TOperable_field& o, TField_event e, long
real creaprec = get_real(F_CREAPREC);
if(creaprec < ZERO)
{
creaprec = calcolaCreditoAnnoPrec(mensile, get_int(F_ANNO), get_int(F_MESE)) + creaprec;
real creprec = ZERO; real appcreaprec;
calcolaCreditoPrec(creprec, appcreaprec, mensile, get_int(F_ANNO), get_int(F_MESE));
creaprec = appcreaprec + creaprec;
// Controllo che il credito non sia sforato sotto 0
if (creaprec < ZERO)
{
TString msg = "Attenzione! hai sforato il tuo credito dell'anno precedente di "; msg << (creaprec * - UNO).stringa(0,2) << "";
TString msg = "Attenzione! Capienza del credito dell'anno precedente esaurita di "; msg << (creaprec * - UNO).stringa(0,2) << "";
warning_box(msg);
}
}
@ -445,36 +456,20 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO
// Riga LIA
const TRectype rowLia = getLIA(anno);
// Calcolo il cursore di PRM
//TCursor curPrm = getPRM(anno);
static TRelation rprm(LF_TAB);
TRectype from(rprm.curr()); from.put("COD", "PRM");from.put("CODTAB", anno);
TRectype to(rprm.curr()); to.put("COD" , "PRM");to.put("CODTAB", anno);
TCursor curPrm(&rprm, "", 1, &from, &to);
for(curPrm = 0; curPrm.pos() < curPrm.items(); ++curPrm)
/* Sembra che in PAM ci sia già tutto quello che mi serve!
* Chiave PAM: ANNO + COD_ATTIVITA' + MESE */
static TRelation rpam(LF_TAB);
TRectype from(rpam.curr()); from.put("COD", "PAM");from.put("CODTAB", anno);
TRectype to(rpam.curr()); to.put("COD" , "PAM");to.put("CODTAB", anno);
TCursor curPam(&rpam, "", 1, &from, &to);
for(curPam = 0; curPam.pos() < curPam.items(); ++curPam)
{
TRectype rowPrm = curPrm.curr();
// Controllo il mese
TString codtab = rowPrm.get("CODTAB");
if(atoi(rowPrm.get("CODTAB").sub(13,15)) != start) continue;
// Verifico su che registro mi trovo
int tiporeg = rowPrm.get_int("I1");
bool detraibile = atoi(rowPrm.get("CODTAB").mid(20,1)) == 0; // Se > è indetraibile
if(!detraibile) continue; // Non mi interessa
if(tiporeg == reg_att)
{
totopatt = totopatt + rowPrm.get_real("R0");
}
else if(tiporeg == reg_pas)
{
totoppas = totoppas + rowPrm.get_real("R0");
}
TRectype rowPam = curPam.curr();
if(atoi(rowPam.get("CODTAB").right(2)) != start) continue;
totopatt = totopatt + rowPam.get_real("R1");
totoppas = totoppas + rowPam.get_real("R0");
}
// Se ha attiva l'IVA x cassa
if(gestione_IVAxCassa(data_da))
{
@ -524,22 +519,11 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO
real appReal = ZERO;
// Credito periodo precedente
if(start != 1) // A gennaio non lo calcolo
{
/* Se sono in una liquidazione mensile o nel primo mese di una trimestrale
* es. aprile ((4 - 1) % 3) = 0, maggio ((5 - 1) % 3) = 1 */
if(mensile || (!mensile && ((start - 1) % 3) == 0))
{
TString key; key << anno << "|" << start - 1 << "|U";
real appCredito(cache().get(LF_IVALIQ, key, "IVADOVC"));
if(appCredito > ZERO)
creprec = creprec + appCredito;
}
}
// Credito periodo precedente e anno precedente
calcolaCreditoPrec(creprec, creaprec, mensile, anno, start);
// Credito anno precedente
creaprec = calcolaCreditoAnnoPrec(mensile, anno, start);
if(creaprec < ZERO)
creaprec = ZERO;
intliqtri = intliqtri + rowLim.get_real("R14");
accdov = accdov + rowLim.get_real("R11");