diff --git a/ca/ca2200.cpp b/ca/ca2200.cpp index 7027bebc4..6a22dc34f 100755 --- a/ca/ca2200.cpp +++ b/ca/ca2200.cpp @@ -4,6 +4,7 @@ #include #include +#include "../cg/cglib01.h" #include "calib01.h" #include "calib02.h" @@ -85,6 +86,18 @@ bool TRib_movanal_msk::on_field_event(TOperable_field& o, TField_event e, long j { switch (o.dlg()) { + case F_DATAINI: + case F_DATAFIN: + if (e == fe_close) + { + const int anno = get_int(F_ANNO); + + TEsercizi_contabili esc; //..le date devono essere incluse nell'esercizio selezionato! + const TDate data(o.get()); + if (!data.empty() && esc.date2esc(data) != anno) + return error_box(TR("La data deve appartenere all'anno selezionato")); + } + break; case DLG_OK: case DLG_SAVEREC: if (e == fe_button) @@ -128,6 +141,7 @@ protected: public: bool cappotta_movimento(TAnal_mov& anal_mov); + TRib_movanal_app(){} }; void TRib_movanal_app::copia_campo(const TRectype& src, const char* campo_src, @@ -369,8 +383,11 @@ void TRib_movanal_app::main_loop() //deve scandire il file MOVANA con chiave 2 (per data e numero di registrazione) TRelation rel_movana(LF_MOVANA); TRectype darec(LF_MOVANA), arec(LF_MOVANA); - darec.put(MOVANA_DATAREG, mask.get_date(F_DATAINI)); - arec.put(MOVANA_DATAREG, mask.get_date(F_DATAFIN)); + const TDate & dal = mask.get_date(F_DATAINI); + darec.put(MOVANA_DATAREG, dal); + const TDate & al = mask.get_date(F_DATAFIN); + arec.put(MOVANA_DATAREG, al); + _cache_rip.set_esercizio(al); TCursor cur_movana(&rel_movana, "BLOCCATO!=\"X\"", 2, &darec, &arec); const long items = cur_movana.items(); diff --git a/ca/ca2200a.h b/ca/ca2200a.h index 8021a818f..001be5c08 100755 --- a/ca/ca2200a.h +++ b/ca/ca2200a.h @@ -3,6 +3,7 @@ #define F_DATAINI 201 #define F_DATAFIN 202 #define F_DEFINITIVO 203 +#define F_ANNO 204 #define F_RIGHE 300 #define F_CODCAUS 113 diff --git a/ca/ca2200a.uml b/ca/ca2200a.uml index 21babc50a..f36b5bcb2 100755 --- a/ca/ca2200a.uml +++ b/ca/ca2200a.uml @@ -30,23 +30,39 @@ BEGIN PROMPT 1 1 "@bParametri di elaborazione" END -DATA F_DATAINI +NUMBER F_ANNO 4 BEGIN - PROMPT 2 2 "Dalla data " + PROMPT 2 2 "Esercizio " + USE ESC + INPUT CODTAB F_ANNO + DISPLAY "Codice Esercizio" CODTAB + DISPLAY "Data inizio esercizio" D0 + DISPLAY "Data fine esercizio " D1 + OUTPUT F_ANNO CODTAB + OUTPUT F_DATAINI D0 + OUTPUT F_DATAFIN D1 CHECKTYPE REQUIRED + FLAGS "RZ" + ADD NONE END -DATA F_DATAFIN -BEGIN - PROMPT 2 3 "Alla data " - CHECKTYPE REQUIRED -END - BOOLEAN F_DEFINITIVO BEGIN PROMPT 42 2 "Blocca movimenti elaborati" END +DATA F_DATAINI +BEGIN + PROMPT 2 3 "Dalla data " + CHECKTYPE REQUIRED +END + +DATA F_DATAFIN +BEGIN + PROMPT 42 3 "Alla data " + CHECKTYPE REQUIRED +END + SPREADSHEET F_RIGHE BEGIN PROMPT 0 5 "" diff --git a/ca/calib01.cpp b/ca/calib01.cpp index 8ccdb3da2..1dad8726f 100755 --- a/ca/calib01.cpp +++ b/ca/calib01.cpp @@ -6,6 +6,7 @@ #include #include "calib01.h" +#include "calib02.h" #include "calibmsk.h" #include "../cg/cg2103.h" @@ -1455,14 +1456,58 @@ TObject* TCache_ripartizioni::key2obj(const char* key) } TString80 chiave; - if (rip.read() == NOERR) + const bool found = (rip.read() == NOERR); + if (found) chiave << "B|" << rip.get(RIP_CODICE); TRecord_array* rows = new TRecord_array(chiave, LF_RRIP); + if (found && rip.get_int(RIP_TIPORIP) == 1) + { + bool some_value = false; + const int items = rows->rows(); + + for (int i = 1; i <= items; i++) + { + TRectype & rec = (*rows)[i]; + TAnal_bill bill; + + bill.set_conto(rec.get(RRIP_CODCONTO)); + bill.set_costo(rec.get(RRIP_CODCOSTO)); + bill.set_commessa(rec.get(RRIP_CODCMS)); + bill.set_fase(rec.get(RRIP_CODFASE)); + + const TSaldanal& s = ca_saldo(bill, _dal, _al, _saldanal_consuntivo); + TImporto val = s._ini; + + val.normalize('D'); + some_value |= val.valore() != ZERO; + rec.put(RRIP_RIPARTO, val.valore()); + } + if (!some_value) + { + for (int i = 1; i <= items; i++) + { + TRectype & rec = (*rows)[i]; + + rec.put(RRIP_RIPARTO, "1"); + } + } + } + return (TObject*)rows; } +void TCache_ripartizioni::set_esercizio(const TDate & d) +{ + TEsercizi_contabili e; + const TEsercizio & esc = e.esercizio(d); + + _dal = esc.inizio(); + _al = esc.fine(); + destroy(); +} + const TRecord_array& TCache_ripartizioni::righe(const char* costo, const char* commessa) { TToken_string parametro; diff --git a/ca/calib01.h b/ca/calib01.h index e56c0623c..528a58969 100755 --- a/ca/calib01.h +++ b/ca/calib01.h @@ -177,10 +177,13 @@ public: class TCache_ripartizioni : public TCache { + TDate _dal, _al; + protected: virtual TObject* key2obj(const char* key); public: + void set_esercizio(const TDate & d); const TRecord_array& righe(const char* costo, const char* commessa); const TRecord_array& righe(const int gruppo, const int conto, const long sottoconto); const TRecord_array& righe(const TBill& bill);