From 28bc6659d7635389f85e5e42074b45a96a976e85 Mon Sep 17 00:00:00 2001 From: guy Date: Tue, 4 May 2010 14:06:27 +0000 Subject: [PATCH] Patch level : 10.0 Files correlati : ps1001300a.msk ps1001.exe Ricompilazione Demo : [ ] Commento : Migliorata gestione abilitazione bottoni di salvataggio e modifica git-svn-id: svn://10.65.10.50/trunk@20424 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ps/ps1001.cpp | 10 +-- ps/ps1001200.cpp | 2 +- ps/ps1001300.cpp | 183 +++++++++++++++++++++------------------------- ps/ps1001300a.uml | 45 ++++++------ 4 files changed, 111 insertions(+), 129 deletions(-) diff --git a/ps/ps1001.cpp b/ps/ps1001.cpp index 98d1629a1..e06a7b849 100755 --- a/ps/ps1001.cpp +++ b/ps/ps1001.cpp @@ -7,12 +7,10 @@ int main(int argc, char** argv) int n = argc > 1 ? atoi(argv[1]+1) : 0; switch(n) { - case 0: ps1001100(argc, argv); break; //Importazione movimento di analitica da righe in *.csv (DINAMICA) - case 1: ps1001200(argc, argv); break; //Importazione di N movimenti analitici di preventivo in *.csv (CRPA e DINAMICA) - case 2: ps1001300(argc,argv); break; //Gestione budget (CRPA e DINAMICA) - default: - ps1001100(argc, argv); break; + case 0: ps1001100(argc, argv); break; //Importazione movimento di analitica da righe in *.csv (DINAMICA) + case 1: ps1001200(argc, argv); break; //Importazione di N movimenti analitici di preventivo in *.csv (CRPA e DINAMICA) + case 2: ps1001300(argc, argv); break; //Gestione budget (CRPA e DINAMICA) + default: ps1001100(argc, argv); break; } - exit(0); return 0; } \ No newline at end of file diff --git a/ps/ps1001200.cpp b/ps/ps1001200.cpp index d79632b36..413f69ef2 100755 --- a/ps/ps1001200.cpp +++ b/ps/ps1001200.cpp @@ -456,7 +456,7 @@ void TBudget_Import::elabora_input(const TFilename& file, TLog_report& log) //..e gli elementi sono array con le righe del file di input (con la stessa key ma fase\conto etc. diversi) while (_trasfile->read(curr) == NOERR) { - pi.setstatus(_trasfile->read_file()->tellg()); + pi.setstatus((size_t)_trasfile->read_file()->tellg()); codcms = curr.get(0); codcms.replace('_', '/'); diff --git a/ps/ps1001300.cpp b/ps/ps1001300.cpp index 2b529fc4f..7494d9c8d 100755 --- a/ps/ps1001300.cpp +++ b/ps/ps1001300.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include "../ca/calib01.h" @@ -19,7 +18,7 @@ // Metodi static di ordinamento /////////////////////////////////// //ordina per numreg/numrig (long+int) oppure per numreg/datacomp/autofcomp/datafcomp -static int compare_by_numrig(TSheet_field & s, int r1, int r2) +static int compare_by_numrig(TSheet_field& s, int r1, int r2) { TToken_string& s1 = s.row(r1); TToken_string& s2 = s.row(r2); @@ -29,7 +28,6 @@ static int compare_by_numrig(TSheet_field & s, int r1, int r2) const long b11 = s1.get_long(numreg_pos); const long b21 = s2.get_long(numreg_pos); int cmp = b11 - b21; - if (cmp == 0) { @@ -102,6 +100,7 @@ class TVariazione_budget_mask : public TAutomask protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + void set_status(bool edit); int load(); //(costruttore e on_field) carica i dati per riempire lo sheet @@ -127,11 +126,11 @@ public: ~TVariazione_budget_mask(); }; -TVariazione_budget_mask::TVariazione_budget_mask() :TAutomask ("ps1001300a") +TVariazione_budget_mask::TVariazione_budget_mask() : TAutomask ("ps1001300a") { //carica la causale che trova nel ditta.ini TConfig ditta_ini(CONFIG_DITTA, "ps1001"); - set(F_CODCAUS, ditta_ini.get("CodCaus")); + set(F_CODCAUS, ditta_ini.get("CodCaus"), 0x3); //setta le posizioni dei campi dello sheet TSheet_field& sf_righe = sfield(F_RIGHE); @@ -163,7 +162,7 @@ TVariazione_budget_mask::~TVariazione_budget_mask() void TVariazione_budget_mask::build_key(int i, TToken_string& key) { TSheet_field& sf_righe = sfield(F_RIGHE); - TToken_string curr_riga = sf_righe.row(i); + TToken_string& curr_riga = sf_righe.row(i); //chiave della riga sorella originale key.cut(0); key.add(curr_riga.get(_pos_cdc)); @@ -175,7 +174,7 @@ void TVariazione_budget_mask::build_key(int i, TToken_string& key) void TVariazione_budget_mask::build_key_by_numreg(int i, TToken_string& key) { TSheet_field& sf_righe = sfield(F_RIGHE); - TToken_string curr_riga = sf_righe.row(i); + TToken_string& curr_riga = sf_righe.row(i); //chiave della riga sorella originale key.cut(0); key.add(curr_riga.get(_pos_numreg)); @@ -202,33 +201,33 @@ int TVariazione_budget_mask::find_sister_rows(const int curr_sister, int& first_ TToken_string key_iesima; - for (int i = curr_sister - 1; i >= 0; i--) - { - if (by_numreg) - build_key_by_numreg(i, key_iesima); - else - build_key(i, key_iesima); + for (int i = curr_sister - 1; i >= 0; i--) + { + if (by_numreg) + build_key_by_numreg(i, key_iesima); + else + build_key(i, key_iesima); - if (key == key_iesima) - first_sister = i; - else - break; - } + if (key == key_iesima) + first_sister = i; + else + break; + } - TSheet_field& sf_righe = sfield(F_RIGHE); - const long items = sf_righe.items(); - for (int i = curr_sister + 1; i < items; i++) - { - if (by_numreg) - build_key_by_numreg(i, key_iesima); - else - build_key(i, key_iesima); + TSheet_field& sf_righe = sfield(F_RIGHE); + const long items = sf_righe.items(); + for (int i = curr_sister + 1; i < items; i++) + { + if (by_numreg) + build_key_by_numreg(i, key_iesima); + else + build_key(i, key_iesima); - if (key == key_iesima) - last_sister = i; - else - break; - } + if (key == key_iesima) + last_sister = i; + else + break; + } return last_sister - first_sister + 1; } @@ -237,30 +236,49 @@ int TVariazione_budget_mask::find_sister_rows(const int curr_sister, int& first_ void TVariazione_budget_mask::sistema_date_cms(TDate& datainicms, TDate& datafinecms) { datainicms = get_date(F_DATAINICMS); - datafinecms = get_date(F_DATAPRORCMS); - if (!datafinecms.ok()) + const bool pro = get_bool(F_PROROGATA); + if (pro) + datafinecms = get_date(F_DATAPRORCMS); + if (!pro || !datafinecms.ok()) datafinecms = get_date(F_DATAFINECMS); } +void TVariazione_budget_mask::set_status(bool edit) +{ + enable(-3, edit); + enable(DLG_CANCEL, edit); + enable(DLG_QUIT, !edit); + + enable(F_CODCMS, !edit); + enable(F_DESCRIZ, !edit); + + xvtil_statbar_set(edit ? TR("Modifica") : TR("Selezione")); +} + bool TVariazione_budget_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { //maschera case F_CODCMS: - if (e == fe_modify) - { - bool e = load() == 0; - o.enable(e); - enable(F_DESCRIZ, e); - } + if (e == fe_init) + set_status(false); + if (e == fe_modify) + set_status(!o.empty() && load() > 0); break; case F_DATAINICMS: case F_DATAFINECMS: _dirty = true; break; - - //sheet + //sheet + case F_RIGHE: + switch (e) + { + case se_query_add: return field(DLG_CANCEL).enabled(); + case se_query_del: return false; + default: break; + } + break; case S_CHECK: if (e == fe_modify) { @@ -282,13 +300,12 @@ bool TVariazione_budget_mask::on_field_event(TOperable_field& o, TField_event e, const TDate datacomp = o.get(); if (datacomp < datainicms || (datafinecms.ok() && datacomp > datafinecms)) return error_box("La data competenza deve rientrare nella durata della commessa!"); + _dirty = true; } - _dirty = true; break; case S_DATAFCOMP: if (e == fe_modify) { - const TDate datafcomp = o.get(); if (datafcomp.ok()) { @@ -313,7 +330,6 @@ bool TVariazione_budget_mask::on_field_event(TOperable_field& o, TField_event e, _dirty = true; } break; - case S_SO: if (e == fe_init) { @@ -354,24 +370,20 @@ bool TVariazione_budget_mask::on_field_event(TOperable_field& o, TField_event e, case DLG_CANCEL: if (e == fe_button && jolly == 0) //jolly serve per specificare che è il DLG_CANCEL della maschera principale { - if (_dirty) + if (_dirty && yesno_box("Salvare le modifiche effettuate?")) { - if (yesno_box("Salvare le modifiche effettuate?")) - if (!save()) //attenzione! se la save non riesce si deve fermare senza resettare le modifiche! - return false; + //attenzione! se la save non riesce si deve fermare senza resettare le modifiche! + if (!check_fields() || !save()) + return false; } - enable(F_CODCMS); - enable(F_DESCRIZ); sfield(F_RIGHE).destroy(); - + set_status(false); return false; } break; case DLG_CHECKALL: if (e == fe_button) - { check_all(!one_checked()); - } break; case DLG_TODATAINI: if (e == fe_button) @@ -380,7 +392,7 @@ bool TVariazione_budget_mask::on_field_event(TOperable_field& o, TField_event e, TSheet_field& sf_righe = sfield(F_RIGHE); FOR_EACH_SHEET_ROW(sf_righe, i, riga) if (riga->get_char(0) > ' ') //solo le righe checked!! riga->add(datainicms, _pos_datacomp); - + _dirty = true; sf_righe.force_update(); } break; @@ -393,7 +405,7 @@ bool TVariazione_budget_mask::on_field_event(TOperable_field& o, TField_event e, TSheet_field& sf_righe = sfield(F_RIGHE); FOR_EACH_SHEET_ROW(sf_righe, i, riga) if (riga->get_char(0) > ' ') //solo le righe checked!! riga->add(datafinecms, _pos_datafcomp); - + _dirty = true; sf_righe.force_update(); } break; @@ -456,16 +468,13 @@ bool TVariazione_budget_mask::on_field_event(TOperable_field& o, TField_event e, //al termine deve aggiornare la colonna con i preventivi aggiorna_saldi_preventivi(sf_righe, i); } - - sf_righe.force_update(); _dirty = true; + sf_righe.force_update(); } break; case DLG_SAVEREC: if (e == fe_button && check_fields()) - { - const bool saved = save(); - } + save(); break; default: break; @@ -484,10 +493,10 @@ bool TVariazione_budget_mask::save_commessa() int err = commesse.read(_isequal, _lock); if (err == NOERR) { - commesse.put(COMMESSE_DATAINIZIO, get_date(F_DATAINICMS)); - commesse.put(COMMESSE_DATAFINE, get_date(F_DATAFINECMS)); - commesse.put(COMMESSE_PROROGA, get_bool(F_PROROGATA)); - commesse.put(COMMESSE_DATAPROR, get_date(F_DATAPRORCMS)); + commesse.put(COMMESSE_DATAINIZIO, get(F_DATAINICMS)); + commesse.put(COMMESSE_DATAFINE, get(F_DATAFINECMS)); + commesse.put(COMMESSE_PROROGA, get_bool(F_PROROGATA)); + commesse.put(COMMESSE_DATAPROR, get(F_DATAPRORCMS)); //solo la rewrite perchè la commessa ovviamente esiste già err = commesse.rewrite(); } @@ -658,10 +667,8 @@ bool TVariazione_budget_mask::save_sheet() FOR_EACH_SHEET_ROW(sf_righe, r, riga) { const long numreg = sf_righe.row(r).get_long(_pos_numreg); - if (numreg > 0) r = modifica_movana(numreg, sf_righe, r); - } //FOR_EACH_SHEET_ROW(... //riordina lo sheet per chiave numreg; in questo modo le righe senza numreg vanno all'inizio e vengono.. @@ -679,11 +686,10 @@ bool TVariazione_budget_mask::save_sheet() break; n = crea_movana(sf_righe, n); - } //FOR_EACH_SHEET_ROW(sf_righe,n... //le righe vanno rimesse in ordine di chiave cdc/fase/conto - load(); + set_status(load() > 0); return true; } @@ -705,7 +711,6 @@ bool TVariazione_budget_mask::save() bool TVariazione_budget_mask::one_checked() const { TSheet_field& sf_righe = sfield(F_RIGHE); - FOR_EACH_SHEET_ROW(sf_righe, i, riga) { if (riga->get_char(0) > ' ') @@ -762,11 +767,11 @@ int TVariazione_budget_mask::load() query << "TO CODCMS=#CODCMS\n"; //instanzio un TISAM_recordset sulle rmovana TISAM_recordset rmovana(query); - const TString cms = get(F_CODCMS); + const TString& cms = get(F_CODCMS); rmovana.set_var("#CODCMS", cms); const long rmovana_items = rmovana.items(); - TProgind pi(rmovana_items, "Generazione righe in corso...", true, true); + TProgind pi(rmovana_items, TR("Caricamento righe..."), true, true); //recupero sheet e realtiva mashera di riga TSheet_field& sf_righe = sfield(F_RIGHE); @@ -842,10 +847,8 @@ int TVariazione_budget_mask::load() { //solo le righe a saldo preventivo nullo vanno considerate const TString& str_saldo_prev = riga->get(_pos_prev); - if (str_saldo_prev == "") - { + if (str_saldo_prev.blank()) aggiorna_saldi_preventivi(sf_righe, i); - } } //e poi aggiorna il video! @@ -862,38 +865,16 @@ int TVariazione_budget_mask::load() /////////////////////////////////////// class TVariazione_budget : public TSkeleton_application { - virtual bool check_autorization() const { return false; } - virtual const char * extra_modules() const { return "ca"; } - - TVariazione_budget_mask* _msk; - protected: - -public: - virtual bool create(); - virtual bool destroy(); + virtual bool check_autorization() const { return false; } + virtual const char* extra_modules() const { return "ca"; } virtual void main_loop(); - - TVariazione_budget() {}; }; - -bool TVariazione_budget::create() -{ - _msk = new TVariazione_budget_mask(); - return TSkeleton_application::create(); -} - -bool TVariazione_budget::destroy() -{ - delete _msk; - return TApplication::destroy(); -} - void TVariazione_budget::main_loop() { - KEY tasto; - tasto = _msk->run(); + TVariazione_budget_mask msk; + msk.run(); } int ps1001300 (int argc, char* argv[]) @@ -901,4 +882,4 @@ int ps1001300 (int argc, char* argv[]) TVariazione_budget main_app; main_app.run(argc, argv, TR("Gestione budget per commessa")); return true; -} \ No newline at end of file +} diff --git a/ps/ps1001300a.uml b/ps/ps1001300a.uml index 365bc420b..25aa5bfd5 100755 --- a/ps/ps1001300a.uml +++ b/ps/ps1001300a.uml @@ -6,6 +6,7 @@ BUTTON DLG_SAVEREC 2 2 BEGIN PROMPT 1 1 "~Salva" PICTURE TOOL_SAVEREC + GROUP 3 END BUTTON DLG_NULL 4 2 @@ -18,6 +19,7 @@ BUTTON DLG_CHECKALL 2 2 BEGIN PROMPT 3 1 "~Tutti" PICTURE TOOL_MULTISEL + GROUP 3 END BUTTON DLG_NULL @@ -30,24 +32,21 @@ BUTTON DLG_TODATAINI BEGIN PROMPT 5 1 "All.~Ini" PICTURE TOOL_TODATAINI + GROUP 3 END BUTTON DLG_TODATAFIN BEGIN PROMPT 6 1 "All.~Fin" PICTURE TOOL_TODATAFIN + GROUP 3 END BUTTON DLG_TOMATURATO BEGIN PROMPT 7 1 "All.~Mat" PICTURE TOOL_TOCALC -END - -BUTTON DLG_NULL -BEGIN - PROMPT 8 1 "" - PICTURE 0 + GROUP 3 END #include @@ -91,24 +90,28 @@ END DATE F_DATAINICMS BEGIN PROMPT 1 2 "Inizio " + GROUP 3 END DATE F_DATAFINECMS BEGIN PROMPT 22 2 "Fine " + GROUP 3 END BOOL F_PROROGATA BEGIN PROMPT 43 2 "Prorogata" - MESSAGE FALSE CLEAR,F_DATAPRORCMS - MESSAGE TRUE ENABLE,F_DATAPRORCMS + MESSAGE FALSE HIDE,F_DATAPRORCMS + MESSAGE TRUE SHOW,F_DATAPRORCMS + GROUP 3 END DATE F_DATAPRORCMS BEGIN PROMPT 57 2 "Proroga " CHECKTYPE REQUIRED + GROUP 3 END GROUPBOX DLG_NULL 78 3 @@ -126,7 +129,7 @@ END STRINGA F_CODCAUS 3 BEGIN PROMPT 24 5 "Causale " - USE LF_CAUSALI SELECT MOVIND!='' + USE LF_CAUSALI SELECT MOVIND!="" INPUT CODCAUS F_CODCAUS DISPLAY "Codice" CODCAUS DISPLAY "Descrizione@50" DESCR @@ -147,9 +150,9 @@ BEGIN CHECKTYPE REQUIRED END -TEXT -1 +TEXT DLG_NULL BEGIN - PROMPT 0 7 "@bRighe movimenti di budget" + PROMPT -11 7 "@bRighe movimenti di budget" END SPREADSHEET F_RIGHE @@ -177,52 +180,52 @@ ENDPAGE PAGE "Istruzioni " 0 2 0 0 -TEXT -1 +TEXT DLG_NULL BEGIN PROMPT 1 1 "_ Le date della commessa possono essere modificate." END -TEXT -1 +TEXT DLG_NULL BEGIN PROMPT 1 2 "_ I pulsanti All.Ini, All.Fin, All.Mat hanno effetto solo sulle righe il cui primo campo è spuntato" END -TEXT -1 +TEXT DLG_NULL BEGIN PROMPT 1 3 "_ All.Ini (Allinea all'Inizio) allinea le date di competenza alla data inizio commessa" END -TEXT -1 +TEXT DLG_NULL BEGIN PROMPT 1 4 "_ All.Fin (Allinea alla Fine) allinea le date di fine competenza alla data fine commessa" END -TEXT -1 +TEXT DLG_NULL BEGIN PROMPT 1 5 "_ All.Mat (Allinea al Maturato) modifica gli importi in modo da portare il Preventivo al valore del Maturato" END -TEXT -1 +TEXT DLG_NULL BEGIN PROMPT 1 6 "_ E' possibile modificare manualmente gli importi sulle righe, il Preventivo viene ricalcolato di conseguenza" END -TEXT -1 +TEXT DLG_NULL BEGIN PROMPT 1 7 "_ In fase di registrazione vengono eliminate le righe ad importo nullo (azzerare quindi l'importo se si" END -TEXT -1 +TEXT DLG_NULL BEGIN PROMPT 1 8 " desidera rimuovere una riga)." END -TEXT -1 +TEXT DLG_NULL BEGIN PROMPT 1 9 "_ In fase di registrazione le nuove righe vengono assegnate a nuovi movimenti analitici preventivi" END -TEXT -1 +TEXT DLG_NULL BEGIN PROMPT 1 10 "_ Il pulsante Tutti spunta le righe, una per ogni chiave Sede/Fase/Conto" END