Patch level : 12.0 nopatch
Files correlati : fp0700.cpp, fp0700a.h, fp0700a.uml, fplib.h, fplib01.cpp Commento: Modifiche Integrazioni per reinvio modifica provvisorio
This commit is contained in:
parent
8c293c2964
commit
a08d9fc134
@ -34,7 +34,7 @@ protected:
|
|||||||
bool on_key(KEY key) override;
|
bool on_key(KEY key) override;
|
||||||
bool check_not_empty();
|
bool check_not_empty();
|
||||||
bool check_full_fields() const;
|
bool check_full_fields() const;
|
||||||
void set_err_paf();
|
void delete_paf();
|
||||||
void fill();
|
void fill();
|
||||||
void init();
|
void init();
|
||||||
void force_reload_sheet();
|
void force_reload_sheet();
|
||||||
@ -129,7 +129,7 @@ void TPAR_mask::fill()
|
|||||||
TString query;
|
TString query;
|
||||||
const bool diagn = get_bool(F_DIAGN);
|
const bool diagn = get_bool(F_DIAGN);
|
||||||
|
|
||||||
enable(DLG_OK, filter_selected.empty() || filter_selected == "E" || filter_selected == "X");
|
enable(DLG_OK, filter_selected.empty() || filter_selected == "E" || filter_selected == "X" || filter_selected == "D");
|
||||||
enable(DLG_PRINT, true);
|
enable(DLG_PRINT, true);
|
||||||
enable(DLG_SAVEREC, (is_f8() && (filter_selected == "X") || filter_selected == "D"));
|
enable(DLG_SAVEREC, (is_f8() && (filter_selected == "X") || filter_selected == "D"));
|
||||||
enable(DLG_FINDREC, filter_selected == "D");
|
enable(DLG_FINDREC, filter_selected == "D");
|
||||||
@ -147,6 +147,7 @@ void TPAR_mask::fill()
|
|||||||
|
|
||||||
//MY QUERY
|
//MY QUERY
|
||||||
|
|
||||||
|
//DA RIVEDERE QUESTA QUERY
|
||||||
query << "USE " << LF_MOV << " KEY 2\n";
|
query << "USE " << LF_MOV << " KEY 2\n";
|
||||||
if (dal.ok())
|
if (dal.ok())
|
||||||
query << "FROM " << MOV_DATAREG << "=" << dal << "\n";
|
query << "FROM " << MOV_DATAREG << "=" << dal << "\n";
|
||||||
@ -562,7 +563,7 @@ bool TPAR_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|||||||
case DLG_SAVEREC:
|
case DLG_SAVEREC:
|
||||||
{
|
{
|
||||||
if (e == fe_button)
|
if (e == fe_button)
|
||||||
set_err_paf();
|
delete_paf();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DLG_FINDREC:
|
case DLG_FINDREC:
|
||||||
@ -647,7 +648,7 @@ bool TPAR_mask::check_full_fields() const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPAR_mask::set_err_paf()
|
void TPAR_mask::delete_paf()
|
||||||
{
|
{
|
||||||
// Vado a riportare sui paf l'errore
|
// Vado a riportare sui paf l'errore
|
||||||
TSheet_field& sfld = sfield(F_REGS);
|
TSheet_field& sfld = sfield(F_REGS);
|
||||||
@ -670,6 +671,34 @@ void TPAR_mask::set_err_paf()
|
|||||||
if (chiave_paf_mov(mov, tipodocsdi, hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt))
|
if (chiave_paf_mov(mov, tipodocsdi, hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt))
|
||||||
{
|
{
|
||||||
TString query;
|
TString query;
|
||||||
|
|
||||||
|
query <<
|
||||||
|
"DELETE FROM PAF0100F WHERE P1_KEYHEADERFATT = '" << hfatt << "' AND P1_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF0200F WHERE P2_KEYHEADERFATT = '" << hfatt << "' AND P2_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF0400F WHERE P4_KEYHEADERFATT = '" << hfatt << "' AND P4_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF0700F WHERE P7_KEYHEADERFATT = '" << hfatt << "' AND P7_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF0800F WHERE P8_KEYHEADERFATT = '" << hfatt << "' AND P8_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF1000F WHERE P0_KEYHEADERFATT = '" << hfatt << "' AND P0_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF1100F WHERE PA_KEYHEADERFATT = '" << hfatt << "' AND PA_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF1200F WHERE PB_KEYHEADERFATT = '" << hfatt << "' AND PB_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF1400F WHERE PD_KEYHEADERFATT = '" << hfatt << "' AND PD_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF1600F WHERE PF_KEYHEADERFATT = '" << hfatt << "' AND PF_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF1700F WHERE PG_KEYHEADERFATT = '" << hfatt << "' AND PG_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF1800F WHERE PI_KEYHEADERFATT = '" << hfatt << "' AND PI_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF1900F WHERE PY_KEYHEADERFATT = '" << hfatt << "' AND PY_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF2000F WHERE PJ_KEYHEADERFATT = '" << hfatt << "' AND PJ_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF2100F WHERE PK_KEYHEADERFATT = '" << hfatt << "' AND PK_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF2200F WHERE PL_KEYHEADERFATT = '" << hfatt << "' AND PL_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF2400F WHERE PN_KEYHEADERFATT = '" << hfatt << "' AND PN_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF2500F WHERE PO_KEYHEADERFATT = '" << hfatt << "' AND PO_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF2600F WHERE PP_KEYHEADERFATT = '" << hfatt << "' AND PP_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF2700F WHERE PQ_KEYHEADERFATT = '" << hfatt << "' AND PQ_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF3000F WHERE PT_KEYHEADERFATT = '" << hfatt << "' AND PT_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
"DELETE FROM PAF3200F WHERE PU_KEYHEADERFATT = '" << hfatt << "' AND PU_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
|
// PAFW3 non ha il flag di gestione
|
||||||
|
"DELETE FROM PAFW300F WHERE PW_KEYHEADERFATT = '" << hfatt << "' AND PW_KEYBODYFATT = '" << bfatt << "';\n";
|
||||||
|
|
||||||
|
/*
|
||||||
query <<
|
query <<
|
||||||
"UPDATE PAF0100F SET P1_GESTIONE = 'E', P1_KEYPRGINVIO = 'DELETED' WHERE P1_KEYHEADERFATT = '" << hfatt << "' AND P1_KEYBODYFATT = '" << bfatt << "';\n" <<
|
"UPDATE PAF0100F SET P1_GESTIONE = 'E', P1_KEYPRGINVIO = 'DELETED' WHERE P1_KEYHEADERFATT = '" << hfatt << "' AND P1_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
"UPDATE PAF0200F SET P2_GESTIONE = 'E', P2_KEYPRGINVIO = 'DELETED' WHERE P2_KEYHEADERFATT = '" << hfatt << "' AND P2_KEYBODYFATT = '" << bfatt << "';\n" <<
|
"UPDATE PAF0200F SET P2_GESTIONE = 'E', P2_KEYPRGINVIO = 'DELETED' WHERE P2_KEYHEADERFATT = '" << hfatt << "' AND P2_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
@ -679,7 +708,7 @@ void TPAR_mask::set_err_paf()
|
|||||||
"UPDATE PAF1000F SET P0_GESTIONE = 'E', P0_KEYPRGINVIO = 'DELETED' WHERE P0_KEYHEADERFATT = '" << hfatt << "' AND P0_KEYBODYFATT = '" << bfatt << "';\n" <<
|
"UPDATE PAF1000F SET P0_GESTIONE = 'E', P0_KEYPRGINVIO = 'DELETED' WHERE P0_KEYHEADERFATT = '" << hfatt << "' AND P0_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
"UPDATE PAF1100F SET PA_GESTIONE = 'E', PA_KEYPRGINVIO = 'DELETED' WHERE PA_KEYHEADERFATT = '" << hfatt << "' AND PA_KEYBODYFATT = '" << bfatt << "';\n" <<
|
"UPDATE PAF1100F SET PA_GESTIONE = 'E', PA_KEYPRGINVIO = 'DELETED' WHERE PA_KEYHEADERFATT = '" << hfatt << "' AND PA_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
"UPDATE PAF1200F SET PB_GESTIONE = 'E', PB_KEYPRGINVIO = 'DELETED' WHERE PB_KEYHEADERFATT = '" << hfatt << "' AND PB_KEYBODYFATT = '" << bfatt << "';\n" <<
|
"UPDATE PAF1200F SET PB_GESTIONE = 'E', PB_KEYPRGINVIO = 'DELETED' WHERE PB_KEYHEADERFATT = '" << hfatt << "' AND PB_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
"UPDATE PAF1400F SET PB_GESTIONE = 'E', PB_KEYPRGINVIO = 'DELETED' WHERE PB_KEYHEADERFATT = '" << hfatt << "' AND PB_KEYBODYFATT = '" << bfatt << "';\n" <<
|
"UPDATE PAF1400F SET PD_GESTIONE = 'E', PD_KEYPRGINVIO = 'DELETED' WHERE PD_KEYHEADERFATT = '" << hfatt << "' AND PD_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
"UPDATE PAF1600F SET PF_GESTIONE = 'E', PF_KEYPRGINVIO = 'DELETED' WHERE PF_KEYHEADERFATT = '" << hfatt << "' AND PF_KEYBODYFATT = '" << bfatt << "';\n" <<
|
"UPDATE PAF1600F SET PF_GESTIONE = 'E', PF_KEYPRGINVIO = 'DELETED' WHERE PF_KEYHEADERFATT = '" << hfatt << "' AND PF_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
"UPDATE PAF1700F SET PG_GESTIONE = 'E', PG_KEYPRGINVIO = 'DELETED' WHERE PG_KEYHEADERFATT = '" << hfatt << "' AND PG_KEYBODYFATT = '" << bfatt << "';\n" <<
|
"UPDATE PAF1700F SET PG_GESTIONE = 'E', PG_KEYPRGINVIO = 'DELETED' WHERE PG_KEYHEADERFATT = '" << hfatt << "' AND PG_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
"UPDATE PAF1800F SET PI_GESTIONE = 'E', PI_KEYPRGINVIO = 'DELETED' WHERE PI_KEYHEADERFATT = '" << hfatt << "' AND PI_KEYBODYFATT = '" << bfatt << "';\n" <<
|
"UPDATE PAF1800F SET PI_GESTIONE = 'E', PI_KEYPRGINVIO = 'DELETED' WHERE PI_KEYHEADERFATT = '" << hfatt << "' AND PI_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
@ -695,6 +724,7 @@ void TPAR_mask::set_err_paf()
|
|||||||
"UPDATE PAF3200F SET PU_GESTIONE = 'E', PU_KEYPRGINVIO = 'DELETED' WHERE PU_KEYHEADERFATT = '" << hfatt << "' AND PU_KEYBODYFATT = '" << bfatt << "';\n" <<
|
"UPDATE PAF3200F SET PU_GESTIONE = 'E', PU_KEYPRGINVIO = 'DELETED' WHERE PU_KEYHEADERFATT = '" << hfatt << "' AND PU_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||||
// PAFW3 non ha il flag di gestione
|
// PAFW3 non ha il flag di gestione
|
||||||
"UPDATE PAFW300F SET PW_KEYPRGINVIO = 'DELETED' WHERE PW_KEYHEADERFATT = '" << hfatt << "' AND PW_KEYBODYFATT = '" << bfatt << "';\n";
|
"UPDATE PAFW300F SET PW_KEYPRGINVIO = 'DELETED' WHERE PW_KEYHEADERFATT = '" << hfatt << "' AND PW_KEYBODYFATT = '" << bfatt << "';\n";
|
||||||
|
*/
|
||||||
if (!fp_db().sq_set_exec(query))
|
if (!fp_db().sq_set_exec(query))
|
||||||
{
|
{
|
||||||
TString err = "Impossibile salvare la regolarizzazione "; err << nreg << "\nVerrà saltata.";
|
TString err = "Impossibile salvare la regolarizzazione "; err << nreg << "\nVerrà saltata.";
|
||||||
|
@ -71,12 +71,12 @@ END
|
|||||||
|
|
||||||
RADIOBUTTON F_REGSEL 7 80
|
RADIOBUTTON F_REGSEL 7 80
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 3 "Registrazioni da visualizzare"
|
PROMPT 1 3 "@bIntegrazioni da visualizzare"
|
||||||
ITEM "|Da inviare"
|
ITEM "|Da inviare"
|
||||||
ITEM "X|XML Generato"
|
//ITEM "N|Notificato"
|
||||||
ITEM "N|Notificato"
|
ITEM "D|Pre-Diagosticate"
|
||||||
ITEM "E|In errore"
|
ITEM "E|In errore"
|
||||||
ITEM "D|Diag."
|
ITEM "X|XML Generato"
|
||||||
FLAGS "Z"
|
FLAGS "Z"
|
||||||
END
|
END
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ END
|
|||||||
|
|
||||||
LIST F_TIPO_SDI 40
|
LIST F_TIPO_SDI 40
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 14 "Tipo documento SDI "
|
PROMPT 1 13 "@bDocumento SDI da generare"
|
||||||
ITEM "TD16|TD16 Integraz. fatt. rev.ch. interno"
|
ITEM "TD16|TD16 Integraz. fatt. rev.ch. interno"
|
||||||
ITEM "TD17|TD17 Integ./autof. acq. servizi estero"
|
ITEM "TD17|TD17 Integ./autof. acq. servizi estero"
|
||||||
ITEM "TD18|TD18 Integ. acq. beni intracomunitari"
|
ITEM "TD18|TD18 Integ. acq. beni intracomunitari"
|
||||||
@ -98,9 +98,15 @@ BEGIN
|
|||||||
ITEM "TD20|TD20 Autofattura"
|
ITEM "TD20|TD20 Autofattura"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
GROUPBOX DLG_NULL 80 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 14 "@bConfigurazione"
|
||||||
|
GROUP 1
|
||||||
|
END
|
||||||
|
|
||||||
BOOLEAN F_DIAGN
|
BOOLEAN F_DIAGN
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 15 "Esporta in stato diagnosticato"
|
PROMPT 2 15 "Esporta in stato diagnosticato"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING DLG_PROFILE 50
|
STRING DLG_PROFILE 50
|
||||||
|
@ -694,9 +694,9 @@ protected:
|
|||||||
bool add_row_alleg(TFilename& file, long& nprogr, TPaf_record& paf);
|
bool add_row_alleg(TFilename& file, long& nprogr, TPaf_record& paf);
|
||||||
void set_qta_prezzo(TPaf_record& paf1800f, const TMovimento_contabile& mov, int n_row) const;
|
void set_qta_prezzo(TPaf_record& paf1800f, const TMovimento_contabile& mov, int n_row) const;
|
||||||
void add_ritenuta(const TMovimento_contabile & mov, int n_row, TPaf_record& paf0700f) const;
|
void add_ritenuta(const TMovimento_contabile & mov, int n_row, TPaf_record& paf0700f) const;
|
||||||
bool add_riepilogo_iva(const TMovimento_contabile mov, int n_riga);
|
bool add_riepilogo_iva(const TMovimento_contabile & mov, int n_riga);
|
||||||
|
|
||||||
const char * stato_paf() const { return _definitivo && !get_no_export_pronto() ? "P" : "D"; }
|
const char * stato_paf() const { return _definitivo ? "P" : "D"; }
|
||||||
|
|
||||||
const TFirm& TReg_fp::get_firm(){return prefix().firm();}
|
const TFirm& TReg_fp::get_firm(){return prefix().firm();}
|
||||||
|
|
||||||
|
@ -3043,13 +3043,14 @@ bool TReg_fp::initialize(const TMovimento_contabile& mov)
|
|||||||
_log.log(-1, _bfatt);
|
_log.log(-1, _bfatt);
|
||||||
// Controllo se il documento almeno in stato di stampa
|
// Controllo se il documento almeno in stato di stampa
|
||||||
_is_pa = mov.clifo().get_int("ALLEG") == 7;
|
_is_pa = mov.clifo().get_int("ALLEG") == 7;
|
||||||
|
_pec = _ditta.pec();
|
||||||
|
|
||||||
if (_ditta.coddest().empty())
|
if (_ditta.coddest().empty() && _pec.empty())
|
||||||
_coddest = "0000000";
|
_coddest = "0000000";
|
||||||
else
|
else
|
||||||
_coddest = _ditta.coddest();
|
_coddest = _ditta.coddest();
|
||||||
|
|
||||||
_pec = _ditta.pec();
|
|
||||||
_enapec = _coddest == "0000000" && _pec.full();
|
_enapec = _coddest == "0000000" && _pec.full();
|
||||||
_privato = _coddest.len() != 6;
|
_privato = _coddest.len() != 6;
|
||||||
// Azzero indici
|
// Azzero indici
|
||||||
@ -3148,7 +3149,7 @@ bool TReg_fp::add_row_alleg(TFilename& file, long& nprogr, TPaf_record& paf)
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TReg_fp::add_riepilogo_iva(const TMovimento_contabile mov, int n_riga)
|
bool TReg_fp::add_riepilogo_iva(const TMovimento_contabile & mov, int n_riga)
|
||||||
{
|
{
|
||||||
TPaf_record& paf2200f = _paf_container.get_paf("PAF2200F");
|
TPaf_record& paf2200f = _paf_container.get_paf("PAF2200F");
|
||||||
const TRectype& rec_iva = mov.iva()[n_riga];
|
const TRectype& rec_iva = mov.iva()[n_riga];
|
||||||
@ -3190,6 +3191,9 @@ bool TReg_fp::export_paf0100f()
|
|||||||
tel << get_firm().get(NDT_PTEL) << get_firm().get(NDT_TEL);
|
tel << get_firm().get(NDT_PTEL) << get_firm().get(NDT_TEL);
|
||||||
paf0100f.set("P1_TELEFONO", tel);
|
paf0100f.set("P1_TELEFONO", tel);
|
||||||
paf0100f.set("P1_MAIL", get_firm().get(NDT_MAIL));
|
paf0100f.set("P1_MAIL", get_firm().get(NDT_MAIL));
|
||||||
|
|
||||||
|
const char* c = stato_paf();
|
||||||
|
|
||||||
paf0100f.set("P1_GESTIONE", stato_paf());
|
paf0100f.set("P1_GESTIONE", stato_paf());
|
||||||
paf0100f.set("P1_ERRINT", "");
|
paf0100f.set("P1_ERRINT", "");
|
||||||
// </DatiTrassmissione>
|
// </DatiTrassmissione>
|
||||||
@ -3430,8 +3434,6 @@ bool TReg_fp::reg_to_paf(const TMovimento_contabile& mov)
|
|||||||
|
|
||||||
ok &= insert(paf1800f);
|
ok &= insert(paf1800f);
|
||||||
add_riepilogo_iva(mov, i);
|
add_riepilogo_iva(mov, i);
|
||||||
|
|
||||||
|
|
||||||
reset(paf3000f);
|
reset(paf3000f);
|
||||||
paf3000f.set("PT_RIFNUMLINEA", (long)i);
|
paf3000f.set("PT_RIFNUMLINEA", (long)i);
|
||||||
paf3000f.set("PT_COMMENTO", "");//TODO COSA DOBBIAMO METTERE NELLA DESCRIZIONE IVA CHE NON C'è
|
paf3000f.set("PT_COMMENTO", "");//TODO COSA DOBBIAMO METTERE NELLA DESCRIZIONE IVA CHE NON C'è
|
||||||
@ -3440,7 +3442,7 @@ bool TReg_fp::reg_to_paf(const TMovimento_contabile& mov)
|
|||||||
if (ok) ok &= insert(paf3000f);
|
if (ok) ok &= insert(paf3000f);
|
||||||
|
|
||||||
if (ok) ok &= insert(paf0700f);
|
if (ok) ok &= insert(paf0700f);
|
||||||
|
}
|
||||||
// Tabella di non invio XML
|
// Tabella di non invio XML
|
||||||
TPaf_record& pafw300f = _paf_container.get_paf("PAFW300F");
|
TPaf_record& pafw300f = _paf_container.get_paf("PAFW300F");
|
||||||
pafw300f.set("PW_TIPODOC", ""); //TODO PASSARE IL TIPO DOCUMENTO DELLA MASK NEL COSTRUTTORE
|
pafw300f.set("PW_TIPODOC", ""); //TODO PASSARE IL TIPO DOCUMENTO DELLA MASK NEL COSTRUTTORE
|
||||||
@ -3466,8 +3468,6 @@ bool TReg_fp::reg_to_paf(const TMovimento_contabile& mov)
|
|||||||
ok &= insert(pafw300f);
|
ok &= insert(pafw300f);
|
||||||
return _to_commit = (ok && save_paf());
|
return _to_commit = (ok && save_paf());
|
||||||
}
|
}
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TReg_fp::reg_to_paf(long n_mov)
|
bool TReg_fp::reg_to_paf(long n_mov)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user