diff --git a/cg/cg4302.cpp b/cg/cg4302.cpp index 8431d061c..93414ca54 100755 --- a/cg/cg4302.cpp +++ b/cg/cg4302.cpp @@ -469,8 +469,10 @@ real TLiquidazione_app::versamenti_IVA(int month, const char* types, bool intr) int tp = typ.get_int(i); if (look_del(month,tp)) if (_del->get_bool("B0")) // solo se stampata - ret += _del->get_real("R0") + - (intr ? _del->get_real("R1") : ZERO); + { + ret += _del->get_real("R0"); + if (intr) ret += _del->get_real("R1"); + } } return ret; } diff --git a/cg/cg5500.cpp b/cg/cg5500.cpp index 2f92e2d88..7a98ae456 100755 --- a/cg/cg5500.cpp +++ b/cg/cg5500.cpp @@ -7,12 +7,18 @@ #include #include #include +#include +#include +#include #include "cg5500a.h" const char* Visliq_app::itoname(int m) { - const char* mn; + const char* mn; + if (m == 13) + return "Annuale"; + if (_freqviva == "M") return itom(m); @@ -52,6 +58,13 @@ void Visliq_app::set_freqviva() bool Visliq_app::create() { TApplication::create(); + + _firm = get_firm(); + TDate oggi(TODAY); + _year = oggi.year(); + _nditte = new TRelation(LF_NDITTE); + _ditte = new TArray_sheet(-1, -1, 0, 0, "Selezione Ditte", + "Cod.@5|Ragione Sociale@50|Vers."); _del = new TTable("%DEL"); _lia = new TTable("LIA"); @@ -65,6 +78,11 @@ bool Visliq_app::create() _lim_anno = new TRecfield(*_lim_r,"CODTAB",0,3); _lim_mese = new TRecfield(*_lim_r,"CODTAB",4,6); + begin_wait(); + build_nomiditte(); + build_ditte_sheet(); + end_wait(); + dispatch_e_menu(BAR_ITEM(1)); return TRUE; @@ -81,10 +99,84 @@ bool Visliq_app::destroy() delete _del_r; delete _lim; delete _del; + delete _ditte; + delete _nditte; return TApplication::destroy(); } +bool Visliq_app::ch_year_handler(TMask_field& f, KEY key) +{ + if (key == K_TAB && f.focusdirty()) + { + app().begin_wait(); + app().set_year(f.get()); + app().build_nomiditte(); + app().build_ditte_sheet(); + app().reset_fields(); + app().end_wait(); + } + return TRUE; +} + + +void Visliq_app::build_ditte_sheet() +{ + // build sheet + _ditte->destroy(); + for (int i = 0; i < _nomiditte.items(); i++) + { + TToken_string* d = new TToken_string(64); + *d = (TToken_string&)_nomiditte[i]; + const char vers = d->get_char(2); + bool selectable = vers == '?'; + const long pos = _ditte->add(d); + if (selectable) _ditte->disable(pos); + } +} + +void Visliq_app::reset_fields() +{ + _mask->field(F_CODDITTA).set(""); + _mask->field(F_RAGSOC).set(""); +} + +void Visliq_app::build_nomiditte() +{ + _nomiditte.destroy(); + // ricostruire _nomiditte e rifare build_ditte_sheet + TLocalisamfile& dt = _nditte->lfile(); + TString fr(2); + + for (dt.first(); !dt.eof(); dt.next()) + { + // check no archivi + fr = "??"; + bool good = prefhndl->exist(dt.get_long("CODDITTA")); + + if (good) + { + // check no parametri liquidazione + TApplication::set_firm(dt.get_long("CODDITTA")); + TTable lia("LIA"); + lia.put("CODTAB", format("%d",_year)); + if (lia.read() != NOERR) good = FALSE; + else fr = lia.get("S7"); + } + + TToken_string* d = new TToken_string(64); + + // add record + d->add(dt.get("CODDITTA")); + d->add(dt.get("RAGSOC")); + d->add(fr); + + _nomiditte.add(d); + } + TApplication::set_firm(_firm); +} + + void Visliq_app::set_mask_freq(TMask& m) { @@ -107,6 +199,12 @@ bool Visliq_app::sheet_action(int r, KEY k) return (k != K_DEL && k != K_INS); } +bool Visliq_app::vers_action(int r, KEY k) +{ + // non si possono cancellare o aggiungere righe + return (k != K_DEL && k != K_INS); +} + const char* Visliq_app::link_handler(TMask& m, @@ -147,33 +245,61 @@ bool Visliq_app::menu(MENU_TAG m) // handlers bool Visliq_app::set_ditta(TMask_field& f, KEY k) -{ - long ditta = atol(f.get()); - - if (ditta <= 0) return k != K_ENTER; - - if (!prefhndl->exist(ditta)) +{ + bool found = TRUE; + if (k == K_TAB && f.focusdirty()) { - warning_box("Archivi ditta %l non presenti!", ditta); - return FALSE; - } - else - { - main_app().set_firm(ditta); - ((Visliq_app&)main_app()).set_freqviva(); - } - ((Visliq_app&)main_app()).set_mask_freq(f.mask()); - - return TRUE; + found = FALSE; + TString ditta = f.get(); + TArray_sheet* sh = app().get_ditte_sheet(); + for (int i = 0; i < sh->items(); i++) + { + TToken_string& row = sh->row(i); + if (ditta == row.get(0)) + { + if (sh->enabled(i)) + { + f.mask().field(F_CODDITTA).set(row.get(0)); + f.mask().field(F_RAGSOC).set(row.get(1)); + app().set_freqviva(row.get(2)); + app().set_mask_freq(f.mask()); + found = TRUE; + } + else { f.reset(); beep(); } + break; + } + } + } + return found; } -bool Visliq_app::set_anno(TMask_field& f, KEY k) +bool Visliq_app::set_ragsoc(TMask_field& f, KEY k) { - ((Visliq_app&)main_app()).set_year(atoi(f.get())); - ((Visliq_app&)main_app()).set_freqviva(); - ((Visliq_app&)main_app()).set_mask_freq(f.mask()); - - return TRUE; + bool found = TRUE; + if (k == K_TAB && f.focusdirty()) + { + found = FALSE; + TString ditta = f.get(); + TArray_sheet* sh = app().get_ditte_sheet(); + for (int i = 0; i < sh->items(); i++) + { + TToken_string& row = sh->row(i); + TString ts(row.get(1)); + if (ts.find(ditta) != -1) + { + if (sh->enabled(i)) + { + f.mask().field(F_CODDITTA).set(row.get(0)); + f.mask().field(F_RAGSOC).set(row.get(1)); + app().set_freqviva(row.get(2)); + app().set_mask_freq(f.mask()); + found = TRUE; + break; + } + } + } + } + return found; } @@ -185,10 +311,10 @@ bool Visliq_app::sel_mese_sh1 (TMask_field& f, KEY k) TSheet_field& sh = (TSheet_field&)m.field(F_VISLIQ1); int month = sh.selected()+1; TToken_string& tt = sh.row(sh.selected()); - if (sh.items() == 4) month *= 3; - ((Visliq_app&)main_app()).vis_one(month); - ((Visliq_app&)main_app()).look_lim(month); - ((Visliq_app&)main_app()).update_sheet_row(tt); + if (sh.items() == 4) month *= 3; + app().vis_one(month); + app().look_lim(month); + app().update_sheet_row(tt); TMask& sm = sh.sheet_mask(); sm.field(103).set(tt.get(2)); @@ -226,22 +352,43 @@ bool Visliq_app::vis_liq() { long ditta = get_firm(); set_freqviva(); + KEY k; TMask m("cg5500a"); + _mask = &m; m.set_handler(F_CODDITTA, set_ditta); - m.set_handler(F_YEAR, set_anno); + m.set_handler(F_RAGSOC, set_ragsoc); + m.set_handler(F_YEAR, ch_year_handler); set_mask_freq(m); _year = m.get_int(F_YEAR); - while (m.run() != K_ESC) - { - int month = m.get_int(_freqviva == "M" ? F_MONTHS : F_TRIMS); - if (month == 0) - vis_all(); - else - vis_one(month); + while ((k = m.run()) != K_ESC) + { + if (k == DLG_SELECT) + { + if (_ditte->run() == K_ENTER) + { + TToken_string& row = _ditte->row(_ditte->selected()); + m.field(F_CODDITTA).set(row.get(0)); + m.field(F_RAGSOC).set(row.get(1)); + set_freqviva(row.get(2)); + set_mask_freq(m); + } + } + else if (k == K_ENTER) + { + long dtt = m.get_long(F_CODDITTA); + + set_firm(dtt); + int month = m.get_int(_freqviva == "M" ? F_MONTHS : F_TRIMS); + if (month == 0) + vis_all(); + else + vis_one(month); + _mask = &m; + } } set_firm(ditta); @@ -269,7 +416,8 @@ bool Visliq_app::vis_all() // disabilita aggiunta/eliminazione righe sh.set_notify(sheet_action); - sv.set_notify(sheet_action); + // TBI qui occorre modificare le deleghe + sv.set_notify(vers_action); sh.sheet_mask().set_handler(101,sel_mese_sh1); sv.sheet_mask().set_handler(101,sel_mese_sh2); @@ -364,6 +512,9 @@ bool Visliq_app::vis_one(int m) begin_wait(); TMask msk("cg5500d"); bool recorded = FALSE; + TString nomem("Liquidazione IVA "); + nomem << itoname(m); + nomem << " " << _year; // ricalcolo liquidazione TMessage msg; TFilename f; @@ -397,6 +548,7 @@ bool Visliq_app::vis_one(int m) acconto = _lia->get_real("R4"); } + msk.field(F_YEAR).set(nomem); msk.field(F_RIMBORSO).set(rimborso.string()); if (rettifica.sign() < 0) { @@ -555,10 +707,7 @@ bool Visliq_app::vis_one(int m) { _lim->put("S1", n_desc2); write_lim = TRUE; - } - - // TBI abilitare ricalcolo liquidazione - + } if (write_lia && k == K_SAVE) _lia->rewrite(); diff --git a/cg/cg5500.h b/cg/cg5500.h index 6104b276f..b8bdb8438 100755 --- a/cg/cg5500.h +++ b/cg/cg5500.h @@ -7,6 +7,11 @@ class Visliq_app : public TApplication TString _freqviva; int _year; + long _firm; + + TRelation* _nditte; + TArray_sheet* _ditte; + TArray _nomiditte; TTable* _lim; TTable* _lia; @@ -38,23 +43,34 @@ protected: // handlers static bool set_ditta(TMask_field&, KEY); - static bool set_anno (TMask_field&, KEY); + static bool set_ragsoc(TMask_field&, KEY); static bool sel_mese_sh1 (TMask_field&, KEY); static bool sel_mese_sh2 (TMask_field&, KEY); + static bool ch_year_handler(TMask_field& f, KEY key); static const char* link_handler(TMask&, int, const char*, bool doubleclick); static bool sheet_action(int r, KEY k); + static bool vers_action(int r, KEY k); -public: +public: + + static Visliq_app& app() { return (Visliq_app&)main_app(); } + TArray_sheet* get_ditte_sheet() { return _ditte; } + + void build_ditte_sheet(); + void build_nomiditte(); bool look_lia(int year = 0); bool look_lim(int m); bool look_del(int month, int type); void set_freqviva(); + void set_freqviva(const char* f) { _freqviva = f; } void set_mask_freq(TMask&); - void set_year(int y) { _year = y; } + void set_year(const char* y) { _year = atoi(y); } + void set_year(int y) { _year = y; } + void reset_fields(); TMask* get_main_mask() { return _mask; } void update_sheet_row(TToken_string& t); diff --git a/cg/cg5500a.h b/cg/cg5500a.h index 1d3be2b47..5125e45fd 100755 --- a/cg/cg5500a.h +++ b/cg/cg5500a.h @@ -13,6 +13,7 @@ #define F_DESCR1 113 #define F_DESCR2 114 #define F_DEBCRE 115 +#define F_SELECT 116 #define F_CODDITTA2 201 #define F_RAGSOC2 202 diff --git a/cg/cg5500a.uml b/cg/cg5500a.uml index 7e7f71336..a49feddff 100755 --- a/cg/cg5500a.uml +++ b/cg/cg5500a.uml @@ -6,35 +6,31 @@ PAGE "Visualizzazione Liquidazione" -1 -1 70 6 - NUMBER F_CODDITTA 5 BEGIN PROMPT 1 1 "Codice ditta " HELP "Codice della ditta da attivare" - FLAGS "FR" - USE LF_NDITTE KEY 1 - INPUT CODDITTA F_CODDITTA - DISPLAY "Codice" CODDITTA - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_CODDITTA CODDITTA - OUTPUT F_RAGSOC RAGSOC - CHECKTYPE NORMAL - WARNING "Ditta assente" - KEY 1 +END + +BUTTON F_SELECT 2 1 +BEGIN + PROMPT 19 1 "*" + PICTURE 109 + MESSAGE EXIT,DLG_SELECT END STRING F_RAGSOC 50 30 BEGIN PROMPT 25 1 "Rag. soc. " - USE LF_NDITTE KEY 2 HELP "Ragione sociale della ditta da selezionare" - INPUT RAGSOC F_RAGSOC - DISPLAY "Ragione sociale@50" RAGSOC - DISPLAY "Codice" CODDITTA - COPY OUTPUT F_CODDITTA - KEY 2 END +BUTTON F_SELECT 2 1 +BEGIN + PROMPT 66 1 "*" + PICTURE 109 + MESSAGE EXIT,DLG_SELECT +END NUMBER F_YEAR 4 BEGIN diff --git a/cg/cg5500d.uml b/cg/cg5500d.uml index 29f7f024b..925ec2828 100755 --- a/cg/cg5500d.uml +++ b/cg/cg5500d.uml @@ -8,11 +8,11 @@ ENDPAGE PAGE "Visualizzazione liquidazione" -1 -1 77 20 -GROUPBOX DLG_NULL 79 3 +GROUPBOX F_YEAR 79 3 BEGIN PROMPT 0 0 "@bDitta corrente" END - + NUMBER F_CODDITTA 5 BEGIN PROMPT 2 1 "Codice " @@ -41,7 +41,8 @@ NUMBER F_RIMBORSO 15 0 BEGIN PROMPT 3 16 "Rimborso infraannuale: " GROUP 1 - FLAGS "H" + FLAGS "HR" + PICTURE "." END /* gruppo 2: edit rettifiche */ @@ -50,7 +51,8 @@ NUMBER F_RETTIFICA 15 0 BEGIN PROMPT 2 15 "Importo rettif. " GROUP 2 - FLAGS "H" + FLAGS "HR" + PICTURE "." END LIST F_DEBCRE 7 @@ -82,7 +84,8 @@ NUMBER F_ACCONTO 15 0 BEGIN PROMPT 3 16 "Acconto versato: " GROUP 3 - FLAGS "H" + FLAGS "HR" + PICTURE "." END GROUPBOX DLG_NULL 80 5 diff --git a/cg/cg5600.cpp b/cg/cg5600.cpp index 2dd057404..b5fcfa544 100755 --- a/cg/cg5600.cpp +++ b/cg/cg5600.cpp @@ -24,6 +24,8 @@ class TRipristino_liq : public TApplication TArray _nomiditte; virtual bool create(); + virtual bool destroy(); + bool menu(MENU_TAG) { return do_restore(); } // handuler @@ -129,6 +131,13 @@ bool TRipristino_liq::create() return TRUE; } +bool TRipristino_liq::destroy() +{ + delete _nditte; + delete _ditte; + return TApplication::destroy(); +} + bool TRipristino_liq::do_restore() { KEY k; int i;