6fce3dd611
Files correlati : Ricompilazione Demo : [ ] Commento : Riportate le patch fino alla 172 git-svn-id: svn://10.65.10.50/trunk@12526 c028cbd2-c16b-5b4b-a496-9718f37d4682
384 lines
11 KiB
C++
Executable File
384 lines
11 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.not_empty())
|
|
{
|
|
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 e' 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_NOMENCLATURA2:
|
|
if (e == fe_modify)
|
|
{
|
|
TString4 str; str = o.get();
|
|
if (str.len() != 2)
|
|
{
|
|
str.format("%02d", atoi(str));
|
|
o.set(str);
|
|
}
|
|
}
|
|
case F_NOMENCLATURA1:
|
|
case F_NOMENCLATURA3:
|
|
if (e == fe_close)
|
|
{
|
|
if (frequenza() != 'A')
|
|
{
|
|
TMask& m = o.mask();
|
|
TString16 key; key << m.get(F_NOMENCLATURA1) << m.get(F_NOMENCLATURA2) << m.get(F_NOMENCLATURA3);
|
|
if (key.empty())
|
|
return error_box(TR("La nomenclatura combinata e' obbligatoria"));
|
|
}
|
|
}
|
|
else
|
|
if (e == fe_modify)
|
|
{
|
|
TMask& m = o.mask();
|
|
if (!o.empty())
|
|
{
|
|
TString16 key; key << m.get(F_NOMENCLATURA1) << m.get(F_NOMENCLATURA2) << m.get(F_NOMENCLATURA3);
|
|
const TRectype& nom = cache().get("%NOC", key);
|
|
|
|
m.set(F_UMS, nom.get("S5"), TRUE);
|
|
|
|
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, "", TRUE);
|
|
}
|
|
}
|
|
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 poterlo modificare 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;
|
|
} |