Patch level :2.2 152

Files correlati     :cacnv.exe, ca3.exe
Ricompilazione Demo : [ ]
Commento            :
nella conversione aggiunti i campi del documento origine.
Stampa rendiconto: stampa cose abbastanza sensate.


git-svn-id: svn://10.65.10.50/trunk@13277 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2005-07-15 17:29:53 +00:00
parent 8932c11b05
commit a8d17a8bda
2 changed files with 137 additions and 29 deletions

View File

@ -4,6 +4,8 @@
#include <reprint.h>
#include <doc.h>
#include <rdoc.h>
#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):

View File

@ -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