From 78a0c98a3ec9267bf7e8d3d54a16e32bc8539f16 Mon Sep 17 00:00:00 2001 From: luca Date: Mon, 17 May 2010 13:11:45 +0000 Subject: [PATCH] Patch level :10.0 Files correlati : Ricompilazione Demo : [ ] Commento : personalizzazione adolfica in dirittura! manca veramente poco git-svn-id: svn://10.65.10.50/trunk@20457 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ps/ps1001300.cpp | 96 ++++++++++++++++++++++++++++++++++++----------- ps/ps1001300a.uml | 7 +++- 2 files changed, 81 insertions(+), 22 deletions(-) diff --git a/ps/ps1001300.cpp b/ps/ps1001300.cpp index af68c2e15..c26719459 100755 --- a/ps/ps1001300.cpp +++ b/ps/ps1001300.cpp @@ -116,8 +116,8 @@ protected: void set_status(bool edit); int load(); //(costruttore e on_field) carica i dati per riempire lo sheet - int load_rmovana(const TString& cms, const bool include_cms_supp, TSheet_field& sf_righe); //(load()) carica le righe analitiche di preventivo - int load_saldana(const TString& cms, TSheet_field& sf_righe); //(load()) carica le righe di saldo consuntivo + long load_rmovana(const TString& cms, const bool include_cms_supp, TSheet_field& sf_righe); //(load()) carica le righe analitiche di preventivo + int load_saldana(const TString& cms, const long max_numreg, TSheet_field& sf_righe); //(load()) carica le righe di saldo consuntivo TToken_string& add_rmovana(const TRectype& movana, const TRectype& rmovana, TSheet_field& sf_righe); //(load_rmovana()) metodo di basso livello.. //..per caricare fisicamente le righe sullo sheet @@ -544,10 +544,14 @@ int TVariazione_budget_mask::modifica_movana(const long numreg, TSheet_field& sf //giro di controllo sulle date; le righe sheet, eventualmente modificate, devono avere un intervallo date.. //..compatibile con quello del movimento const TDate datacomp = movana.get_date(MOVANA_DATACOMP); - TDate datafcomp = movana.get_date(MOVANA_DATAFCOMP); const bool autofcomp = movana.get_bool(MOVANA_AUTOFCOMP); - if (!datafcomp.ok() && !autofcomp) - datafcomp = datacomp; + TDate datafcomp; + if (!autofcomp) + { + datafcomp = movana.get_date(MOVANA_DATAFCOMP); + if (!datafcomp.ok()) + datafcomp = datacomp; + } //controlla le righe sorelle dello sheet; se le date non rientrano in quelle della testata -> le righe.. //..vanno considerate nuove, e quindi va messo a 0 il loro numreg/numrig @@ -555,11 +559,15 @@ int TVariazione_budget_mask::modifica_movana(const long numreg, TSheet_field& sf for (int i = last; i >= first; i--) { //date testata - const bool r_autofcomp = *sf_righe.cell(i, _pos_autofcomp) > ' '; const TDate r_datacomp = sf_righe.cell(i, _pos_datacomp); - TDate r_datafcomp = sf_righe.cell(i, _pos_datafcomp); - if (!r_datafcomp.ok() && !r_autofcomp) - r_datafcomp = r_datacomp; + const bool r_autofcomp = *sf_righe.cell(i, _pos_autofcomp) > ' '; + TDate r_datafcomp; + if (!r_autofcomp) + { + r_datafcomp = sf_righe.cell(i, _pos_datafcomp); + if (!r_datafcomp.ok()) + r_datafcomp = r_datacomp; + } //importo riga: se nullo la riga verrà eliminata in quanto inutile all'umanità const int r_numrig = atoi(sf_righe.cell(i, _pos_numrig)); @@ -573,17 +581,31 @@ int TVariazione_budget_mask::modifica_movana(const long numreg, TSheet_field& sf sf_righe.row(i).add("", _pos_numreg); sf_righe.row(i).add("", _pos_numrig); } - //elimina la riga dal movana - row_modified |= movana.destroy_row(r_numrig, true); + //elimina la riga dal movana (solo se appartiene al movana, ovvero numrig > 0) + if (r_numrig > 0) + row_modified |= movana.destroy_row(r_numrig, true); } else //qui invece ci vanno le righe modificate che sono solo da riscrivere (importo e/o descr modificate) { - TRectype& rmovana = movana.body()[r_numrig]; + //se la riga non esiste va creata, sennò è proprio lei! + TRectype& rmovana = r_numrig > 0 ? movana.body()[r_numrig] : movana.new_row(); + //se la riga del movimento è nuova vanno riempiti tutti i campi + if (r_numrig <= 0) + { + rmovana.put(RMOVANA_CODCMS, sf_righe.cell(i, _pos_cms)); + rmovana.put(RMOVANA_CODFASE, sf_righe.cell(i, _pos_fase)); + rmovana.put(RMOVANA_CODCCOSTO, sf_righe.cell(i, _pos_cdc)); + rmovana.put(RMOVANA_CODCONTO, sf_righe.cell(i, _pos_conto)); + rmovana.put(RMOVANA_DATACOMP, sf_righe.cell(i, _pos_datacomp)); + } + //importo const real importo = rmovana.get_real(RMOVANA_IMPORTO); if (importo != r_importo) { rmovana.put(RMOVANA_IMPORTO, r_importo); + const char r_sezione = sf_righe.cell(i, _pos_cosric)[0] == 'C' ? 'D' : 'A'; + rmovana.put(RMOVANA_SEZIONE, r_sezione); row_modified = true; } //descrizione @@ -892,7 +914,7 @@ TToken_string& TVariazione_budget_mask::add_rmovana(const TRectype& movana, cons } -int TVariazione_budget_mask::load_rmovana(const TString& cms, const bool include_cms_supp, TSheet_field& sf_righe) +long TVariazione_budget_mask::load_rmovana(const TString& cms, const bool include_cms_supp, TSheet_field& sf_righe) { TString query; query << "USE RMOVANA KEY 4\n"; @@ -913,6 +935,7 @@ int TVariazione_budget_mask::load_rmovana(const TString& cms, const bool include trova_cms_supporto(cms); TAssoc_array numreg_cms; + long max_numreg = 0L; //per ogni riga del recordset va ad aggiornare lo sheet sulla maschera (aggiunge la riga) const TRectype& movana = recset.cursor()->curr(LF_MOVANA); @@ -923,7 +946,11 @@ int TVariazione_budget_mask::load_rmovana(const TString& cms, const bool include break; TToken_string& row = add_rmovana(movana, rmovana, sf_righe); - numreg_cms.add(row.get(_pos_numreg)); + const char* str_numreg = row.get(_pos_numreg); + numreg_cms.add(str_numreg); + const long numreg = atol(str_numreg); + if (numreg > max_numreg) + max_numreg = numreg; } //for(bool ok.move.... @@ -960,11 +987,11 @@ int TVariazione_budget_mask::load_rmovana(const TString& cms, const bool include if (str_saldo_prev.blank()) aggiorna_saldi_preventivi(sf_righe, i); } - return sf_righe.items(); + return max_numreg; } -int TVariazione_budget_mask::load_saldana(const TString& cms, TSheet_field& sf_righe) +int TVariazione_budget_mask::load_saldana(const TString& cms, const long max_numreg, TSheet_field& sf_righe) { //caricamento di tutti i saldi consuntivi che riguardano la commessa //chiave 2 per averli ordinati per conto @@ -1012,6 +1039,29 @@ int TVariazione_budget_mask::load_saldana(const TString& cms, TSheet_field& sf_r } } + //ricava le date da mettere nelle righe generate da saldana e l'eventuale autofcomp + TDate datacomp(TODAY), datafcomp(TODAY); + bool autofcomp = false; + + if (max_numreg > 0) + { + FOR_EACH_SHEET_ROW(sf_righe, r, riga) + { + const long curr_numreg = riga->get_long(_pos_numreg); + if (curr_numreg == max_numreg) + { + const int curr_numrig = riga->get_int(_pos_numrig); + if (curr_numrig > 0) + { + datacomp = riga->get(_pos_datacomp); + datafcomp = riga->get(_pos_datafcomp); + autofcomp = riga->get_char(_pos_autofcomp) > ' '; + break; + } + } + } + } + //per ogni riga dell'assoc_array con conto/cdc/cms/fase/saldo va ad aggiornare lo sheet sulla maschera (aggiunge la riga) FOR_EACH_ASSOC_OBJECT(chiavi_saldana, obj, key, itm) { @@ -1032,9 +1082,11 @@ int TVariazione_budget_mask::load_saldana(const TString& cms, TSheet_field& sf_r row.add(fase, _pos_fase); row.add(conto, _pos_conto); - const TDate oggi(TODAY); - row.add(oggi, _pos_datacomp); - row.add(oggi, _pos_datafcomp); + row.add(datacomp, _pos_datacomp); + row.add(autofcomp ? "X" : "", _pos_autofcomp); + row.add(datafcomp, _pos_datafcomp); + if (autofcomp) + sf_righe.disable_cell(sf_righe.items() - 1, _pos_datafcomp); //costo o ricavo? all'indbil l'ardua sentenza! TAnal_bill bill(conto, cdc, cms, fase); @@ -1049,6 +1101,8 @@ int TVariazione_budget_mask::load_saldana(const TString& cms, TSheet_field& sf_r //aggiunge una descrizione civetta row.add("Riga da saldo", _pos_descr); + //ci mette il max_numreg + row.add(max_numreg, _pos_numreg); //segna il tipo riga come saldo row.add("P", _pos_tipomov); } @@ -1073,10 +1127,10 @@ int TVariazione_budget_mask::load() sf_righe.destroy(); //carica le righe dei movimenti preventivi - const int righe_rmovana = load_rmovana(cms, include_cms_supp, sf_righe); + const long max_numreg = load_rmovana(cms, include_cms_supp, sf_righe); //carica le righe dei saldi consuntivi - const int righe_saldana = load_saldana(cms, sf_righe); + const int righe_saldana = load_saldana(cms, max_numreg, sf_righe); //e poi aggiorna il video! sf_righe.force_update(); diff --git a/ps/ps1001300a.uml b/ps/ps1001300a.uml index 7c61e0ebc..37472adfe 100755 --- a/ps/ps1001300a.uml +++ b/ps/ps1001300a.uml @@ -233,7 +233,12 @@ END TEXT DLG_NULL BEGIN - PROMPT 1 10 "_ Il pulsante Tutti spunta le righe, una per ogni chiave Sede/Fase/Conto" + PROMPT 1 10 "_ In fase di registrazione le righe provenienti da saldi consuntivi vengono assegnate all'ultimo movimento di preventivo" +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 11 "_ Il pulsante Tutti spunta le righe, una per ogni chiave Sede/Fase/Conto" END ENDPAGE