diff --git a/sc/sc1.cpp b/sc/sc1.cpp index 43d901aa2..1fc7c689c 100755 --- a/sc/sc1.cpp +++ b/sc/sc1.cpp @@ -11,6 +11,8 @@ int main(int argc,char** argv) { case 1: sc1200(argc,argv); break; + case 2: + sc1300(argc,argv); break; default: sc1100(argc,argv); break; } diff --git a/sc/sc1.h b/sc/sc1.h index 2a0bb571d..2232523b3 100755 --- a/sc/sc1.h +++ b/sc/sc1.h @@ -1,3 +1,4 @@ int sc1100(int argc, char** argv); int sc1200(int argc, char** argv); +int sc1300(int argc, char** argv); diff --git a/sc/sc1.url b/sc/sc1.url index 91afa033f..a9ce52300 100755 --- a/sc/sc1.url +++ b/sc/sc1.url @@ -8,3 +8,10 @@ MENUBAR MENU_BAR(1) MENU MENU_BAR(1) SUBMENU MENU_FILE "~File" +MENUBAR MENU_BAR(2) + +MENU MENU_BAR(2) + SUBMENU MENU_FILE "~File" + + + diff --git a/sc/sc1300.cpp b/sc/sc1300.cpp new file mode 100755 index 000000000..1d83a2fa1 --- /dev/null +++ b/sc/sc1300.cpp @@ -0,0 +1,121 @@ +#include <mask.h> +#include <relapp.h> + +#include "sc1.h" +#include "sc1300a.h" + +class SollecitiStorici_app : public TRelation_application +{ + TMask* _msk; + TRelation* _rel; + +protected: + + virtual TMask* get_mask(int mode) { return _msk;} + virtual bool changing_mask(int mode) { return FALSE;} + virtual TRelation* get_relation() const { return _rel;} + virtual bool user_create() ; + virtual bool user_destroy() ; + virtual int write(const TMask& m); + + static bool zap_handler(TMask_field& f, KEY k); + + static SollecitiStorici_app& app() + { return (SollecitiStorici_app&)main_app();} + +public: + + void zap_cliente(const char* c); + + SollecitiStorici_app() {} + virtual ~SollecitiStorici_app() {} +}; + + +bool SollecitiStorici_app::user_create() +{ + _rel = new TRelation(LF_STOSOLL); + _msk = new TMask("sc1300a"); + + _msk->set_handler(F_ZAP, zap_handler); + set_search_field(F_TIPO); + + return TRUE; +} + +bool SollecitiStorici_app::user_destroy() +{ + delete _rel; + delete _msk; + + return TRUE; +} + +bool SollecitiStorici_app::zap_handler(TMask_field& f, KEY k) +{ + if (k == K_SPACE && !f.mask().get(F_CODICE).empty()) + { + if (yesno_box("Si desidera azzerare l'archivio solleciti per " + "il cliente %s?", (const char*)f.mask().get(F_DESCR))) + { + app().zap_cliente(f.mask().get(F_CODICE)); + f.mask().stop_run(K_ESC); + } + } + return TRUE; +} + + +void SollecitiStorici_app::zap_cliente(const char* cod) +{ + TLocalisamfile& sr = _rel->lfile(); + sr.zero(); sr.put("CODICE", cod); + int err = NOERR; + + for (err = sr.read(_isgteq); + err == NOERR && sr.get("CODICE") == cod; + err = sr.next()) + sr.remove(); +} + + +int SollecitiStorici_app::write(const TMask& m) +{ + TLocalisamfile& sr = _rel->lfile(); + _rel->save_status(); + + sr.zero(); sr.put("CODICE", m.get(F_CODICE)); + int err = NOERR; + bool ok = TRUE; + + TDate data; + TDate dmsk(m.get(F_DATA)); + + for (err = sr.read(_isgteq); + err == NOERR && sr.get("CODICE") == m.get(F_CODICE); + err = sr.next()) + { + int tipo = sr.get_int("TIPO"); + data = sr.get_date("DATASPED"); + + if (tipo >= m.get_int(F_TIPO) && data <= dmsk) + { + error_box("Sollecito di grado inferiore ad uno precedente (%s, grado %d)", + (const char*)data.string(), tipo); + ok = FALSE; + break; + } + } + _rel->restore_status(); + + if (ok) return TRelation_application::write(m); + + return ok; +} + +int sc1300(int argc, char** argv) +{ + SollecitiStorici_app a; + a.run(argc, argv, "Archivio Storico Solleciti"); + return 0; +} \ No newline at end of file diff --git a/sc/sc1300a.h b/sc/sc1300a.h new file mode 100755 index 000000000..31eb71265 --- /dev/null +++ b/sc/sc1300a.h @@ -0,0 +1,6 @@ +#define F_CODICE 101 +#define F_DESCR 102 +#define F_TIPO 103 +#define F_DATA 104 +#define F_SALDO 105 +#define F_ZAP 106 \ No newline at end of file diff --git a/sc/sc1300a.uml b/sc/sc1300a.uml new file mode 100755 index 000000000..5c015f821 --- /dev/null +++ b/sc/sc1300a.uml @@ -0,0 +1,126 @@ +#include "sc1300a.h" + +TOOLBAR "" 0 20 0 2 + +// #include <toolbar.h> + +BUTTON DLG_SAVEREC 8 2 +BEGIN +PROMPT -17 -1 "~Registra" +MESSAGE EXIT,K_SAVE +END + +BUTTON DLG_NEWREC 8 2 +BEGIN +PROMPT -27 -1 "~Nuovo" +MESSAGE EXIT,K_INS +END + +BUTTON DLG_DELREC 8 2 +BEGIN +PROMPT -37 -1 "~Elimina" +MESSAGE EXIT,K_DEL +END + +BUTTON DLG_FINDREC 8 2 +BEGIN +PROMPT -47 -1 "Ri~cerca" +MESSAGE EXIT,K_F9 +END + +BUTTON DLG_CANCEL 8 2 +BEGIN +PROMPT -57 -1 "" +MESSAGE EXIT,K_ESC +END + +BUTTON DLG_QUIT 8 2 +BEGIN +PROMPT -67 -1 "" +MESSAGE EXIT,K_QUIT +END + +BUTTON F_ZAP 10 2 +BEGIN +PROMPT -77 -1 "Canc. Tutti" +END + +ENDPAGE + +PAGE "Archivio Storico Solleciti" -1 -1 78 8 + +STRING F_CODICE 5 +BEGIN + PROMPT 4 2 "Codice " + HELP "Codice del cliente" + FIELD LF_STOSOLL->CODICE + FLAGS "UR" + KEY 1 + USE LF_CLIFO KEY 1 + INPUT TIPOCF "C" + INPUT CODCF F_CODICE + DISPLAY "Codice" CODCF + DISPLAY "Ragione sociale @30" RAGSOC[1,30] + DISPLAY "Localita @30" LOCALITACF[1,30] + OUTPUT F_CODICE CODCF + OUTPUT F_DESCR RAGSOC + CHECKTYPE REQUIRED +END + +STRING F_DESCR 50 +BEGIN + PROMPT 4 4 "Ragione sociale " + HELP "Ragione sociale del cliente" + USE LF_CLIFO KEY 2 + INPUT TIPOCF "C" + INPUT RAGSOC F_DESCR + DISPLAY "Ragione sociale @30" RAGSOC[1,30] + DISPLAY "Codice" CODCF + DISPLAY "Localita @30" LOCALITACF[1,30] + OUTPUT F_CODICE CODCF + OUTPUT F_DESCR RAGSOC + CHECKTYPE REQUIRED +END + + +NUMBER F_TIPO 2 +BEGIN + PROMPT 4 6 "Grado sollecito " + USE LF_STOSOLL + INPUT CODICE F_CODICE + INPUT TIPO F_TIPO + DISPLAY "Codice" CODICE + DISPLAY "Grado" TIPO + DISPLAY "Data@10" DATASPED + DISPLAY "Saldo@15" SALDO + OUTPUT F_CODICE CODICE + OUTPUT F_DATA DATASPED + OUTPUT F_SALDO SALDO + OUTPUT F_TIPO TIPO + HELP "Numero di solleciti gia' inviati" + FIELD TIPO + KEY 1 + CHECKTYPE REQUIRED + WARNING "Grado sollecito obbligatorio" + FLAGS "U" +END + +DATE F_DATA +BEGIN + PROMPT 4 8 "Data invio sollecito " + HELP "Data di spedizione sollecito" + FIELD LF_STOSOLL->DATASPED + FLAGS "A" +END + +NUMBER F_SALDO 15 +BEGIN + PROMPT 4 10 "Importo totale " + HELP "Ammontare del saldo al momento del sollecito" + FLAGS "R" + PICTURE "." + FIELD LF_STOSOLL->SALDO +END + +ENDPAGE +ENDMASK