#ifndef __CG2102_H #define __CG2102_H #ifndef __RELAPP_H #include #endif #ifndef __CGPAGAME_H #include "cgpagame.h" #endif #ifndef __MOV_H #include "mov.h" #endif #ifndef __CGSALDAC_H #include "cgsaldac.h" #endif #ifndef __CGLIB02_H #include "cglib02.h" #endif #ifndef __CG2101_H #include "cg2101.h" #endif #ifndef __CG2101_H #include "cg2101.h" #endif #ifndef __CG2100_H #include "cg2100.h" #endif #include #include "../f1/f1lib.h" #define TIPO_REG_ACQ 2 #define K_ELIMMAS 0 // Key per eliminazione massima class TPro_msk; class TDati_mov_auto; enum CGMaskType { _query = 0, _no_iva = 1, _iva = 2, _occas = 3}; class TPrimanota_application : public TRelation_application { TMovimentoPN* _rel; // Relazione principale TPagamento* _pag; bool _ges_val, _ges_sal; // Gestione valuta e saldaconto bool _num_cli, _num_for; // Riferimento partita allineato a destra bool _liqdiff; // Liquidazione differita bool _npart_is_prot; // Riferimento partita = n. prot. IVA anziche' doc bool _npart_is_month; // Riferimento partita = mese bool _skip_giornale_check; // Ignora controllo data stampa libro giornale bool _skip_bollato_check; // Ignora controllo data stampa bollato bool _savenew; // Registra e nuovo short _firstfocus; // Primo campo della maschera a prendere il focus bool _sheet_shown; // Lo sheet e' gia' stato visualizzato una volta? bool _swap_mask; bool _is_saldaconto; // saldaconto si/no (vede parametri e causale) bool _scad_free; // posso variare liberamente le rate della fattura bool _easy_sal; // Nuovo saldaconto semplificato bool _quadratura; // Bottone quadratura automatica per ATS TString _perc_attesa_fld; // Percentuale del fornitore/cliente TSaldo_agg _saldi; // Saldi da aggiornare TPartite_array _partite; // Partite coinvolte TMask* _msk[4]; // Maschere di query, cg, iva, occasionali int _mode; // Modo maschera corrente bool _as400; // Movimento trasferito da as400? bool _sal_dirty; // Il saldaconto e' stato "toccato"? TipoIVA _iva; // Tipo di IVA corrente TCausale* _causale; // Causale corrente TLibro_giornale* _giornale; // Libro giornale corrente long _lastreg; // Numero ultima registrazione TDate _last_dreg; // Ultima data registrazione inserita TDate _last_dcom; // Ultima data competenza inserita TDati_mov_auto* _automatico;// Dati per gestire incasso immediato TBill _conto_ricavo; // Conto di ricavo del clifo TToken_string _tmp; // Stringa temporanea da ritornare TString_array _pag_rows; // Copia dello sheet delle rate TEsercizi_contabili _esercizi; // Tabella degli esercizi contabili TAssoc_array _colori; // Colori delle righe bool _isfp; shared_ptr _pro_mask; friend class TPro_msk; static bool showpartite_handler(TMask_field& f, KEY k); static bool speserimb_handler(TMask_field& f, KEY k); static bool altrespese_handler(TMask_field& f, KEY k); static bool abbatt_handler(TMask_field& f, KEY k); static bool abbpass_handler(TMask_field& f, KEY k); static bool ritprof_handler(TMask_field& f, KEY k); static bool diffcamb_handler(TMask_field& f, KEY k); static bool suspended_handler(TMask_field& f, KEY k); static bool num_handler(TMask_field& f, KEY key); static bool caus_query_handler(TMask_field& f, KEY key); static void check_fppro_fields(TMask& m); static bool caus_modify_handler(TMask_field& f, KEY key); static bool datareg_handler(TMask_field& f, KEY key); static bool datacomp_handler(TMask_field& f, KEY key); static bool data74ter_handler(TMask_field& f, KEY key); static bool datadoc_handler(TMask_field& f, KEY key); static bool numdoc_handler(TMask_field& f, KEY key); static bool ndocext_handler(TMask_field& f, KEY key); static bool annorif_handler(TMask_field& f, KEY key); static bool numrif_handler(TMask_field& f, KEY key); static bool protiva_handler(TMask_field& f, KEY key); static bool clifo_handler(TMask_field& f, KEY key); static bool totdoc_handler(TMask_field& f, KEY key); static bool totdocval_handler(TMask_field& f, KEY key); static bool ritfis_handler(TMask_field& f, KEY key); static bool ritsoc_handler(TMask_field& f, KEY key); static bool revcharge_handler(TMask_field& f, KEY key); static bool main_codiva_handler(TMask_field& f, KEY key); static bool liqdiff_handler(TMask_field& f, KEY key); static bool ivaxcassa_handler(TMask_field& f, KEY key); static bool dataintra_handler(TMask_field& f, KEY key); static bool corrlire_handler(TMask_field& f, KEY key); static bool corrvaluta_handler(TMask_field& f, KEY key); static bool occas_code_handler(TMask_field& f, KEY key); static bool occas_cfpi_handler(TMask_field& f, KEY key); static bool occas_handler(TMask_field& f, KEY key); static bool solaiva_handler(TMask_field& f, KEY key); static bool descr_handler(TMask_field& f, KEY k); static bool sheet_clifo_handler(TMask_field& f, KEY k); static bool sheet_mastrino_handler(TMask_field& f, KEY k); static bool sheet_rateo_handler(TMask_field& f, KEY k); static bool sheet_risconto_handler(TMask_field& f, KEY k); static bool iva_sottoconto_handler(TMask_field& f, KEY k); static bool imponibile_handler(TMask_field& f, KEY key); static bool detrazione_handler(TMask_field& f, KEY key); static bool codiva_handler(TMask_field& f, KEY key); static bool imposta_handler(TMask_field& f, KEY key); static bool dareavere_handler(TMask_field& f, KEY k); static bool fase_handler(TMask_field& f, KEY key); static bool cg_tipo_handler(TMask_field& f, KEY key); static bool cg_gruppo_handler(TMask_field& f, KEY key); static bool cg_conto_handler(TMask_field& f, KEY key); static bool cg_sottoconto_handler(TMask_field& f, KEY key); static bool codpag_handler(TMask_field& f, KEY key); static bool valuta_handler(TMask_field& f, KEY key); static bool datacambio_handler(TMask_field& f, KEY key); static bool cambio_handler(TMask_field& f, KEY key); static bool reset_handler(TMask_field& f, KEY key); static bool nrate_handler(TMask_field& f, KEY key); static bool recalc_handler(TMask_field& f, KEY key); static bool codcab_handler(TMask_field& f, KEY key); static bool tipopag_handler(TMask_field& f, KEY key); static bool linkdoc_handler(TMask_field& f, KEY k); static bool mastrino_handler(TMask_field& f, KEY k); static bool rataeur_handler(TMask_field& f, KEY key); static bool rataval_handler(TMask_field& f, KEY key); static bool iva_handler(TMask_field& f, KEY key); static bool cg_handler(TMask_field& f, KEY key); static bool pag_notify(TSheet_field& s, int r, KEY key); static bool pag_sheet_handler(TMask_field& f, KEY key); static bool colors_handler(TMask_field& f, KEY k); static bool quadratura_handler(TMask_field& f, KEY k); // Bottone quadratura per ATS // Handlers per aggancio FPPRO // Bottone per maschera FPPRO static bool fppro_mask(TMask_field& f, KEY key); static bool is_collegato(TMask_field& f); static void fppromask_set_handl(TMask* msk); static void load_list(TMask* msk, KEY k); void reset_sheet_row(TSheet_field& s, int n); int crea_somma_spese(TImporto& imp); void update_saldo_riga(int r); void link_mastrino(const TBill& bill) const; protected: // TApplication virtual void on_firm_change(); virtual void on_config_change(); virtual void print(); void dump_rec(TConfig & ini, const TRectype & rec, int row = 0, int pref = 0); void dump_fatt(TConfig& ini, TPartita & game, int rigafatt, int pref = 0); virtual void ini2mask(TConfig& ini, TMask& msk, bool query); virtual void mask2ini(const TMask& msk, TConfig& ini); // Metodi per aggancio FPPRO (solo su operazioni di Fattura di Acquisto) // Salvo dati fornitore e registrazione contabile sul db FPPRO int save_fppro(); // Salva sul movimento il riferimento al documento in FPPRO bool save_dbmov() const; // Pulisce il mov e db dai firerimenti FPPRO (in MODE_MOD per edit/delete) void clean_fppro(); bool is_fp(TMask* m); virtual bool save(bool check_dirty); bool get_mask_swap_file(TFilename& name) const; bool force_mask_swap(const TCausale& old_caus, const TCausale& new_caus); protected: // TRelation_application virtual bool user_create(); virtual bool user_destroy(); virtual bool changing_mask(int mode); virtual TMask* get_mask(int mode); virtual TRelation* get_relation() const { return _rel; } virtual void init_query_mode(TMask& m); virtual void init_insert_mode(TMask& m); virtual void init_modify_mode(TMask& m); virtual bool save_and_new() const; virtual bool save_and_quit() const; virtual bool is_transaction() const; virtual bool get_next_key(TToken_string& key); virtual int read(TMask& m); virtual int write(const TMask& m); virtual int rewrite(const TMask& m); virtual bool remove(); virtual void write_enable(bool) {} virtual bool protected_record(TRectype& rec); virtual bool can_I_write(const TRelation* rel) const; virtual const char* record_description(const TRelation& rel) const; protected: void check_saldi(); void genera_automatico(int tipo, const char* causimm); // 0=nessuno, 1=incasso, 2=regolarizzazione 3= ?? 4 = rilevazione fatture da emettere/ricevere void gioca_cambi(int force = 0x00); TMask* load_mask(int n); TMask& occas_mask() { return *load_mask(3); } void mask2rel(const TMask& m); TipoIVA iva() const { return _iva; } const TString & clifo() const; bool gestione_valuta() const { return _ges_val; } bool gestione_saldaconto() const { return _ges_sal; } bool npart_is_month() const { return _npart_is_month; } bool npart_is_prot() const { return _npart_is_prot; } bool is_saldaconto() const { return _is_saldaconto; } bool is_fattura() const { return is_saldaconto() && causale().tipomov() == tm_fattura; } bool is_nota_credito() const { return is_saldaconto() && causale().tipomov() == tm_nota_credito; } bool is_pagamento() const { return is_saldaconto() && causale().tipomov() >= tm_pagamento; } bool activate_split_payment(TMask& m); bool is_split_payment() const; bool is_fattura_split() const; bool activate_numrif(TMask& m, bool set_pag); void fill_sheet(TMask& m) const; void init_mask(TMask& m); static TipoIVA reg2IVA(const char* registro, int anno); static const real& cod2IVA(const TMask& m); static real scorpora(real& imponibile, const real& percentuale); static int get_importi_iva(const TToken_string& row, real& imp_det, real& iva_det, real& imp_ind, real& iva_ind); static int bill2pos(const TBill& conto, char tipo); TipoIVA cau2IVA(const char* causale, int anno); bool IVA2bill(const TCodiceIVA& iva, TBill& bill); int bill2contr(const TBill& c, char sezione) const; int bill_used(const TBill& conto) const; TBill& ivas_bill(TBill& tc); void load_colors(); void save_colors(); COLOR type2color(char tipor, char tipoc); void set_type_color(char tipor, char tipoc, COLOR col); void set_colors(); bool read_caus(const char* cod, int year); TLibro_giornale& giornale() { return *_giornale; } bool test_swap(bool ritsoc); TImporto real2imp(const real& r, char tipo); real totale_documento(); void ivas_pack(); void cgs_pack(); bool ci_sono_importi(const TSheet_field& cgs) const; real calcola_imp() const; void add_cgs_tot(TMask& m); int set_cgs_row(int n, const TImporto& importo, TBill& conto, const char* desc, char tipo, const char* cms = NULL, const char* fas = NULL); void set_cgs_imp(int n, const TImporto& importo); bool add_cgs_imp(int n, const TImporto& importo); bool sub_cgs_imp(int n, const TImporto& importo); void disable_cgs_cells(int n, char tipo); void add_cup_or_cig(short id, const TRectype& rec, TToken_string& riga) const; void add_cup_or_cig(short id, TConfig& ini, TToken_string& riga) const; void add_cgs_ritenute(char fsr); // Fiscali, Sociali, Reverse Charge void generazione_righe_cg(int r); void reset_cgs_row(int n) { reset_sheet_row(cgs(), n); } void reset_ivas_row(int n) { reset_sheet_row(ivas(), n); } TPagamento& pagamento() const; void set_pagamento(const char* c, const char* d); void set_totale_pagamento(bool update); void reset_pagamento(); void set_scadenze(TMask& m); void set_banche(TMask& m); bool read_scadenze(TMask& m); void write_scadenze(const TMask& m); void remove_scadenze(const TMask& m, const char* rif); void renumber_partita(TMask& m, const char* oldp, const char* newp); void recalc_scadenze(const TDate& d); #ifdef PRORATA100 static bool prorata_handler(TMask_field& f, KEY k); bool test_prorata(); bool aggiusta_prorata(); #endif int cerca_conto_cf(TBill& bill) const; bool edit_partite(const TMask& m, int riga); bool crea_partita(const TBill& bill, int anno, const TString& numero, int numrig, const TImporto& importo); bool notify_cgline_deletion(TPartita& partita, long nreg, int numrig); bool notify_cgline_deletion(int numrig); bool is_percipient(long forn, char& tipper, long& codper) const; long calcola_m770(int tipo_coll, real& spese, real& compenso, real& iva, real& ritfis); bool link_m770(); bool link_cesp (const TMask& msk, const char* action); bool link_intra(const TMask& msk, const char* action); bool link_anal (const TMask& msk, const char* action); public: static int type2pos(char tipo); static char row_type(const TToken_string& s); static bool iva_notify(TSheet_field& s, int r, KEY key); static bool cg_notify(TSheet_field& s, int r, KEY key); bool get_isfp() const { return _isfp; } TMask * mask(CGMaskType type) { return _msk[type]; } void type2colors(char tipor, COLOR& back, COLOR& fore); void set_type_colors(char tipor, COLOR back, COLOR fore); void reset_colors(); real calcola_saldo() const; TCausale& causale() const { return *_causale; } TPartite_array& partite() { return _partite; } // Partite editate bool edit_pagamento(TPartita& p, int nriga, int nrata, int nrigp); bool notify_edit_pagamento(TPartita& partita, TRectype& new_pag, const TValuta& valuta, int deleting = 0); TSheet_field& cgs() const; TSheet_field& ivas() const; TSheet_field& pags() const; TString_array& pag_rows() { return _pag_rows; } TImporto get_cgs_imp(int n) const; TPrimanota_application(); virtual ~TPrimanota_application() { } }; class TPro_msk : public TAutomask { TString _numero; TDate _datadoc; real _totdoc; TProtocollo _protfppro; TString _fpprokeys; // Handlers per aggancio FPPRO // Bottone carica documenti in maschera FPPRO static bool fppro_handler(TMask_field& f, KEY k); // Bottone riporta doc FPPRO in testata Prima Nota static bool fppro_ok_handler(TMask_field& f, KEY k); static bool piva_handler(TMask_field& f, KEY k); static bool date_handler(TMask_field& f, KEY k); // Non permette la selezione multipla void fppro_selfatt() const; bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; public: void set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* protfppro, const char* fpprokeys); TString get_numdoc() const { return _numero; } TDate get_datadoc() const { return _datadoc; } real get_totdoc() const { return _totdoc; } TProtocollo& get_protocollo() { return _protfppro; } TString get_fpprokeys() const { return _fpprokeys; } static TString& query_fppro(const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, const TString& where_str); static TString& query_fppro(const TString& codforn, const TString& date); static TString& query_fppro(const TString& stato_piva, const TString& piva, const TString& date); static TString& query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TString& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order = true, bool piva_research = false); static void abilita_piva(TMask* msk); //bool is_fp(); // Carica documenti FPPRO sulla maschera static bool load_fppro_mask(TMask* msk, KEY k = 32); TPro_msk() = delete; TPro_msk(TMask& cg_msk); }; #ifndef __EXTRA__ inline TPrimanota_application& app() { return (TPrimanota_application&)main_app(); } #endif #endif