Patch level : 10.0 patch 810
Files correlati : ve0.exe ve6.exe Ricompilazione Demo : [ ] Commento Bug 0001692: Gruppo Belegotti è richiesto l'inserimento di un minimo fatturabile, i documenti che anche raggruppati non raggiungeranno detto limite non saranno processati e quindi non cambieranno di stato. E' richiesto che l'importo minimo effetto diventi una dato societario anzichè a livello di cliente. La funzionalità è stata inserita nelle elaborazioni differite e non in quelle interattive, poichè in quest ultime non aveva senso e in modo da permettere di elaborare comunque un documento. git-svn-id: svn://10.65.10.50/branches/R_10_00@20909 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
229d3ac39e
commit
66027944da
@ -366,7 +366,7 @@ BEGIN
|
||||
CHECKTYPE NORMAL
|
||||
HELP "Codice spesa per contributo plastica"
|
||||
GROUP 7
|
||||
MESSAGE EMPTY ENABLE,F_CONFPAL
|
||||
MESSAGE EMPTY ENABLE,F_CONFPLA
|
||||
MESSAGE DISABLE,F_CONFPLA|"X",F_CONFPLA
|
||||
END
|
||||
|
||||
|
@ -80,6 +80,21 @@ BEGIN
|
||||
PROMPT 2 14 "Utilizzo lettere d'intento"
|
||||
FIELD USELETTERE
|
||||
END
|
||||
|
||||
CURRENCY F_IMPMINFAT 10
|
||||
BEGIN
|
||||
PROMPT 2 15 "Importo minimo fatture "
|
||||
FIELD IMPMINFAT
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
CURRENCY F_IMPMINEFF 10
|
||||
BEGIN
|
||||
PROMPT 2 16 "Importo minimo per effetti "
|
||||
FIELD IMPMINEFF
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
@ -28,8 +28,8 @@ bool TFatturazione_bolle_app::process(TIndwin& iw, TElaborazione & eld,
|
||||
{
|
||||
// Crea documenti di output
|
||||
TLista_documenti dout;
|
||||
bool ok = eld.elabora(din, dout, data_elab);
|
||||
if (ok)
|
||||
bool ok = true;
|
||||
if (eld.elabora(din, dout, data_elab))
|
||||
{
|
||||
TString msg;
|
||||
msg << din.items() << TR(" documenti raggruppati in ") << dout.items();
|
||||
@ -46,12 +46,7 @@ bool TFatturazione_bolle_app::process(TIndwin& iw, TElaborazione & eld,
|
||||
else
|
||||
ok = error_box("Errore %d durante l'aggiornamento dei documenti da raggruppare!", err);
|
||||
}
|
||||
else
|
||||
{
|
||||
const long codcli = din[0].get_long(DOC_CODCF);
|
||||
ok = error_box("I documenti relativi al cliente %ld non sono stati elaborati.",
|
||||
codcli);
|
||||
}
|
||||
else
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
@ -581,7 +581,7 @@ void TGenerazioneEffetti_app::generate()
|
||||
}
|
||||
// Ogni elemento di _group_array è una TToken_string. Ogni elemento della TToken_string contiene
|
||||
// la chiave per identificare il documento che fa parte di quel raggruppamento
|
||||
tot += gen_eff.group_bills(_group_array);// Setta l'elenco dei documenti per generare effetti raggruppati
|
||||
tot += gen_eff.group_bills(_group_array, false);// Setta l'elenco dei documenti per generare effetti raggruppati
|
||||
|
||||
if (tot > 0L)
|
||||
message_box("Totale effetti generati: %ld", tot);
|
||||
|
@ -68,6 +68,7 @@
|
||||
#define F_CONTROEURO_E 108
|
||||
#define F_LINGUA_ONLY 109
|
||||
#define F_USELETTERE 110
|
||||
#define F_IMPMINFAT 111
|
||||
|
||||
|
||||
// Campi per ve0200c.uml
|
||||
@ -164,6 +165,7 @@
|
||||
#define F_DESESENZ 143
|
||||
#define F_SPADD 144
|
||||
#define F_MAXADD 145
|
||||
#define F_IMPMINEFF 146
|
||||
|
||||
// Campi per ve0200g.uml
|
||||
#define F_EXPLODEDB 101
|
||||
|
10
ve/velib04.h
10
ve/velib04.h
@ -243,6 +243,7 @@ class TFatturazione_bolle : public TElaborazione // velib04a
|
||||
{
|
||||
TToken_string _cod_desc, _lista_campi, _rowsort;
|
||||
bool _cambia_codice;
|
||||
real _impminfat;
|
||||
|
||||
protected:
|
||||
virtual void campi_raggruppamento_righe(TToken_string& campi_riga) const;
|
||||
@ -267,7 +268,7 @@ public:
|
||||
bool change_clifo() { return get_bool("B14"); }
|
||||
|
||||
TFatturazione_bolle(const char* cod);
|
||||
TFatturazione_bolle(const TRectype& rec) : TElaborazione(rec) { }
|
||||
TFatturazione_bolle(const TRectype& rec);
|
||||
virtual ~TFatturazione_bolle() { }
|
||||
};
|
||||
|
||||
@ -540,6 +541,7 @@ class TGenerazione_effetti : public TElaborazione // velib04c
|
||||
long _total_bills; // Totale effetti generati
|
||||
bool _can_write; // se true e' abilitata la scrittura. Non appena rileva un errore rimane a false for this instance
|
||||
TBit_array _valid_array; // array dei tipi di pagamento validi per la generazione di effetti
|
||||
real _impmin;
|
||||
|
||||
TLocalisamfile *_efffile, // file effetti
|
||||
*_refffile, // file righe di effetti
|
||||
@ -557,11 +559,11 @@ protected:
|
||||
// Restituisce true se il tipo di pagamento passato e' valido per generare l'effetto
|
||||
bool valid_type(int) const ;
|
||||
// Genera l'effetto
|
||||
void generate_bill(TDocumento&);
|
||||
void generate_bill(TDocumento& doc, bool interattivo);
|
||||
// Istanzia il pagamento corrente
|
||||
void calc_pagamento(TDocumento&);
|
||||
// Scrive i record array degli effetti raggruppati
|
||||
error_type write_groups();
|
||||
error_type write_groups(bool interattivo);
|
||||
// Cambia lo stato dei gruppi di documenti raggruppati in effetti
|
||||
error_type change_group_status(TDocumento&, TAssoc_array&);
|
||||
// Cambia lo stato del documento
|
||||
@ -573,7 +575,7 @@ public:
|
||||
const TDate& data_elab, bool interattivo = false);
|
||||
|
||||
// Effettua il raggruppamento vero e proprio degli effetti (solo se ci sono elementi nell'assoc_array passato)
|
||||
long group_bills(TAssoc_array&);
|
||||
long group_bills(TAssoc_array& group_array, bool interattivo);
|
||||
long bills() const { return _total_bills; }
|
||||
// void set_group(TAssoc_array& a) { _group_array = a; }
|
||||
void set_writeable(const bool b) { _can_write = b; }
|
||||
|
@ -12,10 +12,25 @@ TFatturazione_bolle::TFatturazione_bolle(const char* cod)
|
||||
: TElaborazione(cod)
|
||||
{
|
||||
TString80 name; name.format("AGGFLD(%s)", cod);
|
||||
|
||||
_lista_campi = ini_get_string(CONFIG_DITTA, "ve", name);
|
||||
|
||||
name.format("ROWSORT(%s)", cod);
|
||||
_rowsort = ini_get_string(CONFIG_DITTA, "ve", name);
|
||||
_impminfat = real(ini_get_string(CONFIG_DITTA, "ve", "IMPMINFAT"));
|
||||
}
|
||||
|
||||
TFatturazione_bolle::TFatturazione_bolle(const TRectype& rec)
|
||||
: TElaborazione(rec)
|
||||
{
|
||||
TString cod(rec.get("CODTAB"));
|
||||
TString80 name; name.format("AGGFLD(%s)", cod);
|
||||
|
||||
_lista_campi = ini_get_string(CONFIG_DITTA, "ve", name);
|
||||
|
||||
name.format("ROWSORT(%s)", cod);
|
||||
_rowsort = ini_get_string(CONFIG_DITTA, "ve", name);
|
||||
_impminfat = real(ini_get_string(CONFIG_DITTA, "ve", "IMPMINFAT"));
|
||||
}
|
||||
|
||||
void TFatturazione_bolle::tipi_validi(TToken_string& tipi) const
|
||||
@ -358,6 +373,7 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
|
||||
TWait_cursor hourglass;
|
||||
TToken_string campi_doc(128); // Lista di campi che devono essere uguali
|
||||
TBit_array closed;
|
||||
TArray docrefs;
|
||||
|
||||
campi_raggruppamento(campi_doc);
|
||||
|
||||
@ -514,19 +530,34 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
|
||||
campione.put(DOC_TIPOCF, orig_t);
|
||||
campione.put(DOC_CODCF, orig_cod);
|
||||
}
|
||||
if (!raggruppa(campione, doc_out[od]) && doc_out[od].physical_rows() == 0)
|
||||
if ((!raggruppa(campione, doc_out[od]) && doc_out[od].physical_rows() == 0))
|
||||
doc_out.destroy(od);
|
||||
else
|
||||
doc_out[od].set_riga_esenzione();
|
||||
|
||||
campione.flush_rows();
|
||||
TBit_array * row = (TBit_array *) docrefs.objptr(od);
|
||||
|
||||
if (row == NULL)
|
||||
{
|
||||
row = new TBit_array;
|
||||
docrefs.add(row, od);
|
||||
}
|
||||
row->set(id);
|
||||
}
|
||||
|
||||
post_process_input(doc_in);
|
||||
int tot = doc_out.items();
|
||||
const int tot = doc_out.items();
|
||||
const TString4 codnum(codice_numerazione_finale());
|
||||
real impminfat;
|
||||
|
||||
for (int i = 0; i < tot; i++) // Forza tipo e numerazione documento.
|
||||
if (!interattivo && tot > 0)
|
||||
{
|
||||
impminfat = doc_out[0].clifor().vendite().get_real(CFV_IMPMINFAT);
|
||||
if (impminfat == ZERO)
|
||||
impminfat = _impminfat;
|
||||
}
|
||||
|
||||
for (int i = tot - 1; i >=0; i--) // Forza tipo e numerazione documento.
|
||||
{
|
||||
TDocumento& d = doc_out[i];
|
||||
d.put(DOC_CODNUM, codnum);
|
||||
@ -560,13 +591,31 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
|
||||
d.sort_rows(_rowsort);
|
||||
}
|
||||
post_process(doc_out, doc_in);
|
||||
tot = doc_out.items();
|
||||
for (int i = 0; i < tot; i++) // Forza tipo e numerazione documento.
|
||||
for (int i = tot - 1; i >=0; i--) // Forza tipo e numerazione documento.
|
||||
{
|
||||
TDocumento& d = doc_out[i];
|
||||
|
||||
if (!interattivo && impminfat > ZERO && d.totale_doc() <= impminfat)
|
||||
{
|
||||
doc_out.destroy(i);
|
||||
|
||||
TBit_array & row = (TBit_array &) docrefs[i];
|
||||
|
||||
for (int j = row.last_one(); j >= row.first_one(); j--)
|
||||
if (row[j])
|
||||
doc_in.destroy(j);
|
||||
docrefs.destroy(i);
|
||||
}
|
||||
else
|
||||
d.put("FATID", 0);
|
||||
}
|
||||
for (int id = 0; id < doc_in.items(); id++)
|
||||
{
|
||||
TDocumento& d = doc_in[id];
|
||||
|
||||
return tot > 0;
|
||||
d.flush_rows();
|
||||
}
|
||||
|
||||
return doc_out.items() > 0;
|
||||
}
|
||||
|
||||
|
@ -37,6 +37,7 @@ TGenerazione_effetti::TGenerazione_effetti(const char* cod)
|
||||
_can_write = TRUE;
|
||||
_error = no_error;
|
||||
_total_bills = 0L;
|
||||
_impmin = real(ini_get_string(CONFIG_DITTA, "ve", "IMPMINEFF"));
|
||||
}
|
||||
|
||||
TGenerazione_effetti::TGenerazione_effetti(const TRectype& rec)
|
||||
@ -60,6 +61,7 @@ TGenerazione_effetti::TGenerazione_effetti(const TRectype& rec)
|
||||
_can_write = TRUE;
|
||||
_error = no_error;
|
||||
_total_bills = 0L;
|
||||
_impmin = real(ini_get_string(CONFIG_DITTA, "ve", "IMPMINEFF"));
|
||||
}
|
||||
|
||||
TGenerazione_effetti::~TGenerazione_effetti()
|
||||
@ -161,7 +163,7 @@ error_type TGenerazione_effetti::change_group_status(TDocumento& doc, TAssoc_arr
|
||||
return _error;
|
||||
}
|
||||
|
||||
error_type TGenerazione_effetti::write_groups()
|
||||
error_type TGenerazione_effetti::write_groups(bool interattivo)
|
||||
{
|
||||
const int items = _effetti_array.items();
|
||||
int err = NOERR;
|
||||
@ -180,9 +182,15 @@ error_type TGenerazione_effetti::write_groups()
|
||||
TString key;
|
||||
|
||||
key.format("%c|%ld", tipocf, codcf);
|
||||
const real impmin(cache().get(LF_CFVEN, key, CFV_IMPMINEFF));
|
||||
|
||||
if (importo >= impmin)
|
||||
real impmin;
|
||||
|
||||
if (!interattivo)
|
||||
{
|
||||
impmin = real(cache().get(LF_CFVEN, key, CFV_IMPMINEFF));
|
||||
if (impmin == ZERO)
|
||||
impmin = _impmin;
|
||||
}
|
||||
if (importo >= impmin)
|
||||
err = effetto.write(*_efffile); // Pensa a tutto lui per rinumerare...
|
||||
else
|
||||
_effetti_array.destroy(i);
|
||||
@ -246,7 +254,7 @@ error_type TGenerazione_effetti::write_groups()
|
||||
// per l'effetto 5 vale la fattura 3.
|
||||
// Questo e' quanto ho appreso (Hope I'm right...) ;-)
|
||||
|
||||
long TGenerazione_effetti::group_bills(TAssoc_array& group_array)
|
||||
long TGenerazione_effetti::group_bills(TAssoc_array& group_array, bool interattivo)
|
||||
{
|
||||
// Bail out if there aren't items...
|
||||
const int items = group_array.items();
|
||||
@ -478,7 +486,7 @@ long TGenerazione_effetti::group_bills(TAssoc_array& group_array)
|
||||
{
|
||||
xvtil_statbar_set("Scrittura effetti raggruppati in corso...");
|
||||
do_events();
|
||||
if (write_groups() == no_error)
|
||||
if (write_groups(interattivo) == no_error)
|
||||
{
|
||||
tot = _effetti_array.items();
|
||||
change_group_status(doc, group_array);
|
||||
@ -543,7 +551,7 @@ void TGenerazione_effetti::calc_pagamento(TDocumento& doc)
|
||||
|
||||
}
|
||||
|
||||
void TGenerazione_effetti::generate_bill(TDocumento& doc) // bill in inglese significa anche effetto eheheh ;-)
|
||||
void TGenerazione_effetti::generate_bill(TDocumento& doc, bool interattivo) // bill in inglese significa anche effetto eheheh ;-)
|
||||
{
|
||||
// That's my JOB!
|
||||
// Ogni rata della fattura (si parla di effetti attivi per ora) genera 1 effetto.
|
||||
@ -662,7 +670,15 @@ void TGenerazione_effetti::generate_bill(TDocumento& doc) // bill in inglese sig
|
||||
|
||||
TString8 key;
|
||||
key.format("%c|%ld", tipocf, codcf);
|
||||
const real impmin(cache().get(LF_CFVEN, key, CFV_IMPMINEFF));
|
||||
real impmin;
|
||||
|
||||
if (!interattivo)
|
||||
{
|
||||
impmin = real(cache().get(LF_CFVEN, key, CFV_IMPMINEFF));
|
||||
if (impmin == ZERO)
|
||||
impmin = _impmin;
|
||||
}
|
||||
|
||||
if (importo >= impmin)
|
||||
{
|
||||
if (valuta)
|
||||
@ -708,7 +724,7 @@ bool TGenerazione_effetti::elabora(TLista_documenti& doc_in, TLista_documenti& d
|
||||
xvtil_statbar_set(msg);
|
||||
do_events();
|
||||
|
||||
generate_bill(doc); // Genera gli effetti corrispondenti
|
||||
generate_bill(doc, interattivo); // Genera gli effetti corrispondenti
|
||||
if (!good())
|
||||
display_error(doc);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user