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 FIELD CHECKPREVCONT
END END
STRING F_CMSCNTFIELD 10
BEGIN
PROMPT 2 18 "Campo commesse per reperire la causale"
FLAGS "U"
FIELD CMSCNTFIELD
END
ENDPAGE ENDPAGE

View File

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

View File

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

View File

@ -505,6 +505,23 @@ real TDocumento::bolli(real & imp, int ndec, TTipo_importo t) const
return tot_bolli; 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 bool TDocumento::modificabile() const
{ {
const char stato_attuale = stato(); const char stato_attuale = stato();
@ -2460,7 +2477,7 @@ bool TDocumento::is_nota_credito() const
swap = TRUE; swap = TRUE;
else else
{ {
const TString4 codcaus(tipo().causale()); const TString16 codcaus(tipo().causale());
if (codcaus.not_empty()) if (codcaus.not_empty())
{ {
TLocalisamfile caus(LF_CAUSALI); TLocalisamfile caus(LF_CAUSALI);

View File

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

View File

@ -939,6 +939,7 @@ bool TContabilizzazione::load_parameters()
_spbo_cod = conf.get("SPBOCODIVA","ve"); _spbo_cod = conf.get("SPBOCODIVA","ve");
_check_prev_cont = conf.get_bool("CHECKPREVCONT","ve"); _check_prev_cont = conf.get_bool("CHECKPREVCONT","ve");
_fld_cms_cont = conf.get("CMSCNTFIELD","ve");
return true; return true;
} }
@ -1020,6 +1021,43 @@ long TContabilizzazione::doc_contabilized(const TDocumento& doc, bool anticipo)
return nreg; 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) error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
// Compila la testata // Compila la testata
{ {
@ -1098,26 +1136,13 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
} }
numdoc.upper(); // Il numero documento e' uppercase! numdoc.upper(); // Il numero documento e' uppercase!
// Istanzia la causale del documento corrente... _caus = get_caus(doc, data_reg.year());
const TTipo_documento& tipo = doc.tipo(); if (_caus == NULL || !_caus->ok())
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())
{ {
_error = caus_error; _error = caus_error;
return _error; return _error;
} }
_righe_iva->set_caus(_caus);
if (doc.in_valuta() && !_caus->valuta()) 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 // reperisce la descrizione dal tipo documento e la completa con la data documento ed il
// numero documento // numero documento
TString descr; doc.riferimento(descr); TString descr; doc.riferimento(descr);
const TTipo_documento& tipo = doc.tipo();
if (descr.empty()) descr = tipo.descrizione(); if (descr.empty()) descr = tipo.descrizione();
const TString8 rif = doc.get(DOC_NUMDOCRIF); const TString8 rif = doc.get(DOC_NUMDOCRIF);
@ -1148,14 +1175,6 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
TRegistro& registro = _caus->reg(); TRegistro& registro = _caus->reg();
const bool iva_mov = registro.ok(); const bool iva_mov = registro.ok();
/* Causa errori non desiderati
if (!iva_mov && !_caus->saldaconto())
{
_error = register_error;
return _error;
}
*/
long ult_prot = 0; long ult_prot = 0;
if (iva_mov) if (iva_mov)
{ {
@ -1254,7 +1273,7 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
} }
// Mo' riempie il record della incornata (testata) // Mo' riempie il record della incornata (testata)
mov_rec.zero(); 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); mov_rec.put(MOV_DATAREG,data_reg); mov_rec.put(MOV_DATACOMP,data_reg);
if (use_rif) if (use_rif)
{ {
@ -1489,23 +1508,21 @@ error_type TContabilizzazione::compile_head_mov_re(TDocumento& doc)
numdoc.upper(); // Il numero documento e' uppercase! numdoc.upper(); // Il numero documento e' uppercase!
// Istanzia la causale del documento corrente... // Istanzia la causale del documento corrente...
const TTipo_documento& tipo = doc.tipo();
const TString4 codcaus(tipo.causale());
_caus = new TCausale(codcaus, data_reg.year()); _caus = get_caus(doc, data_reg.year());
_righe_iva->set_caus(_caus); if (_caus == NULL || !_caus->ok() || _caus->iva() != nessuna_iva)
_movimento->set_caus(_caus);
if (!_caus->ok() || _caus->iva() != nessuna_iva)
{ {
_error = causre_error; _error = causre_error;
return _error; return _error;
} }
_righe_iva->set_caus(_caus);
_movimento->set_caus(_caus);
// per reperire il tipo documento ed il tipo movimento // per reperire il tipo documento ed il tipo movimento
// reperisce la descrizione dal tipo documento e la completa con la data documento ed il // reperisce la descrizione dal tipo documento e la completa con la data documento ed il
// numero documento // numero documento
TString descr; doc.riferimento(descr); TString descr; doc.riferimento(descr);
const TTipo_documento& tipo = doc.tipo();
if (descr.empty()) descr = tipo.descrizione(); if (descr.empty()) descr = tipo.descrizione();
const TString16 rif = doc.get(DOC_NUMDOCRIF); const TString16 rif = doc.get(DOC_NUMDOCRIF);
@ -2433,7 +2450,7 @@ error_type TContabilizzazione::write_scadenze(TDocumento& doc)
{ {
const int tmov = _caus->tipomov(); const int tmov = _caus->tipomov();
const TString80 desc(head.get(MOV_DESCR)); 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 TString4 v(head.get(MOV_CODVAL));
const TDate d(head.get_date(MOV_DATACAM)); const TDate d(head.get_date(MOV_DATACAM));
const real c(head.get_real(MOV_CAMBIO)); 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) error_type TContabilizzazione::compile_head_anticipo(TDocumento& doc)
{ {
TString descr; 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); const TDate datareg = _movimento->curr().get_date(MOV_DATAREG);
if (!_caus->read(codcaus,datareg.year())) 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 TRectype& mov = mv.curr();
const TDate datareg = mov.get_date(MOV_DATAREG); 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; tiposal tsal = normale;
if (codcaus != _caus->codice()) // Should never happen, but ... 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_TIPOCF));
key.add(doc.get(DOC_CODCF)); key.add(doc.get(DOC_CODCF));
const TRectype& cfven = cache().get(LF_CFVEN, key); 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 // Se non lo trova guarda sul tipo documento
if (codcaus.empty()) if (codcaus.empty())