2014-10-06 18:39:27 +00:00
< ? php
2013-11-05 11:18:30 +00:00
/*
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 ) .
*/
2016-01-27 21:10:45 +00:00
class Metier_Partenaires_MFacto
2014-10-06 18:39:27 +00:00
{
2013-11-05 11:18:30 +00:00
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 = '' ;
2015-01-20 11:09:15 +00:00
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 à suivre' ),
'_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' ),
2013-11-05 11:18:30 +00:00
//Nouveaux regroupements GE
2015-01-20 11:09:15 +00:00
'_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 " ),
2013-11-05 11:18:30 +00:00
);
2015-01-20 11:09:15 +00:00
private $tabTranches = array (
2014-10-06 18:39:27 +00:00
0 => 6 ,
30 => 36 ,
60 => 66 ,
90 => 96 ,
120 => 126 ,
150 => 156 ,
180 => 999 ,
);
2013-11-05 11:18:30 +00:00
2015-01-20 11:09:15 +00:00
private $tabMontants = array (
2014-10-06 18:39:27 +00:00
1 => 500 ,
2 => 2000 ,
10 => 10000 ,
20 => 20000 ,
50 => 50000 ,
100 => 100000 ,
200 => 200000 ,
999 => 999999
);
2013-11-05 11:18:30 +00:00
2015-01-20 11:09:15 +00:00
public function __construct ( $db = null )
2014-10-06 18:39:27 +00:00
{
2015-01-20 11:09:15 +00:00
if ( $db === null ) {
2016-07-18 15:21:48 +02:00
$this -> iDb = new Metier_Util_Db ();
2015-01-20 11:09:15 +00:00
} else {
$this -> iDb = $db ;
}
2013-11-05 11:18:30 +00:00
}
2014-10-06 18:39:27 +00:00
public function setTypeFic ( $typeFic )
{
$this -> typeFlux = $typeFic ;
2013-11-05 11:18:30 +00:00
}
2014-10-06 18:39:27 +00:00
public function readFic ( $a )
{
switch ( $this -> typeFlux )
{
case 0 : // Acheteur GESCDCLT - Line length (120 + CRLF = 122)
$tab = array (
'NUMACH' => trim ( substr ( $a , 0 , 7 )), // 0-7 | 7
'SIRENE' => trim ( substr ( $a , 7 , 9 )), // 7-16 | 9
'RAISOC' => trim ( substr ( $a , 16 , 35 )), // 16-51 | 35
'NUMVOI' => trim ( substr ( $a , 51 , 4 )), // 51-55 | 4
'TYPVOI' => trim ( substr ( $a , 55 , 3 )), // 55-58 | 3
'LIBVOI' => trim ( substr ( $a , 58 , 30 )), // 58-88 | 30
'VILLE' => trim ( substr ( $a , 88 , 26 )), // 88-114 | 26
'CODPOS' => trim ( substr ( $a , 114 , 5 )), // 114-119 | 5
'FILLER' => trim ( substr ( $a , 119 , 2 )), // 119-120 | 1
);
2013-11-05 11:18:30 +00:00
break ;
2014-10-06 18:39:27 +00:00
case 1 : // CS - GESDACH - Line Length (19 + CRLF = 21)
$tab = array (
'siren' => trim ( substr ( $a , 0 , 9 )), // 0-9 | 9
'cs' => trim ( substr ( $a , 9 , 2 )), // 9-11 | 2
'dateFin' => trim ( substr ( $a , 11 , 8 )), // 11-9 | 8
);
2013-11-05 11:18:30 +00:00
break ;
2014-10-06 18:39:27 +00:00
case 2 : // Paiements - GESCDMVT - Line length (73 + CRLF = 75)
$tab = array (
'NUMACH' => trim ( substr ( $a , 0 , 7 )), // 0-7 | 7
'DATPIE' => substr ( $a , 7 , 8 ), // 7-15 | 8
'DATECH' => substr ( $a , 15 , 8 ), // 15-23 | 8
'DATPAI' => substr ( $a , 23 , 8 ), // 23-31 | 8
'MNTPIE' => trim ( substr ( $a , 31 , 13 )), // 31-44 | 13
'MNTFRF' => trim ( substr ( $a , 44 , 13 )), // 44-57 | 13
'MNTLIT' => trim ( substr ( $a , 57 , 13 )), // 57-70 | 13
'CODDEV' => trim ( substr ( $a , 70 , 3 )), // 70-73 | 3
);
2013-11-05 11:18:30 +00:00
break ;
}
return $tab ;
}
2014-10-06 18:39:27 +00:00
public function getCoteSpeciale ( $siren )
{
$ret = $this -> iDb -> select (
2015-01-20 11:09:15 +00:00
'sdv1.ge_cs2' ,
2014-10-06 18:39:27 +00:00
'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 );
2013-11-05 11:18:30 +00:00
$tabRet = array ();
2014-10-06 18:39:27 +00:00
foreach ( $ret as $i => $tabCS )
{
2013-11-05 11:18:30 +00:00
$dateEven = $tabCS [ 'dateConf' ];
2014-10-06 18:39:27 +00:00
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' ],
);
2013-11-05 11:18:30 +00:00
}
return $tabRet ;
}
2014-10-06 18:39:27 +00:00
public function getCoteSpecialeOld ( $siren )
{
2015-01-20 11:09:15 +00:00
$ret = $this -> iDb -> select ( 'sdv1.ge_cs c LEFT JOIN sdv1.ge_acheteurs a ON a.NUMACH=c.NUMGFH' ,
2013-11-05 11:18:30 +00:00
'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 ) {
2014-10-06 18:39:27 +00:00
$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' ],
);
2013-11-05 11:18:30 +00:00
}
return $tabRet ;
}
2014-10-06 18:39:27 +00:00
public function getPaiements ( $siren , $echelle = 'mois' )
{
2013-11-05 11:18:30 +00:00
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 " ;
2015-01-20 11:09:15 +00:00
$ret = $this -> iDb -> select ( 'sdv1.ge_paiements p LEFT JOIN sdv1.ge_acheteurs a ON a.NUMACH=p.NUMACH' ,
2013-11-05 11:18:30 +00:00
" 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 ();
2014-10-06 18:39:27 +00:00
foreach ( $ret as $i => $tabPai )
{
2013-11-05 11:18:30 +00:00
$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 ;
2014-10-06 18:39:27 +00:00
$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' ],
);
2013-11-05 11:18:30 +00:00
}
return $tabRet ;
}
2014-10-06 18:39:27 +00:00
public function getProfilPayeur ( $siren )
{
2013-11-05 11:18:30 +00:00
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 ) {
2016-07-13 14:35:17 +02:00
$dateMAJ = Metier_Util_Date :: dateT ( 'Y-m-d' , 'M Y' , $tabCS [ 'dateAjout' ]);
2013-11-05 11:18:30 +00:00
$libProfil = " En date du $dateMAJ : Contentieux importants. " ;
$this -> risqueImpaye = true ;
2016-07-13 14:35:17 +02:00
$this -> risqueImpayeMois = Metier_Util_Date :: dateT ( 'Y-m' , 'Ym' , $tabCS [ 'dateAjout' ]);
2013-11-05 11:18:30 +00:00
$this -> profilPayeur = 4 ;
break ;
}
}
return $libProfil ;
}
2014-10-06 18:39:27 +00:00
public function getTabPaiements ( $siren )
{
2013-11-05 11:18:30 +00:00
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' );
2014-10-06 18:39:27 +00:00
foreach ( $tabPaie as $i => $tabPai )
{
2013-11-05 11:18:30 +00:00
@ $tabNbr [ $tabPai [ 'trimestre' ]][ 'd=' . $tabPai [ 'tranchePaiement' ]] += $tabPai [ 'nbPieces' ];
@ $tabNbr [ $tabPai [ 'trimestre' ]][ 'all' ] += $tabPai [ 'nbPieces' ];
$mt = $tabPai [ 'mtPieces' ] / $tabPai [ 'nbPieces' ];
2016-07-12 16:45:26 +02:00
//echo "$i\t".$tabPai['trimestre']." (".$tabPai['tranchePaiement']." j)\t$mt=".$tabPai['mtPieces'].'/'.$tabPai['nbPieces'].PHP_EOL;
2013-11-05 11:18:30 +00:00
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
2014-10-06 18:39:27 +00:00
foreach ( $tabNbr as $trim => $tabTranche )
{
2013-11-05 11:18:30 +00:00
ksort ( $tabTranche );
// Initialisation des tranches à 0
foreach ( $this -> tabTranches as $tranche => $vide )
$tabNbr2 [ $trim ][ 'nb' ] = $tabNbr2 [ $trim ][ 'd=' . $tranche ] = 0 ;
2014-10-06 18:39:27 +00:00
foreach ( $tabTranche as $tranche => $mt3 )
{
2013-11-05 11:18:30 +00:00
$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
2014-10-06 18:39:27 +00:00
foreach ( $this -> tabMontants as $mt => $vide )
{
2013-11-05 11:18:30 +00:00
$tabMtAn2 [ '_' . $mt ][ 'nb' ] = 0 ;
foreach ( $this -> tabTranches as $tranche => $vide )
$tabMtAn2 [ '_' . $mt ][ 'd=' . $tranche ] = 0 ;
}
// Recalcul des délais par Montants
ksort ( $tabMtAn );
2014-10-06 18:39:27 +00:00
foreach ( $tabMtAn as $mt => $tabTranche )
{
2013-11-05 11:18:30 +00:00
ksort ( $tabTranche );
2014-10-06 18:39:27 +00:00
foreach ( $tabTranche as $tranche => $mt2 )
{
2013-11-05 11:18:30 +00:00
$tranche = str_replace ( 'd=' , '' , $tranche );
if ( $tranche == 'all' ) $tabMtAn2 [ '_' . $mt ][ 'nb' ] = $mt2 ;
else $tabMtAn2 [ '_' . $mt ][ 'd=' . $tranche ] = round (( $mt2 / $tabMtAn2 [ '_' . $mt ][ 'nb' ]) * 100 , 1 );
}
}
2014-10-06 18:39:27 +00:00
return array (
'parMont' => $tabMtAn2 ,
'parTrim' => $tabNbr2
);
2013-11-05 11:18:30 +00:00
}
2014-10-06 18:39:27 +00:00
public function getLibInfoCS ( $cs )
{
return array (
'CoteCS' => $cs ,
'LibCS' => $this -> tabInfoCS [ " _ $cs " ][ 'libExt' ],
'NivRisque' => $this -> tabInfoCS [ " _ $cs " ][ 'risque' ],
'CodeRisque' => $this -> tabInfoCS [ " _ $cs " ][ 'type' ],
2013-11-05 11:18:30 +00:00
);
}
2014-10-06 18:39:27 +00:00
}