From 058332cd99d0b4c6939197e997719703a0e9f000 Mon Sep 17 00:00:00 2001 From: luca Date: Mon, 9 Oct 2006 14:01:26 +0000 Subject: [PATCH] Patch level :4.0 506 Files correlati :ca0.exe ca3.exe ca0300.msk Ricompilazione Demo : [ ] Commento :aggiunto trattamento causali rateo/risconto in configurazione e stampa rendiconto; richiesta di Eva Braun del CRPA git-svn-id: svn://10.65.10.50/trunk@14372 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ca/ca0300.cpp | 2 ++ ca/ca0300a.h | 5 ++++ ca/ca0300a.uml | 65 +++++++++++++++++++++++++++++++++++++++---- ca/ca3700.cpp | 75 ++++++++++++++++++++++++++++++++++++++------------ 4 files changed, 125 insertions(+), 22 deletions(-) diff --git a/ca/ca0300.cpp b/ca/ca0300.cpp index e1410a65e..afa120021 100755 --- a/ca/ca0300.cpp +++ b/ca/ca0300.cpp @@ -153,6 +153,7 @@ bool TConf_Analitica::preprocess_config (TMask& mask, TConfig& config) { config_loader(mask.sfield(F_RIGHE_NUM), config, "ND"); config_loader(mask.sfield(F_RIGHE_FDR), config, "NF"); + config_loader(mask.sfield(F_RIGHE_RER), config, "RR"); return true; } @@ -160,6 +161,7 @@ bool TConf_Analitica::postprocess_config (TMask& mask, TConfig& config) { config_setter(mask.sfield(F_RIGHE_NUM), config, "ND"); config_setter(mask.sfield(F_RIGHE_FDR), config, "NF"); + config_setter(mask.sfield(F_RIGHE_RER), config, "RR"); return true; } diff --git a/ca/ca0300a.h b/ca/ca0300a.h index 23db0827b..c6b7a37c2 100755 --- a/ca/ca0300a.h +++ b/ca/ca0300a.h @@ -50,6 +50,7 @@ #define F_RIGHE_NUM 170 #define F_RIGHE_FDR 171 +#define F_RIGHE_RER 172 //elementi dello sheet dei documenti da escludere dal rendiconto #define SN_CODNUM 101 @@ -61,3 +62,7 @@ //elementi dello sheet dei documenti da considerare fatture da ricevere #define SF_CODNUM 101 #define SF_DESCR 102 + +//elementi dello sheet delle causali per ratei e risconti +#define SR_CODNUM 101 +#define SR_DESCR 102 \ No newline at end of file diff --git a/ca/ca0300a.uml b/ca/ca0300a.uml index 6eedb6329..ff390c9bc 100755 --- a/ca/ca0300a.uml +++ b/ca/ca0300a.uml @@ -406,14 +406,14 @@ END ENDPAGE -PAGE "Regole" -1 -1 78 20 +PAGE "Regole rendiconto" -1 -1 78 20 TEXT -1 BEGIN PROMPT 1 1 "@bNumerazioni documenti da escludere nel rendiconto" END -SPREADSHEET F_RIGHE_NUM -1 -12 +SPREADSHEET F_RIGHE_NUM -1 4 BEGIN PROMPT 1 2 "" ITEM "Numerazione" @@ -425,16 +425,26 @@ END TEXT -1 BEGIN - PROMPT 1 13 "@bNumerazioni documenti per le fatture da ricevere nel rendiconto" + PROMPT 1 7 "@bNumerazioni documenti per le fatture da ricevere nel rendiconto" END -SPREADSHEET F_RIGHE_FDR -1 -1 +SPREADSHEET F_RIGHE_FDR -1 4 BEGIN - PROMPT 1 14 "" + PROMPT 1 8 "" ITEM "Numerazione" ITEM "Descrizione@50" END +TEXT -1 +BEGIN + PROMPT 1 13 "@bCausali per ratei e risconti" +END + +SPREADSHEET F_RIGHE_RER -1 4 +BEGIN + PROMPT 1 14 "" + ITEM "Causale" + ITEM "Descrizione@50" END ENDPAGE @@ -554,3 +564,48 @@ ENDPAGE ENDMASK +PAGE "Riga causali per ratei e risconti" -1 -1 78 8 + +STRING SR_CODNUM 4 +BEGIN + PROMPT 1 1 "Codice numerazione " + USE LF_CAUSALI SELECT MOVIND!='' + CHECKTYPE REQUIRED + INPUT CODCAUS SR_CODNUM + DISPLAY "Codice" CODCAUS + DISPLAY "Descrizione@50" DESCR + OUTPUT SR_CODNUM CODCAUS + OUTPUT SR_DESCR DESCR + FLAGS "UZ" +END + +STRING SR_DESCR 50 +BEGIN + PROMPT 1 3 "Descrizione " + USE LF_CAUSALI + KEY 2 + SELECT MOVIND!='' + INPUT DESCR SR_DESCR + DISPLAY "Descrizione@50" DESCR + DISPLAY "Codice" CODCAUS + COPY OUTPUT SR_CODNUM +END + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -13 -1 "" +END + +BUTTON DLG_DELREC 10 2 +BEGIN + PROMPT -23 -1 "" +END + +BUTTON DLG_CANCEL 10 2 +BEGIN + PROMPT -33 -1 "" +END + +ENDPAGE + +ENDMASK diff --git a/ca/ca3700.cpp b/ca/ca3700.cpp index 061806cf6..cc3c426f7 100755 --- a/ca/ca3700.cpp +++ b/ca/ca3700.cpp @@ -236,6 +236,7 @@ class TPrint_rendiconto_ca_recordset : public TISAM_recordset bool _riclassificato; bool _reverse_cos_ric; TString _prefix; + TAssoc_array _ratrisc; protected: int _anno; @@ -260,18 +261,37 @@ protected: int sort_indbil(int indbil) const; TString riclassifica(const int gruppo, const int conto, const long sottoconto, TRectype& tmpcurr); real get_budget(const TString& conto, char tipo) const; + bool is_causale_rateo_risconto(const char* codcaus); public: virtual void set_filter(const TPrint_rendiconto_ca_mask& msk, int cms_row); - TPrint_rendiconto_ca_recordset(const TString& sql) : TISAM_recordset(sql), _riclassificato(false) { _tmp = NULL;} + TPrint_rendiconto_ca_recordset(const TString& sql); ~TPrint_rendiconto_ca_recordset(); }; static TPrint_rendiconto_ca_recordset* myself = NULL; + +TPrint_rendiconto_ca_recordset::TPrint_rendiconto_ca_recordset(const TString& sql) + : TISAM_recordset(sql), _riclassificato(false), _tmp(NULL) +{ + //Controlla sul file di configurazione di CA (ditta.ini,[ca]) se esistono causali di tipo.. + //..rateo/risconto che devono essere calcolate come solo maturato (Eva Braun request) + TConfig& config = ca_config(); + //riempie l'assoc_array contenente i codici causale rateo/risconto + for (int j = 0;;j++) + { + const TString& codcaus = config.get("RR", NULL, j); //scansione delle righe RR(i)=.. sul paragrafo di configurazione CA + if (codcaus.blank()) + break; + _ratrisc.add(codcaus, codcaus); + } +} + + TPrint_rendiconto_ca_recordset::~TPrint_rendiconto_ca_recordset() { } @@ -523,6 +543,12 @@ static int bill2indbil(const TString& codconto, bool is_anal) return indbil; } +//controlla se la causale passata e' di tipo rateo/risconto +bool TPrint_rendiconto_ca_recordset::is_causale_rateo_risconto(const char* codcaus) +{ + return _ratrisc.objptr(codcaus) != NULL; +} + //compila i campi del file temporaneo che sara' poi stampato void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const TRectype& movana, const TDocumento* doc) { @@ -532,14 +558,15 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const TString8 codnum_desc; //codnum da usare sia per compilare il campo "CODNUM" codnum_desc.cut(0); + //----- CONTI -----// TString codconto = rmovana.get(RMOVANA_CODCONTO); TString codcontocg; int indbil = 0; // il conto puo' essere analitico o contabile... - //se è compilato l'archivio di collegamento PANAPDC - //si deve usare come conto il campo codconto del panapdc!!!... - //Solo se si ha un conto contabile e' possibile riclassificare in analitico!!! + //se è compilato l'archivio di collegamento PANAPDC.. + //..si deve usare come conto il campo codconto del panapdc!!!... + //Ricordare ch SOLO se si ha un conto contabile e' possibile riclassificare in analitico!!! if (_riclassificato) //traduzione:sei il CRPA/CSA { //prende il gr/co/so dalla riga rmovana in esame @@ -578,8 +605,9 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const //..di appoggio;se sei del CRPA/CSA vuoi i costi dopo i ricavi! const int ordcont = sort_indbil(indbil); tmpcurr.put("ORDCONT", ordcont); + //---- FINE CONTI ----// - + //---- DOC D'ORIGINE DELL' ANALMOV ----// //tipo movimento CONSUNTIVO (o TEMPORANEO) const char tipomov = movana.get_char(MOVANA_TIPOMOV); if (tipomov <= ' ' || tipomov == 'T') @@ -611,9 +639,13 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const tmpcurr.put("NUMRD", movana.get(MOVANA_NUMREGCG)); //numregcg del movana tmpcurr.put("DATA", movana.get(MOVANA_DATACOMP)); //data del movana } + + int selettore = 0; + bool inverti_sezione = false; //inversore D/A per causali rateo/risconto + const int anno_caus = movana.get_date(MOVANA_DATAREG).year(); + const TCausale caus(movana.get(MOVANA_CODCAUS), anno_caus); //la causale serve un po' ovunque... //ricerca del mitico documento padre della riga documento attuale! - int selettore = 0; if (newdoc != NULL) { tmpcurr.put("NUMDOCRIF", newdoc->get(DOC_NUMDOCRIF)); //docrif del documento originante il movana @@ -664,13 +696,15 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const tmpcurr.put("DOCORIG", riferimento); //documento di riferimento (mitologico documento originale) + //---- FINE DOC ORIG DELL'ANALMOV ----// /*[Tipo documento] //schema divino per destinare gli importi nei campi corretti O=I** B=IM* BO=*M* FB=**F FO=*MF -F=IMF*/ +F=IMF*/ + //---- IMPEGANTO,MATURATO O FATTURATO? QUESTO E' IL PROBLEMA.. ----// switch (tipo_documento) { case TTipo_documento::_bolla: //bolla B -> IM a meno che non sia bolla da ordine BO -> M @@ -704,19 +738,27 @@ F=IMF*/ } //if(newdoc != NULL) else //movimenti puri di analitica (no documento di origine!) { - selettore = FATTURATO; - selettore |= MATURATO; - selettore |= IMPEGNATO; + if (is_causale_rateo_risconto(caus.codice())) //movimenti con causali "rateo/risconto" + { + selettore = MATURATO; + inverti_sezione = true; + } + else //movimenti con causali "normali" + { + selettore = FATTURATO; + selettore |= MATURATO; + selettore |= IMPEGNATO; + } } //if(newdoc != NULL) //riempie i record del file temporaneo nel caso di rmovana con documento di origine - const char sezione = rmovana.get_char(RMOVANA_SEZIONE); + char sezione = rmovana.get_char(RMOVANA_SEZIONE); + if (inverti_sezione) + sezione = sezione == 'D' ? 'A' : 'D'; TImporto imp(sezione, rmovana.get_real(RMOVANA_IMPORTO)); - const int anno_caus = movana.get_date(MOVANA_DATAREG).year(); - TCausale caus(movana.get(MOVANA_CODCAUS), anno_caus); - TipoIVA tipoiva = caus.iva(); + TipoIVA tipoiva = caus.iva(); //tipo iva legato alla causale (codcaus e' letto ad inizio procedura) char sezione_normale; if (tipoiva == iva_vendite) @@ -903,7 +945,7 @@ void TPrint_rendiconto_ca_recordset::scrive_riga_speciale(const TDocumento* doc, //i documenti speciali vanno SOLO in FATTURATO tmpcurr.put("FATTURATO", imp.valore()); } - else + else //if(codcaus.full() { //i documenti speciali vanno SOLO in FATTURATO tmpcurr.put("FATTURATO", importo); @@ -1030,12 +1072,11 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rdoc(const TPrint_rendiconto_ //Controlla sul file di configurazione di CA (ditta.ini,[ca]) se esistono numerazioni relative //..alle fatture da ricevere che devono essere trattate in modo particolare TConfig& config = ca_config(); - //TString_array contenente le numerazioni delle fatture da ricevere TString_array num_fdr; for (int j = 0;;j++) { - TString codfdr(config.get("NF", NULL, j)); //scansione delle righe NF(i)=.. sul paragrafo di configurazione CA + const TString& codfdr = config.get("NF", NULL, j); //scansione delle righe NF(i)=.. sul paragrafo di configurazione CA if (codfdr.blank()) break; num_fdr.add(codfdr);