Modifiche per gestione IVA x cassa registrata in ritardo
git-svn-id: svn://10.65.10.50/branches/R_10_00@23002 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
537c54ac01
commit
dc46bc0acc
@ -2396,8 +2396,11 @@ bool TPrimanota_application::link_anal(const TMask& msk, const char* action)
|
||||
{
|
||||
TConfig config(ini, "Transaction");
|
||||
config.set("Action", action);
|
||||
|
||||
/* Attualmente genera solo problemi al Cigno che ha CI e CM ma non ha CA
|
||||
if (has_module(CIAUT) && !has_module(CAAUT))
|
||||
config.set("Mode", "A"); // Salva automaticamente i movimenti di sola industriale
|
||||
*/
|
||||
|
||||
TString4 para; para << LF_MOVANA;
|
||||
config.set_paragraph(para);
|
||||
|
@ -640,9 +640,14 @@ bool TLiquidazione_app::sarebbe_da_pagare(const TRectype& mov, const TDate& fine
|
||||
if (mov.get_int(MOV_TIPOMOV) != tm_fattura)
|
||||
return false;
|
||||
|
||||
const TDate datareg = mov.get(MOV_DATAREG);
|
||||
const long giorni = fine - datareg;
|
||||
if (giorni < 0)
|
||||
// La data di riferimento sarebbe quella di consegna della merce, ma non avendola usiamo la data documento.
|
||||
// In assenza della data documento siamo costretti ad usare la data di registrazione
|
||||
const TDate data_reg = mov.get(MOV_DATAREG);
|
||||
const TDate data_doc = mov.get(MOV_DATADOC);
|
||||
const TDate data_rif = data_doc.ok() && data_doc < data_reg ? data_doc : data_reg;
|
||||
|
||||
const long giorni = fine - data_rif;
|
||||
if (giorni < 0 || fine < data_reg) // Diana 2000 registra a Settebre 2014 fatture con data ducumento nel 2013!
|
||||
return false;
|
||||
|
||||
if (mov.get_bool(MOV_LIQDIFF))
|
||||
@ -1075,7 +1080,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
if (_mov->get_long(MOV_NUMREG) == 14281)
|
||||
if (_mov->get_long(MOV_NUMREG) == 15985)
|
||||
int cazzone = 1;
|
||||
#endif
|
||||
|
||||
@ -1142,7 +1147,48 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
}
|
||||
if (sarebbe_da_pagare(_mov->curr(), fine))
|
||||
{
|
||||
rp.calcola_pagato_periodo(TDate(0L), fine, pg, nc, NULL);
|
||||
TPointer_array pagscaold;
|
||||
rp.calcola_pagato_periodo(TDate(0L), fine, pg, nc, &pagscaold);
|
||||
|
||||
// Controllo se ci siam persi delle note di credito negli anni scorsi
|
||||
if (!nc.is_zero() && pagscaold.items() > pagscatt.items())
|
||||
{
|
||||
FOR_EACH_ARRAY_ITEM(pagscaold, i, obj)
|
||||
{
|
||||
const TRectype& pagsca = *(const TRectype*)obj;
|
||||
const int anno = pagsca.get_int(PAGSCA_ANNO);
|
||||
const int nrigp = pagsca.get_int(PAGSCA_NRIGP);
|
||||
// Appartiene all'anno scorso?
|
||||
if (anno < year_int && nrigp < 999) // 9999 on pagsca -> 999 on ivadiff
|
||||
{
|
||||
const TPartita& p = arrpart.partita(pagsca);
|
||||
const TRiga_partite& rp = p.riga(nrigp);
|
||||
// E' veramente una nota di credito?
|
||||
if (rp.tipo() == tm_nota_credito)
|
||||
{
|
||||
bool found = false;
|
||||
FOR_EACH_ARRAY_ITEM(pagscatt, j, ps)
|
||||
{
|
||||
if (ps == obj)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
{
|
||||
TLocalisamfile id(LF_IVADIFF);
|
||||
id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG));
|
||||
id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG));
|
||||
id.put("NUMPRO", nrigp);
|
||||
if (id.read(_isequal) != NOERR || id.get_int("ANNOLIQ") == 0)
|
||||
pagscatt.add(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TImporto saldo = rp.importo(false);
|
||||
saldo += pg; saldo += nc;
|
||||
saldo.normalize(sezfat);
|
||||
@ -1394,6 +1440,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
if (!d.ok())
|
||||
d = rp.get(PART_DATAREG);
|
||||
idcurr.put("DATAREGP", d);
|
||||
idcurr.put("ANNOLIQ", d.year());
|
||||
pagtmp = p.importo_pagsca(pagsca);
|
||||
pagtmp.normalize(sezpag);
|
||||
ultimo = (r == pagscatt.last()) && partita_chiusa_al(p, fine);
|
||||
@ -1405,11 +1452,11 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
idcurr.put("NUMREGP", _mov->get(MOV_NUMREG));
|
||||
idcurr.put("NUMRIGP", nrigp);
|
||||
idcurr.put("DATAREGP", _mov->get(MOV_DATAINC));
|
||||
idcurr.put("ANNOLIQ", year_int);
|
||||
pagtmp.set(sezpag, pagsca.get_real(PAGSCA_IMPORTO));
|
||||
ultimo = true;
|
||||
}
|
||||
|
||||
idcurr.put("ANNOLIQ", year_int);
|
||||
int meseliq = id.get_date("DATAREGP").month();
|
||||
if (_freqviva[0] == 'T')
|
||||
{
|
||||
|
@ -1228,11 +1228,11 @@ messaggio TStampa_registri_app::controlla_liquidazione()
|
||||
}
|
||||
if (need_refresh)
|
||||
{
|
||||
continua = yesno_box(FR("Ditta %s: la liquidazione di alcuni mesi precedenti deve "
|
||||
"essere ricalcolata.\n"
|
||||
"Si desidera ugualmente proseguire?"),(const char*)ditta);
|
||||
continua = yesno_box(FR("Ditta %s: la liquidazione di alcuni mesi precedenti deve essere ricalcolata.\n"
|
||||
"Si desidera ugualmente proseguire?"), (const char*)ditta);
|
||||
if (!continua) return non_proseguire;
|
||||
continua = yesno_box(TR("Si desidera proseguire con il calcolo e la stampa di liquidazione? \n (altrimenti si prosegue con la sola stampa liquidazione)"));
|
||||
continua = yesno_box(TR("Si desidera proseguire con il calcolo e la stampa di liquidazione?\n"
|
||||
"(altrimenti si prosegue con la sola stampa liquidazione)"));
|
||||
if (!continua) return prosegui_stampa;
|
||||
return prosegui_cal_stampa;
|
||||
}
|
||||
|
@ -367,7 +367,7 @@ END
|
||||
|
||||
VALUTA FFR_REGIMP(11) 18
|
||||
BEGIN
|
||||
PROMPT 1 36 ""
|
||||
PROMPT 29 36 ""
|
||||
END
|
||||
|
||||
VALUTA FFR_REGIVA(11) 18
|
||||
|
@ -64,7 +64,7 @@ public:
|
||||
virtual ~TEsercizi_contabili() {}
|
||||
};
|
||||
|
||||
TEsercizi_contabili & esercizi();
|
||||
TEsercizi_contabili& esercizi();
|
||||
|
||||
enum TipoIVA
|
||||
{
|
||||
|
@ -33,7 +33,7 @@ static int codind2tipodet(const TString & codind, real& perc)
|
||||
return tipodet;
|
||||
}
|
||||
|
||||
real indetraibile_al(const TString& codind, const TCausale& caus, int annodoc, int & tipodet,const bool is_liq)
|
||||
real indetraibile_al(const TString& codind, const TCausale& caus, int /*annodoc*/, int & tipodet,const bool is_liq)
|
||||
{
|
||||
real perc;
|
||||
|
||||
|
@ -1119,6 +1119,11 @@ int TRiga_partite::calcola_pagato_periodo(const TDate& dal, const TDate& al, TIm
|
||||
if (!is_fattura())
|
||||
return flag;
|
||||
|
||||
#ifdef DBG
|
||||
if (get_long(PART_NREG) == 15985)
|
||||
int cazzone = 2;
|
||||
#endif
|
||||
|
||||
TPointer_array pags;
|
||||
|
||||
const int lastr = rate();
|
||||
@ -1139,17 +1144,20 @@ int TRiga_partite::calcola_pagato_periodo(const TDate& dal, const TDate& al, TIm
|
||||
}
|
||||
}
|
||||
|
||||
// Cerco di gestire anche i non assegnati sulla unica fattura di una partita
|
||||
const TRecord_array& unas = partita().unassigned();
|
||||
if (unas.rows() > 0)
|
||||
// Conto le fatture presenti in partita
|
||||
int fatture = 0;
|
||||
for (int r = partita().last(); r > 0 && fatture < 2; r = partita().pred(r))
|
||||
{
|
||||
int fatture = 0;
|
||||
for (int r = partita().last(); r > 0 && fatture < 2; r = partita().pred(r))
|
||||
{
|
||||
if (partita().riga(r).tipo() == tm_fattura)
|
||||
fatture++;
|
||||
}
|
||||
if (fatture == 1)
|
||||
const TRiga_partite& rp = partita().riga(r);
|
||||
fatture += rp.tipo() == tm_fattura ? 1 : 0;
|
||||
}
|
||||
|
||||
// Se c'è una sola fattura posso fare dei ragionamenti
|
||||
if (fatture == 1)
|
||||
{
|
||||
// Cerco di gestire anche i non assegnati
|
||||
const TRecord_array& unas = partita().unassigned();
|
||||
if (unas.rows() > 0)
|
||||
{
|
||||
for(int r = unas.last_row(); r > 0; r = unas.pred_row(r))
|
||||
{
|
||||
|
@ -184,8 +184,9 @@ public:
|
||||
|
||||
tipo_movimento tipo() const;
|
||||
tipo_pagamento tipo_pag() const;
|
||||
bool is_fattura() const { return tipo() == tm_fattura; }
|
||||
bool is_fattura() const { return tipo() == tm_fattura; }
|
||||
bool is_nota_credito() const { return tipo() == tm_nota_credito; }
|
||||
bool is_insoluto() const { return tipo() == tm_insoluto; }
|
||||
int ultima_ratapagata() const;
|
||||
int ultimo_pagamento(int rata) const;
|
||||
int ultima_rata_con_abbuoni_diffcam() const;
|
||||
|
@ -48,6 +48,7 @@
|
||||
#define F_IBAN_INC 152
|
||||
|
||||
#define F_PROG 153
|
||||
#define F_CREDITOR_ID 154
|
||||
|
||||
|
||||
#endif//__CGTBBNP_H
|
||||
|
@ -405,7 +405,7 @@ ENDPAGE
|
||||
|
||||
PAGE "Parametri Distinte" 0 -1 77 20
|
||||
|
||||
GROUPBOX DLG_NULL 78 5
|
||||
GROUPBOX DLG_NULL 78 6
|
||||
BEGIN
|
||||
PROMPT 1 1 "@bParametri emissione distinte su file"
|
||||
END
|
||||
@ -426,6 +426,14 @@ BOOLEAN F_IBAN_INC
|
||||
BEGIN
|
||||
PROMPT 2 4 "Genera IBAN su distinte di incasso"
|
||||
FIELD B2
|
||||
MESSAGE FALSE DISABLE,F_CREDITOR_ID
|
||||
MESSAGE TRUE ENABLE, F_CREDITOR_ID
|
||||
END
|
||||
|
||||
STRING F_CREDITOR_ID 25
|
||||
BEGIN
|
||||
PROMPT 2 5 "Creditor ID per R.I.D. "
|
||||
FIELD S4
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
Loading…
x
Reference in New Issue
Block a user