From 3e93550834b6efadb96c73b4e43bfaaab651e5f5 Mon Sep 17 00:00:00 2001 From: luca Date: Tue, 6 Dec 2005 17:35:10 +0000 Subject: [PATCH] Patch level :2.2 nopatch Files correlati : Ricompilazione Demo : [ ] Commento :stampa pagato analitica in corso d'opera (un casino pauroso!) git-svn-id: svn://10.65.10.50/trunk@13585 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ca/ca3600.cpp | 557 +++++++++++++++++++++++++++++++++++--------------- ca/ca3600.h | 2 +- ca/ca3600.uml | 9 +- 3 files changed, 401 insertions(+), 167 deletions(-) diff --git a/ca/ca3600.cpp b/ca/ca3600.cpp index 783dc1954..988832e53 100755 --- a/ca/ca3600.cpp +++ b/ca/ca3600.cpp @@ -13,7 +13,6 @@ #include "..\cg\cg2103.h" #include "..\ve\velib.h" -#include "panapdc.h" #include "pconana.h" #include "movana.h" #include "rmovana.h" @@ -105,7 +104,7 @@ bool TPag_per_cms_mask::on_field_event(TOperable_field& o, TField_event e, long if (e == fe_button) { config_setter(sfield(F_PDCC), "Pdcc"); - config_setter(sfield(F_PDCA), "Pdca"); +// config_setter(sfield(F_PDCA), "Pdca"); ***per ora solo Pdcc*** } break; default: @@ -121,9 +120,9 @@ TPag_per_cms_mask::TPag_per_cms_mask() // creazione dei campi della pagina della maschera con lo sheet di cdc/cms/fasi create_sheet(F_RIGHE); - //Seconda pagina (sheets dei conti) + //Seconda pagina (sheets dei conti) ***per ora solo Pdcc*** //Controllo sul tipo di piano dei conti da utilizzare (Analitico/Contabile) - TConfig& cfg = ca_config(); +/* TConfig& cfg = ca_config(); const bool use_pdcc = cfg.get_bool("UsePdcc"); set(F_PIANO, use_pdcc ? "Contabile" : "Analitico"); @@ -145,8 +144,9 @@ TPag_per_cms_mask::TPag_per_cms_mask() sfield(F_PDCA).sheet_mask().hide(-1); config_loader(sfield(F_PDCA), "Pdca"); - } - + }*/ + //carica i parametri dei conti per lo sheet dei conti contabili + config_loader(sfield(F_PDCC), "Pdcc"); // setta gli handlers a tutti i campi generati della maschera;senza questa chiamata la on_field_event // non puo' funzionare sui campi generati!!! set_handlers(); @@ -200,6 +200,8 @@ protected: long _codfor; TString8 _campodata; TString _codcosto, _codcms, _codfas; + TAssoc_array _costi,_pagamenti,_fiscali,_sociali; //array che contengono i conti letti dal .ini + protected: //da libreria // virtual const TVariant& get(const char* column_name) const; @@ -210,6 +212,12 @@ protected: static bool mov_callback(const TRelation& rel, void* pJolly); long find_movimento(const TRectype& riga_pag) const; void find_commesse(const long nreg, const TRectype& riga_pag); + bool check_cms_cdc_fsc(const TRectype& rec_analriga); + void lettura_conti(TAssoc_array& assoc, const char tipoconto); + int cerca_riga_fattura_origine(const TPartita& match, const TRectype& riga_pag); + real totale_documento(const TRectype& mov) const; + real calcola_pagato_prec(const TPartita& match, const int riga_fatt, const TRectype& riga_pag); + bool test_swap(TCausale& caus, bool ritsoc) const; public: virtual void set_filter(const TPag_per_cms_mask& msk, const int cms_row, const long codfor); @@ -278,6 +286,100 @@ void TPag_per_cms_recordset::crea_trr(const TFilename& trr) const of << "CONTO+NREG+DATAPAG" << endl; } +void TPag_per_cms_recordset::lettura_conti(TAssoc_array& assoc, const char tipoconto) +{ + TConfig conti("ca3600.ini","Pdcc"); //paragrafo da scandire nell'ini (solo conti contabili!!) + TAssoc_array& vars = conti.list_variables(); + + FOR_EACH_ASSOC_STRING(vars, h, k, val) //riempie l'assoc con i soli valori del paragrafo dell'ini + { + if (*val == tipoconto) //mette nell'assocarray solo i conti corrispondenti al tipoconto passato + assoc.add(val); + } +} + +// Controlla sulla causale se il segno del totale documento (ritsoc=FALSE) +// o quello delle ritenute sociali (ritsoc=TRUE) e' invertito rispetto al normale +bool TPag_per_cms_recordset::test_swap(TCausale& caus, bool ritsoc) const +{ + const char sez = ritsoc ? caus.sezione_ritsoc() : caus.sezione_clifo(); + const bool s = (caus.iva() == iva_vendite) ^ (sez == 'D'); + return s; +} + +// Calcola il totale del documento tenendo conto del segno della prima riga e di quella delle +// ritenute sociali sulla causale +real TPag_per_cms_recordset::totale_documento(const TRectype& mov) const +{ + real tot = mov.get_real(MOV_TOTDOC); // Legge totale + const real ritfis = mov.get_real(MOV_RITFIS); + tot += ritfis; // Somma ritenute fiscali + + const real ritsoc = mov.get_real(MOV_RITSOC); + + if (!ritsoc.is_zero()) + { + TCausale caus(mov.get(MOV_CODCAUS)); + const bool swapt = test_swap(caus, false); // Totale invertito ? + const bool swaps = test_swap(caus, true); // Ritenute sociali invertite ? + if (swapt ^ swaps) // Somma ritenute sociali con segno + tot -= ritsoc; + else + tot += ritsoc; + } + + return tot; +} + +int TPag_per_cms_recordset::cerca_riga_fattura_origine(const TPartita& match, const TRectype& riga_pag) +{ + //scansione delle righe partita passata, precedenti alla riga_pag + const int k = riga_pag.get_int(PART_NRIGA); + for (int i = match.pred(k); i > 0; i = match.pred(i)) + { + const TRiga_partite& riga_part = match.riga(i); + if (riga_part.is_fattura()) + { + for (int j = riga_part.rate(); j > 0; j--) + { + if (match.esiste(i, j, k)) //se esiste il pagamento k della rata j della riga partita i contenente la fattura + return i; + } + } + } + return 0; +} + +real TPag_per_cms_recordset::calcola_pagato_prec(const TPartita& match, const int riga_fatt, const TRectype& riga_pag) +{ + real pagato = ZERO; + if (riga_fatt > 0) + { + const int k = riga_pag.get_int(PART_NRIGA); + const TDate data_rif = riga_pag.get(_campodata); //data di riferimento selezionata sulla maschera + + const TRiga_partite& riga_part = match.riga(riga_fatt); + for (int i = riga_part.rate(); i > 0; i--) + { + TRiga_scadenze& sc = riga_part.rata(i); + for (int j = sc.last(); j > 0; j = sc.pred(j)) + { + const TRiga_partite& pag = match.riga(j); + const TDate datapag = pag.get_date(_campodata); + const long cmp = datapag - data_rif; + //la riga pagamento e' da considerare quando ha data anteriore a quella di riferimento oppur + //ha data uguale ma numero di registrazione inferiore (insomma, il pagamento e' precedente + //a quello di riga_pag) + if (cmp < 0 || (cmp == 0 && j <= k)) + { + pagato += pag.get_real(PAGSCA_IMPORTO); + } + } + } + } + return pagato; +} + long TPag_per_cms_recordset::find_movimento(const TRectype& riga_pag) const { int n_fatture = 0; //numero di fatture trovate @@ -376,189 +478,304 @@ void TPag_per_cms_recordset::scan_movs(const TPag_per_cms_mask& msk) crea_righe_stampa(_righesociali, 4);*/ } +bool TPag_per_cms_recordset::check_cms_cdc_fsc(const TRectype& rec_analriga) +{ + if (_codcosto.not_empty() && _codcosto != rec_analriga.get(RMOVANA_CODCCOSTO)) + return false; + if (_codcms.not_empty() && _codcms != rec_analriga.get(RMOVANA_CODCMS)) + return false; + if (_codfas.not_empty() && _codfas != rec_analriga.get(RMOVANA_CODFASE)) + return false; + + return true; +} + //prepara l'assoc con tutte le righe da mandare in stampa per quanto riguarda i movimenti con //saldaconto (siano essi con o senza iva) void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga_pag) { -/* TMovimentoPN pn; - pn.curr().put(MOV_NUMREG, nreg); - if (pn.read() == NOERR) + //cerca un record di MOVANA che abbia numregcg = nreg;usa il nuovo metodo fighissimo.. + //..con la isam query + TString query, strnreg; + strnreg.format("%07ld", nreg); + + query << "USE MOVANA KEY 3\n"; + query << "WHERE NUMREGCG="; + query << strnreg; + query << "\n"; + + TISAM_recordset movana(query); + + for (TRecnotype i = 0; movana.move_to(i); i++) { - const TRectype& movfat = pn.curr(); + const long numregcg = movana.get(MOVANA_NUMREGCG).as_int(); + //se trova il record cercato in RMOVANA... + if (numregcg == nreg) + { + //prepara il record tmpcurr sul file temporaneo _tmp su cui registrare i dati da stampare + TRectype& tmpcurr = _tmp->curr(); + tmpcurr.zero(); - real totdoc_cms; - real totdoc, totdoc_netto; - TAssoc_array commesse; + //crea un movimento p.n. con il numero reg che viene passato al metodo (nreg relativo.. + //..ad un movimento della fattura originaria) + TMovimentoPN pn; + pn.curr().put(MOV_NUMREG, nreg); + if (pn.read() == NOERR) + { + const TRectype& movfat = pn.curr(); + + real totdoc_cms; + real totdoc, totdoc_netto; + TAssoc_array commesse; - //Movimenti CON SALDACONTO - //se movimento IVA.. - if (pn.iva_items() > 0) - { - for (int i = 0; i < pn.iva_items(); i++) - { - const TRectype& rmoviva = pn.iva(i); - const TString& codcms = rmoviva.get(RMI_CODCMS); - const TString& codfase = rmoviva.get(RMI_FASCMS); + //Movimenti CON SALDACONTO + //se movimento IVA.. + if (pn.iva_items() > 0) + { + for (int i = 0; i < pn.iva_items(); i++) + { + const TRectype& rmoviva = pn.iva(i); + const TBill zio(rmoviva); + //il tutto si fa solo se l'indicatore del conto nella riga iva e' != 5 + if (zio.indicatore_bilancio() != 5) + { + const int gruppo_iva = zio.gruppo(); + const int conto_iva = zio.conto(); + const long sottoconto_iva = zio.sottoconto(); - const TBill conto(rmoviva); + //trova le RMOVANA del MOVANA corrente che hanno il conto = a quello della i-esima rigaiva + TAnal_mov anal_mov(nreg); + TRecord_array& anal_rows = anal_mov.body(); - if (cms_in_range(codcms, codfase) && conto.indicatore_bilancio() != 5) - { - TToken_string cms_fsc = codcms; - if (codfase.not_empty()) - cms_fsc.add(codfase); + if (anal_rows.rows() > 0) //se il movana ha righe... + { + for (i = 1; i <= anal_rows.rows(); i++) + { - const real importo = rmoviva.get_real(RMI_IMPONIBILE); - real imposta = rmoviva.get_real(RMI_IMPOSTA); - real* imp = (real*)commesse.objptr(cms_fsc); - if (imp == NULL) - { - imp = new real; - commesse.add(cms_fsc, imp); - } - *imp += importo; - totdoc_cms += importo; - - if (imposta != ZERO) - { - //controllo prorata - const TRectype& pla = cache().get("CMS", codcms); - const bool prorata = pla.get_bool("B4"); - if (prorata) - { - const TDate datareg = pn.curr().get_date(MOV_DATAREG); - const int anno = datareg.year(); - TRegistro registro(pn.curr().get(MOV_REG), anno); + //prende il conto sulla riga analitica e lo confronta con quello della riga iva + const int gruppo_anal = atoi(anal_rows[i].get(RMOVANA_CODCONTO).left(3)); + const int conto_anal = atoi(anal_rows[i].get(RMOVANA_CODCONTO).mid(3,3)); + const long sottoconto_anal = atol(anal_rows[i].get(RMOVANA_CODCONTO).mid(6,6)); - imposta *= (CENTO - registro.prorata(anno))/CENTO; - imposta.round(TCurrency::get_firm_dec()); //ci vanno i decimali della ditta - } + //il codconto anale e iva coincidono? + if (gruppo_iva == gruppo_anal && conto_iva == conto_anal && sottoconto_iva == sottoconto_anal) + { + + const real imponibile_iva = rmoviva.get_real(RMI_IMPONIBILE); + real imposta_iva = rmoviva.get_real(RMI_IMPOSTA); + + //commessa,cdc,fase della riga analitica devono essere coincidenti con quelle dello sheet + if (check_cms_cdc_fsc(anal_rows[i])) + { + //costruzione dell'assoc_array con cms/cdc/fsc ed importi + TToken_string cms_cdc_fsc; + cms_cdc_fsc.add(anal_rows[i].get(RMOVANA_CODCMS)); + cms_cdc_fsc.add(anal_rows[i].get(RMOVANA_CODCCOSTO)); + cms_cdc_fsc.add(anal_rows[i].get(RMOVANA_CODFASE)); + + real* imp = (real*)commesse.objptr(cms_cdc_fsc); + if (imp == NULL) + { + imp = new real; + commesse.add(cms_cdc_fsc, imp); + } + *imp += imponibile_iva; + totdoc_cms += imponibile_iva; + + if (imposta_iva != ZERO) + { + //controllo prorata + const TRectype& pla = cache().get(LF_COMMESSE, anal_rows[i].get(RMOVANA_CODCMS)); + const bool prorata = pla.get_bool("PRORATA"); + if (prorata) + { + const TDate datareg = pn.curr().get_date(MOV_DATAREG); + const int anno = datareg.year(); + TRegistro registro(pn.curr().get(MOV_REG), anno); + + imposta_iva *= (CENTO - registro.prorata(anno))/CENTO; + imposta_iva.round(TCurrency::get_firm_dec()); //ci vanno i decimali della ditta + } - *imp += imposta; - totdoc_cms += imposta; - } + *imp += imposta_iva; + totdoc_cms += imposta_iva; + } - } - } +/* TGeneric_distrib agip(imponibile_iva, TCurrency::get_firm_dec()); + FOR_EACH_ASSOC_OBJECT(commesse, h, k, importo) + { + const real& impcms = *(real*)importo; + agip.add(impcms); + agip_prec.add(impcms); //distributore di importo pagato sulle commesse + }*/ + } - totdoc = totale_documento(pn.curr()); //tot doc con ritenute fiscali + ritenute sociali (da stampare) - totdoc_netto = pn.curr().get_real(MOV_TOTDOC); //questo si usa solo per il calcolo del residuo - } - else //..movimento NON iva (sempre con saldaconto) - { - for (int i = 0; i < pn.cg_items(); i++) - { - const TRectype& rmov = pn.cg(i); - const TBill conto(rmov); + } //if(gruppo_iva==.. - TImporto importo(rmov.get_char(RMV_SEZIONE), rmov.get_real(RMV_IMPORTO)); - importo.normalize('D'); + } //for (anal_rows... + } //if anal_rows() > 0... + } //if indicatore_bilancio!=5.. - if (conto.tipo() > ' ') - { - totdoc -= importo.valore(); - totdoc_netto -= importo.valore(); //valore per il calcolo del residuo - continue; - } + //aggiungi le slice con gli importi delle righe di analitica + //estrai gli importi risultanti e aggiungili a commesse (come sotto) solo se la commessa coincide + //con quella selezionata + //ricordarsi di considerare l'indetraibilita' - if (cerca_fiscali(conto) || cerca_sociali(conto)) - { - totdoc -= importo.valore(); //valore da stampare nella colonna Tot.fattura con ritenute - continue; - } - const TString& codcms = rmov.get(RMV_CODCMS); - const TString& codfase = rmov.get(RMV_FASCMS); + - if (cms_in_range(codcms,codfase) && conto.indicatore_bilancio() != 5) - { - TToken_string cms_fsc = codcms; - if (codfase.not_empty()) - cms_fsc.add(codfase); - - real* imp = (real*)commesse.objptr(cms_fsc); - if (imp == NULL) - { - imp = new real; - commesse.add(cms_fsc, imp); - } - *imp += importo.valore(); - totdoc_cms += importo.valore(); - } +/* if (conto.indicatore_bilancio() != 5) + { + const real importo = rmoviva.get_real(RMI_IMPONIBILE); + real imposta = rmoviva.get_real(RMI_IMPOSTA); + real* imp = (real*)commesse.objptr(cms_fsc); + if (imp == NULL) + { + imp = new real; + commesse.add(cms_fsc, imp); + } + *imp += importo; + totdoc_cms += importo; + + if (imposta != ZERO) + { + //controllo prorata + const TRectype& pla = cache().get("CMS", codcms); + const bool prorata = pla.get_bool("B4"); + if (prorata) + { + const TDate datareg = pn.curr().get_date(MOV_DATAREG); + const int anno = datareg.year(); + TRegistro registro(pn.curr().get(MOV_REG), anno); - } - } + imposta *= (CENTO - registro.prorata(anno))/CENTO; + imposta.round(TCurrency::get_firm_dec()); //ci vanno i decimali della ditta + } + + *imp += imposta; + totdoc_cms += imposta; + } - //parte comune a movimenti IVA e non (vengono anche qui considerate le ritenute fiscali - //e sociali perche' possono essere state inserite direttamente nella partita e non nel movimento - //(quindi non si puo' in questo caso applicare la totale_documento() - //Le ritenute fiscali vanno sempre sommate.. - real totpagato = riga_pag.get_real(PART_IMPORTO) + riga_pag.get_real(PART_RITENUTE); - //Le ritenute sociali invece vanno testate con la test_swap.. - const real ritsoc = riga_pag.get_real(PART_RITSOC); - if (!ritsoc.is_zero()) - { - const TRectype& mov = pn.curr(); - TCausale caus(mov.get(MOV_CODCAUS)); - const bool swapt = test_swap(caus, false); // Totale invertito ? - const bool swaps = test_swap(caus, true); // Ritenute sociali invertite ? - if (swapt ^ swaps) // Somma ritenute sociali con segno - totpagato -= ritsoc; - else - totpagato += ritsoc; - } + }*/ + } - const real percentuale = totpagato / totdoc_netto; +// totdoc = totale_documento(pn.curr()); //tot doc con ritenute fiscali + ritenute sociali (da stampare) + totdoc_netto = pn.curr().get_real(MOV_TOTDOC); //questo si usa solo per il calcolo del residuo + } + else //..movimento NON iva (sempre con saldaconto) + { + for (int i = 0; i < pn.cg_items(); i++) + { + const TRectype& rmov = pn.cg(i); + const TBill conto(rmov); - //calcolo del residuo (solo movimenti saldacontati) - //mi servono,dalla riga partita che viene passata,i valori dei campi per la chiave del - //file delle scadenze - const TPartita match(riga_pag); - //ci serve la riga di fattura che origina la nostra riga pagamento - const int riga_fatt = cerca_riga_fattura_origine(match, riga_pag); - //quanto era stato pagato del documento prima della attuale riga_pag - const real totpagato_prec = calcola_pagato_prec(match, riga_fatt, riga_pag); - const real perc_prec = totpagato_prec / totdoc_netto; + TImporto importo(rmov.get_char(RMV_SEZIONE), rmov.get_real(RMV_IMPORTO)); + importo.normalize('D'); + + if (conto.tipo() > ' ') + { + totdoc -= importo.valore(); + totdoc_netto -= importo.valore(); //valore per il calcolo del residuo + continue; + } + +/* if (cerca_fiscali(conto) || cerca_sociali(conto)) + { + totdoc -= importo.valore(); //valore da stampare nella colonna Tot.fattura con ritenute + continue; + } + + const TString& codcms = rmov.get(RMV_CODCMS); + const TString& codfase = rmov.get(RMV_FASCMS); + + if (conto.indicatore_bilancio() != 5) + { + real* imp = (real*)commesse.objptr(cms_fsc); + if (imp == NULL) + { + imp = new real; + commesse.add(cms_fsc, imp); + } + *imp += importo.valore(); + totdoc_cms += importo.valore(); + }*/ + + } + } //else... + + //parte comune a movimenti IVA e non (vengono anche qui considerate le ritenute fiscali + //e sociali perche' possono essere state inserite direttamente nella partita e non nel movimento + //(quindi non si puo' in questo caso applicare la totale_documento() + //Le ritenute fiscali vanno sempre sommate.. + real totpagato = riga_pag.get_real(PART_IMPORTO) + riga_pag.get_real(PART_RITENUTE); + //Le ritenute sociali invece vanno testate con la test_swap.. + const real ritsoc = riga_pag.get_real(PART_RITSOC); + if (!ritsoc.is_zero()) + { + const TRectype& mov = pn.curr(); + TCausale caus(mov.get(MOV_CODCAUS)); + const bool swapt = test_swap(caus, false); // Totale invertito ? + const bool swaps = test_swap(caus, true); // Ritenute sociali invertite ? + if (swapt ^ swaps) // Somma ritenute sociali con segno + totpagato -= ritsoc; + else + totpagato += ritsoc; + } + + const real percentuale = totpagato / totdoc_netto; + + //calcolo del residuo (solo movimenti saldacontati) + //mi servono,dalla riga partita che viene passata,i valori dei campi per la chiave del + //file delle scadenze + const TPartita match(riga_pag); + //ci serve la riga di fattura che origina la nostra riga pagamento + const int riga_fatt = cerca_riga_fattura_origine(match, riga_pag); + //quanto era stato pagato del documento prima della attuale riga_pag + const real totpagato_prec = calcola_pagato_prec(match, riga_fatt, riga_pag); + const real perc_prec = totpagato_prec / totdoc_netto; - TGeneric_distrib distributore(totdoc_cms * percentuale, TCurrency::get_firm_dec()); - TGeneric_distrib distributore_prec(totdoc_cms * perc_prec, TCurrency::get_firm_dec()); - { - FOR_EACH_ASSOC_OBJECT(commesse, h, k, imp) - { - const real& impcms = *(real*)imp; - distributore.add(impcms); - distributore_prec.add(impcms); //distributore di importo pagato sulle commesse - } - } + TGeneric_distrib distributore(totdoc_cms * percentuale, TCurrency::get_firm_dec()); + TGeneric_distrib distributore_prec(totdoc_cms * perc_prec, TCurrency::get_firm_dec()); + { + FOR_EACH_ASSOC_OBJECT(commesse, h, k, imp) + { + const real& impcms = *(real*)imp; + distributore.add(impcms); + distributore_prec.add(impcms); //distributore di importo pagato sulle commesse + } + } - FOR_EACH_ASSOC_OBJECT(commesse, h, k, imp) - { - const real& impcms = *(real*)imp; - TPag_per_cms_struct* ppcs = new TPag_per_cms_struct; +/* FOR_EACH_ASSOC_OBJECT(commesse, h, k, imp) + { + const real& impcms = *(real*)imp; + TPag_per_cms_struct* ppcs = new TPag_per_cms_struct; - // campi del pagamento - ppcs->_tipo = 0; //movimenti da saldaconto - ppcs->_codforn = riga_pag.get_long(PART_SOTTOCONTO); - ppcs->_datapag = riga_pag.get_date(_campodata); - ppcs->_importopagato.set_num(distributore.get()); //pagamento nella partita - ppcs->_importopagato_prec.set_num(distributore_prec.get()); //pagamenti precedenti al - ppcs->_descrpagamento = riga_pag.get(PART_DESCR); - // campi della fattura - ppcs->_nreg = nreg; - ppcs->_numfat = movfat.get(MOV_NUMDOC); - ppcs->_datafat = movfat.get_date(MOV_DATADOC); - ppcs->_protiva = movfat.get_long(MOV_PROTIVA); - ppcs->_totfat = totdoc; //questo e' quello che viene stampato in Tot.fattura + // campi del pagamento + ppcs->_tipo = 0; //movimenti da saldaconto + ppcs->_codforn = riga_pag.get_long(PART_SOTTOCONTO); + ppcs->_datapag = riga_pag.get_date(_campodata); + ppcs->_importopagato.set_num(distributore.get()); //pagamento nella partita + ppcs->_importopagato_prec.set_num(distributore_prec.get()); //pagamenti precedenti al + ppcs->_descrpagamento = riga_pag.get(PART_DESCR); + // campi della fattura + ppcs->_nreg = nreg; + ppcs->_numfat = movfat.get(MOV_NUMDOC); + ppcs->_datafat = movfat.get_date(MOV_DATADOC); + ppcs->_protiva = movfat.get_long(MOV_PROTIVA); + ppcs->_totfat = totdoc; //questo e' quello che viene stampato in Tot.fattura - TToken_string cms_fsc = k; + TToken_string cms_fsc = k; - ppcs->_commessa = cms_fsc.get(0); - ppcs->_fase = cms_fsc.get(1); - ppcs->_importocommessa.set_num(impcms); //importo da pagare scritto sulla fattura + ppcs->_commessa = cms_fsc.get(0); + ppcs->_fase = cms_fsc.get(1); + ppcs->_importocommessa.set_num(impcms); //importo da pagare scritto sulla fattura - _righe.add(ppcs); //aggiunge il pagamento all'array dei pagamenti - } - }*/ + _righe.add(ppcs); //aggiunge il pagamento all'array dei pagamenti + }*/ + + } //pn.read()... + } //if (numregcg==nreg)... + } //for TRecnotype... } bool TPag_per_cms_recordset::part_callback(const TRelation& rel, void* pJolly) @@ -567,8 +784,8 @@ bool TPag_per_cms_recordset::part_callback(const TRelation& rel, void* pJolly) const TRectype& riga_part_pag = rel.curr(); const long nreg = recordset->find_movimento(riga_part_pag); //prima cerco un movimento della fattura... -/* if (nreg > 0) //..se ne trovo almeno uno cerco la commessa corrispondente - recordset->find_commesse(nreg, riga_part_pag);*/ + if (nreg > 0) //..se ne trovo almeno uno cerco la commessa corrispondente + recordset->find_commesse(nreg, riga_part_pag); return true; } @@ -651,6 +868,13 @@ void TPag_per_cms_recordset::set_filter(const TPag_per_cms_mask& msk, const int _dadata = msk.get_date(F_DATAINI); _adata = msk.get_date(F_DATAFIN); + + //carica i conti memorizzati nel ca3600.ini + lettura_conti(_costi, 'C'); + lettura_conti(_pagamenti, 'P'); + lettura_conti(_fiscali, 'F'); + lettura_conti(_sociali, 'S'); + //scansione movimenti con saldaconto scan_pags(msk); @@ -766,6 +990,15 @@ void TPag_per_cms::stampa_per_commessa(const TPag_per_cms_mask& mask, TReport_bo void TPag_per_cms::main_loop() { + //il programma si puo' usare SOLO se in contabilita' analitica si usa il piano dei conti contabile + TConfig& cfg = ca_config(); + const bool use_pdcc = cfg.get_bool("UsePdcc"); + if (!use_pdcc) + { + error_box(TR("Programma funzionante SOLO se in contabilita' analitica si usa il piano dei conti contabile")); + return; + } + TPag_per_cms_mask mask; while (mask.run() == K_ENTER) { diff --git a/ca/ca3600.h b/ca/ca3600.h index 96689827c..eb65a0f35 100755 --- a/ca/ca3600.h +++ b/ca/ca3600.h @@ -16,7 +16,7 @@ //sheets conti e righe relative #define F_PDCC 301 -#define F_PDCA 302 +//#define F_PDCA 302 ***per ora solo Pdcc*** #define F_PIANO 319 #define S_TIPO 101 diff --git a/ca/ca3600.uml b/ca/ca3600.uml index f3b759db1..fa5defb4f 100755 --- a/ca/ca3600.uml +++ b/ca/ca3600.uml @@ -160,7 +160,7 @@ BEGIN GROUP 5 END -TEXT -1 +/*TEXT -1 ***per ora solo Pdcc*** BEGIN PROMPT 1 5 "@bPiano dei conti analitico" GROUP 6 @@ -175,7 +175,7 @@ BEGIN ITEM "Cdc4" ITEM "Cdc5" GROUP 6 -END +END*/ BUTTON DLG_SAVEREC 12 2 BEGIN @@ -402,7 +402,8 @@ ENDMASK //----------------------Piano dei conti analitico------------------------------// //-----------Pagina di riga dello sheet PDCA----------------------// -PAGE "Riga Piano dei conti analitico" -1 -1 78 8 +//***per ora solo Pdcc*** +/*PAGE "Riga Piano dei conti analitico" -1 -1 78 8 LIST S_TIPO 1 18 BEGIN @@ -462,4 +463,4 @@ END ENDPAGE -ENDMASK +ENDMASK*/