Correzione errori prima nota
git-svn-id: svn://10.65.10.50/trunk@721 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
38adfe2902
commit
4265b6a9ac
@ -16,7 +16,7 @@ BEGIN
|
||||
PROMPT 3 1 "Ditta "
|
||||
FLAGS "FRD"
|
||||
USE LF_NDITTE KEY 1
|
||||
CHECKTYPE REQUIRED
|
||||
CHECKTYPE NORMAL
|
||||
INPUT CODDITTA F_CODDITTA
|
||||
OUTPUT F_RAGSOC RAGSOC
|
||||
END
|
||||
|
@ -143,9 +143,15 @@ BEGIN
|
||||
COPY OUTPUT F_DESCAGG
|
||||
END
|
||||
|
||||
BOOLEAN F_SOLAIVA
|
||||
BEGIN
|
||||
PROMPT 1 7 "Movimento di sola IVA"
|
||||
HELP "Indicare se non vi sono righe di contabilita'"
|
||||
END
|
||||
|
||||
LIST F_PROVVISORIO 1 25
|
||||
BEGIN
|
||||
PROMPT 1 7 "Movimento provvisorio "
|
||||
PROMPT 31 7 "Movimento provvisorio "
|
||||
HELP "Indicare se si tratta di movimento provvisorio"
|
||||
FIELD PROVVIS
|
||||
ITEM " |No (movimento normale)"
|
||||
@ -153,12 +159,6 @@ BEGIN
|
||||
ITEM "N|Si (non cancellabile)"
|
||||
END
|
||||
|
||||
BOOLEAN F_SOLAIVA
|
||||
BEGIN
|
||||
PROMPT 54 7 "Movimento di sola IVA"
|
||||
HELP "Indicare se non vi sono righe di contabilita'"
|
||||
END
|
||||
|
||||
STRING F_CODCAUS 3
|
||||
BEGIN
|
||||
PROMPT 1 8 "Causale "
|
||||
@ -395,6 +395,7 @@ BEGIN
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODPAG CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
ADD RUN ba3 -6
|
||||
WARNING "Codice pagamento assente"
|
||||
END
|
||||
|
||||
|
142
cg/cg2102.cpp
142
cg/cg2102.cpp
@ -546,6 +546,7 @@ void TPrimanota_application::generazione_righe_cg(int r)
|
||||
TBill conto(row, 2, 0x3);
|
||||
if (first_not_empty == r)
|
||||
{
|
||||
int last = r;
|
||||
for (i = r+1; i < cg.items(); i++)
|
||||
{
|
||||
TToken_string& rowi = cg.row(i);
|
||||
@ -561,11 +562,16 @@ void TPrimanota_application::generazione_righe_cg(int r)
|
||||
{
|
||||
conto.add_to(rowi, 9, 0x3);
|
||||
cg.force_update(i);
|
||||
if (last == r) last = i;
|
||||
else last = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
if (last > r)
|
||||
{
|
||||
importo.swap_section();
|
||||
set_cgs_imp(last, importo);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -587,30 +593,30 @@ bool TPrimanota_application::cg_notify(int r, KEY k)
|
||||
switch(k)
|
||||
{
|
||||
case K_SPACE:
|
||||
{
|
||||
TSheet_field& cg = app().cgs();
|
||||
TToken_string& row = cg.row(r);
|
||||
const char tipo = row.right(1)[0];
|
||||
cg.sheet_mask().enable(DLG_DELREC, tipo <= ' ');
|
||||
}
|
||||
break;
|
||||
case K_ENTER:
|
||||
if (app().iva() == nessuna_iva)
|
||||
app().generazione_righe_cg(r);
|
||||
app().calcola_saldo();
|
||||
break;
|
||||
case K_DEL:
|
||||
{
|
||||
TToken_string& row = app().cgs().row(r);
|
||||
const char tipo = row.right(1)[0];
|
||||
if (tipo > ' ')
|
||||
return error_box("La riga %d non puo' essere cancellata", r+1);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
{
|
||||
TSheet_field& cg = app().cgs();
|
||||
TToken_string& row = cg.row(r);
|
||||
const char tipo = row.right(1)[0];
|
||||
cg.sheet_mask().enable(DLG_DELREC, tipo <= ' ');
|
||||
}
|
||||
return TRUE;
|
||||
break;
|
||||
case K_ENTER:
|
||||
if (app().iva() == nessuna_iva)
|
||||
app().generazione_righe_cg(r);
|
||||
app().calcola_saldo();
|
||||
break;
|
||||
case K_DEL:
|
||||
{
|
||||
TToken_string& row = app().cgs().row(r);
|
||||
const char tipo = row.right(1)[0];
|
||||
if (tipo > ' ')
|
||||
return error_box("La riga %d non puo' essere cancellata", r+1);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TPrimanota_application::descr_handler(TMask_field& f, KEY k)
|
||||
@ -840,12 +846,17 @@ bool TPrimanota_application::iva_notify(int r, KEY k)
|
||||
}
|
||||
|
||||
TBill oldconto(row, 6, 0x0); // g/c/s 6 7 8
|
||||
oldpos = bill2pos(oldconto, 'I');
|
||||
if (oldpos < 0 && oldconto.ok())
|
||||
if (oldconto.ok())
|
||||
{
|
||||
const TString80 d(cau.desc_agg(2));
|
||||
oldpos = app().set_cgs_row(-1, app().real2imp(ZERO, 'I'), oldconto, d, 'I');
|
||||
oldpos = bill2pos(oldconto, 'I');
|
||||
if (oldpos < 0)
|
||||
{
|
||||
const TString80 d(cau.desc_agg(2));
|
||||
oldpos = app().set_cgs_row(-1, app().real2imp(ZERO, 'I'), oldconto, d, 'I');
|
||||
}
|
||||
}
|
||||
else
|
||||
oldpos = -1; // Se il conto e' incompleto ignoralo
|
||||
}
|
||||
if (k == K_DEL) // Cancellazione di una riga
|
||||
{
|
||||
@ -928,26 +939,26 @@ bool TPrimanota_application::iva_notify(int r, KEY k)
|
||||
newposiva = app().set_cgs_row(-1, val, contoiva, d, tipod);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TImporto val(app().real2imp(imposta, 'I'));
|
||||
val = app().add_cgs_imp(newposiva, val);
|
||||
if (val.is_zero()) // Se la riga si e' azzerata ...
|
||||
{
|
||||
app().reset_cgs_row(newposiva); // ... cancellala
|
||||
newposiva = -1;
|
||||
}
|
||||
}
|
||||
|
||||
oldiva = imposta;
|
||||
oldposiva = newposiva;
|
||||
|
||||
if (r == 0) // Se cambio la prima riga ...
|
||||
app().add_cgs_tot(app().curr_mask()); // ... ricalcola conti
|
||||
app().calcola_imp(); // Ricalcola totale IVA
|
||||
app().calcola_saldo(); // Ricalcola sbilanci
|
||||
else
|
||||
{
|
||||
TImporto val(app().real2imp(imposta, 'I'));
|
||||
val = app().add_cgs_imp(newposiva, val);
|
||||
if (val.is_zero()) // Se la riga si e' azzerata ...
|
||||
{
|
||||
app().reset_cgs_row(newposiva); // ... cancellala
|
||||
newposiva = -1;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
oldiva = imposta;
|
||||
oldposiva = newposiva;
|
||||
|
||||
if (r == 0) // Se cambio la prima riga ...
|
||||
app().add_cgs_tot(app().curr_mask()); // ... ricalcola conti
|
||||
app().calcola_imp(); // Ricalcola totale IVA
|
||||
app().calcola_saldo(); // Ricalcola sbilanci
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@ -1069,7 +1080,13 @@ bool TPrimanota_application::num_handler(TMask_field& f, KEY key)
|
||||
if (num < max)
|
||||
{
|
||||
if (app().find(1))
|
||||
{
|
||||
const TLocalisamfile& mov = app()._rel->lfile();
|
||||
m.set(F_DATAREG, mov.get("DATAREG"));
|
||||
m.set(F_DATACOMP, mov.get("DATACOMP"));
|
||||
m.set(F_CODCAUS, mov.get("CODCAUS"));
|
||||
m.stop_run(K_AUTO_ENTER);
|
||||
}
|
||||
}
|
||||
else if (num > max)
|
||||
{
|
||||
@ -1138,7 +1155,7 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
|
||||
if ((key == K_TAB && f.focusdirty()) || key == K_ENTER)
|
||||
if ((key == K_TAB || key == K_ENTER) && f.dirty())
|
||||
{
|
||||
const TDate dr(f.get()); // Data dell'operazione
|
||||
if (dr > TDate(TODAY))
|
||||
@ -1158,7 +1175,7 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
|
||||
if (!ok)
|
||||
return f.error_box("Non esiste il libro giornale dell'esercizio %d", ae);
|
||||
|
||||
if (f.dirty() || m.query_mode())
|
||||
if (key == K_ENTER || f.focusdirty())
|
||||
{
|
||||
const long numreg = m.get_long(F_NUMREG);
|
||||
const bool error = numreg == 0 || numreg > app()._lastreg;
|
||||
@ -1168,7 +1185,7 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
f.error_box("La data dell'operazione e' antecedente al %s,\n"
|
||||
"ultima stampa del libro giornale dell'esercizio %d",
|
||||
gio.last_reg().string(), ae);
|
||||
gio.last_print().string(), ae);
|
||||
if (error) return FALSE;
|
||||
}
|
||||
if (dr < gio.last_reg())
|
||||
@ -1177,16 +1194,7 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
|
||||
gio.last_reg().string(), ae);
|
||||
|
||||
if (m.query_mode())
|
||||
{
|
||||
const long numreg = m.get_long(F_NUMREG);
|
||||
if (numreg > 0 && numreg <= app()._lastreg)
|
||||
{
|
||||
TLocalisamfile& mov = app().get_relation()->lfile();
|
||||
mov.put(MOV_NUMREG, numreg);
|
||||
if (mov.read() == NOERR)
|
||||
m.set(F_CODCAUS, mov.get(MOV_CODCAUS));
|
||||
}
|
||||
}
|
||||
app().causale().read(m.get(F_CODCAUS), dr.year());
|
||||
|
||||
TRegistro& reg = app().causale().reg();
|
||||
const TString16 codreg(reg.name());
|
||||
@ -1644,12 +1652,12 @@ bool TPrimanota_application::corrvaluta_handler(TMask_field& f, KEY key)
|
||||
}
|
||||
}
|
||||
} else
|
||||
if (key == K_ENTER && f.get().empty())
|
||||
{
|
||||
TMask_field& cl = f.mask().field(F_CORRLIRE);
|
||||
cl.set_dirty();
|
||||
cl.on_hit();
|
||||
}
|
||||
if (key == K_ENTER && f.get().empty())
|
||||
{
|
||||
TMask_field& cl = f.mask().field(F_CORRLIRE);
|
||||
cl.set_dirty();
|
||||
cl.on_hit();
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -58,7 +58,6 @@ bool TRegistro::read(const char* cod, int year)
|
||||
_att.zero();
|
||||
if (err != NOERR)
|
||||
_rec.zero();
|
||||
_prorata = -1.0;
|
||||
|
||||
return err == NOERR;
|
||||
}
|
||||
@ -152,6 +151,20 @@ bool TRegistro::read_att()
|
||||
if (err != NOERR)
|
||||
_att.zero();
|
||||
|
||||
TString16 chiave; // Anno - Attivita' - Tipo Attivita' (fissata a 1)
|
||||
chiave << year(); // non fare << year() << attivita()
|
||||
chiave << attivita() << "1";
|
||||
|
||||
TTable pla("PLA");
|
||||
pla.put("CODTAB", chiave);
|
||||
if (pla.read() == NOERR)
|
||||
{
|
||||
_prorata = pla.get_real("R8");
|
||||
_att.put("TIPOATT", pla.get("S7")); // Aggiorna tipo attivita'
|
||||
}
|
||||
else
|
||||
_prorata = 0.0;
|
||||
|
||||
return err == NOERR;
|
||||
}
|
||||
|
||||
@ -169,22 +182,10 @@ const TString& TRegistro::tipo_attivita()
|
||||
return _att.get("TIPOATT");
|
||||
}
|
||||
|
||||
|
||||
const real& TRegistro::prorata()
|
||||
{
|
||||
if (_prorata.sign() < 0)
|
||||
{
|
||||
TString16 chiave; // Anno - Attivita' - Tipo Attivita' (fissata a 1)
|
||||
chiave << year();
|
||||
chiave << attivita() << "1";
|
||||
|
||||
TTable pla("PLA");
|
||||
pla.put("CODTAB", chiave);
|
||||
if (pla.read() == NOERR)
|
||||
_prorata = pla.get_real("R8");
|
||||
else
|
||||
_prorata = 0.0;
|
||||
}
|
||||
|
||||
read_att();
|
||||
return _prorata;
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@ END
|
||||
STRING 108 5
|
||||
BEGIN
|
||||
PROMPT 2 2 ""
|
||||
HELP "Codice della descrizione aggiuntiva di riga"
|
||||
HELP "Codice della descrizione aggiuntiva della riga"
|
||||
FLAGS "U"
|
||||
USE %DPN
|
||||
DISPLAY "Codice" CODTAB
|
||||
@ -21,12 +21,12 @@ END
|
||||
STRING 109 50
|
||||
BEGIN
|
||||
PROMPT 14 2 ""
|
||||
USE %DPN
|
||||
USE %DPN KEY 2
|
||||
INPUT S0 109
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
COPY OUTPUT 108
|
||||
HELP "Descrizione aggiuntiva di riga"
|
||||
HELP "Descrizione aggiuntiva della riga"
|
||||
FIELD DESCR
|
||||
END
|
||||
|
||||
@ -38,7 +38,7 @@ END
|
||||
NUMBER 101 15
|
||||
BEGIN
|
||||
PROMPT 2 5 "Dare "
|
||||
HELP "Importo dare del conto della riga"
|
||||
HELP "Importo 'dare' del conto della riga"
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
@ -46,7 +46,7 @@ END
|
||||
NUMBER 102 15
|
||||
BEGIN
|
||||
PROMPT 42 5 "Avere "
|
||||
HELP "Importo avere del conto della riga"
|
||||
HELP "Importo 'avere' del conto della riga"
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
@ -115,7 +115,8 @@ bool TDeleteprovv_app::menu(MENU_TAG)
|
||||
|
||||
if (err == NOERR)
|
||||
{
|
||||
err = mov.remove(); // Isam bug on remove with key != 1
|
||||
mov.setkey(1); // Isam bug on remove with key != 1
|
||||
err = mov.remove();
|
||||
}
|
||||
else
|
||||
caption = "testata";
|
||||
|
@ -6,8 +6,6 @@
|
||||
#include <tabutil.h>
|
||||
#include <utility.h>
|
||||
#include <urldefid.h>
|
||||
#include <array.h>
|
||||
#include <lffiles.h>
|
||||
|
||||
#include <mov.h>
|
||||
#include <rmov.h>
|
||||
@ -1270,7 +1268,7 @@ print_action TListaMov_application::postprocess_page(int file,int count)
|
||||
int r = 0;
|
||||
for (int j = 0; j < _c.items(); j++)
|
||||
{
|
||||
TRigaiva& riga = (TRigaiva&)_c[j];
|
||||
TRigaiva& riga = _c.riga(j);
|
||||
//r = j+1;
|
||||
r++;
|
||||
set_row(r, "Imponibile@12g%15.0r", &riga._imponibile);
|
||||
|
@ -1,11 +1,9 @@
|
||||
#include <mask.h>
|
||||
#include <printapp.h>
|
||||
#include <relation.h>
|
||||
#include <tabutil.h>
|
||||
#include <utility.h>
|
||||
#include <sort.h>
|
||||
|
||||
#include <lffiles.h>
|
||||
#include <clifo.h>
|
||||
#include <pconti.h>
|
||||
#include <mov.h>
|
||||
|
@ -1,13 +1,12 @@
|
||||
// cg3400 - Stampa libro giornale
|
||||
|
||||
#include <isam.h>
|
||||
#include <config.h>
|
||||
#include <mask.h>
|
||||
#include <utility.h>
|
||||
#include <printapp.h>
|
||||
#include <progind.h>
|
||||
#include <tabutil.h>
|
||||
#include <urldefid.h>
|
||||
#include <printapp.h>
|
||||
#include <config.h>
|
||||
#include <progind.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include <mov.h>
|
||||
#include <rmov.h>
|
||||
@ -1081,8 +1080,8 @@ void CG3400_application::calcola_iva()
|
||||
void CG3400_application::setta_righe_descr(TParagraph_string* str, enum descr des)
|
||||
{
|
||||
int i = 1;
|
||||
TString16 frm;
|
||||
const char * r;
|
||||
const char* frm;
|
||||
const char* r;
|
||||
|
||||
switch (des)
|
||||
{
|
||||
@ -1105,10 +1104,11 @@ void CG3400_application::setta_righe_descr(TParagraph_string* str, enum descr de
|
||||
frm = "@69g%s";
|
||||
break;
|
||||
default:
|
||||
frm = "";
|
||||
break;
|
||||
}
|
||||
while ((r = str->get()) != NULL)
|
||||
set_row (i++, (const char*)frm, r);
|
||||
set_row (i++, frm, r);
|
||||
}
|
||||
|
||||
// NB
|
||||
@ -1121,23 +1121,28 @@ int CG3400_application::setta_righe_iva()
|
||||
|
||||
for (j = 0; j < _iva_array.items(); j++)
|
||||
{
|
||||
TRigaiva& riga = (TRigaiva&)_iva_array[j];
|
||||
TRigaiva& riga = _iva_array.riga(j);
|
||||
r = j+1;
|
||||
set_row(r, "Imponibile@12g%r", &riga._imponibile);
|
||||
set_row(r, "@31gImposta@39g%r", &riga._imposta);
|
||||
set_row(r, "@58gCodice Iva@68g%3s", (const char*)riga._codiva);
|
||||
switch (riga._tipodet)
|
||||
{
|
||||
case 0 : set_row(r, "@73gDetraibile");
|
||||
break;
|
||||
case 1 : set_row(r, "@73gIndetraibile su op.es.");
|
||||
break;
|
||||
case 3 : set_row(r, "@73gPassaggi interni");
|
||||
break;
|
||||
case 9 : set_row(r, "@73gIndetraibile art.19");
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
case 0:
|
||||
set_row(r, "@73gDetraibile");
|
||||
break;
|
||||
case 1:
|
||||
set_row(r, "@73gIndetraibile su op.es.");
|
||||
break;
|
||||
case 3:
|
||||
set_row(r, "@73gPassaggi interni");
|
||||
break;
|
||||
case 9:
|
||||
set_row(r, "@73gIndetraibile art.19");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
_iva_array.destroy();
|
||||
set_row (j+1, ""); // lascio una riga vuota dopo tutto cio'
|
||||
|
@ -2,9 +2,6 @@
|
||||
// TRigaiva_array
|
||||
// Tabella per il calcolo degli imponibili Iva
|
||||
|
||||
#include <array.h>
|
||||
#include <real.h>
|
||||
#include <strings.h>
|
||||
#include "cglib03.h"
|
||||
|
||||
bool TRigaiva_array::add_riga(const real& imponibile, const real& imposta, const char* codiva, const int tipodet, const int tipocr, const real& imponibilep, const real& impostap)
|
||||
@ -12,7 +9,7 @@ bool TRigaiva_array::add_riga(const real& imponibile, const real& imposta, const
|
||||
bool found = FALSE;
|
||||
for (int i = 0; i < items(); i++)
|
||||
{
|
||||
TRigaiva& r = (TRigaiva&)(*this)[i];
|
||||
TRigaiva& r = riga(i);
|
||||
if (r._codiva==codiva && tipodet==r._tipodet && tipocr==r._tipocr)
|
||||
{
|
||||
found = TRUE;
|
||||
@ -35,7 +32,7 @@ bool TRiga_array::add_riga(const real& imponibile, const real& imposta, const ch
|
||||
bool found = FALSE;
|
||||
for (int i = 0; i < items(); i++)
|
||||
{
|
||||
TRiga& r = (TRiga&)(*this)[i];
|
||||
TRiga& r = riga(i);
|
||||
if (r._codiva==codiva && r._tipodoc==tipodoc)
|
||||
{
|
||||
found = TRUE;
|
||||
@ -58,7 +55,7 @@ bool TDociva_array::add_riga(const char* _descrdociva, const real& _importo,cons
|
||||
bool found = FALSE;
|
||||
for (int i = 0; i < items(); i++)
|
||||
{
|
||||
TDociva& r = (TDociva&)(*this)[i];
|
||||
TDociva& r = riga(i);
|
||||
if (r._descrdoc==_descrdociva)
|
||||
{
|
||||
found = TRUE;
|
||||
|
10
cg/cglib03.h
10
cg/cglib03.h
@ -5,9 +5,13 @@
|
||||
#ifndef __CGLIB03_H
|
||||
#define __CGLIB03_H
|
||||
|
||||
#include <array.h>
|
||||
#ifndef __REAL_H
|
||||
#include <real.h>
|
||||
#endif
|
||||
|
||||
#ifndef __STRINGS_H
|
||||
#include <strings.h>
|
||||
#endif
|
||||
|
||||
struct TDociva : public TObject
|
||||
{
|
||||
@ -23,6 +27,7 @@ class TDociva_array : public TArray
|
||||
{
|
||||
public:
|
||||
bool add_riga(const char* _descrdociva,const real& _importo,const int _natdoc);
|
||||
TDociva& riga(int i) { return (TDociva&)(*this)[i]; }
|
||||
};
|
||||
|
||||
struct TRigaiva : public TObject
|
||||
@ -40,6 +45,7 @@ class TRigaiva_array : public TArray
|
||||
{
|
||||
public:
|
||||
bool add_riga(const real& imponibile, const real& imposta, const char* codiva, const int tipodet, const int tipocr, const real& imponibilep, const real& impostap);
|
||||
TRigaiva& riga(int i) { return (TRigaiva&)(*this)[i]; }
|
||||
};
|
||||
|
||||
struct TTipodoc : public TObject
|
||||
@ -55,6 +61,7 @@ class TTipodoc_array : public TArray
|
||||
{
|
||||
public:
|
||||
bool add_riga(const char* tipodoc, const char* descrdoc, const real& totdoc);
|
||||
TTipodoc& riga(int i) { return (TTipodoc&)(*this)[i]; }
|
||||
};
|
||||
|
||||
struct TRiga : public TObject
|
||||
@ -70,6 +77,7 @@ class TRiga_array : public TArray
|
||||
{
|
||||
public:
|
||||
bool add_riga(const real& imponibile, const real& imposta, const char* codiva, const char* tipodoc, const real& imponibilep, const real& impostap);
|
||||
TRiga& riga(int i) { return (TRiga&)(*this)[i]; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user