391 lines
21 KiB
PHP
391 lines
21 KiB
PHP
<?
|
|
/*
|
|
2. Concernant la date de fin de CS, devons nous comprendre les cas suivants de la sorte :
|
|
A. 026 820 043 I 2009-10-31 La CS était valide jusq'au 31/10/2009... L'entreprise n'a plus de CS ? ou la CS est encore à prendre en compte ?
|
|
Lorsqu'une cs manuelle arrive à échéance, elle est soumise à l'examen de l'analyste chaque mois. Si l'analyste n'intervient pas l'acheteur reste en cs.
|
|
B. 077 250 025 I 0000-00-00 La CS I n'est plus à prendre en compte ou au contraire, elle n'a pas de date de fin ?
|
|
L'acheteur a été sorti de cs entre le traitement de fin de mois et l'extraction ( qui a été déclenchée tardivement à la main ). L'acheteur n'est donc plus en cs.
|
|
C. 067 103 598 I 2999-12-31 La CS I n'a pas de date de fin sauf changement ultérieur de CS
|
|
Ce cas fait partie des nettoyages à faire par le Crédit ( échéance illimitée sur une cs qui ne le justifie pas ).
|
|
D. 067 200 329 I 2010-06-30 La CS est valide jusq'au 30/06/2010... Quid après ?
|
|
Cette cs ayant été positionnée par l'analyste, elle sera de nouveau soumise à son examen.
|
|
|
|
3. Globalement, j'ai l'impression que la CS "Paiements" à une durée de 6-12 mois et la CS "Privilèges" de 12-24 mois ?
|
|
La cs paiement a une durée de 6 ou 12 mois pour les cas graves.
|
|
La cs privilège a une durée de 27 mois ( sauf bien sur les cs manuelles qui sont à la convenance de l'analyste, en général 12 mois ).
|
|
*/
|
|
class MFacto {
|
|
|
|
public $risqueImpaye=false; // Y a t'il un risque d'impayé ?
|
|
public $risqueImpayeMois=0;
|
|
public $profilPayeur=0; // 0:N/D, 1:Excellent, 2=Bon, 3=Normal, 4=Lent, 5=Mauvais ou Défaut
|
|
|
|
private $typeFlux = 0; // Type de flux en chargement 0:Acheteur, 1=CS, 2=Paiements
|
|
private $iDb;
|
|
|
|
public $DELAIPAY=0;
|
|
public $DELAIPAYp='';
|
|
public $DELAIPAY_MMAA='';
|
|
|
|
private $tabInfoCS=array(
|
|
'_00'=>array('risque'=>0,'type'=>'OK', 'libInt'=>'Néant', 'libExt'=>'Aucune difficulté significative ne nous a été signalée'),
|
|
'_10'=>array('risque'=>3,'type'=>'IP', 'libInt'=>'Impayé BDF', 'libExt'=>"A surveiller. Présence d'impayé(s)"),
|
|
'_11'=>array('risque'=>3,'type'=>'IP', 'libInt'=>'Retard de paiement - Prorogation', 'libExt'=>'A suivre. Retard(s) de paiement(s) signalé(s)'),
|
|
'_12'=>array('risque'=>3,'type'=>'IP', 'libInt'=>'Impayé Groupe Facto', 'libExt'=>"A surveiller. Présence d'impayé(s)"),
|
|
'_13'=>array('risque'=>3,'type'=>'IP', 'libInt'=>'Impayé BDF (sup. à limite)', 'libExt'=>"A surveiller. Présence d'impayé(s)"),
|
|
'_15'=>array('risque'=>3,'type'=>'PR', 'libInt'=>'PRIVILEGES URSSAF', 'libExt'=>'A surveiller. Présence de privilèges'),
|
|
'_16'=>array('risque'=>3,'type'=>'PR', 'libInt'=>'AUTRES PRIVILEGES', 'libExt'=>'A surveiller. Présence de Privilèges'),
|
|
'_20'=>array('risque'=>4,'type'=>'BL', 'libInt'=>'LIQUIDATION JUDICIAIRE', 'libExt'=>'Liquidation Judiciaire'),
|
|
'_21'=>array('risque'=>1,'type'=>'BC', 'libInt'=>'CESSATION D\'ACTIVITE', 'libExt'=>'A suivre. Informations terrain. Risque de fermeture'),
|
|
'_22'=>array('risque'=>1,'type'=>'BD', 'libInt'=>'RADIATION RCS', 'libExt'=>'Radiation du RCS'),
|
|
'_23'=>array('risque'=>1,'type'=>'BG', 'libInt'=>'LOCATION GERANCE', 'libExt'=>'Prise en location Gérance'),
|
|
'_24'=>array('risque'=>2,'type'=>'RG', 'libInt'=>'GROUPE EN DIFFICULTE', 'libExt'=>'A suivre. Entreprise(s) du groupe signalée(s) en difficulté(s)'),
|
|
'_25'=>array('risque'=>2,'type'=>'DEF', 'libInt'=>'INFORMATIONS NEGATIVES', 'libExt'=>'A suivre. Informations terrain récentes négatives'),
|
|
'_26'=>array('risque'=>4,'type'=>'BP', 'libInt'=>'PLAN DE CESSION / DE REDRESSEMENT ', 'libExt'=>'Plan de cession/redressement'),
|
|
'_27'=>array('risque'=>4,'type'=>'BR', 'libInt'=>'REDRESSEMENT JUDICIAIRE', 'libExt'=>'Redressement Judiciaire'),
|
|
'_28'=>array('risque'=>4,'type'=>'BH', 'libInt'=>'HOMOLOGATION CONCILIATION / REG.AMIABLE', 'libExt'=>'Conciliation, Homologation ou règlement amiable'),
|
|
'_29'=>array('risque'=>1,'type'=>'BF', 'libInt'=>'FUSION - ABSORPTION', 'libExt'=>'Fusion/Absorption'),
|
|
'_30'=>array('risque'=>3,'type'=>'IP', 'libInt'=>'MAUVAISE COTE BDF : .8 ou .9', 'libExt'=>"Présence d'impayé(s)"),
|
|
'_31'=>array('risque'=>1,'type'=>'TC', 'libInt'=>'CESSATION ANNONCEE', 'libExt'=>'Fin d\'activité programmée'),
|
|
'_33'=>array('risque'=>4,'type'=>'BS', 'libInt'=>'PROCEDURE DE SAUVEGARDE JUGEMENT', 'libExt'=>'Procédure de Sauvegarde'),
|
|
'_34'=>array('risque'=>4,'type'=>'BV', 'libInt'=>'PLAN DE SAUVEGARDE', 'libExt'=>'Plan de sauvegarde'),
|
|
'_35'=>array('risque'=>2,'type'=>'DEF', 'libInt'=>'ANALYSE FINANCIERE NEGATIVE', 'libExt'=>'A suivre. Informations terrain récentes négatives'),
|
|
'_36'=>array('risque'=>2,'type'=>'DEF', 'libInt'=>'BILAN NEGATIF', 'libExt'=>'A suivre. Informations terrain récentes négatives'),
|
|
'_37'=>array('risque'=>2,'type'=>'DEF', 'libInt'=>'TRESORERIE SERREE', 'libExt'=>'A suivre. Informations terrain récentes négatives'),
|
|
'_39'=>array('risque'=>2,'type'=>'DEF', 'libInt'=>'PREVISIONS NEGATIVES', 'libExt'=>'A suivre. Informations terrain récentes négatives'),
|
|
'_43'=>array('risque'=>2,'type'=>'LC', 'libInt'=>'LC SFAC', 'libExt'=>"A suivre. Garantie d'assurance crédit limitée"),
|
|
'_45'=>array('risque'=>2,'type'=>'LC', 'libInt'=>'REFUS SFAC DOM-TOM', 'libExt'=>"A suivre. Garantie d'assurance crédit limitée"),
|
|
// '_47'=>array('risque'=>2,'type'=>'LC', 'libInt'=>'LISTE CONFIDENTIELLE LEASER', 'libExt'=>"A suivre. Garantie d'assurance crédit limitée"),
|
|
'_50'=>array('risque'=>2,'type'=>'KO', 'libInt'=>'LIENS AVEC UNE ORGANISATION TERRORISTE', 'libExt'=>'Attention, liens internationaux très risqués'),
|
|
// Nouveaux regroupements GE
|
|
'_I' =>array('risque'=>3,'type'=>'IP', 'libInt'=>'Impayés', 'libExt'=>"A surveiller. Présence d'impayé(s) dans les 12 derniers mois"),
|
|
'_P' =>array('risque'=>3,'type'=>'PR', 'libInt'=>'PRIVILEGES', 'libExt'=>'A surveiller. Présence de privilèges dans les 24 derniers mois'),
|
|
'_D' =>array('risque'=>2,'type'=>'DEF', 'libInt'=>'PREVISIONS NEGATIVES', 'libExt'=>'A suivre. Informations terrain récentes négatives'),
|
|
'_T' =>array('risque'=>2,'type'=>'LC', 'libInt'=>'LC Quelconque', 'libExt'=>"Nombreuses demandes d'avis de crédit"),
|
|
);
|
|
|
|
private $tabTranches=array( 0=>6,
|
|
30=>36,
|
|
60=>66,
|
|
90=>96,
|
|
120=>126,
|
|
150=>156,
|
|
180=>999);
|
|
|
|
private $tabMontants=array( 1=>500,
|
|
2=>2000,
|
|
10=>10000,
|
|
20=>20000,
|
|
50=>50000,
|
|
100=>100000,
|
|
200=>200000,
|
|
999=>999999);
|
|
|
|
// private $siren=0;
|
|
// private $tabPaiements=array();
|
|
|
|
function __construct() {
|
|
$this->iDb=new WDB('sdv1');
|
|
}
|
|
|
|
function __destruct() {
|
|
}
|
|
|
|
public function setTypeFic($typeFic) {
|
|
$this->typeFlux=$typeFic;
|
|
}
|
|
|
|
public function readFic($a) {
|
|
switch ($this->typeFlux) {
|
|
case 0: // Acheteur
|
|
$tab=array( 'NUMACH'=> trim(substr($a, 0, 6)),
|
|
'SIRENE'=> trim(substr($a, 6, 9)),
|
|
'RAISOC'=> trim(substr($a, 15, 35)),
|
|
'NUMVOI'=> trim(substr($a, 50, 4)),
|
|
'TYPVOI'=> trim(substr($a, 54, 3)),
|
|
'LIBVOI'=> trim(substr($a, 57, 30)),
|
|
'VILLE' => trim(substr($a, 87, 26)),
|
|
'CODPOS'=> trim(substr($a,113, 5)),
|
|
'FILLER'=> trim(substr($a,118, 2)));
|
|
break;
|
|
case 1: // CS
|
|
/*$tab=array( 'DATMAJ1'=> WDate::dateT('ymd','Y-m-d', substr($a, 0, 6)),
|
|
'NUMGFH'=> trim(substr($a, 6, 6)),
|
|
'CSAVAN'=> trim(substr($a, 12, 2)),
|
|
'CSAPRE'=> trim(substr($a, 14, 2)),
|
|
'INDAUT'=> trim(substr($a, 16, 1)),
|
|
'CODUTI'=> trim(substr($a, 17, 6)),
|
|
'INIMAJ'=> trim(substr($a, 23, 3)),
|
|
'ANAACH'=> trim(substr($a, 25, 2)),
|
|
'ANAPOR'=> trim(substr($a, 27, 2)));*/
|
|
$tab=array( 'siren' => trim(substr($a, 0, 9)),
|
|
'cs' => trim(substr($a, 9, 2)),
|
|
'dateFin'=> trim(substr($a, 11, 8)));
|
|
break;
|
|
case 2: // Paiements
|
|
$tab=array( 'NUMACH'=> trim(substr($a, 0, 6)),
|
|
'DATPIE'=> substr($a, 6, 8),
|
|
'DATECH'=> substr($a, 14, 8),
|
|
'DATPAI'=> substr($a, 22, 8),
|
|
'MNTPIE'=> trim(substr($a, 30, 13)),
|
|
'MNTFRF'=> trim(substr($a, 43, 13)),
|
|
'MNTLIT'=> trim(substr($a, 56, 13)),
|
|
'CODDEV'=> trim(substr($a, 69, 3)));
|
|
break;
|
|
}
|
|
return $tab;
|
|
}
|
|
|
|
|
|
public function getCoteSpeciale($siren) {
|
|
$ret=$this->iDb->select( 'ge_cs2',
|
|
'siren, cs, dateFin, dateInsert, dateConf',
|
|
"siren=$siren AND (dateSuppr=0 OR dateConf>dateSuppr) AND (dateFin=0 OR dateFin>NOW()) AND cs NOT IN (20,22,27,33,34) ORDER BY dateConf DESC, dateInsert DESC", false, MYSQL_ASSOC);
|
|
$tabRet=array();
|
|
foreach ($ret as $i=>$tabCS) {
|
|
$dateEven=$tabCS['dateConf'];
|
|
if ($dateEven=='0000-00-00') $dateEven=$tabCS['dateInsert'];
|
|
$tabRet[]=array('DateEven' => $dateEven,
|
|
'DateFin' => $tabCS['dateFin'],
|
|
'CoteCS' => $tabCS['cs'],
|
|
// 'CoteCSpre' => $tabCS['CSAVAN'],
|
|
'LibCS' => $this->tabInfoCS['_'.$tabCS['cs']]['libExt'],
|
|
// 'LibCSpre' => $this->tabInfoCS[$tabCS['CSAVAN']*1]['libExt'],
|
|
'NivRisque' => $this->tabInfoCS['_'.$tabCS['cs']]['risque'],
|
|
//'NivRisquePre' => $this->tabInfoCS[$tabCS['CSAVAN']*1]['risque'],
|
|
'CodeRisque' => $this->tabInfoCS['_'.$tabCS['cs']]['type'],
|
|
);
|
|
}
|
|
return $tabRet;
|
|
}
|
|
|
|
public function getCoteSpecialeOld($siren) {
|
|
$ret=$this->iDb->select( 'ge_cs c LEFT JOIN ge_acheteurs a ON a.NUMACH=c.NUMGFH',
|
|
'DATMAJ1, NUMGFH, CSAVAN, CSAPRE, SIRENE',
|
|
"a.SIRENE=$siren ORDER BY a.SIRENE ASC, c.DATMAJ1 DESC", false, MYSQL_ASSOC);
|
|
$tabRet=array();
|
|
foreach ($ret as $i=>$tabCS) {
|
|
$tabRet[]=array('DateEven' => $tabCS['DATMAJ1'],
|
|
'CoteCS' => $tabCS['CSAPRE'],
|
|
'CoteCSpre' => $tabCS['CSAVAN'],
|
|
'LibCS' => $this->tabInfoCS[$tabCS['CSAPRE']*1]['libExt'],
|
|
'LibCSpre' => $this->tabInfoCS[$tabCS['CSAVAN']*1]['libExt'],
|
|
'NivRisque' => $this->tabInfoCS[$tabCS['CSAPRE']*1]['risque'],
|
|
'NivRisquePre' => $this->tabInfoCS[$tabCS['CSAVAN']*1]['risque'],
|
|
'CodeRisque' => $this->tabInfoCS[$tabCS['CSAPRE']*1]['type'],
|
|
);
|
|
}
|
|
return $tabRet;
|
|
}
|
|
|
|
public function getPaiements($siren, $echelle='mois') {
|
|
|
|
if ($echelle=='jour')
|
|
$strGroupBy="GROUP BY p.DATPIE ";
|
|
elseif ($echelle=='' || $echelle=='mois')
|
|
$strGroupBy="GROUP BY mois HAVING nbPieces>2 ";
|
|
elseif ($echelle=='trim')
|
|
$strGroupBy="GROUP BY trimestre HAVING nbPieces>2 ";
|
|
else // En mois par défaut
|
|
$strGroupBy="GROUP BY mois HAVING nbPieces>2 ";
|
|
|
|
$ret=$this->iDb->select( 'ge_paiements p LEFT JOIN ge_acheteurs a ON a.NUMACH=p.NUMACH',
|
|
"p.NUMACH, DATE_FORMAT(p.DATPIE, '%Y-%m') AS mois,
|
|
CONCAT(DATE_FORMAT(p.DATPIE,'%Y'),'-',IF(DATE_FORMAT(p.DATPIE,'%m')<4,1,IF(DATE_FORMAT(p.DATPIE,'%m')<7,2,IF(DATE_FORMAT(p.DATPIE,'%m')<10,3,4)))) AS trimestre,
|
|
count(*) AS nbPieces,
|
|
AVG(DATEDIFF(NOW(), p.DATECH)) AS nbJourRetard, AVG(DATEDIFF(p.DATPAI, p.DATECH)) AS nbJourPaiement,
|
|
ROUND(AVG(DATEDIFF(NOW(), p.DATECH) - DATEDIFF(p.DATPAI, p.DATECH))) AS nbJourMoyens,
|
|
IF(AVG(DATEDIFF(NOW(), p.DATECH) - DATEDIFF( p.DATPAI, p.DATECH ) ) <6, 0, if( AVG( DATEDIFF( NOW( ) , p.DATECH ) - DATEDIFF( p.DATPAI, p.DATECH ) ) <36, 30, if( AVG( DATEDIFF( NOW( ) , p.DATECH ) - DATEDIFF( p.DATPAI, p.DATECH ) ) <66, 60, if( AVG( DATEDIFF( NOW( ) , p.DATECH ) - DATEDIFF( p.DATPAI, p.DATECH ) ) <96, 90, 120 ) ) ) ) AS nbJours,
|
|
SUM(p.MNTPIE) AS mtPieces, SUM(p.MNTFRF) AS mtPaiements, SUM(p.MNTLIT) AS mtLitiges,
|
|
p.CODDEV, a.SIRENE, a.RAISOC, a.CODPOS, a.VILLE",
|
|
"a.SIRENE=$siren AND DATEDIFF(NOW(),p.DATECH)<736 AND p.DATECH<NOW() $strGroupBy ORDER BY p.DATPIE DESC", false, MYSQL_ASSOC);
|
|
$tabRet=array();
|
|
foreach ($ret as $i=>$tabPai) {
|
|
$nbJoursMoyen=$tabPai['nbJourRetard']-$tabPai['nbJourPaiement'];
|
|
if ($nbJoursMoyen<6) $tranche=0;
|
|
elseif ($nbJoursMoyen<36) $tranche=30;
|
|
elseif ($nbJoursMoyen<66) $tranche=60;
|
|
elseif ($nbJoursMoyen<96) $tranche=90;
|
|
elseif ($nbJoursMoyen<126) $tranche=120;
|
|
elseif ($nbJoursMoyen<156) $tranche=150;
|
|
else $tranche=180;
|
|
|
|
$tabRet[]=array('trimestre' => $tabPai['trimestre'],
|
|
'mois' => $tabPai['mois'],
|
|
'nbPieces' => $tabPai['nbPieces'],
|
|
'nbJourRetard' => $tabPai['nbJourRetard'],
|
|
'nbJourPaiement'=> $tabPai['nbJourPaiement'],
|
|
'nbJourMoyen' => $nbJoursMoyen,
|
|
'nbJourMoyen2' => $tabPai['nbJourMoyens'],
|
|
'tranchePaiement'=>$tranche,
|
|
'tranchePaie90' =>$tabPai['nbJours'],
|
|
'mtPieces' => $tabPai['mtPieces'],
|
|
'mtPaiements' => $tabPai['mtPaiements'],
|
|
'mtLitiges' => $tabPai['mtLitiges'],
|
|
'devise' => $tabPai['CODDEV'],
|
|
);
|
|
}
|
|
//$this->tabPaiements=$tabRet;
|
|
/*@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Indiscore sur $siren : Paiements", "SELECT p.NUMACH, DATE_FORMAT(p.DATPIE, '%Y-%m') AS mois,
|
|
CONCAT(DATE_FORMAT(p.DATPIE,'%Y'),'-',IF(DATE_FORMAT(p.DATPIE,'%m')<4,1,IF(DATE_FORMAT(p.DATPIE,'%m')<7,2,IF(DATE_FORMAT(p.DATPIE,'%m')<10,3,4)))) AS trimestre,
|
|
count(*) AS nbPieces,
|
|
AVG(DATEDIFF(NOW(), p.DATECH)) AS nbJourRetard, AVG(DATEDIFF(p.DATPAI, p.DATECH)) AS nbJourPaiement,
|
|
ROUND(AVG(DATEDIFF(NOW(), p.DATECH) - DATEDIFF(p.DATPAI, p.DATECH))) AS nbJourMoyens,
|
|
IF(AVG(DATEDIFF(NOW(), p.DATECH) - DATEDIFF( p.DATPAI, p.DATECH ) ) <6, 0, if( AVG( DATEDIFF( NOW( ) , p.DATECH ) - DATEDIFF( p.DATPAI, p.DATECH ) ) <36, 30, if( AVG( DATEDIFF( NOW( ) , p.DATECH ) - DATEDIFF( p.DATPAI, p.DATECH ) ) <66, 60, if( AVG( DATEDIFF( NOW( ) , p.DATECH ) - DATEDIFF( p.DATPAI, p.DATECH ) ) <96, 90, 120 ) ) ) ) AS nbJours,
|
|
SUM(p.MNTPIE) AS mtPieces, SUM(p.MNTFRF) AS mtPaiements, SUM(p.MNTLIT) AS mtLitiges,
|
|
p.CODDEV, a.SIRENE, a.RAISOC, a.CODPOS, a.VILLE
|
|
FROM ge_paiements p LEFT JOIN ge_acheteurs a ON a.NUMACH=p.NUMACH
|
|
WHERE a.SIRENE=$siren AND DATEDIFF(NOW(),p.DATECH)<736 AND p.DATECH<NOW() $strGroupBy ORDER BY p.DATPIE DESC".EOL.EOL.print_r($tabRet, true).EOL);
|
|
*/
|
|
|
|
return $tabRet;
|
|
}
|
|
|
|
public function getProfilPayeur($siren) {
|
|
if ($siren<1000) return '';
|
|
$libProfil='';
|
|
/*if ($this->siren==$siren)
|
|
$tabPaie=$this->tabPaiements;
|
|
else*/
|
|
$tabPaie=$this->getPaiements($siren);
|
|
if (count($tabPaie)>=3) {
|
|
$tabProfil=array();
|
|
$paie_min=180;
|
|
$paie_max=$totFactures=$totPaiements=$totLitiges=0;
|
|
foreach ($tabPaie as $i=>$tabPai) {
|
|
if ($i==0) { $this->risqueImpayeMois=$tabPai['mois'];
|
|
// Dernier délai de paiement en jour
|
|
$this->DELAIPAY=$tabPai['tranchePaiement'];
|
|
} elseif ($this->DELAIPAYp=='' && $tabPai['tranchePaiement']<>$this->DELAIPAY ) {
|
|
$this->DELAIPAYp=$tabPai['tranchePaiement'];
|
|
$this->DELAIPAY_MMAA=$tabPai['mois'];
|
|
}
|
|
$tabProfil[$i]=$tabPai['tranchePaiement'];
|
|
$totFactures+=$tabPai['mtPieces'];
|
|
$totPaiements+=$tabPai['mtPaiements'];
|
|
$totLitiges+=$tabPai['mtLitiges'];
|
|
if ($tabPai['tranchePaiement']<$paie_min) $paie_min=$tabPai['tranchePaiement'];
|
|
if ($tabPai['tranchePaiement']>$paie_max) $paie_max=$tabPai['tranchePaiement'];
|
|
}
|
|
$tauxLitige=$totLitiges/$totFactures;
|
|
|
|
if ($tauxLitige>=0.5) $libProfil.='Litiges très importants. ';
|
|
elseif ($tauxLitige>0.25) $libProfil.='Litiges importants. ';
|
|
elseif ($tauxLitige>0.05) $libProfil.='Présence de litiges. ';
|
|
|
|
if ($tabProfil[0]==$tabProfil[1] && $tabProfil[1]==$tabProfil[2]) {
|
|
if ($tranche=0) { $libProfil.='Paiements à échéance'; $this->profilPayeur=1; }
|
|
elseif ($tranche<=30) { $libProfil.='Paiements à 30 jours maximum'; $this->profilPayeur=2; }
|
|
elseif ($tranche<=60) { $libProfil.='Paiements à 60 jours maximum'; $this->profilPayeur=3; }
|
|
elseif ($tranche<=90) { $libProfil.='Paiements à 90 jours maximum'; $this->profilPayeur=4; $this->risqueImpaye=true;}
|
|
else { $libProfil.='Paiements à plus de 90 jours'; $this->profilPayeur=4; $this->risqueImpaye=true;}
|
|
} elseif ( ($tabProfil[0]<>$tabProfil[1] && $tabProfil[1]==$tabProfil[2]) ||
|
|
($tabProfil[0]==$tabProfil[1] && $tabProfil[1]<>$tabProfil[2]) ) {
|
|
// Récent changement de profil payeur
|
|
$tranche=$tabProfil[0];
|
|
$tr_prec=$tabProfil[1];
|
|
$tr_prec2=$tabProfil[2];
|
|
if ($tranche<$tr_prec) $libProfil.='Amélioration des délais. ';
|
|
elseif ($tranche==$tr_prec && $tr_prec<$tr_prec2) $libProfil.='Amélioration des délais. ';
|
|
else { $this->risqueImpaye=true; $libProfil.='Allongement des délais. '; }
|
|
|
|
if ($tranche=0) { $libProfil.='Paiements à échéance'; $this->profilPayeur=1; }
|
|
elseif ($tranche<=30) { $libProfil.='Paiements à 30 jours maximum'; $this->profilPayeur=2; }
|
|
elseif ($tranche<=60) { $libProfil.='Paiements à 60 jours maximum'; $this->profilPayeur=3; }
|
|
elseif ($tranche<=90) { $libProfil.='Paiements à 90 jours maximum'; $this->profilPayeur=4; $this->risqueImpaye=true;}
|
|
else { $libProfil.='Paiements à plus de 90 jours'; $this->profilPayeur=4; $this->risqueImpaye=true;}
|
|
} else {
|
|
if ($paie_max<=30) $this->profilPayeur=1;
|
|
elseif ($paie_max<=60) $this->profilPayeur=2;
|
|
elseif ($paie_max<=90) $this->profilPayeur=3;
|
|
elseif ($paie_max>90) $this->profilPayeur=4;
|
|
$libProfil.="Paiements entre $paie_min et $paie_max jour(s)";
|
|
}
|
|
}
|
|
|
|
if (trim($libProfil)=='' && $siren<>552100554 && $siren<>552144503 && $siren<>479974115
|
|
&& $siren<>0 && $siren<>494967938 ) {
|
|
$ret=$this->iDb->select('jo.surveillances_listes',
|
|
'ref, dateAjout, dateConf, dateSuppr, dateDerEnvoi',
|
|
"idClient='SURBODPRDFTSRECOCASH' AND siren=$siren AND dateSuppr=0
|
|
AND ABS(DATEDIFF(dateAjout, NOW()))<365
|
|
ORDER BY dateConf DESC, dateAjout DESC", false, MYSQL_ASSOC);
|
|
foreach ($ret as $i=>$tabCS) {
|
|
$dateMAJ=WDate::dateT('Y-m-d', 'M Y', $tabCS['dateAjout']);
|
|
$libProfil="En date du $dateMAJ : Contentieux importants.";
|
|
$this->risqueImpaye=true;
|
|
$this->risqueImpayeMois=WDate::dateT('Y-m', 'Ym', $tabCS['dateAjout']);
|
|
$this->profilPayeur=4;
|
|
break;
|
|
}
|
|
}
|
|
|
|
//@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Indiscore sur $siren : Paiements", $libProfil.EOL.'Profil payeur = '. $this->profilPayeur .EOL.print_r($tabPaie, true).EOL);
|
|
|
|
return $libProfil;
|
|
}
|
|
|
|
public function getTabPaiements($siren) {
|
|
if ($siren<1000) return false;
|
|
|
|
$tabNbr=array(); // Tableau de travail du nombre de factures par trimestre et par tranches de délais de paiements
|
|
$tabMtAn=array(); // Tableau de travail du nombre de factures par montant et par tranches de délais de paiements
|
|
|
|
$tabNbr2=array(); // Tableau retour du nombre de factures par trimestre et par tranches de délais de paiements
|
|
$tabMtAn2=array(); // Tableau retour du nombre de factures par montant et par tranches de délais de paiements
|
|
|
|
$tabPaie=$this->getPaiements($siren, 'jour');
|
|
foreach ($tabPaie as $i=>$tabPai) {
|
|
@$tabNbr[$tabPai['trimestre']]['d='.$tabPai['tranchePaiement']]+=$tabPai['nbPieces'];
|
|
@$tabNbr[$tabPai['trimestre']]['all']+=$tabPai['nbPieces'];
|
|
$mt=$tabPai['mtPieces']/$tabPai['nbPieces'];
|
|
// echo "$i\t".$tabPai['trimestre']." (".$tabPai['tranchePaiement']." j)\t$mt=".$tabPai['mtPieces'].'/'.$tabPai['nbPieces'].EOL;
|
|
if ($mt<500) { @$tabMtAn[1]['d='.$tabPai['tranchePaiement']]++; @$tabMtAn[1]['all']++; }
|
|
elseif ($mt<2000) { @$tabMtAn[2]['d='.$tabPai['tranchePaiement']]++; @$tabMtAn[2]['all']++; }
|
|
elseif ($mt<10000) { @$tabMtAn[10]['d='.$tabPai['tranchePaiement']]++; @$tabMtAn[10]['all']++; }
|
|
elseif ($mt<20000) { @$tabMtAn[20]['d='.$tabPai['tranchePaiement']]++; @$tabMtAn[20]['all']++; }
|
|
elseif ($mt<50000) { @$tabMtAn[50]['d='.$tabPai['tranchePaiement']]++; @$tabMtAn[50]['all']++; }
|
|
elseif ($mt<100000) { @$tabMtAn[100]['d='.$tabPai['tranchePaiement']]++; @$tabMtAn[100]['all']++; }
|
|
elseif ($mt<200000) { @$tabMtAn[200]['d='.$tabPai['tranchePaiement']]++; @$tabMtAn[200]['all']++; }
|
|
else { @$tabMtAn[999]['d='.$tabPai['tranchePaiement']]++; @$tabMtAn[999]['all']++; }
|
|
//@$tabMtAn['all'][$tabPai['tranchePaiement']]++;
|
|
}
|
|
|
|
// Recalcul des délais par Trimestre
|
|
foreach ($tabNbr as $trim=>$tabTranche) {
|
|
ksort($tabTranche);
|
|
// Initialisation des tranches à 0
|
|
foreach ($this->tabTranches as $tranche=>$vide)
|
|
$tabNbr2[$trim]['nb']=$tabNbr2[$trim]['d='.$tranche]=0;
|
|
foreach ($tabTranche as $tranche=>$mt3) {
|
|
$tranche=str_replace('d=','',$tranche);
|
|
if ($tranche=='all') $tabNbr2[$trim]['nb']=$mt3;
|
|
else $tabNbr2[$trim]['d='.$tranche]=round(($mt3/$tabNbr2[$trim]['nb'])*100,1);
|
|
}
|
|
}
|
|
|
|
// Initialisation des tranches à 0 par Montants
|
|
foreach ($this->tabMontants as $mt=>$vide) {
|
|
$tabMtAn2['_'.$mt]['nb']=0;
|
|
foreach ($this->tabTranches as $tranche=>$vide)
|
|
$tabMtAn2['_'.$mt]['d='.$tranche]=0;
|
|
}
|
|
// Recalcul des délais par Montants
|
|
ksort($tabMtAn);
|
|
foreach ($tabMtAn as $mt=>$tabTranche) {
|
|
ksort($tabTranche);
|
|
foreach ($tabTranche as $tranche=>$mt2) {
|
|
$tranche=str_replace('d=','',$tranche);
|
|
if ($tranche=='all') $tabMtAn2['_'.$mt]['nb']=$mt2;
|
|
else $tabMtAn2['_'.$mt]['d='.$tranche]=round(($mt2/$tabMtAn2['_'.$mt]['nb'])*100,1);
|
|
}
|
|
}
|
|
|
|
//@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Indiscore sur $siren : Tableaux des Paiements", 'Paiements par montants :'.EOL.print_r($tabMtAn2, true).EOL.EOL.'Paiements par trimestres :'.EOL.print_r($tabNbr2, true).EOL.print_r($tabNbr, true).EOL.print_r($tabMtAn, true).EOL);
|
|
return array('parMont'=>$tabMtAn2,
|
|
'parTrim'=>$tabNbr2);
|
|
}
|
|
|
|
}
|
|
|
|
?>
|