Aggiunta codici regione
git-svn-id: svn://10.65.10.50/trunk@2683 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
78687433cb
commit
2994f22df3
121
ba/ba4100.cpp
121
ba/ba4100.cpp
@ -4,54 +4,29 @@
|
|||||||
#include <lffiles.h>
|
#include <lffiles.h>
|
||||||
#include "ba4.h"
|
#include "ba4.h"
|
||||||
#include "ba4100.h"
|
#include "ba4100.h"
|
||||||
#define FIRST_YEAR 1993
|
|
||||||
|
|
||||||
class BA4100_application : public TRelation_application
|
class BA4100_application : public TRelation_application
|
||||||
{
|
{
|
||||||
TMask * _msk;
|
TMask * _msk;
|
||||||
TRelation * _rel;
|
TRelation * _rel;
|
||||||
TLocalisamfile * _alici;
|
|
||||||
TRecord_array * _alici_rec;
|
|
||||||
static bool fld_notify(TSheet_field& s, int r, KEY k);
|
|
||||||
virtual bool user_create() ;
|
virtual bool user_create() ;
|
||||||
virtual bool user_destroy() ;
|
virtual bool user_destroy() ;
|
||||||
virtual bool changing_mask(int mode) { return FALSE;}
|
virtual bool changing_mask(int mode) { return FALSE;}
|
||||||
virtual TRelation* get_relation() const { return _rel;}
|
virtual TRelation* get_relation() const { return _rel;}
|
||||||
virtual int read(TMask& m);
|
|
||||||
virtual int write(const TMask& m);
|
|
||||||
virtual int rewrite(const TMask& m);
|
|
||||||
virtual bool remove();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual TMask* get_mask(int mode) { return _msk;}
|
virtual TMask* get_mask(int mode) { return _msk;}
|
||||||
BA4100_application() {}
|
BA4100_application() {}
|
||||||
virtual ~BA4100_application() {}
|
virtual ~BA4100_application() {}
|
||||||
TRecord_array & alici_rec() { return * _alici_rec; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
BA4100_application & app() { return (BA4100_application &) main_app(); }
|
BA4100_application & app() { return (BA4100_application &) main_app(); }
|
||||||
|
|
||||||
bool BA4100_application::fld_notify(TSheet_field& f, int r, KEY k)
|
|
||||||
{
|
|
||||||
if (k == K_INS)
|
|
||||||
{
|
|
||||||
TMask& m = f.sheet_mask();
|
|
||||||
TToken_string & t = f.row(r);
|
|
||||||
|
|
||||||
t.format("%d", r + FIRST_YEAR);
|
|
||||||
t.add("");
|
|
||||||
t.add("");
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
bool BA4100_application::user_create()
|
bool BA4100_application::user_create()
|
||||||
{
|
{
|
||||||
_msk = new TMask("ba4100a") ;
|
_msk = new TMask("ba4100a") ;
|
||||||
TSheet_field& f = (TSheet_field&) _msk->field(FLD_CM2_ALIQICI);
|
|
||||||
f.set_notify(fld_notify);
|
|
||||||
_rel = new TRelation(LF_COMUNI);
|
_rel = new TRelation(LF_COMUNI);
|
||||||
_alici = new TLocalisamfile(LF_ALICI);
|
|
||||||
_alici_rec = new TRecord_array(LF_ALICI, "ANNO", FIRST_YEAR);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,103 +34,9 @@ bool BA4100_application::user_destroy()
|
|||||||
{
|
{
|
||||||
delete _msk;
|
delete _msk;
|
||||||
delete _rel;
|
delete _rel;
|
||||||
delete _alici;
|
|
||||||
delete _alici_rec;
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int BA4100_application::read(TMask& m)
|
|
||||||
{
|
|
||||||
int err = TRelation_application::read(m);
|
|
||||||
if (err == NOERR)
|
|
||||||
{
|
|
||||||
TRectype r = _alici->curr();
|
|
||||||
|
|
||||||
r.zero();
|
|
||||||
r.put("COM", m.get(FLD_CM1_COM));
|
|
||||||
_alici_rec->read(r); // Ignora errori di lettura aliquote ICI
|
|
||||||
|
|
||||||
TSheet_field& f = (TSheet_field&) m.field(FLD_CM2_ALIQICI);
|
|
||||||
f.destroy();
|
|
||||||
int last = _alici_rec->last_row();
|
|
||||||
const int year = TDate(TODAY).year();
|
|
||||||
|
|
||||||
if (last < year) last = year;
|
|
||||||
for (int i = FIRST_YEAR; i <= last; i++)
|
|
||||||
{
|
|
||||||
TRectype & r = _alici_rec->row(i, TRUE);
|
|
||||||
TToken_string & t = f.row(i - FIRST_YEAR);
|
|
||||||
|
|
||||||
t = r.get("ANNO");
|
|
||||||
t.add(r.get("ALIQ"));
|
|
||||||
t.add(r.get("DETR"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
int BA4100_application::write(const TMask& m)
|
|
||||||
{
|
|
||||||
int err = TRelation_application::write(m);
|
|
||||||
if (err == NOERR)
|
|
||||||
{
|
|
||||||
TSheet_field& f = (TSheet_field&) m.field(FLD_CM2_ALIQICI);
|
|
||||||
_alici_rec->destroy_rows();
|
|
||||||
if (m.insert_mode())
|
|
||||||
_alici_rec->renum_key("COM", m.get(FLD_CM1_COM));
|
|
||||||
|
|
||||||
for (int i = 0; i < f.items(); i++)
|
|
||||||
{
|
|
||||||
TToken_string & t = f.row(i);
|
|
||||||
const real aliq(t.get(1));
|
|
||||||
const real detr(t.get());
|
|
||||||
if (aliq != ZERO || detr != ZERO)
|
|
||||||
{
|
|
||||||
TRectype & r = _alici_rec->row(t.get_int(0), TRUE);
|
|
||||||
|
|
||||||
r.put("ALIQ", aliq);
|
|
||||||
r.put("DETR", detr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
err = _alici_rec->write();
|
|
||||||
}
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
int BA4100_application::rewrite(const TMask& m)
|
|
||||||
{
|
|
||||||
int err = TRelation_application::rewrite(m);
|
|
||||||
if (err == NOERR)
|
|
||||||
{
|
|
||||||
TSheet_field& f = (TSheet_field&) m.field(FLD_CM2_ALIQICI);
|
|
||||||
_alici_rec->destroy_rows();
|
|
||||||
if (m.insert_mode())
|
|
||||||
_alici_rec->renum_key("COM", m.get(FLD_CM1_COM));
|
|
||||||
|
|
||||||
for (int i = 0; i < f.items(); i++)
|
|
||||||
{
|
|
||||||
TToken_string & t = f.row(i);
|
|
||||||
const real aliq(t.get(1));
|
|
||||||
const real detr(t.get());
|
|
||||||
if (aliq != ZERO || detr != ZERO)
|
|
||||||
{
|
|
||||||
TRectype & r = _alici_rec->row(t.get_int(0), TRUE);
|
|
||||||
|
|
||||||
r.put("ALIQ", aliq);
|
|
||||||
r.put("DETR", detr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
err = _alici_rec->rewrite();
|
|
||||||
}
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BA4100_application::remove()
|
|
||||||
|
|
||||||
{
|
|
||||||
return TRelation_application::remove() && _alici_rec->remove() == NOERR;
|
|
||||||
}
|
|
||||||
|
|
||||||
int ba4100(int argc, char* argv[])
|
int ba4100(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
BA4100_application a ;
|
BA4100_application a ;
|
||||||
|
@ -40,9 +40,8 @@
|
|||||||
#define FLD_CM2_COM 135
|
#define FLD_CM2_COM 135
|
||||||
#define FLD_CM2_DENCOM 136
|
#define FLD_CM2_DENCOM 136
|
||||||
#define FLD_CM2_DENSTA 137
|
#define FLD_CM2_DENSTA 137
|
||||||
#define F_ANNO 101
|
#define F_CODREG 138
|
||||||
#define F_ICI 102
|
#define F_DESREG 139
|
||||||
#define F_DETR 103
|
|
||||||
|
|
||||||
#define N_STATO "STATO"
|
#define N_STATO "STATO"
|
||||||
#define N_COM "COM"
|
#define N_COM "COM"
|
||||||
|
@ -405,56 +405,31 @@ BEGIN
|
|||||||
OUTPUT FLD_CM2_DENCOMAGG DENCOM
|
OUTPUT FLD_CM2_DENCOMAGG DENCOM
|
||||||
END
|
END
|
||||||
|
|
||||||
SPREADSHEET FLD_CM2_ALIQICI 36
|
NUMBER F_CODREG 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 26 14 ""
|
PROMPT 2 15 "Cod.regione "
|
||||||
ITEM "ANNO@4"
|
FIELD LF_COMUNI->CODREG
|
||||||
ITEM "ALIQUOTA I.C.I.@15"
|
FLAGS "RZ"
|
||||||
ITEM "DETRAZIONI@15"
|
USE %RGI
|
||||||
END
|
INPUT CODTAB F_CODREG
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
ENDPAGE
|
DISPLAY "Denominazione@50" S0
|
||||||
ENDMASK
|
OUTPUT F_CODREG CODTAB
|
||||||
|
OUTPUT F_DESREG S0
|
||||||
PAGE "I.C.I." -1 -1 70 9
|
CHECKTYPE NORMAL
|
||||||
|
WARNING "Regione assente"
|
||||||
NUMBER F_ANNO 4
|
END
|
||||||
BEGIN
|
|
||||||
PROMPT 2 1 "Anno "
|
STRING F_DESREG 50
|
||||||
FLAGS "DR"
|
BEGIN
|
||||||
END
|
PROMPT 23 15 ""
|
||||||
|
USE %RGI KEY 2
|
||||||
NUMBER F_ICI 6 3
|
INPUT S0 F_DESREG
|
||||||
BEGIN
|
DISPLAY "Denominazione@50" S0
|
||||||
PROMPT 2 3 "Aliquota I.C.I. "
|
DISPLAY "Codice" CODTAB
|
||||||
FLAGS "R"
|
COPY OUTPUT F_CODREG
|
||||||
GROUP 1
|
CHECKTYPE NORMAL
|
||||||
NUM_EXPR {(#THIS_FIELD>=0) && (#THIS_FIELD<100)}
|
WARNING "Regione assente"
|
||||||
WARNING "L' aliquota deve esser compresa tra 0 e 100"
|
|
||||||
END
|
|
||||||
|
|
||||||
NUMBER F_DETR 15
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 5 "Importo Detraz. "
|
|
||||||
FLAGS "R"
|
|
||||||
PICTURE "."
|
|
||||||
GROUP 1
|
|
||||||
END
|
|
||||||
|
|
||||||
BUTTON DLG_OK 8 2
|
|
||||||
BEGIN
|
|
||||||
PROMPT -13 -1 ""
|
|
||||||
END
|
|
||||||
|
|
||||||
BUTTON DLG_CANCEL 8 2
|
|
||||||
BEGIN
|
|
||||||
PROMPT -23 -1 ""
|
|
||||||
END
|
|
||||||
|
|
||||||
BUTTON DLG_NULL 8 2
|
|
||||||
BEGIN
|
|
||||||
PROMPT -33 -1 "~Azzera"
|
|
||||||
MESSAGE RESET,1@
|
|
||||||
END
|
END
|
||||||
|
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
|
@ -18,6 +18,7 @@ class TPersone_app : public TRelation_application
|
|||||||
{
|
{
|
||||||
char _tip_ana ;
|
char _tip_ana ;
|
||||||
bool _reset_uff_conc;
|
bool _reset_uff_conc;
|
||||||
|
bool _reset_codreg;
|
||||||
TString16 _cod_ana ;
|
TString16 _cod_ana ;
|
||||||
TMask* _msk[2] ;
|
TMask* _msk[2] ;
|
||||||
TRelation* _rel[2];
|
TRelation* _rel[2];
|
||||||
@ -52,8 +53,9 @@ public:
|
|||||||
char tip_ana() { return _tip_ana;}
|
char tip_ana() { return _tip_ana;}
|
||||||
virtual bool force_cursor_usage() const { return TRUE;}
|
virtual bool force_cursor_usage() const { return TRUE;}
|
||||||
void set_reset_uff_conc(bool reset) { _reset_uff_conc = reset; }
|
void set_reset_uff_conc(bool reset) { _reset_uff_conc = reset; }
|
||||||
|
void set_reset_codreg(bool reset) { _reset_codreg = reset; }
|
||||||
|
|
||||||
TPersone_app(char ta) : _reset_uff_conc(FALSE) { set_tip_ana(ta); }
|
TPersone_app(char ta) : _reset_uff_conc(FALSE), _reset_codreg(FALSE) { set_tip_ana(ta); }
|
||||||
virtual ~TPersone_app() {}
|
virtual ~TPersone_app() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -302,6 +304,12 @@ bool gest_uff_imp(TMask_field& f, KEY key)
|
|||||||
msk.set(F_UFFCONC, comuni.get("UFFCONC"));
|
msk.set(F_UFFCONC, comuni.get("UFFCONC"));
|
||||||
msk.set(F_CONFIS, msk.get(giuridica ? FLD_AG1_COFI : FLD_AF1_COFI));
|
msk.set(F_CONFIS, msk.get(giuridica ? FLD_AG1_COFI : FLD_AF1_COFI));
|
||||||
}
|
}
|
||||||
|
const bool fisica = ! giuridica;
|
||||||
|
if (fisica && (msk.get(F_CODREG96).empty() || msk.is_running()))
|
||||||
|
{
|
||||||
|
msk.set(F_CODREG96, comuni.get("CODREG"));
|
||||||
|
msk.field(F_CODREG96).on_key(K_TAB);
|
||||||
|
}
|
||||||
msk.set(F_UFFCONC_P, comuni.get("UFFCONC")); msk.field(F_UFFCONC_P).on_key(K_TAB);
|
msk.set(F_UFFCONC_P, comuni.get("UFFCONC")); msk.field(F_UFFCONC_P).on_key(K_TAB);
|
||||||
msk.set(F_UFFSERV, comuni.get("UFFCSERV")); msk.field(F_UFFSERV).on_key(K_TAB);
|
msk.set(F_UFFSERV, comuni.get("UFFCSERV")); msk.field(F_UFFSERV).on_key(K_TAB);
|
||||||
|
|
||||||
@ -372,6 +380,35 @@ bool uff_conc(TMask_field& f, KEY key)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handler dell'codice regione
|
||||||
|
bool cod_reg(TMask_field& f, KEY key)
|
||||||
|
{
|
||||||
|
if (f.mask().query_mode())
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
if (key == K_ENTER)
|
||||||
|
{
|
||||||
|
TMask& msk = f.mask() ;
|
||||||
|
TPersone_app& app = (TPersone_app&)main_app();
|
||||||
|
const bool giuridica = app.ana_giu();
|
||||||
|
TString16 cod_com(msk.get(giuridica ? FLD_AG1_COMRF : FLD_AF2_COMRF));
|
||||||
|
|
||||||
|
if (cod_com.empty())
|
||||||
|
cod_com = msk.get(giuridica ? FLD_AG2_COMRES : FLD_AF1_COMRES) ;
|
||||||
|
|
||||||
|
if (cod_com.not_empty())
|
||||||
|
{
|
||||||
|
TLocalisamfile comuni(LF_COMUNI);
|
||||||
|
|
||||||
|
comuni.setkey(1) ;
|
||||||
|
comuni.zero() ;
|
||||||
|
comuni.put(N_COM, cod_com );
|
||||||
|
app.set_reset_codreg(comuni.read() == NOERR && msk.get(F_CODREG96) == comuni.get("CODREG"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
bool no_dup_fis(TMask_field& f, KEY key)
|
bool no_dup_fis(TMask_field& f, KEY key)
|
||||||
{
|
{
|
||||||
if (f.mask().query_mode() || !f.to_check(key)) return TRUE;
|
if (f.mask().query_mode() || !f.to_check(key)) return TRUE;
|
||||||
@ -469,6 +506,7 @@ TMask* TPersone_app::get_mask(int mode)
|
|||||||
_msk[MSKF]->set_handler(FLD_AF2_COMRF, gest_uff_imp);
|
_msk[MSKF]->set_handler(FLD_AF2_COMRF, gest_uff_imp);
|
||||||
_msk[MSKF]->set_handler(FLD_AF2_COMCORR, clear_cap);
|
_msk[MSKF]->set_handler(FLD_AF2_COMCORR, clear_cap);
|
||||||
_msk[MSKF]->set_handler(F_UFFCONC, uff_conc);
|
_msk[MSKF]->set_handler(F_UFFCONC, uff_conc);
|
||||||
|
_msk[MSKF]->set_handler(F_CODREG96, cod_reg);
|
||||||
_msk[MSKF]->set_handler(F_TITCF, tit_cf);
|
_msk[MSKF]->set_handler(F_TITCF, tit_cf);
|
||||||
_msk[MSKF]->set_handler(ba4200_handler);
|
_msk[MSKF]->set_handler(ba4200_handler);
|
||||||
}
|
}
|
||||||
@ -577,6 +615,11 @@ int TPersone_app::write(const TMask& m)
|
|||||||
_reset_uff_conc = FALSE;
|
_reset_uff_conc = FALSE;
|
||||||
r->lfile().zero("UFFCONC");
|
r->lfile().zero("UFFCONC");
|
||||||
}
|
}
|
||||||
|
if (_reset_codreg)
|
||||||
|
{
|
||||||
|
_reset_codreg = FALSE;
|
||||||
|
r->lfile().zero("CODREG96");
|
||||||
|
}
|
||||||
manual_save(m);
|
manual_save(m);
|
||||||
return r->write();
|
return r->write();
|
||||||
}
|
}
|
||||||
@ -592,6 +635,11 @@ int TPersone_app::rewrite(const TMask& m)
|
|||||||
_reset_uff_conc = FALSE;
|
_reset_uff_conc = FALSE;
|
||||||
r->lfile().zero("UFFCONC");
|
r->lfile().zero("UFFCONC");
|
||||||
}
|
}
|
||||||
|
if (_reset_codreg)
|
||||||
|
{
|
||||||
|
_reset_codreg = FALSE;
|
||||||
|
r->lfile(LF_ANAGFIS).zero("CODREG96");
|
||||||
|
}
|
||||||
manual_save(m);
|
manual_save(m);
|
||||||
/* if (ana_fis())
|
/* if (ana_fis())
|
||||||
{
|
{
|
||||||
|
@ -381,5 +381,7 @@
|
|||||||
#define F_LOCCORR 410
|
#define F_LOCCORR 410
|
||||||
#define F_UFFCONC_P 411
|
#define F_UFFCONC_P 411
|
||||||
#define F_CONFIS 412
|
#define F_CONFIS 412
|
||||||
|
#define F_CODREG96 413
|
||||||
|
#define F_DESREG96 414
|
||||||
|
|
||||||
#endif // __BA4200_H
|
#endif // __BA4200_H
|
||||||
|
@ -887,6 +887,33 @@ FIELD LF_ANAG->RFDIVERSA
|
|||||||
HELP "Dire se il domicilio fiscale e' diverso della sede legale"
|
HELP "Dire se il domicilio fiscale e' diverso della sede legale"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
NUMBER F_CODREG96 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 9 "Cod.regione al 1 Gennaio "
|
||||||
|
FIELD LF_ANAGFIS->CODREG96
|
||||||
|
FLAGS "RZ"
|
||||||
|
USE %RGI
|
||||||
|
INPUT CODTAB F_CODREG96
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
DISPLAY "Denominazione@50" S0
|
||||||
|
OUTPUT F_CODREG96 CODTAB
|
||||||
|
OUTPUT F_DESREG96 S0
|
||||||
|
CHECKTYPE NORMAL
|
||||||
|
WARNING "Regione assente"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DESREG96 50 40
|
||||||
|
BEGIN
|
||||||
|
PROMPT 33 9 ""
|
||||||
|
USE %RGI KEY 2
|
||||||
|
INPUT S0 F_DESREG96
|
||||||
|
DISPLAY "Denominazione@50" S0
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
COPY OUTPUT F_CODREG96
|
||||||
|
CHECKTYPE NORMAL
|
||||||
|
WARNING "Regione assente"
|
||||||
|
END
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 76 5
|
GROUPBOX DLG_NULL 76 5
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 0 13 "Codici statistici"
|
PROMPT 0 13 "Codici statistici"
|
||||||
|
2
ba/batbrgi.h
Executable file
2
ba/batbrgi.h
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
#define F_CODREG 101
|
||||||
|
#define F_DESCR 102
|
44
ba/batbrgi.uml
Executable file
44
ba/batbrgi.uml
Executable file
@ -0,0 +1,44 @@
|
|||||||
|
#include "ba3100.h"
|
||||||
|
#include "batbrgi.h"
|
||||||
|
|
||||||
|
TOOLBAR "" 0 20 0 2
|
||||||
|
|
||||||
|
#include <toolbar.h>
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
PAGE "Regioni" -1 -1 78 18
|
||||||
|
|
||||||
|
NUMBER F_CODREG 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 2 "Codice "
|
||||||
|
FIELD CODTAB
|
||||||
|
FLAGS "RZ"
|
||||||
|
KEY 1
|
||||||
|
USE %RGI
|
||||||
|
INPUT CODTAB F_CODREG
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
DISPLAY "Descrizione @50" S0
|
||||||
|
OUTPUT F_CODREG CODTAB
|
||||||
|
OUTPUT F_DESCR S0
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DESCR 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 4 "Denonimazione "
|
||||||
|
FIELD S0
|
||||||
|
KEY 2
|
||||||
|
USE %RGI KEY 2
|
||||||
|
INPUT S0 F_DESCR
|
||||||
|
DISPLAY "Descrizione @50" S0
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
COPY OUTPUT F_CODREG
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
WARNING "La denomonazione e' obbligatoria"
|
||||||
|
END
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
ENDMASK
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user