Patch level :10.0

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :riportata gestione apertura/chiusura con trattazione dei cespiti alieni


git-svn-id: svn://10.65.10.50/trunk@16612 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2008-05-13 13:46:41 +00:00
parent e43f78e3ad
commit 06f1cf32e3
2 changed files with 72 additions and 6 deletions

View File

@ -68,8 +68,7 @@ int TForce_mov_qmask::calcola_ammo_eliminate()
{
const int ese = get_int(F_ESERCIZIO);
TString16 str;
str.format("%04d", ese);
TString4 str; str.format("%04d", ese);
const TRectype& curr_cce = cache().get("CCE", str);
if (curr_cce.get_bool("B3")) //possibilitá ammortamenti su parti eliminate (si prosegue solo se TRUE)

View File

@ -14,6 +14,7 @@
#include "catdi.h"
#include "cespi.h"
#include "salce.h"
#include "movce.h"
class TOpenesc_mask : public TAutomask
{
@ -324,8 +325,39 @@ void TOpenesc::incr_riv(TRectype& rec, const char* riv, const char* anni) const
}
}
static bool bad_alien(const TDate& dtalien, const TDate& fines)
{
if (!dtalien.ok() || dtalien == fines)
return true;
if (dtalien < fines && dtalien.is_end_month())
return true;
return false;
}
static bool get_last_cespi(int logicnum, const char* filter, int key,
const TString& idcespite, const char* field, TString& value)
{
bool ok = false;
TRelation rel(logicnum);
TRectype& rec = rel.curr();
rec.put("IDCESPITE", idcespite);
TCursor cur(&rel, filter, key, &rec, &rec);
const TRecnotype items = cur.items();
if (items > 0)
{
cur.freeze();
cur = items-1;
value = rec.get(field);
ok = value.full();
}
return ok;
}
void TOpenesc::test_alien(const TRectype& salce, const TDate& fines) const
{
// Il cespite e' senza elementi e senza valore -> Dovrebbe risultare alienato
if (null_fields(salce, SALCE_NUMELE, SALCE_CSTO, SALCE_RIV75, SALCE_RIV83,
SALCE_RIV90, SALCE_RIV91, SALCE_RIVGF, SALCE_RIVGC))
{
@ -334,11 +366,46 @@ void TOpenesc::test_alien(const TRectype& salce, const TDate& fines) const
cespiti.put(CESPI_IDCESPITE, idcespite);
if (cespiti.read() == NOERR)
{
const TDate dtcomp = cespiti.get_date(CESPI_DTCOMP);
if (dtcomp <= fines)
const TDate dtcomp = cespiti.get(CESPI_DTCOMP);
const TDate dtalien = cespiti.get(CESPI_DTALIEN);
// E' stato comprato tempo fa' ... ma ha una data di alienazione nulla o sospetta
if (dtcomp <= fines && bad_alien(dtalien, fines))
{
cespiti.put(CESPI_DTALIEN, fines);
cespiti.rewrite();
TDate alien2;
if (!alien2.ok())
{
// Cerca ultimo movimento di vendita/eliminazione
TString16 value;
if (get_last_cespi(LF_MOVCE, "SEGNO=\"-\"", 2,
idcespite, MOVCE_DTMOV, value))
{
const TDate dta(value);
if (dta <= fines)
alien2 = dta;
}
}
if (!alien2.ok())
{
// Cerca ultimo saldo non nullo
TString4 value;
if (get_last_cespi(LF_SALCE, "(TPSALDO=\"2\")&&(NUMELE!=\"0\")", 1,
idcespite, SALCE_CODES, value))
{
const int codes = atoi(value)+1;
TEsercizi_contabili esc;
TDate dti, dtf; esc.code2range(codes, dti, dtf);
if (dtf <= fines)
alien2 = dtf;
}
}
if (!alien2.ok())
alien2 = fines;
// Se ho trovato una data di alienazione diversa, allora la aggiorno
if (!dtalien.ok() || alien2 < dtalien)
{
cespiti.put(CESPI_DTALIEN, alien2);
cespiti.rewrite();
}
}
}
}