6a84387e62
git-svn-id: svn://10.65.10.50/branches/R_10_00@23138 c028cbd2-c16b-5b4b-a496-9718f37d4682
360 lines
10 KiB
C++
Executable File
360 lines
10 KiB
C++
Executable File
#include <currency.h>
|
||
#include <defmask.h>
|
||
#include <modaut.h>
|
||
#include <recarray.h>
|
||
#include <relapp.h>
|
||
|
||
#include "in0.h"
|
||
#include "in0500a.h"
|
||
#include "inlib01.h"
|
||
#include "../cg/cg2103.h"
|
||
|
||
#include <mov.h>
|
||
|
||
///////////////////////////////////////////////////////////
|
||
// TImmissione_mask
|
||
///////////////////////////////////////////////////////////
|
||
|
||
class TImmissione_mask : public TIntra_mask
|
||
{
|
||
private:
|
||
bool _caus_valintra;
|
||
|
||
protected:
|
||
virtual short type_field() const { return F_TIPO_MOV; }
|
||
virtual int anno() const { return get_date(F_DATA_REG).year(); }
|
||
|
||
protected:
|
||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||
bool on_sheet_event(TSheet_field& s, TField_event e, int row);
|
||
bool on_sheet_field_event(TOperable_field& o, TField_event e, long jolly);
|
||
virtual bool on_key(KEY k);
|
||
|
||
void enable_valuta();
|
||
|
||
public:
|
||
TImmissione_mask();
|
||
virtual ~TImmissione_mask() { }
|
||
};
|
||
|
||
///////////////////////////////////////////////////////////
|
||
// Applicazione principale
|
||
///////////////////////////////////////////////////////////
|
||
|
||
class TImmissione_intra : public TRelation_application
|
||
{
|
||
TRelation* _rel;
|
||
TImmissione_mask* _msk;
|
||
|
||
protected:
|
||
virtual bool user_create();
|
||
virtual TRelation* get_relation() const { return _rel; }
|
||
virtual TMask* get_mask(int) { return _msk; }
|
||
virtual bool changing_mask(int mode) { return FALSE; }
|
||
virtual bool user_destroy();
|
||
virtual bool protected_record(TRectype & rec);
|
||
|
||
public:
|
||
};
|
||
|
||
TImmissione_intra& app() { return (TImmissione_intra&)main_app(); }
|
||
|
||
///////////////////////////////////////////////////////////
|
||
// TImmissione_mask
|
||
///////////////////////////////////////////////////////////
|
||
|
||
void TImmissione_mask::enable_valuta()
|
||
{
|
||
const bool gestval = _caus_valintra || tipo() == 'A';
|
||
enable(F_VALUTA, gestval);
|
||
enable(F_CAMBIO, gestval);
|
||
}
|
||
|
||
bool TImmissione_mask::on_key(KEY k)
|
||
{
|
||
if (k == K_CTRL + '+')
|
||
{
|
||
TSheet_field& s = sfield(F_RIGHE);
|
||
}
|
||
return TMask::on_key(k);
|
||
}
|
||
|
||
bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||
{
|
||
const short id = o.dlg();
|
||
switch (id)
|
||
{
|
||
case F_NUM_REG:
|
||
if (e == fe_modify || e == fe_init)
|
||
{
|
||
_caus_valintra = true; // Default value
|
||
if (app().has_module(CGAUT, CHK_DONGLE))
|
||
{
|
||
const TString& numreg = o.get();
|
||
if (numreg.full())
|
||
{
|
||
const TRectype& mov = cache().get(LF_MOV, numreg);
|
||
if (mov.empty())
|
||
{
|
||
if (e == fe_modify && !app().is_transaction())
|
||
warning_box(FR("Il movimento contabile %s non esiste."), (const char*)numreg);
|
||
}
|
||
else
|
||
{
|
||
set(F_NUM_DOC, mov.get(MOV_NUMDOC));
|
||
set(F_DATA_DOC, mov.get(MOV_DATADOC));
|
||
set(F_DATA_INT, mov.get(MOV_DATACOMPI));
|
||
|
||
const TString& caus = mov.get(MOV_CODCAUS);
|
||
const TCausale c(caus);
|
||
if (!c.intra())
|
||
return error_box(FR("La causale %s del movimento contabile %s non <20> intracomunitaria."),
|
||
(const char*)caus, (const char*)numreg);
|
||
_caus_valintra = c.valintra();
|
||
}
|
||
}
|
||
}
|
||
enable_valuta();
|
||
}
|
||
break;
|
||
case F_TIPO_MOV:
|
||
if (e == fe_init || e == fe_modify)
|
||
{
|
||
TSheet_field& s = sfield(F_RIGHE);
|
||
TMask& m = s.sheet_mask();
|
||
const bool acq = tipo() == 'A';
|
||
m.show(-GR_ACQUISTI, acq); // Mostra i gruppi di campi
|
||
m.show(-GR_CESSIONI, !acq); // consoni al tipo movimento
|
||
s.enable_column(F_PAESE_ORIG, acq);
|
||
s.set_column_header(F_PAESE, acq ? TR("Paese\nProv.") : TR("Paese\nDest."));
|
||
s.set_column_header(F_PROV, acq ? TR("Provincia\nDest.") : TR("Provincia\nOrig."));
|
||
|
||
TString key ; key << main_app().get_firm();
|
||
const bool req = frequenza(anno()) == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT");
|
||
CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL;
|
||
|
||
m.field(F_VALORE_STAT).check_type(chk);
|
||
m.field(F_CONSEGNA).check_type(chk);
|
||
m.field(F_TRASPORTO).check_type(chk);
|
||
|
||
chk = frequenza(anno()) == 'M' ? CHECK_REQUIRED : CHECK_NORMAL;
|
||
m.field(F_PAESE).check_type(chk);
|
||
m.field(F_PAESE_ORIG).check_type(chk);
|
||
m.field(F_PROV).check_type(chk);
|
||
|
||
s.force_update();
|
||
if (e == fe_modify)
|
||
enable_valuta();
|
||
}
|
||
break;
|
||
case F_CLIFO:
|
||
if (e == fe_modify)
|
||
{
|
||
TEdit_field& valu = efield(F_VALUTA);
|
||
if (valu.active())
|
||
{
|
||
const TRectype& curr = efield(F_CLIFO).browse()->cursor()->curr();
|
||
TString16 codval = curr.get("VALINTRA");
|
||
if (codval.empty())
|
||
codval = curr.get("CODVAL");
|
||
set(F_VALUTA, codval, TRUE);
|
||
}
|
||
}
|
||
break;
|
||
case F_VALUTA:
|
||
if (e == fe_init || e == fe_modify)
|
||
{
|
||
TEdit_field& cambio = efield(F_CAMBIO);
|
||
if (o.empty())
|
||
cambio.reset();
|
||
else
|
||
{
|
||
const TString& s = cache().get("%VAL", o.get(), "S4");
|
||
cambio.set(s);
|
||
}
|
||
TSheet_field& s = sfield(F_RIGHE);
|
||
const bool enable_val = is_true_value(get(F_VALUTA));
|
||
const int col = s.cid2index(F_AMM_VALUTA);
|
||
|
||
s.enable_column(col, enable_val);
|
||
const int rows = s.items();
|
||
for (int i = 0; i < rows; i++)
|
||
{
|
||
s.enable_cell(i, col, enable_val);
|
||
TToken_string & r = s.row(i);
|
||
if (!enable_val)
|
||
r.add("", col);
|
||
}
|
||
s.force_update();
|
||
}
|
||
break;
|
||
case F_TOT_DOC:
|
||
if (e == fe_close)
|
||
{
|
||
const real totdoc = get_real(F_TOT_DOC);
|
||
const real totdocimm = get_real(F_TOT_IMM);
|
||
|
||
if (totdoc != totdocimm)
|
||
{
|
||
const TString str_totdoc(totdoc.string());
|
||
return error_box(FR("Totale documento (%s) diverso dal totale documento immesso(%s)"), (const char *)str_totdoc, (const char *)totdocimm.string());
|
||
}
|
||
}
|
||
break;
|
||
case F_AMM_LIRE:
|
||
if (e == fe_modify)
|
||
{
|
||
TMask& m = o.mask();
|
||
TSheet_field& s = sfield(F_RIGHE);
|
||
TCurrency curr(real(o.get()));
|
||
|
||
const bool enable_val = is_true_value(get(F_VALUTA));
|
||
m.enable(F_AMM_VALUTA, enable_val);
|
||
if (!enable_val)
|
||
m.reset(F_AMM_VALUTA);
|
||
else
|
||
if (!o.empty() && m.get_real(F_AMM_VALUTA).is_zero())
|
||
{
|
||
curr.change_value(get(F_VALUTA), get_real(F_CAMBIO));
|
||
m.set(F_AMM_VALUTA, curr, TRUE);
|
||
}
|
||
s.update_row(s.selected());
|
||
s.force_update(s.selected());
|
||
}
|
||
break;
|
||
case F_AMM_VALUTA:
|
||
if (e == fe_modify)
|
||
{
|
||
TMask& m = o.mask();
|
||
if (!o.empty() && m.get_real(F_AMM_LIRE).is_zero())
|
||
{
|
||
TCurrency curr(real(o.get()), get(F_VALUTA), get_real(F_CAMBIO));
|
||
curr.change_to_firm_val();
|
||
m.set(F_AMM_LIRE, curr, TRUE);
|
||
}
|
||
}
|
||
break;
|
||
case F_RIGHE:
|
||
return on_sheet_event((TSheet_field&)o, e, int(jolly));
|
||
case R_RIEPILOGHI:
|
||
if (e == fe_button)
|
||
::genera_riepiloghi(tipo(), anno(), date2periodo(get_date(F_DATA_REG)));
|
||
break;
|
||
default:
|
||
if (id < F_DITTA && jolly == 1)
|
||
return on_sheet_field_event(o, e, jolly);
|
||
break;
|
||
}
|
||
return TIntra_mask::on_field_event(o, e, jolly);
|
||
}
|
||
|
||
bool TImmissione_mask::on_sheet_event(TSheet_field& s, TField_event e, int row)
|
||
{
|
||
if (e == se_notify_add)
|
||
{
|
||
const bool enable_val = is_true_value(get(F_VALUTA));
|
||
if (!enable_val)
|
||
{
|
||
const int col = s.cid2index(F_AMM_VALUTA);
|
||
row = s.items()-1;
|
||
s.enable_cell(row, col, enable_val);
|
||
s.force_update(row);
|
||
}
|
||
}
|
||
else
|
||
if (e == se_notify_modify)
|
||
{
|
||
real amm_lire;
|
||
int rows = s.items();
|
||
|
||
for (int i = 0; i < rows; i++)
|
||
{
|
||
TToken_string & r = s.row(i);
|
||
const real val = r.get(s.cid2index(F_AMM_LIRE));
|
||
|
||
amm_lire += val;
|
||
}
|
||
s.mask().set(F_TOT_IMM, amm_lire);
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
bool TImmissione_mask::on_sheet_field_event(TOperable_field& o, TField_event e, long jolly)
|
||
{
|
||
switch (o.dlg())
|
||
{
|
||
case F_NOMENCLATURA:
|
||
if (e == fe_modify)
|
||
{
|
||
TMask& m = o.mask();
|
||
if (!o.empty())
|
||
{
|
||
const TRectype& nom = cache().get("%NOC", o.get());
|
||
|
||
m.set(F_UMS, nom.get("S5"), 0x1);
|
||
|
||
bool req = frequenza(anno()) == 'M';
|
||
if (req) // Solo la frequenza mensile puo' obbligare
|
||
{
|
||
const char obb = nom.get_char("S4");
|
||
req = obb == 'E' || obb == tipo();
|
||
}
|
||
const CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL;
|
||
m.field(F_MASSA_KG).check_type(chk);
|
||
m.field(F_UMS).check_type(chk);
|
||
m.field(F_MASSA_UMS).check_type(chk);
|
||
}
|
||
else
|
||
{
|
||
m.set(F_UMS, "", 0x1);
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
TImmissione_mask::TImmissione_mask()
|
||
: TIntra_mask("in0500a")
|
||
{ }
|
||
|
||
|
||
///////////////////////////////////////////////////////////
|
||
// Applicazione principale
|
||
///////////////////////////////////////////////////////////
|
||
|
||
bool TImmissione_intra::protected_record(TRectype & rec)
|
||
{
|
||
const char tipo = rec.get_char("TIPOMOV");
|
||
const TDate d(rec.get("DATAREG"));
|
||
const int periodo = _msk->date2periodo(d);
|
||
|
||
bool prot = is_riepilogo(tipo, d.year(), periodo) &&
|
||
!yesno_box(TR("Attenzione: il movimento appartiene ad un riepilogo esistente.\nSi desidera modificarlo ugualmente?"));
|
||
_msk->enable(DLG_SAVEREC, !prot);
|
||
return prot;
|
||
}
|
||
|
||
bool TImmissione_intra::user_create()
|
||
{
|
||
open_files(LF_TABCOM, LF_TAB, LF_CLIFO, LF_MOV, LF_INTRA, LF_RINTRA, 0);
|
||
_rel = new TRelation(LF_INTRA);
|
||
_msk = new TImmissione_mask;
|
||
return TRUE;
|
||
}
|
||
|
||
bool TImmissione_intra::user_destroy()
|
||
{
|
||
delete _msk;
|
||
delete _rel;
|
||
return TRUE;
|
||
}
|
||
|
||
int in0500(int argc, char* argv[])
|
||
{
|
||
TImmissione_intra a;
|
||
a.run(argc, argv, TR("Movimenti INTRA"));
|
||
return 0;
|
||
} |