campo-sirio/ca/ca2300.cpp
luca 0379617a17 Patch level :10.0
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :riportata nuova gestione saldi mozzarella dalla 5.0 e report ristretti per il nostro amato adolf!


git-svn-id: svn://10.65.10.50/trunk@16547 c028cbd2-c16b-5b4b-a496-9718f37d4682
2008-04-28 09:37:19 +00:00

168 lines
4.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) {}
};
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)
{
((TRelation &)rel).remove();
return true;
}
void TRic_saldi_app::main_loop()
{
while (_mask->run() == K_ENTER)
{
const int anno = _mask->get_int(F_ANNO);
TRelation rel_saldi(LF_SALDANA);
TRectype rec_saldi(rel_saldi.curr());
rec_saldi.put(SALDANA_ANNO, anno);
TCursor cur_saldi(&rel_saldi, "", 1, &rec_saldi, &rec_saldi);
const long items_saldi = cur_saldi.items();
if (items_saldi > 0)
cur_saldi.scan(remove_saldo, this, "Azzeramento saldi...");
TRelation rel_movana(LF_MOVANA);
TString filter; filter.format("ANNOES==%04d", anno);
TCursor cur_movana(&rel_movana, filter, 1);
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...");
rel_movana.lfile().set_curr(new TRectype(LF_MOVANA)); //il record principale della rel e' un TMov_anal!!
}
//ricostruzione saldi di preventivo spammati su piu' anni
TEsercizi_contabili esc;
const TDate datainies = esc[anno].inizio();
filter.format("((TIPOMOV='P')||(TIPOMOV='V'))&&(NUM(ANSI(DATAFCOMP))>=%ld)", datainies.date2ansi());
TRectype beginning(LF_MOVANA), ending(LF_MOVANA);
ending.put(MOVANA_ANNOES, anno - 1);
cur_movana.setregion(beginning, ending);
cur_movana.setfilter(filter, true);
const long preventivi_items = cur_movana.items();
if (preventivi_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 preventivi precedenti...");
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;
}