git-svn-id: svn://10.65.10.50/branches/R_10_00@22918 c028cbd2-c16b-5b4b-a496-9718f37d4682

This commit is contained in:
guy 2014-03-07 14:12:45 +00:00
parent b11c9705e4
commit d42478793d
23 changed files with 555 additions and 387 deletions

View File

@ -1677,7 +1677,7 @@ END
STRING F_CODCAUS 3 STRING F_CODCAUS 3
BEGIN BEGIN
PROMPT 41 11 "Causale contabile " PROMPT 43 11 "Causale contabile "
FIELD LF_CFVEN->CODCAUS FIELD LF_CFVEN->CODCAUS
USE LF_CAUSALI USE LF_CAUSALI
INPUT CODCAUS F_CODCAUS INPUT CODCAUS F_CODCAUS
@ -1703,7 +1703,7 @@ END
STRING F_CODCAUSINC 3 STRING F_CODCAUSINC 3
BEGIN BEGIN
PROMPT 41 12 "Causale contabile Anticipi " PROMPT 43 12 "Causale contabile Anticipi "
FIELD LF_CFVEN->CODCAUSINC FIELD LF_CFVEN->CODCAUSINC
USE LF_CAUSALI USE LF_CAUSALI
INPUT CODCAUS F_CODCAUSINC INPUT CODCAUS F_CODCAUSINC

View File

@ -127,12 +127,15 @@ int cg1300(int argc, char* argv[])
a.run(argc, argv, TR("Aggiornamento tipo conto")); // cg1302 a.run(argc, argv, TR("Aggiornamento tipo conto")); // cg1302
} }
break; break;
case 'Z':
elimina_zoppi(argc, argv);
break;
case 'M': case 'M':
setta_meseliq(argc, argv); setta_meseliq(argc, argv);
break; break;
case 'X':
xref_check(argc, argv);
break;
case 'Z':
elimina_zoppi(argc, argv);
break;
default: default:
break; break;
} }

View File

@ -3,3 +3,4 @@ void elimina_zoppi(int argc, char* argv[]);
void setta_meseliq(int argc, char* argv[]); void setta_meseliq(int argc, char* argv[]);
void controlla_PIVA(int argc, char* argv[]); void controlla_PIVA(int argc, char* argv[]);
void agg_iban(int argc, char* argv[]); void agg_iban(int argc, char* argv[]);
void xref_check(int argc, char* argv[]);

View File

@ -14,6 +14,7 @@
// Campi su file // Campi su file
#include <clifo.h> #include <clifo.h>
#include <cfven.h> #include <cfven.h>
#include <causali.h>
#include <rcausali.h> #include <rcausali.h>
// Campi su maschera // Campi su maschera
@ -734,6 +735,14 @@ bool TPrimanota_application::can_I_write(const TRelation* rel) const
return TRelation_application::can_I_write(rel); return TRelation_application::can_I_write(rel);
} }
const char* TPrimanota_application::record_description(const TRelation& rel) const
{
const TString& desc = cache().get(LF_CAUSALI, rel.curr().get(MOV_CODCAUS), CAU_DESCR);
if (desc.full())
return desc;
return TR("Movimento");
}
// Ritorna il prossimo numero di registrazione libero // Ritorna il prossimo numero di registrazione libero
// Certified 100% // Certified 100%
bool TPrimanota_application::get_next_key(TToken_string& tmp) bool TPrimanota_application::get_next_key(TToken_string& tmp)
@ -2315,11 +2324,11 @@ bool TPrimanota_application::link_intra(const TMask& m, const char* action)
bool TPrimanota_application::link_anal(const TMask& msk, const char* action) bool TPrimanota_application::link_anal(const TMask& msk, const char* action)
{ {
// Controlla autorizzazione // Controlla autorizzazione
if (!(has_module(CMAUT) || has_module(CAAUT))) if (!(has_module(CMAUT) || has_module(CAAUT) || has_module(CIAUT)))
return false; return false;
// Controlla flag sulla causale // Controlla flag sulla causale
if (!causale().link_analitica()) if (!(causale().link_analitica() || causale().link_industriale()))
return false; return false;
// Controlla l'esistenza del programma dei movimenti analitici // Controlla l'esistenza del programma dei movimenti analitici
@ -2387,6 +2396,8 @@ bool TPrimanota_application::link_anal(const TMask& msk, const char* action)
{ {
TConfig config(ini, "Transaction"); TConfig config(ini, "Transaction");
config.set("Action", action); config.set("Action", action);
if (has_module(CIAUT) && !has_module(CAAUT))
config.set("Mode", "A"); // Salva automaticamente i movimenti di sola industriale
TString4 para; para << LF_MOVANA; TString4 para; para << LF_MOVANA;
config.set_paragraph(para); config.set_paragraph(para);

View File

@ -191,6 +191,7 @@ protected: // TRelation_application
virtual void write_enable(bool) {} virtual void write_enable(bool) {}
virtual bool protected_record(TRectype& rec); virtual bool protected_record(TRectype& rec);
virtual bool can_I_write(const TRelation* rel) const; virtual bool can_I_write(const TRelation* rel) const;
virtual const char* record_description(const TRelation& rel) const;
protected: protected:
void check_saldi(); void check_saldi();

View File

@ -1099,7 +1099,51 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
row.add(sum.get(PART_TIPOMOV), 11); row.add(sum.get(PART_TIPOMOV), 11);
tot_lit += soc; tot_lit += soc;
} }
}
// Gli abbuoni e le differenze cambio esistono solo se e' a saldo
// NON sarebbe possibile, ma la contabilizzazione potrebbe mettere a saldo i non assegnati
if (pag.get_char(PAGSCA_ACCSAL) == 'S' || !pag.get_real(PAGSCA_ABBUONI).is_zero())
{
const TImporto abb(sez, pag.get_real(PAGSCA_ABBUONI));
if (!abb.is_zero())
{
const char tipo_abb = pag.get_char(PAGSCA_PASSATT);
TToken_string& rabb = gm.add_colored_row(sheet, tipo_abb);
rabb.add(tipo_abb == 'A' ? TR("Abbuoni attivi") : TR("Abbuoni passivi"), 4);
if (in_valuta)
{
TImporto abb_lit = abb;
prima_valuta.val2eur(abb_lit);
gm.add_importo(rabb, abb_lit);
gm.add_importo(rabb, abb, prima_valuta.codice());
tot_lit += abb_lit;
tot_val += abb;
}
else
{
gm.add_importo(rabb, abb);
rabb.add("");
tot_lit += abb;
}
rabb.add(sum.get(PART_TIPOMOV), 11);
}
/* Continuo a ritenre impossibile ... per ora
// Le differenze cambio possono esistere solo in valuta
if (in_valuta)
{
const TImporto diff(sez, pag.get_real(PAGSCA_DIFFCAM));
if (!diff.is_zero())
{
TToken_string& rdiff = gm.add_colored_row(sheet, 'C');
rdiff.add(TR("Differenza cambio"), 4);
gm.add_importo(rdiff, diff);
rdiff.add(sum.get(PART_TIPOMOV), 11);
}
}
*/
} // Il pagamento era a saldo
} // Fine ciclo non assegnati
if (lastrow > 0) if (lastrow > 0)
{ {
@ -1148,7 +1192,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
return FALSE; // Rifiuta l'aggiunta di una riga return FALSE; // Rifiuta l'aggiunta di una riga
} }
return TRUE; return true;
} }
bool TGame_mask::scadenze_notify(TSheet_field& scadenze, int r, KEY k) bool TGame_mask::scadenze_notify(TSheet_field& scadenze, int r, KEY k)
@ -1159,7 +1203,7 @@ bool TGame_mask::scadenze_notify(TSheet_field& scadenze, int r, KEY k)
gm.send_key(K_CTRL + 'N', 0, &scadenze); // Simula la pressione del tasto nuovo gm.send_key(K_CTRL + 'N', 0, &scadenze); // Simula la pressione del tasto nuovo
return FALSE; // Rifiuta l'aggiunta di una riga return FALSE; // Rifiuta l'aggiunta di una riga
} }
return TRUE; return true;
} }

View File

@ -92,7 +92,8 @@ class TMastrini_application : public TPrintapp
real _saldo_movimenti,_saldo_progressivi,_totale_saldo,_riporto_footer_dare,_riporto_footer_avere; real _saldo_movimenti,_saldo_progressivi,_totale_saldo,_riporto_footer_dare,_riporto_footer_avere;
TString _ragsoc,_indulc,_civulc,_capulc,_com,_prov,_comulc; TString _ragsoc,_indulc,_civulc,_capulc,_com,_prov,_comulc;
long _codice_ditta,_s_prec; long _codice_ditta,_s_prec;
TString _tipodoc,_codcaus,_descrcaus,_descrdociva,_regiva,_g_contr,_c_contr,_s_contr,_descrcontr,_numivd; TString4 _tipodoc,_codcaus,_regiva;
TString _descrcaus,_descrdociva,_g_contr,_c_contr,_s_contr,_descrcontr,_numivd;
char _sezivd,_lettivd; char _sezivd,_lettivd;
TString _descrizione,_sezione,_numdoc,_descrizionemov,_numrivd,_descr; TString _descrizione,_sezione,_numdoc,_descrizionemov,_numrivd,_descr;
TString _dataregs, _datadocs; TString _dataregs, _datadocs;
@ -1426,7 +1427,7 @@ bool TMastrini_application::preprocess_page(int file, int counter)
// Controlla se saldo e' diverso da 0 // Controlla se saldo e' diverso da 0
if (((_annoes == _annomsk) || (_annomsk == 0)) && (_totale_saldo != 0.0)) if (((_annoes == _annomsk) || (_annomsk == 0)) && (!_totale_saldo.is_zero()))
{ {
_sezione = rmov.get(RMV_SEZIONE); _sezione = rmov.get(RMV_SEZIONE);
@ -2163,8 +2164,7 @@ void TMastrini_application::stampa_totaliiva()
// sull'archivio CAUS.dta // sull'archivio CAUS.dta
void TMastrini_application::descrizione_causale() void TMastrini_application::descrizione_causale()
{ {
const TRectype & caus = cache().get(LF_CAUSALI, _codcaus); const TRectype& caus = cache().get(LF_CAUSALI, _codcaus);
_descrcaus = caus.get(CAU_DESCR); _descrcaus = caus.get(CAU_DESCR);
} }
@ -2188,14 +2188,14 @@ void TMastrini_application::documenti_iva()
void TMastrini_application::ricerca_regiva() void TMastrini_application::ricerca_regiva()
{ {
_tabreg->zero(); _tabreg->zero();
_tipo = 0;
if (_annoiva > 0 && _regiva.full()) if (_annoiva > 0 && _regiva.full())
{ {
TString8 dep; TString8 dep; dep.format("%04d%3s", _annoiva, (const char*)_regiva);
dep.format("%04d%3s", _annoiva, (const char*)_regiva);
_tabreg->put("CODTAB", dep); _tabreg->put("CODTAB", dep);
_tabreg->read(); if (_tabreg->read() == NOERR)
_tipo = _tabreg->get_int("I0");
} }
_tipo = _tabreg->get_int("I0");
} }
bool TMastrini_application::preprocess_print(int file, int counter) bool TMastrini_application::preprocess_print(int file, int counter)
@ -2366,7 +2366,7 @@ bool TMastrini_application::set_print(int m)
} }
enable_print_menu(); enable_print_menu();
enable_link("Collegamento prima nota: ", 'b'); enable_link(TR("Collegamento prima nota: "), 'b');
do do
print(); print();
@ -3699,10 +3699,10 @@ bool TMastrini_application::user_create()
_rel->add("CMS", "CODTAB==CODCMS", 1, LF_RMOV, 501); _rel->add("CMS", "CODTAB==CODCMS", 1, LF_RMOV, 501);
_rel->add("FSC", "CODTAB==FASCMS", 1, LF_RMOV, 502); _rel->add("FSC", "CODTAB==FASCMS", 1, LF_RMOV, 502);
_cur1=add_cursor(new TCursor(_rel,"FLSCA=\" \"",2)); _cur1=add_cursor(new TCursor(_rel, "FLSCA<=\" \"",2));
open_files(LF_TAB, LF_TABCOM,LF_NDITTE, LF_UNLOC, LF_COMUNI, LF_MOV, open_files(LF_TAB, LF_TABCOM,LF_NDITTE, LF_UNLOC, LF_COMUNI, LF_MOV,
LF_CLIFO, LF_CAUSALI, 0); LF_CLIFO, LF_CAUSALI, 0);
_cur2=add_cursor(new TSorted_cursor(_rel,"DESCR","FLSCA=\" \"",2)); _cur2=add_cursor(new TSorted_cursor(_rel, "DESCR","FLSCA<=\" \"",2));
_tabivd = new TTable (TAB_IVD); _tabivd = new TTable (TAB_IVD);
_tabtpd = new TTable (TAB_TPD); _tabtpd = new TTable (TAB_TPD);

View File

@ -662,8 +662,6 @@ int TStampa_giornale::set_headers()
{ {
int r=1; int r=1;
TString riga(_stampa_width); TString riga(_stampa_width);
TString16 data_da = _data_da.string();
TString16 data_a = _data_a.string();
if (_stampa_intesta || !_stampa_definitiva) if (_stampa_intesta || !_stampa_definitiva)
r = stampa_intestazione_ditta(); r = stampa_intestazione_ditta();
@ -673,6 +671,9 @@ int TStampa_giornale::set_headers()
if (_stampa_definitiva) if (_stampa_definitiva)
set_header(r++, FR("Codice libro: %s %s "),(const char *) _reg_cod, (const char *) _reg_descr); set_header(r++, FR("Codice libro: %s %s "),(const char *) _reg_cod, (const char *) _reg_descr);
else else
{
const TString16 data_da = _data_da.string();
const TString16 data_a = _data_a.string();
set_header(r++, FR("Codice libro: %s %s @%dgdalla data: %s alla data: %s @%dgEsercizio: %04d"), set_header(r++, FR("Codice libro: %s %s @%dgdalla data: %s alla data: %s @%dgEsercizio: %04d"),
(const char *) _reg_cod, (const char *) _reg_descr, (const char *) _reg_cod, (const char *) _reg_descr,
_stampa_width == 132 ? 69 : 135, _stampa_width == 132 ? 69 : 135,
@ -680,6 +681,7 @@ int TStampa_giornale::set_headers()
_stampa_width == 132 ? 117 : 183, _stampa_width == 132 ? 117 : 183,
_ae _ae
); );
}
riga.fill('-'); riga.fill('-');
set_header(r++, riga); set_header(r++, riga);
@ -736,6 +738,7 @@ void TStampa_giornale::preprocess_header()
const int anno = esc[esercizio].inizio().year(); //anno finale dell'esercizio const int anno = esc[esercizio].inizio().year(); //anno finale dell'esercizio
TString16 numpag, riga; TString16 numpag, riga;
numpag.format("%d/%d", anno, _pagina_da+pag); numpag.format("%d/%d", anno, _pagina_da+pag);
//numpag.format("%d/%d", esercizio, _pagina_da+pag); // Mediapadania 2013
const int tab = _stampa_width - numpag.len(); const int tab = _stampa_width - numpag.len();
riga.format("@%dg%s", tab, (const char*)numpag); riga.format("@%dg%s", tab, (const char*)numpag);
set_header(2, riga); // Sempre quasi sulla prima riga! set_header(2, riga); // Sempre quasi sulla prima riga!

View File

@ -106,55 +106,63 @@ bool CG4100_App::sort_sal()
{ {
if (!prnd.addstatus(1)) if (!prnd.addstatus(1))
break; break;
if (_year == rmov.get_int(RMV_ANNOES)) if (_year != rmov.get_int(RMV_ANNOES))
continue;
numreg = rmov.get_long(RMV_NUMREG);
gruppo = rmov.get_int(RMV_GRUPPO);
conto = rmov.get_int(RMV_CONTO);
sottoconto = rmov.get_long(RMV_SOTTOCONTO);
bool scaricato = false;
if (numreg != oldnumreg)
{ {
numreg = rmov.get_long(RMV_NUMREG); if (sal.items() > 0)
gruppo = rmov.get_int(RMV_GRUPPO);
conto = rmov.get_int(RMV_CONTO);
sottoconto = rmov.get_long(RMV_SOTTOCONTO);
bool scaricato = FALSE;
if (numreg != oldnumreg)
{ {
if (sal.items() > 0) sal.registra();
{ sal.reset();
sal.registra();
sal.reset();
}
oldnumreg = numreg;
mov.zero();
mov.put(MOV_NUMREG, numreg);
mov.read();
CHECK(mov.good(),"Archivi movimenti e righe inconsistenti");
// Tipo saldo normale per default
tsal = normale;
const TString& codcaus = mov.get(MOV_CODCAUS);
const TRectype& causale = cache().get(LF_CAUSALI, codcaus);
if (!causale.empty())
{
const char ac = causale.get_char(CAU_MOVAP);
if (ac == 'A')
tsal = apertura; else
if (ac == 'C')
tsal = chiusura;
}
scaricato = mov.get_bool(MOV_SCARCON);
provvis = mov.get(MOV_PROVVIS).not_empty();
datareg = mov.get_date(MOV_DATAREG);
sal.set_anno_es(_year);
sal.set_tipo_saldo(tsal);
sal.set_movprovv(provvis);
sal.set_data_ulmov(datareg);
sal.set_num_ulmov(oldnumreg);
} }
const char sezione = rmov.get(RMV_SEZIONE)[0]; oldnumreg = numreg;
const real importo = rmov.get(RMV_IMPORTO); mov.zero();
mov.put(MOV_NUMREG, numreg);
mov.read();
CHECK(mov.good(),"Archivi movimenti e righe inconsistenti");
sal.aggiorna(gruppo, conto, sottoconto, importo, sezione, TRUE, scaricato); // Tipo saldo normale per default
tsal = normale;
const TString& codcaus = mov.get(MOV_CODCAUS);
const TRectype& causale = cache().get(LF_CAUSALI, codcaus);
if (!causale.empty())
{
const char ac = causale.get_char(CAU_MOVAP);
if (ac == 'A')
tsal = apertura; else
if (ac == 'C')
tsal = chiusura;
}
scaricato = mov.get_bool(MOV_SCARCON);
provvis = mov.get(MOV_PROVVIS).not_empty();
datareg = mov.get_date(MOV_DATAREG);
sal.set_anno_es(_year);
sal.set_tipo_saldo(tsal);
sal.set_movprovv(provvis);
sal.set_data_ulmov(datareg);
sal.set_num_ulmov(oldnumreg);
}
const char sezione = rmov.get(RMV_SEZIONE)[0];
const real importo = rmov.get(RMV_IMPORTO);
if (!importo.is_zero())
{
if (gruppo <= 0 || conto <= 0 || sottoconto <= 0)
{
warning_box(FR("Conto non valido alla riga %d nel movimento %ld"), rmov.get_int(RMV_NUMRIG), numreg);
continue;
}
sal.aggiorna(gruppo, conto, sottoconto, importo, sezione, true, scaricato);
} }
} }

View File

@ -79,13 +79,12 @@ const real& _ProrataItem::percentuale(const char* year) const
inline TLiquidazione_app& app() inline TLiquidazione_app& app()
{ return (TLiquidazione_app&)main_app(); } { return (TLiquidazione_app&)main_app(); }
TLiquidazione_app::TLiquidazione_app(int m) : TLiquidazione_app::TLiquidazione_app(int m)
_ditte(NULL), _selected(16), : _ditte(NULL), _selected(16), _nomiditte(16), _menu(m), _firm_bookmark(-1)
_year(4), _nomiditte(100), _menu(m), _firm_bookmark(-1)
{ {
_isprint = _is_interactive = _canprint = true; _isprint = _is_interactive = _canprint = true;
_isplafond = _printonly = _is_visliq = false; _isplafond = _printonly = _is_visliq = false;
_isvent = _isagricolo = _isbenzinaro = _isviaggio = _isdiff = false; _isvent = _isagricolo = _isbenzinaro = _isviaggio = _isdiff = _isdiffacc = false;
_row = 1; _what = all; _comp_acconto = false; _row = 1; _what = all; _comp_acconto = false;
_isriepilogo = false; _calcall = false; _isriepilogo = false; _calcall = false;
_recalc_only = _recalc_regis = _isfinal = _isregis = false; _recalc_only = _recalc_regis = _isfinal = _isregis = false;
@ -121,11 +120,7 @@ bool TLiquidazione_app::user_create()
#endif #endif
TProgind* pnd = NULL; TProgress_monitor pnd(3, TR("Preparazione archivi"), false);
if (_is_interactive)
pnd = new TProgind (3,TR("Preparazione archivi"), false, true);
else
begin_wait();
_nditte = new TRelation(LF_NDITTE); _nditte = new TRelation(LF_NDITTE);
_nditte->add(LF_ATTIV,"CODDITTA=CODDITTA"); _nditte->add(LF_ATTIV,"CODDITTA=CODDITTA");
@ -179,8 +174,7 @@ bool TLiquidazione_app::user_create()
is_header = subj.items() == 8; is_header = subj.items() == 8;
printer().formlen(bodylen); printer().formlen(bodylen);
} }
pnd.add_status(1);
if(pnd) pnd->addstatus(1);
_rel = new TRelation(LF_MOV); _rel = new TRelation(LF_MOV);
_rel->add(LF_RMOVIVA,"NUMREG=NUMREG"); _rel->add(LF_RMOVIVA,"NUMREG=NUMREG");
@ -309,15 +303,15 @@ bool TLiquidazione_app::user_create()
__firm = TApplication::get_firm(); __firm = TApplication::get_firm();
if (pnd) pnd->addstatus(1); pnd.add_status(1);
if (_is_interactive) if (_is_interactive)
{ {
build_nomiditte(pnd); build_nomiditte();
build_ditte_sheet(all); build_ditte_sheet(all);
} }
if (pnd) pnd->addstatus(1); pnd.add_status(1);
TApplication::set_firm(__firm); TApplication::set_firm(__firm);
set_real_picture(REAL_PICTURE); set_real_picture(REAL_PICTURE);
@ -338,7 +332,7 @@ bool TLiquidazione_app::user_create()
TApplication::set_firm(ditta); TApplication::set_firm(ditta);
if (!look_lia()) if (!look_lia())
{ end_wait(); return FALSE; } { end_wait(); return false; }
TIva_round ir; // Imposta arrotondamento iva TIva_round ir; // Imposta arrotondamento iva
ir.set_default_iva_mode(atoi(_year), _month > 12, ditta); ir.set_default_iva_mode(atoi(_year), _month > 12, ditta);
@ -415,11 +409,8 @@ bool TLiquidazione_app::user_create()
} }
TApplication::set_firm(__firm); TApplication::set_firm(__firm);
end_wait();
user_destroy(); user_destroy();
} }
else
delete pnd;
return _is_interactive; return _is_interactive;
} }
@ -620,7 +611,7 @@ bool TLiquidazione_app::ch_year_handler(TMask_field& f, KEY key)
return true; return true;
} }
void TLiquidazione_app::build_nomiditte(TProgind* pnd) void TLiquidazione_app::build_nomiditte()
{ {
_nomiditte.destroy(); _nomiditte.destroy();
// ricostruire _nomiditte e rifare build_ditte_sheet // ricostruire _nomiditte e rifare build_ditte_sheet
@ -657,8 +648,6 @@ void TLiquidazione_app::build_nomiditte(TProgind* pnd)
} }
_nomiditte.add(d); _nomiditte.add(d);
} }
if (pnd)
pnd->addstatus(1);
} }
bool TLiquidazione_app::to_ditt_handler(TMask_field& f, KEY key) bool TLiquidazione_app::to_ditt_handler(TMask_field& f, KEY key)

View File

@ -448,8 +448,7 @@ protected:
static TLiquidazione_app& app() { return (TLiquidazione_app&)main_app(); } static TLiquidazione_app& app() { return (TLiquidazione_app&)main_app(); }
bool residuo_da_liquidare(long numreg, int numrig, const TDate& last_pag, bool residuo_da_liquidare(const TRectype& lastid, 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, int tipoiva); bool print_inc_diff_log(int& rw, int tipoatt, int tipoiva);
bool print_dainc_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 ivadiff_chiusa(const TRectype& mov, const TDate& fine) const;
@ -467,7 +466,7 @@ public:
void build_ditte_sheet(wht); void build_ditte_sheet(wht);
void reset_choices(TMask&); void reset_choices(TMask&);
void set_choice_limits(TMask&); void set_choice_limits(TMask&);
void build_nomiditte(TProgind* pnd = NULL); void build_nomiditte();
void set_year(const char* y) { _year = y; } void set_year(const char* y) { _year = y; }
void set_month(const int m) { _month = m; } void set_month(const int m) { _month = m; }
@ -555,7 +554,7 @@ public:
// 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 is_differita(long firm = 0, int year = 0); bool is_acconto_differito(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
@ -587,7 +586,7 @@ public:
void set_firm(_DescrItem& d); void set_firm(_DescrItem& d);
void set_att(_DescrItem& d); void set_att(_DescrItem& d);
void set_pim(_DescrItem& d); void set_pim(_DescrItem& d);
void set_pumpam(_DescrItem& d); void set_pumpam(const _DescrItem& d);
void set_plm_diff(const _DescrItem& d); void set_plm_diff(const _DescrItem& d);
void set_plm(_DescrItem& d); void set_plm(_DescrItem& d);
bool set_annual(_DescrItem& d); bool set_annual(_DescrItem& d);
@ -645,18 +644,18 @@ public:
// da prendere in considerazione per la liquidazione // da prendere in considerazione per la liquidazione
// controllando il regime trimestrale o mensile e // controllando il regime trimestrale o mensile e
// il ricalcolo annuale // il ricalcolo annuale
bool is_month_ok(int x, int mtocalc); bool is_month_ok(int x, int mtocalc) const;
// is_month_ok_strict controlla che il mese sia OK per la // is_month_ok_strict controlla che il mese sia OK per la
// liquidazione, ma ritorna TRUE per le trimestrali solo // liquidazione, ma ritorna TRUE per le trimestrali solo
// se il mese cade ESATTAMENTE su un trimestre // se il mese cade ESATTAMENTE su un trimestre
bool is_month_ok_strict(int x, int month = -1); bool is_month_ok_strict(int x, int month = -1) const;
// questa e' la piu' semplice, per vedere se devo // questa e' la piu' semplice, per vedere se devo
// calcolare il mese fottendomene dell'annuale // calcolare il mese fottendomene dell'annuale
bool is_month_plain(int x); bool is_month_plain(int x) const;
// questa serve per i progressivi: la data passata va bene // questa serve per i progressivi: la data passata va bene
// se il movimento deve essere considerato in calcolo e riepilogo // se il movimento deve essere considerato in calcolo e riepilogo
// per la liquidazione di month // per la liquidazione di month
bool is_date_ok (const TDate& d, int month, int liqmonth, int year); bool is_date_ok (const TDate& d, int month, int liqmonth, int year) const;
bool is_in_liq_period(const TDate& d); bool is_in_liq_period(const TDate& d);
bool is_first_month (int m); bool is_first_month (int m);
int liq_month(int x); int liq_month(int x);
@ -689,7 +688,7 @@ public:
// cippiuppiu' // cippiuppiu'
TLiquidazione_app(int men); TLiquidazione_app(int men);
virtual ~TLiquidazione_app() {}
}; };

View File

@ -23,6 +23,7 @@ NUMBER CG43_FLD_ANNO 4
BEGIN BEGIN
PROMPT 28 2 "Anno " PROMPT 28 2 "Anno "
HELP "Anno per cui effettuare il calcolo" HELP "Anno per cui effettuare il calcolo"
FLAGS "Z"
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END

View File

@ -36,15 +36,19 @@ bool TLiquidazione_app::recalc_all()
TString msg; TString msg;
msg = _printonly ? TR("Stampa") : TR("Calcolo"); msg = _printonly ? TR("Stampa") : TR("Calcolo");
msg << TR(" liquidazione:\npreparazione archivi..."); msg << TR(" liquidazione:\npreparazione archivi...");
_prind = new TProgind(_selected.ones()*2, msg, true, true); const int nSel = _selected.ones();
if (nSel > 1)
_prind = new TProgind(nSel, msg, true, true);
else
_prind = new TProgind(1, msg, false, false);
for (int l = 0; l < _ditte->items(); l++) for (int l = 0; l < _ditte->items(); l++)
{ {
if (_prind->iscancelled())
break;
if (_selected[(long)l]) if (_selected[(long)l])
{ {
if (!_prind->addstatus(1))
break;
TToken_string& nomeditta = _ditte->row(l); TToken_string& nomeditta = _ditte->row(l);
const long codditta = nomeditta.get_long(1); const long codditta = nomeditta.get_long(1);
const int save_month = _month; const int save_month = _month;
@ -87,8 +91,7 @@ bool TLiquidazione_app::recalc_all()
TIva_round ir; TIva_round ir;
ir.set_default_iva_mode(atoi(_year), _isannual, codditta); ir.set_default_iva_mode(atoi(_year), _isannual, codditta);
_prind->addstatus(1);
/* /*
* trimestrali impropriamente selezionate per mesi intermedi * trimestrali impropriamente selezionate per mesi intermedi
* provocano il ricalcolo dei progressivi mensili ma non la stampa * provocano il ricalcolo dei progressivi mensili ma non la stampa
@ -120,11 +123,7 @@ bool TLiquidazione_app::recalc_all()
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;
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
@ -140,13 +139,12 @@ bool TLiquidazione_app::recalc_all()
_month = save_month; _month = save_month;
} }
} }
bool canc = _prind->iscancelled(); const bool good = _prind->addstatus(1);
if (!canc) _prind->addstatus(1);
TApplication::set_firm(__firm); TApplication::set_firm(__firm);
delete _prind; _prind = NULL; delete _prind; _prind = NULL;
return !canc; return good;
} }
bool TLiquidazione_app::update_firm(int month, bool recalc) bool TLiquidazione_app::update_firm(int month, bool recalc)
@ -171,9 +169,9 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
} }
} }
look_lim(liq_month(month), TRUE); look_lim(liq_month(month), true);
_isdiffacc = is_differita(); // Gestione differimento acconto IVA _isdiffacc = is_acconto_differito(); // Gestione differimento acconto IVA
_isdifferita = _isdiffacc; _isdifferita = _isdiffacc; // Gestione IVA differita con stesso flag!
look_lia(); look_lia();
_isintr = _freqviva == "T" && !_lia->get_bool("B3"); // was CNF_DITTA->InTrtr _isintr = _freqviva == "T" && !_lia->get_bool("B3"); // was CNF_DITTA->InTrtr
@ -358,7 +356,7 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
// se attività mista stampa riepilogo // se attività mista stampa riepilogo
if (_mixed && month == _month && riepliq) if (_mixed && month == _month && riepliq)
describe_att(month,cattivs, TRUE, 'M'); describe_att(month,cattivs, true, 'M');
// se sta calcolando l'annuale, scrive tutti i dati calcolati per il trasferimento // se sta calcolando l'annuale, scrive tutti i dati calcolati per il trasferimento
// sui files adibiti a mantenere le informazioni per IVA 11: tab1100a e tab1100b // sui files adibiti a mantenere le informazioni per IVA 11: tab1100a e tab1100b
@ -506,7 +504,8 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
{ {
TTable * tab = (TTable*) arr[i]; TTable * tab = (TTable*) arr[i];
CHECK(tab, "Invalid table element"); CHECK(tab, "Invalid table element");
for (tab->first(); !tab->eof(); tab->next()) // Ciclo per i record di tabella tab->zero(); tab->put("CODTAB", _year);
for (int err = tab->read(_isgteq); err == NOERR; err = tab->next()) // Ciclo per i record di tabella
{ {
codtab = tab->get("CODTAB"); codtab = tab->get("CODTAB");
m = atoi(codtab.mid(13,2)); m = atoi(codtab.mid(13,2));
@ -526,7 +525,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
const TString16 codtab(_plm->get("CODTAB")); const TString16 codtab = _plm->get("CODTAB");
_plm->zero(); _plm->zero();
_pom->zero(); _pom->zero();
_pam->zero(); _pam->zero();
@ -560,7 +559,7 @@ 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 && !_recalc_regis) // Aggiunto test per evitare azzeramenti in stampa registri 19-06-2013 if (!_recalc_regis) // Aggiunto test per evitare azzeramenti in stampa registri 19-06-2013
zero_diff(month,codatt); zero_diff(month,codatt);
} }
@ -569,7 +568,8 @@ bool TLiquidazione_app::ivadiff_chiusa(const TRectype& mov, const TDate& fine) c
const long numreg = mov.get_long(MOV_NUMREG); const long numreg = mov.get_long(MOV_NUMREG);
TString query; TString query;
query << "USA IVADIFF SELECT BETWEEN(DATAREGP,0," << fine.date2ansi() << ')' query << "USE IVADIFF"
<< "\nSELECT BETWEEN(DATAREGP,0," << fine.date2ansi() << ")"
<< "\nFROM NUMREG=" << numreg << "\nFROM NUMREG=" << numreg
<< "\nTO NUMREG=" << numreg; << "\nTO NUMREG=" << numreg;
TISAM_recordset id(query); TISAM_recordset id(query);
@ -648,19 +648,21 @@ bool TLiquidazione_app::sarebbe_da_pagare(const TRectype& mov, const TDate& fine
return false; return false;
} }
bool TLiquidazione_app::residuo_da_liquidare(long numreg, int numrig, const TDate& last_pag, bool TLiquidazione_app::residuo_da_liquidare(const TRectype& lastid, real& importo_res, real& imponib_res, real& imposta_res) const
real& importo_res, real& imponib_res, real& imposta_res) const
{ {
const long numreg = lastid.get_long(RMI_NUMREG);
const int numrig = lastid.get_int(RMI_NUMRIG);
CHECKD(numreg > 0 && numrig > 0, "Numero registrazione non valido ", numreg); CHECKD(numreg > 0 && numrig > 0, "Numero registrazione non valido ", numreg);
const long lastpro = lastid.get_long("NUMPRO");
bool found = false; bool found = false;
if (!found) if (!found) // dummy bracketing test
{ {
TString query; TString query;
query << "USE " << LF_IVADIFF query << "USE IVADIFF"
<< "\nFROM NUMREG=" << numreg << " NUMRIG=" << numrig << "\nFROM NUMREG=" << numreg << " NUMRIG=" << numrig
<< "\nTO NUMREG=" << numreg << " NUMRIG=" << numrig; << "\nTO NUMREG=" << numreg << " NUMRIG=" << numrig;
TISAM_recordset id(query); TISAM_recordset id(query);
found = id.items() >= 2; // riga fattura ed almeno un pagamento o nota di credito found = id.items() >= 2; // riga fattura ed almeno un pagamento o nota di credito
if (found) if (found)
@ -669,22 +671,13 @@ 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 tipo_movimento tipomov = (tipo_movimento)id.get(PART_TIPOMOV).as_int(); const long numpro = id.get("NUMPRO").as_int();
if (tipomov <= tm_nota_credito || !last_pag.ok()) if (numpro != lastpro)
{ {
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 += TImporto(sez, id.get(RMI_IMPOSTA).as_real()); imposta += TImporto(sez, id.get(RMI_IMPOSTA).as_real());
} }
else
{
const TDate data_pag = id.get("DATAREGP").as_date();
if (data_pag >= last_pag)
continue;
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());
}
} }
bool is_good = imponib.valore() > ZERO; bool is_good = imponib.valore() > ZERO;
@ -730,6 +723,70 @@ static bool partita_chiusa_al(const TPartita& p, const TDate& d)
return c; return c;
} }
static void LOG_IVA_DIFF(const TRectype& id)
{
#ifndef NDEBUG
static FILE* file[3] = { NULL, NULL, NULL };
if (id.get_int(PART_TIPOMOV) < 3)
return;
int nf = 0;
if (id.get_int("TIPOIVA") == 2) // Acquisti
nf += 2;
else
nf += id.get_int("TIPODIFF") == 1; // Differita
FILE*& f = file[nf];
if (f == NULL)
{
const char* name = NULL;
switch (nf)
{
case 0: name = "IVA_Ven_xCas.log"; break;
case 1: name = "IVA_Ven_Diff.log"; break;
case 2: name = "IVA_Acq_xCas.log"; break;
default: break;
}
fopen_s(&f, name, "w");
if (f == NULL)
{
cantwrite_box(name);
fopen_s(&f, name, "w");
}
if (f != NULL)
fprintf(f, "NUMREG\tNUMRIG\tNUMPRO\tNUMREGP\tDATAPAG\t \tGen\tFeb\tMar\tApr\tMag\tGiu\tLug\tAgo\tSet\tOtt\tNov\tDic\n");
}
if (f != NULL)
{
TToken_string msg(255, '\t');
msg.add(id.get(RMI_NUMREG));
msg.add(id.get(RMI_NUMRIG));
msg.add(id.get("NUMPRO"));
msg.add(id.get("NUMREGP"));
msg.add(id.get("DATAREGP"));
for (int i = id.get_int("MESELIQ"); i > 0; i--)
msg.add(" ");
msg.add(id.get_real(RMI_IMPOSTA).stringa(0,2));
fprintf(f, "%s\n", (const char*)msg);
}
#endif
}
static bool is_autofattura_articolo_17(const TRectype& mov)
{
// E' giusto prendere il tipo documento dal movimento senza fidarsi della causale? si.
bool af = mov.get(MOV_TIPODOC) == "AF"; // Semplice autofattura (Adesso il tipocr==4 non c'entra piu' un tubo)
// Dal 24-02-2014 controlliamo meglio
if (af)
{
TString8 key;
key << mov.get(MOV_TIPO) << '|' << mov.get(MOV_CODCF);
const int tp = atoi(cache().get(LF_CLIFO, key, CLI_ALLEG));
af = tp == 5 || tp == 9; // cliente estero CEE o non CEE
}
return af;
}
void TLiquidazione_app::recalc_att(int month, const char* codatt) void TLiquidazione_app::recalc_att(int month, const char* codatt)
// il codatt passato e' codice att + tipo att ( IN {1|2} ) // il codatt passato e' codice att + tipo att ( IN {1|2} )
// occhecasino. Se _comp_acconto e' TRUE, i movimenti considerati // occhecasino. Se _comp_acconto e' TRUE, i movimenti considerati
@ -844,9 +901,9 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
// ma con anno documento precedente. Di conseguenza per un corretto calcolo prorata // ma con anno documento precedente. Di conseguenza per un corretto calcolo prorata
// e' necessario distinguire gli importi, appunto, per anno. // e' necessario distinguire gli importi, appunto, per anno.
// Questo nuovo calcolo prorata, vale solo per gli anni oltre il 1998. // Questo nuovo calcolo prorata, vale solo per gli anni oltre il 1998.
TAssoc_array acq_iva_anni_prec; TAssoc_array acq_iva_anni_prec;
TTable *arr[4] = { _pim, _pis, _prm, _prp }; //Tabelle con la stessa struttura TTable *arr[4] = { _pim, _pis, _prm, _prp }; //Tabelle con la stessa struttura
const int year_int = atoi(_year); // Basta con le atoi()... const int year_int = atoi(_year); // Basta con le atoi()...
@ -896,7 +953,6 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
} }
} }
//TDate f(1, month == 13 ? 1 : month, year_int);
const TDate fromdate(1, month == 13 ? 1 : month, year_int); const TDate fromdate(1, month == 13 ? 1 : month, year_int);
TDate t; TDate t;
TDate f74; TDate f74;
@ -908,8 +964,6 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (_isviaggio) if (_isviaggio)
f74 = TDate(1, 1, year_int-1); f74 = TDate(1, 1, year_int-1);
// if (_isdiff)
// f = TDate(1, 1, year_int-5);
if (year_int < 1998 || _recalc_regis) // Vecchia selezione o calcolo progressivi per stampa registri bollati if (year_int < 1998 || _recalc_regis) // Vecchia selezione o calcolo progressivi per stampa registri bollati
{ {
t.set_month(month == 13 ? 12 : month); t.set_month(month == 13 ? 12 : month);
@ -950,7 +1004,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
*_cur = 0; *_cur = 0;
TString16 trueatt(codatt); TString8 trueatt(codatt);
const int tipatt = trueatt[5] - '0'; const int tipatt = trueatt[5] - '0';
trueatt.cut(5); trueatt.cut(5);
@ -977,9 +1031,11 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (tipodoc == "NC") if (tipodoc == "NC")
tm = tm_nota_credito; tm = tm_nota_credito;
} }
if (_mov->get_long(MOV_NUMREG) == 29103) #ifndef NDEBUG
if (_mov->get_long(MOV_NUMREG) == 14281)
int cazzone = 1; int cazzone = 1;
#endif
if (_isviaggio) if (_isviaggio)
{ {
@ -994,7 +1050,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const bool cau_valintra = rcs.get_bool(CAU_VALINTRA); const bool cau_valintra = rcs.get_bool(CAU_VALINTRA);
// Inizio gestione IVA differita // Inizio gestione IVA differita
const bool iva_diff = _isdiff && _mov->get_bool(MOV_LIQDIFF); const bool iva_diff = _mov->get_bool(MOV_LIQDIFF);
const bool iva_cass = !iva_diff && _mov->get_bool(MOV_IVAXCASSA) && tm > 0; const bool iva_cass = !iva_diff && _mov->get_bool(MOV_IVAXCASSA) && tm > 0;
const bool movdiff = (iva_diff || iva_cass) && !_recalc_regis; // Aggiunto test su ricalcolo da registri 13-12-2012 const bool movdiff = (iva_diff || iva_cass) && !_recalc_regis; // Aggiunto test su ricalcolo da registri 13-12-2012
bool dok = is_date_ok(date, month, liqmonth, year_int); bool dok = is_date_ok(date, month, liqmonth, year_int);
@ -1018,11 +1074,26 @@ 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 && !ivadiff_chiusa(_mov->curr(), fine)) if (game_found && !ivadiff_chiusa(_mov->curr(), inizio)) // 25-02-2014 sostituito inizio al posto di 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 (pagscatt.items() >= 2)
{
// Fondo righe generate dallo stesso pagamento
for (int p = pagscatt.last(); p > 0; p--)
{
const TRectype& p0 = (const TRectype&)pagscatt[p];
const TRectype& p1 = (const TRectype&)pagscatt[p-1];
if (p0.get_int(PAGSCA_NRIGP) == p1.get_int(PAGSCA_NRIGP))
{
const real imp = p0.get_real(PAGSCA_IMPORTO);
((TRectype&)p1).add(PAGSCA_IMPORTO, imp);
pagscatt.destroy(p, true);
}
}
}
if (sarebbe_da_pagare(_mov->curr(), fine)) if (sarebbe_da_pagare(_mov->curr(), fine))
{ {
rp.calcola_pagato_periodo(TDate(0L), fine, pg, nc, NULL); rp.calcola_pagato_periodo(TDate(0L), fine, pg, nc, NULL);
@ -1128,11 +1199,21 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real nin_imp = ZERO; // imponibile non incassati real nin_imp = ZERO; // imponibile non incassati
real nin_iva = ZERO; // imposta non incassati real nin_iva = ZERO; // imposta non incassati
look_iva(_rmoviva->get(RMI_CODIVA)); const TString4 codiva = _rmoviva->get(RMI_CODIVA);
const TString4 codiva = _iva->get("CODTAB"); if (!look_iva(codiva))
{
error_box(FR("Codice IVA \"%s\" non riconosciuto alla riga %d del movimento %ld."),
(const char*)codiva, _rmoviva->get_int(RMI_NUMRIG), _rmoviva->get_long(RMI_NUMREG));
continue;
}
else
{
CHECKS(codiva == _iva->get("CODTAB"), "Codice IVA simile ", (const char*)codiva);
}
const TString4 tipoiva = _iva->get("S1"); const TString4 tipoiva = _iva->get("S1");
const TString8 tipoes_v = _iva->get("S2"); const TString4 tipoes_v = _iva->get("S2");
const TString8 tipoes_a = _iva->get("S9"); const TString4 tipoes_a = _iva->get("S9");
const int tipoagr = _iva->get_int("S4"); const int tipoagr = _iva->get_int("S4");
const int tipoag = _iva->get_int("S5"); const int tipoag = _iva->get_int("S5");
const int tipopla = _iva->get_int("S3"); const int tipopla = _iva->get_int("S3");
@ -1144,9 +1225,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const int tipocr = atoi(tipocr_s); const int tipocr = atoi(tipocr_s);
const bool intra = _rmoviva->get_bool(RMI_INTRA); const bool intra = _rmoviva->get_bool(RMI_INTRA);
// autofatture art. 17 per non residenti, con trattamento // autofatture art. 17 per non residenti, con trattamento speciale in liquidazione annuale
// speciale in liquidazione annuale const bool autodafe = is_autofattura_articolo_17(_mov->curr());
const bool autodafe = tipodoc == "AF"; //Adesso il tipocr==4 non c'entra piu' un tubo
// vendite art. 40 c. 5/6/8 acq.intra., con trattamento // vendite art. 40 c. 5/6/8 acq.intra., con trattamento
// speciale in liquidazione annuale (VA7 in stampa) // speciale in liquidazione annuale (VA7 in stampa)
const bool art40 = (tipodoc != "AF" && tipoiva != "NS" && !rcs.get_bool("AUTOFATT") && rcs.get_bool("VALINTRA") && !intra); const bool art40 = (tipodoc != "AF" && tipoiva != "NS" && !rcs.get_bool("AUTOFATT") && rcs.get_bool("VALINTRA") && !intra);
@ -1183,6 +1263,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
CHECKD(rmi_tipoatt > 0, "Invalid tipo att ", rmi_tipoatt); 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 = datareg.month();
if (_freqviva[0] == 'T') if (_freqviva[0] == 'T')
{ {
@ -1190,11 +1271,12 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (resto > 0) if (resto > 0)
mesereg += 3-resto; mesereg += 3-resto;
} }
id.put("MESELIQ", mesereg); id.put("MESELIQ", mesereg);
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);
id.put(MOV_DATAREG, _mov->get(MOV_DATADOC)); id.put(MOV_DATAREG, _mov->get(MOV_DATADOC));
id.put(RMI_CODIVA, _rmoviva->get(RMI_CODIVA)); id.put(RMI_CODIVA, codiva);
id.put("SEZIONE", sezfat); id.put("SEZIONE", sezfat);
id.put("IMPORTO", imponibile_orig+imposta_orig); id.put("IMPORTO", imponibile_orig+imposta_orig);
@ -1221,22 +1303,33 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const real totfat = _mov->get(MOV_TOTDOC); const real totfat = _mov->get(MOV_TOTDOC);
TLocalisamfile id(LF_IVADIFF); TLocalisamfile id(LF_IVADIFF);
TRectype& idcurr = id.curr();
FOR_EACH_ARRAY_ITEM(pagscatt, r, obj) FOR_EACH_ARRAY_ITEM(pagscatt, r, obj)
{ {
const TRectype& pagsca = *(TRectype*)obj; const TRectype& pagsca = *(TRectype*)obj;
const int nrigp = pagsca.get_int(PAGSCA_NRIGP); const int nrigp = pagsca.get_int(PAGSCA_NRIGP);
id.zero(); id.zero();
id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); idcurr.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG));
id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); idcurr.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG));
id.put(MOV_DATAREG, _mov->get(MOV_DATADOC));
CHECKD(nrigp > 0, "Invalid NRIGP ", nrigp); CHECKD(nrigp > 0, "Invalid NRIGP ", nrigp);
id.put("NUMPRO", min(nrigp, 999)); idcurr.put("NUMPRO", min(nrigp, 999));
if (id.read(_isequal, _lock) != NOERR)
{
id.zero();
idcurr.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG));
idcurr.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG));
idcurr.put("NUMPRO", min(nrigp, 999));
if (id.write() != NOERR)
error_box("Errore %d in creazione record IVADIFF", id.status());
}
idcurr.put(MOV_DATAREG, _mov->get(MOV_DATADOC));
CHECKD(rmi_tipoatt > 0, "Invalid tipo att ", rmi_tipoatt); CHECKD(rmi_tipoatt > 0, "Invalid tipo att ", rmi_tipoatt);
id.put("TIPOATT", rmi_tipoatt); idcurr.put("TIPOATT", rmi_tipoatt);
id.put("TIPOIVA", tipomov == 2 ? 2 : 1); idcurr.put("TIPOIVA", tipomov == 2 ? 2 : 1);
id.put("TIPODIFF", iva_cass ? 2 : 1); idcurr.put("TIPODIFF", iva_cass ? 2 : 1);
id.put(RMI_CODIVA, _rmoviva->get(RMI_CODIVA)); idcurr.put(RMI_CODIVA, codiva);
TImporto pagtmp; TImporto pagtmp;
bool ultimo = false; bool ultimo = false;
@ -1246,41 +1339,31 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
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);
tipomov_pag = rp.tipo(); tipomov_pag = rp.tipo();
id.put(PART_TIPOMOV, tipomov_pag); idcurr.put(PART_TIPOMOV, tipomov_pag);
id.put("NUMREGP", rp.get(PART_NREG)); idcurr.put("NUMREGP", rp.get(PART_NREG));
id.put("NUMRIGP", rp.get(PART_NUMRIG)); idcurr.put("NUMRIGP", rp.get(PART_NUMRIG));
TDate d = rp.get(PART_DATAPAG); TDate d = rp.get(PART_DATAPAG);
if (!d.ok()) if (!d.ok())
d = rp.get(PART_DATADOC); d = rp.get(PART_DATADOC);
if (!d.ok()) if (!d.ok())
d = rp.get(PART_DATAREG); d = rp.get(PART_DATAREG);
id.put("DATAREGP", d); idcurr.put("DATAREGP", d);
pagtmp = p.importo_pagsca(pagsca); pagtmp = p.importo_pagsca(pagsca);
if (tipomov_pag >= tm_pagamento && partita_chiusa_al(p, fine)) pagtmp.normalize(sezpag);
{ ultimo = (r == pagscatt.last()) && partita_chiusa_al(p, fine);
ultimo = true;
for (int r = p.last(); r > nrigp; r = p.pred(r))
{
if (p.riga(r).tipo() >= tm_pagamento)
{
ultimo = false;
break;
}
}
}
} }
else else
{ {
// Falso record generato da datainc // Falso record generato da datainc
id.put(PART_TIPOMOV, tipomov_pag); idcurr.put(PART_TIPOMOV, tipomov_pag);
id.put("NUMREGP", _mov->get(MOV_NUMREG)); idcurr.put("NUMREGP", _mov->get(MOV_NUMREG));
id.put("NUMRIGP", nrigp); idcurr.put("NUMRIGP", nrigp);
id.put("DATAREGP", _mov->get(MOV_DATAINC)); idcurr.put("DATAREGP", _mov->get(MOV_DATAINC));
pagtmp.set(sezpag, pagsca.get_real(PAGSCA_IMPORTO)); pagtmp.set(sezpag, pagsca.get_real(PAGSCA_IMPORTO));
ultimo = true; ultimo = true;
} }
id.put("ANNOLIQ", year_int); idcurr.put("ANNOLIQ", year_int);
int meseliq = id.get_date("DATAREGP").month(); int meseliq = id.get_date("DATAREGP").month();
if (_freqviva[0] == 'T') if (_freqviva[0] == 'T')
{ {
@ -1288,47 +1371,49 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (resto > 0) if (resto > 0)
meseliq += 3-resto; meseliq += 3-resto;
} }
id.put("MESELIQ", meseliq); idcurr.put("MESELIQ", meseliq);
id.put("SEZIONE", pagtmp.sezione()); if (pagtmp.sezione() != sezpag)
int cazzone = 2;
idcurr.put("SEZIONE", pagtmp.sezione());
if (ultimo) if (ultimo)
{ {
real importo, imponibile, imposta; real importo, imponibile, imposta;
residuo_da_liquidare(id.get_long(RMI_NUMREG), id.get_int(RMI_NUMRIG), id.get_date("DATAREGP"), residuo_da_liquidare(idcurr, importo, imponibile, imposta);
importo, imponibile, imposta); idcurr.put("IMPORTO", importo);
id.put(PAGSCA_IMPORTO, importo); idcurr.put(RMI_IMPONIBILE, imponibile);
id.put(RMI_IMPONIBILE, imponibile); idcurr.put(RMI_IMPOSTA, imposta);
id.put(RMI_IMPOSTA, imposta); if (tipomov_pag >= tm_pagamento) // 5-3-2014 incremento incdiff_imp solo coi pagamenti! Coerentemente con !ultimo
{
incdiff_imp += imponibile; incdiff_imp += imponibile;
incdiff_iva += imposta; incdiff_iva += imposta;
}
} }
else else
{ {
// Spostato in basso ricalcolo importo ragguagliato 24/09/2013
// id.put(PAGSCA_IMPORTO, pagtmp.valore());
// pagtmp.normalize(sezpag);
const real perc = pagtmp.valore() / totfat; const real perc = pagtmp.valore() / totfat;
real val_imp = imponibile_orig * perc; real val_imp = imponibile_orig * perc;
round_imposta(val_imp); round_al_centesimo(val_imp);
id.put(RMI_IMPONIBILE, val_imp);
if (tipomov_pag >= tm_pagamento)
incdiff_imp += val_imp;
real val_iva = imposta_orig * perc; real val_iva = imposta_orig * perc;
round_imposta(val_iva); round_al_centesimo(val_iva);
id.put(RMI_IMPOSTA, val_iva);
idcurr.put("IMPORTO", val_imp + val_iva);
idcurr.put(RMI_IMPONIBILE, val_imp);
idcurr.put(RMI_IMPOSTA, val_iva);
if (tipomov_pag >= tm_pagamento) if (tipomov_pag >= tm_pagamento)
{
incdiff_imp += val_imp;
incdiff_iva += val_iva; incdiff_iva += val_iva;
}
id.put(PAGSCA_IMPORTO, val_imp + val_iva); // Ricalcolo importo
} }
int err = id.write_rewrite(); int err = id.rewrite();
if (err != NOERR) if (err != NOERR)
error_box("Errore %d in aggiornamento file IVADIFF", err); error_box("Errore %d in aggiornamento file IVADIFF", err);
LOG_IVA_DIFF(id.curr());
const long numreg = _rmoviva->get_long(RMI_NUMREG); const long numreg = _rmoviva->get_long(RMI_NUMREG);
if (numreg > 0) // Chiude o riapre la partita if (numreg > 0) // Chiude o riapre la partita
@ -1347,19 +1432,25 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
} }
} }
} }
diff_imp = imponibile_orig; if (is_date_ok(date, month, liqmonth, year_int)) // 5-3-2014
diff_iva = imposta_orig; {
diff_imp = imponibile_orig;
diff_iva = imposta_orig;
}
} }
else else
{ {
if (movdiff) if (movdiff)
{ {
diff_imp = imponibile_orig; if (is_date_ok(date, month, liqmonth, year_int)) // 5-3-2014
diff_iva = imposta_orig; {
diff_imp = imponibile_orig;
diff_iva = imposta_orig;
}
} }
else else
analizza_IVA(imponibile_orig, imposta_orig, percind, corrisp, false, codiva, analizza_IVA(imponibile_orig, imposta_orig, percind, corrisp, false, codiva,
impon_det, impos_det, impon_ind, impos_ind); impon_det, impos_det, impon_ind, impos_ind);
} }
for (int is_detraibile = 0; is_detraibile < 2; is_detraibile++) for (int is_detraibile = 0; is_detraibile < 2; is_detraibile++)
@ -1433,6 +1524,11 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const TString& iva_vpn = _iva->get(tipomov == vendita ? "S10" : "S11"); const TString& iva_vpn = _iva->get(tipomov == vendita ? "S10" : "S11");
if (iva_vpn.full()) if (iva_vpn.full())
{ {
if (_mov->get(MOV_ANNOIVA) != _year)
{
int cazzone = 2;
}
else
switch (tipomov) switch (tipomov)
{ {
case vendita: // CD1 - 1 2 3 4 case vendita: // CD1 - 1 2 3 4
@ -1442,29 +1538,23 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
bool is_valid = tipodoc != "AF" && sosp_imp != normale && sosp_imp != liquidazione; bool is_valid = tipodoc != "AF" && sosp_imp != normale && sosp_imp != liquidazione;
if (is_valid) if (is_valid)
{ {
if (movdiff) // 21-02-2013 Comprendere IVA differita registrata nell'anno! (imponibile=0) cessioni_cd1_1 += imponibile_orig;
{
if (date.year() == year_int)
cessioni_cd1_1 += imponibile_orig;
}
else
cessioni_cd1_1 += imponibile;
if (iva_vpn.starts_with("CD1")) if (iva_vpn.starts_with("CD1"))
{ {
if (tipocr == 4) if (tipocr == 4)
cessioni_cd1_5 += imponibile; cessioni_cd1_5 += imponibile_orig;
} }
if (!cau_intra) if (!cau_intra)
{ {
if (iva_vpn == "CD12") if (iva_vpn == "CD12")
cessioni_cd1_2 += imponibile; else cessioni_cd1_2 += imponibile_orig; else
if (iva_vpn == "CD13") if (iva_vpn == "CD13")
cessioni_cd1_3 += imponibile; cessioni_cd1_3 += imponibile_orig;
} }
else else
{ {
if (iva_vpn == "CD14") if (iva_vpn == "CD14")
cessioni_cd1_4 += imponibile; cessioni_cd1_4 += imponibile_orig;
} }
} }
@ -1472,34 +1562,34 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
break; break;
case acquisto: // CD2 - 1 2 3 4 case acquisto: // CD2 - 1 2 3 4
{ {
acquisti_cd2_1 += imponibile; acquisti_cd2_1 += imponibile_orig;
if (iva_vpn.starts_with("CD2")) if (iva_vpn.starts_with("CD2"))
{ {
if (tipocr == 2 || tipocr == 3 || tipocr == 8) if (tipocr == 2 || tipocr == 3 || tipocr == 8)
acquisti_cd2_5 += imponibile; acquisti_cd2_5 += imponibile_orig;
} }
if (!cau_intra) if (!cau_intra)
{ {
if (iva_vpn == "CD22") if (iva_vpn == "CD22")
acquisti_cd2_2 += imponibile; acquisti_cd2_2 += imponibile_orig;
else else
if (iva_vpn == "CD23") if (iva_vpn == "CD23")
acquisti_cd2_3 += imponibile; acquisti_cd2_3 += imponibile_orig;
} }
else else
{ {
if (iva_vpn == "CD24") if (iva_vpn == "CD24")
acquisti_cd2_4 += imponibile; acquisti_cd2_4 += imponibile_orig;
} }
if (iva_vpn == "CD31") if (iva_vpn == "CD31")
{ {
oroargento_cd3_1 += imponibile; oroargento_cd3_1 += imponibile_orig;
oroargento_cd3_2 += imposta; oroargento_cd3_2 += imposta_orig;
} }
if (iva_vpn == "CD33") if (iva_vpn == "CD33")
{ {
rottami_cd3_3 += imponibile; rottami_cd3_3 += imponibile_orig;
rottami_cd3_4 += imposta; rottami_cd3_4 += imposta_orig;
} }
} }
break; break;
@ -1662,7 +1752,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
} }
// operazioni esenti // operazioni esenti
if (tipoiva == "ES") if (tipoiva == "ES" && !imponibile.is_zero())
{ {
if (tipomov == vendita) if (tipomov == vendita)
{ {
@ -1777,10 +1867,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (look_iva(_pcon_2_r->get(PCN_IVACOMP))) if (look_iva(_pcon_2_r->get(PCN_IVACOMP)))
ivacomp = _iva->get("CODTAB"); // Ecco il codice IVA di compensazione ivacomp = _iva->get("CODTAB"); // Ecco il codice IVA di compensazione
} }
look_pia(month, codatt, codiva, ivacomp, TRUE); // Crea il record in tabella se non esiste look_pia(month, codatt, codiva, ivacomp, true); // Crea il record in tabella se non esiste
real pia_imp = _pia->get_real("R0") + agr_imp; // Aggiorna... real pia_imp = _pia->get_real("R0") + agr_imp; // Aggiorna...
_pia->put("R0", pia_imp); _pia->put("R0", pia_imp);
_pia->put("B0", TRUE); // Seguo l'esempio dei PIM per il ricalcolo acquisti alla fine del ciclo _pia->put("B0", true); // Seguo l'esempio dei PIM per il ricalcolo acquisti alla fine del ciclo
_pia->rewrite(); // infine scrive _pia->rewrite(); // infine scrive
} }
} }
@ -1988,7 +2078,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
lor += imponibile + imposta; lor += imponibile + imposta;
lorcor += imponibile+imposta; lorcor += imponibile+imposta;
real tot = imponibile+imposta; real tot = imponibile+imposta;
if (liq) add_corrisp(month, reg, tot, perciva, tipodet, codiva, codatt); if (liq)
add_corrisp(month, reg, tot, perciva, tipodet, codiva, codatt);
} }
} }
else if (tipodoc == "FF") // CM500415: prima non c'era questo if else if (tipodoc == "FF") // CM500415: prima non c'era questo if
@ -2213,9 +2304,20 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
{ {
if (tipomov == vendita) if (tipomov == vendita)
{ {
// fatture vendita a liquidazione differita #ifndef NDEBUG
if (month == 7 && reg == "VEN" && !incdiff_iva.is_zero())
{
const real oldv = _pim->get("R29");
const real newv = oldv + incdiff_iva;
__trace("%s %s\t%s\t%s\t%7ld\t%s\t+\t%s\t=\t%s", tab->name(), (const char*)tab->curr().get("CODTAB"), (const char*)reg, (const char*)tipocr_s,
_mov->get_long(MOV_NUMREG), oldv.stringa(12, 2), incdiff_iva.stringa(12, 2), newv.stringa(12, 2));
}
#endif
// fatture vendita a liquidazione differita
tab->curr().add("R26", diff_imp); tab->curr().add("R26", diff_imp);
tab->curr().add("R27", diff_iva); tab->curr().add("R27", diff_iva);
tab->curr().add("R28", incdiff_imp); tab->curr().add("R28", incdiff_imp);
tab->curr().add("R29", incdiff_iva); tab->curr().add("R29", incdiff_iva);
fdiff_imp += diff_imp; fdiff_imp += diff_imp;
@ -2237,7 +2339,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
tab->curr().add("R33", incdiff_iva); tab->curr().add("R33", incdiff_iva);
fdiff_imp_acq += diff_imp; fdiff_imp_acq += diff_imp;
fdiff_iva_acq += diff_iva; fdiff_iva_acq += diff_iva;
fdiffinc_imp_acq += incdiff_imp; fdiffinc_imp_acq += incdiff_imp;
fdiffinc_iva_acq += incdiff_iva; fdiffinc_iva_acq += incdiff_iva;
if (_mov->get_int(MOV_ANNOIVA) < year_int) if (_mov->get_int(MOV_ANNOIVA) < year_int)
{ {
@ -2541,8 +2643,8 @@ void TLiquidazione_app::iva11_set_arr_phase_1(const TString& codatt)
const TString4 codiva = _iva->get("CODTAB"); const TString4 codiva = _iva->get("CODTAB");
const TString4 tipoiva = _iva->get("S1"); const TString4 tipoiva = _iva->get("S1");
const real ali = _iva->get_real("R0"); const real ali = _iva->get_real("R0");
const TString16 tipoes_v = _iva->get("S2"); const TString4 tipoes_v = _iva->get("S2");
const TString16 tipoes_a = _iva->get("S9"); const TString4 tipoes_a = _iva->get("S9");
const int tipoagr = _iva->get_int("S4"); const int tipoagr = _iva->get_int("S4");
const TRectype& rcs = _cur->curr(LF_CAUSALI); const TRectype& rcs = _cur->curr(LF_CAUSALI);
const bool autofattura = rcs.get_bool("AUTOFATT"); const bool autofattura = rcs.get_bool("AUTOFATT");
@ -2748,7 +2850,7 @@ void TLiquidazione_app::iva11_set_arr_phase_1(const TString& codatt)
if (intracom || !valintra) if (intracom || !valintra)
{ {
if (tipoes_v.not_empty()) // Inutile fare troppi controlli... if (tipoes_v.full()) // Inutile fare troppi controlli...
{ {
if (tipoes_v == "24") if (tipoes_v == "24")
array.add(imponibile,TAB11_EC106); array.add(imponibile,TAB11_EC106);
@ -2952,7 +3054,7 @@ void TLiquidazione_app::iva11_set_arr_phase_2(const TString& codatt)
break; break;
case 1: case 1:
case 5: case 5:
array.add(imp,TAB11_IMA03); array.add(imp,TAB11_IMA03);
break; break;
default: default:
break; break;
@ -3224,6 +3326,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
const bool new_age_2000 = (year_int >= 2000) && (_lia->get("S9") == "NV"); const bool new_age_2000 = (year_int >= 2000) && (_lia->get("S9") == "NV");
real risultato = ZERO; real risultato = ZERO;
real detrazioni = ZERO; real detrazioni = ZERO;
real versamenti = ZERO; real versamenti = ZERO;
real vers_int = ZERO; real vers_int = ZERO;
@ -3352,7 +3455,8 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
iva_vend += vend; iva_vend += vend;
iva_acq += acq; iva_acq += acq;
risultato += (vend - acq + diffinc_iva - diffinc_iva_acq); risultato += (vend - acq + diffinc_iva - diffinc_iva_acq);
res_debt += vend + diffinc_iva; res_debt += vend + diffinc_iva;
res_cred += acq; res_cred += acq;
fdiff_imp += diff_imp; fdiff_imp += diff_imp;
@ -3548,12 +3652,10 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
} }
if (attivita_agricola) if (attivita_agricola)
{ {
real perc; // percentuale di deducibilita' // percentuale di deducibilita'
real iva_ded; // iva deducibile real perc = imp_agr2.is_zero() ? ZERO : imp_agr2 / (imp_agr1 + imp_agr2);
perc = imp_agr2.is_zero() ? ZERO : imp_agr2 / (imp_agr1 + imp_agr2);
perc.round(2); perc.round(2);
iva_ded = acq_noCEE * perc; real iva_ded = acq_noCEE * perc; // iva deducibile
round_al_centesimo(iva_ded); round_al_centesimo(iva_ded);
iva_acq += iva_ded; iva_acq += iva_ded;
res_debt += iva_vend; res_debt += iva_vend;
@ -3606,7 +3708,8 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
// Calcola credito utilizzabile da riportare nell'anno successivo // Calcola credito utilizzabile da riportare nell'anno successivo
credito_utilizzabile = credito_utilizzabile_inizio_anno; credito_utilizzabile = credito_utilizzabile_inizio_anno;
credito_utilizzabile -= credito_utilizzato(13, TRUE, TRUE); credito_utilizzabile -= credito_utilizzato(13, TRUE, TRUE);
if (credito_utilizzabile < ZERO) credito_utilizzabile = ZERO; if (credito_utilizzabile < ZERO)
credito_utilizzabile = ZERO;
} }
} }
else else
@ -3717,7 +3820,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
} }
_year = yr; _year = yr;
// Aggiusta DiffIncIVAAcq sul record della 13ma che non poteva ancora sapere il proata definitivo! // Aggiusta DiffIncIVAAcq sul record della 13ma che non poteva ancora sapere il prorata definitivo!
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");
@ -4065,12 +4168,13 @@ void TLiquidazione_app::recalc_annual(const char* att)
_CorrItem *cc; _CorrItem *cc;
bool is_key; bool is_key;
for (_pim->first(); !_pim->eof(); _pim->next()) _pim->zero(); _pim->put("CODTAB", _year); // 24-02-2014 Partiamo dall'anno giusto
for (int err = _pim->read(_isgteq); err == NOERR; err = _pim->next())
{ {
if (_year != *_pim_anno || _month != atoi(*_pim_mese)) // In questo caso _month vale sempre 13 if (_year != *_pim_anno || _month != atoi(*_pim_mese)) // In questo caso _month vale sempre 13
continue; continue;
int tipocr = atoi(*_pim_tipocr); const int tipocr = atoi(*_pim_tipocr);
codiva = *_pim_codiva; codiva = *_pim_codiva;
reg = *_pim_codreg; reg = *_pim_codreg;
look_iva(codiva); look_reg(reg); look_iva(codiva); look_reg(reg);

View File

@ -12,21 +12,22 @@
#include "cglib03.h" #include "cglib03.h"
#include "cg4300.h" #include "cg4300.h"
bool TLiquidazione_app::is_trim(int x) #include <attiv.h>
#include <nditte.h>
bool TLiquidazione_app::is_trim(int x)
// TRUE se il mese passato e' un trimestre // TRUE se il mese passato e' un trimestre
{ return x == 3 || x == 6 || x == 9 || x == 12; } { return x == 3 || x == 6 || x == 9 || x == 12; }
bool TLiquidazione_app::is_month_ok_strict(int x, int month) bool TLiquidazione_app::is_month_ok_strict(int x, int month) const
// TRUE se il mese passato e' compatibile con il regime // TRUE se il mese passato e' compatibile con il regime
// di liquidazione e (opz) non e' maggiore di quello scelto // di liquidazione e (opz) non e' maggiore di quello scelto
{ {
if (month == -1) month = x; if (month == -1) month = x;
return _freqviva == "M" ? return _freqviva == "M" ? ( x > 0 && x <= month) : ( x <= month && is_trim(x));
( x > 0 && x <= month) :
( x <= month && is_trim(x));
} }
bool TLiquidazione_app::is_month_plain(int x) bool TLiquidazione_app::is_month_plain(int x) const
// la piu' semplice: vero se mese == _month o se fa parte del // la piu' semplice: vero se mese == _month o se fa parte del
// trimestre indicato da month // trimestre indicato da month
{ {
@ -41,7 +42,7 @@ bool TLiquidazione_app::is_month_plain(int x)
return ok; return ok;
} }
bool TLiquidazione_app::is_month_ok(int x, int mtocalc) bool TLiquidazione_app::is_month_ok(int x, int mtocalc) const
// TRUE se il mese passato e' compatibile con il mese da calcolare // TRUE se il mese passato e' compatibile con il mese da calcolare
// rispetto al regime di liquidazione scelto // rispetto al regime di liquidazione scelto
{ {
@ -107,36 +108,36 @@ int TLiquidazione_app::previous_month(int m) const
return m == 3 ? 3 : m - 3; return m == 3 ? 3 : m - 3;
} }
bool TLiquidazione_app::is_date_ok(const TDate& d, int month, int liqmonth, int year) bool TLiquidazione_app::is_date_ok(const TDate& d, int month, int liqmonth, int year) const
// TRUE se la data passata va considerata nel // TRUE se la data passata va considerata nel
// ricalcolo dei progressivi mensili per il mese e anno // ricalcolo dei progressivi mensili per il mese e anno
// selezionati. Vedi cg4301.cpp per maggiori informazioni // selezionati. Vedi cg4301.cpp per maggiori informazioni
// sul nuovo filtro di selezione movimenti. // sul nuovo filtro di selezione movimenti.
{ {
if (d.year() != year) CHECKD(year > 2000, "Invalid year ", year);
return false; const int regmonth = d.month();
const int regyear = d.year();
// if (regyear() != year) return false;
if (year < 1998 || _recalc_regis) // Vecchia selezione o calcolo progressivi per stampa registri bollati if (year < 1998 || _recalc_regis) // Vecchia selezione o calcolo progressivi per stampa registri bollati
{ {
if (d.month() > month || d.year() != atoi(_year)) if (regyear != year || regmonth > month)
return false; return false;
if (month == 13) if (month == 13)
return d.month() <= month; return true; // was regmonth <= month;
else else
{ {
if (_freqviva == "M") // Guy!!! if (_freqviva == "M") // Guy!!!
return d.month() == month; return regmonth == month;
else else
return d.month() >= month-2 && d.month() <= month; return regmonth >= month-2 && regmonth <= month;
} }
} }
else // Nuova selezione dal 1998 in poi else // Nuova selezione dal 1998 in poi
{ {
const int regmonth = d.month();
const int regyear = d.year();
if (month <= 12) if (month <= 12)
return (regmonth == month && liqmonth == 0) || (liqmonth == month); return (regyear == year) && ((regmonth == month && liqmonth == 0) || (liqmonth == month));
else // Annuale, month == 13 else // Annuale, month == 13
return (regyear == year && liqmonth != 12) || (regyear == year + 1 && liqmonth == 12); return (regyear == year && liqmonth != 12) || (regyear == year + 1 && liqmonth == 12);
} }
@ -357,7 +358,7 @@ bool TLiquidazione_app::look_plm(int m, const char* att, bool create)
(*_plm_anno) = _year; (*_plm_anno) = _year;
const TString16 s = _plm_r->get("CODTAB"); const TString16 s = _plm_r->get("CODTAB");
bool ok = _plm->read() == NOERR; const bool ok = _plm->read() == NOERR;
if (!ok && create) if (!ok && create)
{ {
@ -366,9 +367,10 @@ bool TLiquidazione_app::look_plm(int m, const char* att, bool create)
_plm->write(); _plm->write();
} }
// crea/posiziona tabelle gemelle PAM, PUM, POM // crea/posiziona tabelle gemelle PAM, PUM, POM
look_pam(m,att,!ok); look_pam(m, att, !ok);
look_pum(m,att,!ok); look_pum(m, att, !ok);
look_pom(m,att,!ok); look_pom(m, att, !ok);
return ok; return ok;
} }
@ -454,16 +456,14 @@ bool TLiquidazione_app::look_pom(int m, const char* a, bool create)
bool TLiquidazione_app::look_pam(int m, const char* a, bool create) bool TLiquidazione_app::look_pam(int m, const char* a, bool create)
{ {
bool ok = FALSE;
_pam->zero(); _pam->zero();
(*_pam_codatt) = format("%6s", a); (*_pam_codatt) = format("%6s", a);
(*_pam_mese) = format("%02d",m); (*_pam_mese) = format("%02d",m);
(*_pam_anno) = _year; (*_pam_anno) = _year;
TString s = _pam->get("CODTAB"); const TString16 s = _pam->get("CODTAB");
_pam->read();
ok = _pam->good(); const bool ok = _pam->read() == NOERR;
if (!ok && create) if (!ok && create)
{ {
@ -480,8 +480,9 @@ bool TLiquidazione_app::look_lim(int m, bool create)
(*_lim_mese) = format("%02d",m); (*_lim_mese) = format("%02d",m);
(*_lim_anno) = _year; (*_lim_anno) = _year;
const TString s = _lim_r->get("CODTAB"); const TString8 s = _lim_r->get("CODTAB");
const bool ok = _lim->read() == NOERR; const bool ok = _lim->read() == NOERR;
if (!ok && create) if (!ok && create)
{ {
_lim_r->zero(); _lim_r->zero();
@ -501,7 +502,7 @@ bool TLiquidazione_app::look_lam(int m, bool create)
(*_lam_mese) = format("%02d",m); (*_lam_mese) = format("%02d",m);
(*_lam_anno) = _year; (*_lam_anno) = _year;
const TString s = _lam_r->get("CODTAB"); const TString8 s = _lam_r->get("CODTAB");
const bool ok = _lam->read() == NOERR; const bool ok = _lam->read() == NOERR;
if (!ok && create) if (!ok && create)
{ {
@ -516,7 +517,7 @@ int TLiquidazione_app::count_activities() const
{ {
TRelation rel(LF_ATTIV); TRelation rel(LF_ATTIV);
TRectype& rec = rel.curr(); TRectype& rec = rel.curr();
rec.put("CODDITTA", get_firm()); rec.put(ATT_CODDITTA, get_firm());
TCursor cur(&rel, "", 1, &rec, &rec); TCursor cur(&rel, "", 1, &rec, &rec);
return cur.items(); return cur.items();
} }
@ -788,7 +789,7 @@ real TLiquidazione_app::result_liq(int month)
// risultato esatto della liquidazione del mese month, <0 a credito // risultato esatto della liquidazione del mese month, <0 a credito
// > 0 a debito; comprende TUTTI, anche il conguaglio prorata in annuale // > 0 a debito; comprende TUTTI, anche il conguaglio prorata in annuale
{ {
real r(0.0); real r;
// ulteriori detrazioni, acconti, versamenti, // ulteriori detrazioni, acconti, versamenti,
// rettifiche, conguagli sono gia' compresi in R0 // rettifiche, conguagli sono gia' compresi in R0
if (look_lim(month)) if (look_lim(month))
@ -953,13 +954,14 @@ void TLiquidazione_app::round_al_centesimo(real& d) const
// 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, int year) bool TLiquidazione_app::is_acconto_differito(long firm, int year)
{ {
bool diff = false; bool diff = false;
const long d = (firm <= 0) ? _nditte->curr().get_long("CODDITTA") : firm; const long d = (firm <= 0) ? _nditte->curr().get_long(NDT_CODDITTA) : firm;
const int y = (year <= 0) ? atoi(_year) : year; const int y = (year <= 0) ? atoi(_year) : year;
if (look_lia(d, y > 0, y)) // 26/03/2012 aggiunto ,y) if (look_lia(d, y > 0, y)) // 26/03/2012 aggiunto ,y)
diff = _lia->get_bool("B1"); diff = _lia->get_bool("B1");
return diff; return diff;
} }
@ -987,23 +989,23 @@ bool TLiquidazione_app::look_conc(TString& uffcon, TString& uffiva)
// c'e', dal comune (primo non vuoto) se non // c'e', dal comune (primo non vuoto) se non
// Assume _nditte correctly positioned // Assume _nditte correctly positioned
TString ana(_nditte->lfile().get("TIPOA")); const TString4 ana(_nditte->lfile().get("TIPOA"));
TString codana(_nditte->lfile().get("CODANAGR")); const TString8 codana(_nditte->lfile().get("CODANAGR"));
// look anagrafica // look anagrafica
TString16 key; TString16 key;
key.format("%s|%s", (const char *) ana, (const char *) codana); key.format("%s|%s", (const char *) ana, (const char *) codana);
const TRectype & anag = cache().get(LF_ANAG, key); const TRectype & anag = cache().get(LF_ANAG, key);
if (anag.empty()) return FALSE; if (anag.empty()) return false;
// becca comune residenza fiscale // becca comune residenza fiscale
TString com(anag.get("COMRF")); TString4 com(anag.get("COMRF"));
// se non c'e', residenza // se non c'e', residenza
if (com.empty()) if (com.empty())
com = anag.get("COMRES"); com = anag.get("COMRES");
if (com.empty()) return FALSE; if (com.empty())
return false;
// becca comune // becca comune
key.format("|%s", (const char *) com); key.format("|%s", (const char *) com);
@ -1021,7 +1023,8 @@ bool TLiquidazione_app::look_conc(TString& uffcon, TString& uffiva)
if (!ucc.empty()) if (!ucc.empty())
uffiva = ucc.get("S0"); uffiva = ucc.get("S0");
} }
return TRUE;
return true;
} }
real TLiquidazione_app::credito_utilizzato(int month, bool iva, bool f24) const real TLiquidazione_app::credito_utilizzato(int month, bool iva, bool f24) const
@ -1045,3 +1048,4 @@ real TLiquidazione_app::credito_utilizzato(int month, bool iva, bool f24) const
return credito; return credito;
} }

View File

@ -6,7 +6,9 @@
#include "cg4300.h" #include "cg4300.h"
#include "recset.h" #include <progind.h>
#include <recarray.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)
@ -631,25 +633,25 @@ void TLiquidazione_app::zero_diff(int month, const char* codatt)
if (!_nditte->is_first_match(LF_ATTIV)) if (!_nditte->is_first_match(LF_ATTIV))
return; return;
if (month > 12 || (_freqviva == "T" && (month % 3) != 1)) if (month > 12 || (_freqviva == "T" && (month % 3) != 1))
return; return;
#ifdef DBG TFast_isamfile fid(LF_IVADIFF);
TString msg; msg.
format("Azzeramento IVADIFF mese %s %s attività %s",
itom(month), (const char*)_year, codatt);
xvtil_statbar_set(msg);
#endif
TString query; TString query;
query << "USE IVADIFF KEY 2"; query << "USE IVADIFF KEY 2";
query << "\nFROM ANNOLIQ=" << _year; query << "\nFROM ANNOLIQ=" << _year;
// Se calcolo gennaio (o marzo trimestrale) azzero tutto l'anno, altrimenti solo il mese selezionato
if (month > (_freqviva == "T" ? 3 : 1)) if (month > (_freqviva == "T" ? 3 : 1))
query << " MESELIQ=" << month; query << " MESELIQ=" << month;
TISAM_recordset id(query); TISAM_recordset id(query);
TString msg;
msg.format("Azzeramento IVADIFF %s %s attività %s", month <= 12 ? itom(month) : "13ma", (const char*)_year, codatt);
TProgress_monitor pi(id.items(), msg, false);
TLocalisamfile& file = id.cursor()->file(); TLocalisamfile& file = id.cursor()->file();
for (bool ok = id.move_first(); ok; ok = id.move_next()) for (bool ok = id.move_first(); ok; ok = id.move_next())
{ {
pi.add_status(1);
file.zero("ANNOLIQ"); file.zero("ANNOLIQ");
file.zero("MESELIQ"); file.zero("MESELIQ");
file.zero("IMPORTO"); file.zero("IMPORTO");

View File

@ -553,27 +553,30 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
{ {
const TString8 att(tmpatt); const TString8 att(tmpatt);
for (tab->first(); !tab->eof(); tab->next()) tab->zero(); tab->put("CODTAB", _year); // 24-02-2014 partiamo dall'anno giusto!
for (int terr = tab->read(_isgteq); terr == NOERR; terr = tab->next())
{ {
_DescrItem* d = NULL; _DescrItem* d = NULL;
// compute // compute
const TString80 codtab = tab->get("CODTAB"); const TString80 codtab = tab->get("CODTAB");
const TString4 anno = codtab.mid(0,4); const TString4 anno = codtab.mid(0,4);
const TString8 activity= codtab.mid(4,6); const TString8 activity= codtab.mid(4,6);
const TString4 codreg = codtab.mid(10,3);
const int mese = atoi(codtab.mid(13,2)); const int mese = atoi(codtab.mid(13,2));
TString4 codiva = codtab.mid(16,4); codiva.trim();
const int tipodet = atoi(codtab.mid(20,1)); const int tipodet = atoi(codtab.mid(20,1));
bool ok = look_reg(codreg);
ok |= look_iva(codiva);
if (!ok) continue;
tiporeg tipomov = (tiporeg)_reg->get_long("I0"); const TString4 codreg = codtab.mid(10,3);
bool corrisp = _reg->get_bool("B0"); if (!look_reg(codreg))
TString tipoiva = _iva->get("S1"); continue;
TString4 codiva = codtab.mid(16,4); codiva.trim();
if (!look_iva(codiva))
continue;
tiporeg tipomov = (tiporeg)_reg->get_int("I0");
bool corrisp = _reg->get_bool("B0");
const TString4 tipoiva = _iva->get("S1");
const TString4 other = tab->get("S4"); const TString4 other = tab->get("S4");
TToken_string s1(tab->get("S1"),'!'); // Imponibile/iva fatture in ritardo TToken_string s1(tab->get("S1"), '!'); // Imponibile/iva fatture in ritardo
real rit_imp(s1.get(0)); real rit_imp(s1.get(0));
real rit_iva(s1.get(1)); real rit_iva(s1.get(1));
@ -593,7 +596,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
diffincimp = tab->get_real("R28"); diffincimp = tab->get_real("R28");
diffinciva = tab->get_real("R29"); diffinciva = tab->get_real("R29");
diffimp_acq = tab->get_real("R30"); diffimp_acq = tab->get_real("R30");
diffiva_acq = tab->get_real("R31"); diffiva_acq = tab->get_real("R31");
diffincimp_acq = tab->get_real("R32"); diffincimp_acq = tab->get_real("R32");
diffinciva_acq = tab->get_real("R33"); diffinciva_acq = tab->get_real("R33");
@ -863,13 +866,12 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
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())
{ {
const word id = describe_pis ? PIS_ROW_DI : PIM_ROW_DI; const word id = describe_pis ? PIS_ROW_DI : PIM_ROW_DI;
int j;
d = NULL; d = NULL;
int j;
for (j = totpos + 1; j < _descr_arr.items(); j++) for (j = totpos + 1; j < _descr_arr.items(); j++)
{ {
_DescrItem* wd = (_DescrItem*)&_descr_arr[j]; _DescrItem* wd = (_DescrItem*)&_descr_arr[j];
@ -1243,8 +1245,10 @@ void TLiquidazione_app::describe_liq(int month, const char* codatts, _DescrItem*
d->_r29 = _lim->get_real("R29"); // fdiffinc_iva_ven 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 /* Dal 1998 in poi il conguaglio prorata non va stampato, ma conglobato nell'iva acquisti
if (atoi(_year) <= 1997)
d->_r10 = _lim->get_real("R7"); // totale conguaglio prorata d->_r10 = _lim->get_real("R7"); // totale conguaglio prorata
*/
TToken_string tt(80); TToken_string tt(80);
tt.add(_lam->get_real("R0").string()); // IVA Vendite tt.add(_lam->get_real("R0").string()); // IVA Vendite
@ -1638,9 +1642,8 @@ int TLiquidazione_app::calc_inc_diff(int tipoiva, real& imponibile_diff, real& i
TString limit; limit << "ANNOLIQ=" << _year; TString limit; limit << "ANNOLIQ=" << _year;
if (_month < 13) limit << " MESELIQ=" << _month; if (_month < 13) limit << " MESELIQ=" << _month;
TString query; // righe pagamento (TIPOMOV>=3) relative a fatture (TOTDOC>0) ed escluse NC! TString query; // righe pagamento (TIPOMOV>=3) ed escluse NC!
query << "USE IVADIFF KEY 2 SELECT (TIPOMOV>2)&&(MOV.TOTDOC>0)&&(TIPOIVA=" << tipoiva << ')' query << "USE IVADIFF KEY 2 SELECT (TIPOMOV>2)&&(TIPOIVA=" << tipoiva << ')'
<< "\nJOIN MOV INTO NUMREG==NUMREG"
<< "\nFROM " << limit << "\nTO " << limit; << "\nFROM " << limit << "\nTO " << limit;
TISAM_recordset id(query); TISAM_recordset id(query);
@ -2007,21 +2010,21 @@ void TLiquidazione_app::set_pim(_DescrItem& d)
if (d._flags == PIM_ROW || d._flags == PIS_ROW) if (d._flags == PIM_ROW || d._flags == PIS_ROW)
{ {
set_row(rw++,"%4s %s@25g%r@41g%r@58g%r@74g%r@91g%r@107g%r", set_row(rw++,"%-4s %s@25g%r@41g%r@58g%r@74g%r@91g%r@107g%r",
(const char*)d._s1, (const char*)d._s2, (const char*)d._s1, (const char*)d._s2,
&(d._r0), &(d._r1), &(d._r2), &(d._r3), &(d._r4), &(d._r5)); &(d._r0), &(d._r1), &(d._r2), &(d._r3), &(d._r4), &(d._r5));
} }
else else
if (d._flags == PIM_ROW_D || d._flags == PIS_ROW_D) if (d._flags == PIM_ROW_D || d._flags == PIS_ROW_D)
{ {
set_row(rw++,"%4s %s@25g%r@41g%r@91g%r@107g%r", set_row(rw++,"%-4s %s@25g%r@41g%r@91g%r@107g%r",
(const char*)d._s1, (const char*)d._s2, (const char*)d._s1, (const char*)d._s2,
&(d._r26), &(d._r27), &(d._r30), &(d._r31)); &(d._r26), &(d._r27), &(d._r30), &(d._r31));
} }
else else
if (d._flags == PIM_ROW_DI || d._flags == PIS_ROW_DI) if (d._flags == PIM_ROW_DI || d._flags == PIS_ROW_DI)
{ {
set_row(rw++,"%4s %s@25g%r@41g%r@91g%r@107g%r", set_row(rw++,"%-4s %s@25g%r@41g%r@91g%r@107g%r",
(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));
} }
@ -2112,7 +2115,7 @@ void TLiquidazione_app::set_plm(_DescrItem& d)
} }
void TLiquidazione_app::set_pumpam(_DescrItem& d) void TLiquidazione_app::set_pumpam(const _DescrItem& d)
{ {
bool printed = FALSE; bool printed = FALSE;
@ -2455,9 +2458,10 @@ void TLiquidazione_app::print_importo(int rw, const char* prompt, real imp, bool
set_row(rw, str, &imp); set_row(rw, str, &imp);
} }
// d._flags == THE_END
void TLiquidazione_app::set_grand_2000(_DescrItem& d, int &rw) void TLiquidazione_app::set_grand_2000(_DescrItem& d, int &rw)
{ {
const real& risultato = d._r0; real risultato = d._r0; // Figuccia lo puo' cambiare
const real& rimborso = d._r1; const real& rimborso = d._r1;
const real& cred_cost = d._r2; const real& cred_cost = d._r2;
const real& deb_mens = d._r3; const real& deb_mens = d._r3;
@ -2538,6 +2542,8 @@ void TLiquidazione_app::set_grand_2000(_DescrItem& d, int &rw)
real iva_deb_cred = iva_vend - iva_acq + diffinc_iva - diffinc_iva_acq + xcasinc_iva - xcasinc_iva_acq; real iva_deb_cred = iva_vend - iva_acq + diffinc_iva - diffinc_iva_acq + xcasinc_iva - xcasinc_iva_acq;
if (_is_visliq) if (_is_visliq)
iva_deb_cred += rett_debt - rett_cred; iva_deb_cred += rett_debt - rett_cred;
if (_isannual)
iva_deb_cred.round(0);
print_importo(rw++, TR("IVA a debito o a credito per il periodo"), iva_deb_cred); print_importo(rw++, TR("IVA a debito o a credito per il periodo"), iva_deb_cred);
@ -2556,7 +2562,7 @@ void TLiquidazione_app::set_grand_2000(_DescrItem& d, int &rw)
set_row(rw++,FR("%s@11gRimborsi%s@75g%r"), set_row(rw++,FR("%s@11gRimborsi%s@75g%r"),
_is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &rimborso); _is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &rimborso);
set_row(rw++,FR("@11gCredito IVA compensabile detratto@58g%r"), &credito_utilizzato_iva); set_row(rw++,FR("@11gCredito IVA compensabile detratto@58g%r"), &credito_utilizzato_iva);
real cre_deb_per = risultato + crediti_speciali + acc_dec + vers_int; real cre_deb_per = risultato + crediti_speciali + acc_dec + vers_int;
if (_month == 13) cre_deb_per += versamenti; if (_month == 13) cre_deb_per += versamenti;
@ -2566,43 +2572,28 @@ void TLiquidazione_app::set_grand_2000(_DescrItem& d, int &rw)
set_row(rw++,FR("%s@11gCrediti speciali%s@58g%r"), set_row(rw++,FR("%s@11gCrediti speciali%s@58g%r"),
_is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &crediti_speciali); _is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &crediti_speciali);
if (_freqviva == "T" && interessi != ZERO) if (_freqviva == "T" && !interessi.is_zero())
set_row(rw++,FR("@11gInteressi dovuti per liquidazioni trimestrali %6.2r%%@75g%r"),&interesse, &interessi); set_row(rw++,FR("@11gInteressi dovuti per liquidazioni trimestrali %6.2r%%@75g%r"),&interesse, &interessi);
else else
{ if (_is_visliq) rw++;
if (_is_visliq)
rw++;
}
if (!acc_dec.is_zero()) if (!acc_dec.is_zero())
set_row(rw++,FR("%s@11gAcconto versato%s@58g%r"), set_row(rw++,FR("%s@11gAcconto versato%s@58g%r"),
_is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &acc_dec); _is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &acc_dec);
else else
{ if (_is_visliq) rw++;
if (_is_visliq)
rw++;
}
// versamenti effettuati // versamenti effettuati
if (!versamenti.is_zero() && (_month==13 || !_is_visliq)) if (!versamenti.is_zero() && (_month==13 || !_is_visliq))
{
set_row(rw++,FR("@11gVersamenti effettuati@58g%r"), &versamenti); set_row(rw++,FR("@11gVersamenti effettuati@58g%r"), &versamenti);
}
else else
{ if (_is_visliq) rw++;
if (_is_visliq)
rw++;
}
// versamenti integrativi // versamenti integrativi
if (!vers_int.is_zero() && !_is_visliq) if (!vers_int.is_zero() && !_is_visliq)
{
set_row(rw++,FR("@11gVersamenti integrativi@58g%r"), &vers_int); set_row(rw++,FR("@11gVersamenti integrativi@58g%r"), &vers_int);
}
else else
{ if (_is_visliq) rw++;
if (_is_visliq)
rw++;
}
const real iva = risultato + interessi; const real iva = risultato + interessi;
if (iva > ZERO) if (iva > ZERO)

View File

@ -546,7 +546,7 @@ bool TLiquidazione_app::recalc_acconto(real& inf, real& ina)
real iva_pro = 0.0; real iva_pro = 0.0;
real cre_pre = 0.0; real cre_pre = 0.0;
real acq_intr = 0.0; real acq_intr = 0.0;
const bool isdifferita = is_differita(); // MI3262... const bool isdifferita = is_acconto_differito(); // MI3262...
int error = FALSE; int error = FALSE;
TString16 tipo_acc; TString16 tipo_acc;

View File

@ -1911,7 +1911,7 @@ bool TStampa_registri_app::some_IVAxCassa(int da_mese, int a_mese) const
return false; return false;
TString query; TString query;
query = "USE IVADIFF KEY 2 SELECT (TIPOMOV>2)"; query = "USE IVADIFF KEY 2 SELECT (TIPOMOV>2)&&(MESELIQ<13)";
query << "\nFROM ANNOLIQ=" << _data_da.year() << " MESELIQ=" << da_mese; query << "\nFROM ANNOLIQ=" << _data_da.year() << " MESELIQ=" << da_mese;
query << "\nTO ANNOLIQ=" << _data_a.year() << " MESELIQ=" << a_mese; query << "\nTO ANNOLIQ=" << _data_a.year() << " MESELIQ=" << a_mese;
TISAM_recordset id(query); TISAM_recordset id(query);
@ -1924,8 +1924,7 @@ bool TStampa_registri_app::some_IVAxCassa(int da_mese, int a_mese) const
else else
msg << "Nel mese di " << itom(da_mese); msg << "Nel mese di " << itom(da_mese);
msg << " ci sarebbero " << recs << " incassi/pagamenti per cassa."; msg << " ci sarebbero " << recs << " incassi/pagamenti per cassa.";
xvtil_statbar_set(msg); __trace(msg);
xvt_sys_sleep(1000);
#endif #endif
return recs > 0; return recs > 0;
@ -1959,7 +1958,7 @@ bool TStampa_registri_app::print_IVAxCassa(int da_month, int a_month)
} }
TString query; TString query;
query = "USE IVADIFF SELECT (BETWEEN(DATAREGP,#DAL,#AL))&&(MOV.REG=#REG)&&(TIPOMOV>2)&&(STR(MOV.TOTDOC>0))"; query = "USE IVADIFF SELECT (BETWEEN(DATAREGP,#DAL,#AL))&&(MOV.REG=#REG)&&(STR((MESELIQ<13)&&(TIPOMOV>2)&&(MOV.TOTDOC>0)))";
query << "\nBY DATAREGP DATAREG NUMPRO"; query << "\nBY DATAREGP DATAREG NUMPRO";
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";
@ -1980,7 +1979,7 @@ bool TStampa_registri_app::print_IVAxCassa(int da_month, int a_month)
else else
msg << "Nel mese di " << itom(da_month); msg << "Nel mese di " << itom(da_month);
msg << " ci sono effettivamente " << recs << " incassi/pagamenti per cassa."; msg << " ci sono effettivamente " << recs << " incassi/pagamenti per cassa.";
xvtil_statbar_set(msg); __trace(msg);
#endif #endif
if (recs > 0) if (recs > 0)

View File

@ -256,23 +256,15 @@ bool TAp_eser::check_esercizio(const int cod_es, TDate s1, TDate f1)
int cg4500 (int argc, char* argv[]) int cg4500 (int argc, char* argv[])
{ {
switch (toupper(*argv[2])) if (toupper(*argv[2]) == 'I')
{ {
case 'C': TAp_iva a;
{ a.run(argc, argv, TR("Apertura nuovo esercizio IVA"));
TAp_eser a; }
a.run(argc, argv, TR("Apertura nuovo esercizio")); else
} {
break; TAp_eser a;
case 'I': a.run(argc, argv, TR("Apertura nuovo esercizio"));
{
TAp_iva a;
a.run(argc, argv, TR("Apertura nuovo esercizio IVA"));
}
break;
default:
error_box("Uso: cg4 -4 [C,I]");
break;
} }
return 0; return 0;
} }

View File

@ -5,7 +5,6 @@
#include <relation.h> #include <relation.h>
#include <tabutil.h> #include <tabutil.h>
#include <nditte.h> #include <nditte.h>
bool TAp_iva::mask_annoiva (TMask_field& f, KEY k) bool TAp_iva::mask_annoiva (TMask_field& f, KEY k)
@ -17,7 +16,7 @@ bool TAp_iva::mask_annoiva (TMask_field& f, KEY k)
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));
} }
return TRUE; return true;
} }
bool TAp_iva::create() bool TAp_iva::create()
@ -28,6 +27,7 @@ bool TAp_iva::create()
return TSkeleton_application::create(); return TSkeleton_application::create();
} }
/*
void TAp_iva::libro_unico() void TAp_iva::libro_unico()
{ {
TString4 annoiva; TString4 annoiva;
@ -64,6 +64,7 @@ void TAp_iva::libro_unico()
lbu.write(); lbu.write();
} }
} }
*/
bool TAp_iva::apertura_iva() bool TAp_iva::apertura_iva()
{ {
@ -153,8 +154,7 @@ bool TAp_iva::apertura_iva()
} }
//viene aggiornato l'anno iva sui parametri ditta //viene aggiornato l'anno iva sui parametri ditta
TConfig conf(CONFIG_DITTA); ini_set_int(CONFIG_DITTA, "cg", "AnLiIv", _annoiva);
conf.set("AnLiIv", annoiva);
//sull'anagrafica ditte viene aggiornata la frequenza versamento //sull'anagrafica ditte viene aggiornata la frequenza versamento
TLocalisamfile nditte (LF_NDITTE); TLocalisamfile nditte (LF_NDITTE);

View File

@ -232,7 +232,7 @@ class TDich_periodica_iva_mask : public TAutomask
_is_euro; // importi in euro _is_euro; // importi in euro
protected: protected:
void read_iva_data(); void read_iva_data();
real imposta_diff() const; real imposta_diff(int tipo) const;
public: public:
void set_prospect(); void set_prospect();
@ -261,7 +261,8 @@ TDich_periodica_iva_mask::TDich_periodica_iva_mask(TDich_periodica_selfirm_mask
} }
} }
real TDich_periodica_iva_mask::imposta_diff() const // tipo=1 vendite; 2 = acquisti
real TDich_periodica_iva_mask::imposta_diff(int tipo) const
{ {
real imposta; real imposta;
@ -270,8 +271,9 @@ real TDich_periodica_iva_mask::imposta_diff() const
const TDate data_a(31,12,anno); const TDate data_a(31,12,anno);
TString query; TString query;
query = "USE IVADIFF SELECT (BETWEEN(DATAREGP,#DAL,#AL))&&(TIPOMOV>2)&&(STR(MOV.TOTDOC>0))"; query << "USE IVADIFF SELECT (BETWEEN(DATAREGP,#DAL,#AL))&&(STR("
query << "\nBY DATAREGP DATAREG"; << "(MOV.TOTDOC>0)&&(TIPOMOV>2)&&(MESELIQ<13)&&(TIPOIVA=" << tipo << ')'
<< "))";
query << "\nJOIN MOV INTO NUMREG==NUMREG"; query << "\nJOIN MOV INTO NUMREG==NUMREG";
TISAM_recordset id(query); TISAM_recordset id(query);
id.set_var("#DAL", data_da); id.set_var("#DAL", data_da);
@ -360,12 +362,13 @@ void TDich_periodica_iva_mask::read_iva_data()
const real rettifica = lim.get_real("R5"); // Rettifiche const real rettifica = lim.get_real("R5"); // Rettifiche
real cd4 = lam.get_real("R0"); // Iva esigibile per il periodo real cd4 = lam.get_real("R0"); // Iva esigibile per il periodo
cd4 += imposta_diff(); cd4 += imposta_diff(1);
if (rettifica > ZERO) if (rettifica > ZERO)
cd4 += rettifica; cd4 += rettifica;
cd4.round(); cd4.round();
real cd5 = lam.get_real("R1"); // Iva che si detrae per il periodo real cd5 = lam.get_real("R1"); // Iva che si detrae per il periodo
cd5 += imposta_diff(2);
if (rettifica < ZERO && !exclude_sign) if (rettifica < ZERO && !exclude_sign)
cd5 += abs(rettifica); cd5 += abs(rettifica);
cd5.round(); cd5.round();

View File

@ -181,7 +181,8 @@ Item_09 = "Correzione righe di prima nota", "cg1 -2 Z", "FP"
Item_10 = "Impostazione mese liquidazione", "cg1 -2 M", "FP" Item_10 = "Impostazione mese liquidazione", "cg1 -2 M", "FP"
Item_11 = "Controllo P.I. e C.F. clienti/fornitori", "cg1 -2 L", "FP" Item_11 = "Controllo P.I. e C.F. clienti/fornitori", "cg1 -2 L", "FP"
Item_12 = "Allineamento IBAN su Banche x Cliente", "cg1 -2 B", "FP" Item_12 = "Allineamento IBAN su Banche x Cliente", "cg1 -2 B", "FP"
Item_13 = "Collegamento bilanci", [CGMENU_025] Item_13 = "Controllo integrità archivi", "cg1 -2 X", "F"
Item_14 = "Collegamento bilanci", [CGMENU_025]
[CGMENU_019] [CGMENU_019]
Caption = "Invio" Caption = "Invio"

View File

@ -1166,17 +1166,29 @@ int TRiga_partite::calcola_pagato_periodo(const TDate& dal, const TDate& al, TIm
} }
} }
// Ordino i pagamenti per DATAPAG/NRATA/NRIGP
for (int i = 0; i < pags.items(); i++) for (int i = 0; i < pags.items(); i++)
{ {
for (int j = i+1; j < pags.items(); j++) for (int j = i+1; j < pags.items(); j++)
{ {
const TRectype& pi = *(TRectype*)pags.objptr(i); const TRectype& pi = *(TRectype*)pags.objptr(i);
const TRectype& pj = *(TRectype*)pags.objptr(j); const TRectype& pj = *(TRectype*)pags.objptr(j);
const TRiga_partite& si = partita().riga(pi.get_int(PAGSCA_NRIGP)); const int ni = pi.get_int(PAGSCA_NRIGP);
const TRiga_partite& sj = partita().riga(pj.get_int(PAGSCA_NRIGP)); const int nj = pj.get_int(PAGSCA_NRIGP);
const TRiga_partite& si = partita().riga(ni);
const TRiga_partite& sj = partita().riga(nj);
const TDate di = si.get(PART_DATAPAG); const TDate di = si.get(PART_DATAPAG);
const TDate dj = sj.get(PART_DATAPAG); const TDate dj = sj.get(PART_DATAPAG);
if (di > dj) long cmp = di - dj;
if (cmp == 0)
{
const int ri = pi.get_int(PAGSCA_NRATA);
const int rj = pj.get_int(PAGSCA_NRATA);
cmp = ri - rj;
if (cmp == 0)
cmp = ni - nj;
}
if (cmp > 0)
pags.swap(i, j); pags.swap(i, j);
} }
} }