diff --git a/ca/ca3700.cpp b/ca/ca3700.cpp index 61da6d1ef..e1330d481 100755 --- a/ca/ca3700.cpp +++ b/ca/ca3700.cpp @@ -4,6 +4,8 @@ #include #include #include +#include "../cg/cg2103.h" +#include "../cg/cglib01.h" #include "../ve/velib04.h" #include "pconana.h" @@ -222,6 +224,9 @@ TPrint_rendiconto_ca_mask::TPrint_rendiconto_ca_mask() /////////////////////////////////////////////////////////////// // RECORDSET /////////////////////////////////////////////////////////////// +#define IMPEGNATO 1 +#define MATURATO 2 +#define FATTURATO 4 class TPrint_rendiconto_ca_recordset : public TISAM_recordset { @@ -230,7 +235,6 @@ class TPrint_rendiconto_ca_recordset : public TISAM_recordset protected: int _anno; int _tipoconti; - int _tipimov; TDate _dadata, _adata; long _danumreg, _anumreg; TString _daconto, _aconto, _codcosto, _codcms, _codfas; @@ -246,7 +250,7 @@ protected: void crea_righe_rmovana(); void crea_righe_rdoc(const TPrint_rendiconto_ca_mask& msk); void crea_trr(const TFilename& trr) const; - void salva_rmovana(const TRectype& rmovana, const TRectype& movana); + void salva_rmovana(const TRectype& rmovana, const TRectype& movana, const TDocumento* doc); real somma_budget(const TString& codconto, const char* tipomovana); @@ -274,9 +278,10 @@ bool TPrint_rendiconto_ca_recordset::valid_record(const TRelation& rel) const { case 'P': tipomov_int = 2; break; case 'V': tipomov_int = 4; break; + case 'T': tipomov_int = 1;break; default: tipomov_int = 1; break; } - if ((_tipimov & tipomov_int) == 0) + if ((tipomov_int) == 0) return false; //..poi le righe (devono comparire solo le righe con cdc/cms/fsc che appaiono nello sheet) @@ -404,35 +409,130 @@ const TVariant& TPrint_rendiconto_ca_recordset::get(const char* column_name) con return TISAM_recordset::get(column_name); } -void TPrint_rendiconto_ca_recordset::salva_rmovana(const TRectype& rmovana, const TRectype& movana) +void TPrint_rendiconto_ca_recordset::salva_rmovana(const TRectype& rmovana, const TRectype& movana, const TDocumento* doc) { + //serve un documento da cui ricavare i parametri di stampa + const bool dadoc = doc != NULL; + TDocumento* newdoc = (TDocumento*)doc; + if (newdoc == NULL && movana.get(MOVANA_DNDOC).not_empty()) + { + const TString16 dacodnum = movana.get(MOVANA_DCODNUM); + newdoc = new TDocumento('D', movana.get_int(MOVANA_DANNO), dacodnum, movana.get_long(MOVANA_DNDOC)); + } + //tipo movimento CONSUNTIVO const char tipomov = movana.get_char(MOVANA_TIPOMOV); - if (tipomov <= ' ') + if (tipomov <= ' ' || tipomov == 'T') { //scegli i campi da mettere _tmp->curr().put("CONTO", rmovana.get(RMOVANA_CODCONTO)); //conto - _tmp->curr().put("ANNO", movana.get(MOVANA_ANNOES)); //anno - _tmp->curr().put("CODNUM", movana.get(MOVANA_DCODNUM)); //codnum del documento che origina il movana - _tmp->curr().put("DATA", movana.get(MOVANA_DATAREG)); //data del movana - _tmp->curr().put("NUMRD", movana.get(MOVANA_NUMREG)); - _tmp->curr().put("NUMDOCRIF", movana.get(MOVANA_DNDOC)); - _tmp->curr().put("DATADOCRIF", movana.get(MOVANA_DATADOC)); - _tmp->curr().put("DESC", movana.get(MOVANA_DESCR)); //??veramente non si sa?? + + if (dadoc) //movimento generato da documento + { + _tmp->curr().put("CODNUM", movana.get(MOVANA_DCODNUM)); //codnum del documento che origina il movana + _tmp->curr().put("ANNO", movana.get(MOVANA_DANNO)); //anno del doc di origine + _tmp->curr().put("NUMRD", movana.get(MOVANA_DNDOC)); //numreg del movana + _tmp->curr().put("DATA", movana.get(MOVANA_DATADOC)); //data del documento che genera movana + } + else //movimento normale + { + _tmp->curr().put("CODNUM", movana.get(MOVANA_NUMDOC)); + _tmp->curr().put("ANNO", movana.get(MOVANA_ANNOES)); //anno del movimento + _tmp->curr().put("NUMRD", movana.get(MOVANA_NUMREG)); //numreg del movana + _tmp->curr().put("DATA", movana.get(MOVANA_DATACOMP)); //data del movana + } + + int selettore = 0; + if (newdoc != NULL) + { + _tmp->curr().put("NUMDOCRIF", newdoc->get(DOC_NUMDOCRIF)); //docrif del documento originante il movana + _tmp->curr().put("DATADOCRIF", newdoc->get(DOC_DATADOCRIF)); //datadocrif del documento originante il movana + + const int tipo_documento = newdoc->tipo().tipo(); + int tipo_babbo = 0; + + TString80 riferimento; + const int rows = newdoc->physical_rows(); + for (int i = 1; riferimento.empty() && i <= rows; i++) + { + const TRiga_documento& riga = (*newdoc)[i]; + const TRectype* babbo = riga.find_original_rdoc(); + if (babbo != NULL) + { + const TString8 codnum = babbo->get(RDOC_CODNUM); + const int anno = babbo->get_int(RDOC_ANNO); + const long ndoc = babbo->get_long(RDOC_NDOC); + riferimento << codnum << '-' << anno << '-' << ndoc; + TDocumento doc_babbo('D', anno, codnum, ndoc); + tipo_babbo = doc_babbo.tipo().tipo(); + } + } + + switch (tipo_documento) + { + case TTipo_documento::_bolla: + selettore = MATURATO; + if (tipo_babbo != TTipo_documento::_ordine) + selettore |= IMPEGNATO; + break; + case TTipo_documento::_fattura: + selettore = FATTURATO; + if (tipo_babbo == TTipo_documento::_ordine) + selettore |= MATURATO; + else + selettore |= (IMPEGNATO | MATURATO); + break; + case TTipo_documento::_ordine: + selettore = IMPEGNATO; + break; + case TTipo_documento::_altro: + default: + break; + } + _tmp->curr().put("DOCORIG", riferimento); + } + + _tmp->curr().put("DESC", movana.get(MOVANA_DESCR)); //descrizione movana _tmp->curr().put("NRIGA", rmovana.get(RMOVANA_NUMRIG)); - _tmp->curr().put("DESCRIGA", movana.get(RMOVANA_DESCR)); - _tmp->curr().put("DANDOC", movana.get(MOVANA_DNDOC)); + _tmp->curr().put("DESCRIGA", movana.get(RMOVANA_DESCR)); //descrizione rmovana - //qui ci vuole l'algoritmo di calcolo di fatturato/maturato/impegnato in base al TIPODOC - //o al CODNUM (***quale campo non si sa di preciso***) - const TString4 tipodoc = movana.get(MOVANA_TIPODOC); +/*[Tipo documento] +O=I** +B=IM* +BO=*M* +FB=**F +FO=*MF +F=IMF*/ +//****modificare il metodo per accelerare + const char sezione = rmovana.get_char(RMOVANA_SEZIONE); + + TImporto imp(sezione, rmovana.get_real(RMOVANA_IMPORTO)); -/* _tmp->curr().put("FATTURATO", movana.get(MOVANA_)); - _tmp->curr().put("MATURATO", movana.get(MOVANA_)); - _tmp->curr().put("IMPEGNATO", movana.get(MOVANA_));*/ + TCausale caus(movana.get(MOVANA_CODCAUS)); + TipoIVA tipoiva = caus.iva(); + char sezione_normale; + + if (tipoiva == iva_vendite) + sezione_normale = 'A'; + else + if (tipoiva == iva_acquisti) + sezione_normale = 'D'; + else + sezione_normale = 'D'; //questo in preparazione di casi futuri + + imp.normalize(sezione_normale); + + if (selettore & FATTURATO) + _tmp->curr().put("FATTURATO", imp.valore()); + if (selettore & MATURATO) + _tmp->curr().put("MATURATO", imp.valore()); + if (selettore & IMPEGNATO) + _tmp->curr().put("IMPEGNATO", imp.valore()); _tmp->write(); // aggiunge i record al file temporaneo } + if (!dadoc && newdoc != NULL) + delete newdoc; } @@ -484,21 +584,20 @@ void TPrint_rendiconto_ca_recordset::crea_righe_rmovana() const long rmovana_items = cur_rmovana.items(); cur_rmovana.freeze(); + //scorre le righe movimenti di analitica che soddisfano il filtro + //il join a movana serve nel caso necessitino dati di testata per la riga in questione if (rmovana_items > 0) { const TRectype& rmovana = cur_rmovana.curr(); const TRectype& movana = rel_rmovana.curr(LF_MOVANA); for (cur_rmovana = 0; cur_rmovana.pos() < rmovana_items; ++cur_rmovana) - salva_rmovana(rmovana, movana); + salva_rmovana(rmovana, movana, NULL); } } void TPrint_rendiconto_ca_recordset::crea_righe_rdoc(const TPrint_rendiconto_ca_mask& msk) { - - //scanning del file dei documenti alla ricerca di quelli che hanno la data ed il CODNUM - //validi nei filtri impostati dall'utente TRelation rel_doc(LF_DOC); // rel_doc.add(LF_RIGHEDOC, "CODNUM==CODNUM|ANNO==ANNO|PROVV==PROVV|NDOC==NDOC"); //aggiunge le testate @@ -555,6 +654,8 @@ void TPrint_rendiconto_ca_recordset::crea_righe_rdoc(const TPrint_rendiconto_ca_ const long doc_items = cur_doc.items(); cur_doc.freeze(); + //scanning del file dei documenti alla ricerca di quelli che hanno la data ed il CODNUM + //validi nei filtri impostati dall'utente for (cur_doc = 0; cur_doc.pos() < doc_items; ++cur_doc) { TDocumento doc(cur_doc.curr()); @@ -562,7 +663,7 @@ void TPrint_rendiconto_ca_recordset::crea_righe_rdoc(const TPrint_rendiconto_ca_ cont_anal.elabora(doc, 0, NULL, false, mov); for (int j = 1; j <= mov.rows(); j++) { - salva_rmovana(mov.body()[j], mov); + salva_rmovana(mov.body()[j], mov, &doc); } } @@ -577,8 +678,8 @@ void TPrint_rendiconto_ca_recordset::crea_trr(const TFilename& trr) const of << 1000 << endl; of << 14 << endl; of << "CONTO|1|20|0|Conto analitico" << endl; - of << "ANNO|9|4|0|Anno" << endl; of << "CODNUM|1|4|0|Numerazione documento" << endl; + of << "ANNO|9|4|0|Anno" << endl; of << "DATA|5|8|0|Data movimento o documento" << endl; of << "NUMRD|3|7|0|Numero registrazione o documento" << endl; of << "NUMDOCRIF|1|7|0|Numero documento riferimento" << endl; @@ -586,7 +687,7 @@ void TPrint_rendiconto_ca_recordset::crea_trr(const TFilename& trr) const of << "DESC|1|50|0|Descrizione movimento o documento" << endl; of << "NRIGA|2|3|0|Riga movimento o documento" << endl; of << "DESCRIGA|1|50|0|Descrizione riga movimento o documento" << endl; - of << "DANDOC|3|7|0|Riferimento ordine/bolla" << endl; + of << "DOCORIG|1|20|0|Riferimento ordine/bolla" << endl; of << "FATTURATO|4|18|5|Fatturato" << endl; of << "MATURATO|4|18|5|Maturato" << endl; of << "IMPEGNATO|4|18|5|Impegnato" << endl; @@ -770,7 +871,7 @@ calcolatore (const int tipo, const int classe, const int dare) } -//Calcolatore per tipi (OA,OV) -> impegnato, (BA,BV) -> impegnato, (FA,FN) -> impegnato, +//Calcolatore per tipi (OA,OV) -> impegnato, (BA,BV) -> maturato, (FA,FN) -> fatturato, calcolatore (const int tipo) { switch (tipo): diff --git a/ca/cacnv.cpp b/ca/cacnv.cpp index d445952e8..35878531b 100755 --- a/ca/cacnv.cpp +++ b/ca/cacnv.cpp @@ -381,7 +381,14 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss analmov.put(MOVANA_TIPODOC, mov_head.get(MOV_TIPODOC)); analmov.put(MOVANA_DESCR, mov_head.get(MOV_DESCR)); analmov.put(MOVANA_CODCAUS, mov_head.get(MOV_CODCAUS)); - analmov.put(MOVANA_TIPOMOV, "T"); //deve mettere sempre "Temporaneo" + if (definitiva) + analmov.put(MOVANA_TIPOMOV, " "); + else + analmov.put(MOVANA_TIPOMOV, "T"); //deve mettere "Temporaneo" (conversione NON definitiva) + analmov.put(MOVANA_DPROVV, mov_head.get(MOV_DPROVV)); + analmov.put(MOVANA_DANNO, mov_head.get(MOV_DANNO)); + analmov.put(MOVANA_DCODNUM, mov_head.get(MOV_DCODNUM)); + analmov.put(MOVANA_DNDOC, mov_head.get(MOV_DNDOC)); //MOVANA_TOTDOC e' il totale di tutte le sue righe;ancora non si conosce;sara' compilato.. //..successivamente utilizzando importone