Patch level : 12.0 996

Files correlati     : cg0.exe cg2.exe
Commento            :

- Sistemato enum tipo sospensione (lista progressivi liquidazione stampa registri apertura esercizio iva apertura conti ricostruzione saldi)
- Sistemanto enum tiporeg
- Sistemato enum tiposal ( conferma movimeni provvisori
- Aggiuta cache di registri
This commit is contained in:
Alessandro Bonazzi 2020-09-12 11:12:38 +02:00
parent d946faf73f
commit 2e185afa29
13 changed files with 218 additions and 166 deletions

View File

@ -12,6 +12,7 @@
#include "cg0.h"
#include "cg0400.h"
#include "cglib.h"
#include "cgpim.h"
@ -26,8 +27,6 @@ enum liste {
ListaPerPeriodo=2,
};
enum tipo_sospensione { nessuna, normale, vol_affari, liquidazione };
struct Importi {
real imponibile;
real imposta;
@ -321,11 +320,9 @@ void TProgressivi_iva::look_pim()
if (tabiva.read() == NOERR)
soggetto = tabiva.get("S1") != "NS"; // I non soggetti non vanno sempre considerati
reg.put("CODTAB",codreg);
if (reg.read() != NOERR) reg.zero();
const bool corrisp = reg.get_bool("B0");
const tipo_sospensione sosp_imp = reg.get_bool("B1") ? (tipo_sospensione) reg.get_int("I9") : nessuna;
const TRegistro & reg = cached_registro(codreg);
const bool corrisp = reg.corrispettivi();
const tipo_sospensione sosp_imp = reg.sospensione();
// Se si decide di stampare i progressivi validi per la liquidazione
// i PIM validi solo per il volume d'affari vanno scartati
@ -413,7 +410,7 @@ void TProgressivi_iva::look_pim()
}
break;
default:
if (sosp_imp == normale || sosp_imp == nessuna) // Esclude quelli valevoli solo liq o solo vol.aff. dai riepiloghi altri dati
if (sosp_imp == sospensione_normale || sosp_imp == nessuna_sospensione) // Esclude quelli valevoli solo liq o solo vol.aff. dai riepiloghi altri dati
{
if (_mese != 13)
_iva_array.add_riga(tipo,imponibile,imposta,ZERO);

View File

@ -271,17 +271,14 @@ void TProvvisori_app::inizia_saldi(const TRectype& r)
_saldi.reset();
tiposal tsal = normale;
const TString4 c = r.get(MOV_CODCAUS);
if (c.not_empty())
tiposal tsal = saldo_normale;
const TString4 codcaus = r.get(MOV_CODCAUS);
if (codcaus.full())
{
const TRectype& cau = cache().get(LF_CAUSALI, c);
if (!cau.empty())
{
const char movap = cau.get_char(CAU_MOVAP);
if (movap == 'A') tsal = apertura; else
if (movap == 'C') tsal = chiusura;
}
const TCausale & cau = cached_causale(codcaus);
tsal = cau.tipo_saldo();
}
_saldi.set_tipo_saldo(tsal);

View File

@ -77,8 +77,7 @@ const real INVALID_PRORATA = 1999.0; // A Guy piacciono gli 883... a me p
enum recalc { one = 2, never = 4 };
enum wht { all = 1, mnt = 2, trimestre = 3};
enum tbc { precedente = 1, incorso = 2};
enum tiporeg { vendita = 1, acquisto = 2 };
enum tipo_sospensione { nessuna, sospensione_normale, vol_affari, liquidazione };
// flags per gli items di stampa
#define CHG_PARMS 1 // cambiato qualcosa (attivita', ditta...)

View File

@ -550,9 +550,9 @@ bool TLiquidazione_app::update_att(int month, const char* codatt, TAssoc_array &
if (ok && !recalc)
return true;
bool calc = (_recalc == one && is_month_ok(month,_month));
if (!calc && _recalc != never)
calc = !ok;
if (calc || !recalc)
{
zero_att(month,codatt);
@ -1154,6 +1154,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
}
TProgress_monitor pi(items, pimsg, false);
for (; _cur->pos() < items; ++(*_cur))
{
if (!pi.set_status(_cur->pos()))
@ -1163,7 +1164,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
#ifdef DBG
long nr = _mov->get_long(MOV_NUMREG);
if (nr == 18489 || nr == 27710)
if (nr == 41221L || nr == -1L)
int i = 1;
#endif
@ -1171,9 +1172,12 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
const TString4 reg = _mov->get("REG");
const bool isreg = look_reg(reg);
const TString4 tipodoc = _mov->get(MOV_TIPODOC);
const bool corrisp = _reg->get_bool("B0");
const tiporeg tipomov = (tiporeg)_reg->get_int("I0"); // 1=Vendite; 2=Acquisti
tipo_movimento tm = (tipo_movimento)_mov->get_int(MOV_TIPOMOV);
const TRegistro & r = cached_registro(_reg->curr());
const bool corrisp = r.corrispettivi();
const tiporeg tipomov = r.tipo_registro();
// const bool corrisp = _reg->get_bool("B0");
// const tiporeg tipomov = (tiporeg)_reg->get_int("I0"); // 1=Vendite; 2=Acquisti
tipo_movimento tm = (tipo_movimento) _mov->get_int(MOV_TIPOMOV);
real imp_split_payment;
if (tm == tm_nessuno)
@ -1432,10 +1436,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
if (!dok || sreg || rs8 || cmt)
continue;
const tipo_sospensione sosp_imp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna;
const tipo_sospensione sosp_imp = cached_registro(_reg->curr()).sospensione();
/*
* Tipo documento da eliminare (Scudler 1994)
* Trattasi per lo piu' di non incassati
@ -1547,17 +1549,21 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
real impos_det; // Imposta detraibile
char sezfat;
TLocalisamfile id(LF_IVADIFF);
const tipo_sospensione sosp_imp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna;
const tipo_sospensione sosp_imp = cached_registro(_reg->curr()).sospensione();
const TString & codcaus = rcs.get(CAU_CODCAUS);
TToken_string key = _rmoviva->get(RMI_NUMREG); key.add(1);
const bool soloiva = cached_causale(codcaus, atoi(_year)).reg().iva() != nessuna_iva && cache().get(LF_RMOV, key).empty();
const TRectype& clifo = cache().get_rec(LF_CLIFO, _mov->get(MOV_TIPO), _mov->get(MOV_CODCF));
const int tp = clifo.get_int(CLI_ALLEG);
TToken_string key = _rmoviva->get(RMI_NUMREG); key.add(1);
const TRectype & rmoviva = cache().get(LF_RMOV, key);
const bool soloiva = cached_causale(codcaus, atoi(_year)).reg().iva() != nessuna_iva && rmoviva.empty();
const TCli_for & clifo = cached_clifor(LF_MOV, _mov->curr());
const int tp = clifo.alleg();
// const TRectype& clifo = cache().get_rec(LF_CLIFO, _mov->get(MOV_TIPO), _mov->get(MOV_CODCF));
// const int tp = clifo.get_int(CLI_ALLEG);
#ifdef DBG
long nr = _mov->get_long(MOV_NUMREG);
int i = 1;
if (nr == 41221L)
int i = 1;
#endif
if ((soloiva &&
@ -2060,7 +2066,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
nin_imp = imponibile;
nin_iva = imposta;
}
else if (sosp_imp != nessuna) // sospensione di imposta
else if (sosp_imp != nessuna_sospensione) // sospensione di imposta
{
if (tipomov == vendita)
{
@ -2075,7 +2081,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
switch (sosp_imp)
{
case normale:
case sospensione_normale:
assp_imp += asimp_imp;
assp_iva += asimp_iva;
// no regolarizzazioni e reverse charge
@ -2217,7 +2223,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
{
if (tipomov == vendita)
{
if (sosp_imp != normale && sosp_imp != vol_affari) // CM500308
if (sosp_imp != sospensione_normale && sosp_imp != vol_affari) // CM500308
{
if (tipoes_v == "B1")
esenti_c1 += imponibile;
@ -2396,7 +2402,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
*/
const bool sosp_vaf = sosp_imp == vol_affari;
const bool sosp_liq = sosp_imp == liquidazione;
bool ign = sosp_imp == normale || (fattrit && month != 13) || noninc;
bool ign = sosp_imp == sospensione_normale || (fattrit && month != 13) || noninc;
/*
* se liq == false gli importi non contano ai fini
@ -3107,30 +3113,31 @@ void TLiquidazione_app::iva11_set_arr_phase_1(const TString& codatt)
{
// My God! Che 2 palle riestrarre tutte le informazioni
const TString4 tipodoc = _mov->get(MOV_TIPODOC);
const bool intra = _rmoviva->get_bool(RMI_INTRA);
const int tipocr = _rmoviva->get_int(RMI_TIPOCR);
const bool intra = _rmoviva->get_bool(RMI_INTRA);
const int tipocr = _rmoviva->get_int(RMI_TIPOCR);
// A partire dalla versione 3.1 la gestione dell'IVA 11 non viene piu' supportata ...
// ... ergo non stiamo a gestire la indetraibilita' parziale
real percind;
const int tipodet = get_tipodet_from_rmi(_rmoviva->curr(), _mov->curr(), percind);
real imponibile = _rmoviva->get_real(RMI_IMPONIBILE);
real imposta = _rmoviva->get_real(RMI_IMPOSTA);
const int tipodet = get_tipodet_from_rmi(_rmoviva->curr(), _mov->curr(), percind);
real imponibile = _rmoviva->get_real(RMI_IMPONIBILE);
real imposta = _rmoviva->get_real(RMI_IMPOSTA);
if (is_split_payment(_mov->curr()))
imposta = ZERO;
const TString4 codiva = _iva->get("CODTAB");
if (is_split_payment(_mov->curr()))
imposta = ZERO;
const TString4 codiva = _iva->get("CODTAB");
const TString4 tipoiva = _iva->get("S1");
const real ali = _iva->get_real("R0");
const TString4 tipoes_v = _iva->get("S2");
const TString4 tipoes_a = _iva->get("S9");
const int tipoagr = _iva->get_int("I4"); // 2/9/2015 was S4
const TRectype& rcs = _cur->curr(LF_CAUSALI);
const bool autofattura = rcs.get_bool("AUTOFATT");
const bool valintra = rcs.get_bool("VALINTRA");
const bool intracom = rcs.get_bool("INTRACOM");
const tipo_sospensione sosp_imp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna;
const bool corrisp = _reg->get_bool("B0");
const tiporeg tipomov = (tiporeg)_reg->get_long("I0");
const real ali = _iva->get_real("R0");
const TString4 tipoes_v = _iva->get("S2");
const TString4 tipoes_a = _iva->get("S9");
const int tipoagr = _iva->get_int("I4"); // 2/9/2015 was S4
const TRectype& rcs = _cur->curr(LF_CAUSALI);
const bool autofattura = rcs.get_bool("AUTOFATT");
const bool valintra = rcs.get_bool("VALINTRA");
const bool intracom = rcs.get_bool("INTRACOM");
const TRegistro & reg = cached_registro(_reg->curr());
const tipo_sospensione sosp_imp = reg.sospensione();
const bool corrisp = reg.corrispettivi();
const tiporeg tipomov = reg.tipo_registro();
const bool is_vendita = tipomov == vendita;
const bool is_acquisto = tipomov == acquisto;
@ -3169,12 +3176,12 @@ void TLiquidazione_app::iva11_set_arr_phase_1(const TString& codatt)
}
}
if (sosp_imp == nessuna && tipodet == 0 && (tipocr == 2 || tipocr == 8))
if (sosp_imp == nessuna_sospensione && tipodet == 0 && (tipocr == 2 || tipocr == 8))
{
array.add(imposta,TAB11_R6,LF_TAB1100B);
}
if (sosp_imp == nessuna || sosp_imp == vol_affari)
if (sosp_imp == nessuna_sospensione || sosp_imp == vol_affari)
{
if (tipodoc == "BD" && tipodet == 9)
{
@ -3354,7 +3361,7 @@ void TLiquidazione_app::iva11_set_arr_phase_1(const TString& codatt)
array.add(imponibile,TAB11_R9,LF_TAB1100B);
}
if (tipocr == 4 && tipodoc != "AF" && (sosp_imp == nessuna || sosp_imp == vol_affari))
if (tipocr == 4 && tipodoc != "AF" && (sosp_imp == nessuna_sospensione || sosp_imp == vol_affari))
array.add(imponibile,TAB11_EC112);
}
@ -3372,7 +3379,7 @@ void TLiquidazione_app::iva11_set_arr_phase_1(const TString& codatt)
array.add(imposta,TAB11_L2BIS,LF_TAB1100B);
}
if (!autofattura && (sosp_imp == nessuna || sosp_imp == vol_affari) && intra && tipoes_v == "22")
if (!autofattura && (sosp_imp == nessuna_sospensione || sosp_imp == vol_affari) && intra && tipoes_v == "22")
array.add(imponibile,TAB11_E52);
if (_isagricolo && (tipodoc != "CR" && tipodoc != "SC" && tipodoc != "RF" && tipodoc != "FS"))
@ -4670,16 +4677,18 @@ void TLiquidazione_app::recalc_annual(const char* att, bool & first)
reg = *_pim_codreg;
look_iva(codiva); look_reg(reg);
tiva = _iva->get("S1");
const tiporeg treg = (tiporeg)_reg->get_long("I0");
const bool corrisp = _reg->get_bool("B0");
const tipo_sospensione simp = _reg->get_bool("B1") ? (tipo_sospensione)_reg->get_int("I9") : nessuna;
const TRegistro & reg = cached_registro(_reg->curr());
const tipo_sospensione simp = reg.sospensione();
const tiporeg treg = reg.tipo_registro();
const bool corrisp = reg.corrispettivi();
if ( // ESCLUSI:
strcmp(att, *_pim_codatt) != 0 ||
treg != vendita || // non vendite
tipocr == 4 || // cessioni beni ammortizzabili
tiva == "NS" || // non soggetti
simp == normale ||
simp == sospensione_normale ||
simp == liquidazione) // sospensione di imposta
continue;

View File

@ -597,10 +597,11 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
diffinciva_acq = tab->get_real("R33");
const bool is_rit= tipodet != 0 && month == 13 && !rit_imp.is_zero(); //Se fattura in ritardo con tipo detr. != 0 e si sta calcolando l'annuale
const tipo_sospensione sosp_imp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna;
issosp |= (sosp_imp != nessuna); // Setta il flag di presenza registri in sospensione (qualsiasi tipo: normale, vol_affari, liquidazione)
// ACHTUNG! Corrispettivi da ventileer possono ventilare ad un altro codiva; in tal caso si scrive quello
const TRegistro & reg = cached_registro(_reg->curr());
const tipo_sospensione sosp_imp = reg.sospensione();
issosp |= (sosp_imp != nessuna_sospensione); // Setta il flag di presenza registri in sospensione (qualsiasi tipo: sospensione_normale, vol_affari, liquidazione)
// ACHTUNG! Corrispettivi da ventileer possono ventilare ad un altro codiva; in tal caso si scrive quello
if (corrisp && other.full())
{
look_iva(other);

View File

@ -31,8 +31,6 @@
#include <occas.h>
#include <unloc.h>
enum tipo_sospensione { nessuna, sospensione_normale, vol_affari, liquidazione };
inline TStampa_registri_app& app() { return (TStampa_registri_app&)main_app(); }
// Righe da saltare nel footer per evitare di scrivere sulla perforazione
@ -52,7 +50,10 @@ bool TStampa_registri_app::filter_func (const TRelation * r)
const bool regst = mov.get_bool(MOV_REGST);
if (regst) //il movimento e' gia'
return false; //stato stampato in forma definitiva
const tipo_sospensione ts = (tipo_sospensione)r->lfile("REG").get_int("I9");
const TRegistro & reg = cached_registro(codreg, annoiva);
const tipo_sospensione ts = reg.sospensione();
if (ts == liquidazione) // Movimento valido solo ai fini della liquidazione
return false;
}
@ -1275,25 +1276,28 @@ bool TStampa_registri_app::controlla_mov()
{
TLocalisamfile mov (LF_MOV);
bool ok = true;
tiporeg tipo;
TRecnotype rec = _tabreg->recno();
for (mov.first(); ok && !mov.eof(); mov.next())
{
const TString4 reg = mov.get(MOV_REG);
if (reg.empty()) continue; //non e' un movimento iva
if (_stampa_tutti_i_registri)
tipo = cerca_reg (reg);
if ( (_stampa_tutti_i_registri && (tipo == vendita || tipo == acquisto || tipo == riepilogativo))
|| (!_stampa_tutti_i_registri && reg == _codreg) )
{
const TString4 codreg = mov.get(MOV_REG);
if (codreg.full())
{
const TDate datareg = mov.get_date(MOV_DATAREG);
const bool stampato = mov.get_bool(MOV_REGST);
if ( datareg.year() < _annoIVA )
{
const long numreg = mov.get_long(MOV_NUMREG);
if (!stampato)
ok = false;
const tiporeg tipo = cached_registro(codreg, datareg.year()).tipo_registro();
if (( _stampa_tutti_i_registri && (tipo == vendita || tipo == acquisto || tipo == riepilogativo)) ||
(!_stampa_tutti_i_registri && codreg == _codreg))
{
const bool stampato = mov.get_bool(MOV_REGST);
if (datareg.year() < _annoIVA)
{
// const long numreg = mov.get_long(MOV_NUMREG);
if (!stampato)
ok = false;
}
}
}
}
@ -1301,17 +1305,6 @@ bool TStampa_registri_app::controlla_mov()
return ok;
}
tiporeg TStampa_registri_app::cerca_reg(const TString& c)
{
tiporeg t = vendita;
TString8 cod; cod << _annoIVA << c;
_tabreg->zero();
_tabreg->put("CODTAB", cod);
if (_tabreg->read() == NOERR)
t = (tiporeg)_tabreg->get_int ("I0");
return t;
}
int TStampa_registri_app::stampa_prospetto_IVA(int rr, int tipo_prosp)
{
const bool print_prec = tipo_prosp == 1;

View File

@ -21,16 +21,6 @@ enum tipo_stampa {
rif_giornale = 4
};
enum tiporeg {
vendita = 1,
acquisto = 2,
riepilogativo = 3,
incassi = 4,
giornale = 5,
sociale = 6,
cespiti = 7
};
class TStampa_registri_app : public TPrintapp
{
TSorted_cursor * _cur;
@ -124,7 +114,6 @@ public:
void stampa_progressivi(TRiga_array&, TRigaiva_array&, tiporeg, const bool);
void set_choice_limits(TMask&);
void build_ditte_sheet(int flags);
tiporeg cerca_reg(const TString&);
void fine_mese();
void set_page_tot_reg();
void send_message(char,const TFilename&,int);

View File

@ -1,5 +1,6 @@
#include "cg4501.h"
#include "cg4500b.h"
#include "cglib.h"
#include <recarray.h>
#include <relation.h>
@ -13,6 +14,7 @@ bool TAp_iva::mask_annoiva (TMask_field& f, KEY k)
{
const int annoiva = f.mask().get_int(F_ANNOIVA);
const int annoivap = ini_get_int(CONFIG_DITTA, "cg", "AnLiIv");
if (annoivap > 0 && annoiva != annoivap + 1)
return f.error_box(FR("Il nuovo anno esercizio IVA deve essere %d"), (annoivap+1));
}
@ -112,14 +114,6 @@ bool TAp_iva::apertura_iva()
TCursor cur_reg(&reg, "", 1, &tabreg, &tabreg);
TRecnotype items = cur_reg.items();
/*cur_reg.freeze();
for (cur_reg = 0L; cur_reg.pos() < items; ++cur_reg)
{
const int tiporeg = tabreg.get_int("I0");
if ((tiporeg == 1) || (tiporeg == 2) || (tiporeg == 3) || (tiporeg==9))
reg.remove();
}
cur_reg.freeze(FALSE);*/
tabreg.zero();
tabreg.put ("CODTAB", _annop);
@ -128,8 +122,9 @@ bool TAp_iva::apertura_iva()
cur_reg.freeze();
for (cur_reg = 0L; cur_reg.pos() < items; ++cur_reg)
{
const int tiporeg = tabreg.get_int("I0");
if ( (tiporeg == 1)||(tiporeg == 2)||(tiporeg==3)||(tiporeg==9))
const tiporeg tipo = cached_registro(cur_reg.curr()).tipo_registro();
if ( (tipo == vendita) || (tipo == acquisto) || (tipo == riepilogativo) || (tipo == giornale_magazzino))
{
TString8 cod = tabreg.get("CODTAB");
cod.overwrite(annoiva);

View File

@ -547,7 +547,7 @@ bool TApertura_chiusura::set()
(*_cur) = 0L;
_sld->set_anno_es(_annoesch);
_sld->set_movprovv(FALSE);
_sld->set_tipo_saldo(chiusura);
_sld->set_tipo_saldo(saldo_chiusura);
_sld->set_movimentato(TRUE);
costi ();
@ -565,7 +565,7 @@ bool TApertura_chiusura::set()
_totale_saldo = ZERO;
_sld->set_anno_es(_annoesap);
_sld->set_tipo_saldo(apertura);
_sld->set_tipo_saldo(saldo_apertura);
_sld->set_movimentato(TRUE);
*_cur = 0l;

View File

@ -144,6 +144,46 @@ enum cgrowtypes
cgrowtype_spese = 'G' // Spese del saladaconto
};
enum tipo_sospensione
{
nessuna_sospensione,
sospensione_normale,
vol_affari,
liquidazione
};
enum tipobil
{
DataLimite = 1,
UltimaImmissione
};
enum tiposal
{
saldo_normale,
saldo_apertura,
saldo_chiusura
};
enum TTipo_data
{
Registrazione,
Competenza,
CostiRicavi
};
enum tiporeg
{
vendita = 1,
acquisto = 2,
riepilogativo = 3,
incassi = 4,
giornale = 5,
sociale = 6,
cespiti = 7,
giornale_magazzino = 9
};
inline bool check_mov(const int tipomovprovv, const TString & provvis)
{
return ((tipomovprovv & 0x1) && provvis.blank()) ||
@ -242,10 +282,13 @@ public:
virtual bool ok() const { return !_rec.empty(); }
int tipo() const;
const TString & codice() const { return _rec.get("CODTAB"); }
int tipo() const { return _rec.get_int("I0"); }
TipoIVA iva() const;
bool corrispettivi() const;
bool corrispettivi() const { return _rec.get_bool("B0");}
bool sospeso() const { return _rec.get_bool("B1");}
tiporeg tipo_registro() const { return (tiporeg) tipo(); }
tipo_sospensione sospensione() const { return sospeso() ? (tipo_sospensione) _rec.get_int("I9") : nessuna_sospensione; }
const TString& name() const;
int year() const;
TDate last_reg() const { return _rec.get_date("D2"); }
@ -254,7 +297,6 @@ public:
long protocol() const { return _rec.get_long("I5"); }
const TString& attivita() const { return _rec.get("S8"); }
bool agenzia_viaggi() const;
const TString& tipo_attivita() const;
bool attivita_mista() const { const char a = tipo_attivita()[0]; return a == 'E'; }
@ -271,6 +313,9 @@ public:
virtual ~TRegistro() {}
};
const TRegistro & cached_registro(const char * codreg, const int year = 0);
inline const TRegistro & cached_registro(const TRectype & reg) { return cached_registro(reg.get("CODTAB").smid(4), atoi(reg.get("CODTAB").sleft(4))); }
class TLibro_giornale : public TRegistro
{
public:
@ -287,8 +332,7 @@ class TCodiceIVA;
class TCausale : public TArray
{
TRectype _rec;
TRegistro _reg;
int _year;
TipoIVA _iva;
bool _corrisp;
char _sezione_clifo, _sezione_ritsoc, _sezione_ritfis, _sezione_revcharge, _provvisorio;
@ -313,8 +357,9 @@ public:
bool num_doc() const;
bool apertura() const;
bool chiusura() const;
bool sezionale() const;
bool valuta() const;
tiposal tipo_saldo() const { return apertura() ? saldo_apertura : (chiusura() ? saldo_chiusura : saldo_normale); } bool sezionale() const;
tipo_sospensione sospensione() const { return reg().sospensione(); }
bool valuta() const;
bool intra() const;
bool valintra() const;
bool soloiva() const;
@ -324,11 +369,11 @@ public:
bool ril_fat_em_ric() const;
bool datareg_prec() const;
char provvisorio() const { return _provvisorio; }
const TString& causale_collegata() const;
const TString& causale_reg_iva() const;
const TString& tipo_doc() const;
TRegistro& reg() const { return (TRegistro&)_reg; }
const TString & causale_collegata() const;
const TString & causale_reg_iva() const;
const TString & tipo_doc() const;
const TString & codice_registro() const { return _rec.get(CAU_REG); }
const TRegistro& reg() const { return cached_registro(codice_registro(), _year); }
TipoIVA iva() const { return _iva; }
int regime_speciale() const;
bool corrispettivi() const { return _corrisp; }
@ -362,6 +407,8 @@ public:
};
const TCausale & cached_causale(const char * codcaus, const int year = 0);
inline const TCausale & cached_causale(const TRectype & caus, const int year = 0) { return cached_causale(caus.get(CAU_CODCAUS), year); }
class TCodiceIVA : public TRectype
{
@ -548,10 +595,6 @@ public:
TRectype* saldi() const;
};
enum tipobil { DataLimite = 1, UltimaImmissione };
enum tiposal { normale, apertura, chiusura };
enum TTipo_data { Registrazione, Competenza, CostiRicavi };
const TDate get_date_mov(const TRectype & mov, TTipo_data tipo_data);
class TSaldo : public TObject
@ -962,7 +1005,8 @@ public:
const TRectype& cg(int i, bool create = true) const { return (const TRectype &) ((TRecord_array &) cg()).row(i, create); }
const TRectype& iva(int i, bool create = true) const { return (const TRectype &)((TRecord_array &) iva()).row(i, create); }
int cg_rows() const { return cg().rows(); }
int iva_rows() const { return iva().rows(); }
int iva_rows() const { return iva().rows(); }
bool solo_IVA() const { return iva_rows() > 0 && cg_rows() == 0; }
virtual int readat(TBaseisamfile& f, TRecnotype nrec, word lockop = _nolock);
virtual int read(TBaseisamfile & f, word op = _isequal, word lockop = _nolock);
@ -1481,6 +1525,7 @@ public:
char tipo() const { return get_char(CLI_TIPOCF); }
long codice() const { return get_long(CLI_CODCF); }
int alleg() const { return get_int(CLI_ALLEG); }
bool ok() const { return !empty(); }
virtual int read(const TRectype& rec, word op = _isequal, word lockop = _nolock);
@ -1502,5 +1547,6 @@ public:
};
const TCli_for & cached_clifor(const char tipo, const long codice);
const TCli_for & cached_clifor(int file, const TRectype & rec);
#endif

View File

@ -50,13 +50,8 @@ bool TCausale::reread()
{
const TString4 cod = codice();
if (cod.full())
{
const int year = _reg.year();
if (year > 0)
return read(cod, year);
}
if (cod.full() && _year > 0)
return read(cod, _year);
return false;
}
@ -68,6 +63,7 @@ bool TCausale::read(const char* cod, int year)
_iva = iva_errata; // Delete misc info
_sezione_clifo = _sezione_ritsoc = _provvisorio = ' ';
_corrisp = false;
_year = year;
if (cod && *cod > ' ')
{
@ -89,18 +85,18 @@ bool TCausale::read(const char* cod, int year)
add(rcaus.curr(), riga);
}
const TString4 codreg(_rec.get(CAU_REG));
/* const TString4 codreg(_rec.get(CAU_REG));
const bool ok = _reg.read(codreg, year); // Read register
if (!ok && codreg.not_empty())
return error_box(FR("Non esiste il registro '%s' del %d"),
(const char*)codreg, year);
(const char*)codreg, year); */
calcIVA();
}
else
{
_iva = nessuna_iva; // Clear IVA data
_corrisp = false;
_reg.read("", year);
// _reg.read("", year);
}
return true;
@ -359,8 +355,9 @@ void TCausale::calcIVA()
const TRectype& tpd = cache().get("%TPD", td);
if (!tpd.empty())
{
i = (TipoIVA)tpd.get_int("I0"); // IVA acquisti, vendite, generica
const TipoIVA ri = _reg.iva();
i = (TipoIVA) tpd.get_int("I0"); // IVA acquisti, vendite, generica
const TipoIVA ri = reg().iva();
if (i == iva_generica)
i = ri;
if (i != ri)
@ -915,18 +912,6 @@ TRegistro& TRegistro::operator =(const TRegistro& r)
return *this;
}
int TRegistro::tipo() const
{
const int t = _rec.get_int("I0");
return t;
}
bool TRegistro::corrispettivi() const
{
const bool c = _rec.get_bool("B0");
return c;
}
TipoIVA TRegistro::iva() const
{
TipoIVA i = (TipoIVA)tipo();
@ -1055,6 +1040,49 @@ bool TRegistro::update(long protiva, const TDate& datareg)
return updated;
}
///////////////////////////////////////////////////////////
// TCache_registri
///////////////////////////////////////////////////////////
class TCache_registri : public TCache
{
protected:
virtual TObject* key2obj(const char* key);
public:
const TRegistro & registro(const char* key, const int anno = 0);
TCache_registri() : TCache() { }
virtual ~TCache_registri() { }
};
TObject* TCache_registri::key2obj(const char* key)
{
TToken_string k(key);
TString16 cod;
k.get(0, cod);
cod.trim();
int year;
k.get(1, year);
return new TRegistro(cod, year);
}
const TRegistro & TCache_registri::registro(const char* key, const int anno)
{
TToken_string k(key);
k.add(anno);
return (const TRegistro &)*objptr(k);
}
const TRegistro & cached_registro(const char * codreg, int year)
{
HIDDEN TCache_registri __cache_registri;
return __cache_registri.registro(codreg, year);
}
///////////////////////////////////////////////////////////
// Libro giornale
///////////////////////////////////////////////////////////

View File

@ -804,7 +804,7 @@ void TTab_conti::aggiorna_conto(const TBill& tcon,
}
else
{
if (movap == apertura)
if (movap == saldo_apertura)
{
if (importo.sezione() == 'D')
tc->saldo() += i;
@ -813,7 +813,7 @@ void TTab_conti::aggiorna_conto(const TBill& tcon,
}
else
{
if (movap == chiusura)
if (movap == saldo_chiusura)
{
if (importo.sezione() == 'D')
tc->saldofin() += i;
@ -846,7 +846,7 @@ void TTab_conti::aggiorna_conto(const TBill& tcon,
///////////////////////////////////////////////////////////
TSaldo_agg::TSaldo_agg() : _anno_es(0), _data_ulmov(""), _num_ulmov(0l),
_movap(normale), _provv(' '), _movimentato(false)
_movap(saldo_normale), _provv(' '), _movimentato(false)
{}
void TSaldo_agg::aggiorna(const TBill& tc, const TImporto& imp, bool somma, bool scaricato)

View File

@ -211,10 +211,8 @@ bool is_IVAxCassa(const TRectype& mov)
{
if (mov.get_bool(MOV_LIQDIFF) || !mov.get_bool(MOV_IVAXCASSA))
return false;
if (!mov_has_imposte(mov))
return false;
const TDate data_reg = mov.get(MOV_DATAREG);
// const TDate data_doc = mov.get(MOV_DATADOC);
// const TDate data_rif = data_doc.ok() && data_doc < data_reg ? data_doc : data_reg;