Correzioni per liquidazione iba differita e gestione nuovo saldaconto in prima nota

git-svn-id: svn://10.65.10.50/branches/R_10_00@22881 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2013-07-26 15:35:51 +00:00
parent 3c7305dd2e
commit fae432278f
34 changed files with 1326 additions and 619 deletions

View File

@ -35,6 +35,7 @@
#define F_PROVV 232 #define F_PROVV 232
#define F_CODCAUREG 233 #define F_CODCAUREG 233
#define F_REGSPIVA 234 #define F_REGSPIVA 234
#define F_CONTIND 235
#define SS_TIPO 101 #define SS_TIPO 101
#define SS_SEZIONE 102 #define SS_SEZIONE 102

View File

@ -329,6 +329,7 @@ BEGIN
ITEM "4|Versamento contributi dipendente" ITEM "4|Versamento contributi dipendente"
ITEM "5|Compensi non soggetti" ITEM "5|Compensi non soggetti"
ITEM "6|Ritenute per prestazioni occasionali" ITEM "6|Ritenute per prestazioni occasionali"
MODULE 77
END END
LIST F_COLL_CESP 1 40 LIST F_COLL_CESP 1 40
@ -346,12 +347,23 @@ BEGIN
ITEM "T|Trasferimento" ITEM "T|Trasferimento"
ITEM "V|Vendita cespite" ITEM "V|Vendita cespite"
ITEM "Z|Rettifica vendita" ITEM "Z|Rettifica vendita"
MODULE ce
END END
BOOLEAN F_MOVIND BOOLEAN F_MOVIND
BEGIN BEGIN
PROMPT 2 18 "Contabilita' analitica" PROMPT 2 18 "Contabilità analitica"
FIELD MOVIND FIELD MOVIND
MODULE ca,cm
MESSAGE FALSE CLEAR,F_CONTIND
MESSAGE TRUE ENABLE,F_CONTIND
END
BOOLEAN F_CONTIND
BEGIN
PROMPT 34 18 "Contabilità industriale"
FIELD MOVCGIND
MODULE ci
END END
NUMBER F_REGSPIVA 2 NUMBER F_REGSPIVA 2

View File

@ -700,6 +700,7 @@ void TPrimanota_application::fill_sheet(TMask& m) const
bool TPrimanota_application::can_I_write(const TRelation* rel) const bool TPrimanota_application::can_I_write(const TRelation* rel) const
{ {
/*
static int err = -1; static int err = -1;
if (err < 0) if (err < 0)
{ {
@ -729,6 +730,8 @@ bool TPrimanota_application::can_I_write(const TRelation* rel) const
} }
return yes; return yes;
*/
return TRelation_application::can_I_write(rel);
} }
// Ritorna il prossimo numero di registrazione libero // Ritorna il prossimo numero di registrazione libero
@ -1383,7 +1386,7 @@ int TPrimanota_application::write(const TMask& m)
{ {
TCausale c(causauto); TCausale c(causauto);
if ((!gestione_saldaconto() || c.tipomov() == 0) && c.iva() == nessuna_iva) if ((!gestione_saldaconto() || c.tipomov() == 0) && c.iva() == nessuna_iva)
tipauto = causauto.full() ? 1 : 0; tipauto = 1;
} }
} }
} }
@ -1715,6 +1718,7 @@ bool TPrimanota_application::link_m770()
if (!has_module(M77AUT) || iva() == iva_vendite || m770 == 0) if (!has_module(M77AUT) || iva() == iva_vendite || m770 == 0)
return false; return false;
const TMask& cm = curr_mask();
int tipo_coll = 0; int tipo_coll = 0;
char tipper = ' '; char tipper = ' ';
long codper = 0; long codper = 0;
@ -1724,7 +1728,7 @@ bool TPrimanota_application::link_m770()
{ {
if (m770 == 1 || m770 == 5) if (m770 == 1 || m770 == 5)
{ {
const long forn = curr_mask().get_long(F_FORNITORE); const long forn = cm.get_long(F_FORNITORE);
if (is_percipient(forn, tipper, codper)) if (is_percipient(forn, tipper, codper))
calcola_m770(tipo_coll = 1, spese, compenso, imposte, ritenute); calcola_m770(tipo_coll = 1, spese, compenso, imposte, ritenute);
} }
@ -1754,18 +1758,18 @@ bool TPrimanota_application::link_m770()
} }
} }
if (tipo_coll) if (tipo_coll > 0)
{ {
TToken_string s(80); TToken_string s(80);
s.add(tipo_coll); s.add(tipo_coll);
s.add(curr_mask().insert_mode() ? "I" : "M"); s.add(cm.insert_mode() ? "I" : "M");
s.add(tipper); s.add(tipper);
s.add(codper); s.add(codper);
s.add(curr_mask().get(F_NUMREG)); s.add(cm.get(F_NUMREG));
s.add(curr_mask().get(F_NUMDOC)); s.add(cm.get(F_NUMDOC));
s.add(curr_mask().get(F_DATADOC)); s.add(cm.get(F_DATADOC));
if (iva() == iva_acquisti) if (iva() == iva_acquisti)
s.add(curr_mask().get(F_TOTALE)); s.add(cm.get(F_TOTALE));
else else
s.add(""); s.add("");
s.add(spese.string()); s.add(spese.string());
@ -2322,12 +2326,11 @@ bool TPrimanota_application::link_anal(const TMask& msk, const char* action)
if (!fexist("ca2.exe")) if (!fexist("ca2.exe"))
return false; return false;
TConfig cfg(CONFIG_DITTA, "ca"); const TDate data_att = ini_get_string(CONFIG_DITTA, "ca", "DtAttCa");
const TDate data_att = cfg.get("DtAttCa");
if (data_att.ok()) if (data_att.ok())
{ {
//la data competenza puo' essere vuota nel caso l'utonto non abbia i permessi per compilarla.. // la data competenza puo' essere vuota nel caso l'utonto non abbia i permessi per compilarla...
//..ovvero lavora a Dinamica // ...ovvero lavora a Dinamica
TDate data_cmp = msk.get_date(F_DATACOMP); TDate data_cmp = msk.get_date(F_DATACOMP);
if(!data_cmp.ok()) if(!data_cmp.ok())
data_cmp = msk.get_date(F_DATAREG); data_cmp = msk.get_date(F_DATAREG);
@ -2347,12 +2350,10 @@ bool TPrimanota_application::link_anal(const TMask& msk, const char* action)
} }
if (action[0] == 'I') if (action[0] == 'I')
{ {
// Se non ci sono conti analitici è inutile inserire // Se non ci sono conti analitici è inutile inserire
if (!bAnalBill) if (!bAnalBill)
return false; return false;
} }
// Controllo se esiste già il movimento // Controllo se esiste già il movimento
@ -2399,7 +2400,6 @@ bool TPrimanota_application::link_anal(const TMask& msk, const char* action)
app.run(); app.run();
return true; return true;
} }
bool TPrimanota_application::protected_record(TRectype& mov) bool TPrimanota_application::protected_record(TRectype& mov)
@ -2413,17 +2413,17 @@ bool TPrimanota_application::protected_record(TRectype& mov)
{ {
if (mov.get_bool(MOV_STAMPATO)) if (mov.get_bool(MOV_STAMPATO))
{ {
ok = yesno_box(FR("Il movimento %ld è già stato stampato sul libro giornale:\n" ok = delete_box(FR("Il movimento %ld è già stato stampato sul libro giornale:\n"
"si desidera eliminarlo ugualmente?"), numreg); "si desidera eliminarlo ugualmente?"), numreg);
} }
if (ok && mov.get_bool(MOV_REGST)) if (ok && mov.get_bool(MOV_REGST))
{ {
ok = yesno_box(FR("Il movimento %ld è già stato stampato sul bollato:\n" ok = delete_box(FR("Il movimento %ld è già stato stampato sul bollato:\n"
"si desidera eliminarlo ugualmente?"), numreg); "si desidera eliminarlo ugualmente?"), numreg);
} }
if (ok && mov.get_bool(MOV_INVIATO)) if (ok && mov.get_bool(MOV_INVIATO))
{ {
ok = yesno_box(FR("Il movimento %ld è stato inviato ad un'altra contabilità:\n" ok = delete_box(FR("Il movimento %ld è stato inviato ad un'altra contabilità:\n"
"si desidera eliminarlo ugualmente?"), numreg); "si desidera eliminarlo ugualmente?"), numreg);
} }
if (ok) if (ok)

View File

@ -394,9 +394,9 @@ BEGIN
GROUP 2 GROUP 2
END END
BUTTON F_OCCASEDIT 56 BUTTON F_OCCASEDIT 50
BEGIN BEGIN
PROMPT 1 10 "Dati anagrafici del cliente o fornitore occasionale" PROMPT 1 10 "Dati del cliente o fornitore occasionale"
FLAGS "H" FLAGS "H"
END END

View File

@ -164,6 +164,9 @@ char TCausale::link_cespiti() const
bool TCausale::link_analitica() const bool TCausale::link_analitica() const
{ return _rec.get_bool(CAU_MOVIND); } { return _rec.get_bool(CAU_MOVIND); }
bool TCausale::link_industriale() const
{ return _rec.exist(CAU_MOVCGIND) && _rec.get_bool(CAU_MOVCGIND); }
bool TCausale::ok() const bool TCausale::ok() const
{ return iva() != iva_errata; } { return iva() != iva_errata; }

View File

@ -58,6 +58,7 @@ public:
int link_m770() const; int link_m770() const;
char link_cespiti() const; char link_cespiti() const;
bool link_analitica() const; bool link_analitica() const;
bool link_industriale() const;
const TString& compatible(const TCausale& c) const; const TString& compatible(const TCausale& c) const;

View File

@ -2158,13 +2158,16 @@ bool TPrimanota_application::edit_partite(const TMask& m, int riga)
bool TPrimanota_application::crea_partita(const TBill& bill, int anno, const TString& numero, int numrig, const TImporto& importo) bool TPrimanota_application::crea_partita(const TBill& bill, int anno, const TString& numero, int numrig, const TImporto& importo)
{ {
TMask& cm = curr_mask();
TPartita& partita = app().partite().partita(bill, anno, numero); TPartita& partita = app().partite().partita(bill, anno, numero);
TRiga_partite& part = partita.new_row(); // Creazione nuova riga vuota TRiga_partite& part = partita.new_row(); // Creazione nuova riga vuota
const int nriga = part.get_int(PART_NRIGA); // Nuova riga const int nriga = part.get_int(PART_NRIGA); // Nuova riga
// Copia dati movimento corrente // Copia dati movimento corrente
part.put(PART_NREG, NUMREG_PROVVISORIO); // Numero operazione const long numreg = cm.insert_mode() ? NUMREG_PROVVISORIO : cm.get_long(F_NUMREG);
part.put(PART_NREG, numreg); // Numero operazione
part.put(PART_NUMRIG, numrig); // Riga su cui ho cliccato part.put(PART_NUMRIG, numrig); // Riga su cui ho cliccato
// Forza il gruppo/conto cliente corretto (lo fa gia' anche la new_row) // Forza il gruppo/conto cliente corretto (lo fa gia' anche la new_row)
@ -2175,7 +2178,6 @@ bool TPrimanota_application::crea_partita(const TBill& bill, int anno, const TSt
const tipo_movimento tm = (tipo_movimento)causale.tipomov(); const tipo_movimento tm = (tipo_movimento)causale.tipomov();
part.put(PART_TIPOMOV, int(tm)); part.put(PART_TIPOMOV, int(tm));
TMask& cm = app().curr_mask();
// Setta il cambio corrente // Setta il cambio corrente
const TValuta valuta(cm, SK_VALUTA, SK_DATACAMBIO, SK_CAMBIO); const TValuta valuta(cm, SK_VALUTA, SK_DATACAMBIO, SK_CAMBIO);

View File

@ -224,7 +224,7 @@ HIDDEN TStampa_giornale& app() { return (TStampa_giornale&)main_app(); }
bool TStampa_giornale::filtra_reg(const TRelation * r) bool TStampa_giornale::filtra_reg(const TRelation * r)
{ {
bool ok = TRUE; bool ok = true;
if (app()._ae_solare) if (app()._ae_solare)
{ {
const TRectype& rec = r->lfile().curr(); const TRectype& rec = r->lfile().curr();
@ -241,13 +241,13 @@ bool TStampa_giornale::filter_func(const TRelation * r)
// Scarto SEMPRE i provvisori // Scarto SEMPRE i provvisori
const TString& provvis = recmov.get(MOV_PROVVIS); const TString& provvis = recmov.get(MOV_PROVVIS);
if (!provvis.blank()) if (!provvis.blank())
return FALSE; return false;
// Scarto i movimenti che hanno il registro ai soli fini della liquidazione // Scarto i movimenti che hanno il registro ai soli fini della liquidazione
const TRectype& reg = r->lfile("REG").curr(); const TRectype& reg = r->lfile("REG").curr();
const tipo_sospensione ts = reg.get_bool("B1") ? (tipo_sospensione) reg.get_int("I9") : nessuna; const tipo_sospensione ts = reg.get_bool("B1") ? (tipo_sospensione) reg.get_int("I9") : nessuna;
if (ts == liquidazione) if (ts == liquidazione)
return FALSE; return false;
// In caso di NO libro con iva scarta quelli che non hanno righe contabili // In caso di NO libro con iva scarta quelli che non hanno righe contabili
if (!app()._libro_giornale_iva_unico) if (!app()._libro_giornale_iva_unico)
@ -264,7 +264,7 @@ bool TStampa_giornale::filter_func(const TRelation * r)
return numreg2 == numreg; return numreg2 == numreg;
} }
} }
return TRUE; return true;
} }
@ -360,7 +360,7 @@ bool TStampa_giornale::user_create()
add_file (LF_MOV); add_file (LF_MOV);
add_file (LF_RMOV); add_file (LF_RMOV);
add_file (LF_RMOVIVA); add_file (LF_RMOVIVA);
return TRUE; return true;
} }
bool TStampa_giornale::user_destroy() bool TStampa_giornale::user_destroy()
@ -370,7 +370,7 @@ bool TStampa_giornale::user_destroy()
delete _RecArrivoA; delete _RecArrivoA;
delete _tabreg; delete _tabreg;
return TRUE; return true;
} }
void TStampa_giornale::aggiorna_mov() void TStampa_giornale::aggiorna_mov()
@ -381,14 +381,14 @@ void TStampa_giornale::aggiorna_mov()
_cur->setregion(*_RecPartoDa, *_RecArrivoA); _cur->setregion(*_RecPartoDa, *_RecArrivoA);
const long items = _cur->items(); const long items = _cur->items();
TProgind prnd (items, TR("Aggiornamento movimenti ..."), FALSE, TRUE); TProgind prnd (items, TR("Aggiornamento movimenti ..."), false, true);
for ((*_cur) = 0L; _cur->pos() < items; ++(*_cur)) for ((*_cur) = 0L; _cur->pos() < items; ++(*_cur))
{ {
const bool gia_stampato = _cur->file(LF_MOV).get_bool(MOV_STAMPATO); const bool gia_stampato = _cur->file(LF_MOV).get_bool(MOV_STAMPATO);
if (!gia_stampato) if (!gia_stampato)
{ {
_cur->file(LF_MOV).put (MOV_STAMPATO, TRUE); _cur->file(LF_MOV).put (MOV_STAMPATO, true);
_cur->file(LF_MOV).put (MOV_NUMGIO, nprog); _cur->file(LF_MOV).put (MOV_NUMGIO, nprog);
mov.rewrite(); mov.rewrite();
nprog++; nprog++;
@ -467,7 +467,7 @@ void TStampa_giornale::preprocess_footer()
TString progr_dare_ap(22), progr_avere_ap(22); TString progr_dare_ap(22), progr_avere_ap(22);
TString progr_dare(25), progr_avere(25), dts(25), ats(25); TString progr_dare(25), progr_avere(25), dts(25), ats(25);
TString256 riga; TString256 riga;
bool ap = FALSE; bool ap = false;
int r=1; // was 2 int r=1; // was 2
const int STUMB = 42; const int STUMB = 42;
real dt, at; real dt, at;
@ -478,7 +478,7 @@ void TStampa_giornale::preprocess_footer()
{ {
real2currency(progr_dare_ap, _tot_dare_progr_ap); real2currency(progr_dare_ap, _tot_dare_progr_ap);
real2currency(progr_avere_ap, _tot_avere_progr_ap); real2currency(progr_avere_ap, _tot_avere_progr_ap);
ap = TRUE; ap = true;
} }
// //
@ -510,10 +510,10 @@ void TStampa_giornale::preprocess_footer()
(const char *) ats); (const char *) ats);
set_footer (r++, (const char*) riga); set_footer (r++, (const char*) riga);
_forza_ariportare = FALSE; _forza_ariportare = false;
if (_devo_riportare > 1) if (_devo_riportare > 1)
_devo_riportare = FALSE; _devo_riportare = false;
} }
} }
@ -523,7 +523,7 @@ int TStampa_giornale::set_totali_pagina(int righe)
TString progr_dare_ap(22), progr_avere_ap(22); TString progr_dare_ap(22), progr_avere_ap(22);
TString progr_dare(22), progr_avere(22), dts(22), ats(22); TString progr_dare(22), progr_avere(22), dts(22), ats(22);
TString256 riga; TString256 riga;
bool ap = FALSE; bool ap = false;
const int SHIFT = 15; const int SHIFT = 15;
const int STUMB = 51 + SHIFT; const int STUMB = 51 + SHIFT;
real dt, at; real dt, at;
@ -533,7 +533,7 @@ int TStampa_giornale::set_totali_pagina(int righe)
{ {
real2currency(progr_dare_ap, _tot_dare_progr_ap); real2currency(progr_dare_ap, _tot_dare_progr_ap);
real2currency(progr_avere_ap, _tot_avere_progr_ap); real2currency(progr_avere_ap, _tot_avere_progr_ap);
ap = TRUE; ap = true;
} }
if (_cur->pos() == _cur->items()-1) // se sono sull'ultimo if (_cur->pos() == _cur->items()-1) // se sono sull'ultimo
@ -596,10 +596,10 @@ int TStampa_giornale::set_totali_pagina(int righe)
// Determina se le righe settate finora stanno in questa pagina oppure no // Determina se le righe settate finora stanno in questa pagina oppure no
_gia_settato_ariportare = righe_rimaste() > righe; _gia_settato_ariportare = righe_rimaste() > righe;
// La fill_page mette forza_ariportare a TRUE // La fill_page mette forza_ariportare a true
// nel caso di pagine con solo i totali (v. fax VLADIMIRO) bisogna impedire // nel caso di pagine con solo i totali (v. fax VLADIMIRO) bisogna impedire
// che venga stampato di nuovo "Totale ..." nella preprocess_footer // che venga stampato di nuovo "Totale ..." nella preprocess_footer
_forza_ariportare = FALSE; _forza_ariportare = false;
dt = _tot_dare_progr + _tot_dare_progr_ap; dt = _tot_dare_progr + _tot_dare_progr_ap;
at = _tot_avere_progr + _tot_avere_progr_ap; at = _tot_avere_progr + _tot_avere_progr_ap;
@ -741,7 +741,7 @@ void TStampa_giornale::preprocess_header()
set_header(2, riga); // Sempre quasi sulla prima riga! set_header(2, riga); // Sempre quasi sulla prima riga!
} }
// _gia_settato_ariportare = FALSE; // _gia_settato_ariportare = false;
if (pag > 0) // Stampa riporti if (pag > 0) // Stampa riporti
{ {
@ -798,7 +798,7 @@ bool TStampa_giornale::preprocess_print(int file, int counter)
switch (file) switch (file)
{ {
case LF_MOV: case LF_MOV:
_nuovo_mese = FALSE; _nuovo_mese = false;
_iva_array.destroy(); _iva_array.destroy();
_nprog_mov = _nprog_da; _nprog_mov = _nprog_da;
*_RecPartoDa = _cur->curr(); *_RecPartoDa = _cur->curr();
@ -806,7 +806,7 @@ bool TStampa_giornale::preprocess_print(int file, int counter)
default: default:
break; break;
} }
return TRUE; return true;
} }
int TStampa_giornale::righe_rimaste() const int TStampa_giornale::righe_rimaste() const
@ -858,14 +858,14 @@ print_action TStampa_giornale::postprocess_print(int file, int counter)
print_action TStampa_giornale::postprocess_page(int file, int counter) print_action TStampa_giornale::postprocess_page(int file, int counter)
{ {
int righe_iva_settate=0; int righe_iva_settate=0;
// bool FINITO = FALSE; // bool FINITO = false;
if (counter) if (counter)
{ {
if (_nuovo_mese) if (_nuovo_mese)
{ {
printer().formfeed(); printer().formfeed();
_nuovo_mese = FALSE; _nuovo_mese = false;
} }
return NEXT_PAGE; return NEXT_PAGE;
} }
@ -889,7 +889,7 @@ print_action TStampa_giornale::postprocess_page(int file, int counter)
--(*_cur); --(*_cur);
_cur->restore_status(); _cur->restore_status();
_devo_riportare = TRUE; _devo_riportare = true;
const bool last_row = _cur->pos() == _cur->items()-1; const bool last_row = _cur->pos() == _cur->items()-1;
if (_data_corr != _data_succ || last_row) if (_data_corr != _data_succ || last_row)
@ -901,9 +901,9 @@ print_action TStampa_giornale::postprocess_page(int file, int counter)
righe = set_totali_pagina(righe); righe = set_totali_pagina(righe);
if (righe - 1 > (int)printer().rows_left()) if (righe - 1 > (int)printer().rows_left())
_devo_riportare = 3; // Very TRUE! _devo_riportare = 3; // Very true!
else else
_devo_riportare = FALSE; _devo_riportare = false;
// Nella stampa su bollato metto un segno su tutte le righe // Nella stampa su bollato metto un segno su tutte le righe
if (_stampa_definitiva) if (_stampa_definitiva)
@ -922,7 +922,7 @@ print_action TStampa_giornale::postprocess_page(int file, int counter)
// pagina dopo // pagina dopo
if (!_totals_updated) if (!_totals_updated)
update_totals(_sezione, _importo); update_totals(_sezione, _importo);
_gia_settato_ariportare = FALSE; _gia_settato_ariportare = false;
break; break;
default: default:
break; break;
@ -1145,11 +1145,11 @@ void TStampa_giornale::set_rows (int file, int counter)
const int left = printer().rows_left(); const int left = printer().rows_left();
if (left > 0 && left < rows) if (left > 0 && left < rows)
{ {
_totals_updated = TRUE; _totals_updated = true;
update_totals(_sezione, _importo); update_totals(_sezione, _importo);
} }
else else
_totals_updated = FALSE; _totals_updated = false;
} }
} }
break; break;
@ -1166,7 +1166,7 @@ void TStampa_giornale::set_rows (int file, int counter)
// //
bool TStampa_giornale::preprocess_page(int file, int counter) bool TStampa_giornale::preprocess_page(int file, int counter)
{ {
if (counter) return TRUE; if (counter) return true;
switch (file) switch (file)
{ {
@ -1184,7 +1184,7 @@ bool TStampa_giornale::preprocess_page(int file, int counter)
if (_data_corr > _ultima_data_mov) if (_data_corr > _ultima_data_mov)
_ultima_data_mov = _data_corr; _ultima_data_mov = _data_corr;
_mese_corr = _data_corr.month(); _mese_corr = _data_corr.month();
_devo_riportare = TRUE; _devo_riportare = true;
} }
break; break;
@ -1199,7 +1199,7 @@ bool TStampa_giornale::preprocess_page(int file, int counter)
break; break;
} }
set_rows (file, counter); set_rows (file, counter);
return TRUE; return true;
} }
void TStampa_giornale::calcola_iva() void TStampa_giornale::calcola_iva()
@ -1450,27 +1450,27 @@ bool TStampa_giornale::controlla_mov_aep()
fine_ep = esc[aep].fine(); fine_ep = esc[aep].fine();
} }
else else
return TRUE; // = e' il primo esercizio return true; // = e' il primo esercizio
TRectype da(LF_MOV), a(LF_MOV); TRectype da(LF_MOV), a(LF_MOV);
da.put(MOV_DATAREG, inizio_ep); da.put(MOV_DATAREG, inizio_ep);
a.put (MOV_DATAREG, fine_ep); a.put (MOV_DATAREG, fine_ep);
_cur->setregion(da, a); _cur->setregion(da, a);
_cur->setfilter(""); _cur->setfilter("");
_cur->set_filterfunction(filter_func, TRUE); _cur->set_filterfunction(filter_func, true);
const TRecnotype items = _cur->items(); const TRecnotype items = _cur->items();
_cur->freeze(); _cur->freeze();
TProgind pi(items, TR("Controllo movimenti esercizio precedente"), FALSE, TRUE); TProgind pi(items, TR("Controllo movimenti esercizio precedente"), false, true);
bool gia_stampati = TRUE; bool gia_stampati = true;
for (*_cur = 0L ; _cur->pos() < items; ++(*_cur)) for (*_cur = 0L ; _cur->pos() < items; ++(*_cur))
{ {
pi.addstatus(1); pi.addstatus(1);
gia_stampati = _cur->file().get_bool("STAMPATO"); gia_stampati = _cur->file().get_bool("STAMPATO");
if (!gia_stampati) break; // basta trovarne uno ancora da stampare if (!gia_stampati) break; // basta trovarne uno ancora da stampare
} }
_cur->freeze(FALSE); _cur->freeze(false);
if (!gia_stampati) if (!gia_stampati)
error_box(TR("Impossibile proseguire con la stampa:\n" error_box(TR("Impossibile proseguire con la stampa:\n"
"Esistono movimenti nell'esercizio precedente\n" "Esistono movimenti nell'esercizio precedente\n"
@ -1527,7 +1527,7 @@ bool TStampa_giornale::data_a_hndl (TMask_field& f, KEY k)
const TDate data_a(f.get()); const TDate data_a(f.get());
if (!data_a.ok()) if (!data_a.ok())
return TRUE; return true;
TEsercizi_contabili esc; TEsercizi_contabili esc;
const int esercizio = esc.date2esc(data_a); const int esercizio = esc.date2esc(data_a);
@ -1560,7 +1560,7 @@ bool TStampa_giornale::data_a_hndl (TMask_field& f, KEY k)
} }
} // if K_ENTER } // if K_ENTER
return TRUE; return true;
} }
bool TStampa_giornale::data_da_hndl(TMask_field& f, KEY k) bool TStampa_giornale::data_da_hndl(TMask_field& f, KEY k)
@ -1573,7 +1573,7 @@ bool TStampa_giornale::data_da_hndl(TMask_field& f, KEY k)
const TDate data_a(m.get(DATA_A)); const TDate data_a(m.get(DATA_A));
if (!data_da.ok() || !data_a.ok()) if (!data_da.ok() || !data_a.ok())
return TRUE; return true;
if (data_da.year() != data_a.year()) if (data_da.year() != data_a.year())
return f.error_box(TR("Le due date non appartengono allo stesso anno")); return f.error_box(TR("Le due date non appartengono allo stesso anno"));
@ -1594,7 +1594,7 @@ bool TStampa_giornale::data_da_hndl(TMask_field& f, KEY k)
if (data_da.ok() && data_da > data_a) if (data_da.ok() && data_da > data_a)
return f.warning_box(TR("La data di partenza non puo' essere maggiore della data finale")); return f.warning_box(TR("La data di partenza non puo' essere maggiore della data finale"));
} }
return TRUE; return true;
} }
// //
@ -1614,7 +1614,7 @@ bool TStampa_giornale::mask_a_cod_reg (TMask_field& f, KEY k)
// 25/11 controlli sul registro solo DOPO aver messo la DATA_A // 25/11 controlli sul registro solo DOPO aver messo la DATA_A
if (data_astr.empty()) if (data_astr.empty())
return TRUE; return true;
else else
{ {
TEsercizi_contabili esc; TEsercizi_contabili esc;
@ -1633,7 +1633,7 @@ bool TStampa_giornale::mask_a_cod_reg (TMask_field& f, KEY k)
m.set(REG_DESC, a._reg_descr); m.set(REG_DESC, a._reg_descr);
m.set(ANNO_ESER, a._ae_solare); m.set(ANNO_ESER, a._ae_solare);
} }
return TRUE; return true;
} }
// //
@ -1653,27 +1653,27 @@ bool TStampa_giornale::mask_b_ripristina (TMask_field& f, KEY k)
m.set(N_RIGA_STAMPATO, a._nprog_da); m.set(N_RIGA_STAMPATO, a._nprog_da);
m.set(PAGINA_DA, a._pagine_stampate); m.set(PAGINA_DA, a._pagine_stampate);
} }
return TRUE; return true;
} }
bool TStampa_giornale::mask_b_warning (TMask_field& f, KEY k) bool TStampa_giornale::mask_b_warning (TMask_field& f, KEY k)
{ {
static bool gia_detto = FALSE; static bool gia_detto = false;
if (k == K_TAB && !f.mask().is_running()) if (k == K_TAB && !f.mask().is_running())
gia_detto = FALSE; gia_detto = false;
if (!gia_detto) if (!gia_detto)
{ {
if (k == K_SPACE) if (k == K_SPACE)
{ {
f.warning_box(TR("Le modifiche a questi progressivi saranno scritte nel registro")); f.warning_box(TR("Le modifiche a questi progressivi saranno scritte nel registro"));
gia_detto = TRUE; gia_detto = true;
return TRUE; return true;
} }
} }
return TRUE; return true;
} }
void TStampa_giornale::init_print() void TStampa_giornale::init_print()
@ -1696,7 +1696,7 @@ void TStampa_giornale::init_print()
for (int i=1; i<RIGHE_FOOTER; i++) set_footer(i, "%s", " "); for (int i=1; i<RIGHE_FOOTER; i++) set_footer(i, "%s", " ");
set_real_picture (REAL_PICTURE); set_real_picture (REAL_PICTURE);
set_print_zero(TRUE); set_print_zero(true);
if (_stampa_width == 1) if (_stampa_width == 1)
_stampa_width = 132; _stampa_width = 132;
@ -1739,7 +1739,7 @@ void TStampa_giornale::init_totals()
bool TStampa_giornale::init_cursor() bool TStampa_giornale::init_cursor()
{ {
// bool gia_stampati = FALSE; // bool gia_stampati = false;
TRectype da (LF_MOV); TRectype da (LF_MOV);
TRectype a (LF_MOV); TRectype a (LF_MOV);
@ -1748,7 +1748,7 @@ bool TStampa_giornale::init_cursor()
a.put (MOV_DATAREG, _data_a); a.put (MOV_DATAREG, _data_a);
_cur->setregion(da, a); _cur->setregion(da, a);
_cur->set_filterfunction(filter_func, TRUE); _cur->set_filterfunction(filter_func, true);
_cur->setfilter(_stampa_definitiva ? "STAMPATO!=\"X\"" : ""); _cur->setfilter(_stampa_definitiva ? "STAMPATO!=\"X\"" : "");
(*_cur) = 0L; (*_cur) = 0L;
@ -1759,7 +1759,7 @@ bool TStampa_giornale::init_cursor()
return warning_box(TR("Non ci sono movimenti da stampare nel periodo selezionato.\nLa stampa e' annullata")); return warning_box(TR("Non ci sono movimenti da stampare nel periodo selezionato.\nLa stampa e' annullata"));
} }
return TRUE; return true;
} }
bool TStampa_giornale::set_print(int) bool TStampa_giornale::set_print(int)
@ -1772,7 +1772,7 @@ bool TStampa_giornale::set_print(int)
// set_reg_filter(ma); // set_reg_filter(ma);
_pagina_da = 0; // Parto dall'inizio _pagina_da = 0; // Parto dall'inizio
_forza_ariportare = FALSE; _forza_ariportare = false;
KEY tasto; KEY tasto;
while ((tasto = ma.run()) != K_QUIT) while ((tasto = ma.run()) != K_QUIT)
@ -1787,7 +1787,7 @@ bool TStampa_giornale::set_print(int)
_stampa_width = ma.get_int(STAMPA_WIDTH); _stampa_width = ma.get_int(STAMPA_WIDTH);
_stampa_len = ma.get_int(STAMPA_LEN); _stampa_len = ma.get_int(STAMPA_LEN);
set_magic_currency(TRUE); set_magic_currency(true);
// set_curr_codval(ma.get(F_CODVAL)); // set_curr_codval(ma.get(F_CODVAL));
// Se stampa definitiva DALLA_DATA e' la data di inizio esercizio // Se stampa definitiva DALLA_DATA e' la data di inizio esercizio
@ -1840,14 +1840,14 @@ bool TStampa_giornale::set_print(int)
init_print(); init_print();
init_totals(); init_totals();
return TRUE; return true;
} }
return FALSE; return false;
} }
int cg3400(int argc, char * argv[]) int cg3400(int argc, char * argv[])
{ {
TStampa_giornale app; TStampa_giornale app;
app.run(argc, argv, TR("Stampa libro giornale")); app.run(argc, argv, TR("Stampa libro giornale"));
return TRUE; return true;
} }

View File

@ -214,10 +214,11 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
_nditte->save_status(); _nditte->save_status();
if (_nditte->is_first_match(LF_ATTIV)) if (_nditte->is_first_match(LF_ATTIV))
{ {
const TRectype& ndt_att = _nditte->curr(LF_ATTIV);
do do
{ {
const TString8 codatt = _nditte->curr(LF_ATTIV).get("CODATT"); const TString8 codatt = ndt_att.get("CODATT");
const TString80 desatt = _nditte->curr(LF_ATTIV).get("DESCR"); const TString80 desatt = ndt_att.get("DESCR");
quater = _nditte->curr().get_bool("FLIVA11Q"); quater = _nditte->curr().get_bool("FLIVA11Q");
// attività mista: ce ne sono in realtà due // attività mista: ce ne sono in realtà due
@ -227,9 +228,9 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
if (_prind) if (_prind)
{ {
TString buf(80); TString buf(80);
buf.format( _printonly ? FR("Stampa liquidazione (mese %d)...\n%s: %s\n") : buf.format( _printonly ? FR("Stampa liquidazione (mese %d %d)...\n%s: %s\n") :
FR("Calcolo liquidazione (mese %d)...\n%s: %s\n"), FR("Calcolo liquidazione (mese %d %d)...\n%s: %s\n"),
month, (const char*)_nditte_r->get(NDT_RAGSOC), (const char*)desatt); month, atoi(_year), (const char*)_nditte_r->get(NDT_RAGSOC), (const char*)desatt);
_prind->set_text(buf); _prind->set_text(buf);
} }
@ -282,10 +283,10 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
look_pla(cattiv, false); look_pla(cattiv, false);
} }
else else
_isservizio = _nditte->curr(LF_ATTIV).get("TIPOATT") == "S"; _isservizio = ndt_att.get("TIPOATT") == "S";
_isviaggio = _nditte->curr(LF_ATTIV).get_bool("REG74TER"); _isviaggio = ndt_att.get_bool("REG74TER");
_isagricolo = _nditte->curr(LF_ATTIV).get_bool("REGAGR"); _isagricolo = ndt_att.get_bool("REGAGR");
_isagr98 = _isagricolo && atoi(_year) >= 1998; _isagr98 = _isagricolo && atoi(_year) >= 1998;
_isvent = false; _isvent = false;
@ -559,7 +560,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) if (month != 13 && !_recalc_regis) // Aggiunto test per evitare azzeramenti in stampa registri 19-06-2013
zero_diff(month,codatt); zero_diff(month,codatt);
} }
@ -569,8 +570,8 @@ bool TLiquidazione_app::ivadiff_chiusa(const TRectype& mov, const TDate& fine) c
TString query; TString query;
query << "USA IVADIFF SELECT BETWEEN(DATAREGP,0," << fine.date2ansi() << ')' query << "USA IVADIFF SELECT 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);
const TRectype& rid = id.cursor()->curr(); const TRectype& rid = id.cursor()->curr();
@ -971,18 +972,15 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (_isviaggio) if (_isviaggio)
{ {
if (tipomov == vendita && !(_mov->get(MOV_DATA74TER).empty())) if (tipomov == vendita && _mov->get(MOV_DATA74TER).not_empty())
date = _mov->get_date(MOV_DATA74TER); date = _mov->get_date(MOV_DATA74TER);
if (date.year() != year_int) // Controlla anno di appartenenza, altrimenti is_date_ok potrebbe non funzionare if (date.year() != year_int) // Controlla anno di appartenenza, altrimenti is_date_ok potrebbe non funzionare
continue; continue;
} }
const TRectype& rcs = _cur->curr(LF_CAUSALI); const TRectype& rcs = _cur->curr(LF_CAUSALI);
const bool fattrit = rcs.get_bool("RITFATT"); const bool fattrit = rcs.get_bool(CAU_RITFATT);
const bool cau_intra = rcs.get_bool("INTRACOM"); const bool cau_intra = rcs.get_bool(CAU_INTRACOM);
const bool cau_valintra = rcs.get_bool("VALINTRA"); const bool cau_valintra = rcs.get_bool(CAU_VALINTRA);
if (_mov->get_long(MOV_NUMREG) == 10146)
int cazzone = 1;
// Inizio gestione IVA differita // Inizio gestione IVA differita
const bool iva_diff = _isdiff && _mov->get_bool(MOV_LIQDIFF); const bool iva_diff = _isdiff && _mov->get_bool(MOV_LIQDIFF);
@ -1201,11 +1199,19 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
else else
id.put(RMI_IMPOSTA, imposta_orig); id.put(RMI_IMPOSTA, imposta_orig);
id.write_rewrite(); const int ew = id.write_rewrite();
if (ew != NOERR)
cantwrite_box(id.description());
} }
if (!pagscatt.empty()) if (!pagscatt.empty())
{ {
#ifdef DBG
if (_mov->get_long(MOV_NUMREG) == 13871)
xvt_dm_popup_message("Aggiornamento IVADIFF per movimento 13871");
#endif
const char sezpag = tipomov == vendita ? 'A' : 'D'; const char sezpag = tipomov == vendita ? 'A' : 'D';
const real totfat = _mov->get(MOV_TOTDOC); const real totfat = _mov->get(MOV_TOTDOC);
@ -2067,7 +2073,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
vendite += iii; vendite += iii;
} }
if (autodafe) // autofatture non residenti art, 17 if (autodafe) // autofatture non residenti art.17
{ {
/* /*
* Si devono riportare a parte in annuale * Si devono riportare a parte in annuale
@ -3048,19 +3054,22 @@ void TLiquidazione_app::iva11_set_arr_phase_2(const TString& codatt)
} }
} // is_vendita } // is_vendita
// Boia chi linka!
// Sommatoria per il calcolo aliquote medie vendite/acquisti... // Sommatoria per il calcolo aliquote medie vendite/acquisti...
if (_pim->get_bool("B3")) // E' un record valido per fare questa cosa? if (_pim->get_bool("B3")) // E' un record valido per fare questa cosa?
{ {
if ((tiporeg)_pim->get_long("I1") == vendita) if ((tiporeg)_pim->get_long("I1") == vendita)
{ //vendite { //vendite
vtot += imp; ivav+=iva; vtot += imp;
ivav += iva;
} }
else else
{
//acquisti //acquisti
if (tipodet != 9) // Evita di sommare quelli con tipo detraibilita' 9 (MI2209) if (tipodet != 9) // Evita di sommare quelli con tipo detraibilita' 9 (MI2209)
{ {
atot += imp; ivaa+=iva; atot += imp;
ivaa += iva;
}
} }
} }
} }

View File

@ -568,21 +568,22 @@ bool TLiquidazione_app::look_reg(const char* reg)
bool TLiquidazione_app::look_iva(const char* cod) bool TLiquidazione_app::look_iva(const char* cod)
{ {
bool rt = TRUE; bool rt = true;
TString16 s(cod);
const bool is_key = _codiva_arr.is_key(cod); TString4 s = cod; s.trim();
const bool is_key = _codiva_arr.is_key(s);
if (is_key) if (is_key)
_iva->curr() = (TRectype&) _codiva_arr[s]; _iva->curr() = (const TRectype&)_codiva_arr[s];
else else
{ {
_iva->zero(); _iva->zero();
_iva->put("CODTAB", s); _iva->put("CODTAB", s);
if (_iva->read() == NOERR) rt = _iva->read() == NOERR;
if (rt)
_codiva_arr.add(s, _iva->curr()); _codiva_arr.add(s, _iva->curr());
else
rt = FALSE;
} }
return rt; return rt;
} }

View File

@ -368,7 +368,8 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
{ {
look_iva(vv->_codiva); look_iva(vv->_codiva);
_pim->put("I1", (long)vendita); _pim->put("I1", (long)vendita);
if (!_iva->get_bool("B4")) _pim->put("B3", "X"); if (!_iva->get_bool("B4"))
_pim->put("B3", "X");
} }
_pim->rewrite(); _pim->rewrite();
} }
@ -626,12 +627,20 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts,
// Azzera tabella IVA x CASSA // Azzera tabella IVA x CASSA
void TLiquidazione_app::zero_diff(int month, const char* codatt) void TLiquidazione_app::zero_diff(int month, const char* codatt)
{ {
// Azzero tuttp al momento dell'azzeramento della prima attività // Azzero tutto al momento dell'azzeramento della prima attività
if (_nditte->is_first_match(LF_ATTIV)) if (!_nditte->is_first_match(LF_ATTIV))
{ return;
if (month > 12 || (_freqviva == "T" && (month % 3) != 1)) if (month > 12 || (_freqviva == "T" && (month % 3) != 1))
return; return;
#ifdef DBG
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;
@ -659,4 +668,3 @@ void TLiquidazione_app::zero_diff(int month, const char* codatt)
file.rewrite(); file.rewrite();
} }
} }
}

View File

@ -171,14 +171,11 @@ void TLiquidazione_app::describe_name(int month, const TToken_string& codatts, c
d->_s0 = _nditte->curr().get(NDT_CODDITTA); d->_s0 = _nditte->curr().get(NDT_CODDITTA);
d->_s1 = _nditte->curr().get(NDT_RAGSOC); d->_s1 = _nditte->curr().get(NDT_RAGSOC);
if (atoi(_year) > 2007) const TRectype& ndt_att = _nditte->curr(LF_ATTIV);
{ d->_s2 = ndt_att.get(ATT_CODATECO);
const TString16 codateco = _nditte->curr(LF_ATTIV).get(ATT_CODATECO); if (d->_s2.blank())
d->_s2 = codateco; d->_s2 = ndt_att.get(ATT_CODATT);
} d->_s3 = single_att ? (const char*)ndt_att.get(ATT_DESCR) : "";
else
d->_s2 = _nditte->curr(LF_ATTIV).get(ATT_CODATT);
d->_s3 = single_att ? (const char*)_nditte->curr(LF_ATTIV).get(ATT_DESCR) : "";
d->_s4 = _freqviva; d->_s4 = _freqviva;
d->_f1 = month; d->_f1 = month;
@ -565,7 +562,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
const TString8 activity= codtab.mid(4,6); const TString8 activity= codtab.mid(4,6);
const TString4 codreg = codtab.mid(10,3); 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); 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); bool ok = look_reg(codreg);
ok |= look_iva(codiva); ok |= look_iva(codiva);
@ -806,7 +803,6 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
} }
autodafe += adf; autodafe += adf;
autodafe_iva += adi;
art40 += va7i; art40 += va7i;
art40_iva += va7v; art40_iva += va7v;
} }
@ -972,7 +968,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
{ {
_DescrItem* ads = new _DescrItem(PIM_ROW); _DescrItem* ads = new _DescrItem(PIM_ROW);
ads->_s0 = ref; ads->_s0 = ref;
ads->_s1 = "AF"; // cosi' vollero, inoltre non e' piu' A35 ma AF, come sul dio sistema ads->_s1 = "AF"; // così vollero, inoltre non è più A35 ma AF, come sul dio sistema
ads->_r0 = autodafe; ads->_r0 = autodafe;
ads->_r1 = autodafe_iva; ads->_r1 = autodafe_iva;
ads->_f0 = false; ads->_f0 = false;
@ -1642,28 +1638,25 @@ 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; TString query; // righe pagamento (TIPOMOV>=3) relative a fatture (TOTDOC>0) ed escluse NC!
query << "USE IVADIFF KEY 2 SELECT (TIPOMOV>2)&&(TIPOIVA=" << tipoiva << ')'; query << "USE IVADIFF KEY 2 SELECT (TIPOMOV>2)&&(MOV.TOTDOC>0)&&(TIPOIVA=" << tipoiva << ')'
query << "\nFROM " << limit << "\nTO " << limit; << "\nJOIN MOV INTO NUMREG==NUMREG"
<< "\nFROM " << limit << "\nTO " << limit;
TISAM_recordset id(query); TISAM_recordset id(query);
const TRectype& rec = id.cursor()->curr(); const TRectype& rec = id.cursor()->curr();
for (bool ok = id.move_first(); ok; ok = id.move_next()) for (bool ok = id.move_first(); ok; ok = id.move_next())
{ {
const real iva = rec.get_real(RMI_IMPOSTA); const real iva = rec.get_real(RMI_IMPOSTA);
if (iva > ZERO) if (!iva.is_zero())
{ {
const real imp = rec.get_real(RMI_IMPONIBILE);
const int tipodiff = rec.get_int("TIPODIFF"); const int tipodiff = rec.get_int("TIPODIFF");
if (tipodiff == 1) const real imp = rec.get_real(RMI_IMPONIBILE);
switch (tipodiff)
{ {
imponibile_diff += imp; case 1: imponibile_diff += imp; imposta_diff += iva; break;
imposta_diff += iva; case 2: imponibile_xcas += imp; imposta_xcas += iva; break;
} else default: break;
if (tipodiff == 2)
{
imponibile_xcas += imp;
imposta_xcas += iva;
} }
flag |= tipodiff; flag |= tipodiff;
} }
@ -1677,8 +1670,8 @@ int TLiquidazione_app::print_acc_diff_xcassa(const _DescrItem& d)
int i = 9; int i = 9;
const real& totiva = d._r0; const real& totiva = d._r0;
real ivadiff_inc = d._r29; const real ivadiff_inc = d._r29;
real ivadiff_pag = d._r33; const real ivadiff_pag = d._r33;
real ivaxcas_inc, ivaxcas_pag; real ivaxcas_inc, ivaxcas_pag;
@ -2483,12 +2476,12 @@ void TLiquidazione_app::set_grand_2000(_DescrItem& d, int &rw)
{ {
real dimp, diva, ximp, xiva; real dimp, diva, ximp, xiva;
if (!diffinc_iva.is_zero() && calc_inc_diff(1, dimp, diva, ximp, xiva) & 0x2) if (!diffinc_iva.is_zero() && calc_inc_diff(1, dimp, diva, ximp, xiva))
{ {
diffinc_iva = diva; diffinc_iva = diva;
xcasinc_iva = xiva; xcasinc_iva = xiva;
} }
if (!diffinc_iva_acq.is_zero() && calc_inc_diff(2, dimp, diva, ximp, xiva) & 0x2) if (!diffinc_iva_acq.is_zero() && calc_inc_diff(2, dimp, diva, ximp, xiva))
{ {
diffinc_iva_acq = diva; diffinc_iva_acq = diva;
xcasinc_iva_acq = xiva; xcasinc_iva_acq = xiva;

View File

@ -1915,7 +1915,20 @@ bool TStampa_registri_app::some_IVAxCassa(int da_mese, int a_mese) const
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);
return id.items() > 0; const TRecnotype recs = id.items();
#ifdef DBG
TString msg;
if (a_mese > da_mese)
msg << "Nei mesi da " << itom(da_mese) << " a " < itom(a_mese);
else
msg << "Nel mese di " << itom(da_mese);
msg << " ci sarebbero " << recs << " incassi/pagamenti per cassa.";
xvtil_statbar_set(msg);
xvt_sys_sleep(1000);
#endif
return recs > 0;
} }
bool TStampa_registri_app::print_IVAxCassa(int da_month, int a_month) bool TStampa_registri_app::print_IVAxCassa(int da_month, int a_month)
@ -1923,6 +1936,7 @@ bool TStampa_registri_app::print_IVAxCassa(int da_month, int a_month)
if (_tipo_reg != vendita && _tipo_reg != acquisto) if (_tipo_reg != vendita && _tipo_reg != acquisto)
return false; return false;
// Non stampare il prospetto IVA differita sui registri
if (ini_get_bool(CONFIG_STUDIO, "cg", "NoIdRg")) if (ini_get_bool(CONFIG_STUDIO, "cg", "NoIdRg"))
{ {
_riga_prospettoXcassa.destroy(); _riga_prospettoXcassa.destroy();
@ -1946,7 +1960,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)&&(TIPOMOV>2)&&(STR(MOV.TOTDOC>0))";
query << "\nBY DATAREGP DATAREG"; 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";
TISAM_recordset id(query); TISAM_recordset id(query);
@ -1958,10 +1972,21 @@ bool TStampa_registri_app::print_IVAxCassa(int da_month, int a_month)
const bool il = _intesta_liq; const bool il = _intesta_liq;
_intesta_liq = true; _intesta_liq = true;
if (id.items() > 0) const TRecnotype recs = id.items();
#ifdef DBG
TString msg;
if (a_month > a_month)
msg << "Nei mesi da " << itom(da_month) << " a " < itom(a_month);
else
msg << "Nel mese di " << itom(da_month);
msg << " ci sono effettivamente " << recs << " incassi/pagamenti per cassa.";
xvtil_statbar_set(msg);
#endif
if (recs > 0)
{ {
riga.reset(); riga.reset();
if (pr.rows_left() < id.items()+8) if (pr.rows_left() < pr.rows() && pr.rows_left() < id.items()+8)
{ {
pr.formfeed(); pr.formfeed();
riga.put(linea, 0); riga.put(linea, 0);
@ -1972,7 +1997,7 @@ bool TStampa_registri_app::print_IVAxCassa(int da_month, int a_month)
if (_tipo_reg == vendita) if (_tipo_reg == vendita)
riga.put(TR("DETTAGLIO INCASSI FATTURE CON IVA DIFFERITA O PER CASSA"), 40); riga.put(TR("DETTAGLIO INCASSI FATTURE CON IVA DIFFERITA O PER CASSA"), 40);
else else
riga.put(TR("DETTAGLIO PAGAMENTI FATTURE CON IVA DIFFERITA O PER CASSA"), 40); riga.put(TR("DETTAGLIO PAGAMENTI FATTURE CON IVA PER CASSA"), 40);
pr.print(riga); pr.print(riga);
riga.reset(); pr.print(riga); riga.reset(); pr.print(riga);
@ -3344,7 +3369,12 @@ void TStampa_registri_app::no_movimenti()
_mov_empty = true; _mov_empty = true;
int da = 1, a = _fino_a_mese; int da = 1, a = _fino_a_mese;
if (_tipo_stampa == bollato || _tipo_stampa == rif_giornale) if (_tipo_stampa == bollato || _tipo_stampa == rif_giornale)
{
if (_tipo_stampa == rif_giornale)
da = 1; da = 1;
else
da = _frequiva == 'M' ? _fino_a_mese : _fino_a_mese-2; // Mi sembra più sensato 19/06/2013
}
if (_tipo_stampa == libro_unico) if (_tipo_stampa == libro_unico)
da = _fino_a_mese; da = _fino_a_mese;
if (_tipo_stampa == prova) if (_tipo_stampa == prova)
@ -3369,8 +3399,7 @@ void TStampa_registri_app::no_movimenti()
TFilename app; TFilename app;
app.temp(); app.temp();
int mese = a; int mese = a;
//se la frequenza e' trimestrale // se la frequenza e' trimestrale aggiusta il mese al trimestre a cui appartiene
//aggiusta il mese al trimestre a cui appartiene
if (_frequiva == 'T') if (_frequiva == 'T')
{ {
mese += 2 - ((mese-1) % 3); mese += 2 - ((mese-1) % 3);
@ -3730,10 +3759,9 @@ bool TStampa_registri_app::stampa_registri_IVA(const TMask& m)
const long item = _cur->items(); const long item = _cur->items();
// 17.5.95 Leggo parametri di stampa del registro // 17.5.95 Leggo parametri di stampa del registro
TString16 config;
const long codditta = get_firm(); const long codditta = get_firm();
const char* reg = (const char*)_codreg; TString16 config; config.format("REG%05ld%s", codditta, (const char*)_codreg);
config.format("REG%05ld%s", codditta, reg);
printer().read_configuration(config); printer().read_configuration(config);
_mov_empty = true; _mov_empty = true;
@ -3744,8 +3772,7 @@ bool TStampa_registri_app::stampa_registri_IVA(const TMask& m)
if (is_cancelled()) if (is_cancelled())
return false; return false;
} }
//non ci sono movimenti da stampare nel periodo richiesto! else //non ci sono movimenti da stampare nel periodo richiesto!
else
no_movimenti(); no_movimenti();
if (_tipo_stampa == libro_unico && _rif_vid) if (_tipo_stampa == libro_unico && _rif_vid)
@ -3792,7 +3819,8 @@ bool TStampa_registri_app::stampa_registri_IVA(const TMask& m)
if (_u_data.ok()) if (_u_data.ok())
if (_data_a < _u_data) //e' molto imp. che rimanga < e non <= !!! if (_data_a < _u_data) //e' molto imp. che rimanga < e non <= !!!
{ //(per via del discorso liq. annuale) { //(per via del discorso liq. annuale)
message_box(FR("Ditta %ld: Il registro %s e' gia' stato stampato come bollato di %s"), _ditta, (const char*) _codreg, itom(_fino_a_mese)); message_box(FR("Ditta %ld: Il registro %s e' gia' stato stampato come bollato di %s"),
_ditta, (const char*) _codreg, itom(_fino_a_mese));
continue; continue;
} }
} }

View File

@ -16,7 +16,7 @@ int main(int argc,char** argv)
case 6: cg5600(argc,argv); break; // Ripristino liquidazione case 6: cg5600(argc,argv); break; // Ripristino liquidazione
case 7: cg5700(argc,argv); break; // Comunicazione annuale dati IVA case 7: cg5700(argc,argv); break; // Comunicazione annuale dati IVA
case 8: cg5800(argc,argv); break; // Quadro VT case 8: cg5800(argc,argv); break; // Quadro VT
case 9: cg5900(argc,argv); break; // Stampa Prorata case 9: cg5900(argc,argv); break; // Stampa pro-rata
default: cg5000(argc,argv); break; // Parametri Studio default: cg5000(argc,argv); break; // Parametri Studio
} }
return 0; return 0;

View File

@ -43,7 +43,7 @@ bool TParametri_ditta::user_create()
cur.freeze(); cur.freeze();
for (cur = 0L; cur.pos() < items; ++cur) for (cur = 0L; cur.pos() < items; ++cur)
// istanzia array _atts on le attivita' della ditta corrente // istanzia array _atts on le attività della ditta corrente
_atts.add(r.get(ATT_CODATT)); _atts.add(r.get(ATT_CODATT));
return TRUE; return TRUE;
@ -52,7 +52,7 @@ bool TParametri_ditta::user_create()
void TParametri_ditta::check_registers(int year) void TParametri_ditta::check_registers(int year)
{ {
// controlla che per ogni data attivita' esistano almeno un registro // controlla che per ogni data attività esistano almeno un registro
// acquisti, vendite e giornale; warning appropriato in caso negativo // acquisti, vendite e giornale; warning appropriato in caso negativo
const byte R_ACQ = 0x01; const byte R_ACQ = 0x01;
const byte R_VEN = 0x02; const byte R_VEN = 0x02;
@ -92,7 +92,7 @@ void TParametri_ditta::check_registers(int year)
} }
if (flags < R_ALL) if (flags < R_ALL)
{ {
TString wrn(TR("I seguenti registri non esistono per l'attivita' ")); TString wrn(TR("I seguenti registri non esistono per l'attività "));
wrn << att << " (" << year << "):"; wrn << att << " (" << year << "):";
if ((flags & R_VEN) == 0x00) wrn << TR("\n\tregistro vendite"); if ((flags & R_VEN) == 0x00) wrn << TR("\n\tregistro vendite");
if ((flags & R_ACQ) == 0x00) wrn << TR("\n\tregistro acquisti"); if ((flags & R_ACQ) == 0x00) wrn << TR("\n\tregistro acquisti");
@ -100,7 +100,7 @@ void TParametri_ditta::check_registers(int year)
} }
} }
// libro giornale non si controlla per attivita' // libro giornale non si controlla per attività
if(!is_giornale) if(!is_giornale)
warning_box(FR("Non esiste probabilmente nessun libro giornale per l'anno %d"), year); warning_box(FR("Non esiste probabilmente nessun libro giornale per l'anno %d"), year);
} }

View File

@ -1,5 +1,5 @@
// cg5300.cpp // cg5300.cpp
// modifica parametri contabilita' relativi alla liquidazione // modifica parametri contabilità relativi alla liquidazione
#include <config.h> #include <config.h>
#include <defmask.h> #include <defmask.h>
@ -89,7 +89,7 @@ bool TParaliq_app::gelidi_handler(TMask_field& f, KEY k)
{ {
f.set(" "); f.set(" ");
f.error_box(TR("La gestione della liquidazione differita richiede " f.error_box(TR("La gestione della liquidazione differita richiede "
"la data di inizio attivita' sull'anagrafica della ditta.")); "la data di inizio attività sull'anagrafica della ditta."));
} }
} }
} }
@ -114,7 +114,7 @@ bool TParaliq_app::agrmin_handler(TMask_field& f, KEY k)
{ {
f.set(" "); f.set(" ");
f.error_box(TR("La gestione degli agricoltori minimi richiede " f.error_box(TR("La gestione degli agricoltori minimi richiede "
"il settaggio del regime agricolo sull'attivita'.")); "il settaggio del regime agricolo sull'attività."));
} }
} }
} }
@ -203,7 +203,7 @@ bool TParaliq_app::utcred_handler(TMask_field& f, KEY k)
void TParaliq_app::check_registers(int year) void TParaliq_app::check_registers(int year)
{ {
// controlla che per ogni data attivita' esistano almeno un registro // controlla che per ogni data attività esistano almeno un registro
// acquisti, vendite e giornale; warning appropriato in caso negativo // acquisti, vendite e giornale; warning appropriato in caso negativo
TSheet_field& sf = _msk->sfield(F_SHEET_PLA); TSheet_field& sf = _msk->sfield(F_SHEET_PLA);
const byte R_ACQ = 0x01; const byte R_ACQ = 0x01;
@ -240,7 +240,7 @@ void TParaliq_app::check_registers(int year)
} }
if (flags < R_ALL) if (flags < R_ALL)
{ {
TString wrn(TR("I seguenti registri non esistono per l'attivita' ")); TString wrn(TR("I seguenti registri non esistono per l'attività "));
wrn << att << "(" << year << "):"; wrn << att << "(" << year << "):";
if ((flags & R_VEN) == 0x00) wrn << TR("\n\tregistro vendite"); if ((flags & R_VEN) == 0x00) wrn << TR("\n\tregistro vendite");
if ((flags & R_ACQ) == 0x00) wrn << TR("\n\tregistro acquisti"); if ((flags & R_ACQ) == 0x00) wrn << TR("\n\tregistro acquisti");
@ -325,7 +325,7 @@ void TParaliq_app::init_query_mode(TMask& m)
void TParaliq_app::init_insert_mode(TMask& m) void TParaliq_app::init_insert_mode(TMask& m)
{ {
// Inizializza array delle attivita' // Inizializza array delle attività
init_array(m, TRUE); init_array(m, TRUE);
m.set(F_ROUNDLIQ, TCurrency::get_firm_dec()); m.set(F_ROUNDLIQ, TCurrency::get_firm_dec());
} }
@ -355,7 +355,7 @@ int TParaliq_app::rewrite(const TMask& m)
TTable pla(TAB_PLA); TTable pla(TAB_PLA);
pla.put("CODTAB", codtab); pla.put("CODTAB", codtab);
pla.remove(); // Rimuove dalla tabella PLA il record senza il tipo attivita' ad 1 (se non c'e' fa lo stesso) pla.remove(); // Rimuove dalla tabella PLA il record senza il tipo attività ad 1 (se non c'e' fa lo stesso)
codtab << "1"; // Questo invece e' il codice che deve esistere realmente codtab << "1"; // Questo invece e' il codice che deve esistere realmente
pla.put("CODTAB", codtab); pla.put("CODTAB", codtab);
was = (pla.read() == NOERR); was = (pla.read() == NOERR);
@ -369,7 +369,7 @@ int TParaliq_app::rewrite(const TMask& m)
pla.put("CODTAB", codtab); pla.put("CODTAB", codtab);
// scrive i campi (vedi a read() per i nomi) // scrive i campi (vedi a read() per i nomi)
// in base alla riga sheet // in base alla riga sheet
pla.put("S7", tips); // tipo attivita' pla.put("S7", tips); // tipo attività
pla.put("R8", tt.get()); // prorata pla.put("R8", tt.get()); // prorata
pla.put("R5", tt.get()); // plafond art. 8 pla.put("R5", tt.get()); // plafond art. 8
pla.put("R6", tt.get()); // plafond art. 8bis pla.put("R6", tt.get()); // plafond art. 8bis
@ -439,7 +439,7 @@ int TParaliq_app::rewrite(const TMask& m)
int TParaliq_app::read(TMask& m) int TParaliq_app::read(TMask& m)
{ {
// legge da LIA (si istanziano i campi credito prec. e Freq. Vers // legge da LIA (si istanziano i campi credito prec. e Freq. Vers
// prende le attivita' una per una da _atts e // prende le attività una per una da _atts e
// crea le righe sheet // crea le righe sheet
m.autoload(*get_relation()); m.autoload(*get_relation());
@ -457,16 +457,16 @@ int TParaliq_app::read(TMask& m)
TCursor cur(&relpla, "", 1, &pla, &pla); TCursor cur(&relpla, "", 1, &pla, &pla);
const TRecnotype items = cur.items(); const TRecnotype items = cur.items();
init_array(m, FALSE); // Carica tutti i codici attivita' init_array(m, FALSE); // Carica tutti i codici attività
cur.freeze(); cur.freeze();
for (cur = 0L; cur.pos() < items; ++cur) for (cur = 0L; cur.pos() < items; ++cur)
{ {
tt = pla.get("CODTAB").mid(9,5); // codice attivita' tt = pla.get("CODTAB").mid(9,5); // codice attività
int i; int i;
for (i = 0; i < sf.items(); i++) // Cerca riga corrispondente sullo sheet for (i = 0; i < sf.items(); i++) // Cerca riga corrispondente sullo sheet
if (tt == sf.row(i).get(0)) break; if (tt == sf.row(i).get(0)) break;
tt.add(pla.get("S7")); // tipo attivita' tt.add(pla.get("S7")); // tipo attività
tt.add(pla.get("R8")); // prorata tt.add(pla.get("R8")); // prorata
tt.add(pla.get("R5")); // plafond art. 8 tt.add(pla.get("R5")); // plafond art. 8
tt.add(pla.get("R6")); // plafond art. 8bis tt.add(pla.get("R6")); // plafond art. 8bis

View File

@ -239,7 +239,7 @@ END
LIST F_TIPOATT 26 LIST F_TIPOATT 26
BEGIN BEGIN
PROMPT 4 3 "Tipo " PROMPT 4 3 "Tipo "
HELP "Tipo di attivita' della ditta" HELP "Tipo di attività della ditta"
ITEM " |Altre" ITEM " |Altre"
ITEM "E|Mista evid." ITEM "E|Mista evid."
ITEM "S|Serv. o mista gen." ITEM "S|Serv. o mista gen."

View File

@ -781,7 +781,7 @@ bool Visliq_app::vis_one(int m)
if (!n_rimborso.is_zero()) if (!n_rimborso.is_zero())
{ {
const bool old_rim = !rimborso.is_zero(); const bool old_rim = !rimborso.is_zero();
// check diritto (se non ce n'era gia' uno prima) // check diritto (se non ce n'era già uno prima)
if (!_lim->get_bool("B2") && !old_rim) if (!_lim->get_bool("B2") && !old_rim)
ok = yesno_box(FR("Non risulta diritto al rimborso per il mese %d. Si desidera " ok = yesno_box(FR("Non risulta diritto al rimborso per il mese %d. Si desidera "
"confermare ugualmente?"), m); "confermare ugualmente?"), m);
@ -1716,7 +1716,7 @@ void Visliq_app::write_general(TMask& m)
if (odbcr == "C") orett = -orett; if (odbcr == "C") orett = -orett;
if (ndbcr == "C") nrett = -nrett; if (ndbcr == "C") nrett = -nrett;
// acconto (si considerera' solo a dicembre) // acconto (si considererà solo a dicembre)
TToken_string& vo = (TToken_string&)_vers_rows[_freqviva == "M" ? 11 : 3]; TToken_string& vo = (TToken_string&)_vers_rows[_freqviva == "M" ? 11 : 3];
TToken_string& vn = sv.row(_freqviva == "M" ? 11 : 3); TToken_string& vn = sv.row(_freqviva == "M" ? 11 : 3);
real oacct (vo.get(5)); real oacct (vo.get(5));
@ -1824,7 +1824,7 @@ void Visliq_app::write_general(TMask& m)
} }
// controlla se qualcosa e' modificato e scrivi // controlla se qualcosa e' modificato e scrivi
// il valore; check compatibilita' versamenti e rimborsi // il valore; check compatibilità versamenti e rimborsi
// rileggi dati // rileggi dati
real cred = _lam->get_real("R2"); real cred = _lam->get_real("R2");
@ -1858,7 +1858,7 @@ void Visliq_app::write_general(TMask& m)
// se modificato rimborso sistemare // se modificato rimborso sistemare
if (nrimb != orimb && !_from_one) if (nrimb != orimb && !_from_one)
{ {
// check compatibilita' // check compatibilità
bool ok = TRUE; bool ok = TRUE;
if (!nrimb.is_zero()) if (!nrimb.is_zero())

401
cg/cg5900.cpp Normal file
View File

@ -0,0 +1,401 @@
// Programma per la gestione e la stampa della dichiarazione periodica IVA
#include <applicat.h>
#include <automask.h>
#include <execp.h>
#include <progind.h>
#include <recarray.h>
#include <relation.h>
#include <reprint.h>
#include "cg5900a.h"
#include "cglib03.h"
#include <attiv.h>
#include <causali.h>
#include <mov.h>
#include <rmov.h>
#include <rmoviva.h>
///////////////////////////////////////////////////////////
// TProrata_set
///////////////////////////////////////////////////////////
static int _year = 0;
static long _attiv = 0;
static TAssoc_array _causali;
static bool prorata_filter(const TRelation* rel)
{
const TRectype& mov = rel->curr(LF_MOV);
if (mov.get_char(MOV_TIPO) != 'F') // Solo movimenti fornitori
return false;
if (mov.get_char(MOV_PROVVIS) > ' ') // Solo movimenti definitivi
return false;
if (_year > 0)
{
const int anno = mov.get_int(MOV_ANNOIVA);
if (anno != _year)
return false;
}
const TBill zio(rel->curr());
const int cric = zio.tipo_cr();
if (cric >= 2 && cric <= 4) // Beni strumentali
return false;
const TString& codcaus = mov.get(MOV_CODCAUS);
TCausale* caus = (TCausale*)_causali.objptr(codcaus);
if (caus == NULL)
{
caus = new TCausale(codcaus, _year);
_causali.add(codcaus, caus);
}
if (caus->iva() != iva_acquisti)
return false;
if (caus->intra())
return false;
if (caus->tipodoc() == "AF")
return false;
if (_year > 0 && _attiv > 0)
{
const TRegistro& reg = caus->reg();
const long attiv = atol(reg.attivita());
if (attiv != _attiv)
return false;
}
return true;
}
class TProrata_set : public TISAM_recordset
{
protected:
virtual void set_custom_filter(TCursor& c) const;
virtual const TVariant& get_field(int logic, const char* fldname) const;
real perc_det() const;
public:
TProrata_set(const char* sql) : TISAM_recordset(sql) { }
};
void TProrata_set::set_custom_filter(TCursor& c) const
{
c.set_filterfunction(prorata_filter);
}
real TProrata_set::perc_det() const
{
real i = CENTO;
const TRectype& rmi = cursor()->curr();
if (rmi.get(RMI_TIPODET).full())
{
const TRectype& mov = cursor()->curr(LF_MOV);
real percind; get_tipodet_from_rmi(rmi, mov, percind);
i = CENTO-percind;
}
return i;
}
const TVariant& TProrata_set::get_field(int logic, const char* fldname) const
{
const TVariant& var = TISAM_recordset::get_field(logic, fldname);
if (logic == 0 || logic == LF_RMOVIVA)
{
if (xvt_str_compare_ignoring_case(fldname, RMI_IMPOSTA) == 0)
{
const real pd = perc_det();
if (pd < CENTO)
{
real i = var.as_real() * pd / CENTO;
return get_tmp_var() = i.round(2);
}
} else
if (xvt_str_compare_ignoring_case(fldname, "PERCDET") == 0)
{
return get_tmp_var() = perc_det();
}
}
return var;
}
///////////////////////////////////////////////////////////
// TProrata_rep
///////////////////////////////////////////////////////////
class TProrata_rep : public TReport
{
protected:
virtual bool use_mask() { return false; }
virtual bool set_recordset(const TString& sql);
public:
TProrata_rep();
};
bool TProrata_rep::set_recordset(const TString& sql)
{
TString query = sql;
if (_year > 0 && query.find("FROM ") < 0)
{
const TDate dal( 1, 1, _year);
const TDate al(31, 12, _year);
TISAM_recordset mov("USE MOV KEY 2\nFROM DATAREG=#DAL\nTO DATAREG=#AL");
mov.set_var("#DAL", dal);
mov.set_var("#AL", al);
long danumreg = 0;
long anumreg = 0;
const TRectype& curr = mov.cursor()->curr();
for (bool good = mov.move_first(); good; good = mov.move_next())
{
const long numreg = curr.get_long(MOV_NUMREG);
if (danumreg == 0 || numreg < danumreg)
danumreg = numreg;
if (numreg > anumreg)
anumreg = numreg;
}
query << "\nFROM NUMREG=" << danumreg << "\nTO NUMREG=" << anumreg;
}
TProrata_set* prs = new TProrata_set(query);
return TReport::set_recordset(prs);
}
TProrata_rep::TProrata_rep()
{
if (!load("cg5900a"))
cantread_box("cg5900a.rep");
}
///////////////////////////////////////////////////////////
// TProrata_msk
///////////////////////////////////////////////////////////
class TProrata_msk : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
real calc_prorata();
bool genera_mov(TFilename& ininame);
public:
TProrata_msk() : TAutomask("cg5900a") {}
};
real TProrata_msk::calc_prorata()
{
const long f = get_long(F_CODDITTA);
const int y = get_date(F_DATAFIN).year();
const long a = get_long(F_CODATT);
TString16 codtab;
codtab.format("%05ld%4d%05ld1", f, y, a);
const real pr = cache().get("%PLA", codtab, "R8");
set(F_PRORATA, pr);
_year = y;
TToken_string key; key.format("%05ld", prefix().get_codditta());
TRecord_array att(key, LF_ATTIV);
if (att.rows() > 1)
_attiv = a;
else
_attiv = 0;
return pr;
}
bool TProrata_msk::genera_mov(TFilename& ininame)
{
ininame.temp("cg5900", "ini");
TConfig trans(ininame, "Transaction");
trans.set("Action", "INSERT");
const TString& codcaus = get(F_CAUSALE);
const TCausale caus(codcaus, _year);
trans.set_paragraph("23");
trans.set(MOV_CODCAUS, codcaus);
trans.set(MOV_DATAREG, TDate(TODAY));
TString descr; descr << "PRO-RATA " << _year;
trans.set(MOV_DESCR, descr);
TProrata_rep rep;
rep.mask2report(*this);
TRecordset& recset = *rep.recordset();
TProgind pi(recset.items(), TR("Calcolo pro-rata"), false, true);
TAssoc_array mconti;
TString80 key;
const real prorata = calc_prorata();
for (bool good = recset.move_first(); good; good = recset.move_next())
{
pi.addstatus(1);
const real impdet = recset.get(RMI_IMPOSTA).as_real(); // Imposta detraibile
if (!impdet.is_zero())
{
const int gruppo = recset.get(RMI_GRUPPO).as_int();
const int conto = recset.get(RMI_CONTO).as_int();
const long sottoconto = recset.get(RMI_SOTTOCONTO).as_int();
const TString& codiva = recset.get(RMI_CODIVA).as_string();
key.format("%03d|%03d|%06ld|%s", gruppo, conto, sottoconto, (const char*)codiva);
real* pr = (real*)mconti.objptr(key);
if (pr == NULL)
{
pr = new real;
mconti.add(key, pr);
}
real imp = impdet * prorata / CENTO;
imp.round(2);
*pr += imp;
}
}
TString_array aconti;
FOR_EACH_ASSOC_OBJECT(mconti, o, k, i)
{
TToken_string* row = new TToken_string(k);
*row << '|' << *i;
aconti.add(row);
}
aconti.sort();
int riga = 0;
real tot;
const char* seziva = caus.sezione(1) == 'A' ? "A" : "D";
const char* sezimp = caus.sezione(1) == 'A' ? "D" : "A";
TString8 para;
FOR_EACH_ARRAY_ROW(aconti, r, row)
{
const int gruppo = row->get_int(0);
const int conto = row->get_int();
const long sottoconto = row->get_long();
const TString4 codiva = row->get();
const real imp = row->get();
if (!imp.is_zero())
{
para.format("%d,%d", LF_RMOV, ++riga);
trans.set_paragraph(para);
trans.set(RMV_SEZIONE, sezimp);
trans.set(RMV_IMPORTO, imp.string());
trans.set(RMV_GRUPPO, gruppo);
trans.set(RMV_CONTO, conto);
trans.set(RMV_SOTTOCONTO, sottoconto);
descr.cut(0) << TR("Codice IVA") << ' ' << codiva;
trans.set(RMV_DESCR, descr);
tot += imp;
}
}
TBill civa; caus.bill(1, civa);
para.format("%d,%d", LF_RMOV, ++riga);
trans.set_paragraph(para);
trans.set(RMV_SEZIONE, seziva);
trans.set(RMV_IMPORTO, tot.string());
trans.set(RMV_GRUPPO, civa.gruppo());
trans.set(RMV_CONTO, civa.conto());
trans.set(RMV_SOTTOCONTO, civa.sottoconto());
return true;
}
bool TProrata_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case DLG_PREVIEW:
case DLG_PRINT:
if (e == fe_button)
{
TProrata_rep rep;
if (rep.ok())
{
rep.mask2report(*this);
if (o.dlg() == DLG_PRINT)
rep.print();
else
rep.preview();
}
return false;
}
break;
case F_CODATT:
if (e == fe_init)
{
TBrowse& b = *((TEdit_field&)o).browse();
TCursor& c = *b.cursor();
const TRecnotype i = c.items();
if (i > 0)
{
c = 0L;
o.set(c.curr().get(ATT_CODATT));
b.do_output();
o.enable(i > 1);
}
else
o.disable();
}
if (!o.empty() && (e == fe_init || e == fe_modify))
calc_prorata();
break;
case F_DATAINI:
if (e == fe_init)
{
const TDate oggi(TODAY);
o.set(TDate(1,1,oggi.year()-1));
set(F_DATAFIN, TDate(31,12,oggi.year()-1), 0x3);
}
break;
case F_DATAFIN:
if (!o.empty() && (e == fe_init || e == fe_modify))
calc_prorata();
break;
case DLG_ELABORA:
if (e == fe_button)
{
TFilename ininame;
if (genera_mov(ininame))
{
TString app; app << "cg2 -0 /i" << ininame;
TExternal_app a(app);
a.run();
}
}
break;
default:
break;
}
return true;
}
///////////////////////////////////////////////////////////
// TProrata_app
///////////////////////////////////////////////////////////
class TProrata_app : public TSkeleton_application
{
public:
virtual void main_loop();
};
void TProrata_app::main_loop()
{
TProrata_msk m;
m.run();
}
int cg5900(int argc, char* argv[])
{
TProrata_app a;
a.run(argc, argv, TR("Stampa pro-rata"));
return 0;
}

11
cg/cg5900a.h Normal file
View File

@ -0,0 +1,11 @@
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_CODATT 105
#define F_DESCATT 106
#define F_PRORATA 107
#define F_CAUSALE 108
#define F_DATAINI 111
#define F_DATAFIN 112

125
cg/cg5900a.rep Normal file
View File

@ -0,0 +1,125 @@
<?xml version="1.0" encoding="UTF-8" ?>
<report name="cg5900a" lpi="6">
<description>Stampa Prorata</description>
<font face="Courier New" size="10" />
<section type="Head" pattern="1">
<font face="Courier New" bold="1" size="10" />
<field border="2" x="15" type="Linea" height="2" pattern="1" />
<field border="2" x="30" type="Linea" height="2" pattern="1" />
<field border="2" x="47" type="Linea" height="2" pattern="1" />
<field border="2" x="64" type="Linea" height="2" pattern="1" />
<field border="2" x="86" type="Linea" height="2" pattern="1" />
<field x="2" y="0.5" type="Testo" width="10" pattern="1" text="Conto" />
<field x="16" y="0.5" type="Testo" width="14" pattern="1" text="IVA % Detr." />
<field x="31" y="0.5" type="Testo" align="right" width="15" pattern="1" text="Imponibile" />
<field x="48" y="0.5" type="Testo" align="right" width="15" pattern="1" text="Imposta" />
<field x="67" y="0.5" type="Testo" width="2" pattern="1" text="%" />
<field x="70" y="0.5" type="Testo" align="right" width="15" pattern="1" text="Prorata" />
<field border="2" y="2" type="Linea" width="86" height="0" pattern="1" />
</section>
<section type="Head" level="1" pattern="1">
<field border="3" type="Testo" align="center" width="86" height="3" pattern="1" text="Stampa Prorata">
<font face="Arial" bold="1" size="24" />
</field>
</section>
<section type="Head" level="2" pattern="1">
<groupby>GRUPPO+CONTO+SOTTOCONTO+CODIVA+TIPODET</groupby>
<prescript description="H2 PRESCRIPT">MESSAGE RESET,F2.110|RESET,F2.111|RESET,F2.113</prescript>
<field type="Numero" hidden="1" align="right" width="3" id="101" pattern="1">
<source>GRUPPO</source>
<postscript description="H2.101 POSTSCRIPT">MESSAGE COPY,F2.101</postscript>
</field>
<field x="4" type="Numero" hidden="1" align="right" width="3" id="102" pattern="1">
<source>CONTO</source>
<postscript description="H2.102 POSTSCRIPT">MESSAGE COPY,F2.102</postscript>
</field>
<field x="8" type="Numero" hidden="1" align="right" width="6" id="103" pattern="1">
<source>SOTTOCONTO</source>
<postscript description="H2.103 POSTSCRIPT">MESSAGE COPY,F2.103</postscript>
</field>
<field x="15" type="Stringa" hidden="1" width="4" id="104" pattern="1">
<source>CODIVA</source>
<postscript description="H2.104 POSTSCRIPT">MESSAGE COPY,F2.104</postscript>
</field>
<field x="20" type="Numero" hidden="1" align="right" width="3" id="105" pattern="1">
<source>400@-&#3E;R0</source>
<postscript description="H2.105 POSTSCRIPT">MESSAGE COPY,F2.105</postscript>
</field>
<field x="24" type="Stringa" hidden="1" align="right" width="2" id="106" pattern="1">
<source>TIPODET</source>
<postscript description="H2.106 POSTSCRIPT">MESSAGE COPY,F2.106</postscript>
</field>
<field x="27" type="Numero" hidden="1" align="right" width="3" id="107" pattern="1">
<source>PERCDET</source>
<postscript description="H2.107 POSTSCRIPT">MESSAGE COPY,F2.107</postscript>
</field>
</section>
<section type="Body" pattern="1" />
<section type="Body" level="1" pattern="1">
<field x="25" type="Valuta" hidden="1" align="right" width="15" id="110" pattern="1" text="###.###.###,@@">
<source>IMPONIBILE</source>
<postscript description="B1.110 POSTSCRIPT">MESSAGE ADD,F2.110</postscript>
</field>
<field x="45" type="Valuta" hidden="1" align="right" width="15" id="111" pattern="1" text="###.###.###,@@">
<source>IMPOSTA</source>
<postscript description="B1.111 POSTSCRIPT">MESSAGE ADD,F2.111</postscript>
</field>
<field x="65" type="Numero" hidden="1" align="right" width="3" id="112" pattern="1">
<source>#PRORATA</source>
</field>
<field x="70" type="Valuta" hidden="1" align="right" width="15" id="113" pattern="1" text="###.###.###,@@">
<source>#111*#112&#2F;100</source>
<postscript description="B1.113 POSTSCRIPT">MESSAGE ADD,F2.113</postscript>
</field>
</section>
<section type="Foot" pattern="1" />
<section type="Foot" level="1" pattern="1">
<font face="Courier New" bold="1" size="10" />
<field border="2" type="Rettangolo" width="86" pattern="1" />
<field x="1" type="Testo" width="10" pattern="1" text="Totale" />
<field border="2" x="30" type="Linea" pattern="1" />
<field border="2" x="47" type="Linea" pattern="1" />
<field border="2" x="64" type="Linea" pattern="1" />
<field x="31" type="Valuta" align="right" width="15" id="110" pattern="1" text="###.###.###,@@" />
<field x="48" type="Valuta" align="right" width="15" id="111" pattern="1" text="###.###.###,@@" />
<field x="70" type="Valuta" align="right" width="15" id="113" pattern="1" text="###.###.###,@@" />
</section>
<section type="Foot" level="2" pattern="1">
<field border="2" x="15" type="Linea" pattern="1" />
<field border="2" x="30" type="Linea" pattern="1" />
<field border="2" x="47" type="Linea" pattern="1" />
<field border="2" x="64" type="Linea" pattern="1" />
<field border="2" x="69" type="Linea" pattern="1" />
<field border="2" x="86" type="Linea" pattern="1" />
<field type="Numero" align="right" width="3" id="101" pattern="1">
<prescript description="F2.101 PRESCRIPT">MESSAGE COPY,F2.101</prescript>
</field>
<field x="4" type="Numero" align="right" width="3" id="102" pattern="1">
<prescript description="F2.102 PRESCRIPT">MESSAGE COPY,F2.102</prescript>
</field>
<field x="8" type="Numero" align="right" width="6" id="103" pattern="1">
<prescript description="F2.103 PRESCRIPT">MESSAGE COPY,F2.103</prescript>
</field>
<field x="16" type="Stringa" width="4" id="104" pattern="1" />
<field x="20" type="Numero" align="right" width="3" id="105" pattern="1" />
<field x="24" type="Stringa" align="right" width="2" id="106" pattern="1" />
<field x="27" type="Numero" align="right" width="3" id="107" pattern="1" hide_zero="1" />
<field x="31" type="Valuta" align="right" width="15" id="110" pattern="1" text="###.###.###,@@">
<postscript description="F2.110 POSTSCRIPT">MESSAGE ADD,F1.110</postscript>
</field>
<field x="48" type="Valuta" align="right" width="15" id="111" pattern="1" text="###.###.###,@@">
<postscript description="F2.111 POSTSCRIPT">MESSAGE ADD,F1.111</postscript>
</field>
<field x="65" type="Numero" align="right" width="3" id="112" pattern="1">
<source>#PRORATA</source>
</field>
<field x="70" type="Valuta" align="right" width="15" id="113" pattern="1" text="###.###.###,@@">
<postscript description="F2.113 POSTSCRIPT">MESSAGE ADD,F1.113</postscript>
</field>
</section>
<sql>USE RMOVIVA SELECT (BETWEEN(MOV.DATAREG,#DATAINI,#DATAFIN))&#26;&#26;(STR(400@-&#3E;R0&#3E;0))
BY GRUPPO CONTO SOTTOCONTO CODIVA TIPODET
JOIN MOV INTO NUMREG==NUMREG
JOIN %IVA ALIAS 400 INTO CODTAB==CODIVA
</sql>
</report>

102
cg/cg5900a.uml Normal file
View File

@ -0,0 +1,102 @@
#include "cg5900a.h"
PAGE "Stampa pro-rata" -1 -1 72 6
NUMBER F_CODDITTA 5
BEGIN
PROMPT 1 1 "Ditta "
FLAGS "FDGZ"
USE LF_NDITTE
INPUT CODDITTA F_CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOC 50
BEGIN
PROMPT 19 1 ""
FLAGS "D"
END
NUMBER F_CODATT 5
BEGIN
PROMPT 1 2 "Attività "
USE LF_ATTIV
INPUT CODDITTA F_CODDITTA SELECT
INPUT CODATT F_CODATT
DISPLAY "Ditta" CODDITTA
DISPLAY "Attività" CODATT
DISPLAY "Descrizione@50" DESCR
OUTPUT F_CODATT CODATT
OUTPUT F_DESCATT DESCR
CHECKTYPE REQUIRED
FIELD #CODATT
END
NUMBER F_PRORATA 3
BEGIN
PROMPT 1 3 "Pro-rata "
FLAGS "D"
FIELD #PRORATA
END
STRING F_CAUSALE 4
BEGIN
PROMPT 31 3 "Causale per movimento contabile "
USE LF_CAUSALI SELECT (REG="")&&(TIPOMOV="")&&(MOVAP="")
INPUT CODCAUS F_CAUSALE
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F_CAUSALE CODCAUS
CHEKCTYPE NORMAL
FLAGS "U"
ADD RUN cg0 -4
MESSAGE EMPTY DISABLE,DLG_ELABORA
MESSAGE ENABLE,DLG_ELABORA
END
STRING F_DESCATT 50
BEGIN
PROMPT 19 2 ""
FLAGS "D"
END
DATE F_DATAINI
BEGIN
PROMPT 1 4 "Data iniziale "
FIELD #DATAINI
CHECKTYPE REQUIRED
END
DATE F_DATAFIN
BEGIN
PROMPT 31 4 "Data finale "
FIELD #DATAFIN
CHECKTYPE REQUIRED
END
ENDPAGE
TOOLBAR "Topbar" 0 0 0 2
BUTTON DLG_ELABORA 2 2
BEGIN
PROMPT 1 1 "Prima Nota"
PICTURE TOOL_ELABORA
END
BUTTON DLG_NULL 2 2
BEGIN
END
BUTTON DLG_PREVIEW 2 2
BEGIN
PROMPT 2 1 "Anteprima"
PICTURE TOOL_PREVIEW
END
#include <printbar.h>
ENDPAGE
ENDMASK

View File

@ -368,7 +368,7 @@ bool TVar_mov::video_IVA()
{ {
TMask* mask = new TMask("cg6800c"); TMask* mask = new TMask("cg6800c");
TString regiva = _rec_mov->get(MOV_REG); const TString4 regiva = _rec_mov->get(MOV_REG);
if (!setta_campi_maschera_iva(*mask)) if (!setta_campi_maschera_iva(*mask))
{ {
@ -529,14 +529,14 @@ void TVar_mov::setta_campi_maschera(TMask& m)
TDate datacomp(_rec_mov->get_date(MOV_DATACOMP)); TDate datacomp(_rec_mov->get_date(MOV_DATACOMP));
int anno = _rec_mov->get_int (MOV_ANNOES); int anno = _rec_mov->get_int (MOV_ANNOES);
TString numdoc = _rec_mov->get (MOV_NUMDOC); const TString16 numdoc = _rec_mov->get (MOV_NUMDOC);
TString regiva = _rec_mov->get (MOV_REG); TString4 regiva = _rec_mov->get (MOV_REG);
regiva.trim(); regiva.trim();
long protiva = _rec_mov->get_long(MOV_PROTIVA); long protiva = _rec_mov->get_long(MOV_PROTIVA);
long nuprotiva = _rec_mov->get_long(MOV_UPROTIVA); long nuprotiva = _rec_mov->get_long(MOV_UPROTIVA);
TString provvis = _rec_mov->get (MOV_PROVVIS); TString4 provvis = _rec_mov->get (MOV_PROVVIS);
TString codcaus = _rec_mov->get (MOV_CODCAUS); TString4 codcaus = _rec_mov->get (MOV_CODCAUS);
TString codpag = _rec_mov->get (MOV_CODPAG); TString8 codpag = _rec_mov->get (MOV_CODPAG);
codpag.trim(); codpag.trim();
m.set(F_NUMREG, _numreg); m.set(F_NUMREG, _numreg);
@ -628,7 +628,7 @@ bool TVar_mov::setta_campi_maschera_iva(TMask& m)
TDate datareg (_rec_mov->get_date(MOV_DATAREG)); TDate datareg (_rec_mov->get_date(MOV_DATAREG));
TDate data74ter (_rec_mov->get_date(MOV_DATA74TER)); TDate data74ter (_rec_mov->get_date(MOV_DATA74TER));
int meseliq = _rec_mov->get_int(MOV_MESELIQ); int meseliq = _rec_mov->get_int(MOV_MESELIQ);
TString regiva = _rec_mov->get (MOV_REG); TString4 regiva = _rec_mov->get (MOV_REG);
regiva.trim(); regiva.trim();
TString codcaus = _rec_mov->get (MOV_CODCAUS); TString codcaus = _rec_mov->get (MOV_CODCAUS);
long codcf = _rec_mov->get_long(MOV_CODCF); long codcf = _rec_mov->get_long(MOV_CODCF);

View File

@ -486,7 +486,7 @@ bool TRegistro::read_att()
chiave << prefix().get_codditta() << '|' << attivita(); chiave << prefix().get_codditta() << '|' << attivita();
_att = cache().get(LF_ATTIV, chiave); _att = cache().get(LF_ATTIV, chiave);
// Ditta - Anno - Attivita' - Tipo Attivita' (fissata a 1) // Ditta - Anno - Attività - Tipo Attività (fissata a 1)
chiave.format("%05ld", prefix().get_codditta()); chiave.format("%05ld", prefix().get_codditta());
chiave << year(); // non fare << year() << attivita() chiave << year(); // non fare << year() << attivita()
chiave << attivita() << "1"; chiave << attivita() << "1";
@ -498,7 +498,7 @@ bool TRegistro::read_att()
{ {
chiave.format("%d", year()); chiave.format("%d", year());
_prorata.add(chiave, pla.get_real("R8")); _prorata.add(chiave, pla.get_real("R8"));
_att.put("TIPOATT", pla.get("S7")); // Aggiorna tipo attivita' _att.put("TIPOATT", pla.get("S7")); // Aggiorna tipo attività
} }
return !_att.empty(); return !_att.empty();
@ -519,7 +519,7 @@ const TString& TRegistro::tipo_attivita()
real* TRegistro::read_prorata(int anno) const real* TRegistro::read_prorata(int anno) const
{ {
TString16 chiave; // Ditta - Anno - Attivita' - Tipo Attivita' (fissata a 1) TString16 chiave; // Ditta - Anno - Attività - Tipo Attività (fissata a 1)
chiave.format("%05ld", prefix().get_codditta()); chiave.format("%05ld", prefix().get_codditta());
chiave << anno << attivita() << "1"; chiave << anno << attivita() << "1";

View File

@ -24,7 +24,7 @@
// //
// Cerca l'esercizio precedente di EseCorr // Cerca l'esercizio precedente di EseCorr
// Se EseCorr e' gia' il primo ritorna 0 // Se EseCorr e' già il primo ritorna 0
// //
HIDDEN int EsePre(const int EseCorr) HIDDEN int EsePre(const int EseCorr)
{ {
@ -64,7 +64,7 @@ TSaldi_list::TSaldi_list(int gr, int co, int aec, int aep_par)
const TRectype& r = cf.curr(); const TRectype& r = cf.curr();
key.format("%3d%3d%6ld", g, c, s); key.format("%3d%3d%6ld", g, c, s);
// Se avevo chiesto anche l'es. prec. puo' darsi che l'abbia gia' trovato // Se avevo chiesto anche l'es. prec. puo' darsi che l'abbia già trovato
bool force = !aep_par; bool force = !aep_par;
add(key, r, force); add(key, r, force);
} }
@ -136,7 +136,7 @@ real TSaldo::saldofin_esprec(int annoes, int g, int c, long s, bool saldo_chiusu
} }
//richiamata nel bilancio a sez.contr per data limite //richiamata nel bilancio a sez.contr per data limite
//in realta' calcola il saldo finale es.prec //in realtà calcola il saldo finale es.prec
real TSaldo::calcola_saldo_iniziale(int g,int c,long s,int indbil, bool provvis) real TSaldo::calcola_saldo_iniziale(int g,int c,long s,int indbil, bool provvis)
{ {
real saldoini; real saldoini;
@ -370,7 +370,7 @@ bool TSaldo::ultima_immissione_verifica(int annoes,int g,int c,long s,int indbil
// e' true. A cosa serve ? Serve per includere nel calcolo del saldo all' ultima immissione // e' true. A cosa serve ? Serve per includere nel calcolo del saldo all' ultima immissione
// anche il saldo finale compilato nei movimenti di chiusura (se non venisse considerato i conti // anche il saldo finale compilato nei movimenti di chiusura (se non venisse considerato i conti
// risulterebbero aperti); siccome alcuni programmi (esempio il bilancio IV dir. CEE) non ne // risulterebbero aperti); siccome alcuni programmi (esempio il bilancio IV dir. CEE) non ne
// devono tenere conto, si e' data la possibilita' di usare la funzione passandogli il parametro a false. // devono tenere conto, si e' data la possibilità di usare la funzione passandogli il parametro a false.
// Modifica del 09-07-96 // Modifica del 09-07-96
bool TSaldo::ultima_immissione_bilancio(int annoes,int g,int c,long s,int indbil,int stp_prov,bool saldo_chiusura) bool TSaldo::ultima_immissione_bilancio(int annoes,int g,int c,long s,int indbil,int stp_prov,bool saldo_chiusura)
{ {
@ -927,7 +927,7 @@ void TSaldo_agg::clear_saldi(int year)
// //
// Scorro la tabella dei conti interna _tab_conti. // Scorro la tabella dei conti interna _tab_conti.
// Per ogni conto cerco il record su saldi, se non c'e' lo creo. // Per ogni conto cerco il record su saldi, se non c'e' lo creo.
// Se c'e' gia' lo aggiorno nel seguente modo: // Se c'e' già lo aggiorno nel seguente modo:
// GLOP // GLOP
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////

View File

@ -134,7 +134,7 @@ bool gestione_IVAxCassa(const TDate& data, long firm)
} }
// Anticamente TIPODET conteneva in tipo di indetraibilita, // Anticamente TIPODET conteneva in tipo di indetraibilita,
// ora invece trattasi di un codice di indetraibilita' // ora invece trattasi di un codice di indetraibilità
// associato ad un motivo ed una percentuale di indetraibilita' // associato ad un motivo ed una percentuale di indetraibilita'
int get_tipodet_from_rmi(const TRectype& rmi, const TRectype& mov,real& percind, const bool is_liq) int get_tipodet_from_rmi(const TRectype& rmi, const TRectype& mov,real& percind, const bool is_liq)
{ {

View File

@ -1608,7 +1608,7 @@ void TTransfer_file::write_tmp_movPN(TString& record)
int nr = atoi(record.sub(8,10)); int nr = atoi(record.sub(8,10));
if (nr == 1) if (nr == 1)
{ {
TString descr = record.sub(44,74); const TString& descr = record.sub(44,74);
dep->put(RMV_DESCR, descr); // Descrizione della prima riga riportata sulla testata dep->put(RMV_DESCR, descr); // Descrizione della prima riga riportata sulla testata
} }
} }
@ -3423,8 +3423,6 @@ void TTransfer_file::scrivi_PN(long nrec)
void TTransfer_file::scrivi_IVA(long nrec) void TTransfer_file::scrivi_IVA(long nrec)
{ {
TString buffer(sizeT);
_prog = new TProgind(nrec,TR("Trasferimento Movimenti IVA"),false, true); _prog = new TProgind(nrec,TR("Trasferimento Movimenti IVA"),false, true);
const TRic_recfield recf(_ttab->curr(), "S0", 0, sizeT); const TRic_recfield recf(_ttab->curr(), "S0", 0, sizeT);
@ -3433,10 +3431,11 @@ void TTransfer_file::scrivi_IVA(long nrec)
_ttab->put("CODTAB", "U1"); _ttab->put("CODTAB", "U1");
for (int err = _ttab->read(_isgteq); err == NOERR; err = _ttab->next()) for (int err = _ttab->read(_isgteq); err == NOERR; err = _ttab->next())
{ {
const TString& trec = _ttab->get("CODTAB").left(2); const TString& trec = _ttab->get("CODTAB");
if (trec != "U1") break; if (!trec.starts_with("U1"))
break;
buffer = (const char*)recf; const TFixed_string buffer((const char*)recf, sizeT);
write_tmp_movIVA(buffer); write_tmp_movIVA(buffer);
} }
delete _prog; delete _prog;
@ -4034,10 +4033,10 @@ int TTransfer_file::annoes_PC(const TString& data) const
return anno; return anno;
} }
void TTransfer_file::causale(TString& cau,TString& tipo,TString& descr) void TTransfer_file::causale(const TString& cau, TString& tipo,TString& descr) const
{ {
/*
TLocalisamfile caus (LF_CAUSALI); TLocalisamfile caus (LF_CAUSALI);
caus.setkey(1); caus.setkey(1);
caus.zero(); caus.zero();
caus.put(CAU_CODCAUS, cau); caus.put(CAU_CODCAUS, cau);
@ -4051,6 +4050,10 @@ void TTransfer_file::causale(TString& cau,TString& tipo,TString& descr)
descr = ""; descr = "";
tipo = ""; tipo = "";
} }
*/
const TRectype& caus = cache().get(LF_CAUSALI, cau);
descr = caus.get(CAU_DESCR);
tipo = caus.get(CAU_TIPODOC);
} }
int TTransfer_file::registro(const TString& reg, int anno) const int TTransfer_file::registro(const TString& reg, int anno) const

View File

@ -247,7 +247,7 @@ private:
void write_pagsca(const TString& record); void write_pagsca(const TString& record);
int annoes_PC(const TString& data) const; int annoes_PC(const TString& data) const;
void causale(TString& cau,TString& tipo,TString& descr); void causale(const TString& cau,TString& tipo,TString& descr) const;
int registro(const TString& reg,int anno) const; int registro(const TString& reg,int anno) const;
public: public:

View File

@ -95,7 +95,7 @@ Item_05 = "Ricalcolo saldi", "cg4 -0", "F"
Item_06 = "IVA", [CGMENU_010] Item_06 = "IVA", [CGMENU_010]
Item_07 = "Stampe di contabilità", [CGMENU_023] Item_07 = "Stampe di contabilità", [CGMENU_023]
Item_08 = "Saldaconto", <scmenu.men> Item_08 = "Saldaconto", <scmenu.men>
Item_09 = "Tracciabilita' CUP-CIG", <ctmenu.men> Item_09 = "Tracciabilità CUP-CIG", <ctmenu.men>
[CGMENU_010] [CGMENU_010]
Caption = "IVA" Caption = "IVA"
@ -107,12 +107,13 @@ Item_02 = "Liquidazione", "cg4 -2", "F"
Item_03 = "Visualizzazione liquidazione", "cg5 -5", "F" Item_03 = "Visualizzazione liquidazione", "cg5 -5", "F"
Item_04 = "Riepilogo progressivi", "cg0 -3", "F" Item_04 = "Riepilogo progressivi", "cg0 -3", "F"
Item_05 = "Stampa registri", "cg4 -3", "F" Item_05 = "Stampa registri", "cg4 -3", "F"
Item_06 = "Liste fatture", [CGMENU_026] Item_06 = "Stampa pro-rata", "cg5 -9", "F"
Item_07 = "Gestione acconti IVA", [CGMENU_027] Item_07 = "Liste fatture", [CGMENU_026]
Item_08 = "Gestione versamenti IVA", [CGMENU_022] Item_08 = "Gestione acconti IVA", [CGMENU_027]
Item_09 = "Operazioni annuali", [CGMENU_029] Item_09 = "Gestione versamenti IVA", [CGMENU_022]
Item_10 = "IVA per cassa / differita", <icmenu.men> Item_10 = "Operazioni annuali", [CGMENU_029]
Item_11 = "Gestione autotrasportatori", "cg4 -9", "F" Item_11 = "IVA per cassa / differita", <icmenu.men>
Item_12 = "Gestione autotrasportatori", "cg4 -9", "F"
[CGMENU_011] [CGMENU_011]
Caption = "Tabelle ministeriali" Caption = "Tabelle ministeriali"
@ -189,8 +190,8 @@ Module = 0
Flags = "" Flags = ""
Item_01 = "Tabella studio per invio", "cg6 -4 %ins", "F" Item_01 = "Tabella studio per invio", "cg6 -4 %ins", "F"
Item_02 = "Tabella ditta per invio", "cg6 -4 %ind", "F" Item_02 = "Tabella ditta per invio", "cg6 -4 %ind", "F"
Item_03 = "Invio contabilita' a sistema", "cg6 -8 S", "F" Item_03 = "Invio contabilità a sistema", "cg6 -8 S", "F"
Item_04 = "Invio contabilita' a PC", "cg6 -8 P", "F" Item_04 = "Invio contabilità a PC", "cg6 -8 P", "F"
Item_05 = "Ripristino movimenti da inviare", "cg6 -8 R", "F" Item_05 = "Ripristino movimenti da inviare", "cg6 -8 R", "F"
Item_06 = "Eliminazione file invio", "cg6 -8 C", "FP" Item_06 = "Eliminazione file invio", "cg6 -8 C", "FP"
@ -220,7 +221,7 @@ Flags = ""
Item_01 = "Apertura nuovo esercizio", "cg4 -4 C", "F" Item_01 = "Apertura nuovo esercizio", "cg4 -4 C", "F"
Item_02 = "Apertura nuovo esercizio IVA", "cg4 -4 I", "F" Item_02 = "Apertura nuovo esercizio IVA", "cg4 -4 I", "F"
Item_03 = "Chiusura/Apertura conti", "cg4 -5", "F" Item_03 = "Chiusura/Apertura conti", "cg4 -5", "F"
Item_04 = "Chiusura/Apertura conti Contabilita' sep.", "np0 -1", "F" Item_04 = "Chiusura/Apertura conti Contabilità sep.", "np0 -1", "F"
[CGMENU_022] [CGMENU_022]
Caption = "Gestione versamenti IVA" Caption = "Gestione versamenti IVA"

View File

@ -104,6 +104,11 @@ bool TPartite_cache::add_game(int anno, const char* partita)
const TPartita game(_bill, anno, partita); const TPartita game(_bill, anno, partita);
const bool chiusa = game.chiusa(true); const bool chiusa = game.chiusa(true);
can_add = (_flags == sct_closed_games) == chiusa; can_add = (_flags == sct_closed_games) == chiusa;
if (!can_add) // Faccio un'eccezione per le mie partite
{
for (int i = game.last(); i > 0 && !can_add; i = game.pred(i))
can_add = game.riga(i).get_long(PART_NREG) == _numreg;
}
} }
if (can_add) if (can_add)
add(key); add(key);

View File

@ -1,3 +1,3 @@
26 26
0 0
$caus|0|0|85|0|Causali contabili||| $caus|0|0|86|0|Causali contabili|||

View File

@ -1,5 +1,5 @@
26 26
25 26
CODCAUS|1|3|0|Codice causale CODCAUS|1|3|0|Codice causale
DESCR|1|50|0|Descrizione causale DESCR|1|50|0|Descrizione causale
TIPODOC|1|2|0|Tipo documento TIPODOC|1|2|0|Tipo documento
@ -12,14 +12,15 @@ DATADOC|8|1|0|Data documento
NUMDOC|8|1|0|Numero documento NUMDOC|8|1|0|Numero documento
AUTOFATT|8|1|0|Autofattura art. ?? AUTOFATT|8|1|0|Autofattura art. ??
MOVSEZ|8|1|0|Movimento sezionale ?? MOVSEZ|8|1|0|Movimento sezionale ??
TIPOMOV|2|1|0|Tipo movimento TIPOMOV|2|1|0|Tipo movimento saldaconto
RITFATT|8|1|0| RITFATT|8|1|0|
COLLCESP|1|1|0|Collegamnto ai cespiti COLLCESP|1|1|0|Collegamnto ai cespiti
M770|1|1|0|Collegamento al 770 M770|1|1|0|Collegamento al 770
CODCAUSIM|1|3|0|Codice causale incasso immediato CODCAUSIM|1|3|0|Codice causale incasso immediato
SOSPESO|8|1|0|Causale sospesa SOSPESO|8|1|0|Causale sospesa
VALINTRA|8|1|0|Gestione valuta intra-comunitaria VALINTRA|8|1|0|Gestione valuta intra-comunitaria
MOVIND|1|1|0|Causale per contabilita' industriale MOVIND|1|1|0|Causale per contabilità analitica
MOVCGIND|8|1|0|Causale per contabilità industriale
SOLOIVA|8|1|0|Movimento di sola IVA SOLOIVA|8|1|0|Movimento di sola IVA
PROVV|1|1|0|Tipo movimento (" " Normale, "P" Provvisorio cancellabile, "C" Provvisorio da cepiti) PROVV|1|1|0|Tipo movimento (" " Normale, "P" Provvisorio cancellabile, "C" Provvisorio da cepiti)
REGSPIVA|2|2|0|Regimi speciali IVA REGSPIVA|2|2|0|Regimi speciali IVA