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

View File

@ -271,17 +271,14 @@ void TProvvisori_app::inizia_saldi(const TRectype& r)
_saldi.reset(); _saldi.reset();
tiposal tsal = normale; tiposal tsal = saldo_normale;
const TString4 c = r.get(MOV_CODCAUS); const TString4 codcaus = r.get(MOV_CODCAUS);
if (c.not_empty())
if (codcaus.full())
{ {
const TRectype& cau = cache().get(LF_CAUSALI, c); const TCausale & cau = cached_causale(codcaus);
if (!cau.empty())
{ tsal = cau.tipo_saldo();
const char movap = cau.get_char(CAU_MOVAP);
if (movap == 'A') tsal = apertura; else
if (movap == 'C') tsal = chiusura;
}
} }
_saldi.set_tipo_saldo(tsal); _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 recalc { one = 2, never = 4 };
enum wht { all = 1, mnt = 2, trimestre = 3}; enum wht { all = 1, mnt = 2, trimestre = 3};
enum tbc { precedente = 1, incorso = 2}; 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 // flags per gli items di stampa
#define CHG_PARMS 1 // cambiato qualcosa (attivita', ditta...) #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) if (ok && !recalc)
return true; return true;
bool calc = (_recalc == one && is_month_ok(month,_month)); bool calc = (_recalc == one && is_month_ok(month,_month));
if (!calc && _recalc != never) if (!calc && _recalc != never)
calc = !ok; calc = !ok;
if (calc || !recalc) if (calc || !recalc)
{ {
zero_att(month,codatt); 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); TProgress_monitor pi(items, pimsg, false);
for (; _cur->pos() < items; ++(*_cur)) for (; _cur->pos() < items; ++(*_cur))
{ {
if (!pi.set_status(_cur->pos())) if (!pi.set_status(_cur->pos()))
@ -1163,7 +1164,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
#ifdef DBG #ifdef DBG
long nr = _mov->get_long(MOV_NUMREG); long nr = _mov->get_long(MOV_NUMREG);
if (nr == 18489 || nr == 27710) if (nr == 41221L || nr == -1L)
int i = 1; int i = 1;
#endif #endif
@ -1171,9 +1172,12 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
const TString4 reg = _mov->get("REG"); const TString4 reg = _mov->get("REG");
const bool isreg = look_reg(reg); const bool isreg = look_reg(reg);
const TString4 tipodoc = _mov->get(MOV_TIPODOC); const TString4 tipodoc = _mov->get(MOV_TIPODOC);
const bool corrisp = _reg->get_bool("B0"); const TRegistro & r = cached_registro(_reg->curr());
const tiporeg tipomov = (tiporeg)_reg->get_int("I0"); // 1=Vendite; 2=Acquisti const bool corrisp = r.corrispettivi();
tipo_movimento tm = (tipo_movimento)_mov->get_int(MOV_TIPOMOV); 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; real imp_split_payment;
if (tm == tm_nessuno) if (tm == tm_nessuno)
@ -1433,9 +1437,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
if (!dok || sreg || rs8 || cmt) if (!dok || sreg || rs8 || cmt)
continue; continue;
const tipo_sospensione sosp_imp = cached_registro(_reg->curr()).sospensione();
const tipo_sospensione sosp_imp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna;
/* /*
* Tipo documento da eliminare (Scudler 1994) * Tipo documento da eliminare (Scudler 1994)
* Trattasi per lo piu' di non incassati * Trattasi per lo piu' di non incassati
@ -1547,16 +1549,20 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
real impos_det; // Imposta detraibile real impos_det; // Imposta detraibile
char sezfat; char sezfat;
TLocalisamfile id(LF_IVADIFF); 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); const TString & codcaus = rcs.get(CAU_CODCAUS);
TToken_string key = _rmoviva->get(RMI_NUMREG); key.add(1); 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 & rmoviva = cache().get(LF_RMOV, key);
const TRectype& clifo = cache().get_rec(LF_CLIFO, _mov->get(MOV_TIPO), _mov->get(MOV_CODCF)); const bool soloiva = cached_causale(codcaus, atoi(_year)).reg().iva() != nessuna_iva && rmoviva.empty();
const int tp = clifo.get_int(CLI_ALLEG); 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 #ifdef DBG
long nr = _mov->get_long(MOV_NUMREG); long nr = _mov->get_long(MOV_NUMREG);
if (nr == 41221L)
int i = 1; int i = 1;
#endif #endif
@ -2060,7 +2066,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
nin_imp = imponibile; nin_imp = imponibile;
nin_iva = imposta; nin_iva = imposta;
} }
else if (sosp_imp != nessuna) // sospensione di imposta else if (sosp_imp != nessuna_sospensione) // sospensione di imposta
{ {
if (tipomov == vendita) if (tipomov == vendita)
{ {
@ -2075,7 +2081,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
switch (sosp_imp) switch (sosp_imp)
{ {
case normale: case sospensione_normale:
assp_imp += asimp_imp; assp_imp += asimp_imp;
assp_iva += asimp_iva; assp_iva += asimp_iva;
// no regolarizzazioni e reverse charge // 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 (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") if (tipoes_v == "B1")
esenti_c1 += imponibile; 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_vaf = sosp_imp == vol_affari;
const bool sosp_liq = sosp_imp == liquidazione; 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 * se liq == false gli importi non contano ai fini
@ -3128,9 +3134,10 @@ void TLiquidazione_app::iva11_set_arr_phase_1(const TString& codatt)
const bool autofattura = rcs.get_bool("AUTOFATT"); const bool autofattura = rcs.get_bool("AUTOFATT");
const bool valintra = rcs.get_bool("VALINTRA"); const bool valintra = rcs.get_bool("VALINTRA");
const bool intracom = rcs.get_bool("INTRACOM"); const bool intracom = rcs.get_bool("INTRACOM");
const tipo_sospensione sosp_imp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna; const TRegistro & reg = cached_registro(_reg->curr());
const bool corrisp = _reg->get_bool("B0"); const tipo_sospensione sosp_imp = reg.sospensione();
const tiporeg tipomov = (tiporeg)_reg->get_long("I0"); const bool corrisp = reg.corrispettivi();
const tiporeg tipomov = reg.tipo_registro();
const bool is_vendita = tipomov == vendita; const bool is_vendita = tipomov == vendita;
const bool is_acquisto = tipomov == acquisto; 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); 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) 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); 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); 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); 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); array.add(imponibile,TAB11_E52);
if (_isagricolo && (tipodoc != "CR" && tipodoc != "SC" && tipodoc != "RF" && tipodoc != "FS")) 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; reg = *_pim_codreg;
look_iva(codiva); look_reg(reg); look_iva(codiva); look_reg(reg);
tiva = _iva->get("S1"); tiva = _iva->get("S1");
const tiporeg treg = (tiporeg)_reg->get_long("I0");
const bool corrisp = _reg->get_bool("B0"); const TRegistro & reg = cached_registro(_reg->curr());
const tipo_sospensione simp = _reg->get_bool("B1") ? (tipo_sospensione)_reg->get_int("I9") : nessuna; const tipo_sospensione simp = reg.sospensione();
const tiporeg treg = reg.tipo_registro();
const bool corrisp = reg.corrispettivi();
if ( // ESCLUSI: if ( // ESCLUSI:
strcmp(att, *_pim_codatt) != 0 || strcmp(att, *_pim_codatt) != 0 ||
treg != vendita || // non vendite treg != vendita || // non vendite
tipocr == 4 || // cessioni beni ammortizzabili tipocr == 4 || // cessioni beni ammortizzabili
tiva == "NS" || // non soggetti tiva == "NS" || // non soggetti
simp == normale || simp == sospensione_normale ||
simp == liquidazione) // sospensione di imposta simp == liquidazione) // sospensione di imposta
continue; 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"); 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 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; const TRegistro & reg = cached_registro(_reg->curr());
issosp |= (sosp_imp != nessuna); // Setta il flag di presenza registri in sospensione (qualsiasi tipo: normale, vol_affari, liquidazione) const tipo_sospensione sosp_imp = reg.sospensione();
// ACHTUNG! Corrispettivi da ventileer possono ventilare ad un altro codiva; in tal caso si scrive quello 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()) if (corrisp && other.full())
{ {
look_iva(other); look_iva(other);

View File

@ -31,8 +31,6 @@
#include <occas.h> #include <occas.h>
#include <unloc.h> #include <unloc.h>
enum tipo_sospensione { nessuna, sospensione_normale, vol_affari, liquidazione };
inline TStampa_registri_app& app() { return (TStampa_registri_app&)main_app(); } inline TStampa_registri_app& app() { return (TStampa_registri_app&)main_app(); }
// Righe da saltare nel footer per evitare di scrivere sulla perforazione // 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); const bool regst = mov.get_bool(MOV_REGST);
if (regst) //il movimento e' gia' if (regst) //il movimento e' gia'
return false; //stato stampato in forma definitiva 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 if (ts == liquidazione) // Movimento valido solo ai fini della liquidazione
return false; return false;
} }
@ -1275,43 +1276,35 @@ bool TStampa_registri_app::controlla_mov()
{ {
TLocalisamfile mov (LF_MOV); TLocalisamfile mov (LF_MOV);
bool ok = true; bool ok = true;
tiporeg tipo;
TRecnotype rec = _tabreg->recno(); TRecnotype rec = _tabreg->recno();
for (mov.first(); ok && !mov.eof(); mov.next()) for (mov.first(); ok && !mov.eof(); mov.next())
{ {
const TString4 reg = mov.get(MOV_REG); const TString4 codreg = mov.get(MOV_REG);
if (reg.empty()) continue; //non e' un movimento iva
if (_stampa_tutti_i_registri) if (codreg.full())
tipo = cerca_reg (reg);
if ( (_stampa_tutti_i_registri && (tipo == vendita || tipo == acquisto || tipo == riepilogativo))
|| (!_stampa_tutti_i_registri && reg == _codreg) )
{ {
const TDate datareg = mov.get_date(MOV_DATAREG); const TDate datareg = mov.get_date(MOV_DATAREG);
const bool stampato = mov.get_bool(MOV_REGST); const tiporeg tipo = cached_registro(codreg, datareg.year()).tipo_registro();
if ( datareg.year() < _annoIVA )
if (( _stampa_tutti_i_registri && (tipo == vendita || tipo == acquisto || tipo == riepilogativo)) ||
(!_stampa_tutti_i_registri && codreg == _codreg))
{ {
const long numreg = mov.get_long(MOV_NUMREG); const bool stampato = mov.get_bool(MOV_REGST);
if (datareg.year() < _annoIVA)
{
// const long numreg = mov.get_long(MOV_NUMREG);
if (!stampato) if (!stampato)
ok = false; ok = false;
} }
} }
} }
}
_tabreg->readat(rec); _tabreg->readat(rec);
return ok; 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) int TStampa_registri_app::stampa_prospetto_IVA(int rr, int tipo_prosp)
{ {
const bool print_prec = tipo_prosp == 1; const bool print_prec = tipo_prosp == 1;

View File

@ -21,16 +21,6 @@ enum tipo_stampa {
rif_giornale = 4 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 class TStampa_registri_app : public TPrintapp
{ {
TSorted_cursor * _cur; TSorted_cursor * _cur;
@ -124,7 +114,6 @@ public:
void stampa_progressivi(TRiga_array&, TRigaiva_array&, tiporeg, const bool); void stampa_progressivi(TRiga_array&, TRigaiva_array&, tiporeg, const bool);
void set_choice_limits(TMask&); void set_choice_limits(TMask&);
void build_ditte_sheet(int flags); void build_ditte_sheet(int flags);
tiporeg cerca_reg(const TString&);
void fine_mese(); void fine_mese();
void set_page_tot_reg(); void set_page_tot_reg();
void send_message(char,const TFilename&,int); void send_message(char,const TFilename&,int);

View File

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

View File

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

View File

@ -144,6 +144,46 @@ enum cgrowtypes
cgrowtype_spese = 'G' // Spese del saladaconto 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) inline bool check_mov(const int tipomovprovv, const TString & provvis)
{ {
return ((tipomovprovv & 0x1) && provvis.blank()) || return ((tipomovprovv & 0x1) && provvis.blank()) ||
@ -242,10 +282,13 @@ public:
virtual bool ok() const { return !_rec.empty(); } 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; TipoIVA iva() const;
bool corrispettivi() const; bool corrispettivi() const { return _rec.get_bool("B0");}
bool sospeso() const { return _rec.get_bool("B1");} 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; const TString& name() const;
int year() const; int year() const;
TDate last_reg() const { return _rec.get_date("D2"); } TDate last_reg() const { return _rec.get_date("D2"); }
@ -254,7 +297,6 @@ public:
long protocol() const { return _rec.get_long("I5"); } long protocol() const { return _rec.get_long("I5"); }
const TString& attivita() const { return _rec.get("S8"); } const TString& attivita() const { return _rec.get("S8"); }
bool agenzia_viaggi() const; bool agenzia_viaggi() const;
const TString& tipo_attivita() const; const TString& tipo_attivita() const;
bool attivita_mista() const { const char a = tipo_attivita()[0]; return a == 'E'; } bool attivita_mista() const { const char a = tipo_attivita()[0]; return a == 'E'; }
@ -271,6 +313,9 @@ public:
virtual ~TRegistro() {} 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 class TLibro_giornale : public TRegistro
{ {
public: public:
@ -287,8 +332,7 @@ class TCodiceIVA;
class TCausale : public TArray class TCausale : public TArray
{ {
TRectype _rec; TRectype _rec;
TRegistro _reg; int _year;
TipoIVA _iva; TipoIVA _iva;
bool _corrisp; bool _corrisp;
char _sezione_clifo, _sezione_ritsoc, _sezione_ritfis, _sezione_revcharge, _provvisorio; char _sezione_clifo, _sezione_ritsoc, _sezione_ritfis, _sezione_revcharge, _provvisorio;
@ -313,7 +357,8 @@ public:
bool num_doc() const; bool num_doc() const;
bool apertura() const; bool apertura() const;
bool chiusura() const; bool chiusura() const;
bool sezionale() 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 valuta() const;
bool intra() const; bool intra() const;
bool valintra() const; bool valintra() const;
@ -324,11 +369,11 @@ public:
bool ril_fat_em_ric() const; bool ril_fat_em_ric() const;
bool datareg_prec() const; bool datareg_prec() const;
char provvisorio() const { return _provvisorio; } char provvisorio() const { return _provvisorio; }
const TString& causale_collegata() const; const TString & causale_collegata() const;
const TString& causale_reg_iva() const; const TString & causale_reg_iva() const;
const TString& tipo_doc() const; const TString & tipo_doc() const;
const TString & codice_registro() const { return _rec.get(CAU_REG); }
TRegistro& reg() const { return (TRegistro&)_reg; } const TRegistro& reg() const { return cached_registro(codice_registro(), _year); }
TipoIVA iva() const { return _iva; } TipoIVA iva() const { return _iva; }
int regime_speciale() const; int regime_speciale() const;
bool corrispettivi() const { return _corrisp; } bool corrispettivi() const { return _corrisp; }
@ -362,6 +407,8 @@ public:
}; };
const TCausale & cached_causale(const char * codcaus, const int year = 0); 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 class TCodiceIVA : public TRectype
{ {
@ -548,10 +595,6 @@ public:
TRectype* saldi() const; 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); const TDate get_date_mov(const TRectype & mov, TTipo_data tipo_data);
class TSaldo : public TObject class TSaldo : public TObject
@ -963,6 +1006,7 @@ public:
const TRectype& iva(int i, bool create = true) const { return (const TRectype &)((TRecord_array &) iva()).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 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 readat(TBaseisamfile& f, TRecnotype nrec, word lockop = _nolock);
virtual int read(TBaseisamfile & f, word op = _isequal, 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); } char tipo() const { return get_char(CLI_TIPOCF); }
long codice() const { return get_long(CLI_CODCF); } long codice() const { return get_long(CLI_CODCF); }
int alleg() const { return get_int(CLI_ALLEG); }
bool ok() const { return !empty(); } bool ok() const { return !empty(); }
virtual int read(const TRectype& rec, word op = _isequal, word lockop = _nolock); 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(const char tipo, const long codice);
const TCli_for & cached_clifor(int file, const TRectype & rec);
#endif #endif

View File

@ -50,13 +50,8 @@ bool TCausale::reread()
{ {
const TString4 cod = codice(); const TString4 cod = codice();
if (cod.full()) if (cod.full() && _year > 0)
{ return read(cod, _year);
const int year = _reg.year();
if (year > 0)
return read(cod, year);
}
return false; return false;
} }
@ -68,6 +63,7 @@ bool TCausale::read(const char* cod, int year)
_iva = iva_errata; // Delete misc info _iva = iva_errata; // Delete misc info
_sezione_clifo = _sezione_ritsoc = _provvisorio = ' '; _sezione_clifo = _sezione_ritsoc = _provvisorio = ' ';
_corrisp = false; _corrisp = false;
_year = year;
if (cod && *cod > ' ') if (cod && *cod > ' ')
{ {
@ -89,18 +85,18 @@ bool TCausale::read(const char* cod, int year)
add(rcaus.curr(), riga); 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 const bool ok = _reg.read(codreg, year); // Read register
if (!ok && codreg.not_empty()) if (!ok && codreg.not_empty())
return error_box(FR("Non esiste il registro '%s' del %d"), return error_box(FR("Non esiste il registro '%s' del %d"),
(const char*)codreg, year); (const char*)codreg, year); */
calcIVA(); calcIVA();
} }
else else
{ {
_iva = nessuna_iva; // Clear IVA data _iva = nessuna_iva; // Clear IVA data
_corrisp = false; _corrisp = false;
_reg.read("", year); // _reg.read("", year);
} }
return true; return true;
@ -359,8 +355,9 @@ void TCausale::calcIVA()
const TRectype& tpd = cache().get("%TPD", td); const TRectype& tpd = cache().get("%TPD", td);
if (!tpd.empty()) if (!tpd.empty())
{ {
i = (TipoIVA)tpd.get_int("I0"); // IVA acquisti, vendite, generica i = (TipoIVA) tpd.get_int("I0"); // IVA acquisti, vendite, generica
const TipoIVA ri = _reg.iva(); const TipoIVA ri = reg().iva();
if (i == iva_generica) if (i == iva_generica)
i = ri; i = ri;
if (i != ri) if (i != ri)
@ -915,18 +912,6 @@ TRegistro& TRegistro::operator =(const TRegistro& r)
return *this; 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 TRegistro::iva() const
{ {
TipoIVA i = (TipoIVA)tipo(); TipoIVA i = (TipoIVA)tipo();
@ -1055,6 +1040,49 @@ bool TRegistro::update(long protiva, const TDate& datareg)
return updated; 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 // Libro giornale
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////

View File

@ -804,7 +804,7 @@ void TTab_conti::aggiorna_conto(const TBill& tcon,
} }
else else
{ {
if (movap == apertura) if (movap == saldo_apertura)
{ {
if (importo.sezione() == 'D') if (importo.sezione() == 'D')
tc->saldo() += i; tc->saldo() += i;
@ -813,7 +813,7 @@ void TTab_conti::aggiorna_conto(const TBill& tcon,
} }
else else
{ {
if (movap == chiusura) if (movap == saldo_chiusura)
{ {
if (importo.sezione() == 'D') if (importo.sezione() == 'D')
tc->saldofin() += i; 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), 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) 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)) if (mov.get_bool(MOV_LIQDIFF) || !mov.get_bool(MOV_IVAXCASSA))
return false; return false;
if (!mov_has_imposte(mov)) if (!mov_has_imposte(mov))
return false; return false;
const TDate data_reg = mov.get(MOV_DATAREG); const TDate data_reg = mov.get(MOV_DATAREG);
// const TDate data_doc = mov.get(MOV_DATADOC); // const TDate data_doc = mov.get(MOV_DATADOC);
// const TDate data_rif = data_doc.ok() && data_doc < data_reg ? data_doc : data_reg; // const TDate data_rif = data_doc.ok() && data_doc < data_reg ? data_doc : data_reg;