Patch level : 2.2 406

Files correlati     :   ve0.exe ve6.exe
Ricompilazione Demo : [ ]
Commento            :

Implementato il supporto pe contabilizzare conuna diversa causale sulla base della commessa principale del documento .
Si deve inserire il nome del campo nei parametri di contablizzazione (CODATT)

poi inserire in multirel i record di corrispondenza
COD          FIRST       SECOND                                 DATA
CTCMS   tipo doc.   campo delle commesse    causale

L'interfaccia  di questa tabella sarà implementata con la segnalazione 0000654


git-svn-id: svn://10.65.10.50/trunk@13963 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2006-05-04 17:44:58 +00:00
parent ddcb83323d
commit 404e925453
7 changed files with 85 additions and 38 deletions

View File

@ -168,6 +168,13 @@ BEGIN
FIELD CHECKPREVCONT
END
STRING F_CMSCNTFIELD 10
BEGIN
PROMPT 2 18 "Campo commesse per reperire la causale"
FLAGS "U"
FIELD CMSCNTFIELD
END
ENDPAGE

View File

@ -106,7 +106,8 @@
#define F_RICERCAAN4 109
#define F_SCONTO_LORDO 110
#define F_IVASTORNO 111
#define F_CHECKPREVCONT 112
#define F_CHECKPREVCONT 112
#define F_CMSCNTFIELD 113
// Campi per ve0200f.uml
#define F_IMPSPINC1 101

View File

@ -706,6 +706,7 @@ public:
void stato(char s) { put("STATO", s); }
const TString & codice_costo() const { return get(DOC_CODCOSTO);}
const TString & codice_commessa() const { return get(DOC_CODCMS);}
const TString & commessa_principale() const;
const TString & fase_commessa() const { return get(DOC_FASCMS);}
bool modificabile() const;
bool cancellabile() const;

View File

@ -505,6 +505,23 @@ real TDocumento::bolli(real & imp, int ndec, TTipo_importo t) const
return tot_bolli;
}
const TString & TDocumento::commessa_principale() const
{
if (codice_commessa().blank())
{
const int row = physical_rows();
for (int i = 1; i <= rows(); i++)
{
const TRiga_documento &r = ((TRiga_documento &) ((TDocumento *)this)->row(i));
if (!r.codice_commessa().blank())
return r.codice_commessa();
}
}
return codice_commessa();
}
bool TDocumento::modificabile() const
{
const char stato_attuale = stato();
@ -2460,7 +2477,7 @@ bool TDocumento::is_nota_credito() const
swap = TRUE;
else
{
const TString4 codcaus(tipo().causale());
const TString16 codcaus(tipo().causale());
if (codcaus.not_empty())
{
TLocalisamfile caus(LF_CAUSALI);

View File

@ -303,12 +303,16 @@ class TContabilizzazione : public TElaborazione // velib04b
TViswin* _viswin; // Visualizzazione log di elaborazione
TBill _conto_errato; // Conto da visualizzare in messaggio d'errore
bool _check_prev_cont; // Controllare se il documento precedente e' stato contabilizzato
TString16 _fld_cms_cont; // Campo delle commesse per reperire la causale
protected:
// Carica i parametri dalla configurazione
bool load_parameters();
// Testa il fatto che il documento sia una nota di credito/debito
bool test_swap();
// Istanzia la causale contabile
TCausale * get_caus(const TDocumento& doc, const int year);
// Ritorna l'ultimo numero di registrazione disponibile dei movimenti di prima nota
error_type get_next_reg_num(long &);
// Compila la testata del movimento

View File

@ -939,6 +939,7 @@ bool TContabilizzazione::load_parameters()
_spbo_cod = conf.get("SPBOCODIVA","ve");
_check_prev_cont = conf.get_bool("CHECKPREVCONT","ve");
_fld_cms_cont = conf.get("CMSCNTFIELD","ve");
return true;
}
@ -1020,6 +1021,43 @@ long TContabilizzazione::doc_contabilized(const TDocumento& doc, bool anticipo)
return nreg;
}
TCausale * TContabilizzazione::get_caus(const TDocumento& doc, const int year)
{
TString16 codcaus;
TToken_string key;
if (!_fld_cms_cont.blank())
{
const TString & cms = doc.commessa_principale();
if (!cms.blank())
{
key.add(cms);
const TString16 fld_val = cache().get(LF_COMMESSE, key, _fld_cms_cont);
if (!fld_val.blank())
{
key = "CTCMS";
key.add(doc.tipo().codice());
key.add(fld_val);
codcaus = cache().get(LF_MULTIREL, key, "DATA");
}
}
}
if (codcaus.blank())
{
key = doc.get(DOC_TIPOCF); key.add(doc.get(DOC_CODCF));
const TRectype& cfven = cache().get(LF_CFVEN, key);
codcaus = cfven.get(doc.is_nota_credito() ? CFV_CODCAUSNC : CFV_CODCAUS);
if (codcaus.blank())
codcaus = doc.tipo().causale(); // Istanzia la causale del documento corrente...
}
return codcaus.blank() ? NULL : new TCausale(codcaus, year);
}
error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
// Compila la testata
{
@ -1098,26 +1136,13 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
}
numdoc.upper(); // Il numero documento e' uppercase!
// Istanzia la causale del documento corrente...
const TTipo_documento& tipo = doc.tipo();
TString4 codcaus = tipo.causale();
TToken_string key;
key.add(doc.get(DOC_TIPOCF));
key.add(doc.get(DOC_CODCF));
const TRectype& cfven = cache().get(LF_CFVEN, key);
const TString& caus_cli = cfven.get(doc.is_nota_credito() ? CFV_CODCAUSNC : CFV_CODCAUS);
if (caus_cli.not_empty())
codcaus = caus_cli; // La causale del cliente prevale su quella del tipo documento
_caus = new TCausale(codcaus,data_reg.year());
_righe_iva->set_caus(_caus);
if (!_caus->ok())
_caus = get_caus(doc, data_reg.year());
if (_caus == NULL || !_caus->ok())
{
_error = caus_error;
return _error;
}
_righe_iva->set_caus(_caus);
if (doc.in_valuta() && !_caus->valuta())
{
@ -1129,6 +1154,8 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
// reperisce la descrizione dal tipo documento e la completa con la data documento ed il
// numero documento
TString descr; doc.riferimento(descr);
const TTipo_documento& tipo = doc.tipo();
if (descr.empty()) descr = tipo.descrizione();
const TString8 rif = doc.get(DOC_NUMDOCRIF);
@ -1148,14 +1175,6 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
TRegistro& registro = _caus->reg();
const bool iva_mov = registro.ok();
/* Causa errori non desiderati
if (!iva_mov && !_caus->saldaconto())
{
_error = register_error;
return _error;
}
*/
long ult_prot = 0;
if (iva_mov)
{
@ -1254,7 +1273,7 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
}
// Mo' riempie il record della incornata (testata)
mov_rec.zero();
mov_rec.put(MOV_ANNOES,cod_es); mov_rec.put(MOV_NUMREG,numreg);
mov_rec.put(MOV_ANNOES,cod_es); mov_rec.put(MOV_NUMREG,numreg);
mov_rec.put(MOV_DATAREG,data_reg); mov_rec.put(MOV_DATACOMP,data_reg);
if (use_rif)
{
@ -1489,23 +1508,21 @@ error_type TContabilizzazione::compile_head_mov_re(TDocumento& doc)
numdoc.upper(); // Il numero documento e' uppercase!
// Istanzia la causale del documento corrente...
const TTipo_documento& tipo = doc.tipo();
const TString4 codcaus(tipo.causale());
_caus = new TCausale(codcaus, data_reg.year());
_righe_iva->set_caus(_caus);
_movimento->set_caus(_caus);
if (!_caus->ok() || _caus->iva() != nessuna_iva)
_caus = get_caus(doc, data_reg.year());
if (_caus == NULL || !_caus->ok() || _caus->iva() != nessuna_iva)
{
_error = causre_error;
return _error;
}
_righe_iva->set_caus(_caus);
_movimento->set_caus(_caus);
// per reperire il tipo documento ed il tipo movimento
// reperisce la descrizione dal tipo documento e la completa con la data documento ed il
// numero documento
TString descr; doc.riferimento(descr);
const TTipo_documento& tipo = doc.tipo();
if (descr.empty()) descr = tipo.descrizione();
const TString16 rif = doc.get(DOC_NUMDOCRIF);
@ -2433,7 +2450,7 @@ error_type TContabilizzazione::write_scadenze(TDocumento& doc)
{
const int tmov = _caus->tipomov();
const TString80 desc(head.get(MOV_DESCR));
const TString4 codcaus(_caus->codice());
const TString16 codcaus(_caus->codice());
const TString4 v(head.get(MOV_CODVAL));
const TDate d(head.get_date(MOV_DATACAM));
const real c(head.get_real(MOV_CAMBIO));
@ -2857,7 +2874,7 @@ error_type TContabilizzazione::write_all_re(TDocumento& doc, TMovimentoPN_VE & m
error_type TContabilizzazione::compile_head_anticipo(TDocumento& doc)
{
TString descr;
const TString4 codcaus = doc.tipo().caus_anticipo();
const TString16 codcaus = doc.tipo().caus_anticipo();
const TDate datareg = _movimento->curr().get_date(MOV_DATAREG);
if (!_caus->read(codcaus,datareg.year()))
@ -3534,7 +3551,7 @@ void TContabilizzazione::aggiorna_saldi(TSaldo_agg& saldo, TMovimentoPN& mv, boo
{
const TRectype& mov = mv.curr();
const TDate datareg = mov.get_date(MOV_DATAREG);
const TString4 codcaus = mov.get(MOV_CODCAUS);
const TString16 codcaus = mov.get(MOV_CODCAUS);
tiposal tsal = normale;
if (codcaus != _caus->codice()) // Should never happen, but ...

View File

@ -38,7 +38,7 @@ const TCausale& TCache_causali::causale(const TDocumento& doc)
key.add(doc.get(DOC_TIPOCF));
key.add(doc.get(DOC_CODCF));
const TRectype& cfven = cache().get(LF_CFVEN, key);
TString4 codcaus = cfven.get(fld);
TString16 codcaus = cfven.get(fld);
// Se non lo trova guarda sul tipo documento
if (codcaus.empty())