diff --git a/ps/indice_programmi.txt b/ps/indice_programmi.txt index 124c94f92..2b90a0a99 100755 --- a/ps/indice_programmi.txt +++ b/ps/indice_programmi.txt @@ -41,6 +41,9 @@ Importazione di movimenti in Analitica (Habilita) Ribaltamento ricorsivo movimenti di Analitica (Habilita) Quadratore dei movimenti di Analitica (Habilita) +PD6411 +Gestione Listini per Gruppo Merceologico (Haba) + - PG ------------------------------------------------------------------------------------------------------------- PG0001 diff --git a/ps/pd6411.cpp b/ps/pd6411.cpp new file mode 100755 index 000000000..ea24217b9 --- /dev/null +++ b/ps/pd6411.cpp @@ -0,0 +1,14 @@ +#include + +#include "pd6411.h" + +int main(int argc, char** argv) +{ + int n = argc > 1 ? atoi(argv[1]+1) : 0; + switch(n) + { + case 0: pd6411100(argc, argv); break; //gestione listini materiali Haba Piastre + default: pd6411100(argc, argv); break; //gestione listini materiali Haba Piastre + } + return 0; +} diff --git a/ps/pd6411.h b/ps/pd6411.h new file mode 100755 index 000000000..8a3c1278b --- /dev/null +++ b/ps/pd6411.h @@ -0,0 +1 @@ +int pd6411100(int argc, char* argv[]); \ No newline at end of file diff --git a/ps/pd6411100.cpp b/ps/pd6411100.cpp new file mode 100755 index 000000000..1133f2d90 --- /dev/null +++ b/ps/pd6411100.cpp @@ -0,0 +1,241 @@ +#include + +#include "pd6411100a.h" +#include "../ca/calib01.h" +#include "../ca/movana.h" +#include "../ca/rmovana.h" +#include "../ve/velib.h" + +/////////////////////////////////////////////////////////// +// TListini_haba_msk +/////////////////////////////////////////////////////////// + +class TListini_haba_msk: public TAutomask +{ +protected: + void riempi_sheet(); + void cambio(const short primo, const short secondo); + void aggiungi_riga(); + void registra(); + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); +public: + TListini_haba_msk(); +}; + +void TListini_haba_msk::riempi_sheet() +{ + const TString8 gruppo = get(F_GRUPPO); + const TString4 mese = get(F_MESE); + + TSheet_field& sheet = sfield(F_SHEET); + sheet.destroy(); + + if(gruppo.empty() || mese.empty()) + { + sheet.force_update(); + return; + } + + TString16 codtab; + codtab << gruppo << mese; + codtab.trim(); + + TString query; + query << "USE LGM\n" + << "FROM CODTAB=\"" << codtab << "\"\n" + << "TO CODTAB=\"" << codtab << "\""; + + TISAM_recordset listini(query); + + for(bool ok = listini.move_first(); ok; ok = listini.move_next()) + { + const TRectype& lis = listini.cursor()->curr(); + const TString80 codtab = lis.get("CODTAB"); + const real impeu = lis.get("R0"); + const real impfr = lis.get("R1"); + + TToken_string& row = sheet.row(-1); + row.add(codtab.left(3), sheet.cid2index(S_GRUPPO)); + row.add(codtab.mid(3,2), sheet.cid2index(S_MESE)); + row.add(codtab.mid(5), sheet.cid2index(S_SPESSORE)); + row.add(impeu.string(), sheet.cid2index(S_IMPEURO)); + row.add(impfr.string(), sheet.cid2index(S_IMPFRANCO)); + } + sheet.force_update(); +} + +void TListini_haba_msk::cambio(const short primo, const short secondo) +{ + TSheet_field& sheet = sfield(F_SHEET); + TMask& msk = sheet.mask(); + const TString& codval = msk.get(F_CODVAL); + const real cambio = msk.get_real(F_CAMBIO); + + TMask& rmsk = sheet.sheet_mask(); + + if(rmsk.field(secondo).empty() || cambio.is_zero() || codval.empty()) + return; + + TToken_string& row = sheet.row(sheet.selected()); + TCurrency impval; rmsk.get_currency(secondo, impval); + + if(secondo == S_IMPEURO) + impval.change_value(codval, cambio); + else + impval.change_to_euro_val(); + + rmsk.set(primo, impval); +} + +void TListini_haba_msk::aggiungi_riga() +{ + const TString4 gruppo = get(F_GRUPPO); + const TString4 mese = get(F_MESE); + + if(gruppo.empty() || mese.empty()) + return; + + TSheet_field& sheet = sfield(F_SHEET); + TToken_string& row = sheet.row(-1); + row.add(gruppo, sheet.cid2index(S_GRUPPO)); + row.add(mese, sheet.cid2index(S_MESE)); + sheet.force_update(); +} + +void TListini_haba_msk::registra() +{ + TTable listini("LGM"); + TSheet_field& sheet = sfield(F_SHEET); + + FOR_EACH_SHEET_ROW(sheet, r, riga) + { + TToken_string& row = *(TToken_string*)riga; + TString80 codtab; + codtab << row.get(sheet.cid2index(S_GRUPPO)) << row.get(sheet.cid2index(S_MESE)) << row.get(sheet.cid2index(S_SPESSORE)); + const real impeuro(row.get(sheet.cid2index(S_IMPEURO))); + const real impfranco(row.get(sheet.cid2index(S_IMPFRANCO))); + + listini.put("CODTAB", codtab); + listini.put("R0", impeuro); + listini.put("R1", impfranco); + listini.rewrite_write(); + } +} + +bool TListini_haba_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch(o.dlg()) + { + case DLG_CANCEL: + if(e == fe_button && jolly == 0) + { + reset(F_GRUPPO); + reset(F_MESE); + sfield(F_SHEET).destroy(); + return false; + } + break; + case DLG_SAVEREC: + if(e == fe_button) + registra(); + break; + case F_GRUPPO: + case F_MESE: + if(e == fe_modify) + riempi_sheet(); + break; + case F_SHEET: + if(e == se_query_add) + { + aggiungi_riga(); + return false; + } + break; + case S_SPESSORE: + if(e == fe_modify) + { + TSheet_field& sheet = sfield(F_SHEET); + const int rsel = sheet.selected(); + const int spessore = o.get_long(); + + FOR_EACH_SHEET_ROW(sheet, r, riga) + { + if(r == rsel) + continue; + + TToken_string& row = *(TToken_string*)riga; + if(row.get_int(sheet.cid2index(S_SPESSORE)) == spessore) + { + TString msg; + msg << "Attenzione: esiste già una riga con spessore " << spessore; + warning_box(msg); + + sheet.select(rsel); + TMask& rmsk = sheet.sheet_mask(); + rmsk.set(S_SPESSORE, 0L); + break; + } + } + } + break; + case S_IMPEURO: + case S_IMPFRANCO: + if(e == fe_modify || e == fe_close) + { + const short primo = o.dlg(); + const short secondo = S_IMPEURO + S_IMPFRANCO - o.dlg(); + + TMask& rmsk = o.mask(); + + if(rmsk.field(primo).empty() && !rmsk.field(secondo).empty()) + cambio(primo, secondo); + + if(!rmsk.field(primo).empty() && rmsk.field(secondo).empty()) + cambio(secondo, primo); + } + break; + default: break; + } + return true; +} + +TListini_haba_msk::TListini_haba_msk() : TAutomask("pd6411100a") +{ +} + +/////////////////////////////////////////////////////////// +// TListini_haba_app +/////////////////////////////////////////////////////////// + +class TListini_haba_app: public TSkeleton_application +{ +protected: + virtual bool check_autorization() const {return false;} + virtual const char * extra_modules() const {return "cg";} + + virtual void main_loop(); + + void elabora(); +}; + +void TListini_haba_app::elabora() +{ +} + +void TListini_haba_app::main_loop() +{ + TListini_haba_msk m; + bool running = true; + + while(m.run() == K_ENTER) + { + elabora(); + } +} + +int pd6411100(int argc, char* argv[]) +{ + TListini_haba_app app; + app.run(argc, argv, TR("Listini Haba piastre")); + return 0; +} diff --git a/ps/pd6411100a.h b/ps/pd6411100a.h new file mode 100755 index 000000000..5ade4ac64 --- /dev/null +++ b/ps/pd6411100a.h @@ -0,0 +1,13 @@ +//Definizione campi per maschera pd6411 - Gestione Materiali spessore categoria +#define F_GRUPPO 201 +#define F_MESE 202 +#define F_CODVAL 203 +#define F_DESVAL 204 +#define F_CAMBIO 205 +#define F_SHEET 206 + +#define S_GRUPPO 101 +#define S_MESE 102 +#define S_SPESSORE 103 +#define S_IMPEURO 104 +#define S_IMPFRANCO 105 \ No newline at end of file diff --git a/ps/pd6411100a.uml b/ps/pd6411100a.uml new file mode 100755 index 000000000..09489b4af --- /dev/null +++ b/ps/pd6411100a.uml @@ -0,0 +1,157 @@ +#include "pd6411100a.h" + +TOOLBAR "" 0 0 0 2 + +BUTTON DLG_SAVEREC +BEGIN + PROMPT 1 1 "Salva" + PICTURE TOOL_SAVEREC +END + +BUTTON DLG_CANCEL +BEGIN + PROMPT 1 1 "Annulla" + PICTURE TOOL_CANCEL +END + +#include + +ENDPAGE + +PAGE "Gestione Listini" -1 -1 80 0 + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 1 1 "@bParametri filtro" +END + +STRING F_GRUPPO 5 +BEGIN + PROMPT 2 2 "Gruppo " + USE GMC + INPUT CODTAB F_GRUPPO + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_GRUPPO CODTAB + CHECKTYPE REQUIRED +END + +LIST F_MESE 15 +BEGIN + PROMPT 25 2 "Mese " + FLAGS "AM" +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 4 "@bParametri per il cambio" +END + +STRING F_CODVAL 3 +BEGIN + PROMPT 2 5 "Valuta " + FIELD CODTAB + FLAGS "UZ" + KEY 1 + USE %VAL + INPUT CODTAB F_CODVAL + DISPLAY "Codice" CODTAB + DISPLAY "Valuta@50" S0 + OUTPUT F_CODVAL CODTAB + OUTPUT F_DESVAL S0 + OUTPUT F_CAMBIO S4 + HELP "Codice della valuta" + CHECKTYPE REQUIRED +END + +STRING F_DESVAL 50 +BEGIN + PROMPT 15 5 "" + FIELD S0 + KEY 2 + USE %VAL KEY 2 + INPUT S0 F_DESVAL + DISPLAY "Valuta@60" S0 + DISPLAY "Codice@10" CODTAB + COPY OUTPUT F_CODVAL + HELP "Descrizione della valuta" + CHECKTYPE REQUIRED + WARNING "Manca la descrizione" +END + + +NUMBER F_CAMBIO 15 5 +BEGIN + PROMPT 2 6 "Cambio " + FIELD S4 + FLAGS "U" + CHECKTYPE REQUIRED + WARINING "E' necessario specificare un cambio di riferimento" +END + +SPREADSHEET F_SHEET +BEGIN + PROMPT 2 8 "" + ITEM "Gruppo" + ITEM "Mese" + ITEM "Spessore" + ITEM "Importo\nEuro" + ITEM "Importo\nFranco" +END + +ENDPAGE +ENDMASK + +PAGE "Riga listino" -1 -1 78 13 + +STRING S_GRUPPO 5 +BEGIN + PROMPT 2 2 "Gruppo " + FLAGS "D" +END + +LIST S_MESE 15 +BEGIN + PROMPT 25 2 "Mese " + FLAGS "MD" +END + +NUMBER S_SPESSORE 6 +BEGIN + PROMPT 55 2 "Spessore " + CHECKTYPE REQUIRED +END + +CURRENCY S_IMPEURO +BEGIN + PROMPT 2 3 "Imp. in Euro " +END + +CURRENCY S_IMPFRANCO +BEGIN + PROMPT 36 3 "Imp. in Franchi " + DRIVENBY -F_CODVAL +END + +ENDPAGE + +TOOLBAR "" 0 0 0 2 + +BUTTON DLG_OK 2 2 +BEGIN + PROMPT 1 1 "" +END + +BUTTON DLG_DELREC 2 2 +BEGIN + PROMPT 2 1 "Elimina" + PICTURE BMP_DELREC +END + +BUTTON DLG_CANCEL 2 2 +BEGIN + PROMPT 3 1 "" +END + +ENDPAGE +ENDMASK \ No newline at end of file