Files correlati : Ricompilazione Demo : [ ] Commento :riporti dalla 5.0 git-svn-id: svn://10.65.10.50/trunk@16667 c028cbd2-c16b-5b4b-a496-9718f37d4682
192 lines
5.5 KiB
C++
Executable File
192 lines
5.5 KiB
C++
Executable File
#include <applicat.h>
|
|
#include <automask.h>
|
|
#include <progind.h>
|
|
#include <recarray.h>
|
|
#include <relation.h>
|
|
|
|
#include "calib01.h"
|
|
#include "ca2.h"
|
|
#include "ca2300a.h"
|
|
|
|
#include "../cg/cglib01.h"
|
|
|
|
#include "movana.h"
|
|
#include "rmovana.h"
|
|
#include "saldana.h"
|
|
|
|
//--------------------------------------------------------------------
|
|
// MASCHERA
|
|
//--------------------------------------------------------------------
|
|
class TRic_saldi_msk : public TAutomask
|
|
{
|
|
protected:
|
|
virtual bool on_field_event(TOperable_field& o, TField_event fe, long jolly) { return true; }
|
|
|
|
public:
|
|
TRic_saldi_msk();
|
|
virtual ~TRic_saldi_msk(){};
|
|
};
|
|
|
|
TRic_saldi_msk::TRic_saldi_msk() :TAutomask ("ca2300a") { }
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TAnal_mov_ric
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TAnal_mov_ric : public TAnal_mov
|
|
{
|
|
int _annoes;
|
|
|
|
public:
|
|
virtual int readat(TBaseisamfile& f, TRecnotype nrec, word lockop);
|
|
virtual int read(TBaseisamfile& f, word op, word lockop);
|
|
|
|
public:
|
|
void set_annoes(int anno) { _annoes = anno; }
|
|
TAnal_mov_ric(long numreg = 0) : TAnal_mov(numreg), _annoes(0) {}
|
|
};
|
|
|
|
int TAnal_mov_ric::readat(TBaseisamfile& f, TRecnotype nrec, word lockop)
|
|
{
|
|
const int err = TMultiple_rectype::readat(f, nrec, lockop);
|
|
|
|
kill_saldi();
|
|
load_saldi(false);
|
|
save_saldi(_annoes);
|
|
|
|
return err;
|
|
}
|
|
|
|
int TAnal_mov_ric::read(TBaseisamfile& f, word op, word lockop)
|
|
{
|
|
const int err = TMultiple_rectype::read(f, op, lockop);
|
|
|
|
kill_saldi();
|
|
load_saldi(false);
|
|
save_saldi(_annoes);
|
|
|
|
return err;
|
|
}
|
|
|
|
//--------------------------------------------------------------------
|
|
// APPLICAZIONE
|
|
//--------------------------------------------------------------------
|
|
|
|
class TRic_saldi_app : public TSkeleton_application
|
|
{
|
|
TRic_saldi_msk * _mask;
|
|
|
|
virtual const char * extra_modules() const {return "cm";} //deve funzionare anche per le commesse
|
|
|
|
protected:
|
|
virtual bool create();
|
|
virtual bool destroy();
|
|
virtual void main_loop();
|
|
static bool elabora_movimento(const TRelation& rel, void* pJolly) { return true; }
|
|
static bool remove_saldo(const TRelation& rel, void* pJolly);
|
|
|
|
public:
|
|
TRic_saldi_app() {}
|
|
virtual ~TRic_saldi_app() {}
|
|
};
|
|
|
|
bool TRic_saldi_app::create()
|
|
{
|
|
_mask = new TRic_saldi_msk;
|
|
return TSkeleton_application::create();
|
|
}
|
|
|
|
bool TRic_saldi_app::destroy()
|
|
{
|
|
delete _mask;
|
|
return TSkeleton_application::destroy();
|
|
}
|
|
|
|
bool TRic_saldi_app::remove_saldo(const TRelation& rel, void* pJolly)
|
|
{
|
|
const int anno = *(int*)pJolly;
|
|
TRectype& rec = rel.curr();
|
|
const int curr_anno = rec.get_int(SALDANA_ANNO);
|
|
//azzeratore dei saldi anno corrente
|
|
if (curr_anno == anno)
|
|
((TRelation &)rel).remove();
|
|
else //azzeratore dei preventivi/variazioni di altri anni
|
|
{
|
|
const real saldop = rec.get_real(SALDANA_SALDOP);
|
|
const real saldov = rec.get_real(SALDANA_SALDOV);
|
|
if (!saldop.is_zero() || !saldov.is_zero())
|
|
{
|
|
rec.zero(SALDANA_SALDOP);
|
|
rec.zero(SALDANA_SALDOV);
|
|
((TRelation&)rel).rewrite();
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void TRic_saldi_app::main_loop()
|
|
{
|
|
while (_mask->run() == K_ENTER)
|
|
{
|
|
//Il ricalcolo saldi e' diviso in 2 fasi:
|
|
//1 Azzeramento e ricalcolo dei saldi dei movimenti di tipo normale o temporaneo per il solo anno selezionato
|
|
//2 Azzeramento e ricalcolo dei saldi dei movimenti di tipo preventivo o variazione per TUTTI gli esercizi..
|
|
//..questo perche' i movimenti P e T possono essere "spalmati" su piu' anni
|
|
|
|
//AZZERAMENTO dei saldi normali e temporanei dell'anno selezionato, preventivi e variazione di tutti..
|
|
//..gli esercizi che trova
|
|
const int anno = _mask->get_int(F_ANNO);
|
|
TRelation rel_saldi(LF_SALDANA);
|
|
|
|
TCursor cur_saldi(&rel_saldi);
|
|
const long items_saldi = cur_saldi.items();
|
|
|
|
cur_saldi.scan(remove_saldo, (void*)&anno, "Azzeramento saldi...");
|
|
|
|
//FASE 1
|
|
//ricostruzione dei saldi normali e temporanei dell'anno selezionato
|
|
TEsercizi_contabili esc;
|
|
const TDate datainies = esc[anno].inizio();
|
|
const TDate datafines = esc[anno].fine();
|
|
TRelation rel_movana(LF_MOVANA);
|
|
TRectype darec(LF_MOVANA), arec(LF_MOVANA);
|
|
darec.put(MOVANA_DATACOMP, datainies);
|
|
arec.put(MOVANA_DATACOMP, datafines);
|
|
|
|
TString filter = "(TIPOMOV=='')||(TIPOMOV=='T')";
|
|
|
|
TCursor cur_movana(&rel_movana, filter, 2, &darec, &arec);
|
|
const long items = cur_movana.items();
|
|
//usa la scan dei TCursor,quindi niente progind e for,x' gia' nel metodo
|
|
if (items > 0)
|
|
{
|
|
TAnal_mov_ric* amr = new TAnal_mov_ric;
|
|
amr->set_annoes(anno);
|
|
rel_movana.lfile().set_curr(amr); //il record principale della rel e' un TMov_anal!!
|
|
cur_movana.scan(elabora_movimento, this, "Ricostruzione saldi consuntivi e temporanei...");
|
|
rel_movana.lfile().set_curr(new TRectype(LF_MOVANA)); //il record principale della rel e' un TMov_anal!!
|
|
}
|
|
|
|
//FASE 2
|
|
//ricostruzione saldi di preventivo spammati su piu' anni
|
|
filter = "(TIPOMOV='P')||(TIPOMOV='V')";
|
|
TCursor cur_movana_prev(&rel_movana, filter);
|
|
const long preventivi_items = cur_movana_prev.items();
|
|
if (preventivi_items > 0)
|
|
{
|
|
TAnal_mov_ric* amr = new TAnal_mov_ric;
|
|
amr->set_annoes(0);
|
|
rel_movana.lfile().set_curr(amr); //il record principale della rel e' un TMov_anal!!
|
|
cur_movana_prev.scan(elabora_movimento, this, "Ricostruzione saldi preventivi...");
|
|
rel_movana.lfile().set_curr(new TRectype(LF_MOVANA)); //il record principale della rel e' un TMov_anal!!
|
|
}
|
|
}
|
|
}
|
|
|
|
int ca2300(int argc, char* argv[])
|
|
{
|
|
TRic_saldi_app app;
|
|
app.run(argc, argv, "Ricostruzione saldi di analitica");
|
|
return 0;
|
|
}
|