Gestione IVA per Cassa

git-svn-id: svn://10.65.10.50/branches/R_10_00@22758 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2012-11-30 14:36:30 +00:00
parent c3d093ba1f
commit 7dbfa7b680
26 changed files with 931 additions and 498 deletions

View File

@ -624,6 +624,13 @@ void TPrimanota_application::init_mask(TMask& m)
} }
m.show(F_ADJUST_IVA, _quadratura); m.show(F_ADJUST_IVA, _quadratura);
TMask_field* ixc = m.find_by_id(F_IVAXCASSA);
if (ixc)
{
const TDate dr = m.get(F_DATAREG);
ixc->enable(gestione_IVAxCassa(dr));
}
} }
// Show/Hide campi valuta: F_VALUTA, F_CAMBIO, F_DATACAMBIO (GROUP 3) // Show/Hide campi valuta: F_VALUTA, F_CAMBIO, F_DATACAMBIO (GROUP 3)

View File

@ -9,7 +9,7 @@ PAGE "Testata" -1 -1 77 20
GROUPBOX DLG_NULL 78 4 GROUPBOX DLG_NULL 78 4
BEGIN BEGIN
PROMPT 1 0 "@BMovimento di sola contabilita'" PROMPT 1 0 "@BMovimento di sola contabilità"
END END
NUMBER F_NUMREG 7 NUMBER F_NUMREG 7
@ -22,7 +22,7 @@ END
DATE F_DATAREG DATE F_DATAREG
BEGIN BEGIN
PROMPT 1 1 "Data operazione " PROMPT 2 1 "Data operazione "
FIELD DATAREG FIELD DATAREG
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
MESSAGE COPY,K_DATAREG MESSAGE COPY,K_DATAREG
@ -31,7 +31,7 @@ END
DATE F_DATACOMP DATE F_DATACOMP
BEGIN BEGIN
PROMPT 1 2 "Data di competenza " PROMPT 2 2 "Data di competenza "
FIELD DATACOMP FIELD DATACOMP
MESSAGE COPY,K_DATACOMP MESSAGE COPY,K_DATACOMP
FLAGS "G" FLAGS "G"

View File

@ -28,21 +28,22 @@
#define S_SPUNTA 101 #define S_SPUNTA 101
#define S_IMPORTO 102 #define S_IMPORTO 102
#define S_SALDO 103 #define S_SALDO 103
#define S_VALUTA 104 #define S_DATAPAG 104
#define S_RESIDUO 105 #define S_VALUTA 105
#define S_TOTALE 106 #define S_RESIDUO 106
#define S_DATASCAD 107 #define S_TOTALE 107
#define S_NUMDOC 108 #define S_DATASCAD 108
#define S_DATADOC 109 #define S_NUMDOC 109
#define S_IMPORTO_EUR 110 #define S_DATADOC 110
#define S_RESIDUO_EUR 111 #define S_IMPORTO_EUR 111
#define S_ANNO 112 #define S_RESIDUO_EUR 112
#define S_PARTITA 113 #define S_ANNO 113
#define S_RIGAF 114 #define S_PARTITA 114
#define S_RATA 115 #define S_RIGAF 115
#define S_RIGAP 116 #define S_RATA 116
#define S_RITFIS 117 #define S_RIGAP 117
#define S_RITSOC 118 #define S_RITFIS 118
#define S_MODOPAG 119 #define S_RITSOC 119
#define S_NREG 120 #define S_MODOPAG 120
#define S_NRIG 121 #define S_NREG 121
#define S_NRIG 122

View File

@ -225,6 +225,7 @@ BEGIN
ITEM " @1B" ITEM " @1B"
ITEM "Importo\nPagamento@13F" ITEM "Importo\nPagamento@13F"
ITEM "Sal\ndo@3BF" ITEM "Sal\ndo@3BF"
ITEM "Data@10"
ITEM "Val.@3" ITEM "Val.@3"
ITEM "Residuo\nScadenza@13F" ITEM "Residuo\nScadenza@13F"
ITEM "Importo\nScadenza@13F" ITEM "Importo\nScadenza@13F"
@ -455,6 +456,11 @@ BEGIN
ITEM "9|Bonifico" ITEM "9|Bonifico"
END END
DATE S_DATAPAG
BEGIN
PROMPT 2 10 "Data "
END
ENDPAGE ENDPAGE
TOOLBAR "topbar" 0 0 0 2 TOOLBAR "topbar" 0 0 0 2

View File

@ -2254,6 +2254,10 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
} }
TPrimanota_application& a = app(); TPrimanota_application& a = app();
TMask_field* ixc = m.find_by_id(F_IVAXCASSA);
if (ixc)
ixc->enable(gestione_IVAxCassa(dr));
const int ae = a._esercizi.date2esc(dr); // Codice esercizio const int ae = a._esercizi.date2esc(dr); // Codice esercizio
if (ae <= 0) if (ae <= 0)
return f.error_box(TR("La data dell'operazione non appartiene a nessun esercizio")); return f.error_box(TR("La data dell'operazione non appartiene a nessun esercizio"));
@ -2271,8 +2275,6 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
if (key == K_ENTER || f.focusdirty()) if (key == K_ENTER || f.focusdirty())
{ {
m.enable(F_IVAXCASSA, a.gestione_IVAxCassa(dr));
const long numreg = m.get_long(F_NUMREG); const long numreg = m.get_long(F_NUMREG);
const bool error = numreg == 0 || numreg > a._lastreg; const bool error = numreg == 0 || numreg > a._lastreg;
@ -2289,15 +2291,6 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
f.warning_box(FR("La data dell'operazione è antecedente al %s,\n" f.warning_box(FR("La data dell'operazione è antecedente al %s,\n"
"ultima registrazione sul libro giornale del %d"), "ultima registrazione sul libro giornale del %d"),
gio.last_reg().string(), ar); gio.last_reg().string(), ar);
const TDate chiusura = a._esercizi[ae].chiusura();
if (chiusura.ok() && dr <= chiusura)
{
f.error_box(FR("La data dell'operazione è antecedente al %s,\n"
"data di chiusura dell'esercizio %d"),
chiusura.stringa(), ae);
if (error) return false;
}
} }
if (m.query_mode()) if (m.query_mode())
@ -2320,13 +2313,13 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
{ {
if (dr < reg.last_print()) if (dr < reg.last_print())
{ {
f.error_box(FR("La data dell'operazione e' antecedente al %s,\n" f.error_box(FR("La data dell'operazione è antecedente al %s,\n"
"ultima stampa del registro '%s' del %d"), "ultima stampa del registro '%s' del %d"),
reg.last_print().string(), (const char*)codreg, ar); reg.last_print().string(), (const char*)codreg, ar);
if (error) return false; if (error) return false;
} }
if (f.dirty() && dr < reg.last_reg()) if (f.dirty() && dr < reg.last_reg())
f.warning_box(FR("La data dell'operazione e' antecedente al %s,\n" f.warning_box(FR("La data dell'operazione è antecedente al %s,\n"
"ultima registrazione sul registro '%s' del %d"), "ultima registrazione sul registro '%s' del %d"),
reg.last_reg().string(), (const char*)codreg, ar); reg.last_reg().string(), (const char*)codreg, ar);
} }
@ -2334,7 +2327,7 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
if (reg.iva() != nessuna_iva && a._rel->controlla_liquidazione(dr, reg) == true) if (reg.iva() != nessuna_iva && a._rel->controlla_liquidazione(dr, reg) == true)
{ {
const char* const mese = itom(dr.month()); const char* const mese = itom(dr.month());
f.warning_box(FR("La liquidazione IVA relativa al mese di %s e' gia' stata calcolata"), mese); f.warning_box(FR("La liquidazione IVA relativa al mese di %s è già stata calcolata"), mese);
} }
} }
} }
@ -2401,9 +2394,9 @@ bool TPrimanota_application::datacomp_handler(TMask_field& f, KEY key)
const TDate chiusura = app()._esercizi[ae].chiusura(); const TDate chiusura = app()._esercizi[ae].chiusura();
if (chiusura.ok() && dc <= chiusura) if (chiusura.ok() && dc <= chiusura)
{ {
return f.error_box(FR("%s è antecedente al %s,\n" f.error_box(FR("%s è antecedente al %s,\ndata di chiusura dell'esercizio %d"),
"data di chiusura dell'esercizio %d"),
data, chiusura.stringa(), ae); data, chiusura.stringa(), ae);
// Errore non bloccante
} }
} }
@ -2839,13 +2832,17 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
if (occas && a.occas_mask().get(O_CODICE).blank()) if (occas && a.occas_mask().get(O_CODICE).blank())
m.send_key(K_SPACE, F_OCCASEDIT); // Lancia maschera occasionali m.send_key(K_SPACE, F_OCCASEDIT); // Lancia maschera occasionali
if (m.field(F_IVAXCASSA).active()) TMask_field* ixc = m.find_by_id(F_IVAXCASSA);
if (ixc)
{ {
TString16 paiv = clifo.get(CLI_PAIV);
if (paiv.blank() && occas)
paiv = a.occas_mask().get(O_PAIV);
const int alleg = clifo.get_int(CLI_ALLEG); const int alleg = clifo.get_int(CLI_ALLEG);
m.set(F_IVAXCASSA, alleg != 6); const bool ic = ixc->active() && (alleg < 5 || alleg == 7) && paiv.full() && !m.get_bool(F_LIQDIFF);
ixc->set(ic ? "X" : "");
} }
} }
} }
return true; return true;
@ -2929,7 +2926,6 @@ bool TPrimanota_application::main_codiva_handler(TMask_field& f, KEY key)
// Certified 99% // Certified 99%
bool TPrimanota_application::liqdiff_handler(TMask_field& f, KEY key) bool TPrimanota_application::liqdiff_handler(TMask_field& f, KEY key)
{ {
if (key == K_SPACE && f.mask().is_running()) if (key == K_SPACE && f.mask().is_running())
{ {
TSheet_field & cgs = app().cgs(); TSheet_field & cgs = app().cgs();
@ -2954,7 +2950,6 @@ bool TPrimanota_application::liqdiff_handler(TMask_field& f, KEY key)
FOR_EACH_SHEET_ROW(cgs, r, row) FOR_EACH_SHEET_ROW(cgs, r, row)
{ {
const TString4 type(row->get(rowtype)); const TString4 type(row->get(rowtype));
if (type == "D") if (type == "D")
{ {
row->add(conto.get(0), tp); row->add(conto.get(0), tp);
@ -2967,6 +2962,13 @@ bool TPrimanota_application::liqdiff_handler(TMask_field& f, KEY key)
} }
cgs.force_update(); cgs.force_update();
} }
if (key == K_ENTER)
{
if (f.get().full() && f.mask().get_bool(F_IVAXCASSA))
return f.error_box(TR("Non è ammesso selezionare IVA per cassa e liquidazione differita"));
}
return true; return true;
} }
@ -3283,25 +3285,6 @@ bool TPrimanota_application::corrvaluta_handler(TMask_field& f, KEY key)
return true; return true;
} }
bool TPrimanota_application::gestione_IVAxCassa(const TDate& data) const
{
bool yes = has_module(ICAUT);
if (yes)
{
TString16 codtab;
codtab.format("%05ld%04d", get_firm(), data.year());
const TRectype& lia = cache().get("%LIA", codtab);
yes = lia.get_bool("B5");
if (yes)
{
TDate dal = lia.get("D0"); if (!dal.ok()) dal = TDate(1,1,data.year());
TDate al = lia.get("D1"); if (!al.ok()) dal = TDate(31,12,data.year());
yes = data >= dal && data <= al;
}
}
return yes;
}
bool TPrimanota_application::activate_numrif(TMask& m, bool init_pag) bool TPrimanota_application::activate_numrif(TMask& m, bool init_pag)
{ {
// Il numero riferimento esiste // Il numero riferimento esiste

View File

@ -207,7 +207,6 @@ protected:
bool gestione_valuta() const { return _ges_val; } bool gestione_valuta() const { return _ges_val; }
bool gestione_saldaconto() const { return _ges_sal; } bool gestione_saldaconto() const { return _ges_sal; }
bool npart_is_prot() const { return _npart_is_prot; } bool npart_is_prot() const { return _npart_is_prot; }
bool gestione_IVAxCassa(const TDate& data) const;
bool is_saldaconto() const { return _is_saldaconto; } bool is_saldaconto() const { return _is_saldaconto; }
bool is_fattura() const { return is_saldaconto() && causale().tipomov() == 1; } bool is_fattura() const { return is_saldaconto() && causale().tipomov() == 1; }

View File

@ -148,6 +148,7 @@ void TEasySolder_mask::save_sheet()
const real ritsoc = valuta.in_valuta() ? ZERO : get_row_real(s, row, S_RITSOC); const real ritsoc = valuta.in_valuta() ? ZERO : get_row_real(s, row, S_RITSOC);
const bool a_saldo = goodrat && get_row_bool(s, row, S_SALDO); const bool a_saldo = goodrat && get_row_bool(s, row, S_SALDO);
const TTipo_pag tipopag = (TTipo_pag)get_row_int(s, row, S_MODOPAG); const TTipo_pag tipopag = (TTipo_pag)get_row_int(s, row, S_MODOPAG);
const TDate datapag = get_row_str(s, row, S_DATAPAG);
if (a_saldo || !importo.is_zero() || !ritfis.is_zero() || !ritsoc.is_zero() || nrigp > 0) if (a_saldo || !importo.is_zero() || !ritfis.is_zero() || !ritsoc.is_zero() || nrigp > 0)
{ {
@ -173,7 +174,7 @@ void TEasySolder_mask::save_sheet()
part.put(PART_DATADOC, cm.get(F_DATADOC)); part.put(PART_DATADOC, cm.get(F_DATADOC));
part.put(PART_DATAREG, cm.get(F_DATAREG)); part.put(PART_DATAREG, cm.get(F_DATAREG));
part.put(PART_DESCR, cm.get(F_DESCR)); part.put(PART_DESCR, cm.get(F_DESCR));
part.put(PART_DATAPAG, cm.get(F_DATAREG)); part.put(PART_DATAPAG, datapag);
part.put(PART_TIPOPAG, tipopag); part.put(PART_TIPOPAG, tipopag);
// Copia dati causale corrente // Copia dati causale corrente
@ -760,6 +761,19 @@ static bool sheet_rate_filler(TTree& tree, void* jolly, word flags)
set_row_str(sheet, row, S_NUMDOC, riga.get(PART_NUMDOC)); set_row_str(sheet, row, S_NUMDOC, riga.get(PART_NUMDOC));
set_row_str(sheet, row, S_DATADOC, riga.get(PART_DATADOC)); set_row_str(sheet, row, S_DATADOC, riga.get(PART_DATADOC));
} }
// Propone data di pagamento per le RIBA
if (!good_pag)
{
TDate dp(TODAY);
if (scad->get_int(SCAD_TIPOPAG) > 1)
{
const TDate ds = scad->get(SCAD_DATASCAD);
if (ds > dp)
dp = ds;
}
set_row_str(sheet, row, S_DATAPAG, dp);
}
} }
if (good_pag) if (good_pag)
{ {
@ -794,7 +808,11 @@ static bool sheet_rate_filler(TTree& tree, void* jolly, word flags)
set_row_int(sheet, row, S_RIGAF, nriga); set_row_int(sheet, row, S_RIGAF, nriga);
set_row_int(sheet, row, S_RATA, nrata); set_row_int(sheet, row, S_RATA, nrata);
set_row_str(sheet, row, S_MODOPAG, rigp.get(PART_TIPOPAG)); set_row_str(sheet, row, S_MODOPAG, rigp.get(PART_TIPOPAG));
if (!good_rat) if (good_rat)
{
set_row_str(sheet, row, S_DATAPAG, rigp.get(PART_DATAPAG));
}
else
{ {
set_row_str(sheet, row, S_DATASCAD, rigp.get(PART_DATAPAG)); set_row_str(sheet, row, S_DATASCAD, rigp.get(PART_DATAPAG));
const int nrow = sheet.items()-1; const int nrow = sheet.items()-1;

View File

@ -113,9 +113,9 @@ bool TLiquidazione_app::user_create()
if (msg != NULL) subj = msg->body(); if (msg != NULL) subj = msg->body();
if (_is_interactive) if (_is_interactive)
pnd = new TProgind (3,TR("Preparazione archivi\nPrego attendere"), pnd = new TProgind (3,TR("Preparazione archivi"), false, true);
FALSE, TRUE); else
else begin_wait(); begin_wait();
_nditte = new TRelation(LF_NDITTE); _nditte = new TRelation(LF_NDITTE);
_nditte->add(LF_ATTIV,"CODDITTA=CODDITTA"); _nditte->add(LF_ATTIV,"CODDITTA=CODDITTA");
@ -353,16 +353,15 @@ bool TLiquidazione_app::user_create()
_isannual = _isriepilogo = _month == 13; _isannual = _isriepilogo = _month == 13;
//modifica del 03/05/1995 //modifica del 03/05/1995
int need_refresh = FALSE; bool need_refresh = false;
int m; for (int m = 1; m < _month; m++)
{
for (m = 1; m < _month; m++)
if (is_month_ok_strict(m) && (!look_lim(m) || !_lim->get_bool("B0"))) if (is_month_ok_strict(m) && (!look_lim(m) || !_lim->get_bool("B0")))
{ {
need_refresh = TRUE; need_refresh = true;
break; break;
} }
}
if (need_refresh) if (need_refresh)
_recalc = ever; _recalc = ever;
@ -382,9 +381,10 @@ bool TLiquidazione_app::user_create()
_nditte->read(); _nditte->read();
for (int mese = 1; mese < _month; mese++) for (int mese = 1; mese < _month; mese++)
{
if ((is_month_plain(mese) && !(_freqviva == "T" && _recalc_regis)) || _recalc == ever) if ((is_month_plain(mese) && !(_freqviva == "T" && _recalc_regis)) || _recalc == ever)
update_firm(mese); update_firm(mese);
}
if (is_month_plain(_month) || _month == 13) if (is_month_plain(_month) || _month == 13)
update_firm(_month); update_firm(_month);
@ -396,7 +396,7 @@ bool TLiquidazione_app::user_create()
// se ci sono altri mesi dopo l'ultimo calcolato, invalida il // se ci sono altri mesi dopo l'ultimo calcolato, invalida il
// flag 'calcolato' del primo, per causare il ricalcolo dei // flag 'calcolato' del primo, per causare il ricalcolo dei
// successivi (evitando problemi per credito precedente) // successivi (evitando problemi per credito precedente)
for (m = _month+1; m <= 13; m++) if (look_lim(m)) for (int m = _month+1; m <= 13; m++) if (look_lim(m))
{ {
_lim->zero("B0"); _lim->zero("B0");
_lim->rewrite(); _lim->rewrite();
@ -499,7 +499,7 @@ bool TLiquidazione_app::user_destroy()
delete _rel; delete _rel;
delete _cur; delete _cur;
return TRUE; return true;
} }
bool TLiquidazione_app::set_print(int) bool TLiquidazione_app::set_print(int)
@ -512,10 +512,10 @@ bool TLiquidazione_app::set_print(int)
switch(_menu) switch(_menu)
{ {
case 1: // liquidazione case 1: // liquidazione
_isprint = TRUE; _isprint = true;
while (set_liquidazione()) while (set_liquidazione())
{ {
if (_selected.ones() > 0l) if (_selected.ones())
return recalc_all() && _isprint; return recalc_all() && _isprint;
else else
warning_box(TR("Nessuna ditta selezionata!")); warning_box(TR("Nessuna ditta selezionata!"));
@ -598,11 +598,10 @@ bool TLiquidazione_app::ch_year_handler(TMask_field& f, KEY key)
app().reset_choices(f.mask()); app().reset_choices(f.mask());
app().set_year(f.get()); app().set_year(f.get());
app().build_nomiditte(); app().build_nomiditte();
app().build_ditte_sheet(f.mask().source_file() == "cg4300a.msk" ? app().build_ditte_sheet(f.mask().source_file().ends_with("cg4300a.msk") ?
(wht)atoi(f.mask().get(CG43_RDB_VERS)) : (wht)f.mask().get_int(CG43_RDB_VERS) : all);
all);
} }
return TRUE; return true;
} }
void TLiquidazione_app::build_nomiditte(TProgind* pnd) void TLiquidazione_app::build_nomiditte(TProgind* pnd)
@ -671,7 +670,7 @@ bool TLiquidazione_app::to_ditt_handler(TMask_field& f, KEY key)
app().set_choice_limits(m); app().set_choice_limits(m);
m.set(CG43_FLD_SELECTED, l); m.set(CG43_FLD_SELECTED, l);
} }
return TRUE; return true;
} }
bool TLiquidazione_app::fr_ditt_handler(TMask_field& f, KEY key) bool TLiquidazione_app::fr_ditt_handler(TMask_field& f, KEY key)
@ -679,7 +678,7 @@ bool TLiquidazione_app::fr_ditt_handler(TMask_field& f, KEY key)
TMask& m = f.mask(); TMask& m = f.mask();
if (key == K_F9) if (key == K_F9)
{ {
TArray_sheet* sh = ((TLiquidazione_app&)main_app()).get_ditte_sheet(); TArray_sheet* sh = app().get_ditte_sheet();
sh->disable_check(); sh->disable_check();
sh->disable(DLG_USER); sh->disable(DLG_USER);
@ -700,7 +699,7 @@ bool TLiquidazione_app::fr_ditt_handler(TMask_field& f, KEY key)
app().set_choice_limits(m); app().set_choice_limits(m);
m.set(CG43_FLD_SELECTED, l); m.set(CG43_FLD_SELECTED, l);
} }
return TRUE; return true;
} }
bool TLiquidazione_app::what_freq_handler(TMask_field& f, KEY key) bool TLiquidazione_app::what_freq_handler(TMask_field& f, KEY key)
@ -721,7 +720,7 @@ bool TLiquidazione_app::what_freq_handler(TMask_field& f, KEY key)
app().build_ditte_sheet((wht)atoi(f.get())); app().build_ditte_sheet((wht)atoi(f.get()));
app().reset_choices(f.mask()); app().reset_choices(f.mask());
} }
return TRUE; return true;
} }
bool TLiquidazione_app::lst_tm_handler(TMask_field& f, KEY key) bool TLiquidazione_app::lst_tm_handler(TMask_field& f, KEY key)
@ -747,12 +746,11 @@ bool TLiquidazione_app::lst_tm_handler(TMask_field& f, KEY key)
TWait_cursor hourglass; TWait_cursor hourglass;
app().reset_choices(f.mask()); app().reset_choices(f.mask());
app().set_month(m); app().set_month(m);
app().build_ditte_sheet(f.mask().source_file() == "cg4300a.msk" ? app().build_ditte_sheet(f.mask().source_file().ends_with("cg4300a.msk") ?
(wht)atoi(f.mask().get(CG43_RDB_VERS)) : (wht)f.mask().get_int(CG43_RDB_VERS) : all);
all);
} }
} }
return TRUE; return true;
} }
bool TLiquidazione_app::select_button(TMask_field& f, KEY key) bool TLiquidazione_app::select_button(TMask_field& f, KEY key)
@ -769,14 +767,14 @@ bool TLiquidazione_app::select_button(TMask_field& f, KEY key)
app().set_choice_limits(f.mask()); app().set_choice_limits(f.mask());
} }
} }
return TRUE; return true;
} }
bool TLiquidazione_app::reset_button(TMask_field& f, KEY key) bool TLiquidazione_app::reset_button(TMask_field& f, KEY key)
{ {
if (key == K_SPACE) if (key == K_SPACE)
app().reset_choices(f.mask()); app().reset_choices(f.mask());
return TRUE; return true;
} }
bool TLiquidazione_app::chk_final_handler(TMask_field& f, KEY key) bool TLiquidazione_app::chk_final_handler(TMask_field& f, KEY key)
@ -790,19 +788,28 @@ bool TLiquidazione_app::chk_final_handler(TMask_field& f, KEY key)
const bool abilita = !m.get_bool(CG43_CHK_FINAL) && mese != 13; const bool abilita = !m.get_bool(CG43_CHK_FINAL) && mese != 13;
m.enable(CG43_LST_CALC, abilita); m.enable(CG43_LST_CALC, abilita);
} }
return TRUE; return true;
} }
void TLiquidazione_app::reset_choices(TMask& m) void TLiquidazione_app::reset_choices(TMask& m)
{ {
_selected.reset(); _selected.reset();
_ditte->check(-1, FALSE); _ditte->check(-1, FALSE);
if (m.source_file() == "cg4300a.msk") if (m.source_file().ends_with("cg4300a.msk"))
{ {
const long ditta = get_firm(); const long ditta = get_firm();
m.set(CG43_FLD_DFR, ditta, 0x2); m.set(CG43_FLD_DFR, ditta, 0x2);
m.set(CG43_FLD_DTO, ditta, 0x2); m.set(CG43_FLD_DTO, ditta, 0x2);
const wht freq = (wht)m.get_int(CG43_RDB_VERS);
wht freq = all;
if (look_lia(ditta, false, m.get_int(CG43_FLD_ANNO)))
{
freq = _lia->get_char("S7") == 'T' ? trimestre : mnt;
if (m.get_int(CG43_RDB_VERS) != freq)
m.set(CG43_RDB_VERS, freq, 0x3);
}
else
freq = (wht)m.get_int(CG43_RDB_VERS);
select_firm_range(ditta, ditta, freq); select_firm_range(ditta, ditta, freq);
set_choice_limits(m); set_choice_limits(m);
} }
@ -935,5 +942,5 @@ int cg4300(int argc, char* argv[])
TLiquidazione_app* main_app = new TLiquidazione_app(menu); TLiquidazione_app* main_app = new TLiquidazione_app(menu);
main_app->run(argc, argv, title); main_app->run(argc, argv, title);
delete main_app; delete main_app;
return TRUE; return true;
} }

View File

@ -450,8 +450,10 @@ protected:
bool residuo_da_liquidare(long numreg, int numrig, const TDate& last_pag, bool residuo_da_liquidare(long numreg, int numrig, const TDate& last_pag,
real& importo_res, real& imponibile_res, real& imposta_res) const; real& importo_res, real& imponibile_res, real& imposta_res) const;
bool print_inc_diff_log(int& rw, int tipoatt); bool print_inc_diff_log(int& rw, int tipoatt, int tipoiva);
bool print_dainc_diff_log(int& rw, int tipoatt); bool print_dainc_diff_log(int& rw, int tipoatt, int tipoiva);
bool ivadiff_chiusa(const TRectype& mov, const TDate& fine) const;
bool sarebbe_da_pagare(const TRectype& mov, const TDate& fine) const;
public: public:
@ -546,11 +548,14 @@ public:
void add_plafond (int month, const char* codatt, int type, void add_plafond (int month, const char* codatt, int type,
const real& howmuch, bool intra); const real& howmuch, bool intra);
// IVA differita e per cassa
void zero_diff(int month, const char* codatt); // Azzera tabella IVA x Cassa
// Ritorna il parametro della liquidazione differita per la ditta corrente, cosi come // Ritorna il parametro della liquidazione differita per la ditta corrente, cosi come
// e' scritto sui parametri liquidazione (LIA) // e' scritto sui parametri liquidazione (LIA)
// Se si passa 0 (default) vede prende la ditta correntemente in corso di calcolo // Se si passa 0 (default) vede prende la ditta correntemente in corso di calcolo
// Analogamente per l'anno // Analogamente per l'anno
bool TLiquidazione_app::is_differita(long firm = 0, int year = 0); bool is_differita(long firm = 0, int year = 0);
// ritorna l'aliquota ordinaria dal // ritorna l'aliquota ordinaria dal
// codice IVA apposito immesso nei parametri studio // codice IVA apposito immesso nei parametri studio

View File

@ -33,14 +33,10 @@
bool TLiquidazione_app::recalc_all() bool TLiquidazione_app::recalc_all()
{ {
_prind = new TProgind(_selected.ones()*2, _printonly ? TString msg;
TR(" Stampa liquidazione... \n" msg = _printonly ? TR("Stampa") : TR("Calcolo");
" Preparazione archivi \n" msg << TR(" liquidazione:\npreparazione archivi...");
" ") : _prind = new TProgind(_selected.ones()*2, msg, true, true);
TR(" Calcolo liquidazione... \n"
" Preparazione archivi \n"
" "),
TRUE,TRUE);
for (int l = 0; l < _ditte->items(); l++) for (int l = 0; l < _ditte->items(); l++)
{ {
@ -65,14 +61,14 @@ bool TLiquidazione_app::recalc_all()
_nditte->curr().put("CODDITTA",codditta); _nditte->curr().put("CODDITTA",codditta);
_nditte->read(); _nditte->read();
_freqviva = nomeditta.get(3); _freqviva = nomeditta.get(3);
bool mens = _freqviva == "M"; const bool mens = _freqviva == "M";
// determina attivita' prevalente e istanzia cazzuole // determina attivita' prevalente e istanzia cazzuole
// per vedere che Kazzo di liquidazione calcolare // per vedere che Kazzo di liquidazione calcolare
TString attprev = _nditte->curr().get("CODATTPREV"); const TString8 attprev = _nditte->curr().get("CODATTPREV");
TString16 key; TString16 key;
key.format("%ld|%s", codditta, (const char *) attprev); key.format("%ld|%s", codditta, (const char *)attprev);
const TRectype & atts = cache().get(LF_ATTIV, key); const TRectype & atts = cache().get(LF_ATTIV, key);
// istanzia benzinaro // istanzia benzinaro
@ -104,14 +100,14 @@ bool TLiquidazione_app::recalc_all()
* -------------------------------------------------------------- * --------------------------------------------------------------
*/ */
int need_refresh = FALSE; int need_refresh = false;
if (_recalc != ever) if (_recalc != ever)
{ {
int m = _month == 13 ? _month : 1; int m = _month == 13 ? _month : 1;
for (; m < _month; m++) for (; m < _month; m++)
if (is_month_ok_strict(m) && (!look_lim(m) || !_lim->get_bool("B0"))) if (is_month_ok_strict(m) && (!look_lim(m) || !_lim->get_bool("B0")))
{ {
need_refresh = TRUE; need_refresh = true;
break; break;
} }
@ -122,11 +118,14 @@ bool TLiquidazione_app::recalc_all()
} }
int m; int m;
for (m = 1; m <= _month; m++) // fino a 13 compreso for (m = 1; m <= _month; m++) // fino a 13 compreso
{
if (is_month_plain(m) || _recalc == ever) if (is_month_plain(m) || _recalc == ever)
{ {
if (_prind->iscancelled()) break; if (_prind->iscancelled())
break;
update_firm(m); update_firm(m);
} }
}
// se ci sono altri mesi dopo l'ultimo calcolato, invalida il // se ci sono altri mesi dopo l'ultimo calcolato, invalida il
// flag 'calcolato' del primo, per causare il ricalcolo dei // flag 'calcolato' del primo, per causare il ricalcolo dei
@ -158,15 +157,7 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
// Ritorna FALSE soltanto se il ricalcolo era necessario e non e' // Ritorna FALSE soltanto se il ricalcolo era necessario e non e'
// stato effettuato per scelta dello stronzo commercialista. // stato effettuato per scelta dello stronzo commercialista.
TConfig c(CONFIG_DITTA, "cg"); _isdiff = ini_get_bool(CONFIG_DITTA, "cg", "GesLiqDiff");
_isdiff = c.get_bool("GesLiqDiff");
if (_isdiff)
{
TFilename tmp; tmp.tempdir();
tmp.add("liqdiff.txt");
ofstream log(tmp);
}
if (month == 13 && recalc) if (month == 13 && recalc)
{ {
@ -180,9 +171,8 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
} }
} }
look_lim(liq_month(month), TRUE); look_lim(liq_month(month), TRUE);
_isdiffacc = is_differita(); _isdiffacc = is_differita(); // Gestione differimento acconto IVA
_isdifferita = _isdiffacc; _isdifferita = _isdiffacc;
look_lia(); look_lia();
@ -192,7 +182,7 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
// controlla che il periodo corrente non sia l'inizio dell'attivita' // controlla che il periodo corrente non sia l'inizio dell'attivita'
// nel caso, differita va a FALSE // nel caso, differita va a FALSE
_monthinatt = 1; _monthinatt = 1;
const TDate inatt = _nditte->curr().get("DINIZIOATT"); const TDate inatt = _nditte->curr().get(NDT_DINIZIOATT);
if (is_in_liq_period(inatt)) if (is_in_liq_period(inatt))
_isdifferita = false; _isdifferita = false;
if (inatt.year() == atoi(_year)) if (inatt.year() == atoi(_year))
@ -222,24 +212,24 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
_nditte->save_status(); _nditte->save_status();
if (_nditte->is_first_match(LF_ATTIV)) if (_nditte->is_first_match(LF_ATTIV))
{ {
TString buf(256);
do do
{ {
const TString8 codatt = _nditte->curr(LF_ATTIV).get("CODATT"); const TString8 codatt = _nditte->curr(LF_ATTIV).get("CODATT");
TString80 desatt = _nditte->curr(LF_ATTIV).get("DESCR"); const TString80 desatt = _nditte->curr(LF_ATTIV).get("DESCR");
quater = _nditte->curr().get_bool("FLIVA11Q"); quater = _nditte->curr().get_bool("FLIVA11Q");
// attivita' mista: ce ne sono in realta' due // attività mista: ce ne sono in realtà due
// viene calcolato nel ciclo su tipoatt (che viene ripetuto solo se diventa TRUE); // viene calcolato nel ciclo su tipoatt (che viene ripetuto solo se diventa TRUE);
_mixed = false; _mixed = false;
buf.format( _printonly ? FR("Stampa liquidazione (%d)...\n%s: %s\n") : if (_prind)
FR("Calcolo liquidazione (%d)...\n%s: %s\n"), {
month, TString buf(80);
(const char*)_nditte_r->get("RAGSOC"), buf.format( _printonly ? FR("Stampa liquidazione (mese %d)...\n%s: %s\n") :
(const char*)desatt); FR("Calcolo liquidazione (mese %d)...\n%s: %s\n"),
month, (const char*)_nditte_r->get(NDT_RAGSOC), (const char*)desatt);
if (_prind) _prind->set_text(buf); _prind->set_text(buf);
}
// se ricalcola l'annuale si tiene tutte le vendite e corrispettivi di // se ricalcola l'annuale si tiene tutte le vendite e corrispettivi di
// tutti i lerci mesi. Analogamente se sta calcolando una trimestrale. // tutti i lerci mesi. Analogamente se sta calcolando una trimestrale.
@ -255,11 +245,14 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
for (int tipoatt = 1; tipoatt <= (_mixed ? 2 : 1); tipoatt++) for (int tipoatt = 1; tipoatt <= (_mixed ? 2 : 1); tipoatt++)
{ {
bool waspla = false;
TString8 cattiv(codatt); TString8 cattiv(codatt);
cattiv << tipoatt; cattiv << tipoatt;
if (tipoatt == 1 && (waspla = look_pla(cattiv, false)))
const bool waspla = look_pla(cattiv, false);
if (!waspla)
break; // Non calcolare attività inesistenti 29-11-2012
if (tipoatt == 1 && waspla)
{ {
_p8 = _pla->get_real("R5"); _p8 = _pla->get_real("R5");
_p8b = _pla->get_real("R6"); _p8b = _pla->get_real("R6");
@ -280,7 +273,7 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
for (int i = atoi(_year); i>=anno; i--) for (int i = atoi(_year); i>=anno; i--)
{ {
_year.format("%d", i); _year.format("%d", i);
if (look_pla(cattiv, FALSE)) // Reperisce percentuale prorata anno indicato (se esiste la tabella) if (look_pla(cattiv, false)) // Reperisce percentuale prorata anno indicato (se esiste la tabella)
pa.add(_year, _pla->get_real("R8")); pa.add(_year, _pla->get_real("R8"));
} }
_year = yr; // Risetta l'anno corretto e riposiziona la tabella... _year = yr; // Risetta l'anno corretto e riposiziona la tabella...
@ -327,14 +320,14 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
} }
if (!_isregis) if (!_isregis)
stliq = riepliq = TRUE; stliq = riepliq = true;
if (_comp_acconto) if (_comp_acconto)
stliq = riepliq = FALSE; stliq = riepliq = false;
if (calc || !recalc) if (calc || !recalc)
if (!update_att(month, cattiv) && stliq) if (!update_att(month, cattiv) && stliq)
describe_error(TR("Attivita' non ricalcolate: possibili errori"), describe_error(TR("Attività non ricalcolate: possibili errori"),
codatt); codatt);
if (_recalc_regis) if (_recalc_regis)
continue; continue;
@ -488,9 +481,11 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
"R10", "R11", "R12", "R13", "R14", "R15", "R16", "R17", "R18", "R19", "R10", "R11", "R12", "R13", "R14", "R15", "R16", "R17", "R18", "R19",
"R20", "R21", "R22", "R23", "R24", "R25", "R26", "R27", "R28", "R29", "R20", "R21", "R22", "R23", "R24", "R25", "R26", "R27", "R28", "R29",
"R30", "R31", "R32", "R33", "R30", "R31", "R32", "R33",
"S0", "S1", "S2" }; "S0", "S1", "S2", NULL };
TString att, year, codtab; TString80 codtab;
TString16 att;
TString4 year;
int m, start, stop; int m, start, stop;
start = 0; stop = 1; start = 0; stop = 1;
@ -503,7 +498,7 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
else else
if (atoi(_year) < 1998) if (atoi(_year) < 1998)
stop = 0; // Solo PIM stop = 0; // Solo PIM
// PIM / PIS
for (int i = start; i <= stop; i++) // Ciclo per le tabelle da azzerare for (int i = start; i <= stop; i++) // Ciclo per le tabelle da azzerare
{ {
TTable * tab = (TTable*) arr[i]; TTable * tab = (TTable*) arr[i];
@ -516,7 +511,7 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
year = codtab.mid(0,4); year = codtab.mid(0,4);
if (m == month && att == codatt && year == _year) if (m == month && att == codatt && year == _year)
{ {
for (int j = 0; j < 37; j++) // Ciclo per i campi del record da azzerare (34 + 3) for (int j = 0; flds[j]; j++) // Ciclo per i campi del record da azzerare (34 + 3)
tab->zero(flds[j]); tab->zero(flds[j]);
tab->rewrite(); tab->rewrite();
} }
@ -528,7 +523,7 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
if (look_plm(month, codatt)) if (look_plm(month, codatt))
{ {
// zero PLM, POM, PAM, PUM // zero PLM, POM, PAM, PUM
TString codtab(_plm->get("CODTAB")); const TString16 codtab(_plm->get("CODTAB"));
_plm->zero(); _plm->zero();
_pom->zero(); _pom->zero();
_pam->zero(); _pam->zero();
@ -552,8 +547,8 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
const TString8 att = (const char*)*_pia_codatt; const TString8 att = (const char*)*_pia_codatt;
if (m == month && att == codatt && (_year == *_pia_anno)) if (m == month && att == codatt && (_year == *_pia_anno))
{ {
_pia->put("R0",""); // Imponibile _pia->zero("R0"); // Imponibile
_pia->put("R1",""); // Imposta _pia->zero("R1"); // Imposta
_pia->rewrite(); _pia->rewrite();
} }
} }
@ -561,23 +556,90 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
} }
if (_isplafond && month != 13) if (_isplafond && month != 13)
zero_plafond(month,codatt); zero_plafond(month,codatt);
if (month != 13)
zero_diff(month,codatt);
}
bool TLiquidazione_app::ivadiff_chiusa(const TRectype& mov, const TDate& fine) const
{
const long numreg = mov.get_long(MOV_NUMREG);
TString query;
query << "USA IVADIFF SELECT BETWEEN(DATAREGP,0," << fine.date2ansi() << ')'
<< "\nFROM NUMREG==" << numreg
<< "\nTO NUMREG==" << numreg;
TISAM_recordset id(query);
const TRectype& rid = id.cursor()->curr();
bool some_pag = false; // Ci sono pagamenti?
TImporto tot;
for (bool ok = id.move_first(); ok; ok = id.move_next())
{
const char sez = rid.get_char("SEZIONE");
const real imp = rid.get(RMI_IMPOSTA);
if (!imp.is_zero())
{
if (rid.get_int(MOV_TIPOMOV) > 1)
some_pag = true;
tot += TImporto(sez, imp);
}
}
const bool chiusa = some_pag && tot.valore() < 0.01;
return chiusa;
} }
// Fattura più vecchia di un anno a ente NON pubblico // Fattura più vecchia di un anno a ente NON pubblico
static bool sarebbe_da_pagare(const TRectype& mov, const TDate& fine) bool TLiquidazione_app::sarebbe_da_pagare(const TRectype& mov, const TDate& fine) const
{ {
if (mov.get_int(MOV_TIPOMOV) != tm_fattura)
return false;
const TDate datareg = mov.get(MOV_DATAREG); const TDate datareg = mov.get(MOV_DATAREG);
const long giorni = fine - datareg; const long giorni = fine - datareg;
if (giorni <= 365) if (giorni < 0)
return false; // E' passato meno di un anno return false;
if (mov.get_bool(MOV_LIQDIFF))
{
const TDate datainc = mov.get(MOV_DATAINC); const TDate datainc = mov.get(MOV_DATAINC);
if (datainc.ok() && datainc <= fine) if (datainc.ok() && datainc <= fine)
return false; // Già pagata senza saldaconto return false; // Già pagata senza saldaconto
} else
if (mov.get_bool(MOV_IVAXCASSA))
{
if (!gestione_IVAxCassa(fine) || _isviaggio) // Le agenzie viaggio non posso aderire al regime IVA per cassa
return true; // Ho superato la soglia di applicabilità dell'IVA per cassa
}
else
return true; // Regime IVA normale
TString8 key; key.format("%c|%ld", mov.get_char(MOV_TIPO), mov.get_long(MOV_CODCF)); TString8 key; key.format("%c|%ld", mov.get_char(MOV_TIPO), mov.get_long(MOV_CODCF));
const TRectype& clifo = cache().get(LF_CLIFO, key); const TRectype& clifo = cache().get(LF_CLIFO, key);
return clifo.get_int(CLI_ALLEG) != 7; // Non è un ente pubblico const int alleg = clifo.get_int(CLI_ALLEG);
if (alleg == 5 || alleg == 6 || alleg == 9) // Privati, import ed export non hanno IVA per cassa
return true;
if (alleg == 7 || alleg == 8) // Ente pubblico e amministrazione controllata ...
return false; // ... possono aspettare le calende greche
TString16 paiv = clifo.get(CLI_PAIV);
if (paiv.empty() && clifo.get_bool(CLI_OCCAS))
{
const TRectype& occas = cache().get(LF_OCCAS, mov.get(MOV_OCFPI));
paiv = occas.get(OCC_PAIV);
}
if (paiv.blank())
return true; // In assenza di Partita IVA non c'è IVA per cassa
if (ivadiff_chiusa(mov, fine))
return false;
if (giorni >= 365)
return true; // E' passato più di un anno!
return false;
} }
bool TLiquidazione_app::residuo_da_liquidare(long numreg, int numrig, const TDate& last_pag, bool TLiquidazione_app::residuo_da_liquidare(long numreg, int numrig, const TDate& last_pag,
@ -601,8 +663,8 @@ bool TLiquidazione_app::residuo_da_liquidare(long numreg, int numrig, const TDat
for (bool ok = id.move_first(); ok; ok = id.move_next()) for (bool ok = id.move_first(); ok; ok = id.move_next())
{ {
const char sez = id.get("SEZIONE").as_string()[0]; const char sez = id.get("SEZIONE").as_string()[0];
const int tipomov = id.get(PART_TIPOMOV).as_int(); const tipo_movimento tipomov = (tipo_movimento)id.get(PART_TIPOMOV).as_int();
if ((tipomov == 1 || tipomov == 2) || !last_pag.ok()) if (tipomov <= tm_nota_credito || !last_pag.ok())
{ {
importo += TImporto(sez, id.get(PAGSCA_IMPORTO).as_real()); importo += TImporto(sez, id.get(PAGSCA_IMPORTO).as_real());
imponib += TImporto(sez, id.get(RMI_IMPONIBILE).as_real()); imponib += TImporto(sez, id.get(RMI_IMPONIBILE).as_real());
@ -613,17 +675,12 @@ bool TLiquidazione_app::residuo_da_liquidare(long numreg, int numrig, const TDat
const TDate data_pag = id.get("DATAREGP").as_date(); const TDate data_pag = id.get("DATAREGP").as_date();
if (data_pag >= last_pag) if (data_pag >= last_pag)
continue; continue;
const TImporto vers(sez, id.get("VERSATA").as_real());
if (!vers.is_zero())
{
importo += TImporto(sez, id.get(PAGSCA_IMPORTO).as_real()); importo += TImporto(sez, id.get(PAGSCA_IMPORTO).as_real());
imponib += TImporto(sez, id.get(RMI_IMPONIBILE).as_real()); imponib += TImporto(sez, id.get(RMI_IMPONIBILE).as_real());
imposta += vers; imposta += TImporto(sez, id.get(RMI_IMPOSTA).as_real());
} }
} }
} if (imponib.valore() > ZERO)
if (importo.valore() > ZERO)
{ {
importo_res = importo.valore(); importo_res = importo.valore();
imponib_res = imponib.valore(); imponib_res = imponib.valore();
@ -654,7 +711,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
// occhecasino. Se _comp_acconto e' TRUE, i movimenti considerati // occhecasino. Se _comp_acconto e' TRUE, i movimenti considerati
// saranno solo quelli di dicembre per data <= 20/12; // saranno solo quelli di dicembre per data <= 20/12;
{ {
const bool has_sc = has_module(SCAUT, CHK_DONGLE); const bool has_sc = has_module(SCAUT, CHK_DONGLE) && ini_get_bool(CONFIG_DITTA, "cg", "GesSal");
real totintra = ZERO; real totintra = ZERO;
real nond19_imp = ZERO; real nond19_imp = ZERO;
real nond19_iva = ZERO; real nond19_iva = ZERO;
@ -698,9 +755,6 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real rottami_cd3_3 = ZERO; // imponibile acquisto rottami real rottami_cd3_3 = ZERO; // imponibile acquisto rottami
real rottami_cd3_4 = ZERO; // imposta acquisto rottami real rottami_cd3_4 = ZERO; // imposta acquisto rottami
real vt_imponibile[23];
real vt_imposta[23];
real esni_rimb = ZERO; // ci sommo tutti esenti e ni validi per rimborso real esni_rimb = ZERO; // ci sommo tutti esenti e ni validi per rimborso
real corr_CEE = ZERO; real corr_CEE = ZERO;
real corr_noCEE = ZERO; real corr_noCEE = ZERO;
@ -738,6 +792,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real bdog_iva = ZERO; real bdog_iva = ZERO;
real agr_imp = ZERO; real agr_imp = ZERO;
real agr_iva = ZERO; real agr_iva = ZERO;
real fdiff_imp = ZERO; real fdiff_imp = ZERO;
real fdiff_iva = ZERO; real fdiff_iva = ZERO;
real fdiffinc_imp = ZERO; real fdiffinc_imp = ZERO;
@ -752,6 +807,9 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
_diff_acq_ap = ZERO; _diff_acq_ap = ZERO;
_diff_acq_ap_iva = ZERO; _diff_acq_ap_iva = ZERO;
// PEM
real vt_imponibile[23];
real vt_imposta[23];
for (int j = 0; j < 23; j++) for (int j = 0; j < 23; j++)
{ {
vt_imponibile[j] = ZERO; vt_imponibile[j] = ZERO;
@ -853,14 +911,15 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
_cur->setregion(from, to); _cur->setregion(from, to);
TString filter; TString filter;
filter.format("((ANSI(DATAREG)>=%ld)&&(ANSI(DATAREG)<=%ld))", fromdate.date2ansi(), t.date2ansi()); //filter.format("((ANSI(DATAREG)>=%ld)&&(ANSI(DATAREG)<=%ld))", fromdate.date2ansi(), t.date2ansi());
if (_isviaggio || _isdiff) filter.format("(BETWEEN(DATAREG,%ld,%ld))", fromdate.date2ansi(), t.date2ansi());
{
if (_isviaggio) if (_isviaggio)
filter << format("||((ANSI(DATA74TER)>=%ld)&&(ANSI(DATA74TER)<=%ld))", f74.date2ansi(), t.date2ansi()); filter << format("||(BETWEEN(DATA74TER,%ld,%ld))", f74.date2ansi(), t.date2ansi());
if (_isdiff) if (_isdiff)
filter << "|| NUM(LIQDIFF==\"X\")"; filter << "||(NUM(LIQDIFF==\"X\"))";
} if (has_sc && gestione_IVAxCassa(fromdate))
filter << "||(NUM(IVAXCASSA==\"X\"))";
_cur->setfilter(filter); _cur->setfilter(filter);
const long items = _cur->items(); const long items = _cur->items();
_cur->freeze(); _cur->freeze();
@ -885,8 +944,9 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const TString4 tipodoc = _mov->get(MOV_TIPODOC); const TString4 tipodoc = _mov->get(MOV_TIPODOC);
const bool corrisp = _reg->get_bool("B0"); const bool corrisp = _reg->get_bool("B0");
const tiporeg tipomov = (tiporeg)_reg->get_int("I0"); const tiporeg tipomov = (tiporeg)_reg->get_int("I0");
const tipo_movimento tm = (tipo_movimento)_mov->get_int(MOV_TIPOMOV);
// Controlla se la data del documento si riferisce all'anno precedente (PRORATA 1998) // Controlla se la data del documento si riferisce all'anno precedente (PRORATA 1998)
const TDate datedoc(_mov->get(MOV_DATADOC)); const TDate datedoc = _mov->get(MOV_DATADOC);
if (_isviaggio) if (_isviaggio)
{ {
@ -900,16 +960,19 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const bool cau_intra = rcs.get_bool("INTRACOM"); const bool cau_intra = rcs.get_bool("INTRACOM");
const bool cau_valintra = rcs.get_bool("VALINTRA"); const bool cau_valintra = rcs.get_bool("VALINTRA");
if (_mov->get_long(MOV_NUMREG) == 20339)
int cazzone = 1;
// Inizio gestione IVA differita // Inizio gestione IVA differita
const bool iva_cass = has_module(ICAUT) && _mov->get_bool(MOV_IVAXCASSA);
const bool iva_diff = _isdiff && _mov->get_bool(MOV_LIQDIFF); const bool iva_diff = _isdiff && _mov->get_bool(MOV_LIQDIFF);
const bool iva_cass = !iva_diff && _mov->get_bool(MOV_IVAXCASSA) && tm > 0;
const bool movdiff = iva_diff || iva_cass; const bool movdiff = iva_diff || iva_cass;
bool dok = is_date_ok(date, month, liqmonth, year_int); bool dok = is_date_ok(date, month, liqmonth, year_int);
TPartite_array arrpart; // Partite interessate TPartite_array arrpart; // Partite interessate
TPointer_array pagscatt; // Righe di pagsca interessate TPointer_array pagscatt; // Righe di pagsca interessate
if (movdiff) if (movdiff && tm == tm_fattura)
{ {
// Sezione preferita per fatture decisa in base a vendita->'A' o acquisto->'D' // Sezione preferita per fatture decisa in base a vendita->'A' o acquisto->'D'
const char sezfat = tipomov == vendita ? 'D' : 'A'; const char sezfat = tipomov == vendita ? 'D' : 'A';
@ -925,14 +988,14 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const TPartita* p = arrpart.first(); const TPartita* p = arrpart.first();
const int row = p ? p->mov2rig(numreg, 0) : 0; const int row = p ? p->mov2rig(numreg, 0) : 0;
game_found = row > 0; game_found = row > 0;
if (game_found) if (game_found && !ivadiff_chiusa(_mov->curr(), fine))
{ {
const TRiga_partite& rp = p->riga(row); const TRiga_partite& rp = p->riga(row);
TImporto pg, nc; TImporto pg, nc;
flag_pg_nc = rp.calcola_pagato_periodo(inizio+1L, fine, pg, nc, &pagscatt); flag_pg_nc = rp.calcola_pagato_periodo(inizio+1L, fine, pg, nc, &pagscatt);
if (!p->chiusa() && sarebbe_da_pagare(_mov->curr(), fine)) if (sarebbe_da_pagare(_mov->curr(), fine))
{ {
rp.calcola_pagato_periodo(TDate(1,1,date.year()), fine, pg, nc, NULL); rp.calcola_pagato_periodo(TDate(0L), fine, pg, nc, NULL);
TImporto saldo = rp.importo(false); TImporto saldo = rp.importo(false);
saldo += pg; saldo += nc; saldo += pg; saldo += nc;
saldo.normalize(sezfat); saldo.normalize(sezfat);
@ -943,7 +1006,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
} }
if (!game_found) // No saldaconto o partita assente if (!game_found) // No saldaconto o partita assente
{ {
datainc = _mov->get(MOV_DATAINC); datainc = iva_diff ? _mov->get_date(MOV_DATAINC) : TDate();
if (datainc.ok() && datainc <= fine) if (datainc.ok() && datainc <= fine)
tot_incassato = _mov->get_real(MOV_TOTDOC); tot_incassato = _mov->get_real(MOV_TOTDOC);
else else
@ -1008,14 +1071,12 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const int accmonth = _isdifferita ? 11 : 12; const int accmonth = _isdifferita ? 11 : 12;
/* /*
* Patrizia: se e' differita i mov. vanno da 1/11 a 30/11 * Patrizia: se è differita i mov. vanno da 1/11 a 30/11
* potrei allora andarmi a leggere i risultati della liq di 11 * potrei allora andarmi a leggere i risultati della liq di 11
* ma il cliente potrebbe voler calcolare l'acconto prima * ma il cliente potrebbe voler calcolare l'acconto prima
* di aver calcolato la liquidazione (perche' cosi' complicato?) * di aver calcolato la liquidazione (perche' cosi' complicato?)
*/ */
//if (_comp_acconto && date.month() == accmonth && date.day() > 20) if (_comp_acconto && !_isdifferita && date.month() == accmonth && date.day() > 20)
if (_comp_acconto && date.month() == accmonth)
if (!_isdifferita && date.day() > 20)
continue; continue;
// Ciclo sulle righe iva del movimento // Ciclo sulle righe iva del movimento
@ -1079,7 +1140,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real impon_det; // Imponibile detraibile real impon_det; // Imponibile detraibile
real impos_det; // Imposta detraibile real impos_det; // Imposta detraibile
if (movdiff) if (movdiff && tm == tm_fattura)
{ {
const char sezfat = tipomov == vendita ? 'D' : 'A'; const char sezfat = tipomov == vendita ? 'D' : 'A';
const TDate datareg = _mov->get(MOV_DATAREG); const TDate datareg = _mov->get(MOV_DATAREG);
@ -1087,12 +1148,13 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
TLocalisamfile id(LF_IVADIFF); TLocalisamfile id(LF_IVADIFF);
id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG));
id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG));
id.put(PART_TIPOMOV, 1);
id.put("NUMPRO", 0); id.put("NUMPRO", 0);
id.put(PART_TIPOMOV, tm);
CHECKD(rmi_tipoatt > 0, "Invalid tipo att ", rmi_tipoatt);
id.put("TIPOATT", rmi_tipoatt); id.put("TIPOATT", rmi_tipoatt);
id.put("ANNOLIQ", datareg.year()); id.put("ANNOLIQ", datareg.year());
int mesereg = datareg.month(); int mesereg = mesereg = datareg.month();
if (_freqviva == "T") if (_freqviva[0] == 'T')
{ {
const int resto = mesereg % 3; const int resto = mesereg % 3;
if (resto > 0) if (resto > 0)
@ -1125,7 +1187,9 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG));
id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG));
id.put(MOV_DATAREG, _mov->get(MOV_DATADOC)); id.put(MOV_DATAREG, _mov->get(MOV_DATADOC));
id.put("NUMPRO", nrigp); CHECKD(nrigp > 0, "Invalid NRIGP ", nrigp);
id.put("NUMPRO", min(nrigp, 999));
CHECKD(rmi_tipoatt > 0, "Invalid tipo att ", rmi_tipoatt);
id.put("TIPOATT", rmi_tipoatt); id.put("TIPOATT", rmi_tipoatt);
id.put("TIPOIVA", tipomov == 2 ? 2 : 1); id.put("TIPOIVA", tipomov == 2 ? 2 : 1);
id.put("TIPODIFF", iva_cass ? 2 : 1); id.put("TIPODIFF", iva_cass ? 2 : 1);
@ -1133,14 +1197,21 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
TImporto pagtmp; TImporto pagtmp;
bool ultimo = false; bool ultimo = false;
tipo_movimento tipomov_pag = tm_pagamento;
if (nrigp > 0 && nrigp < 9999) if (nrigp > 0 && nrigp < 9999)
{ {
const TPartita& p = arrpart.partita(pagsca); const TPartita& p = arrpart.partita(pagsca);
const TRiga_partite& rp = p.riga(nrigp); const TRiga_partite& rp = p.riga(nrigp);
id.put(PART_TIPOMOV, rp.tipo()); tipomov_pag = rp.tipo();
id.put(PART_TIPOMOV, tipomov_pag);
id.put("NUMREGP", rp.get(PART_NREG)); id.put("NUMREGP", rp.get(PART_NREG));
id.put("NUMRIGP", rp.get(PART_NUMRIG)); id.put("NUMRIGP", rp.get(PART_NUMRIG));
id.put("DATAREGP", rp.get(PART_DATAPAG)); TDate d = rp.get(PART_DATAPAG);
if (!d.ok())
d = rp.get(PART_DATADOC);
if (!d.ok())
d = rp.get(PART_DATAREG);
id.put("DATAREGP", d);
pagtmp = p.importo_pagsca(pagsca); pagtmp = p.importo_pagsca(pagsca);
if (p.chiusa() && rp.tipo() >= 3) if (p.chiusa() && rp.tipo() >= 3)
{ {
@ -1158,7 +1229,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
else else
{ {
// Falso record generato da datainc // Falso record generato da datainc
id.put(PART_TIPOMOV, 3); id.put(PART_TIPOMOV, tipomov_pag);
id.put("NUMREGP", _mov->get(MOV_NUMREG)); id.put("NUMREGP", _mov->get(MOV_NUMREG));
id.put("NUMRIGP", nrigp); id.put("NUMRIGP", nrigp);
id.put("DATAREGP", _mov->get(MOV_DATAINC)); id.put("DATAREGP", _mov->get(MOV_DATAINC));
@ -1168,7 +1239,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
id.put("ANNOLIQ", year_int); id.put("ANNOLIQ", year_int);
int meseliq = id.get_date("DATAREGP").month(); int meseliq = id.get_date("DATAREGP").month();
if (_freqviva == "T") if (_freqviva[0] == 'T')
{ {
const int resto = meseliq % 3; const int resto = meseliq % 3;
if (resto > 0) if (resto > 0)
@ -1198,23 +1269,40 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real val = imponibile_orig * perc; real val = imponibile_orig * perc;
round_imposta(val); round_imposta(val);
id.put(RMI_IMPONIBILE, val); id.put(RMI_IMPONIBILE, val);
if (tipomov_pag >= tm_pagamento)
incdiff_imp += val; incdiff_imp += val;
val = imposta_orig * perc; val = imposta_orig * perc;
round_imposta(val); round_imposta(val);
id.put(RMI_IMPOSTA, val); id.put(RMI_IMPOSTA, val);
if (tipomov_pag >= tm_pagamento)
incdiff_iva += val; incdiff_iva += val;
} }
if (_isfinal && id.get_int(PART_TIPOMOV) > 2) int err = id.write_rewrite();
id.put("VERSATA", id.get(RMI_IMPOSTA)); if (err != NOERR)
else error_box("Errore %d in aggiornamento file IVADIFF", err);
id.zero("VERSATA");
id.write_rewrite(); const long numreg = _rmoviva->get_long(RMI_NUMREG);
if (numreg > 0) // Chiude o riapre la partita
{
TISAM_recordset recset("USE IVADIFF\nFROM NUMREG=#NR\nTO NUMREG=#NR");
recset.set_var("#NR", numreg);
TLocalisamfile& id = recset.cursor()->file();
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
const bool chiusa = id.get_bool("CHIUSA");
if (chiusa != ultimo)
{
id.put("CHIUSA", ultimo);
id.rewrite();
} }
diff_imp = imponibile_orig - incdiff_imp; }
diff_iva = imposta_orig - incdiff_iva; }
}
diff_imp = imponibile_orig;
diff_iva = imposta_orig;
} }
else else
{ {
@ -1509,7 +1597,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
// senza entusiasmo ed interrogandomi sul senso della vita // senza entusiasmo ed interrogandomi sul senso della vita
if (ivarimb) if (ivarimb)
{ {
bool ok = _isagricolo ? tipoagr == 2 : FALSE; bool ok = _isagricolo ? tipoagr == 2 : false;
if (tipomov == acquisto && !ok) if (tipomov == acquisto && !ok)
ok = (tipocr == 0 || tipocr == 1 || tipocr == 5 || tipocr == 9); ok = (tipocr == 0 || tipocr == 1 || tipocr == 5 || tipocr == 9);
@ -2368,7 +2456,6 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (month == 13) if (month == 13)
{ {
TTable pem("PEM"); TTable pem("PEM");
for (int reg = 0; reg < 23; reg++) for (int reg = 0; reg < 23; reg++)
{ {
look_pem(pem, reg); look_pem(pem, reg);
@ -2418,8 +2505,9 @@ void TLiquidazione_app::iva11_set_arr_phase_1(const TString& codatt)
// TAB11_RQA34 ovvero "RQA34" non viene trasferito! // TAB11_RQA34 ovvero "RQA34" non viene trasferito!
// Sebbene per motivi di pieta' viene comunque lasciato nel tracciato record (esigenze PRASSI) // Sebbene per motivi di pietà viene comunque lasciato nel tracciato record (esigenze PRASSI)
if (codiva.empty()) return; if (codiva.blank())
return;
if (is_acquisto) if (is_acquisto)
{ {
@ -3261,10 +3349,10 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
// detrazioni solo non in regime agricolo // detrazioni solo non in regime agricolo
if (!attivita_agricola) if (!attivita_agricola)
{ {
risultato -= (_plm->get_real("R3")); const real r3 = _plm->get_real("R3");
res_cred += (_plm->get_real("R3")); risultato -= r3;
res_cred += r3;
} }
/* totalizza importi 74 ter */ /* totalizza importi 74 ter */
if (_isviaggio) if (_isviaggio)
{ {
@ -3482,7 +3570,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
while ((tmpatt = atts.get()) != NULL) while ((tmpatt = atts.get()) != NULL)
{ {
const TString8 att(tmpatt); const TString8 att(tmpatt);
int tipoatt = att[att.len() -1] - '0'; const int tipoatt = att.right(1)[0] - '0';
if (tipoatt == 1) // su PLA l'attivita' e' sempre 1 if (tipoatt == 1) // su PLA l'attivita' e' sempre 1
{ {
if (!look_pla(att)) if (!look_pla(att))
@ -3574,7 +3662,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
if (!prorata.is_zero() && look_plm(13, att)) if (!prorata.is_zero() && look_plm(13, att))
{ {
const real old_r33 = _plm->get("R33"); const real old_r33 = _plm->get("R33");
real new_r33 = old_r33 * prorata / 100; real new_r33 = old_r33 * prorata / CENTO;
round_imposta(new_r33); round_imposta(new_r33);
_plm->put("R33", new_r33); _plm->put("R33", new_r33);
_plm->rewrite(); _plm->rewrite();
@ -3729,14 +3817,15 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
_lim->put("R12", res_cred); _lim->put("R12", res_cred);
_lim->put("R13", res_debt); _lim->put("R13", res_debt);
_lim->put("R26", fdiff_imp); _lim->put("R26", fdiff_imp); // Imponibile IVA diff Fatture di vendita
_lim->put("R27", fdiff_iva); _lim->put("R27", fdiff_iva); // Imposta IVA diff Fatture di vendita
_lim->put("R28", fdiffinc_imp); _lim->put("R28", fdiffinc_imp); // Imponibile IVA diff Incassi
_lim->put("R29", fdiffinc_iva); _lim->put("R29", fdiffinc_iva); // Imposta IVA diff Incassi
_lim->put("R30", fdiff_imp_acq);
_lim->put("R31", fdiff_iva_acq); _lim->put("R30", fdiff_imp_acq); // Imponibile IVA diff Fatture di acquisto
_lim->put("R32", fdiffinc_imp_acq); _lim->put("R31", fdiff_iva_acq); // Imposta IVA diff Fatture di acquisto
_lim->put("R33", fdiffinc_iva_acq); _lim->put("R32", fdiffinc_imp_acq); // Imponibile IVA diff Pagamenti
_lim->put("R33", fdiffinc_iva_acq); // Imposta IVA diff Pagamenti
_lam->put("R0", iva_vend); _lam->put("R0", iva_vend);
_lam->put("R1", iva_acq); _lam->put("R1", iva_acq);
@ -3893,8 +3982,9 @@ void TLiquidazione_app::recalc_annual(const char* att)
TString16 codiva,reg,tiva; TString16 codiva,reg,tiva;
TToken_string va7("",'!'); TToken_string va7("",'!');
int tipoatt = att[strlen(att) -1] - '0'; const TString8 aaa(att);
TString aaa(att); const int tipoatt = aaa.right(1)[0] - '0';
CHECKD(tipoatt > 0, "Tipo att non valido ", tipoatt);
look_pla(aaa); look_pla(aaa);
volaff1 = _pla->get_real("R14"); volaff1 = _pla->get_real("R14");
@ -3955,7 +4045,7 @@ void TLiquidazione_app::recalc_annual(const char* att)
_CorrItem& ca = (_CorrItem&) corr_ann[codiva]; _CorrItem& ca = (_CorrItem&) corr_ann[codiva];
ca._totale += _pim->get_real("R3"); ca._totale += _pim->get_real("R3");
if (!is_key) // se non c'e' lo aggiunge if (!is_key) // se non c'e' lo aggiunge
ca._aliquota = _iva->get_real("R0")/CENTO; // Se e' nuovo setta l'aliquota ca._aliquota = _iva->get_real("R0")/CENTO; // Se è nuovo setta l'aliquota
} }
if (tipoatt == 1) if (tipoatt == 1)
volaff1 += imp_ifs; volaff1 += imp_ifs;

View File

@ -327,7 +327,8 @@ bool TLiquidazione_app::look_prp(int month, const char* codatt, const char* codr
const char* tipocr, const char* codiva, int tipodet, const char* tipocr, const char* codiva, int tipodet,
bool create) bool create)
{ {
bool ok = FALSE; bool ok = false;
_prp_r->zero(); _prp_r->zero();
(*_prp_anno) = _year; (*_prp_anno) = _year;
(*_prp_mese) = format("%02d", month); (*_prp_mese) = format("%02d", month);
@ -337,16 +338,13 @@ bool TLiquidazione_app::look_prp(int month, const char* codatt, const char* codr
(*_prp_tipocr) = tipocr; (*_prp_tipocr) = tipocr;
(*_prp_tipodet) = tipodet; (*_prp_tipodet) = tipodet;
TString s = _prp_r->get("CODTAB"); const TString80 s = _prp_r->get("CODTAB");
ok = _prp->read() == NOERR;
_prp->read();
ok = _prp->good();
if (!ok && create) if (!ok && create)
{ {
_prp_r->zero(); _prp_r->zero();
_prp_r->put("CODTAB",s); _prp_r->put("CODTAB",s);
_prp->write(); ok = _prp->write() == NOERR;
} }
return ok; return ok;
} }
@ -521,7 +519,8 @@ bool TLiquidazione_app::look_pla(const char* a, bool create)
buf.ltrim(); buf.ltrim();
buf.rtrim(1); buf.rtrim(1);
buf << "1"; buf << "1";
while (buf.len() < 6) buf.insert("0"); while (buf.len() < 6)
buf.insert("0");
_pla_r->zero(); _pla_r->zero();
(*_pla_ditta) = format("%05ld", get_firm()); (*_pla_ditta) = format("%05ld", get_firm());
@ -957,9 +956,8 @@ bool TLiquidazione_app::is_differita(long firm, int year)
real TLiquidazione_app::aliquota_agvia() real TLiquidazione_app::aliquota_agvia()
{ {
real r; real r;
TConfig cnf(CONFIG_STUDIO, "cg"); const TString& codagv = ini_get_string(CONFIG_STUDIO, "cg", "CodAgv");
const TString& codagv = cnf.get("CodAgv"); if (codagv.full() && look_iva(codagv)) // Controlla se è vuoto! CM600475
if (codagv.not_empty() && look_iva(codagv)) // Controlla se è vuoto! CM600475
r = _iva->get_real("R0"); r = _iva->get_real("R0");
return r; return r;
} }

View File

@ -6,14 +6,14 @@
#include "cg4300.h" #include "cg4300.h"
#include "recset.h"
void TLiquidazione_app::add_plafond(int month, const char* codatt, int type, void TLiquidazione_app::add_plafond(int month, const char* codatt, int type,
const real& howmuch, bool intra) const real& howmuch, bool intra)
{ {
look_ppa(month,codatt,type); look_ppa(month,codatt,type);
const char* field = intra ? "R1" : "R0"; const char* field = intra ? "R1" : "R0";
real r = _ppa_r->get(field); _ppa_r->add(field, howmuch);
r += howmuch;
_ppa_r->put(field, r);
_ppa->rewrite(); _ppa->rewrite();
} }
@ -598,14 +598,14 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts,
if (rimborsami && !alv.is_zero()) if (rimborsami && !alv.is_zero())
{ {
// vedi di quanto ala eccede alv; deve essere > 10% // vedi di quanto ala eccede alv; deve essere > 10%
real ecc = (ala/alv) - real(1.0); const real ecc = (ala/alv) - UNO;
rimborsami = (ecc >= SOGLIA_MAGGIORE_ALIQUOTA_DEL_CAZZO_PER_AVER_DIRITTO_AL_RIMBORSO); rimborsami = (ecc >= SOGLIA_MAGGIORE_ALIQUOTA_DEL_CAZZO_PER_AVER_DIRITTO_AL_RIMBORSO);
} }
if (stliq && rimborsami) if (stliq && rimborsami)
{ {
if (d == NULL) d = new _DescrItem(RIMBORSO); if (d == NULL) d = new _DescrItem(RIMBORSO);
d->_f1 = TRUE; d->_f1 = true;
d->_r2 = vtot; d->_r2 = vtot;
d->_r3 = atot; d->_r3 = atot;
d->_r4 = ivav; d->_r4 = ivav;
@ -622,3 +622,41 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts,
} }
return d; return d;
} }
// Azzera tabella IVA x CASSA
void TLiquidazione_app::zero_diff(int month, const char* codatt)
{
// Azzero tuttp al momento dell'azzeramento della prima attività
if (_nditte->is_first_match(LF_ATTIV))
{
if (month > 12 || (_freqviva == "T" && (month % 3) != 1))
return;
TString query;
query << "USE IVADIFF KEY 2";
query << "\nFROM ANNOLIQ=" << _year;
if (month > (_freqviva == "T" ? 3 : 1))
query << " MESELIQ=" << month;
TISAM_recordset id(query);
TLocalisamfile& file = id.cursor()->file();
for (bool ok = id.move_first(); ok; ok = id.move_next())
{
file.zero("ANNOLIQ");
file.zero("MESELIQ");
file.zero("IMPORTO");
file.zero("IMPONIBILE");
file.zero("IMPOSTA");
file.zero("DATAREG");
file.zero("NUMREGP");
file.zero("NUMRIGP");
file.zero("DATAREGP");
file.zero("DATAREGP");
file.zero("TIPOMOV");
file.zero("TIPOIVA");
file.zero("TIPOATT");
file.zero("TIPODIFF");
file.zero("CHIUSA");
file.rewrite();
}
}
}

View File

@ -809,6 +809,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
} }
// if (tipomov == vendita) // if (tipomov == vendita)
{ {
/* Non voglio piu' il riepilogo delle fatture emesse IVA diff
if (!diffimp.is_zero() || !diffiva.is_zero() || if (!diffimp.is_zero() || !diffiva.is_zero() ||
!diffimp_acq.is_zero() || !diffiva_acq.is_zero()) !diffimp_acq.is_zero() || !diffiva_acq.is_zero())
{ {
@ -841,6 +842,8 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
_descr_arr.insert(head, j++); _descr_arr.insert(head, j++);
head->_f0 = false; head->_f0 = false;
head->_f1 = true; head->_f1 = true;
head->_f2 = atoi(activity.right(1)); // Tipo attività = 1 (servizi) o 2 (mista)
head->_f3 = tipomov;
totd = new _DescrItem(TOT_ROW_D); totd = new _DescrItem(TOT_ROW_D);
_descr_arr.insert(totd, j); _descr_arr.insert(totd, j);
} }
@ -859,6 +862,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
t30 += diffimp_acq; t30 += diffimp_acq;
t31 += diffiva_acq; t31 += diffiva_acq;
} }
*/
if (!diffincimp.is_zero() || !diffinciva.is_zero() || if (!diffincimp.is_zero() || !diffinciva.is_zero() ||
!diffincimp_acq.is_zero() || !diffinciva_acq.is_zero()) !diffincimp_acq.is_zero() || !diffinciva_acq.is_zero())
{ {
@ -891,6 +895,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
headi->_f0 = false; headi->_f0 = false;
headi->_f1 = true; headi->_f1 = true;
headi->_f2 = atoi(activity.right(1)); // Tipo attività = 1 (servizi) o 2 (mista) headi->_f2 = atoi(activity.right(1)); // Tipo attività = 1 (servizi) o 2 (mista)
headi->_f3 = tipomov;
totdi = new _DescrItem(TOT_ROW_DI); totdi = new _DescrItem(TOT_ROW_DI);
_descr_arr.insert(totdi, j); _descr_arr.insert(totdi, j);
} }
@ -1235,7 +1240,7 @@ void TLiquidazione_app::describe_liq(int month, const char* codatts, _DescrItem*
d->_r6 = _lim->get_real("R6"); d->_r6 = _lim->get_real("R6");
d->_r7 = _lim->get_real("R14"); d->_r7 = _lim->get_real("R14");
d->_r9 = _lim->get_real("R9"); d->_r9 = _lim->get_real("R9");
d->_r29 = _lim->get_real("R29"); d->_r29 = _lim->get_real("R29"); // fdiffinc_iva_ven
d->_r33 = _lim->get_real("R33"); // fdiffinc_iva_acq d->_r33 = _lim->get_real("R33"); // fdiffinc_iva_acq
if (atoi(_year) <= 1997) // Dal 1998 in poi il conguaglio prorata non va stampato, ma conglobato nell'iva acquisti if (atoi(_year) <= 1997) // Dal 1998 in poi il conguaglio prorata non va stampato, ma conglobato nell'iva acquisti
@ -1398,8 +1403,9 @@ void TLiquidazione_app::describe_consistence(const char* codatt)
void TLiquidazione_app::describe_error(const char* err, const char* codatt) void TLiquidazione_app::describe_error(const char* err, const char* codatt)
{ {
if (!_isprint || !_canprint || (_isregis && _isfinal)) return; if (!_isprint || !_canprint || (_isregis && _isfinal))
_errors.add(new _ErrItem(err,codatt,_nditte->curr().get("CODDITTA"))); return;
_errors.add(new _ErrItem(err, codatt, _nditte->curr().get(NDT_CODDITTA)));
} }
// ---------------------------------------------------------------- // ----------------------------------------------------------------
@ -1708,16 +1714,14 @@ void TLiquidazione_app::set_liqacc_2000(_DescrItem& d)
set_auto_ff(); set_auto_ff();
} }
bool TLiquidazione_app::print_dainc_diff_log(int& rw, int tipoatt) bool TLiquidazione_app::print_dainc_diff_log(int& rw, int tipoatt, int tipoiva)
{ {
if (_isregis)
return false;
TString limit; limit << "ANNOLIQ=" << _year; TString limit; limit << "ANNOLIQ=" << _year;
if (_month < 13) limit << " MESELIQ=" << _month; if (_month < 13) limit << " MESELIQ=" << _month;
TString query; TString query;
query << "USE IVADIFF KEY 2 SELECT (TIPOMOV==1)"; query << "USE IVADIFF KEY 2 SELECT (TIPOMOV==1)";
if (tipoatt == 1 || tipoatt == 2) //if (_isregis && tipoiva > 0) query << "&&(TIPOIVA==" << tipoiva << ')';
if (tipoatt > 0)
query << " &&(TIPOATT==" << tipoatt << ")"; query << " &&(TIPOATT==" << tipoatt << ")";
query << "\nBY TIPOIVA DATAREG"; query << "\nBY TIPOIVA DATAREG";
query << "\nJOIN MOV INTO NUMREG==NUMREG"; query << "\nJOIN MOV INTO NUMREG==NUMREG";
@ -1738,47 +1742,48 @@ bool TLiquidazione_app::print_dainc_diff_log(int& rw, int tipoatt)
const TDate nulldate; const TDate nulldate;
residuo_da_liquidare(rec.get_long(RMI_NUMREG), rec.get_int(RMI_NUMRIG), nulldate, residuo_da_liquidare(rec.get_long(RMI_NUMREG), rec.get_int(RMI_NUMRIG), nulldate,
importo, imponibile, imposta); importo, imponibile, imposta);
if (!importo.is_zero())
{
const int ti = rec.get_int("TIPOIVA"); const int ti = rec.get_int("TIPOIVA");
if (ti != header) if (ti != header)
{ {
if (ti < 2) if (ti < 2)
set_row(rw++, TR("Fatture a liquidazione differita o per cassa da incassare")); set_row(rw++, TR("Fatture da incassare"));
else else
set_row(rw++, TR("Fatture a liquidazione differita o per cassa da pagare")); set_row(rw++, TR("Fatture da pagare"));
set_row(rw++, "IVA@17gImporto@30gImponibile@49gImposta@58gTipologia@71gFattura@92gRagione sociale"); set_row(rw++, "IVA@17gImporto@30gImponibile@49gImposta@57gC/D@74gProt.@80gN. Doc.@89gData reg.@100gCodice@107gRagione sociale");
header = ti; header = ti;
} }
const TString4 codiva = rec.get("CODIVA"); const TString4 codiva = rec.get("CODIVA");
const TString16 numfat = id.get("MOV.NUMDOC").as_string(); const int protiva = id.get("MOV.PROTIVA").as_int();
const TString8 numfat = id.get("MOV.NUMDOC").as_string();
const TString16 datafat = rec.get("DATAREG"); const TString16 datafat = rec.get("DATAREG");
const char* tipolog = id.get("TIPODIFF").as_int() == 2 ? TR("Per Cassa") : TR("Differita"); const char* tipolog = id.get("TIPODIFF").as_int() == 2 ? TR("C") : TR("D");
TParagraph_string clifo(id.get("CLIFO.RAGSOC").as_string(), 40); const long codcf = id.get("CLIFO.CODCF").as_int();
set_row(rw++, "%s@9g%r@25g%r@41g%r@58g%s@71g%s@81g%s@92g%s", TParagraph_string clifo(id.get("CLIFO.RAGSOC").as_string(), 25);
set_row(rw++, "%s@9g%r@25g%r@41g%r@58g%s@74g%5d@80g%s@89g%s@100g%6ld@107g%s",
(const char*)codiva, &importo, &imponibile, &imposta, (const char*)codiva, &importo, &imponibile, &imposta,
tipolog, (const char*)numfat, (const char*)datafat, tipolog, protiva, (const char*)numfat, (const char*)datafat,
clifo.get()); codcf, clifo.get());
} const char* ragsoc2 = clifo.get();
if (ragsoc2 != NULL && strlen(ragsoc2) > 3)
set_row(rw++, "@107g%s", ragsoc2);
} }
} }
return rfat > 0; return rfat > 0;
} }
bool TLiquidazione_app::print_inc_diff_log(int& rw, int tipoatt) bool TLiquidazione_app::print_inc_diff_log(int& rw, int tipoatt, int tipoiva)
{ {
if (_isregis)
return false;
TString limit; limit << "ANNOLIQ=" << _year; TString limit; limit << "ANNOLIQ=" << _year;
if (_month < 13) limit << " MESELIQ=" << _month; if (_month < 13) limit << " MESELIQ=" << _month;
TString query; TString query;
query << "USE IVADIFF KEY 2 SELECT (TIPOMOV>2)"; query << "USE IVADIFF KEY 2 SELECT (TIPOMOV>2)";
if (tipoatt == 1 || tipoatt == 2) // if (_isregis && tipoiva > 0) query << "&&(TIPOIVA==" << tipoiva << ')';
query << "&&(TIPOATT==" << tipoatt << ")"; if (tipoatt > 0)
query << " &&(TIPOATT==" << tipoatt << ")";
query << "\nBY TIPOIVA DATAREGP"; query << "\nBY TIPOIVA DATAREGP";
query << "\nJOIN MOV INTO NUMREG==NUMREG"; query << "\nJOIN MOV INTO NUMREG==NUMREG";
query << "\nJOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF"; query << "\nJOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF";
@ -1796,10 +1801,10 @@ bool TLiquidazione_app::print_inc_diff_log(int& rw, int tipoatt)
if (ti != header) if (ti != header)
{ {
if (ti < 2) if (ti < 2)
set_row(rw++, TR("Fatture a liquidazione differita o per cassa incassate")); set_row(rw++, TR("Fatture incassate"));
else else
set_row(rw++, TR("Fatture a liquidazione differita o per cassa pagate")); set_row(rw++, TR("Fatture pagate"));
set_row(rw++, "IVA@17gImporto@30gImponibile@49gImposta@58gPagamento@71gFattura@92gRagione sociale"); set_row(rw++, "IVA@17gImporto@30gImponibile@49gImposta@57gC/D@61gPagamento@74gProt.@80gN. Doc.@89gData reg.@100gCodice@107gRagione sociale");
header = ti; header = ti;
} }
@ -1807,14 +1812,22 @@ bool TLiquidazione_app::print_inc_diff_log(int& rw, int tipoatt)
const real importo = rec.get("IMPORTO"); const real importo = rec.get("IMPORTO");
const real imponibile = rec.get(RMI_IMPONIBILE); const real imponibile = rec.get(RMI_IMPONIBILE);
const real imposta = rec.get(RMI_IMPOSTA); const real imposta = rec.get(RMI_IMPOSTA);
const char* tipolog = id.get("TIPODIFF").as_int() == 2 ? TR("C") : TR("D");
const TString16 datapag = rec.get("DATAREGP"); const TString16 datapag = rec.get("DATAREGP");
const int protiva = id.get("MOV.PROTIVA").as_int();
const TString16 numfat = id.get("MOV.NUMDOC").as_string(); const TString16 numfat = id.get("MOV.NUMDOC").as_string();
const TString16 datafat = rec.get("DATAREG"); const TString16 datafat = rec.get("DATAREG");
TParagraph_string clifo(id.get("CLIFO.RAGSOC").as_string(), 40);
set_row(rw++, "%s@9g%r@25g%r@41g%r@58g%s@71g%s@81g%s@92g%s", const long codcf = id.get("CLIFO.CODCF").as_int();
TParagraph_string clifo(id.get("CLIFO.RAGSOC").as_string(), 25);
set_row(rw++, "%s@9g%r@25g%r@41g%r@58g%s@61g%s@74g%5d@80g%s@89g%s@100g%6ld@107g%s",
(const char*)codiva, &importo, &imponibile, &imposta, (const char*)codiva, &importo, &imponibile, &imposta,
(const char*)datapag, (const char*)numfat, (const char*)datafat, tipolog, (const char*)datapag, protiva, (const char*)numfat, (const char*)datafat,
clifo.get()); codcf, clifo.get());
const char* ragsoc2 = clifo.get();
if (ragsoc2 != NULL && strlen(ragsoc2) > 3)
set_row(rw++, "@107g%s", ragsoc2);
} }
} }
@ -1834,14 +1847,16 @@ void TLiquidazione_app::set_pim_head(_DescrItem& d)
set_row(r++,""); set_row(r++,"");
if (d._flags == PIM_HEAD_D) if (d._flags == PIM_HEAD_D)
{ {
set_row(r++, TR("Movimenti a liquidazione differita o per cassa registrati nel periodo"));
set_bookmark(TR("Riepilogo progressivi a liquidazione differita"), _att_bookmark); set_bookmark(TR("Riepilogo progressivi a liquidazione differita"), _att_bookmark);
print_dainc_diff_log(r, d._f2); print_dainc_diff_log(r, d._f2, d._f3);
} }
else else
if (d._flags == PIM_HEAD_DI) if (d._flags == PIM_HEAD_DI)
{ {
set_row(r++, TR("Incassi/pagamenti a liquidazione differita o per cassa"));
set_bookmark(TR("Riepilogo progressivi a liquidazione differita incassati"), _att_bookmark); set_bookmark(TR("Riepilogo progressivi a liquidazione differita incassati"), _att_bookmark);
print_inc_diff_log(r, d._f2); // print_inc_diff_log(r, d._f2, d._f3);
} }
else // PIS_HEAD else // PIS_HEAD
{ {
@ -1945,6 +1960,7 @@ void TLiquidazione_app::set_pim(_DescrItem& d)
(const char*)d._s1, (const char*)d._s2, (const char*)d._s1, (const char*)d._s2,
&(d._r28), &(d._r29), &(d._r32), &(d._r33)); &(d._r28), &(d._r29), &(d._r32), &(d._r33));
} }
} }
void TLiquidazione_app::set_plm_diff(const _DescrItem& d) void TLiquidazione_app::set_plm_diff(const _DescrItem& d)
@ -1953,9 +1969,12 @@ void TLiquidazione_app::set_plm_diff(const _DescrItem& d)
set_row(rw++,""); set_row(rw++,""); set_row(rw++,""); set_row(rw++,"");
if (d._flags == TOT_ROW_D) if (d._flags == TOT_ROW_D)
{
set_row(rw++,FR("Totale@25g%r@41g%r@91g%r@107g%r"), &(d._r26), &(d._r27), &(d._r30), &(d._r31)); set_row(rw++,FR("Totale@25g%r@41g%r@91g%r@107g%r"), &(d._r26), &(d._r27), &(d._r30), &(d._r31));
}
else else
{ {
// Totale incassi/pagamenti ad IVA differita o per cassa
set_row(rw++,FR("Totale@25g%r@41g%r@91g%r@107g%r"), &(d._r28), &(d._r29), &(d._r32), &(d._r33)); set_row(rw++,FR("Totale@25g%r@41g%r@91g%r@107g%r"), &(d._r28), &(d._r29), &(d._r32), &(d._r33));
if (_isannual) if (_isannual)
{ {
@ -2412,7 +2431,7 @@ void TLiquidazione_app::set_grand_2000(_DescrItem& d, int &rw)
if (!_is_visliq) if (!_is_visliq)
iva_vend += rett_debt; iva_vend += rett_debt;
set_row(rw++,FR("@11gIVA esigibile per il periodo@75g%r"), &iva_vend); set_row(rw++,FR("@11gIVA esigibile per il periodo@75g%r"), &iva_vend);
if (diffinc_iva != ZERO) if (!diffinc_iva.is_zero())
set_row(rw++,FR("@11gIVA a liquidazione differita incassata@75g%r"), &diffinc_iva); set_row(rw++,FR("@11gIVA a liquidazione differita incassata@75g%r"), &diffinc_iva);
if (_is_visliq) if (_is_visliq)
set_row(rw++,FR("@11g$[r]Rettifiche IVA a debito$[n]@75g%r"), &rett_debt); // Rettifiche modificabili set_row(rw++,FR("@11g$[r]Rettifiche IVA a debito$[n]@75g%r"), &rett_debt); // Rettifiche modificabili

View File

@ -14,6 +14,7 @@
#include <mailbox.h> #include <mailbox.h>
#include <progind.h> #include <progind.h>
#include <recarray.h> #include <recarray.h>
#include <recset.h>
#include <sheet.h> #include <sheet.h>
#include <utility.h> #include <utility.h>
@ -194,7 +195,8 @@ void TStampa_registri_app::get_dati_ditta()
const TRectype& TStampa_registri_app::look_lia(long ditta) const TRectype& TStampa_registri_app::look_lia(long ditta)
{ {
if (ditta <= 0) ditta = get_firm(); if (ditta <= 0)
ditta = get_firm();
TString16 y; y.format("%05ld%04d", ditta, _annoes); TString16 y; y.format("%05ld%04d", ditta, _annoes);
const TRectype& lia = cache().get("%LIA", y); const TRectype& lia = cache().get("%LIA", y);
@ -313,7 +315,7 @@ bool TStampa_registri_app::compila_reg(const TMask& m)
if (_tabreg->read() != NOERR) if (_tabreg->read() != NOERR)
{ {
if (_tipo_stampa != libro_unico) if (_tipo_stampa != libro_unico)
warning_box(FR("Il registro IVA specificato non esiste nella \n Ditta %ld"), _ditta); warning_box(FR("Il registro IVA %s della ditta %ld non esiste"), (const char*)_codreg, _ditta);
return false; return false;
} }
else else
@ -1047,7 +1049,9 @@ int TStampa_registri_app::riga_rmoviva()
if (!ok) if (!ok)
return 0; return 0;
const int mese_liq = _cur->curr(LF_MOV).get_int(MOV_MESELIQ); const TRectype& mov = _cur->curr(LF_MOV);
const int mese_liq = mov.get_int(MOV_MESELIQ);
int nrec = 0; int nrec = 0;
const TRecnotype nr = rmoviva.recno(); const TRecnotype nr = rmoviva.recno();
@ -1061,6 +1065,9 @@ int TStampa_registri_app::riga_rmoviva()
_riga_rmi.add_riga(iva); _riga_rmi.add_riga(iva);
if (!mov.get_bool(MOV_LIQDIFF) && !(mov.get_bool(MOV_IVAXCASSA) && mov.get_int(MOV_TIPOMOV)>0))
_riga_prospettoXcassa.add_riga(impo, impos, ZERO, ZERO, codiva, 0, 0, false, 0);
//stampa di prova, cumula progressivi dai movimenti, anziche' dalle tabelle (solo bollato) //stampa di prova, cumula progressivi dai movimenti, anziche' dalle tabelle (solo bollato)
if (_tipo_stampa == prova) if (_tipo_stampa == prova)
{ {
@ -1269,11 +1276,8 @@ bool TStampa_registri_app::controlla_mov()
tiporeg TStampa_registri_app::cerca_reg(const TString& c) tiporeg TStampa_registri_app::cerca_reg(const TString& c)
{ {
tiporeg t; tiporeg t = vendita;
TString16 cod = ""; TString8 cod; cod << _annoes << c;
t = vendita;
cod << _annoes << c;
_tabreg->zero(); _tabreg->zero();
_tabreg->put("CODTAB", cod); _tabreg->put("CODTAB", cod);
if (_tabreg->read() == NOERR) if (_tabreg->read() == NOERR)
@ -1289,14 +1293,14 @@ int TStampa_registri_app::stampa_prospetto(int rr, bool print_prec)
{ {
reset_print(); reset_print();
riga.fill('-'); riga.fill('-');
set_row(rr, "%s", (const char*)riga); set_row(rr++, riga);
rr++;
set_row(rr, TR("Legenda Tipo Operazione: 1=operazione intracomunitaria 2=AF art.34 comma 3")); riga = TR("Legenda Tipo Operazione: 1=intra; 2=AF art.34 comma 3");
if (_auto_intraf) if (_auto_intraf)
set_row(rr, FR("@78g3=operazione intracomunitaria e AF art.34 comma 3 4=Fattura a liquidazione differita")); riga << TR("; 3=intra e AF art.34 comma 3");
else riga << TR("; 4=liquidazione differita");
set_row(rr, FR("@78g4=Fattura a liquidazione differita")); riga << TR("; 5=IVA per cassa");
rr++; set_row(rr++, riga);
_stampa = _st_tot_fin; _stampa = _st_tot_fin;
if (_stampa) if (_stampa)
@ -1305,7 +1309,7 @@ int TStampa_registri_app::stampa_prospetto(int rr, bool print_prec)
rr+=2; rr+=2;
for (int j = 0; j < _doc_array.items(); j++) for (int j = 0; j < _doc_array.items(); j++)
{ {
TTipodoc& doc = (TTipodoc&)_doc_array[j]; const TTipodoc& doc = (TTipodoc&)_doc_array[j];
set_row(rr, "%2s", (const char*) doc._tipodoc); set_row(rr, "%2s", (const char*) doc._tipodoc);
set_row(rr, "@3g%s", (const char*) doc._descrdoc); set_row(rr, "@3g%s", (const char*) doc._descrdoc);
set_row(rr, "@54g%r", &doc._totdoc); set_row(rr, "@54g%r", &doc._totdoc);
@ -1514,9 +1518,9 @@ int TStampa_registri_app::stampa_acquisti(int row)
void TStampa_registri_app::set_page_tot_reg() void TStampa_registri_app::set_page_tot_reg()
{ {
int rr=1; int rr = 1;
rr = stampa_prospetto(rr, false); rr = stampa_prospetto(rr, false);
//*****deve azzerare i totali progressivi dei riporti e segnalare all'header di non stampare //*****deve azzerare i totali progressivi dei riporti e segnalare all'header di non stampare
//la riga di riporto //la riga di riporto
_totali_stampati = true; //siamo in stampa totali, quindi... _totali_stampati = true; //siamo in stampa totali, quindi...
@ -1541,7 +1545,7 @@ void TStampa_registri_app::set_page_tot_reg()
{ {
TRiga& riga = (TRiga&)array[k]; TRiga& riga = (TRiga&)array[k];
if (_tipo_stampa == prova && riga._imponibile == ZERO && riga._imposta == ZERO && riga._implordo == ZERO) if (_tipo_stampa == prova && riga._imponibile.is_zero() && riga._imposta.is_zero() && riga._implordo.is_zero())
continue; continue;
set_row(rr, "%-4s", (const char*)riga._codiva); set_row(rr, "%-4s", (const char*)riga._codiva);
@ -1606,6 +1610,7 @@ void TStampa_registri_app::set_page_tot_reg()
} }
} // for } // for
} }
if (_stampa_plafonds) if (_stampa_plafonds)
stampa_plafonds(rr); stampa_plafonds(rr);
} }
@ -1620,8 +1625,8 @@ HIDDEN void print_real(TPrintrow& row, const real& num, int pos)
bool TStampa_registri_app::stampa_plafonds(int r, bool test_mode) bool TStampa_registri_app::stampa_plafonds(int r, bool test_mode)
{ {
TTable pla ("%PLA"); TTable pla("%PLA");
TTable ppa ("PPA"); TTable ppa("PPA");
TString80 chiave; TString80 chiave;
int num; int num;
real r1, r2, r3, r8, r8b, r9, disponibile; real r1, r2, r3, r8, r8b, r9, disponibile;
@ -1895,6 +1900,190 @@ real TStampa_registri_app::stampa_valori_plafonds(const real& r1, const int mese
return r; return r;
} }
bool TStampa_registri_app::some_IVAxCassa() const
{
if (_tipo_reg != vendita && _tipo_reg != acquisto)
return false;
int da_mese = _data_da.month();
int a_mese = _data_a.month();
if (_frequiva == 'T')
{
const int dr = da_mese % 3;
if (dr != 1)
da_mese -= (dr == 0 ? 2 : 1);
const int ar = a_mese % 3;
if (ar != 0)
a_mese += (ar == 1 ? 2 : 1);
}
TString query;
query = "USE IVADIFF KEY 2 SELECT (TIPOMOV>2)";
query << "\nFROM ANNOLIQ=" << _data_da.year() << " MESELIQ=" << da_mese;
query << "\nTO ANNOLIQ=" << _data_a.year() << " MESELIQ=" << a_mese;
TISAM_recordset id(query);
return id.items() > 0;
}
bool TStampa_registri_app::print_IVAxCassa(int month)
{
if (_tipo_reg != vendita && _tipo_reg != acquisto)
return false;
TPrinter& pr = printer();
TPrintrow riga;
const TString linea(_stampa_width, '-');
TString query;
query = "USE IVADIFF SELECT (BETWEEN(DATAREGP,#DAL,#AL))&&(MOV.REG=#REG)&&(TIPOMOV>2)&&(STR(IMPONIBILE>0))&&(STR(MESELIQ==#MON))";
query << "\nBY DATAREGP DATAREG";
query << "\nJOIN MOV INTO NUMREG==NUMREG";
query << "\nJOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF";
TISAM_recordset id(query);
id.set_var("#DAL", _data_da);
id.set_var("#AL", _data_a);
id.set_var("#REG", _codreg);
id.set_var("#MON", long(month));
// Sporco trucco per evitare intestazioni inutili
const bool il = _intesta_liq;
_intesta_liq = true;
if (id.items() > 0)
{
riga.reset();
riga.put(linea, 0);
pr.print(riga);
riga.reset();
if (_tipo_reg == vendita)
riga.put(TR("DETTAGLIO INCASSI FATTURE CON IVA DIFFERITA O PER CASSA"), 40);
else
riga.put(TR("DETTAGLIO PAGAMENTI FATTURE CON IVA DIFFERITA O PER CASSA"), 40);
pr.print(riga);
riga.reset(); pr.print(riga);
riga.put(linea, 0); pr.print(riga);
riga.reset();
riga.put(TR("Documento"), 19);
riga.put(TR("T Tipo"), 66);
riga.put(TR("Forz"), 123);
riga.put(TR("Num"), 128);
pr.print(riga);
riga.reset();
riga.put(TR("Data pag. prot."), 0);
riga.put(TR("Data"), 17);
riga.put(TR("Numero Codice Ragione Sociale"), 24);
riga.put(TR("O Doc."), 66);
riga.put(TR("Importo"), 78);
riga.put(TR("Imponibile"), 90);
riga.put(TR("IVA"), 102);
riga.put(TR("Imposta"), 115);
riga.put(TR("Scad"), 123);
riga.put(TR("Reg"), 128);
pr.print(riga);
riga.put(linea, 0); pr.print(riga);
const TRectype& rec = id.cursor()->curr();
for (bool ok = id.move_first(); ok; ok = id.move_next())
{
const TString4 codiva = rec.get("CODIVA");
const real importo = rec.get("IMPORTO");
const real imponibile = rec.get("IMPONIBILE");
const real imposta = rec.get("IMPOSTA");
TParagraph_string clifo(id.get("CLIFO.RAGSOC").as_string(), 27);
riga.reset();
riga.put(rec.get_date("DATAREGP").string(brief, '/'), 0);
riga.put(format("%6ld", id.get("MOV.PROTIVA").as_int()), 8);
riga.put(rec.get_date(MOV_DATAREG).string(brief, '/'), 15);
riga.put(id.get("MOV.NUMDOC").as_string(), 24);
riga.put(format("%6ld", id.get("CLIFO.CODCF").as_int()), 31);
riga.put(clifo.get(), 38);
riga.put(rec.get_int("TIPODIFF") == 2 ? "5" : "4", 66); // 4 = Differita; 5 = x Cassa
riga.put(id.get("MOV.TIPODOC").as_string(), 68);
print_real(riga, importo, 70);
print_real(riga, imponibile, 85);
riga.put(rec.get("CODIVA"), 102);
print_real(riga, imposta, 107);
riga.put(rec.get_int("NUMPRO") >= 999 ? "X" : "", 123);
riga.put(format("%6ld", rec.get_long(MOV_NUMREG)), 125);
pr.print(riga);
_riga_prospettoXcassa.add_riga(ZERO, ZERO, imponibile, imposta, codiva, 0, 0, false, 0);
}
}
if (_riga_prospettoXcassa.items() <= 0)
return id.items() > 0; // Ho stampato qualcosa?
riga.reset();
if (pr.rows_left() < _riga_prospettoXcassa.items()+5)
{
pr.formfeed();
riga.put(linea, 0);
}
pr.print(riga);
riga.reset();
riga.put(TR("PROSPETTO IMPORTI CON IVA ORDINARIA ED IVA DIFFERITA O PER CASSA"), 40);
pr.print(riga);
riga.reset();
pr.print(riga);
riga.reset();
riga.put(TR("IVA Descrizione"), 0);
riga.put(TR("Imponibile"), 34);
riga.put(TR("Imposta"), 53);
riga.put(TR("Imponibile diff."), 84);
riga.put(TR("Imposta diff."), 109);
pr.print(riga);
real tot_imponib, tot_imposta, tot_imponibp, tot_impostap;
_riga_prospettoXcassa.sort(compare_righeiva);
for (int s = 0; s < _riga_prospettoXcassa.items(); s++)
{
const TRigaiva& ri = _riga_prospettoXcassa.riga(s);
riga.reset();
riga.put(ri._codiva, 0);
riga.put(descr_iva(ri._codiva), 5);
print_real(riga, ri._imponibile, 29);
print_real(riga, ri._imposta, 45);
print_real(riga, ri._imponibilep,85);
print_real(riga, ri._impostap, 107);
pr.print(riga);
tot_imponib += ri._imponibile;
tot_imposta += ri._imposta;
tot_imponibp+= ri._imponibilep;
tot_impostap+= ri._impostap;
}
riga.reset();
pr.print(riga);
riga.put(TR("TOTALE"), 0);
print_real(riga, tot_imponib, 29);
print_real(riga, tot_imposta, 45);
print_real(riga, tot_imponibp, 85);
print_real(riga, tot_impostap,107);
pr.print(riga);
_riga_prospettoXcassa.destroy();
_intesta_liq = il; // Ripristina flag intestazioni
return true;
}
//********* PRINT!!! *********// //********* PRINT!!! *********//
bool TStampa_registri_app::preprocess_print(int file, int counter) bool TStampa_registri_app::preprocess_print(int file, int counter)
@ -1930,7 +2119,7 @@ bool TStampa_registri_app::preprocess_page(int file, int counter)
TString80 comune, prov, comcf, capcf, civcf, stacf; TString80 comune, prov, comcf, capcf, civcf, stacf;
TString80 viacf; TString80 viacf;
TString ragsoc, codfis, piva; TString ragsoc, codfis, piva;
TString tipo_op = ""; TString4 tipo_op = "";
TLocalisamfile& mov = _cur->file(LF_MOV); TLocalisamfile& mov = _cur->file(LF_MOV);
TLocalisamfile& caus = _cur->file(LF_CAUSALI); TLocalisamfile& caus = _cur->file(LF_CAUSALI);
@ -2001,10 +2190,12 @@ bool TStampa_registri_app::preprocess_page(int file, int counter)
long codcf = mov.get_long(MOV_CODCF); long codcf = mov.get_long(MOV_CODCF);
long numgio = mov.get_long(MOV_NUMGIO); long numgio = mov.get_long(MOV_NUMGIO);
bool stampato = mov.get_bool(MOV_REGST); bool stampato = mov.get_bool(MOV_REGST);
TString16 codval = mov.get(MOV_CODVALI); TString4 codval = mov.get(MOV_CODVALI);
real corrval = mov.get_real(MOV_CORRVALUTA); real corrval = mov.get_real(MOV_CORRVALUTA);
bool autof = caus.get_bool(CAU_AUTOFATT); const bool autof = caus.get_bool(CAU_AUTOFATT);
bool liqdiff = mov.get_bool(MOV_LIQDIFF); const bool liqdiff = mov.get_bool(MOV_LIQDIFF);
const bool IVAxcassa= !liqdiff && mov.get_bool(MOV_IVAXCASSA);
TString80 descrcau = caus.get(CAU_DESCR); TString80 descrcau = caus.get(CAU_DESCR);
real totdoc = mov.get_real(MOV_TOTDOC); real totdoc = mov.get_real(MOV_TOTDOC);
@ -2116,12 +2307,18 @@ bool TStampa_registri_app::preprocess_page(int file, int counter)
{ {
if (protiva != _uprotivap + 1) if (protiva != _uprotivap + 1)
{ {
set_row(_r+1, FR("@2g*** NUM.PROT.FUORI SEQUENZA")); set_row(_r+1, FR(" @b*** NUM.PROT.FUORI SEQUENZA@r"));
riga = _r+2; riga = _r+2;
} }
_uprotivap = uprotiva ? uprotiva : protiva; _uprotivap = uprotiva ? uprotiva : protiva;
} }
} }
if (mov.get_bool(MOV_IVAXCASSA) && mov.get_int(MOV_TIPOMOV) <= 0)
{
set_row(_r+1, FR(" @b*** IVA PER CASSA SENZA SALDACONTO@r"));
riga = _r+2;
}
} }
const char* r; const char* r;
@ -2222,7 +2419,7 @@ bool TStampa_registri_app::preprocess_page(int file, int counter)
_riga_rmi.destroy(); _riga_rmi.destroy();
} }
if ( intra && autof) if (intra && autof)
{ {
_auto_intraf = true; _auto_intraf = true;
tipo_op = "3"; tipo_op = "3";
@ -2233,8 +2430,10 @@ bool TStampa_registri_app::preprocess_page(int file, int counter)
tipo_op = "2"; tipo_op = "2";
else if (liqdiff) else if (liqdiff)
tipo_op = "4"; tipo_op = "4";
else if (IVAxcassa)
tipo_op = "5";
set_row(_r, "@66g%s", (const char*) tipo_op); set_row(_r, "@66g%s", (const char*)tipo_op);
if (_tipo_stampa == prova) //stampa di prova if (_tipo_stampa == prova) //stampa di prova
{ {
@ -2273,14 +2472,15 @@ bool TStampa_registri_app::preprocess_page(int file, int counter)
} }
} }
if (riga <= rr) riga = ++rr; if (riga <= rr)
riga = ++rr;
if (corrval != ZERO) if (!corrval.is_zero())
{ {
TCurrency curr(corrval, codval); TCurrency curr(corrval, codval);
TString80 vall = curr.string(true); TString80 vall = curr.string(true);
vall.right_just(19); vall.right_just(19);
set_row(riga, FR("@24gCodice valuta %-3s Corrispettivo in valuta %s"), (const char*) codval, (const char*) vall); set_row(riga, FR("@24gCodice valuta %-3s Corrispettivo in valuta %s"), (const char*)codval, (const char*)vall);
} }
} }
return true; return true;
@ -2295,15 +2495,15 @@ print_action TStampa_registri_app::postprocess_page (int file, int counter)
{ {
reset_print(); reset_print();
TRecnotype pos = _cur->pos(); const TRecnotype pos = _cur->pos();
long items = _cur->items(); const TRecnotype items = _cur->items();
const bool last_mov = pos == items-1; const bool last_mov = pos == items-1;
if (_stampa_plafonds && !last_mov) if (_stampa_plafonds && !last_mov)
{ {
// Nel caso sia richiesta la stampa prospetto mensile plafond e vi siano mesi // Nel caso sia richiesta la stampa prospetto mensile plafond e vi siano mesi
// senza movimenti, è necessario forzarne la stampa // senza movimenti, è necessario forzarne la stampa
TDate save_date(_datareg); const TDate save_date(_datareg);
// Caso speciale, in cui non vi siano movimenti sull'ultimo mese indicato in stampa // Caso speciale, in cui non vi siano movimenti sull'ultimo mese indicato in stampa
//const bool print_over = last_mov && _dataregp == _dataregs && _dataregp.month() < _data_a.month(); //const bool print_over = last_mov && _dataregp == _dataregs && _dataregp.month() < _data_a.month();
@ -2322,7 +2522,14 @@ print_action TStampa_registri_app::postprocess_page (int file, int counter)
_datareg = save_date; _datareg = save_date;
} }
if (last_mov)
{
printer().formfeed();
print_IVAxCassa(_datareg.month());
}
if (_liquidazione) if (_liquidazione)
{
if (!_st_liq[_datareg.month()] && stampo_liquidazione(_datareg.month())) if (!_st_liq[_datareg.month()] && stampo_liquidazione(_datareg.month()))
{ {
_st_liq[_datareg.month()] = true; _st_liq[_datareg.month()] = true;
@ -2340,6 +2547,7 @@ print_action TStampa_registri_app::postprocess_page (int file, int counter)
} }
} }
} }
}
if (last_mov) if (last_mov)
{ {
@ -2431,10 +2639,6 @@ void TStampa_registri_app::preprocess_header()
char tipo = ' '; char tipo = ' ';
char type = ' '; char type = ' ';
int mese, anno; int mese, anno;
TString riga(_stampa_width);
TString data(30);
riga.fill('-');
if (_tipo_stampa != libro_unico) if (_tipo_stampa != libro_unico)
{ {
@ -2447,7 +2651,9 @@ void TStampa_registri_app::preprocess_header()
anno = _annoes; anno = _annoes;
} }
data.format("%s %s %d", "mese di", itom(mese), anno); TString data;
if (mese > 0)
data.format(FR("mese di %s %d"), itom(mese), anno);
reset_header(); reset_header();
@ -2458,8 +2664,7 @@ void TStampa_registri_app::preprocess_header()
else else
r+=2; r+=2;
} }
else // se stampa di prova o su libro unico l'intestazione della ditta else // se stampa di prova o su libro unico l'intestazione della ditta va sempre stampata
// va sempre stampata
r = stampa_intestazione(); r = stampa_intestazione();
if (_stampa_num_pag) // Stampa numero di pagina in alto a destra if (_stampa_num_pag) // Stampa numero di pagina in alto a destra
@ -2483,8 +2688,7 @@ void TStampa_registri_app::preprocess_header()
if (_tipo_stampa == libro_unico) if (_tipo_stampa == libro_unico)
set_header(r, FR("@94gProgr.Studio %ld@114gProgr.Utente %ld"), _u_stampata, _pagine_stampate); set_header(r, FR("@94gProgr.Studio %ld@114gProgr.Utente %ld"), _u_stampata, _pagine_stampate);
// cosi' sono sicura che l'aggiornamento viene fatto ad ogni salto pagina // cosi' sono sicura che l'aggiornamento viene fatto ad ogni salto pagina (cioe' a rottura di mese)
// (cioe' a rottura di mese)
if (_tipo_stampa != prova) if (_tipo_stampa != prova)
aggiorna_reg(_ok_vidi); aggiorna_reg(_ok_vidi);
@ -2527,6 +2731,7 @@ void TStampa_registri_app::preprocess_header()
//l'intestazione (piuttosto dettagliata) e' gestita //l'intestazione (piuttosto dettagliata) e' gestita
//dal prg di liquidazione perche' molte info che devono //dal prg di liquidazione perche' molte info che devono
//comparire in questa intestazione la stampa reg. non le conosce. //comparire in questa intestazione la stampa reg. non le conosce.
const TString riga(_stampa_width, '-');
//non sto stampando la liquidazione //non sto stampando la liquidazione
if (!_intesta_liq) if (!_intesta_liq)
@ -2536,13 +2741,13 @@ void TStampa_registri_app::preprocess_header()
if (_tipo_reg == vendita) //registro vendite if (_tipo_reg == vendita) //registro vendite
{ {
cor = 'R'; cor = 'R'; // Ricavi
nd1 = ' '; nd1 = ' ';
nd2 = ' '; nd2 = ' ';
} }
if (_tipo_reg == acquisto) if (_tipo_reg == acquisto)
{ {
cor = 'C'; cor = 'C'; // Cessioni
nd1 = 'N'; nd1 = 'N';
nd2 = 'D'; nd2 = 'D';
} }
@ -2936,7 +3141,7 @@ void TStampa_registri_app::aggiorna_reg(const bool aggiorna_vidi)
IndBil.zero(); IndBil.zero();
TRectype nuovo (IndBil.curr()); TRectype nuovo(IndBil.curr());
IndBil.put("ANNO", _annoes); IndBil.put("ANNO", _annoes);
IndBil.put("CODLIB", _codlib); IndBil.put("CODLIB", _codlib);
@ -3083,6 +3288,17 @@ void TStampa_registri_app::no_movimenti()
send_message(calc ? 'R' : 'C', app, calc ? a : mese); send_message(calc ? 'R' : 'C', app, calc ? a : mese);
} }
if (some_IVAxCassa())
{
if (! printer().isopen())
printer().open();
int mese = a;
if (_frequiva == 'T')
mese += 2 - ((mese-1) % 3);
print_IVAxCassa(mese);
}
if (_tipo_reg == riepilogativo || _liquidazione || _stampa_plafonds) if (_tipo_reg == riepilogativo || _liquidazione || _stampa_plafonds)
{ {
for (int m = da; m <= a; m++) for (int m = da; m <= a; m++)
@ -3107,7 +3323,7 @@ void TStampa_registri_app::no_movimenti()
} }
} }
// In prova va stampato per ogni mese (sia Mensile che Trimestrale; // In prova va stampato per ogni mese (sia Mensile che Trimestrale);
// in bollato, solo per i mesi che ancora mancano) // in bollato, solo per i mesi che ancora mancano)
const bool print_plafond_bollato = _tipo_stampa != prova && (m == 1 || m > _u_data.month()); const bool print_plafond_bollato = _tipo_stampa != prova && (m == 1 || m > _u_data.month());
if (_stampa_plafonds && (_tipo_stampa == prova || print_plafond_bollato)) if (_stampa_plafonds && (_tipo_stampa == prova || print_plafond_bollato))
@ -3122,8 +3338,7 @@ void TStampa_registri_app::no_movimenti()
//la funzione stampo_liquidazione non stampera' la liquidazione sul //la funzione stampo_liquidazione non stampera' la liquidazione sul
//registro il cui mese di stampa ultima liq. e' > del mese in esame //registro il cui mese di stampa ultima liq. e' > del mese in esame
//caso a parte il mese 12 (che posso ristampare 2 volte) //caso a parte il mese 12 (che posso ristampare 2 volte)
if (_liquidazione) if (_liquidazione && stampo_liquidazione(m))
if (stampo_liquidazione(m))
{ {
if (_tipo_reg == riepilogativo) if (_tipo_reg == riepilogativo)
{ {
@ -3133,6 +3348,7 @@ void TStampa_registri_app::no_movimenti()
if (! printer().isopen()) if (! printer().isopen())
printer().open(); printer().open();
TFilename f; TFilename f;
f.temp("rgp"); f.temp("rgp");
_datareg = TDate(1, m, _annoes); // serve alla preprocess_header _datareg = TDate(1, m, _annoes); // serve alla preprocess_header
@ -3150,7 +3366,7 @@ void TStampa_registri_app::no_movimenti()
else else
send_message('l', f, m); send_message('l', f, m);
} }
if (fexist(f)) if (f.exist())
{ {
_intesta_liq = true; _intesta_liq = true;
merge_export_file(f,false,true); merge_export_file(f,false,true);
@ -3315,7 +3531,8 @@ bool TStampa_registri_app::set_print(int n)
const TDate d(31,12,_annoes); const TDate d(31,12,_annoes);
if (_data_a == d) if (_data_a == d)
_tipo_riepilogativo = m.get(TIPO_RIEPILOGATIVO)[0]; _tipo_riepilogativo = m.get(TIPO_RIEPILOGATIVO)[0];
else _tipo_riepilogativo = ' '; else
_tipo_riepilogativo = ' ';
printer().setdate(_data_stampa); printer().setdate(_data_stampa);
} }
else //stampe definitive else //stampe definitive
@ -3712,7 +3929,7 @@ void TStampa_registri_app::stampa_prospetto_riepilogo(tiporeg tipo, const TStrin
row.put(TR("Registro IVA:"), 0); row.put(TR("Registro IVA:"), 0);
row.put(codreg, 14); row.put(codreg, 14);
row.put(format("%-.40s",(const char*)_tabreg->get("S0")), 18); row.put(format("%-.40s",(const char*)_tabreg->get("S0")), 18);
row.put(TR("Attivita\'"), 60); row.put(TR("Attività"), 60);
if (_annoes > 2007) if (_annoes > 2007)
{ {

View File

@ -38,7 +38,7 @@ class TStampa_registri_app : public TPrintapp
// TLocalisamfile *_clifo, *_occas, *_com, *_anag, *_unloc, *_attiv, *_indlib; // TLocalisamfile *_clifo, *_occas, *_com, *_anag, *_unloc, *_attiv, *_indlib;
// TTable *_tablia, *_tabpim, *_tabprm, *_tabprp, *_table; // TTable *_tablia, *_tabpim, *_tabprm, *_tabprp, *_table;
TTable *_tabreg; TTable *_tabreg;
TRigaiva_array _iva_array, _riga_rmi; TRigaiva_array _iva_array, _riga_rmi, _riga_prospettoXcassa;
TTipodoc_array _doc_array; TTipodoc_array _doc_array;
TRiga_array _tot_iva_array, _tot_prec_iva_array; TRiga_array _tot_iva_array, _tot_prec_iva_array;
TBit_array _selected; TBit_array _selected;
@ -146,6 +146,10 @@ public:
void scrivi_reg(const TDate&); void scrivi_reg(const TDate&);
int stampa_acquisti(int); int stampa_acquisti(int);
real stampa_valori_plafonds(const real&, const int, TTable&, const char*); real stampa_valori_plafonds(const real&, const int, TTable&, const char*);
bool some_IVAxCassa() const; // C'e' IVA per cassa o differita da stampare?
bool print_IVAxCassa(int month);
void build_nomiditte(TProgind* pnd = NULL); void build_nomiditte(TProgind* pnd = NULL);
void set_year(int y) { _annoes = y; } void set_year(int y) { _annoes = y; }
void clear_stliq(); void clear_stliq();

View File

@ -1,9 +1,12 @@
#include <recarray.h>
#include <relation.h>
#include "cg4501.h" #include "cg4501.h"
#include "cg4500a.h" #include "cg4500a.h"
#include "cglib01.h" #include "cglib01.h"
#include <recarray.h>
#include <relation.h>
#include <tabutil.h>
class TAp_eser : public TSkeleton_application class TAp_eser : public TSkeleton_application
{ {
int _anno, _newanno; int _anno, _newanno;
@ -26,7 +29,7 @@ public:
bool apertura_es(); bool apertura_es();
}; };
TAp_eser& app() { return (TAp_eser&) main_app(); } static TAp_eser& app() { return (TAp_eser&) main_app(); }
bool TAp_eser::mask_newanno (TMask_field& f, KEY k) bool TAp_eser::mask_newanno (TMask_field& f, KEY k)
{ {
@ -271,6 +274,6 @@ int cg4500 (int argc, char* argv[])
error_box("Uso: cg4 -4 [C,I]"); error_box("Uso: cg4 -4 [C,I]");
break; break;
} }
return TRUE; return 0;
} }

View File

@ -1,17 +1,19 @@
#include <recarray.h>
#include <relation.h>
#include "cg4501.h" #include "cg4501.h"
#include "cg4500b.h" #include "cg4500b.h"
#include "nditte.h"
#include <recarray.h>
#include <relation.h>
#include <tabutil.h>
#include <nditte.h>
bool TAp_iva::mask_annoiva (TMask_field& f, KEY k) bool TAp_iva::mask_annoiva (TMask_field& f, KEY k)
{ {
if ( (k == K_ENTER) && f.to_check(k) ) if ( (k == K_ENTER) && f.to_check(k) )
{ {
int annoiva = f.mask().get_int(F_ANNOIVA); const int annoiva = f.mask().get_int(F_ANNOIVA);
TConfig conf(CONFIG_DITTA); const int annoivap = ini_get_int(CONFIG_DITTA, "cg", "AnLiIv");
int annoivap = conf.get_int("AnLiIv");
if (annoivap > 0 && annoiva != annoivap + 1) if (annoivap > 0 && annoiva != annoivap + 1)
return f.error_box(FR("Il nuovo anno esercizio IVA deve essere %d"), (annoivap+1)); return f.error_box(FR("Il nuovo anno esercizio IVA deve essere %d"), (annoivap+1));
} }
@ -26,39 +28,11 @@ bool TAp_iva::create()
return TSkeleton_application::create(); return TSkeleton_application::create();
} }
bool TAp_iva::apertura_iva() void TAp_iva::libro_unico()
{ {
TString16 annoiva; TString4 annoiva;
TString16 codlia;
TDate data;
int annop = _annop;
annoiva.format("%04d", _annoiva); annoiva.format("%04d", _annoiva);
//viene aggiornata la tabella LIA (liquidazione iva annuale)
TTable tablia ("%LIA");
codlia.format("%05ld%04d", get_firm(), _annoiva);
tablia.put ("CODTAB", codlia);
if (tablia.read() == NOERR)
tablia.remove();
tablia.zero();
codlia.format("%05ld%04d", get_firm(), annop);
tablia.put ("CODTAB", codlia);
if (tablia.read() != NOERR)
return error_box(TR("Non esiste il record relativo all'anno iva precedente sulla tabella liquidazione annuale iva"));
else
{
codlia.format("%05ld%04d", get_firm(), _annoiva);
tablia.put("CODTAB", codlia);
tablia.put("S7", _frequenza);
tablia.put("B2", _is_minagr);
tablia.zero("R0");
tablia.write();
}
//viene aggiornata la tabella del libro unico. //viene aggiornata la tabella del libro unico.
TRelation lbu("%LBU"); TRelation lbu("%LBU");
TRectype & tablbu = lbu.curr(); TRectype & tablbu = lbu.curr();
@ -80,7 +54,6 @@ bool TAp_iva::apertura_iva()
items = cur.items(); items = cur.items();
cur.freeze(); cur.freeze();
for (cur = 0L; cur.pos() < items; ++cur) for (cur = 0L; cur.pos() < items; ++cur)
{ {
TString16 cod(tablbu.get("CODTAB")); TString16 cod(tablbu.get("CODTAB"));
@ -90,6 +63,46 @@ bool TAp_iva::apertura_iva()
tablbu.zero("I0"); tablbu.zero("I0");
lbu.write(); lbu.write();
} }
}
bool TAp_iva::apertura_iva()
{
TString16 codlia;
TString4 annoiva; annoiva.format("%04d", _annoiva);
//viene aggiornata la tabella LIA (liquidazione iva annuale)
TTable tablia ("%LIA");
codlia.format("%05ld%04d", get_firm(), _annoiva);
tablia.put ("CODTAB", codlia);
if (tablia.read() == NOERR)
tablia.remove();
tablia.zero();
codlia.format("%05ld%04d", get_firm(), _annop);
tablia.put ("CODTAB", codlia);
if (tablia.read() != NOERR)
return error_box(TR("Non esiste il record relativo all'anno IVA precedente sulla tabella liquidazione annuale IVA"));
else
{
codlia.format("%05ld%04d", get_firm(), _annoiva);
tablia.put("CODTAB", codlia);
tablia.put("S7", _frequenza);
tablia.put("B2", _is_minagr);
tablia.zero("R0");
if (tablia.get_bool("B5")) // IVA per casssa
{
tablia.put("D0", TDate( 1, 1, _annoiva));
tablia.put("D1", TDate(31,12, _annoiva));
}
tablia.write();
}
// libro_unico(); // Obsoleto?
//viene aggiornata la tabella dei registri. //viene aggiornata la tabella dei registri.
TRelation reg("REG"); TRelation reg("REG");
@ -99,7 +112,7 @@ bool TAp_iva::apertura_iva()
TCursor cur_reg(&reg, "", 1, &tabreg, &tabreg); TCursor cur_reg(&reg, "", 1, &tabreg, &tabreg);
items = cur_reg.items(); TRecnotype items = cur_reg.items();
cur_reg.freeze(); cur_reg.freeze();
for (cur_reg = 0L; cur_reg.pos() < items; ++cur_reg) for (cur_reg = 0L; cur_reg.pos() < items; ++cur_reg)
{ {
@ -116,12 +129,12 @@ bool TAp_iva::apertura_iva()
cur_reg.freeze(); cur_reg.freeze();
for (cur_reg = 0L; cur_reg.pos() < items; ++cur_reg) for (cur_reg = 0L; cur_reg.pos() < items; ++cur_reg)
{ {
int tiporeg = tabreg.get_int("I0"); const int tiporeg = tabreg.get_int("I0");
if ( (tiporeg == 1)||(tiporeg == 2)||(tiporeg==3)||(tiporeg==9)) if ( (tiporeg == 1)||(tiporeg == 2)||(tiporeg==3)||(tiporeg==9))
{ {
TString16 cod = tabreg.get("CODTAB"); TString16 cod = tabreg.get("CODTAB");
cod.overwrite(annoiva); cod.overwrite(annoiva);
tabreg.put("CODTAB", cod); tabreg.put("CODTAB", cod);
tabreg.zero("I1"); tabreg.zero("I1");
tabreg.zero("I2"); tabreg.zero("I2");
@ -129,9 +142,9 @@ bool TAp_iva::apertura_iva()
tabreg.zero("I5"); tabreg.zero("I5");
tabreg.zero("I6"); tabreg.zero("I6");
tabreg.zero("S1"); tabreg.zero("S1");
tabreg.put("D0", data); tabreg.zero("D0");
tabreg.put("D2", data); tabreg.zero("D2");
tabreg.put("D3", data); tabreg.zero("D3");
tabreg.zero("R1"); tabreg.zero("R1");
tabreg.zero("R2"); tabreg.zero("R2");
@ -153,7 +166,8 @@ bool TAp_iva::apertura_iva()
nditte.rewrite(); nditte.rewrite();
} }
message_box(TR("Apertura nuovo esercizio IVA completata")); message_box(TR("Apertura nuovo esercizio IVA completata"));
return TRUE;
return true;
} }
void TAp_iva::main_loop() void TAp_iva::main_loop()

View File

@ -6,13 +6,8 @@
#include <mask.h> #include <mask.h>
#endif #endif
#ifndef __TABUTIL_H
#include <tabutil.h>
#endif
class TAp_iva : public TSkeleton_application class TAp_iva : public TSkeleton_application
{ {
// TTable* _reg, * _lia, * _lbu;
int _annoiva; int _annoiva;
int _annop; int _annop;
long _ditta; long _ditta;
@ -21,15 +16,12 @@ class TAp_iva : public TSkeleton_application
protected: protected:
static bool mask_annoiva(TMask_field&, KEY); static bool mask_annoiva(TMask_field&, KEY);
void libro_unico();
public: public:
virtual bool create(); virtual bool create();
virtual bool destroy() { return TRUE;}
virtual void main_loop(); virtual void main_loop();
bool setta(); bool setta();
bool apertura_iva(); bool apertura_iva();
TAp_iva() {}
virtual ~TAp_iva() {}
}; };

View File

@ -2,15 +2,11 @@
// modifica parametri contabilita' relativi alla liquidazione // modifica parametri contabilita' relativi alla liquidazione
#include <config.h> #include <config.h>
#include <currency.h>
#include <defmask.h> #include <defmask.h>
#include <msksheet.h> #include <msksheet.h>
#include <prefix.h>
#include <relapp.h> #include <relapp.h>
#include <relation.h>
#include <tabutil.h> #include <tabutil.h>
#include <recarray.h> #include <recarray.h>
#include <utility.h>
#include "cg5.h" #include "cg5.h"
#include "cg5300a.h" #include "cg5300a.h"
@ -23,8 +19,8 @@
class TParaliq_app : public TRelation_application class TParaliq_app : public TRelation_application
{ {
TRelation * _rel; TRelation* _rel;
TMask * _msk; TMask* _msk;
int _yearliq; int _yearliq;
protected: // Applicat protected: // Applicat
@ -174,10 +170,10 @@ bool TParaliq_app::utcred_handler(TMask_field& f, KEY k)
const int anno_liq = m.get_int(F_YEAR); const int anno_liq = m.get_int(F_YEAR);
TString80 cod_mesi; TString80 cod_mesi;
TString des_mesi(128); TString des_mesi(128);
TString16 mese; TString8 mese;
TList_field & mese_res = ((TList_field &) m.field(F_MESE_RES_AL)); TList_field& mese_res = m.lfield(F_MESE_RES_AL);
if (anno_liq >= 2000 && f.get().not_empty()) if (anno_liq >= 2000 && !f.get().not_empty())
{ {
m.field(F_CRED_PREC).set_prompt(TR("Credito compensabile inizio anno ")); m.field(F_CRED_PREC).set_prompt(TR("Credito compensabile inizio anno "));
m.field(F_CRED_RES).set_prompt(TR("Credito in compensaz.utilizzato ")); m.field(F_CRED_RES).set_prompt(TR("Credito in compensaz.utilizzato "));
@ -292,8 +288,7 @@ void TParaliq_app::init_array(TMask& m, bool update)
void TParaliq_app::on_config_change() void TParaliq_app::on_config_change()
{ {
TConfig d(CONFIG_DITTA); _yearliq = ini_get_int(CONFIG_DITTA, "cg", "AnLiIv");
_yearliq = (int)d.get_long("AnLiIv");
} }
bool TParaliq_app::user_create() bool TParaliq_app::user_create()
@ -442,7 +437,8 @@ int TParaliq_app::rewrite(const TMask& m)
} }
TTable& lia = (TTable&)_rel->lfile(); TTable& lia = (TTable&)_rel->lfile();
lia.put("CODTAB", format("%05ld%04d", firm, year)); TString16 ct; ct.format("%05ld%04d", firm, year);
lia.put("CODTAB", ct);
was = lia.read() == NOERR; was = lia.read() == NOERR;
if (!was) lia.zero(); if (!was) lia.zero();
m.autosave(*_rel); m.autosave(*_rel);

View File

@ -176,7 +176,7 @@ END
SPREADSHEET F_SHEET_PLA 78 SPREADSHEET F_SHEET_PLA 78
BEGIN BEGIN
PROMPT 1 16 "Parametri attivita'" PROMPT 1 16 "Parametri attività"
ITEM "Attiv.@5F" ITEM "Attiv.@5F"
ITEM "Tipo@3" ITEM "Tipo@3"
ITEM "Prorata" ITEM "Prorata"

View File

@ -2,6 +2,7 @@
#include "cglib03.h" #include "cglib03.h"
#include <diction.h> #include <diction.h>
#include <dongle.h>
#include <recarray.h> #include <recarray.h>
#include <mov.h> #include <mov.h>
@ -31,6 +32,7 @@ static int codind2tipodet(const TString & codind, real& perc)
} }
return tipodet; 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; real perc;
@ -105,6 +107,28 @@ int analizza_IVA(const real& imptot, const real& ivatot, const real perc_ind,
return flag; return flag;
} }
bool gestione_IVAxCassa(const TDate& data, long firm)
{
bool yes = dongle().active(ICAUT) && dongle().active(SCAUT);
if (yes)
{
const int anno = data.year();
if (firm <= 0)
firm = prefix().get_codditta();
TString16 codtab;
codtab.format("%05ld%04d", firm, anno);
const TRectype& lia = cache().get("%LIA", codtab);
yes = lia.get_bool("B5");
if (yes)
{
TDate dal = lia.get("D0"); if (dal.year() != anno) dal = TDate( 1, 1,anno);
TDate al = lia.get("D1"); if (al.year() != anno) al = TDate(31,12,anno);
yes = data >= dal && data <= al;
}
}
return yes;
}
// Anticamente TIPODET conteneva in tipo di indetraibilita, // Anticamente TIPODET conteneva in tipo di indetraibilita,
// ora invece trattasi di un codice di indetraibilita' // ora invece trattasi di un codice di indetraibilita'
// associato ad un motivo ed una percentuale di indetraibilita' // associato ad un motivo ed una percentuale di indetraibilita'
@ -208,7 +232,7 @@ bool TRigaiva_array::add_riga(const TRectype& iva)
if (ok) if (ok)
{ {
real percind; real percind;
const TString & codind = iva.get(RMI_TIPODET); const TString& codind = iva.get(RMI_TIPODET);
const int tipodet = codind2tipodet(codind, percind); const int tipodet = codind2tipodet(codind, percind);
const TString4 codiva = iva.get(RMI_CODIVA); const TString4 codiva = iva.get(RMI_CODIVA);
const int tipocr = iva.get_int (RMI_TIPOCR); const int tipocr = iva.get_int (RMI_TIPOCR);

View File

@ -157,5 +157,6 @@ int analizza_IVA(const real& imptot, const real& ivatot, const real perc_ind,
real& imp_det, real& iva_det, real& imp_ind, real& iva_ind); real& imp_det, real& iva_det, real& imp_ind, real& iva_ind);
int get_tipodet_from_rmi(const TRectype& rmi, const TRectype& mv, real& percind, const bool is_liq = false); int get_tipodet_from_rmi(const TRectype& rmi, const TRectype& mv, real& percind, const bool is_liq = false);
bool gestione_IVAxCassa(const TDate& data, long firm = 0);
#endif #endif

View File

@ -685,9 +685,12 @@ TFieldtypes TSolder_tree::get_var(const TString& name, TVariant& var) const
} else } else
if (name == PART_DATADOC) if (name == PART_DATADOC)
{ {
var = rpag.get(name); TDate d = rpag.get(PART_DATAPAG);
if (var.is_zero()) if (!d.ok())
var = rpag.get(PART_DATAREG); d = rpag.get(PART_DATADOC);
if (!d.ok())
d = rpag.get(PART_DATAREG);
var = d;
} else } else
if (rpag.TRectype::exist(name)) if (rpag.TRectype::exist(name))
var = rpag.get(name); var = rpag.get(name);

View File

@ -1118,7 +1118,11 @@ int TRiga_partite::calcola_pagato_periodo(const TDate& dal, const TDate& al, TIm
{ {
const TRectype& pag = scad.row(p); // Riga pagamento const TRectype& pag = scad.row(p); // Riga pagamento
const TRiga_partite& sum = partita().riga(p); // Riga partite const TRiga_partite& sum = partita().riga(p); // Riga partite
const TDate datapag = sum.get_date(PART_DATAPAG); TDate datapag = sum.get_date(PART_DATAPAG);
if (!datapag.ok())
datapag = sum.get_date(PART_DATADOC);
if (!datapag.ok())
datapag = sum.get_date(PART_DATAREG);
if ((!dal.ok() || datapag >= dal) && (!al.ok() || datapag <= al)) if ((!dal.ok() || datapag >= dal) && (!al.ok() || datapag <= al))
pags.add((TRectype*)&pag); pags.add((TRectype*)&pag);
} }
@ -1140,7 +1144,11 @@ int TRiga_partite::calcola_pagato_periodo(const TDate& dal, const TDate& al, TIm
{ {
const TRectype& pag = unas.row(r); const TRectype& pag = unas.row(r);
const TRiga_partite& sum = partita().riga(r); const TRiga_partite& sum = partita().riga(r);
const TDate datapag = sum.get_date(PART_DATAPAG); TDate datapag = sum.get_date(PART_DATAPAG);
if (!datapag.ok())
datapag = sum.get_date(PART_DATADOC);
if (!datapag.ok())
datapag = sum.get_date(PART_DATAREG);
if ((!dal.ok() || datapag >= dal) && (!al.ok() || datapag <= al)) if ((!dal.ok() || datapag >= dal) && (!al.ok() || datapag <= al))
pags.add((TRectype*)&pag); pags.add((TRectype*)&pag);
} }

View File

@ -1,3 +1,3 @@
171 171
0 0
$ivadiff|0|0|127|0|IVA ad esigibilità differita o per cassa||| $ivadiff|0|0|110|0|IVA ad esigibilità differita o per cassa|||

View File

@ -18,7 +18,7 @@ SEZIONE|1|1|0|Sezione <D>are <A>vere
IMPORTO|4|18|3|Importo IMPORTO|4|18|3|Importo
IMPONIBILE|4|18|3|Imponibile IMPONIBILE|4|18|3|Imponibile
IMPOSTA|4|18|3|Imposta IMPOSTA|4|18|3|Imposta
VERSATA|4|18|3|Imposta Versata CHIUSA|8|1|0|Partita chiusa
2 2
NUMREG+NUMRIG+NUMPRO| NUMREG+NUMRIG+NUMPRO|
ANNOLIQ+MESELIQ+DATAREGP|X ANNOLIQ+MESELIQ+DATAREGP|X