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);
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)

View File

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

View File

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

View File

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

View File

@ -2252,8 +2252,12 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
if (mov.read() == NOERR)
dr = mov.get_date(MOV_DATAREG);
}
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
if (ae <= 0)
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())
{
m.enable(F_IVAXCASSA, a.gestione_IVAxCassa(dr));
const long numreg = m.get_long(F_NUMREG);
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"
"ultima registrazione sul libro giornale del %d"),
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())
@ -2320,13 +2313,13 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
{
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"),
reg.last_print().string(), (const char*)codreg, ar);
if (error) return false;
}
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"),
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)
{
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();
if (chiusura.ok() && dc <= chiusura)
{
return f.error_box(FR("%s è antecedente al %s,\n"
"data di chiusura dell'esercizio %d"),
data, chiusura.stringa(), ae);
f.error_box(FR("%s è antecedente al %s,\ndata di chiusura dell'esercizio %d"),
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())
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)
{
const int alleg = clifo.get_int(CLI_ALLEG);
m.set(F_IVAXCASSA, alleg != 6);
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 bool ic = ixc->active() && (alleg < 5 || alleg == 7) && paiv.full() && !m.get_bool(F_LIQDIFF);
ixc->set(ic ? "X" : "");
}
}
}
return true;
@ -2929,7 +2926,6 @@ bool TPrimanota_application::main_codiva_handler(TMask_field& f, KEY key)
// Certified 99%
bool TPrimanota_application::liqdiff_handler(TMask_field& f, KEY key)
{
if (key == K_SPACE && f.mask().is_running())
{
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)
{
const TString4 type(row->get(rowtype));
if (type == "D")
{
row->add(conto.get(0), tp);
@ -2967,6 +2962,13 @@ bool TPrimanota_application::liqdiff_handler(TMask_field& f, KEY key)
}
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;
}
@ -3283,25 +3285,6 @@ bool TPrimanota_application::corrvaluta_handler(TMask_field& f, KEY key)
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)
{
// Il numero riferimento esiste

View File

@ -207,7 +207,6 @@ protected:
bool gestione_valuta() const { return _ges_val; }
bool gestione_saldaconto() const { return _ges_sal; }
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_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 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 TDate datapag = get_row_str(s, row, S_DATAPAG);
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_DATAREG, cm.get(F_DATAREG));
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);
// 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_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)
{
@ -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_RATA, nrata);
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));
const int nrow = sheet.items()-1;

View File

@ -113,9 +113,9 @@ bool TLiquidazione_app::user_create()
if (msg != NULL) subj = msg->body();
if (_is_interactive)
pnd = new TProgind (3,TR("Preparazione archivi\nPrego attendere"),
FALSE, TRUE);
else begin_wait();
pnd = new TProgind (3,TR("Preparazione archivi"), false, true);
else
begin_wait();
_nditte = new TRelation(LF_NDITTE);
_nditte->add(LF_ATTIV,"CODDITTA=CODDITTA");
@ -353,16 +353,15 @@ bool TLiquidazione_app::user_create()
_isannual = _isriepilogo = _month == 13;
//modifica del 03/05/1995
int need_refresh = FALSE;
int m;
for (m = 1; m < _month; m++)
bool need_refresh = false;
for (int m = 1; m < _month; m++)
{
if (is_month_ok_strict(m) && (!look_lim(m) || !_lim->get_bool("B0")))
{
need_refresh = TRUE;
need_refresh = true;
break;
}
}
if (need_refresh)
_recalc = ever;
@ -381,10 +380,11 @@ bool TLiquidazione_app::user_create()
// riaggiusta relazione
_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)
update_firm(mese);
}
if (is_month_plain(_month) || _month == 13)
update_firm(_month);
@ -396,7 +396,7 @@ bool TLiquidazione_app::user_create()
// se ci sono altri mesi dopo l'ultimo calcolato, invalida il
// flag 'calcolato' del primo, per causare il ricalcolo dei
// 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->rewrite();
@ -499,7 +499,7 @@ bool TLiquidazione_app::user_destroy()
delete _rel;
delete _cur;
return TRUE;
return true;
}
bool TLiquidazione_app::set_print(int)
@ -512,10 +512,10 @@ bool TLiquidazione_app::set_print(int)
switch(_menu)
{
case 1: // liquidazione
_isprint = TRUE;
_isprint = true;
while (set_liquidazione())
{
if (_selected.ones() > 0l)
if (_selected.ones())
return recalc_all() && _isprint;
else
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().set_year(f.get());
app().build_nomiditte();
app().build_ditte_sheet(f.mask().source_file() == "cg4300a.msk" ?
(wht)atoi(f.mask().get(CG43_RDB_VERS)) :
all);
app().build_ditte_sheet(f.mask().source_file().ends_with("cg4300a.msk") ?
(wht)f.mask().get_int(CG43_RDB_VERS) : all);
}
return TRUE;
return true;
}
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);
m.set(CG43_FLD_SELECTED, l);
}
return TRUE;
return true;
}
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();
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(DLG_USER);
@ -700,7 +699,7 @@ bool TLiquidazione_app::fr_ditt_handler(TMask_field& f, KEY key)
app().set_choice_limits(m);
m.set(CG43_FLD_SELECTED, l);
}
return TRUE;
return true;
}
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().reset_choices(f.mask());
}
return TRUE;
return true;
}
bool TLiquidazione_app::lst_tm_handler(TMask_field& f, KEY key)
@ -729,7 +728,7 @@ bool TLiquidazione_app::lst_tm_handler(TMask_field& f, KEY key)
if (f.to_check(key))
{
const int m = atoi(f.get());
TMask& msk = f.mask();
TMask& msk = f.mask();
if (m == 13)
{
@ -747,12 +746,11 @@ bool TLiquidazione_app::lst_tm_handler(TMask_field& f, KEY key)
TWait_cursor hourglass;
app().reset_choices(f.mask());
app().set_month(m);
app().build_ditte_sheet(f.mask().source_file() == "cg4300a.msk" ?
(wht)atoi(f.mask().get(CG43_RDB_VERS)) :
all);
app().build_ditte_sheet(f.mask().source_file().ends_with("cg4300a.msk") ?
(wht)f.mask().get_int(CG43_RDB_VERS) : all);
}
}
return TRUE;
return true;
}
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());
}
}
return TRUE;
return true;
}
bool TLiquidazione_app::reset_button(TMask_field& f, KEY key)
{
if (key == K_SPACE)
app().reset_choices(f.mask());
return TRUE;
return true;
}
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;
m.enable(CG43_LST_CALC, abilita);
}
return TRUE;
return true;
}
void TLiquidazione_app::reset_choices(TMask& m)
{
_selected.reset();
_ditte->check(-1, FALSE);
if (m.source_file() == "cg4300a.msk")
if (m.source_file().ends_with("cg4300a.msk"))
{
const long ditta = get_firm();
m.set(CG43_FLD_DFR, 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);
set_choice_limits(m);
}
@ -935,5 +942,5 @@ int cg4300(int argc, char* argv[])
TLiquidazione_app* main_app = new TLiquidazione_app(menu);
main_app->run(argc, argv, title);
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,
real& importo_res, real& imponibile_res, real& imposta_res) const;
bool print_inc_diff_log(int& rw, int tipoatt);
bool print_dainc_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, int tipoiva);
bool ivadiff_chiusa(const TRectype& mov, const TDate& fine) const;
bool sarebbe_da_pagare(const TRectype& mov, const TDate& fine) const;
public:
@ -545,12 +547,15 @@ public:
void zero_plafond (int month, const char* codatt);
void add_plafond (int month, const char* codatt, int type,
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
// e' scritto sui parametri liquidazione (LIA)
// Se si passa 0 (default) vede prende la ditta correntemente in corso di calcolo
// 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
// codice IVA apposito immesso nei parametri studio

View File

@ -33,14 +33,10 @@
bool TLiquidazione_app::recalc_all()
{
_prind = new TProgind(_selected.ones()*2, _printonly ?
TR(" Stampa liquidazione... \n"
" Preparazione archivi \n"
" ") :
TR(" Calcolo liquidazione... \n"
" Preparazione archivi \n"
" "),
TRUE,TRUE);
TString msg;
msg = _printonly ? TR("Stampa") : TR("Calcolo");
msg << TR(" liquidazione:\npreparazione archivi...");
_prind = new TProgind(_selected.ones()*2, msg, true, true);
for (int l = 0; l < _ditte->items(); l++)
{
@ -65,14 +61,14 @@ bool TLiquidazione_app::recalc_all()
_nditte->curr().put("CODDITTA",codditta);
_nditte->read();
_freqviva = nomeditta.get(3);
bool mens = _freqviva == "M";
const bool mens = _freqviva == "M";
// determina attivita' prevalente e istanzia cazzuole
// per vedere che Kazzo di liquidazione calcolare
TString attprev = _nditte->curr().get("CODATTPREV");
const TString8 attprev = _nditte->curr().get("CODATTPREV");
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);
// istanzia benzinaro
@ -104,14 +100,14 @@ bool TLiquidazione_app::recalc_all()
* --------------------------------------------------------------
*/
int need_refresh = FALSE;
int need_refresh = false;
if (_recalc != ever)
{
int m = _month == 13 ? _month : 1;
for (; m < _month; m++)
if (is_month_ok_strict(m) && (!look_lim(m) || !_lim->get_bool("B0")))
{
need_refresh = TRUE;
need_refresh = true;
break;
}
@ -122,11 +118,14 @@ bool TLiquidazione_app::recalc_all()
}
int m;
for (m = 1; m <= _month; m++) // fino a 13 compreso
{
if (is_month_plain(m) || _recalc == ever)
{
if (_prind->iscancelled()) break;
if (_prind->iscancelled())
break;
update_firm(m);
}
}
// se ci sono altri mesi dopo l'ultimo calcolato, invalida il
// 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'
// stato effettuato per scelta dello stronzo commercialista.
TConfig c(CONFIG_DITTA, "cg");
_isdiff = c.get_bool("GesLiqDiff");
if (_isdiff)
{
TFilename tmp; tmp.tempdir();
tmp.add("liqdiff.txt");
ofstream log(tmp);
}
_isdiff = ini_get_bool(CONFIG_DITTA, "cg", "GesLiqDiff");
if (month == 13 && recalc)
{
@ -180,9 +171,8 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
}
}
look_lim(liq_month(month), TRUE);
_isdiffacc = is_differita();
_isdiffacc = is_differita(); // Gestione differimento acconto IVA
_isdifferita = _isdiffacc;
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'
// nel caso, differita va a FALSE
_monthinatt = 1;
const TDate inatt = _nditte->curr().get("DINIZIOATT");
const TDate inatt = _nditte->curr().get(NDT_DINIZIOATT);
if (is_in_liq_period(inatt))
_isdifferita = false;
if (inatt.year() == atoi(_year))
@ -222,24 +212,24 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
_nditte->save_status();
if (_nditte->is_first_match(LF_ATTIV))
{
TString buf(256);
do
{
const TString8 codatt = _nditte->curr(LF_ATTIV).get("CODATT");
TString80 desatt = _nditte->curr(LF_ATTIV).get("DESCR");
quater = _nditte->curr().get_bool("FLIVA11Q");
const TString8 codatt = _nditte->curr(LF_ATTIV).get("CODATT");
const TString80 desatt = _nditte->curr(LF_ATTIV).get("DESCR");
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);
_mixed = false;
_mixed = false;
buf.format( _printonly ? FR("Stampa liquidazione (%d)...\n%s: %s\n") :
FR("Calcolo liquidazione (%d)...\n%s: %s\n"),
month,
(const char*)_nditte_r->get("RAGSOC"),
(const char*)desatt);
if (_prind) _prind->set_text(buf);
if (_prind)
{
TString buf(80);
buf.format( _printonly ? FR("Stampa liquidazione (mese %d)...\n%s: %s\n") :
FR("Calcolo liquidazione (mese %d)...\n%s: %s\n"),
month, (const char*)_nditte_r->get(NDT_RAGSOC), (const char*)desatt);
_prind->set_text(buf);
}
// se ricalcola l'annuale si tiene tutte le vendite e corrispettivi di
// 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++)
{
bool waspla = false;
TString8 cattiv(codatt);
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");
_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--)
{
_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"));
}
_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)
stliq = riepliq = TRUE;
stliq = riepliq = true;
if (_comp_acconto)
stliq = riepliq = FALSE;
stliq = riepliq = false;
if (calc || !recalc)
if (!update_att(month, cattiv) && stliq)
describe_error(TR("Attivita' non ricalcolate: possibili errori"),
describe_error(TR("Attività non ricalcolate: possibili errori"),
codatt);
if (_recalc_regis)
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",
"R20", "R21", "R22", "R23", "R24", "R25", "R26", "R27", "R28", "R29",
"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;
start = 0; stop = 1;
@ -503,7 +498,7 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
else
if (atoi(_year) < 1998)
stop = 0; // Solo PIM
// PIM / PIS
for (int i = start; i <= stop; i++) // Ciclo per le tabelle da azzerare
{
TTable * tab = (TTable*) arr[i];
@ -516,7 +511,7 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
year = codtab.mid(0,4);
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->rewrite();
}
@ -528,7 +523,7 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
if (look_plm(month, codatt))
{
// zero PLM, POM, PAM, PUM
TString codtab(_plm->get("CODTAB"));
const TString16 codtab(_plm->get("CODTAB"));
_plm->zero();
_pom->zero();
_pam->zero();
@ -552,8 +547,8 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
const TString8 att = (const char*)*_pia_codatt;
if (m == month && att == codatt && (_year == *_pia_anno))
{
_pia->put("R0",""); // Imponibile
_pia->put("R1",""); // Imposta
_pia->zero("R0"); // Imponibile
_pia->zero("R1"); // Imposta
_pia->rewrite();
}
}
@ -561,23 +556,90 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
}
if (_isplafond && month != 13)
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
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 long giorni = fine - datareg;
if (giorni <= 365)
return false; // E' passato meno di un anno
if (giorni < 0)
return false;
const TDate datainc = mov.get(MOV_DATAINC);
if (datainc.ok() && datainc <= fine)
return false; // Già pagata senza saldaconto
if (mov.get_bool(MOV_LIQDIFF))
{
const TDate datainc = mov.get(MOV_DATAINC);
if (datainc.ok() && datainc <= fine)
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));
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,
@ -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())
{
const char sez = id.get("SEZIONE").as_string()[0];
const int tipomov = id.get(PART_TIPOMOV).as_int();
if ((tipomov == 1 || tipomov == 2) || !last_pag.ok())
const tipo_movimento tipomov = (tipo_movimento)id.get(PART_TIPOMOV).as_int();
if (tipomov <= tm_nota_credito || !last_pag.ok())
{
importo += TImporto(sez, id.get(PAGSCA_IMPORTO).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();
if (data_pag >= last_pag)
continue;
const TImporto vers(sez, id.get("VERSATA").as_real());
if (!vers.is_zero())
{
importo += TImporto(sez, id.get(PAGSCA_IMPORTO).as_real());
imponib += TImporto(sez, id.get(RMI_IMPONIBILE).as_real());
imposta += vers;
}
importo += TImporto(sez, id.get(PAGSCA_IMPORTO).as_real());
imponib += TImporto(sez, id.get(RMI_IMPONIBILE).as_real());
imposta += TImporto(sez, id.get(RMI_IMPOSTA).as_real());
}
}
if (importo.valore() > ZERO)
if (imponib.valore() > ZERO)
{
importo_res = importo.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
// 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 nond19_imp = 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_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 corr_CEE = ZERO;
real corr_noCEE = ZERO;
@ -738,20 +792,24 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real bdog_iva = ZERO;
real agr_imp = ZERO;
real agr_iva = ZERO;
real fdiff_imp = ZERO;
real fdiff_iva = ZERO;
real fdiffinc_imp = ZERO;
real fdiffinc_iva = ZERO;
real fdiff_imp_acq = ZERO;
real fdiff_iva_acq = ZERO;
real fdiffinc_imp_acq = ZERO;
real fdiffinc_iva_acq = ZERO;
real fdiff_imp_acq = ZERO;
real fdiff_iva_acq = ZERO;
real fdiffinc_imp_acq = ZERO;
real fdiffinc_iva_acq = ZERO;
_diff_ven_ap = ZERO;
_diff_ven_ap_iva = ZERO;
_diff_acq_ap = ZERO;
_diff_acq_ap_iva = ZERO;
// PEM
real vt_imponibile[23];
real vt_imposta[23];
for (int j = 0; j < 23; j++)
{
vt_imponibile[j] = ZERO;
@ -853,19 +911,20 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
_cur->setregion(from, to);
TString filter;
filter.format("((ANSI(DATAREG)>=%ld)&&(ANSI(DATAREG)<=%ld))", fromdate.date2ansi(), t.date2ansi());
if (_isviaggio || _isdiff)
{
if (_isviaggio)
filter << format("||((ANSI(DATA74TER)>=%ld)&&(ANSI(DATA74TER)<=%ld))", f74.date2ansi(), t.date2ansi());
if (_isdiff)
filter << "|| NUM(LIQDIFF==\"X\")";
}
//filter.format("((ANSI(DATAREG)>=%ld)&&(ANSI(DATAREG)<=%ld))", fromdate.date2ansi(), t.date2ansi());
filter.format("(BETWEEN(DATAREG,%ld,%ld))", fromdate.date2ansi(), t.date2ansi());
if (_isviaggio)
filter << format("||(BETWEEN(DATA74TER,%ld,%ld))", f74.date2ansi(), t.date2ansi());
if (_isdiff)
filter << "||(NUM(LIQDIFF==\"X\"))";
if (has_sc && gestione_IVAxCassa(fromdate))
filter << "||(NUM(IVAXCASSA==\"X\"))";
_cur->setfilter(filter);
const long items = _cur->items();
_cur->freeze();
*_cur = 0;
*_cur = 0;
TString16 trueatt(codatt);
const int tipatt = trueatt[5] - '0';
@ -885,8 +944,9 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const TString4 tipodoc = _mov->get(MOV_TIPODOC);
const bool corrisp = _reg->get_bool("B0");
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)
const TDate datedoc(_mov->get(MOV_DATADOC));
const TDate datedoc = _mov->get(MOV_DATADOC);
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_valintra = rcs.get_bool("VALINTRA");
if (_mov->get_long(MOV_NUMREG) == 20339)
int cazzone = 1;
// 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_cass = !iva_diff && _mov->get_bool(MOV_IVAXCASSA) && tm > 0;
const bool movdiff = iva_diff || iva_cass;
bool dok = is_date_ok(date, month, liqmonth, year_int);
TPartite_array arrpart; // Partite 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'
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 int row = p ? p->mov2rig(numreg, 0) : 0;
game_found = row > 0;
if (game_found)
if (game_found && !ivadiff_chiusa(_mov->curr(), fine))
{
const TRiga_partite& rp = p->riga(row);
TImporto pg, nc;
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);
saldo += pg; saldo += nc;
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
{
datainc = _mov->get(MOV_DATAINC);
datainc = iva_diff ? _mov->get_date(MOV_DATAINC) : TDate();
if (datainc.ok() && datainc <= fine)
tot_incassato = _mov->get_real(MOV_TOTDOC);
else
@ -1008,15 +1071,13 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
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
* ma il cliente potrebbe voler calcolare l'acconto prima
* di aver calcolato la liquidazione (perche' cosi' complicato?)
*/
//if (_comp_acconto && date.month() == accmonth && date.day() > 20)
if (_comp_acconto && date.month() == accmonth)
if (!_isdifferita && date.day() > 20)
continue;
if (_comp_acconto && !_isdifferita && date.month() == accmonth && date.day() > 20)
continue;
// Ciclo sulle righe iva del movimento
do
@ -1045,9 +1106,9 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const int tipoagr = _iva->get_int("S4");
const int tipoag = _iva->get_int("S5");
const int tipopla = _iva->get_int("S3");
int isrimbinfr = _iva->get_bool("B3"); // vale per calcolo rimborso se ES o NI
int isrimbinfr = _iva->get_bool("B3"); // vale per calcolo rimborso se ES o NI
const real perciva = _iva->get_real("R0") / CENTO;
int ivarimb = !_iva->get_bool("B4"); // non escluso calcolo rimb. per al. media
int ivarimb = !_iva->get_bool("B4"); // non escluso calcolo rimb. per al. media
const TString4 tipocr_s = _rmoviva->get(RMI_TIPOCR);
const int tipocr = atoi(tipocr_s);
@ -1079,20 +1140,21 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real impon_det; // Imponibile 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);
TLocalisamfile id(LF_IVADIFF);
id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG));
id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG));
id.put(PART_TIPOMOV, 1);
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("ANNOLIQ", datareg.year());
int mesereg = datareg.month();
if (_freqviva == "T")
int mesereg = mesereg = datareg.month();
if (_freqviva[0] == 'T')
{
const int resto = mesereg % 3;
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_NUMRIG, _rmoviva->get(RMI_NUMRIG));
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("TIPOIVA", tipomov == 2 ? 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;
bool ultimo = false;
tipo_movimento tipomov_pag = tm_pagamento;
if (nrigp > 0 && nrigp < 9999)
{
const TPartita& p = arrpart.partita(pagsca);
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("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);
if (p.chiusa() && rp.tipo() >= 3)
{
@ -1158,7 +1229,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
else
{
// 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("NUMRIGP", nrigp);
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);
int meseliq = id.get_date("DATAREGP").month();
if (_freqviva == "T")
if (_freqviva[0] == 'T')
{
const int resto = meseliq % 3;
if (resto > 0)
@ -1198,23 +1269,40 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real val = imponibile_orig * perc;
round_imposta(val);
id.put(RMI_IMPONIBILE, val);
incdiff_imp += val;
if (tipomov_pag >= tm_pagamento)
incdiff_imp += val;
val = imposta_orig * perc;
round_imposta(val);
id.put(RMI_IMPOSTA, val);
incdiff_iva += val;
if (tipomov_pag >= tm_pagamento)
incdiff_iva += val;
}
if (_isfinal && id.get_int(PART_TIPOMOV) > 2)
id.put("VERSATA", id.get(RMI_IMPOSTA));
else
id.zero("VERSATA");
int err = id.write_rewrite();
if (err != NOERR)
error_box("Errore %d in aggiornamento file IVADIFF", err);
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
{
@ -1509,7 +1597,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
// senza entusiasmo ed interrogandomi sul senso della vita
if (ivarimb)
{
bool ok = _isagricolo ? tipoagr == 2 : FALSE;
bool ok = _isagricolo ? tipoagr == 2 : false;
if (tipomov == acquisto && !ok)
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)
{
TTable pem("PEM");
for (int reg = 0; reg < 23; 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!
// Sebbene per motivi di pieta' viene comunque lasciato nel tracciato record (esigenze PRASSI)
if (codiva.empty()) return;
// Sebbene per motivi di pietà viene comunque lasciato nel tracciato record (esigenze PRASSI)
if (codiva.blank())
return;
if (is_acquisto)
{
@ -3261,10 +3349,10 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
// detrazioni solo non in regime agricolo
if (!attivita_agricola)
{
risultato -= (_plm->get_real("R3"));
res_cred += (_plm->get_real("R3"));
}
const real r3 = _plm->get_real("R3");
risultato -= r3;
res_cred += r3;
}
/* totalizza importi 74 ter */
if (_isviaggio)
{
@ -3482,7 +3570,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
while ((tmpatt = atts.get()) != NULL)
{
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 (!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))
{
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);
_plm->put("R33", new_r33);
_plm->rewrite();
@ -3729,14 +3817,15 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
_lim->put("R12", res_cred);
_lim->put("R13", res_debt);
_lim->put("R26", fdiff_imp);
_lim->put("R27", fdiff_iva);
_lim->put("R28", fdiffinc_imp);
_lim->put("R29", fdiffinc_iva);
_lim->put("R30", fdiff_imp_acq);
_lim->put("R31", fdiff_iva_acq);
_lim->put("R32", fdiffinc_imp_acq);
_lim->put("R33", fdiffinc_iva_acq);
_lim->put("R26", fdiff_imp); // Imponibile IVA diff Fatture di vendita
_lim->put("R27", fdiff_iva); // Imposta IVA diff Fatture di vendita
_lim->put("R28", fdiffinc_imp); // Imponibile IVA diff Incassi
_lim->put("R29", fdiffinc_iva); // Imposta IVA diff Incassi
_lim->put("R30", fdiff_imp_acq); // Imponibile IVA diff Fatture di acquisto
_lim->put("R31", fdiff_iva_acq); // Imposta IVA diff Fatture di acquisto
_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("R1", iva_acq);
@ -3893,8 +3982,9 @@ void TLiquidazione_app::recalc_annual(const char* att)
TString16 codiva,reg,tiva;
TToken_string va7("",'!');
int tipoatt = att[strlen(att) -1] - '0';
TString aaa(att);
const TString8 aaa(att);
const int tipoatt = aaa.right(1)[0] - '0';
CHECKD(tipoatt > 0, "Tipo att non valido ", tipoatt);
look_pla(aaa);
volaff1 = _pla->get_real("R14");
@ -3955,12 +4045,12 @@ void TLiquidazione_app::recalc_annual(const char* att)
_CorrItem& ca = (_CorrItem&) corr_ann[codiva];
ca._totale += _pim->get_real("R3");
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)
volaff1 += imp_ifs;
volaff1 += imp_ifs;
else
volaff2 += imp_ifs;
volaff2 += imp_ifs;
}
// Ora si scorporano i corrispettivi raggruppati per codice IVA e si totalizzano gli imponibili

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,
bool create)
{
bool ok = FALSE;
bool ok = false;
_prp_r->zero();
(*_prp_anno) = _year;
(*_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_tipodet) = tipodet;
TString s = _prp_r->get("CODTAB");
_prp->read();
ok = _prp->good();
const TString80 s = _prp_r->get("CODTAB");
ok = _prp->read() == NOERR;
if (!ok && create)
{
_prp_r->zero();
_prp_r->put("CODTAB",s);
_prp->write();
ok = _prp->write() == NOERR;
}
return ok;
}
@ -521,7 +519,8 @@ bool TLiquidazione_app::look_pla(const char* a, bool create)
buf.ltrim();
buf.rtrim(1);
buf << "1";
while (buf.len() < 6) buf.insert("0");
while (buf.len() < 6)
buf.insert("0");
_pla_r->zero();
(*_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 r;
TConfig cnf(CONFIG_STUDIO, "cg");
const TString& codagv = cnf.get("CodAgv");
if (codagv.not_empty() && look_iva(codagv)) // Controlla se è vuoto! CM600475
const TString& codagv = ini_get_string(CONFIG_STUDIO, "cg", "CodAgv");
if (codagv.full() && look_iva(codagv)) // Controlla se è vuoto! CM600475
r = _iva->get_real("R0");
return r;
}

View File

@ -6,14 +6,14 @@
#include "cg4300.h"
#include "recset.h"
void TLiquidazione_app::add_plafond(int month, const char* codatt, int type,
const real& howmuch, bool intra)
{
look_ppa(month,codatt,type);
const char* field = intra ? "R1" : "R0";
real r = _ppa_r->get(field);
r += howmuch;
_ppa_r->put(field, r);
_ppa_r->add(field, howmuch);
_ppa->rewrite();
}
@ -598,14 +598,14 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts,
if (rimborsami && !alv.is_zero())
{
// 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);
}
if (stliq && rimborsami)
{
if (d == NULL) d = new _DescrItem(RIMBORSO);
d->_f1 = TRUE;
d->_f1 = true;
d->_r2 = vtot;
d->_r3 = atot;
d->_r4 = ivav;
@ -622,3 +622,41 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts,
}
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)
{
/* Non voglio piu' il riepilogo delle fatture emesse IVA diff
if (!diffimp.is_zero() || !diffiva.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++);
head->_f0 = false;
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);
_descr_arr.insert(totd, j);
}
@ -859,6 +862,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
t30 += diffimp_acq;
t31 += diffiva_acq;
}
*/
if (!diffincimp.is_zero() || !diffinciva.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->_f1 = true;
headi->_f2 = atoi(activity.right(1)); // Tipo attività = 1 (servizi) o 2 (mista)
headi->_f3 = tipomov;
totdi = new _DescrItem(TOT_ROW_DI);
_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->_r7 = _lim->get_real("R14");
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
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)
{
if (!_isprint || !_canprint || (_isregis && _isfinal)) return;
_errors.add(new _ErrItem(err,codatt,_nditte->curr().get("CODDITTA")));
if (!_isprint || !_canprint || (_isregis && _isfinal))
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();
}
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;
if (_month < 13) limit << " MESELIQ=" << _month;
TString query;
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 << "\nBY TIPOIVA DATAREG";
query << "\nJOIN MOV INTO NUMREG==NUMREG";
@ -1738,47 +1742,48 @@ bool TLiquidazione_app::print_dainc_diff_log(int& rw, int tipoatt)
const TDate nulldate;
residuo_da_liquidare(rec.get_long(RMI_NUMREG), rec.get_int(RMI_NUMRIG), nulldate,
importo, imponibile, imposta);
if (!importo.is_zero())
const int ti = rec.get_int("TIPOIVA");
if (ti != header)
{
const int ti = rec.get_int("TIPOIVA");
if (ti != header)
{
if (ti < 2)
set_row(rw++, TR("Fatture a liquidazione differita o per cassa da incassare"));
else
set_row(rw++, TR("Fatture a liquidazione differita o per cassa da pagare"));
set_row(rw++, "IVA@17gImporto@30gImponibile@49gImposta@58gTipologia@71gFattura@92gRagione sociale");
header = ti;
}
const TString4 codiva = rec.get("CODIVA");
const TString16 numfat = id.get("MOV.NUMDOC").as_string();
const TString16 datafat = rec.get("DATAREG");
const char* tipolog = id.get("TIPODIFF").as_int() == 2 ? TR("Per Cassa") : TR("Differita");
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 char*)codiva, &importo, &imponibile, &imposta,
tipolog, (const char*)numfat, (const char*)datafat,
clifo.get());
if (ti < 2)
set_row(rw++, TR("Fatture da incassare"));
else
set_row(rw++, TR("Fatture da pagare"));
set_row(rw++, "IVA@17gImporto@30gImponibile@49gImposta@57gC/D@74gProt.@80gN. Doc.@89gData reg.@100gCodice@107gRagione sociale");
header = ti;
}
const TString4 codiva = rec.get("CODIVA");
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 char* tipolog = id.get("TIPODIFF").as_int() == 2 ? TR("C") : TR("D");
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@74g%5d@80g%s@89g%s@100g%6ld@107g%s",
(const char*)codiva, &importo, &imponibile, &imposta,
tipolog, protiva, (const char*)numfat, (const char*)datafat,
codcf, clifo.get());
const char* ragsoc2 = clifo.get();
if (ragsoc2 != NULL && strlen(ragsoc2) > 3)
set_row(rw++, "@107g%s", ragsoc2);
}
}
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;
if (_month < 13) limit << " MESELIQ=" << _month;
TString query;
query << "USE IVADIFF KEY 2 SELECT (TIPOMOV>2)";
if (tipoatt == 1 || tipoatt == 2)
query << "&&(TIPOATT==" << tipoatt << ")";
// if (_isregis && tipoiva > 0) query << "&&(TIPOIVA==" << tipoiva << ')';
if (tipoatt > 0)
query << " &&(TIPOATT==" << tipoatt << ")";
query << "\nBY TIPOIVA DATAREGP";
query << "\nJOIN MOV INTO NUMREG==NUMREG";
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 < 2)
set_row(rw++, TR("Fatture a liquidazione differita o per cassa incassate"));
set_row(rw++, TR("Fatture incassate"));
else
set_row(rw++, TR("Fatture a liquidazione differita o per cassa pagate"));
set_row(rw++, "IVA@17gImporto@30gImponibile@49gImposta@58gPagamento@71gFattura@92gRagione sociale");
set_row(rw++, TR("Fatture pagate"));
set_row(rw++, "IVA@17gImporto@30gImponibile@49gImposta@57gC/D@61gPagamento@74gProt.@80gN. Doc.@89gData reg.@100gCodice@107gRagione sociale");
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 imponibile = rec.get(RMI_IMPONIBILE);
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 int protiva = id.get("MOV.PROTIVA").as_int();
const TString16 numfat = id.get("MOV.NUMDOC").as_string();
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*)datapag, (const char*)numfat, (const char*)datafat,
clifo.get());
tipolog, (const char*)datapag, protiva, (const char*)numfat, (const char*)datafat,
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++,"");
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);
print_dainc_diff_log(r, d._f2);
print_dainc_diff_log(r, d._f2, d._f3);
}
else
if (d._flags == PIM_HEAD_DI)
{
set_bookmark(TR("Riepilogo progressivi a liquidazione differita incassati"), _att_bookmark);
print_inc_diff_log(r, d._f2);
set_row(r++, TR("Incassi/pagamenti a liquidazione differita o per cassa"));
set_bookmark(TR("Riepilogo progressivi a liquidazione differita incassati"), _att_bookmark);
// print_inc_diff_log(r, d._f2, d._f3);
}
else // PIS_HEAD
{
@ -1938,13 +1953,14 @@ void TLiquidazione_app::set_pim(_DescrItem& d)
(const char*)d._s1, (const char*)d._s2,
&(d._r26), &(d._r27), &(d._r30), &(d._r31));
}
else
else
if (d._flags == PIM_ROW_DI || d._flags == PIS_ROW_DI)
{
set_row(rw++,"%4s %s@25g%r@41g%r@91g%r@107g%r",
(const char*)d._s1, (const char*)d._s2,
&(d._r28), &(d._r29), &(d._r32), &(d._r33));
}
}
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++,"");
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));
}
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));
if (_isannual)
{
@ -2412,7 +2431,7 @@ void TLiquidazione_app::set_grand_2000(_DescrItem& d, int &rw)
if (!_is_visliq)
iva_vend += rett_debt;
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);
if (_is_visliq)
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 <progind.h>
#include <recarray.h>
#include <recset.h>
#include <sheet.h>
#include <utility.h>
@ -194,7 +195,8 @@ void TStampa_registri_app::get_dati_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);
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 (_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;
}
else
@ -1047,7 +1049,9 @@ int TStampa_registri_app::riga_rmoviva()
if (!ok)
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;
const TRecnotype nr = rmoviva.recno();
@ -1060,6 +1064,9 @@ int TStampa_registri_app::riga_rmoviva()
const TString4 codiva = iva.get(RMI_CODIVA);
_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)
if (_tipo_stampa == prova)
@ -1269,11 +1276,8 @@ bool TStampa_registri_app::controlla_mov()
tiporeg TStampa_registri_app::cerca_reg(const TString& c)
{
tiporeg t;
TString16 cod = "";
t = vendita;
cod << _annoes << c;
tiporeg t = vendita;
TString8 cod; cod << _annoes << c;
_tabreg->zero();
_tabreg->put("CODTAB", cod);
if (_tabreg->read() == NOERR)
@ -1289,14 +1293,14 @@ int TStampa_registri_app::stampa_prospetto(int rr, bool print_prec)
{
reset_print();
riga.fill('-');
set_row(rr, "%s", (const char*)riga);
rr++;
set_row(rr, TR("Legenda Tipo Operazione: 1=operazione intracomunitaria 2=AF art.34 comma 3"));
set_row(rr++, riga);
riga = TR("Legenda Tipo Operazione: 1=intra; 2=AF art.34 comma 3");
if (_auto_intraf)
set_row(rr, FR("@78g3=operazione intracomunitaria e AF art.34 comma 3 4=Fattura a liquidazione differita"));
else
set_row(rr, FR("@78g4=Fattura a liquidazione differita"));
rr++;
riga << TR("; 3=intra e AF art.34 comma 3");
riga << TR("; 4=liquidazione differita");
riga << TR("; 5=IVA per cassa");
set_row(rr++, riga);
_stampa = _st_tot_fin;
if (_stampa)
@ -1305,7 +1309,7 @@ int TStampa_registri_app::stampa_prospetto(int rr, bool print_prec)
rr+=2;
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, "@3g%s", (const char*) doc._descrdoc);
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()
{
int rr=1;
int rr = 1;
rr = stampa_prospetto(rr, false);
//*****deve azzerare i totali progressivi dei riporti e segnalare all'header di non stampare
//la riga di riporto
_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];
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;
set_row(rr, "%-4s", (const char*)riga._codiva);
@ -1606,6 +1610,7 @@ void TStampa_registri_app::set_page_tot_reg()
}
} // for
}
if (_stampa_plafonds)
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)
{
TTable pla ("%PLA");
TTable ppa ("PPA");
TTable pla("%PLA");
TTable ppa("PPA");
TString80 chiave;
int num;
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;
}
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!!! *********//
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 viacf;
TString ragsoc, codfis, piva;
TString tipo_op = "";
TString4 tipo_op = "";
TLocalisamfile& mov = _cur->file(LF_MOV);
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 numgio = mov.get_long(MOV_NUMGIO);
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);
bool autof = caus.get_bool(CAU_AUTOFATT);
bool liqdiff = mov.get_bool(MOV_LIQDIFF);
const bool autof = caus.get_bool(CAU_AUTOFATT);
const bool liqdiff = mov.get_bool(MOV_LIQDIFF);
const bool IVAxcassa= !liqdiff && mov.get_bool(MOV_IVAXCASSA);
TString80 descrcau = caus.get(CAU_DESCR);
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)
{
set_row(_r+1, FR("@2g*** NUM.PROT.FUORI SEQUENZA"));
set_row(_r+1, FR(" @b*** NUM.PROT.FUORI SEQUENZA@r"));
riga = _r+2;
}
_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;
@ -2222,7 +2419,7 @@ bool TStampa_registri_app::preprocess_page(int file, int counter)
_riga_rmi.destroy();
}
if ( intra && autof)
if (intra && autof)
{
_auto_intraf = true;
tipo_op = "3";
@ -2233,8 +2430,10 @@ bool TStampa_registri_app::preprocess_page(int file, int counter)
tipo_op = "2";
else if (liqdiff)
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
{
@ -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);
TString80 vall = curr.string(true);
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;
@ -2295,15 +2495,15 @@ print_action TStampa_registri_app::postprocess_page (int file, int counter)
{
reset_print();
TRecnotype pos = _cur->pos();
long items = _cur->items();
const TRecnotype pos = _cur->pos();
const TRecnotype items = _cur->items();
const bool last_mov = pos == items-1;
if (_stampa_plafonds && !last_mov)
{
// Nel caso sia richiesta la stampa prospetto mensile plafond e vi siano mesi
// 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
//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;
}
if (last_mov)
{
printer().formfeed();
print_IVAxCassa(_datareg.month());
}
if (_liquidazione)
{
if (!_st_liq[_datareg.month()] && stampo_liquidazione(_datareg.month()))
{
_st_liq[_datareg.month()] = true;
@ -2340,7 +2547,8 @@ print_action TStampa_registri_app::postprocess_page (int file, int counter)
}
}
}
}
if (last_mov)
{
if (_stampa_plafonds || (_tipo_stampa != libro_unico && _liquidazione))
@ -2431,10 +2639,6 @@ void TStampa_registri_app::preprocess_header()
char tipo = ' ';
char type = ' ';
int mese, anno;
TString riga(_stampa_width);
TString data(30);
riga.fill('-');
if (_tipo_stampa != libro_unico)
{
@ -2447,7 +2651,9 @@ void TStampa_registri_app::preprocess_header()
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();
@ -2458,8 +2664,7 @@ void TStampa_registri_app::preprocess_header()
else
r+=2;
}
else // se stampa di prova o su libro unico l'intestazione della ditta
// va sempre stampata
else // se stampa di prova o su libro unico l'intestazione della ditta va sempre stampata
r = stampa_intestazione();
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)
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
// (cioe' a rottura di mese)
// cosi' sono sicura che l'aggiornamento viene fatto ad ogni salto pagina (cioe' a rottura di mese)
if (_tipo_stampa != prova)
aggiorna_reg(_ok_vidi);
@ -2527,6 +2731,7 @@ void TStampa_registri_app::preprocess_header()
//l'intestazione (piuttosto dettagliata) e' gestita
//dal prg di liquidazione perche' molte info che devono
//comparire in questa intestazione la stampa reg. non le conosce.
const TString riga(_stampa_width, '-');
//non sto stampando la liquidazione
if (!_intesta_liq)
@ -2536,13 +2741,13 @@ void TStampa_registri_app::preprocess_header()
if (_tipo_reg == vendita) //registro vendite
{
cor = 'R';
cor = 'R'; // Ricavi
nd1 = ' ';
nd2 = ' ';
}
if (_tipo_reg == acquisto)
{
cor = 'C';
cor = 'C'; // Cessioni
nd1 = 'N';
nd2 = 'D';
}
@ -2678,7 +2883,7 @@ bool TStampa_registri_app::stampo_liquidazione(int mese)
//test tradotti alla lettera da AS/400
//assolutamente incongruenti !!!
const bool trim_month_flag = (_frequiva == 'T' && (mese == 3 || mese == 6 || mese == 9 || mese == 12))
||_frequiva != 'T' || (mese == 12 && _tipo_riepilogativo == 'A');
||_frequiva != 'T' || (mese == 12 && _tipo_riepilogativo == 'A');
if (_tipo_stampa == prova)
{
@ -2721,15 +2926,15 @@ void TStampa_registri_app::liq_other_case()
switch (_scelta)
{
case prosegui_cal_stampa:
tipo_messaggio = 'L'; // Stampa Liquidazione con ricalcolo
break;
case prosegui_stampa:
tipo_messaggio = 'S'; // Stampa Liquidazione senza ricalcolo
break;
default:
tipo_messaggio = '\0';
break;
case prosegui_cal_stampa:
tipo_messaggio = 'L'; // Stampa Liquidazione con ricalcolo
break;
case prosegui_stampa:
tipo_messaggio = 'S'; // Stampa Liquidazione senza ricalcolo
break;
default:
tipo_messaggio = '\0';
break;
}
if (_tipo_stampa != prova)
@ -2936,7 +3141,7 @@ void TStampa_registri_app::aggiorna_reg(const bool aggiorna_vidi)
IndBil.zero();
TRectype nuovo (IndBil.curr());
TRectype nuovo(IndBil.curr());
IndBil.put("ANNO", _annoes);
IndBil.put("CODLIB", _codlib);
@ -3083,6 +3288,17 @@ void TStampa_registri_app::no_movimenti()
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)
{
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)
const bool print_plafond_bollato = _tipo_stampa != prova && (m == 1 || m > _u_data.month());
if (_stampa_plafonds && (_tipo_stampa == prova || print_plafond_bollato))
@ -3118,46 +3334,46 @@ void TStampa_registri_app::no_movimenti()
if (stampa_plafonds(-1)) // Con -1 compone e stampa printrows all'istante
printer().formfeed();
}
//la funzione stampo_liquidazione non stampera' la liquidazione sul
//registro il cui mese di stampa ultima liq. e' > del mese in esame
//caso a parte il mese 12 (che posso ristampare 2 volte)
if (_liquidazione)
if (stampo_liquidazione(m))
{
if (_tipo_reg == riepilogativo)
{
if (!(_freq_riepilogo == 'M' ||
(m == 3 || m == 6 || m == 9 || m == 12))) continue;
}
if (_liquidazione && stampo_liquidazione(m))
{
if (_tipo_reg == riepilogativo)
{
if (!(_freq_riepilogo == 'M' ||
(m == 3 || m == 6 || m == 9 || m == 12))) continue;
}
if (! printer().isopen())
printer().open();
TFilename f;
f.temp("rgp");
_datareg = TDate(1, m, _annoes); // serve alla preprocess_header
if (_scelta == B0_settato || _scelta == prosegui_stampa)
{
if (_tipo_stampa == prova)
send_message('S',f, m);
else
send_message('s',f, m);
}
else //_scelta == prosegui_cal_stampa
{
if (! printer().isopen())
printer().open();
TFilename f;
f.temp("rgp");
_datareg = TDate(1, m, _annoes); // serve alla preprocess_header
if (_scelta == B0_settato || _scelta == prosegui_stampa)
{
if (_tipo_stampa == prova)
send_message('S',f, m);
else
send_message('s',f, m);
}
else //_scelta == prosegui_cal_stampa
{
if (_tipo_stampa == prova)
send_message('L', f, m);
else
send_message('l', f, m);
}
if (fexist(f))
{
_intesta_liq = true;
merge_export_file(f,false,true);
printer().formfeed();
_intesta_liq = false;
remove(f);
}
}
if (f.exist())
{
_intesta_liq = true;
merge_export_file(f,false,true);
printer().formfeed();
_intesta_liq = false;
remove(f);
}
}
}//for
}
@ -3315,7 +3531,8 @@ bool TStampa_registri_app::set_print(int n)
const TDate d(31,12,_annoes);
if (_data_a == d)
_tipo_riepilogativo = m.get(TIPO_RIEPILOGATIVO)[0];
else _tipo_riepilogativo = ' ';
else
_tipo_riepilogativo = ' ';
printer().setdate(_data_stampa);
}
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(codreg, 14);
row.put(format("%-.40s",(const char*)_tabreg->get("S0")), 18);
row.put(TR("Attivita\'"), 60);
row.put(TR("Attività"), 60);
if (_annoes > 2007)
{

View File

@ -38,7 +38,7 @@ class TStampa_registri_app : public TPrintapp
// TLocalisamfile *_clifo, *_occas, *_com, *_anag, *_unloc, *_attiv, *_indlib;
// TTable *_tablia, *_tabpim, *_tabprm, *_tabprp, *_table;
TTable *_tabreg;
TRigaiva_array _iva_array, _riga_rmi;
TRigaiva_array _iva_array, _riga_rmi, _riga_prospettoXcassa;
TTipodoc_array _doc_array;
TRiga_array _tot_iva_array, _tot_prec_iva_array;
TBit_array _selected;
@ -146,6 +146,10 @@ public:
void scrivi_reg(const TDate&);
int stampa_acquisti(int);
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 set_year(int y) { _annoes = y; }
void clear_stliq();

View File

@ -1,9 +1,12 @@
#include <recarray.h>
#include <relation.h>
#include "cg4501.h"
#include "cg4500a.h"
#include "cglib01.h"
#include <recarray.h>
#include <relation.h>
#include <tabutil.h>
class TAp_eser : public TSkeleton_application
{
int _anno, _newanno;
@ -26,7 +29,7 @@ public:
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)
{
@ -256,21 +259,21 @@ int cg4500 (int argc, char* argv[])
switch (toupper(*argv[2]))
{
case 'C':
{
TAp_eser a;
a.run(argc, argv, TR("Apertura nuovo esercizio"));
}
break;
{
TAp_eser a;
a.run(argc, argv, TR("Apertura nuovo esercizio"));
}
break;
case 'I':
{
TAp_iva a;
a.run(argc, argv, TR("Apertura nuovo esercizio IVA"));
}
break;
{
TAp_iva a;
a.run(argc, argv, TR("Apertura nuovo esercizio IVA"));
}
break;
default:
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 "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)
{
if ( (k == K_ENTER) && f.to_check(k) )
{
int annoiva = f.mask().get_int(F_ANNOIVA);
TConfig conf(CONFIG_DITTA);
int annoivap = conf.get_int("AnLiIv");
const int annoiva = f.mask().get_int(F_ANNOIVA);
const int annoivap = ini_get_int(CONFIG_DITTA, "cg", "AnLiIv");
if (annoivap > 0 && annoiva != 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();
}
bool TAp_iva::apertura_iva()
void TAp_iva::libro_unico()
{
TString16 annoiva;
TString16 codlia;
TDate data;
int annop = _annop;
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");
tablia.write();
}
//viene aggiornata la tabella del libro unico.
TRelation lbu("%LBU");
TRectype & tablbu = lbu.curr();
@ -78,9 +52,8 @@ bool TAp_iva::apertura_iva()
tablbu.put ("CODTAB", _annop);
cur.setregion(tablbu, tablbu);
items = cur.items();
cur.freeze();
for (cur = 0L; cur.pos() < items; ++cur)
{
TString16 cod(tablbu.get("CODTAB"));
@ -90,6 +63,46 @@ bool TAp_iva::apertura_iva()
tablbu.zero("I0");
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.
TRelation reg("REG");
@ -99,7 +112,7 @@ bool TAp_iva::apertura_iva()
TCursor cur_reg(&reg, "", 1, &tabreg, &tabreg);
items = cur_reg.items();
TRecnotype items = cur_reg.items();
cur_reg.freeze();
for (cur_reg = 0L; cur_reg.pos() < items; ++cur_reg)
{
@ -116,12 +129,12 @@ bool TAp_iva::apertura_iva()
cur_reg.freeze();
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))
{
TString16 cod = tabreg.get("CODTAB");
cod.overwrite(annoiva);
tabreg.put("CODTAB", cod);
tabreg.zero("I1");
tabreg.zero("I2");
@ -129,9 +142,9 @@ bool TAp_iva::apertura_iva()
tabreg.zero("I5");
tabreg.zero("I6");
tabreg.zero("S1");
tabreg.put("D0", data);
tabreg.put("D2", data);
tabreg.put("D3", data);
tabreg.zero("D0");
tabreg.zero("D2");
tabreg.zero("D3");
tabreg.zero("R1");
tabreg.zero("R2");
@ -153,7 +166,8 @@ bool TAp_iva::apertura_iva()
nditte.rewrite();
}
message_box(TR("Apertura nuovo esercizio IVA completata"));
return TRUE;
return true;
}
void TAp_iva::main_loop()

View File

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

View File

@ -2,15 +2,11 @@
// modifica parametri contabilita' relativi alla liquidazione
#include <config.h>
#include <currency.h>
#include <defmask.h>
#include <msksheet.h>
#include <prefix.h>
#include <relapp.h>
#include <relation.h>
#include <tabutil.h>
#include <recarray.h>
#include <utility.h>
#include "cg5.h"
#include "cg5300a.h"
@ -23,9 +19,9 @@
class TParaliq_app : public TRelation_application
{
TRelation * _rel;
TMask * _msk;
int _yearliq;
TRelation* _rel;
TMask* _msk;
int _yearliq;
protected: // Applicat
virtual void on_config_change();
@ -174,10 +170,10 @@ bool TParaliq_app::utcred_handler(TMask_field& f, KEY k)
const int anno_liq = m.get_int(F_YEAR);
TString80 cod_mesi;
TString des_mesi(128);
TString16 mese;
TList_field & mese_res = ((TList_field &) m.field(F_MESE_RES_AL));
TString8 mese;
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_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()
{
TConfig d(CONFIG_DITTA);
_yearliq = (int)d.get_long("AnLiIv");
_yearliq = ini_get_int(CONFIG_DITTA, "cg", "AnLiIv");
}
bool TParaliq_app::user_create()
@ -442,7 +437,8 @@ int TParaliq_app::rewrite(const TMask& m)
}
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;
if (!was) lia.zero();
m.autosave(*_rel);

View File

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

View File

@ -2,6 +2,7 @@
#include "cglib03.h"
#include <diction.h>
#include <dongle.h>
#include <recarray.h>
#include <mov.h>
@ -31,6 +32,7 @@ static int codind2tipodet(const TString & codind, real& perc)
}
return tipodet;
}
real indetraibile_al(const TString& codind, const TCausale& caus, int annodoc, int & tipodet,const bool is_liq)
{
real perc;
@ -105,6 +107,28 @@ int analizza_IVA(const real& imptot, const real& ivatot, const real perc_ind,
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,
// ora invece trattasi di un codice 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)
{
real percind;
const TString & codind = iva.get(RMI_TIPODET);
const TString& codind = iva.get(RMI_TIPODET);
const int tipodet = codind2tipodet(codind, percind);
const TString4 codiva = iva.get(RMI_CODIVA);
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);
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

View File

@ -685,9 +685,12 @@ TFieldtypes TSolder_tree::get_var(const TString& name, TVariant& var) const
} else
if (name == PART_DATADOC)
{
var = rpag.get(name);
if (var.is_zero())
var = rpag.get(PART_DATAREG);
TDate d = rpag.get(PART_DATAPAG);
if (!d.ok())
d = rpag.get(PART_DATADOC);
if (!d.ok())
d = rpag.get(PART_DATAREG);
var = d;
} else
if (rpag.TRectype::exist(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 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))
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 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))
pags.add((TRectype*)&pag);
}

View File

@ -1,3 +1,3 @@
171
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
IMPONIBILE|4|18|3|Imponibile
IMPOSTA|4|18|3|Imposta
VERSATA|4|18|3|Imposta Versata
CHIUSA|8|1|0|Partita chiusa
2
NUMREG+NUMRIG+NUMPRO|
ANNOLIQ+MESELIQ+DATAREGP|X