diff --git a/ca/ca1100.alx b/ca/ca1100.alx index 5ccdfefa0..3a570544a 100755 --- a/ca/ca1100.alx +++ b/ca/ca1100.alx @@ -16,6 +16,10 @@ CA_FORMAT_CONTO ; +: MESSAGE_FORMAT_CONTO_DESCR ( -- ) + CA_FORMAT_CONTO_DESCR +; + : MESSAGE_FORMAT_CMSCDC ( -- ) \ da implementare CA_FORMAT_CMSCDC diff --git a/ca/ca1600.cpp b/ca/ca1600.cpp index 486650e6f..5623429a7 100755 --- a/ca/ca1600.cpp +++ b/ca/ca1600.cpp @@ -142,10 +142,13 @@ void TPrint_cms::main_loop() TString codcms; for (short codcms_id = F_DACMS; m.id2pos(codcms_id) > 0; codcms_id++) codcms << m.get(codcms_id); - query << "/n" << "FROM CODCMS='" << codcms << "'"; + if (codcms.full()) //non c'e' bisogno di query.full() x' c'e' gia la USE + query << "/n" << "FROM CODCMS='" << codcms << "'"; + for (short codcms_id = F_ACMS; m.id2pos(codcms_id) > 0; codcms_id++) codcms << m.get(codcms_id); - query << "/n" << "TO CODCMS='" << codcms << "'"; + if (codcms.full()) + query << "/n" << "TO CODCMS='" << codcms << "'"; //cabia la query al report rep.set_recordset(query); diff --git a/ca/ca2300.cpp b/ca/ca2300.cpp index 7e48d01fd..2f8e76e03 100755 --- a/ca/ca2300.cpp +++ b/ca/ca2300.cpp @@ -43,7 +43,7 @@ public: public: void set_annoes(int anno) { _annoes = anno; } - TAnal_mov_ric(long numreg = 0) : TAnal_mov(numreg) {} + TAnal_mov_ric(long numreg = 0) : TAnal_mov(numreg), _annoes(0) {} }; int TAnal_mov_ric::readat(TBaseisamfile& f, TRecnotype nrec, word lockop) @@ -104,7 +104,23 @@ bool TRic_saldi_app::destroy() bool TRic_saldi_app::remove_saldo(const TRelation& rel, void* pJolly) { - ((TRelation &)rel).remove(); + const int anno = *(int*)pJolly; + TRectype& rec = rel.curr(); + const int curr_anno = rec.get_int(SALDANA_ANNO); + //azzeratore dei saldi anno corrente + if (curr_anno == anno) + ((TRelation &)rel).remove(); + else //azzeratore dei preventivi/variazioni di altri anni + { + const real saldop = rec.get_real(SALDANA_SALDOP); + const real saldov = rec.get_real(SALDANA_SALDOV); + if (!saldop.is_zero() || !saldov.is_zero()) + { + rec.zero(SALDANA_SALDOP); + rec.zero(SALDANA_SALDOV); + ((TRelation&)rel).rewrite(); + } + } return true; } @@ -112,21 +128,34 @@ void TRic_saldi_app::main_loop() { while (_mask->run() == K_ENTER) { + //Il ricalcolo saldi e' diviso in 2 fasi: + //1 Azzeramento e ricalcolo dei saldi dei movimenti di tipo normale o temporaneo per il solo anno selezionato + //2 Azzeramento e ricalcolo dei saldi dei movimenti di tipo preventivo o variazione per TUTTI gli esercizi.. + //..questo perche' i movimenti P e T possono essere "spalmati" su piu' anni + + //AZZERAMENTO dei saldi normali e temporanei dell'anno selezionato, preventivi e variazione di tutti.. + //..gli esercizi che trova const int anno = _mask->get_int(F_ANNO); TRelation rel_saldi(LF_SALDANA); - TRectype rec_saldi(rel_saldi.curr()); - rec_saldi.put(SALDANA_ANNO, anno); - TCursor cur_saldi(&rel_saldi, "", 1, &rec_saldi, &rec_saldi); + TCursor cur_saldi(&rel_saldi); const long items_saldi = cur_saldi.items(); - if (items_saldi > 0) - cur_saldi.scan(remove_saldo, this, "Azzeramento saldi..."); + cur_saldi.scan(remove_saldo, (void*)&anno, "Azzeramento saldi..."); + //FASE 1 + //ricostruzione dei saldi normali e temporanei dell'anno selezionato + TEsercizi_contabili esc; + const TDate datainies = esc[anno].inizio(); + const TDate datafines = esc[anno].fine(); TRelation rel_movana(LF_MOVANA); - TString filter; filter.format("ANNOES==%04d", anno); + TRectype darec(LF_MOVANA), arec(LF_MOVANA); + darec.put(MOVANA_DATACOMP, datainies); + arec.put(MOVANA_DATACOMP, datafines); + + TString filter = "(TIPOMOV=='')||(TIPOMOV=='T')"; - TCursor cur_movana(&rel_movana, filter, 1); + TCursor cur_movana(&rel_movana, filter, 2, &darec, &arec); const long items = cur_movana.items(); //usa la scan dei TCursor,quindi niente progind e for,x' gia' nel metodo if (items > 0) @@ -134,26 +163,21 @@ void TRic_saldi_app::main_loop() TAnal_mov_ric* amr = new TAnal_mov_ric; amr->set_annoes(anno); rel_movana.lfile().set_curr(amr); //il record principale della rel e' un TMov_anal!! - cur_movana.scan(elabora_movimento, this, "Ricostruzione saldi..."); + cur_movana.scan(elabora_movimento, this, "Ricostruzione saldi consuntivi e temporanei..."); rel_movana.lfile().set_curr(new TRectype(LF_MOVANA)); //il record principale della rel e' un TMov_anal!! } + //FASE 2 //ricostruzione saldi di preventivo spammati su piu' anni - TEsercizi_contabili esc; - const TDate datainies = esc[anno].inizio(); - filter.format("((TIPOMOV='P')||(TIPOMOV='V'))&&(NUM(ANSI(DATAFCOMP))>=%ld)", datainies.date2ansi()); - - TRectype beginning(LF_MOVANA), ending(LF_MOVANA); - ending.put(MOVANA_ANNOES, anno - 1); - cur_movana.setregion(beginning, ending); - cur_movana.setfilter(filter, true); - const long preventivi_items = cur_movana.items(); + filter = "(TIPOMOV='P')||(TIPOMOV='V')"; + TCursor cur_movana_prev(&rel_movana, filter); + const long preventivi_items = cur_movana_prev.items(); if (preventivi_items > 0) { TAnal_mov_ric* amr = new TAnal_mov_ric; - amr->set_annoes(anno); + amr->set_annoes(0); rel_movana.lfile().set_curr(amr); //il record principale della rel e' un TMov_anal!! - cur_movana.scan(elabora_movimento, this, "Ricostruzione saldi preventivi precedenti..."); + cur_movana_prev.scan(elabora_movimento, this, "Ricostruzione saldi preventivi..."); rel_movana.lfile().set_curr(new TRectype(LF_MOVANA)); //il record principale della rel e' un TMov_anal!! } } diff --git a/ca/ca3700a.rep b/ca/ca3700a.rep index 26cf7c291..8ca4ff4dd 100755 --- a/ca/ca3700a.rep +++ b/ca/ca3700a.rep @@ -157,7 +157,8 @@ MESSAGE RESET,F2.900 - MESSAGE ISAMREAD,PCONANA,CODCONTO=CONTO,DESCR + CONTO + CA_FORMAT_CONTO_DESCR diff --git a/ca/ca3800.uml b/ca/ca3800.uml index 71d340494..595bb3d3c 100755 --- a/ca/ca3800.uml +++ b/ca/ca3800.uml @@ -16,7 +16,7 @@ END ENDPAGE TOOLBAR "" 0 -2 0 2 - + STRING DLG_PROFILE 50 BEGIN PROMPT 9 -11 "Profilo " @@ -118,17 +118,25 @@ BEGIN OUTPUT F_CDC CODCOSTO END -RADIOBUTTON F_TIPOSTIMA 1 35 -BEGIN - PROMPT 41 7 "Tipo di stima" - ITEM "T|Tempo" - ITEM "C|Costi consuntivi\Ricavi preventivi" - ITEM "R|Costi consuntivi\Ricavi consuntivi" -END - BOOLEAN F_VITAINTERA BEGIN - PROMPT 41 12 "Includere esercizi successivi (vita intera)" + PROMPT 1 11 "Includere esercizi successivi (vita intera)" +END + +RADIOBUTTON F_TIPOSTIMA 1 42 +BEGIN + PROMPT 34 9 "Tipo di stima" + ITEM "T|Costi preventivi\Ricavi preventivi (Tempo)" + MESSAGE SHOW,F_TIPODETR|ENABLE,F_TIPODETR + ITEM "C|Costi consuntivi\Ricavi preventivi" + MESSAGE CLEAR,F_TIPODETR|HIDE,F_TIPODETR + ITEM "R|Costi consuntivi\Ricavi consuntivi" + MESSAGE CLEAR,F_TIPODETR|HIDE,F_TIPODETR +END + +BOOLEAN F_TIPODETR +BEGIN + PROMPT 1 12 "Utilizzare consuntivi per le detrazioni " END GROUPBOX F_PRE0 76 5 @@ -139,14 +147,14 @@ END LISTBOX F_DEPTH 1 20 BEGIN - PROMPT 1 18 "Profondita' del piano dei conti da considerare " + PROMPT 1 19 "Profondita' del piano dei conti da considerare " ITEM "1|Gruppo" ITEM "2|Conto" END STRING F_REPORT 256 64 BEGIN - PROMPT 1 19 "Report " + PROMPT 1 20 "Report " FLAGS "B" END diff --git a/ca/ca3800a.rep b/ca/ca3800a.rep index 1171a60b7..6cad0c710 100755 --- a/ca/ca3800a.rep +++ b/ca/ca3800a.rep @@ -40,29 +40,61 @@ - + - + ANNO - + - + TIPOSTIMA -
  • +
  • - + - + + + TIPODETR + +
  • +
  • + + + + + + + + VITAINTERA + + + + + + + FASESPEC + + + + + + + CDCSPEC + + + + + DEPTH @@ -70,27 +102,6 @@
  • - - - - - - VITAINTERA - - - - - - - FASESPEC - - - - - - - CDCSPEC -
    @@ -101,8 +112,8 @@
  • -
  • -
  • +
  • +
  • @@ -240,8 +251,8 @@ THEN
  • -
  • -
  • +
  • +
  • @@ -265,7 +276,7 @@ MESSAGE RESET,169
    - + H3.101
  • diff --git a/ca/ca3800b.rep b/ca/ca3800b.rep index 127247938..02cb2e79a 100755 --- a/ca/ca3800b.rep +++ b/ca/ca3800b.rep @@ -34,25 +34,36 @@ - + - + TIPOSTIMA -
  • +
  • - + - + + + TIPODETR + +
  • +
  • + + + + + + DEPTH @@ -60,10 +71,10 @@
  • - + - + VITAINTERA @@ -76,7 +87,7 @@ FASESPEC MESSAGE COPY,F1.2 - + ANNO @@ -89,8 +100,8 @@
  • -
  • -
  • +
  • +
  • @@ -189,8 +200,8 @@ THEN
  • -
  • -
  • +
  • +
  • diff --git a/ca/ca3800c.rep b/ca/ca3800c.rep index 63dc7e11b..2e68d761f 100755 --- a/ca/ca3800c.rep +++ b/ca/ca3800c.rep @@ -34,25 +34,36 @@ - + - + TIPOSTIMA -
  • +
  • - + - + + + TIPODETR + +
  • +
  • + + + + + + DEPTH @@ -60,10 +71,10 @@
  • - + - + VITAINTERA @@ -76,7 +87,7 @@ CDCSPEC MESSAGE COPY,F1.2 - + ANNO @@ -89,8 +100,8 @@
  • -
  • -
  • +
  • +
  • @@ -191,8 +202,8 @@ THEN
  • -
  • -
  • +
  • +
  • diff --git a/ca/ca3883.cpp b/ca/ca3883.cpp index 01eb393d4..6009eb04a 100755 --- a/ca/ca3883.cpp +++ b/ca/ca3883.cpp @@ -255,7 +255,7 @@ void TCRPA_report::offset_and_fill_columns(TReport_section& rep_sect, const TStr //campo modello rep_sect.find_field(model_id)->set_column(x0); - } + } //if(fld_fase!=NULL.. } else //campi non del body { @@ -276,10 +276,10 @@ void TCRPA_report::offset_and_fill_columns(TReport_section& rep_sect, const TStr brock.activate(champ->active()); brock.set_column(champ->get_rect().left()); } - } - } - } - } + } //if(id>0.. + } //for(int i=0;... + } //else di if(rep_sect.type()=='B'... + } //if(!show_fasi||!show_cdc... TReport_field& rep_field = *rep_sect.find_field(model_id); @@ -480,8 +480,8 @@ static int righe_compare(const TObject** o1, const TObject** o2) } else { - const int z1 = c1.starts_with("DETR_"); - const int z2 = c2.starts_with("DETR_"); + const int z1 = c1.starts_with("detr_"); + const int z2 = c2.starts_with("detr_"); if (z1 || z2) cmp = z1 - z2; } @@ -516,58 +516,85 @@ void TPrint_saldana_recordset::parse_bill(const TString& bill, TString& conto) c } int TPrint_saldana_recordset::estrai_saldi(const TRecordset& saldana, const int indbil, - TImporto& saldo, TImporto& saldop) const + TImporto& saldo, TImporto& saldop, const bool cms_detraz) const { int flag = 0; + saldo.reset(); + saldop.reset(); + //stampa bilancio di commessa ca3800 (_tipo=8) if (_tipo == 8) { - if (_tipostima == 'R') //stampa adolfica nuova con ricavi consuntivi (spezzabili per fase) + + switch (_tipostima) { - const TImporto imp_saldo(saldana.get(SALDANA_SEZIONE).as_string()[0], - saldana.get(SALDANA_SALDO).as_real()); - saldo.reset(); - saldop.reset(); - if (!imp_saldo.is_zero()) + case 'R': //CostiConsuntivi RicaviConsuntivi (Cc/Rc) { - if (indbil == 3) //colonna costi + const TImporto imp_saldo(saldana.get(SALDANA_SEZIONE).as_string()[0], + saldana.get(SALDANA_SALDO).as_real()); + if (!imp_saldo.is_zero()) { - saldo = imp_saldo; - flag = 1; - } - else //indbil == 4; colonna ricavi - { - saldop = imp_saldo; - flag = 2; + if (indbil == 3) //indbil=3 costi + { + saldo = imp_saldo; + flag = 1; + } + else //indbil=4 ricavi + { + saldop = imp_saldo; + flag = 2; + } } } - } - else //programma originale con ricavi di budget totalizzati ad inizio commessa - { - 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(); + break; - 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], + case 'C': //CostiConsuntivi RicaviPreventivi (Cc/Rp) + { + if (indbil == 3) //costi + { + 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 //indbil=4 ricavi + { + 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; + } + } + break; + + case 'T': //CostiPreventivi RicaviPreventivi (Cc/Rp) = Tempo + //nel caso stia calcolando le detrazioni di anni precedenti (cms_detraz) e si sia scelto di farlo.. + //..usando i consuntivi (Adolf rikiesten)... + if (cms_detraz && _tipodetr) + { + 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 //in tutti gli altri casi vanno bene i preventivi + { + 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(); - } - } + } + break; + + } //switch (_tipostima)... + + } //if(_tipo=8... // stampa stima ricavi ca3900 (_tipo=9) else { @@ -642,8 +669,8 @@ TAssoc_array& TPrint_saldana_recordset::get_row(TAssoc_array& cms, const char* c } //for ca3800 only! -void TPrint_saldana_recordset::aggiorna_importo(TAssoc_array& riga_array, - const TString& livello, const int indbil, const TRecordset& saldana, const bool inverti) const +void TPrint_saldana_recordset::aggiorna_importo(TAssoc_array& riga_array, const TString& livello, + const int indbil, const TRecordset& saldana, const bool inverti, const bool cms_detraz) const { TString* str_imp = (TString*)riga_array.objptr(livello); if (str_imp == NULL) @@ -659,7 +686,7 @@ void TPrint_saldana_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) TImporto imp_saldo, imp_saldop; - estrai_saldi(saldana, indbil, imp_saldo, imp_saldop); + estrai_saldi(saldana, indbil, imp_saldo, imp_saldop, cms_detraz); if (inverti) // Devo sottrarre l'importo = gli scambio la sezione { @@ -751,7 +778,7 @@ void TPrint_saldana_recordset::aggiorna_importi(TAssoc_array& riga_array, TImporto imp_saldo, imp_saldop; - estrai_saldi(saldana, indbil, imp_saldo, imp_saldop); + estrai_saldi(saldana, indbil, imp_saldo, imp_saldop, false); //saldi normali:Maturato if (!imp_saldo.is_zero()) @@ -793,27 +820,35 @@ void TPrint_saldana_recordset::create_lines_to_print(const TString& query) const TString& codconto = saldana.get(SALDANA_CONTO).as_string(); //trova l'indicatore di bilancio TString80 conto_anale; + const int indbil = _indicatori.get_indbil(codconto, conto_anale); //solo i Costi(3) ed i Ricavi(4) devono essere considerati per la stampa if (indbil == 3 || indbil == 4) { + //estrae i dati di commessa e le date relative;le date servono successivamente per stabilire... + //..le sezioni in cui compariranno le commesse nella stampa + const TString& codcms = saldana.get(SALDANA_COMMESSA).as_string(); + const TRectype& rec_commesse = cache().get(LF_COMMESSE, codcms); + const TDate dataini = rec_commesse.get(COMMESSE_DATAINIZIO); + + //per la data fine deve tener conto di eventuali proroghe.. + TDate datafine; + if (rec_commesse.get_bool(COMMESSE_PROROGA) && rec_commesse.get(COMMESSE_DATAPROR).ok()) + datafine = rec_commesse.get(COMMESSE_DATAPROR); + else + datafine = rec_commesse.get(COMMESSE_DATAFINE); + + //gruppo e conto servono solo per il caso _tipo=8 ma vanno dichiarati e ricavati.. + //..qui in modo che siano a disposizione delle commesse del cazzo poco sotto + const char* gruppo = indbil == 3 ? "COSTI" : "RICAVI"; + TString80 conto; + parse_bill(conto_anale, conto); + TImporto saldo, saldop; - const int flag = estrai_saldi(saldana, indbil, saldo, saldop); - if (flag != 0) + const int flag = estrai_saldi(saldana, indbil, saldo, saldop, false); + //se ci sono saldi/saldop != 0... +// if (flag != 0) { - const TString& codcms = saldana.get(SALDANA_COMMESSA).as_string(); - const TString& fase = saldana.get(SALDANA_FASE).as_string(); - const TString& cdc = saldana.get(SALDANA_COSTO).as_string(); - - const TRectype& rec_commesse = cache().get(LF_COMMESSE, codcms); - - const TDate dataini = rec_commesse.get(COMMESSE_DATAINIZIO); - //per la data fine deve tener conto di eventuali proroghe.. - TDate datafine; - if (rec_commesse.get_bool(COMMESSE_PROROGA) && rec_commesse.get(COMMESSE_DATAPROR).ok()) - datafine = rec_commesse.get(COMMESSE_DATAPROR); - else - datafine = rec_commesse.get(COMMESSE_DATAFINE); //e' inutile considerare le commesse terminate prima dell'esercizio selezionato.. //..cioe' nel passato oppure che iniziano nel futuro! if (datafine >= datainiesc && dataini <= datafinesc) @@ -827,6 +862,9 @@ void TPrint_saldana_recordset::create_lines_to_print(const TString& query) if (dataini >= datainiesc) indice++; + //ci sono filtri o raggruppamenti per fase o centro di costo? + const TString& fase = saldana.get(SALDANA_FASE).as_string(); + const TString& cdc = saldana.get(SALDANA_COSTO).as_string(); TString80 chiave = codcms; //selezione fasi solo su bilancio commessa (_tipo=8) if (_tipo == 8 && (_tipostampa >= 1 && _tipostampa <= 3)) @@ -851,16 +889,12 @@ void TPrint_saldana_recordset::create_lines_to_print(const TString& query) //riempie le righe degli array da mandare poi in stampa //dapprima le righe normali.. - //gruppo e conto servono solo per il caso _tipo=8 ma vanno dichiarati e ricavati.. - //..qui in modo che siano a disposizione delle commesse del cazzo poco sotto - const char* gruppo = indbil == 3 ? "COSTI" : "RICAVI"; - TString80 conto; - parse_bill(conto_anale, conto); //bilancio di commessa ca3800 (_tipo=8) if (_tipo == 8) { TAssoc_array& riga_array = get_row(cms[indice], chiave, indice, codcms, fase, cdc, rec_commesse.get(COMMESSE_DESCRIZ)); + //aggiunge gli importi e normalizza aggiorna_importo(riga_array, gruppo, indbil, saldana); aggiorna_importo(riga_array, conto, indbil, saldana); @@ -879,33 +913,41 @@ void TPrint_saldana_recordset::create_lines_to_print(const TString& query) aggiorna_importi(riga_array, indbil, saldana); } - //..poi le righe speciali,che esistono solo se la commessa e' iniziata prima dell'anno - //selezionato,quindi se l'indice e' 0 o 2 - if (indice %2 == 0) - { - //aggiorna il record speciale con la somma dei saldi con anno anteriore a quello.. - //..selezionato sulla maschera (CRPA request) - const int anno = saldana.get(SALDANA_ANNO).as_int(); - if (anno < _anno) - { - TString16 cazzo_cod; cazzo_cod.format("DETR_%04d", _anno - 1); - TString cazzo_descr = "DETRAZIONE PER COMPETENZA "; - cazzo_descr << (_anno - 1); - TAssoc_array& riga_array = get_row(cms[indice], CMS_DEL_CAZZO, indice, cazzo_cod, - EMPTY_STRING, EMPTY_STRING, cazzo_descr); - if (_tipo == 8) - { - aggiorna_importo(riga_array, gruppo, indbil, saldana, true); - aggiorna_importo(riga_array, conto, indbil, saldana, true); - } - else - { - aggiorna_importi(riga_array, indbil, saldana, true); - } - } - } //if(indice... + } //if (datafine >= datainiesc &&... - } //if (saldop != ZERO.. + } //if (flag!=0.. + + //RIGHE COMMESSA SPECIALE: esistono solo se la commessa e' iniziata prima dell'anno + //selezionato e se ha a che fare con quello in corso,quindi l'indice e' 0 o 2 + if (datafine >= datainiesc && dataini < datainiesc) + { + //indice e' il parametro che stabilisce in quale sezione del report viene stampata la commessa + //se la commessa termina prima della fine dell'esercizio selezionato -> indice 0, altrimenti.. + //..indice 2 + const int indice = datafine <= datafinesc ? 0 : 2; + //aggiorna il record speciale con la somma dei saldi con anno anteriore a quello.. + //..selezionato sulla maschera (CRPA request) + const int anno = saldana.get(SALDANA_ANNO).as_int(); + if (anno < _anno) + { + TString16 cazzo_cod; cazzo_cod.format("detr_al_%04d", _anno - 1); + TString cazzo_descr = "DETRAZIONE PER COMPETENZA FINO AL "; + cazzo_descr << (_anno - 1); + TAssoc_array& riga_array = get_row(cms[indice], CMS_DEL_CAZZO, indice, cazzo_cod, + EMPTY_STRING, EMPTY_STRING, cazzo_descr); + if (_tipo == 8) + { + //cms_detr con tipo detrazione a consuntivo o preventivo in base al valore di _tipodetr + aggiorna_importo(riga_array, gruppo, indbil, saldana, true, _tipodetr); + aggiorna_importo(riga_array, conto, indbil, saldana, true, _tipodetr); + } + else + { + aggiorna_importi(riga_array, indbil, saldana, true); + } + } //if(anno<_anno... + } //if(dataini registrazione movimento analitico -> save_for_true = true -> salva! + //se invece trova un anno e' in fase ricostruzione saldi! Deve fare delle considerazioni.. + if (annoes != 0) + { + if (annoes > 0) //se annoes e' positivo -> sono saldi normali -> salva! + save_for_true = anno == annoes; + else //se annoes e' negativo -> sono preventivi futuri -> salva solo se abs(anno)>annoes (senno' non sei nel futuro!) + save_for_true = anno > -annoes; + } + if (!save_for_true) //se non deve salvare davvero il saldo -> continua continue; - + saldi.put(SALDANA_ANNO, anno); saldi.put(SALDANA_COSTO, key.get(2)); saldi.put(SALDANA_COMMESSA, key.get(3)); @@ -1402,8 +1412,10 @@ bool TAnal_mov::save_saldi(const int annoes) int err = saldi.read(_isequal, _testandlock); if (err != NOERR) { - TEsercizi_contabili esc; - if (esc.exist(anno)) +//Richiesta specifica del nostro Fuhrer! I saldi appartenenti ad esercizi futuri NON ancora aperti vanno.. +//..comunque registrati!!! +// TEsercizi_contabili esc; +// if (esc.exist(anno)) { saldi.zero(); saldi.put(SALDANA_ANNO, anno); @@ -1413,8 +1425,8 @@ bool TAnal_mov::save_saldi(const int annoes) saldi.put(SALDANA_CONTO, key.get(5)); err = saldi.write(); } - else - continue; // NON devo dare errori fuorvianti causa saldi nel futuro che ci saranno ma non vanno scritti +// else +// continue; // NON devo dare errori fuorvianti causa saldi nel futuro che ci saranno ma non vanno scritti } if (err == NOERR) diff --git a/ca/calib02.cpp b/ca/calib02.cpp index 517211657..19c72eb07 100755 --- a/ca/calib02.cpp +++ b/ca/calib02.cpp @@ -320,8 +320,9 @@ size_t TAnal_report::get_usr_words(TString_array& words) const "CA_FORMAT_COSTO", "CA_FORMAT_COMMESSA", "CA_FORMAT_FASE", - "CA_FORMAT_CONTO", - "CA_FORMAT_CMSCDC", + "CA_FORMAT_CONTO", + "CA_FORMAT_CMSCDC", + "CA_FORMAT_CONTO_DESCR", NULL }; @@ -371,6 +372,27 @@ void TAnal_report::msg_format_conto(TVariant_stack& stack) msg_format(LF_PCONANA, stack); } +void TAnal_report::msg_format_conto_descr(TVariant_stack& stack) +{ + // Cerca di determinare se si usa il piano contabile o analitico + TString conto_descr; + TToken_string chiave; + const TString& conto = curr_field()->get().as_string(); + if (conto.len() == 12 && real::is_natural(conto)) + { + chiave.add(conto.mid(0,3)); + chiave.add(conto.mid(3,3)); + chiave.add(conto.mid(6,6)); + conto_descr = cache().get(LF_PCON, chiave, PCN_DESCR); + } + else + { + conto_descr = cache().get(LF_PCONANA, conto, PCONANA_DESCR); + } + + curr_field()->set(conto_descr); +} + void TAnal_report::msg_format_commessa_costo(TVariant_stack& stack) { const TMultilevel_code_info& fas_info = ca_multilevel_code_info(LF_FASI); @@ -392,6 +414,7 @@ bool TAnal_report::execute_usr_word(unsigned int opcode, TVariant_stack& stack) case 2 : msg_format_fase(stack); break; case 3 : msg_format_conto(stack); break; case 4 : msg_format_commessa_costo(stack); break; + case 5 : msg_format_conto_descr(stack); break; default: ok = false; break; } } diff --git a/ca/calib02.h b/ca/calib02.h index b6e2af81e..448f947bf 100755 --- a/ca/calib02.h +++ b/ca/calib02.h @@ -132,6 +132,7 @@ protected: // protected is safer virtual void msg_format_fase (TVariant_stack& stack); virtual void msg_format_conto (TVariant_stack& stack); virtual void msg_format_commessa_costo(TVariant_stack& stack); + virtual void msg_format_conto_descr (TVariant_stack& stack); public: // meglio pubic? };