campo-sirio/cg/cg4300.h

368 lines
12 KiB
C++
Executable File

// of course this is -*-C++-*-
// Questa e' la famosa palla della liquidazione IVA
#include <printapp.h>
#include <isam.h>
#include <lffiles.h>
#include <urldefid.h>
#include <stdlib.h>
#include <utility.h>
#include <sheet.h>
#include <progind.h>
#include <tabutil.h>
#include <mask.h>
// ------------------------------------------------------------------
// Parametri modificabili
// ------------------------------------------------------------------
//
// da cambiare se la lira si appesantisce o in caso di
// inflazione polacca
// arrotondamento default
#define ROUND_LIRA (0)
#define ROUND_MILLELIRE (-3)
// picture default per i reali
// in caso di inflazione polacca occorrera' modificare la lunghezza
// e quindi cambiare le set_row in cg4304.cpp onde evitare overlap
#define REAL_PICTURE "###.###.###.###"
// IVA a debito da riportare al mese successivo
#define IVA_DA_RIPORTARE real(50000)
// detrazione per detraibili 6%
#define DETRAZIONE_6PERCENTO real(0.06)
// soglia che da' diritto alla liquidazione trimestrale per servizi
// currently trecentsesantamiliu'
#define SOGLIA_TRIM_SERVIZI real(360000000)
// soglia che da' diritto alla liquidazione trimestrale per altri
// currently un miliardun
#define SOGLIA_TRIM_ALTRE real(1000000000)
// minima percentuale di operazioni esenti per aver diritto al rimborso
// infrannuale
#define MIN_PARTE_ESENTE real(0.50)
// percentuale IVA da versare in acconto a dicembre
#define ACCONTO_DICEMBRE real(0.88)
//
// ------------------------------------------------------------------
// Fine parametri modificabili
// do not change below this line if you want me to work
// ------------------------------------------------------------------
// per il campo I0 di pim
#define NETTO (1)
#define LORDO (2)
enum tiporeg { vendita = 1, acquisto = 2 };
enum recalc { needed = 1, one = 2, ever = 3, never = 4 };
enum wht { all = 1, mnt = 2, quarter = 3};
enum tbc { precedente = 1, incorso = 2};
// flags per gli items di stampa
#define CHG_PARMS 1 // cambiato qualcosa (attivita', ditta...)
#define PIM_ROW 2 // riga totali parziali per codiva
#define PLAFOND 3 // prospetto plafond
#define THE_END 4 // riepilogo finale
#define TOT_ROW 5 // totale dei pim (plm)
#define MISC_LIQ 6 // altri dati dichiarazione (ptm)
#define SET_FIRM 7 // dati ditta (senza attivita')
#define ANNUAL 8 // prospetto annuale (prorata etc.)
#define VENTILA 9 // prospetto ventilazione
#define REGAGR 10 // prospetto regime agricolo
#define REGVIA 11 // prospetto agenzie viaggio
#define RIMBORSO 12 // prospetto rimborso infraannuale
#define ACCONTO 13 // riga prospetto acconti
#define ACCHEAD 14 // header prospetto acconti
// ...............................................................
// support structs
// ...............................................................
class _VentItem : public TObject
{
public: // non e' bello, ma non e' bello neanche dover fare un
// TObject per poter mettere una struct in un TArray
real _imposta; // per comodita'
real _aliquota; // aliquota iva
real _totale; // totale acquisti
TString _codiva; // codice iva
_VentItem() : _imposta(0.0), _totale(0.0) {}
virtual ~_VentItem() {}
};
class _VendItem : public TObject
{
public: // vedi sopra per le fisime morali
real _totale; // totale vendite per registro
TString _codreg; // codice registro
int _month; // mese
_VendItem() : _codreg(5) {}
virtual ~_VendItem() {}
};
class _DescrItem : public TObject
// Sembra triste e brutto esattamente come i files tabella
// Ma la verita' e' che non e' affatto inefficiente
// e che mi piace, nei limiti dell'entusiasmo concessomi, moltissimo
{
public:
word _flags;
word _f0, _f1, _f2,
_f3;
TString _s0, _s1, _s2,
_s3, _s4;
real _r0, _r1, _r2,
_r3, _r4, _r5,
_r6, _r7, _r8,
_r9, _r10,_r11;
TArray _arr;
_DescrItem(word f) : _f0(0), _f1(0), _f2(0), _arr(4)
{ _flags = f; }
virtual ~_DescrItem()
{ }
};
class _ErrItem : public TObject
{
public:
TString _err;
TString _att;
TString _firm;
_ErrItem(const char* err, const char* att, const char* firm)
{ _err = err; _att = att; _firm = firm; }
virtual ~_ErrItem() {}
};
// ------------------------------------------------------------------------
// Application
// ------------------------------------------------------------------------
class CG4300_App : public TPrintapp
{
TArray_sheet* _ditte;
wht _what;
TBit_array _selected;
TString _year; // anno di calcolo
int _month; // mese da calcolare
TDate _date; // data di stampa
bool _isprint; // vuoi stampare o no?
bool _isfinal; // calcolo definitivo
recalc _recalc; // tipo ricalcolo scelto
bool _isplafond; // plafond importatori abituali
bool _isvent; // ventilazione
bool _isagricolo; // regime agricolo
bool _isviaggio; // regime agenzie viaggio
bool _isbenzinaro; // regime benzinaro
bool _isannual; // dichiarazione annuale
bool _mixed; // attivita' mista
bool _isriepilogo; // 13a liq
bool _isservizio; // servizi, professionisti, artisti
bool _isrimborso; // vuole il rimborso infraannuale
bool _calcall; // tutte le ditte nessuna esclusa
bool _isbase; // stampa base di calcolo acconto
tbc _basecalc; // tipo base di calcolo acconto
TString _freqviva; // frequenza versamenti (M|T}
long _n_ditte; // numero ditte
bool _comp_acconto; // stiamo calcolando l'acconto
TArray _nomiditte; // array descr. ditte per sheet
TProgind* _prind;
int _row;
TArray _vend_arr; // tabella vendite per ventilazione
TArray _vent_arr; // tabella acquisti per ventilazione
TArray _descr_arr; // things to be printed
TArray _errors; // errors to notify
// totali vari per attivita'
real _p8, _p8b, _p9; // totali plafond
real _prorata; // percentuale indetraibilita' (prorata)
// main cursor
TRelation* _rel;
TCursor* _cur;
// files, tables
TRelation* _nditte;
TLocalisamfile* _mov;
TLocalisamfile* _rmoviva;
TTable* _pim;
TTable* _plm;
TTable* _ptm;
TTable* _lim;
TTable* _pla;
TTable* _ppa;
TTable* _reg;
TTable* _iva;
TTable* _del;
TTable* _lia;
// a reference rectype per file/table
TRectype* _mov_r;
TRectype* _rmoviva_r;
TRectype* _iva_r;
TRectype* _pim_r;
TRectype* _reg_r;
TRectype* _nditte_r;
TRectype* _pla_r;
TRectype* _plm_r;
TRectype* _ptm_r;
TRectype* _lim_r;
TRectype* _ppa_r;
TRectype* _del_r;
TRectype* _att_r;
// recfields for each stronz codtab
TRecfield* _pim_anno;
TRecfield* _pim_codatt;
TRecfield* _pim_codreg;
TRecfield* _pim_mese;
TRecfield* _pim_tipocr;
TRecfield* _pim_codiva;
TRecfield* _ppa_year;
TRecfield* _ppa_codatt;
TRecfield* _ppa_month;
TRecfield* _ppa_kind;
TRecfield* _plm_anno;
TRecfield* _plm_codatt;
TRecfield* _plm_mese;
TRecfield* _ptm_anno;
TRecfield* _ptm_codatt;
TRecfield* _ptm_mese;
TRecfield* _lim_anno;
TRecfield* _lim_mese;
TRecfield* _pla_anno;
TRecfield* _pla_codatt;
TRecfield* _del_ditta;
TRecfield* _del_anno;
TRecfield* _del_mese;
TRecfield* _del_tipo;
public:
virtual void user_create();
virtual void user_destroy();
virtual bool set_print(int i);
bool set_liquidazione();
bool recalc_all();
// ricalcolo progressivi mese
bool update_firm (int month, bool recalc = TRUE);
bool update_att (int month, const char* codatt, bool recalc = TRUE);
void zero_att (int month, const char* codatt);
void recalc_att (int month, const char* codatt);
void recalc_annual (const char* codatt);
_DescrItem* recalc_rimborso(int month, const char* codatts);
// ricalcolo liquidazioni dai progressivi
void write_liq (int month, const char* atts);
// ritorna l'appropriato credito precedente al mese in corso
real credito_prec(int month);
// ritorna l'appropriato credito di costo precedente al mese in corso
// (travel agency only)
real credito_costo_prec(int month, const char* codatt);
// supporto stampa
void describe_firm(int month);
void describe_att(int month, const char* codatt);
void describe_name(int month, TToken_string& atts);
void describe_plafond(int month, const char* codatt);
void describe_ventilation(int month, const char* codatt);
void describe_agricolo(int month, const char* codatt);
void describe_viaggio(int month, const char* codatt);
void describe_pims(int month, const char* codatt);
void describe_liq(int month, const char* codatts, _DescrItem* d = NULL);
void describe_error(const char* errstr, const char* codatt);
void describe_annual(const char* codatt);
void describe_consistence(const char* codatt);
// ventilasiun
void recalc_ventilation (int month, const char* codatt);
// plafond
void zero_plafond (int month, const char* codatt);
void add_plafond (int month, const char* codatt, int type,
real& howmuch, bool intra);
// ritorna l'aliquota ordinaria dal
// codice IVA apposito immesso nei parametri studio
real aliquota_agvia();
// ritorna l'interesse per il mese in questione (dai parametri studio)
real interesse_trimestrale(int month);
// minchia di puro suino
void add_vendite (int month, const char* codreg, real& r);
void add_ventilation (real iva, real sum, const char* codiva);
// printappings
virtual void set_page(int file, int counter);
virtual bool preprocess_page(int file, int counter);
virtual print_action postprocess_page(int file, int counter);
// settaggio righe per ogni elemento di _descr_arr
void set_plafond(_DescrItem& d);
void set_ventila(_DescrItem& d);
void set_regagr(_DescrItem& d);
void set_viaggio(_DescrItem& d);
void set_firm(_DescrItem& d);
void set_att(_DescrItem& d);
void set_pim(_DescrItem& d);
void set_plm(_DescrItem& d);
void set_ptm(_DescrItem& d);
void set_annual(_DescrItem& d);
void set_grand(_DescrItem& d);
// cercapalle in tabelle con opzione di creazione se serve
bool look_pim(int m, const char* a, const char* r, const char* cr,
const char* i, bool create = FALSE);
bool look_plm(int m, const char* a, bool create = FALSE);
bool look_ptm(int m, const char* a, bool create = FALSE);
bool look_lim(int m, bool create = FALSE);
bool look_pla(const char* a, bool create = FALSE);
bool look_ppa(int m, const char* a, int t, bool create = FALSE);
bool look_del(int month, int type, bool create = FALSE);
bool look_iva(const char* cod);
bool look_reg(const char* reg);
bool look_lia(bool create = FALSE, int anno = 0);
_VendItem* look_vendita(int m, const char* codreg);
_VentItem* look_ventilation(int m, const char* codreg);
// tutti i controlli del mondo sui mesi da calcolare
bool is_trim (int x);
bool is_month_ok (int x, int month = -1);
bool is_date_ok (TDate& d, int month);
bool is_first_month (int m);
int previous_month (int m);
bool check_month (int m, int mref);
// Funzioni accessorie: estrazione deleghe
bool set_deleghe();
bool extract_deleghe();
bool extract_delega(int m);
// Funzioni accessorie: calcolo acconto dicembre
bool set_acconto();
bool recalc_acconti();
bool recalc_acconto();
// stampa
void set_acconto_p(_DescrItem& d);
void set_acchead_p(_DescrItem& d);
// cippiuppiu'
CG4300_App() : TPrintapp(), _ditte(NULL), _selected(10000), _year(4),
_nomiditte(100)
{
_isprint = TRUE; _recalc = needed;
_isplafond = FALSE; _isfinal = FALSE;
_isvent = _isagricolo = _isbenzinaro = _isviaggio = FALSE;
_row = 1; _what = all; _comp_acconto = FALSE;
_isriepilogo = FALSE; _calcall = FALSE;
}
virtual ~CG4300_App() {}
};