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
|
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
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
|
@ -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 ...
|
||||||
|
@ -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())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user