Adresse RNVP
This commit is contained in:
parent
7e02090e1b
commit
a840c40388
6
application/models/JoEtablissements.php
Normal file
6
application/models/JoEtablissements.php
Normal file
@ -0,0 +1,6 @@
|
||||
<?php
|
||||
class Application_Model_JoEtablissements extends Zend_Db_Table_Abstract
|
||||
{
|
||||
protected $_name = 'etablissements';
|
||||
protected $_schema = 'jo';
|
||||
}
|
6
application/models/VillesRnvpSources.php
Normal file
6
application/models/VillesRnvpSources.php
Normal file
@ -0,0 +1,6 @@
|
||||
<?php
|
||||
class Application_Model_VillesRnvpSources extends Zend_Db_Table_Abstract
|
||||
{
|
||||
protected $_name = 'rnvpSources';
|
||||
protected $_schema = 'villes';
|
||||
}
|
144
library/SdMetier/Rnvp/Adresse.php
Normal file
144
library/SdMetier/Rnvp/Adresse.php
Normal file
@ -0,0 +1,144 @@
|
||||
<?php
|
||||
class SdMetier_Rnvp_Adresse
|
||||
{
|
||||
protected $source;
|
||||
protected $sourceId;
|
||||
|
||||
protected $columns = array(
|
||||
'L1rnvp',
|
||||
'L2rnvp',
|
||||
'L3rnvp',
|
||||
'L4rnvp',
|
||||
'L5rnvp',
|
||||
'L6rnvp',
|
||||
'L7rnvp',
|
||||
'dateRetourRnvp',
|
||||
'codeRetour',
|
||||
'LPAD(Insee,5,0) as Insee',
|
||||
'CorrectionImportante',
|
||||
'CorrectionDouteuse',
|
||||
'CQadrs',
|
||||
'HexaCle',
|
||||
'NumDept',
|
||||
'IdHexavia',
|
||||
'IdHexaposte',
|
||||
'Iris_Rivoli',
|
||||
'Iris_Ilot99',
|
||||
'Iris_CodeIris',
|
||||
'Iris_Canton',
|
||||
'Cdx_Matricule',
|
||||
'Cdx_V5Geo',
|
||||
'Cdx_V6Geo',
|
||||
'Cdx_V5Cdx',
|
||||
'Cdx_V6Cdx',
|
||||
'dateInsert',
|
||||
'dateUpdate',
|
||||
);
|
||||
|
||||
/**
|
||||
* Récupération de l'adresse normalisé
|
||||
*/
|
||||
public function __construct(){}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param unknown $companyId
|
||||
*/
|
||||
public function setCompanyId($companyId)
|
||||
{
|
||||
$this->source = substr($companyId,0,3);
|
||||
$this->sourceId = substr($companyId,3,20);
|
||||
}
|
||||
|
||||
/**
|
||||
* Id de l'entreprise à partir du siret
|
||||
* @param string $companyId
|
||||
* @throws Exception
|
||||
* @return NULL
|
||||
*/
|
||||
public function setCompanyIdProxy($companyId)
|
||||
{
|
||||
try {
|
||||
$etabM = new Application_Model_JoEtablissements();
|
||||
$sql = $etabM->select(true)->columns(array('LPAD(source,3,0)', 'LPAD(source_id,20,0)'))
|
||||
->where('siren=?', substr($companyId,0,9))
|
||||
->where('nic=?', substr($companyId,9,5));
|
||||
$etabResult = $etabM->fetchRow($sql);
|
||||
if ($etabResult === null) {
|
||||
return null;
|
||||
}
|
||||
$this->source = $etabResult->source;
|
||||
$this->sourceId = $etabResult->source_id;
|
||||
} catch (Zend_Db_Exception $e) {
|
||||
throw new Exception($e->getMessage(), 'ERR');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Formattage de l'adresse normalisé
|
||||
* @return stdClass
|
||||
* @throws Exception
|
||||
*/
|
||||
public function format()
|
||||
{
|
||||
try
|
||||
{
|
||||
$rnvpM = new Application_Model_VillesRnvpSources();
|
||||
$sql = $rnvpM->select(true)->columns($this->columns)
|
||||
->where('source=?', $this->source)
|
||||
->where('source_id=?', $this->sourceId);
|
||||
$rnvpResult = $rnvpM->fetchRow($sql);
|
||||
if ($rnvpResult === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$rnvp = new stdClass();
|
||||
$rnvp->L1 = $rnvpResult->L1rnvp;
|
||||
$rnvp->L2 = $rnvpResult->L2rnvp;
|
||||
$rnvp->L3 = $rnvpResult->L3rnvp;
|
||||
$rnvp->L4 = $rnvpResult->L4rnvp;
|
||||
$rnvp->L5 = $rnvpResult->L5rnvp;
|
||||
$rnvp->L6 = $rnvpResult->L6rnvp;
|
||||
$rnvp->L7 = $rnvpResult->L7rnvp;
|
||||
|
||||
$rnvp->ProcessCode = $rnvpResult->codeRetour;
|
||||
$process = new SdMetier_Rnvp_Process();
|
||||
$correction = '';
|
||||
if ($rnvpResult->CorrectionImportante == 'I') {
|
||||
$correction = $rnvpResult->CorrectionImportante;
|
||||
}
|
||||
if ($rnvpResult->CorrectionDouteuse == 'D') {
|
||||
$correction = $rnvpResult->CorrectionDouteuse;
|
||||
}
|
||||
$rnvp->ProcessLabel = $process->getLabel($rnvpResult->codeRetour, $correction);
|
||||
$rnvp->ProcessDate = $rnvpResult->dateRetourRnvp;
|
||||
|
||||
// Label CQadrs
|
||||
$rnvp->QualityCode = $rnvpResult->CQadrs;
|
||||
$quality = new SdMetier_Rnvp_Quality();
|
||||
$rnvp->QualityLabel = $quality->getLabel($rnvp->QualityCode);
|
||||
|
||||
$rnvp->GeoInseeCommune = $rnvpResult->Insee;
|
||||
$rnvp->GeoHexavia = $rnvpResult->IdHexavia;
|
||||
$rnvp->GeoHexapost = $rnvpResult->IdHexaposte;
|
||||
$rnvp->GeoHexacle = $rnvpResult->HexaCle;
|
||||
$rnvp->GeoDepartement = $rnvpResult->NumDept;
|
||||
$rnvp->GeoRivoliCode = $rnvpResult->Iris_Rivoli;
|
||||
$rnvp->GeoIlot = $rnvpResult->Iris_Ilot99;
|
||||
$rnvp->GeoIris = $rnvpResult->Iris_CodeIris;
|
||||
$rnvp->GeoCanton = $rnvpResult->Iris_Canton;
|
||||
$rnvp->CedexaMatricule = $rnvpResult->Cdx_Matricule;
|
||||
$rnvp->CedexaGeoL5 = $rnvpResult->Cdx_V5Geo;
|
||||
$rnvp->CedexaGeoL6 = $rnvpResult->Cdx_V6Geo;
|
||||
$rnvp->CedexaCdxL5 = $rnvpResult->Cdx_V5Cdx;
|
||||
$rnvp->CedexaCdxL6 = $rnvpResult->Cdx_V6Cdx;
|
||||
$rnvp->DateInsert = $rnvpResult->dateInsert;
|
||||
$rnvp->DateUpdate = $rnvpResult->dateUpdate;
|
||||
|
||||
} catch (Zend_Db_Exception $e) {
|
||||
throw new Exception($e->getMessage(), 'ERR');
|
||||
}
|
||||
|
||||
return $rnvp;
|
||||
}
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
<?php
|
||||
class SdMetier_Rnvp_Detail
|
||||
{
|
||||
|
||||
|
||||
}
|
34
library/SdMetier/Rnvp/Process.php
Normal file
34
library/SdMetier/Rnvp/Process.php
Normal file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
class SdMetier_Rnvp_Process
|
||||
{
|
||||
public function __construct() {}
|
||||
|
||||
/**
|
||||
* Libelle de traitement
|
||||
* @param string $code
|
||||
* @param string $correction
|
||||
*/
|
||||
public function getLabel($code, $correction)
|
||||
{
|
||||
$label = '';
|
||||
switch($code) {
|
||||
case 'ND':
|
||||
$label = "ND";
|
||||
break;
|
||||
case 'KO':
|
||||
$label = "KO";
|
||||
break;
|
||||
case 'OK':
|
||||
$label = "Adresse correcte";
|
||||
if ($correction == 'I') {
|
||||
$label = "Adresse avec correction(s) importante(s)";
|
||||
}
|
||||
if ($rnvpResult->CorrectionDouteuse == 'D') {
|
||||
$label = "Adresse mais correction(s) douteuse(s)";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return $label;
|
||||
}
|
||||
}
|
43
library/SdMetier/Rnvp/Quality.php
Normal file
43
library/SdMetier/Rnvp/Quality.php
Normal file
@ -0,0 +1,43 @@
|
||||
<?php
|
||||
class SdMetier_Rnvp_Quality
|
||||
{
|
||||
/**
|
||||
* Libellé des codes qualités
|
||||
* @var array
|
||||
*/
|
||||
protected $labels = array(
|
||||
'10' => "Adresse correcte",
|
||||
'20' => "Adresse correcte (Voie non reconnue, mais il s'agit d'un cedex ou BP)",
|
||||
'21' => "Petite ville, Numéro de facade hors borne.",
|
||||
'22' => "Petite ville, Numéro de facade absent (le reste de l'adresse est correcte)",
|
||||
'23' => "Grande ville, Numéro de facade hors borne.",
|
||||
'24' => "Grande ville, Numéro de facade absent (le reste de l'adresse est correcte)",
|
||||
'30' => "Petite ville, voie non reconnue",
|
||||
'31' => "Petite ville, voie non reconnue (info quartier reconnu, ne permettant pas de déduire la voie)",
|
||||
'40' => "Petite ville, voie absente (info quartier reconnu, ne permettant pas de déduire la voie)",
|
||||
'41' => "Petite ville, voie absente",
|
||||
'50' => "Grande ville, voie non reconnue",
|
||||
'51' => "Grande ville, voie non reconnue (info quartier reconnu, ne permettant pas de déduire la voie)",
|
||||
'60' => "Grande ville, voie absente (info quartier reconnu, ne permettant pas de déduire la voie)",
|
||||
'61' => "Grande ville, voie absente",
|
||||
'70' => "Cp/Ville non corrigeable (voie présente)",
|
||||
'80' => "Cp/Ville non corrigeable (voie absente)",
|
||||
'90' => "Etranger détecté",
|
||||
);
|
||||
|
||||
public function __construct(){}
|
||||
|
||||
/**
|
||||
* Label qualité en fonction du code
|
||||
* @param string $code
|
||||
*/
|
||||
public function getLabel($code)
|
||||
{
|
||||
$label = '';
|
||||
if (array_key_exists($code, $this->labels)) {
|
||||
$label = $this->labels[$code];
|
||||
}
|
||||
|
||||
return $label;
|
||||
}
|
||||
}
|
@ -1882,12 +1882,22 @@ class SdMetier_Scoring_Base extends SdMetier_Scoring_Vars
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
}
|
||||
// --- Ni P, Ni PL
|
||||
else {
|
||||
$tabProCol = $iInsee->annoncesFilter($companyAnnonces, 'PH');
|
||||
if (count($tabProCol)>0) $this->ANNONCEPCHISTO=true;
|
||||
else $this->ANNONCEPCHISTO=false;
|
||||
if ($tabIdentite['Actif']==0) $this->ELIMINE=true;
|
||||
else $this->ELIMINE=false;
|
||||
if (count($tabProCol) > 0) {
|
||||
$this->ANNONCEPCHISTO = true;
|
||||
}
|
||||
else {
|
||||
$this->ANNONCEPCHISTO = false;
|
||||
}
|
||||
if ($tabIdentite['Actif'] == 0) {
|
||||
$this->ELIMINE = true;
|
||||
}
|
||||
else {
|
||||
$this->ELIMINE = false;
|
||||
}
|
||||
}
|
||||
|
||||
/** Annonces d'Homologation **/
|
||||
@ -2675,11 +2685,17 @@ class SdMetier_Scoring_Base extends SdMetier_Scoring_Vars
|
||||
|
||||
// Paiements
|
||||
$this->MODIFDERDATE = $this->MODIFINSEEDATE;
|
||||
if ($this->MODIFPAIDATE>$this->MODIFDERDATE) $this->MODIFDERDATE = $this->MODIFPAIDATE;
|
||||
if ($this->MODIFPAIDATE > $this->MODIFDERDATE) {
|
||||
$this->MODIFDERDATE = $this->MODIFPAIDATE;
|
||||
}
|
||||
// Rcs
|
||||
if ($this->MODIFRNCSDATE > $this->MODIFDERDATE) $this->MODIFDERDATE = $this->MODIFRNCSDATE;
|
||||
if ($this->MODIFRNCSDATE > $this->MODIFDERDATE) {
|
||||
$this->MODIFDERDATE = $this->MODIFRNCSDATE;
|
||||
}
|
||||
// Annonces
|
||||
if ($this->ANNONCEDERDATE > $this->MODIFDERDATE) $this->MODIFDERDATE = $this->ANNONCEDERDATE;
|
||||
if ($this->ANNONCEDERDATE > $this->MODIFDERDATE) {
|
||||
$this->MODIFDERDATE = $this->ANNONCEDERDATE;
|
||||
}
|
||||
|
||||
// --- Cut Off
|
||||
$this->ENQUETE='';
|
||||
@ -2740,6 +2756,9 @@ class SdMetier_Scoring_Base extends SdMetier_Scoring_Vars
|
||||
if ($tabIdentite['SituationJuridique']=='P') {
|
||||
$noteSolvabilite = $this->SCORECONF = $this->SCOREDIRI = 0;
|
||||
$analyseConf = "L'entreprise est en procédure collective";
|
||||
} elseif ($tabIdentite['SituationJuridique']=='CL') {
|
||||
$noteSolvabilite = $SCORECONF = $SCOREDIRI = 0;
|
||||
$analyseConf = "Cloture après la procédure";
|
||||
} elseif ($tabIdentite['SituationJuridique']=='D') {
|
||||
$noteSolvabilite = $this->SCORECONF = $this->SCOREDIRI = 0;
|
||||
$analyseConf = "L'entreprise est dissoute";
|
||||
@ -2938,8 +2957,10 @@ class SdMetier_Scoring_Base extends SdMetier_Scoring_Vars
|
||||
$libEncours='Aucun risque de défaillance sur les administrations ou institutions.';
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
// Encours à 0 car score < 40
|
||||
}
|
||||
// Encours à 0 car score < 40
|
||||
else {
|
||||
|
||||
$this->ENCOURSCALC=$this->ENCOURS;
|
||||
$this->ENCOURS=0;
|
||||
$libEncours='Aucun encours conseillé par rapport à notre évaluation.';
|
||||
|
@ -16,7 +16,7 @@ return array(
|
||||
1 => array(
|
||||
'name' => 'VORp-2.1',
|
||||
'value' => 'VERT',
|
||||
'comment' => "Pas de limite de crédit sur ce siren",
|
||||
'comment' => "Pas de DEC nécessaire sur ce siren",
|
||||
'po' => 0,
|
||||
'params' => array(
|
||||
0 => array( 'var' => 'NAF', 'type' => 'LIST', 'value' => 'TabAdminNaf', 'define' => array( 'var' => 'IsAdmin', 'value' => '1')),
|
||||
@ -25,7 +25,7 @@ return array(
|
||||
2 => array(
|
||||
'name' => 'VORp-2.2',
|
||||
'value' => 'VERT',
|
||||
'comment' => "Pas de limite de crédit sur ce siren",
|
||||
'comment' => "Pas de DEC nécessaire sur ce siren",
|
||||
'po' => 0,
|
||||
'params' => array(
|
||||
0 => array( 'var' => 'FJ', 'type' => 'LIST', 'value' => 'TabAdminFj', 'define' => array( 'var' => 'IsAdmin', 'value' => '1')),
|
||||
@ -115,7 +115,7 @@ return array(
|
||||
11 => array(
|
||||
'name' => 'VORp-8.0',
|
||||
'value' => 'VERT',
|
||||
'comment' => "Pas de limite de crédit sur ce siren",
|
||||
'comment' => "Pas de DEC nécessaire sur ce siren",
|
||||
'po' => 0,
|
||||
'params' => array(
|
||||
0 => array( 'var' => 'TypeEntrep', 'type' => 'EGAL', 'value' => 'GE'),
|
||||
@ -125,7 +125,7 @@ return array(
|
||||
12 => array(
|
||||
'name' => 'VORp-9.0',
|
||||
'value' => 'VERT',
|
||||
'comment' => "Pas de limite de crédit sur ce siren",
|
||||
'comment' => "Pas de DEC nécessaire sur ce siren",
|
||||
'po' => 0,
|
||||
'params' => array(
|
||||
0 => array( 'var' => 'TypeEntrep', 'type' => 'EGAL', 'value' => 'CAC'),
|
||||
@ -147,18 +147,18 @@ return array(
|
||||
'comment' => "Faire une DEC si dépassement de la PO proposée",
|
||||
'po' => 1,
|
||||
'params' => array(
|
||||
0 => array( 'var' => 'Indiscore', 'type' => 'MAX', 'value' => '10'),
|
||||
0 => array( 'var' => 'Indiscore', 'type' => 'MAX', 'value' => '9'),
|
||||
1 => array( 'var' => 'Indiscore', 'type' => 'MIN', 'value' => '5'),
|
||||
),
|
||||
),
|
||||
15 => array(
|
||||
'name' => 'VORp-6.3',
|
||||
'value' => 'VERT',
|
||||
'comment' => "Pas de limite de crédit sur ce siren",
|
||||
'comment' => "Pas de DEC nécessaire sur ce siren",
|
||||
'po' => 0,
|
||||
'params' => array(
|
||||
0 => array( 'var' => 'Indiscore', 'type' => 'MAX', 'value' => '21'),
|
||||
1 => array( 'var' => 'Indiscore', 'type' => 'MIN', 'value' => '9'),
|
||||
1 => array( 'var' => 'Indiscore', 'type' => 'MIN', 'value' => '8'),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
@ -1,8 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
require_once 'Metier/Scores/MScores.php';
|
||||
|
||||
class SdMetier_Sfr_Scoring
|
||||
{
|
||||
/**
|
||||
@ -736,19 +734,21 @@ class SdMetier_Sfr_Scoring
|
||||
if ( $this->displayPo ) {
|
||||
$this->ValPO = $this->paramValue($rule['value']);
|
||||
}
|
||||
if ($this->debug) file_put_contents('sfr.log', "VALIDATION : ValPO = ".$this->ValPO."\n", FILE_APPEND);
|
||||
|
||||
} else {
|
||||
|
||||
$this->RuleLabel = $rule['name'];
|
||||
$this->displayPo = intval($rule['po']);
|
||||
|
||||
$this->ValFEU = $this->paramValue($rule['value']);
|
||||
|
||||
if ($this->debug) file_put_contents('sfr.log', "VALIDATION : ValFEU = ".$this->ValFEU."\n", FILE_APPEND);
|
||||
|
||||
$this->ValComment = $rule['comment'];
|
||||
|
||||
if ($this->debug) file_put_contents('sfr.log', "VALIDATION : ValComment = ".$this->ValComment."\n", FILE_APPEND);
|
||||
if ($this->debug) file_put_contents('sfr.log', "VALIDATION : ValFEU = ".$this->ValFEU."\n", FILE_APPEND);
|
||||
if ($this->debug) file_put_contents('sfr.log', "VALIDATION : AFFICHE PO = ".$this->displayPo."\n", FILE_APPEND);
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1259,51 +1259,67 @@ function indiScoreData($siren, $nic, $values = false)
|
||||
|
||||
function AdresseNormaliseEntete($values)
|
||||
{
|
||||
return array(
|
||||
'AdresseL1_NOM',
|
||||
'AdresseL2_NOM2',
|
||||
'AdresseL3_ADRCOMP',
|
||||
'AdresseL4_VOIE',
|
||||
'AdresseL5_DISTSP',
|
||||
'AdresseL6_POST',
|
||||
'AdresseL7_PAYS',
|
||||
);
|
||||
return array(
|
||||
'L1',
|
||||
'L2',
|
||||
'L3',
|
||||
'L4',
|
||||
'L5',
|
||||
'L6',
|
||||
'L7',
|
||||
'ProcessCode',
|
||||
'ProcessLabel',
|
||||
'ProcessDate',
|
||||
'QualityCode',
|
||||
'QualityLabel',
|
||||
'DateInsert',
|
||||
'DateUpdate',
|
||||
);
|
||||
}
|
||||
|
||||
function AdresseNormaliseData($siren, $nic, $values = false)
|
||||
{
|
||||
global $iDb;
|
||||
$iInsee = new Metier_Insee_MInsee($iDb);
|
||||
$output['AdresseL1_NOM'] ='';
|
||||
$output['AdresseL2_NOM2'] ='';
|
||||
$output['AdresseL3_ADRCOMP'] ='';
|
||||
$output['AdresseL4_VOIE'] ='';
|
||||
$output['AdresseL5_DISTSP'] ='';
|
||||
$output['AdresseL6_POST'] ='';
|
||||
$output['AdresseL7_PAYS'] ='';
|
||||
$tmp = $iInsee->getAdresse($siren, $nic);
|
||||
if (count($tmp)>0) {
|
||||
$output['AdresseL1_NOM'] = $tmp['L1_NOM'];
|
||||
$output['AdresseL2_NOM2'] = $tmp['L2_NOM2'];
|
||||
$output['AdresseL3_ADRCOMP'] = $tmp['L3_ADRCOMP'];
|
||||
$output['AdresseL4_VOIE'] = $tmp['L4_VOIE'];
|
||||
$output['AdresseL5_DISTSP'] = $tmp['L5_DISTP'];
|
||||
$output['AdresseL6_POST'] = $tmp['L6_POST'];
|
||||
$output['AdresseL7_PAYS'] = $tmp['L1_PAYS'];
|
||||
}
|
||||
try {
|
||||
$etabM = new Application_Model_JoEtablissements();
|
||||
$sql = $etabM->select(true)->columns(array('LPAD(source,3,0)', 'LPAD(source_id,20,0)'))
|
||||
->where('siren=?', $siren)
|
||||
->where('nic=?', $nic);
|
||||
$etabResult = $etabM->fetchRow($sql);
|
||||
$source = $etabResult->source;
|
||||
$sourceId = $etabResult->source_id;
|
||||
|
||||
} catch (Zend_Db_Exception $e) {}
|
||||
|
||||
try {
|
||||
$rnvp = new SdMetier_Rnvp_Adresse();
|
||||
$rnvp->setCompanyId($companyId);
|
||||
$infoRNVP = new Rnvp();
|
||||
$infoRNVP = $rnvp->format();
|
||||
} catch (Exception $e) {}
|
||||
|
||||
foreach($item as AdresseNormaliseEntete($values)) {
|
||||
$output[$item] = '';
|
||||
}
|
||||
|
||||
if ($infoRNVP !== null) {
|
||||
foreach ($item as AdresseNormaliseEntete($values)) {
|
||||
$output[$item] = $infoRNVP->{$item};
|
||||
}
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
function AdresseNormaliseInseeEntete($values)
|
||||
{
|
||||
return array(
|
||||
'L1_NOM',
|
||||
'L2_NOM2',
|
||||
'L3_ADRCOMP',
|
||||
'L4_VOIE',
|
||||
'L5_DISTSP',
|
||||
'L6_POST',
|
||||
'L7_PAYS',
|
||||
'AdresseL1_NOM',
|
||||
'AdresseL2_NOM2',
|
||||
'AdresseL3_ADRCOMP',
|
||||
'AdresseL4_VOIE',
|
||||
'AdresseL5_DISTSP',
|
||||
'AdresseL6_POST',
|
||||
'AdresseL7_PAYS',
|
||||
);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user