2010-04-20 15:02:03 +00:00
|
|
|
|
#include <applicat.h>
|
|
|
|
|
#include <automask.h>
|
2010-04-21 15:41:43 +00:00
|
|
|
|
#include <config.h>
|
2010-04-21 11:00:13 +00:00
|
|
|
|
#include <progind.h>
|
|
|
|
|
#include <recarray.h>
|
2010-04-20 15:02:03 +00:00
|
|
|
|
#include <textset.h>
|
|
|
|
|
|
2010-04-21 11:00:13 +00:00
|
|
|
|
#include "../ca/calib01.h"
|
|
|
|
|
#include "../ca/calib02.h"
|
|
|
|
|
#include "../ca/movana.h"
|
2010-04-20 15:02:03 +00:00
|
|
|
|
#include "../ca/rmovana.h"
|
|
|
|
|
|
|
|
|
|
#include "ps1001.h"
|
|
|
|
|
#include "ps1001300a.h"
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
// TAutomask
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
class TVariazione_budget_mask : public TAutomask
|
|
|
|
|
{
|
2010-04-21 15:41:43 +00:00
|
|
|
|
bool _dirty;
|
|
|
|
|
|
2010-04-20 15:02:03 +00:00
|
|
|
|
protected:
|
|
|
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
2010-04-21 15:41:43 +00:00
|
|
|
|
|
|
|
|
|
int carica_rmovana();
|
|
|
|
|
bool one_checked() const; //controlla se nella colonna dei check ce ne <20> almeno 1 checkato (on_field)
|
|
|
|
|
void check_all(const bool checked); //checka-dechecka la colonna dei check (on_field)
|
2010-04-20 15:02:03 +00:00
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
TVariazione_budget_mask();
|
2010-04-21 15:41:43 +00:00
|
|
|
|
~TVariazione_budget_mask();
|
2010-04-20 15:02:03 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
TVariazione_budget_mask::TVariazione_budget_mask() :TAutomask ("ps1001300a")
|
|
|
|
|
{
|
2010-04-21 15:41:43 +00:00
|
|
|
|
//carica la causale che trova nel ditta.ini
|
|
|
|
|
TConfig ditta_ini(CONFIG_DITTA, "ps1001");
|
|
|
|
|
set(F_CODCAUS, ditta_ini.get("CodCaus"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TVariazione_budget_mask::~TVariazione_budget_mask()
|
|
|
|
|
{
|
|
|
|
|
//salva nel ditta.ini la causale sulla maschera
|
|
|
|
|
TConfig ditta_ini(CONFIG_DITTA, "ps1001");
|
|
|
|
|
ditta_ini.set("CodCaus", get(F_CODCAUS));
|
2010-04-20 15:02:03 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TVariazione_budget_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
|
|
|
{
|
|
|
|
|
switch (o.dlg())
|
|
|
|
|
{
|
|
|
|
|
case F_CODCMS:
|
|
|
|
|
if (e == fe_modify)
|
2010-04-21 15:41:43 +00:00
|
|
|
|
{
|
|
|
|
|
bool e = carica_rmovana() == 0;
|
|
|
|
|
o.enable(e);
|
|
|
|
|
enable(F_DESCRIZ, e);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case F_DATAINICMS:
|
|
|
|
|
case F_DATAFINECMS:
|
|
|
|
|
if (e == fe_modify)
|
|
|
|
|
_dirty = true;
|
|
|
|
|
break;
|
|
|
|
|
case DLG_CANCEL:
|
|
|
|
|
if (e == fe_button)
|
|
|
|
|
{
|
|
|
|
|
if (_dirty)
|
|
|
|
|
{
|
|
|
|
|
//chiede se salvare
|
|
|
|
|
}
|
|
|
|
|
enable(F_CODCMS);
|
|
|
|
|
enable(F_DESCRIZ);
|
|
|
|
|
sfield(F_RIGHE).destroy();
|
|
|
|
|
_dirty = false;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case DLG_CHECKALL:
|
|
|
|
|
if (e == fe_button)
|
|
|
|
|
{
|
|
|
|
|
check_all(!one_checked());
|
2010-04-20 15:02:03 +00:00
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2010-04-21 15:41:43 +00:00
|
|
|
|
//controlla sulla colonna delle spunte se almeno una <20> checkata
|
|
|
|
|
bool TVariazione_budget_mask::one_checked() const
|
|
|
|
|
{
|
|
|
|
|
TSheet_field& sf_righe = sfield(F_RIGHE);
|
|
|
|
|
|
|
|
|
|
FOR_EACH_SHEET_ROW(sf_righe, i, riga)
|
|
|
|
|
{
|
|
|
|
|
if (riga->get_char(0) > ' ')
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//checka-dechecka la colonna di spunte dello sheet
|
|
|
|
|
void TVariazione_budget_mask::check_all(const bool checked)
|
|
|
|
|
{
|
|
|
|
|
TSheet_field& sf_righe = sfield(F_RIGHE);
|
|
|
|
|
|
|
|
|
|
FOR_EACH_SHEET_ROW(sf_righe, i, riga)
|
|
|
|
|
riga->add(checked ? "X" : "", 0);
|
|
|
|
|
|
|
|
|
|
sf_righe.force_update();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int TVariazione_budget_mask::carica_rmovana()
|
2010-04-20 15:02:03 +00:00
|
|
|
|
{
|
|
|
|
|
TString query;
|
|
|
|
|
query << "USE RMOVANA KEY 4\n";
|
|
|
|
|
query << "SELECT ((MOVANA.TIPOMOV=\"P\")||(MOVANA.TIPOMOV=\"V\"))\n";
|
|
|
|
|
query << "JOIN MOVANA INTO NUMREG==NUMREG\n";
|
|
|
|
|
query << "FROM CODCMS=#CODCMS\n";
|
|
|
|
|
query << "TO CODCMS=#CODCMS\n";
|
|
|
|
|
//instanzio un TISAM_recordset sulle rmovana
|
|
|
|
|
TISAM_recordset rmovana(query);
|
2010-04-21 11:00:13 +00:00
|
|
|
|
const TString cms = get(F_CODCMS);
|
|
|
|
|
rmovana.set_var("#CODCMS", cms);
|
2010-04-20 15:02:03 +00:00
|
|
|
|
|
|
|
|
|
const long rmovana_items = rmovana.items();
|
2010-04-21 11:00:13 +00:00
|
|
|
|
TProgind pi(rmovana_items, "Generazione righe in corso...", true, true);
|
2010-04-20 15:02:03 +00:00
|
|
|
|
|
|
|
|
|
//recupero sheet e realtiva mashera di riga
|
|
|
|
|
TSheet_field& sf_righe = sfield(F_RIGHE);
|
|
|
|
|
TMask& msk = sf_righe.sheet_mask();
|
|
|
|
|
sf_righe.destroy();
|
|
|
|
|
|
|
|
|
|
//per ogni riga del recordset va ad aggiornare lo sheet sulla maschera (aggiunge la riga)
|
|
|
|
|
for (bool ok = rmovana.move_first(); ok; ok = rmovana.move_next())
|
|
|
|
|
{
|
2010-04-21 11:00:13 +00:00
|
|
|
|
if (!pi.addstatus(1))
|
|
|
|
|
break;
|
|
|
|
|
|
2010-04-20 15:02:03 +00:00
|
|
|
|
TToken_string& row = sf_righe.row(-1);
|
|
|
|
|
|
2010-04-21 11:00:13 +00:00
|
|
|
|
//chiave iniziale di riga
|
|
|
|
|
const TString& cdc = rmovana.get(RMOVANA_CODCCOSTO).as_string();
|
2010-04-21 15:41:43 +00:00
|
|
|
|
row.add(cdc, 1);
|
2010-04-21 11:00:13 +00:00
|
|
|
|
const TString& fase = rmovana.get(RMOVANA_CODFASE).as_string();
|
2010-04-21 15:41:43 +00:00
|
|
|
|
row.add(fase, 2);
|
2010-04-21 11:00:13 +00:00
|
|
|
|
const TString& conto = rmovana.get(RMOVANA_CODCONTO).as_string();
|
2010-04-21 15:41:43 +00:00
|
|
|
|
row.add(conto, 3);
|
2010-04-21 11:00:13 +00:00
|
|
|
|
|
|
|
|
|
//date competenza iniziale e finale
|
|
|
|
|
const TDate datacomp = rmovana.get("MOVANA."MOVANA_DATACOMP).as_date();
|
|
|
|
|
TDate datafcomp = rmovana.get("MOVANA."MOVANA_DATAFCOMP).as_date();
|
|
|
|
|
const bool autofcomp = rmovana.get("MOVANA."MOVANA_AUTOFCOMP).as_bool();
|
|
|
|
|
//caso cazzuto della scadenza con la fine della commessa (come nella stampa bilancio commessa)
|
|
|
|
|
if (autofcomp)
|
|
|
|
|
{
|
|
|
|
|
const TRectype& rec_commesse = cache().get(LF_COMMESSE, cms);
|
|
|
|
|
//data del cazzo che serve per non rovinare datacomp, che <20> la data sulla riga, non quella iniziale di cms
|
|
|
|
|
TDate datainicms;
|
|
|
|
|
ca_durata_commessa(rec_commesse, datainicms, datafcomp);
|
|
|
|
|
}
|
|
|
|
|
if (!datafcomp.ok())
|
|
|
|
|
datafcomp = datacomp;
|
|
|
|
|
|
2010-04-21 15:41:43 +00:00
|
|
|
|
row.add(datacomp, 4);
|
|
|
|
|
row.add(autofcomp ? "X" : "", 5);
|
|
|
|
|
row.add(datafcomp, 6);
|
2010-04-21 11:00:13 +00:00
|
|
|
|
|
|
|
|
|
//costo o ricavo? all'indbil l'ardua sentenza!
|
|
|
|
|
TAnal_bill bill(conto, cdc, cms, fase);
|
|
|
|
|
const int indbil = bill.indicatore_bilancio();
|
|
|
|
|
const char* str_indbil = indbil == 3 ? "C" : "R";
|
2010-04-21 15:41:43 +00:00
|
|
|
|
row.add(str_indbil, 7);
|
2010-04-20 15:02:03 +00:00
|
|
|
|
|
|
|
|
|
real valore = rmovana.get(RMOVANA_IMPORTO).as_real();
|
|
|
|
|
const char sezione = rmovana.get(RMOVANA_SEZIONE).as_string()[0];
|
|
|
|
|
TImporto importo(sezione, valore);
|
2010-04-21 11:00:13 +00:00
|
|
|
|
importo.normalize(indbil == 3 ? 'D' : 'A');
|
2010-04-20 15:02:03 +00:00
|
|
|
|
valore = importo.valore();
|
2010-04-21 15:41:43 +00:00
|
|
|
|
row.add(valore.string(), 8);
|
2010-04-21 11:00:13 +00:00
|
|
|
|
|
2010-04-21 15:41:43 +00:00
|
|
|
|
//recupera il saldo finale consuntivo! in base alla chiave cms/cdc/fase/conto e lo mette nel campo consuntivo
|
2010-04-21 11:00:13 +00:00
|
|
|
|
const TDate dataini, datafin;
|
|
|
|
|
const TSaldanal& saldanal = ca_saldo(bill, dataini, datafin, _saldanal_consuntivo | _saldanal_ultima_imm);
|
|
|
|
|
TImporto saldo_finale = saldanal._fin;
|
|
|
|
|
saldo_finale.normalize(indbil == 3 ? 'D' : 'A');
|
|
|
|
|
const real saldo_finale_valore = saldo_finale.valore();
|
2010-04-21 15:41:43 +00:00
|
|
|
|
row.add(saldo_finale_valore.string(), 9);
|
2010-04-21 11:00:13 +00:00
|
|
|
|
|
|
|
|
|
//completa la riga
|
2010-04-21 15:41:43 +00:00
|
|
|
|
row.add(rmovana.get(RMOVANA_DESCR).as_string(), 10);
|
|
|
|
|
row.add(rmovana.get(RMOVANA_NUMREG).as_int(), 11);
|
|
|
|
|
row.add(rmovana.get(RMOVANA_NUMRIG).as_int(), 12);
|
2010-04-21 11:00:13 +00:00
|
|
|
|
const TString& tipomov = rmovana.get("MOVANA."MOVANA_TIPOMOV).as_string();
|
2010-04-21 15:41:43 +00:00
|
|
|
|
row.add(tipomov, 13);
|
2010-04-21 11:00:13 +00:00
|
|
|
|
|
|
|
|
|
//disabilita tutti i campi ma non l'intera riga, perch<63> deve poter cliccare sul numero riga..
|
|
|
|
|
//..per procedere alle operazioni di pareggio
|
2010-04-21 15:41:43 +00:00
|
|
|
|
//if (tipomov != "V")
|
|
|
|
|
//sf_righe.disable_cell(sf_righe.items() - 1, -1);
|
2010-04-20 15:02:03 +00:00
|
|
|
|
}
|
|
|
|
|
sf_righe.force_update();
|
2010-04-21 15:41:43 +00:00
|
|
|
|
|
|
|
|
|
return sf_righe.items();
|
2010-04-20 15:02:03 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////
|
|
|
|
|
// TSkeleton_application
|
|
|
|
|
///////////////////////////////////////
|
|
|
|
|
class TVariazione_budget : public TSkeleton_application
|
|
|
|
|
{
|
|
|
|
|
virtual bool check_autorization() const { return false; }
|
|
|
|
|
virtual const char * extra_modules() const { return "ca"; }
|
|
|
|
|
|
|
|
|
|
TVariazione_budget_mask* _msk;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
virtual bool create();
|
|
|
|
|
virtual bool destroy();
|
|
|
|
|
virtual void main_loop();
|
|
|
|
|
|
|
|
|
|
TVariazione_budget() {};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool TVariazione_budget::create()
|
|
|
|
|
{
|
|
|
|
|
_msk = new TVariazione_budget_mask();
|
|
|
|
|
return TSkeleton_application::create();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TVariazione_budget::destroy()
|
|
|
|
|
{
|
|
|
|
|
delete _msk;
|
|
|
|
|
return TApplication::destroy();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TVariazione_budget::main_loop()
|
|
|
|
|
{
|
|
|
|
|
KEY tasto;
|
|
|
|
|
tasto = _msk->run();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ps1001300 (int argc, char* argv[])
|
|
|
|
|
{
|
|
|
|
|
TVariazione_budget main_app;
|
|
|
|
|
main_app.run(argc, argv, TR("Variazione budget"));
|
|
|
|
|
return true;
|
|
|
|
|
}
|