// of course this is -*-C++-*- // Questa e' la famosa palla della liquidazione IVA #ifndef __MASK_H #include #endif #ifndef __PRINTAPP_H #include #endif #ifndef __TABUTIL_H #include #endif // ------------------------------------------------------------------ // 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 // and you to keep your fucking ass healty // ------------------------------------------------------------------ // 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/tipo det. TString _codreg; // codice registro int _month; // mese int _tipodet; // tipo detraibilita' _VendItem() : _codreg(5) {} virtual ~_VendItem() {} }; class _CorrItem : public TObject { public: // vedi sopra per le fisime morali real _totale; // totale vendite per registro TString _codreg; // codice registro int _month; // mese real _aliquota; // aliquota iva TString _codiva; // codice iva int _tipodet; // tipo detraibilita' _CorrItem() : _codreg(5) {} virtual ~_CorrItem() {} }; 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 TLiquidazione_app : public TPrint_application { 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 _corr_arr; // tabella corrispettivi 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) long __firm; // ditta selezionata all'inizio static real CENTO; // 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* _ppa_r; TRectype* _lim_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* _pim_tipodet; 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* _pla_anno; TRecfield* _pla_codatt; TRecfield* _del_ditta; TRecfield* _del_anno; TRecfield* _del_mese; TRecfield* _del_tipo; TRecfield* _lim_anno; TRecfield* _lim_mese; protected: long select_firm_range(long from, long to, wht freq); static bool to_ditta_handler(TMask_field& f, KEY key); public: virtual bool user_create(); virtual bool 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); // corrispettivi void recalc_corrispettivi (int month, 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, int tipodet, real& r); void add_ventilation (real iva, real sum, const char* codiva); void add_corrisp (int month, const char* codreg, real& r, real& p, int tipodet, 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, int tipodet = 0, 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' TLiquidazione_app(); virtual ~TLiquidazione_app() {} };