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:
parent
ddcb83323d
commit
404e925453
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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 ...
|
||||
|
@ -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())
|
||||
|
Loading…
x
Reference in New Issue
Block a user