Patch level : 10.0 276

Files correlati     :  mg1.exe lv0.exe lv2.exe lv3.exe ve0.exe ve1.exe ve5.exe ve6.exe
Ricompilazione Demo : [ ]
Commento            :

Bug : 0001240

L'oggetto consegnato anno deve essere registrato e non ricalcolato tutte le volte, mentre il consegnato mese deve essere sempre ricalcolato.


git-svn-id: svn://10.65.10.50/trunk@18629 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2009-03-27 14:21:11 +00:00
parent 2c4eb14b5f
commit 71790b83b9
7 changed files with 64 additions and 40 deletions

View File

@ -163,7 +163,6 @@ void TRecmag_lavanderie::update()
const TString80 livello(get(CLIFOGIAC_LIVELLO));
const TDate oggi(TODAY);
TDate imese;
TDate ianno;
TEsercizi_contabili & esc = esercizi();
const TArticolo & artrec = cached_article(codart);
@ -171,16 +170,12 @@ void TRecmag_lavanderie::update()
{
imese = oggi;
imese.set_day(1);
ianno.set_month(1);
}
else
{
imese = esc.esercizio(anno).fine();
ianno = imese;
}
query="USE MOVMAG KEY 2\n";
query << "SELECT (TIPOCF='C')&&(STR(CODCF=" << codcf << "))&&(STR(CODINDSP=" << indsped << "))&&(STR(DATACOMP<=" << oggi << "))\n";
query << "SELECT (TIPOCF='C')&&(CODCF==" << codcf << ")&&(CODINDSP==" << indsped << ")&&(BETWEEN(DATACOMP," << imese.date2ansi() << "," << oggi.date2ansi() << "))\n";
query << "FROM ANNOES=" << anno << "\n";
query << "TO ANNOES=" << anno << "\n";
@ -200,23 +195,13 @@ void TRecmag_lavanderie::update()
{
const TString& codcaus = recrmag.get(RMOVMAG_CODCAUS).as_string();
const TCausale_magazzino & tcaus = cached_causale_magazzino(codcaus.full() ? codcaus : recmag.get(MOVMAG_CODCAUS).as_string());
int sgn_dotin = tcaus.sgn(s_dotin);
int sgn_dotod = tcaus.sgn(s_dotod);
int sgn_dottm = tcaus.sgn(s_dottm);
int sgn_consanno = tcaus.sgn(s_consanno);
int sgn_consmese = tcaus.sgn(s_consmese);
if (sgn_dotin != 0 || sgn_dotod != 0 || sgn_dottm != 0 || sgn_consanno != 0 || sgn_consmese != 0)
if (sgn_consmese != 0)
{
const TString4 um = recrmag.get(RMOVMAG_UM).as_string();
const real qta = ((TArticolo &)artrec).convert_to_um(recrmag.get(RMOVMAG_QUANT).as_real(), NULL,um);
_dotin += real(qta * sgn_dotin);
_dotod += real(qta * sgn_dotod);
_dottm += real(qta * sgn_dottm);
if (datareg >= ianno)
_consanno += real(qta * sgn_consanno);
if (datareg >= imese)
_consmese += real(qta * sgn_consmese);
_consmese += real(qta * sgn_consmese);
}
}
}
@ -224,10 +209,8 @@ void TRecmag_lavanderie::update()
int TRecmag_lavanderie::name2index(const char* fieldname) const
{
if (strcmp(fieldname, "CONSANNO") == 0)
return 0;
if (strcmp(fieldname, "CONSMESE") == 0)
return 1;
return 0;
return -1;
}
@ -271,10 +254,12 @@ const TString & TRecmag_lavanderie::get_str(const char* fieldname) const
((TRecmag_lavanderie *)this)->update();
switch (index)
{
case 0: return get_tmp_string() = _consanno.string();
case 1: return get_tmp_string() = _consmese.string();
case 0: return get_tmp_string() = _consmese.string();
default: break;
}
// rec.put(CLIFOGIAC_DOTOD, oldrec.get(CLIFOGIAC_DOTOD));
// rec.put(CLIFOGIAC_DOTIN, oldrec.get(CLIFOGIAC_DOTIN));
return TVariable_rectype::get_str(fieldname);
}
@ -415,7 +400,38 @@ int TArticolo_lavanderie::find_clifomag(int annoes, const char * livello, int fr
TRecord_array & TArticolo_lavanderie::clifomag(int annoes) const
{
((TArticolo_lavanderie*)this)->set_anno_lav(annoes > 0 ? annoes : esercizi().last_mag());
return body(LF_CLIFOGIAC);
TRecord_array & recarr = body(LF_CLIFOGIAC);
if (recarr.rows() == 0)
{
TString query;
const char * cod = (const char *) codice();
const int esprec = esercizi().pred(annoes);
query << "USE " << LF_CLIFOGIAC << "\n";
query << "FROM " << CLIFOGIAC_ANNOES << '=' << esprec << ' '
<< CLIFOGIAC_TIPOCF << '=' << _tipocf << ' '
<< CLIFOGIAC_CODCF << '=' << _codcf << ' '
<< CLIFOGIAC_INDSPED << '=' << _indsped << ' '
<< CLIFOGIAC_CODART << '=' << cod << '\n';
query << "TO " << CLIFOGIAC_ANNOES << '=' << esprec << ' '
<< CLIFOGIAC_TIPOCF << '=' << _tipocf << ' '
<< CLIFOGIAC_CODCF << '=' << _codcf << ' '
<< CLIFOGIAC_INDSPED << '=' << _indsped << ' '
<< CLIFOGIAC_CODART << '=' << cod << '\n';
TISAM_recordset recmag(query);
for (bool ok=recmag.move_first(); ok; ok=recmag.move_next())
{
const TRecmag_lavanderie oldrec(recmag.cursor()->curr());
const int r = recarr.add_row(oldrec);
TRecmag_lavanderie & rec = (TRecmag_lavanderie &) recarr[r];
rec.put(CLIFOGIAC_ANNOES, annoes);
::reset_clifogiac(rec, oldrec);
}
}
return recarr;
}
TArticolo_lavanderie::TArticolo_lavanderie(const char* codice, const char tipocf, const long codcf, const int indsped)

View File

@ -32,10 +32,6 @@ public:
class TRecmag_lavanderie : public TVariable_rectype
{
real _dotin;
real _dotod;
real _dottm;
real _consanno;
real _consmese;
long _update_time;
@ -53,6 +49,7 @@ public:
virtual TObject* dup() const;
TRecmag_lavanderie();
TRecmag_lavanderie(const TRecmag_lavanderie & rec) : TVariable_rectype(rec), _update_time(0L) {}
TRecmag_lavanderie(const TRectype & rec) : TVariable_rectype(rec), _update_time(0L) {}
virtual ~TRecmag_lavanderie() {}
};

View File

@ -32,6 +32,7 @@
#define CLIFOGIAC_DOTIN "DOTIN"
#define CLIFOGIAC_DOTOD "DOTOD"
#define CLIFOGIAC_DOTTM "DOTTM"
#define CLIFOGIAC_CONSANNO "CONSANNO"
#define CLIFOGIAC_NLABEL "NLABEL"
#define CLIFOGIAC_NDIST "NDIST"
#define CLIFOGIAC_SCARTI "SCARTI"

View File

@ -1,3 +1,3 @@
166
0
$clifogiac|0|0|742|0|Giacenze per cliente|||
$clifogiac|0|0|757|0|Giacenze per cliente|||

View File

@ -1,5 +1,5 @@
166
52
53
ANNOES|1|4|0|Codice esercizio
TIPOCF|1|1|0|Tipo <C>liente <F>ornitore
CODCF|3|6|0|Codice Cliente Fornitore
@ -40,6 +40,7 @@ SCORTAMIN|4|15|5|Scorta minima
DOTIN|4|15|5|Dotazione iniziale (lavanderie)
DOTOD|4|15|5|Dotazione odierna (lavanderie)
DOTTM|4|15|5|Dotazione temporanea (lavanderie)
CONSANNO|4|15|5|Consegnato anno (lavanderie)
USER1|4|15|5|campo definito dall'utente
USERVAL1|4|18|3|valore
USER2|4|15|5|campo definito dall'utente

View File

@ -751,6 +751,7 @@ const char * add_depcode(TString & codmagdep, const char * d);
const char * get_magcode(TString & codmagdep);
const char * get_depcode(TString & codmagdep);
bool riporta_ordinato();
void reset_clifogiac(TRectype & rec, const TRectype & oldrec);
#endif //__MGLIB_H

View File

@ -778,6 +778,7 @@ void TMov_mag::update_balances_clifo(TRectype & clifomagrec, const TSaldo_mag_cl
update_balance(clifomagrec, CLIFOGIAC_DOTIN, diff * (real)caus.sgn(s_dotin));
update_balance(clifomagrec, CLIFOGIAC_DOTOD, diff * (real)caus.sgn(s_dotod));
update_balance(clifomagrec, CLIFOGIAC_DOTTM, diff * (real)caus.sgn(s_dottm));
update_balance(clifomagrec, CLIFOGIAC_CONSANNO, diff * (real)caus.sgn(s_consanno));
update_balance(clifomagrec, CLIFOGIAC_USER1, diff * (real)caus.sgn(s_user1));
update_balance(clifomagrec, CLIFOGIAC_USER2, diff * (real)caus.sgn(s_user2));
update_balance(clifomagrec, CLIFOGIAC_USER3, diff * (real)caus.sgn(s_user3));
@ -861,7 +862,7 @@ struct TBalance_params
const char * codl;
};
bool reset_giac(const TRelation& rel, void* pJolly)
HIDDEN bool reset_giac(const TRelation& rel, void* pJolly)
{
TArticolo_giacenza & articolo = (TArticolo_giacenza &) rel.lfile().curr();
TBalance_params & p = *((TBalance_params *)pJolly);
@ -873,15 +874,9 @@ bool reset_giac(const TRelation& rel, void* pJolly)
return true;
}
bool reset_clifogiac(const TRelation& rel, void* pJolly)
void reset_clifogiac(TRectype & rec, const TRectype & oldrec)
{
TRectype & rec = rel.curr();
TBalance_params & p = *((TBalance_params *)pJolly);
TRectype oldrec(rec);
oldrec.put(CLIFOGIAC_ANNOES, p.codesprec);
if (oldrec.read(rel.lfile()) == NOERR)
if (!oldrec.empty())
{
const real acq = oldrec.get_real(CLIFOGIAC_ACQ) + oldrec.get_real(CLIFOGIAC_RIM);
const real valacq = oldrec.get_real(CLIFOGIAC_VALACQ) + oldrec.get_real(CLIFOGIAC_VALRIM);
@ -921,6 +916,19 @@ bool reset_clifogiac(const TRelation& rel, void* pJolly)
rec.zero(CLIFOGIAC_DOTOD);
rec.zero(CLIFOGIAC_DOTTM);
}
rec.zero(CLIFOGIAC_CONSANNO);
}
HIDDEN bool rel_reset_clifogiac(const TRelation& rel, void* pJolly)
{
TRectype & rec = rel.curr();
TBalance_params & p = *((TBalance_params *)pJolly);
TRectype oldrec(rec);
oldrec.put(CLIFOGIAC_ANNOES, p.codesprec);
if (oldrec.read(rel.lfile()) != NOERR)
oldrec.zero();
reset_clifogiac(rec, oldrec);
return rec.rewrite(rel.lfile()) == NOERR;
}
@ -962,7 +970,7 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz,
TCursor c(new TRelation(LF_CLIFOGIAC), filter);
msg.format(FR("Ricostruzione saldi esercizio %04d : azzeramento giacenze clienti..."), codes);
c.scan(reset_clifogiac, (void *) &p, msg);
c.scan(rel_reset_clifogiac, (void *) &p, msg);
// ricostruisce i saldi (ciclo sui movimenti)
bool ok = true;