From 62f1c903faa43a9412b27bffb2f93b4ca9bf79cc Mon Sep 17 00:00:00 2001 From: luca Date: Mon, 18 Sep 2006 14:36:45 +0000 Subject: [PATCH] Patch level :4.0 490 Files correlati :ca3.exe Ricompilazione Demo : [ ] Commento :stampa bilancio di commessa per esercizio pronta ad essere testata git-svn-id: svn://10.65.10.50/trunk@14329 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ca/ca3800.cpp | 79 ++++++++++++++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 35 deletions(-) diff --git a/ca/ca3800.cpp b/ca/ca3800.cpp index ed3a57455..24899745c 100755 --- a/ca/ca3800.cpp +++ b/ca/ca3800.cpp @@ -261,6 +261,8 @@ protected: virtual const TVariant& get(const char* column_name) const; void parse_bill(const TString& bill, TString& gruppo, TString& conto) const; + int estrai_saldi(const TRecordset& saldana, const int indbil, + TImporto& saldo, TImporto& saldop) const; void aggiorna_importo(TAssoc_array& riga_array, const TString& livello, const int indbil, const TRecordset& saldana, const bool inverti = false) const; TAssoc_array& get_row(TAssoc_array& cms, const char* chiave, @@ -296,6 +298,38 @@ void TPrint_bilancio_cms_recordset::parse_bill(const TString& bill, TString& gru conto = bill.mid(prefix_len, gruppo_len + conto_len); } + +int TPrint_bilancio_cms_recordset::estrai_saldi(const TRecordset& saldana, const int indbil, + TImporto& saldo, TImporto& saldop) const +{ + int flag = 0; + + if (_tipostima == 'C' && indbil == 3) + { + const TImporto imp_saldo(saldana.get(SALDANA_SEZIONE).as_string()[0], + saldana.get(SALDANA_SALDO).as_real()); + saldo = imp_saldo; + flag |= saldo.is_zero() ? 0 : 1; + } + else + saldo.reset(); + + if (_tipostima == 'T' || (_tipostima == 'C' && indbil == 4)) //stima Tempo o (Costi e indbil=ricavo) + { + const TImporto imp_saldop(saldana.get(SALDANA_SEZIONEP).as_string()[0], + saldana.get(SALDANA_SALDOP).as_real()); + const TImporto imp_saldov(saldana.get(SALDANA_SEZIONEV).as_string()[0], + saldana.get(SALDANA_SALDOV).as_real()); + saldop = imp_saldop; + saldop += imp_saldov; + flag |= saldop.is_zero() ? 0 : 2; + } + else + saldop.reset(); + + return flag; +} + void TPrint_bilancio_cms_recordset::aggiorna_importo(TAssoc_array& riga_array, const TString& livello, const int indbil, const TRecordset& saldana, const bool inverti) const { @@ -312,33 +346,16 @@ void TPrint_bilancio_cms_recordset::aggiorna_importo(TAssoc_array& riga_array, //ci sono tutti i tipi di saldo, ma solo quelli che rientrano nei parametri iniziali.. //..verranno considerati (_tipostima,indbil) - const TImporto imp_saldo(saldana.get(SALDANA_SEZIONE).as_string()[0], - saldana.get(SALDANA_SALDO).as_real()); - const TImporto imp_saldop(saldana.get(SALDANA_SEZIONEP).as_string()[0], - saldana.get(SALDANA_SALDOP).as_real()); - const TImporto imp_saldov(saldana.get(SALDANA_SEZIONEV).as_string()[0], - saldana.get(SALDANA_SALDOV).as_real()); + TImporto imp_saldo, imp_saldop; + estrai_saldi(saldana, indbil, imp_saldo, imp_saldop); - if (inverti) + if (inverti) // Devo sottrarre l'importo = gli scambio la sezione { - if (_tipostima == 'C' && indbil == 3) //stima Costi e indbil=Costo - imp -= imp_saldo; - if (_tipostima == 'T' || (_tipostima == 'C' && indbil == 4)) //stima Tempo o (Costi e indbil=ricavo) - { - imp -= imp_saldop; - imp -= imp_saldov; - } - } - else - { - if (_tipostima == 'C' && indbil == 3) - imp += imp_saldo; - if (_tipostima == 'T' || (_tipostima == 'C' && indbil == 4)) - { - imp += imp_saldop; - imp += imp_saldov; - } + imp_saldo.swap_section(); + imp_saldop.swap_section(); } + imp += imp_saldo; + imp += imp_saldop; imp.normalize(sezione); *str_imp = imp.valore().string(); @@ -411,17 +428,9 @@ void TPrint_bilancio_cms_recordset::requery() //solo i Costi(3) ed i Ricavi(4) devono essere considerati per la stampa if (indbil == 3 || indbil == 4) { - //solo i record con saldi non nulli devono essere considerati - const bool has_saldop = (saldana.get(SALDANA_SALDOP).as_real() + - saldana.get(SALDANA_SALDOV).as_real()) != ZERO; - const bool has_saldo = saldana.get(SALDANA_SALDO).as_real() != ZERO; - - //se stima per Tempo -> usa solo saldop e saldov - //se stima per Costi -> se costi -> usa solo saldo - //se stima per Costi -> se ricavi -> usa solo saldop e saldov - if ((_tipostima == 'T' && has_saldop)|| - (_tipostima == 'C' && indbil == 3 && has_saldo)|| - (_tipostima == 'C' && indbil == 4 && has_saldop)) + TImporto saldo, saldop; + const int flag = estrai_saldi(saldana, indbil, saldo, saldop); + if (flag != 0) { const TString& codcms = saldana.get(SALDANA_COMMESSA).as_string(); const TString& fase = saldana.get(SALDANA_FASE).as_string();