467 lines
18 KiB
PHP
467 lines
18 KiB
PHP
<?php
|
|
class EvaluationController extends Zend_Controller_Action
|
|
{
|
|
protected $siret = null;
|
|
protected $id = 0;
|
|
|
|
public function init()
|
|
{
|
|
$request = $this->getRequest();
|
|
$this->siret = $request->getParam('siret');
|
|
$this->id = $request->getParam('id', 0);
|
|
|
|
require_once 'common/dates.php';
|
|
require_once 'Scores/WsScores.php';
|
|
require_once 'Scores/Utilisateur.php';
|
|
require_once 'Scores/SessionEntreprise.php';
|
|
require_once 'Scores/IdentiteEntreprise.php';
|
|
|
|
$this->view->headLink()
|
|
->appendStylesheet('/themes/default/styles/evaluation.css', 'all');
|
|
}
|
|
|
|
public function indexAction(){}
|
|
|
|
public function printscoresAction()
|
|
{
|
|
$this->_helper->layout()->disableLayout();
|
|
$request = $this->getRequest();
|
|
$score = strtolower($request->getParam('score'));
|
|
|
|
if( $score == 'indiscore' ){
|
|
$user = new Utilisateur();
|
|
switch($user->getTypeScore()) {
|
|
case '20': $score.='20'; break;
|
|
case '100':
|
|
default: $score.='100'; break;
|
|
}
|
|
}
|
|
|
|
$note = $request->getParam('note');
|
|
$bornes = array(
|
|
'conanh' => array( 'min' => -4.5 , 'max' => 16 ),
|
|
'afdcc2' => array( 'min' => 0 , 'max' => 5 ),
|
|
'afdcc1' => array( 'min' => -10 , 'max' => 10 ),
|
|
'z' => array( 'min' => -3 , 'max' => 3 ),
|
|
'indiscore100' => array( 'min' => 0 , 'max' => 100 ),
|
|
'indiscore20' => array( 'min' => 0 , 'max' => 20 ),
|
|
);
|
|
$note = round(($note - $bornes[$score]['min'])*100/($bornes[$score]['max'] - $bornes[$score]['min']));
|
|
|
|
if($note < 0) $note = 0;
|
|
if($note > 100) $note = 100;
|
|
|
|
$this->view->assign('note', $note);
|
|
$this->view->assign('min', $bornes[$score]['min']);
|
|
$this->view->assign('max', $bornes[$score]['max']);
|
|
}
|
|
|
|
/**
|
|
* IndiScore
|
|
*/
|
|
public function indiscoreAction()
|
|
{
|
|
$user = new Utilisateur();
|
|
if(!$user->checkPerm('INDISCORE'))
|
|
$this->_forward('perms', 'error');
|
|
$request = $this->getRequest();
|
|
$ws = new WsScores();
|
|
|
|
$this->view->assign('siret', $this->siret);
|
|
$this->view->assign('typeScore', $user->getTypeScore());
|
|
$this->view->assign('indiscore', $ws->getIndiScore(substr($this->siret, 0,9)));
|
|
$this->view->assign('AutrePage', $request->getParam('page'));
|
|
}
|
|
|
|
/**
|
|
* Rapport de synthese
|
|
*/
|
|
public function indiscore2Action()
|
|
{
|
|
$this->view->headScript()->appendFile('/themes/default/scripts/finance.js', 'text/javascript');
|
|
|
|
$user = new Utilisateur();
|
|
if(!$user->checkPerm('INDISCORE2'))
|
|
$this->_forward('perms', 'error');
|
|
|
|
$siren = substr($this->siret,0,9);
|
|
|
|
$ws = new WsScores();
|
|
$entreprise = new SessionEntreprise($this->siret);
|
|
$identite = $ws->getIdentite($this->siret, $this->id);
|
|
$indiscore = $ws->getIndiScore($siren);
|
|
$score = array();
|
|
$bilanReference = array(
|
|
'r5' => array('total'=>'r5', 'total_info'=>'% ca', 'op' => 1000, 'titre'=>'CHIFFRE D\'AFFAIRES'),
|
|
'r16' => array('total'=>'r5', 'total_info'=>'% ca', 'op' => 1000, 'titre'=>'RESULTAT D\'EXPLOITATION'),
|
|
'r7' => array('total'=>'r5', 'total_info'=>'% ca', 'op' => 1000, 'titre'=>'RESULTAT COURANT'),
|
|
'r10' => array('total'=>'r5', 'total_info'=>'% ca', 'op' => 1000, 'titre'=>'RESULTAT NET'),
|
|
'r18' => array('total'=>'r22', 'total_info'=>'% bilan', 'op' => 1000, 'titre'=>'FONDS PROPRES'),
|
|
'r231' => array('total'=>'r22', 'total_info'=>'% bilan', 'op' => 1000, 'titre'=>'FONDS DE ROULEMENT'),
|
|
'r232' => array('total'=>'r22', 'total_info'=>'% bilan', 'op' => 1000, 'titre'=>'BESOIN EN FONDS DE ROULEMENT'),
|
|
'r249' => array('total'=>'', 'total_info'=>'', 'op' => 1000, 'titre'=>'TRESORERIE NETTE'),
|
|
'r20' => array('total'=>'r5', 'total_info'=>'% ca', 'op' => 1000, 'titre'=>'FRAIS FINANCIER'),
|
|
);
|
|
|
|
/*
|
|
Correctiojn pour indiscore seule
|
|
$indiscore->Siege;
|
|
$indiscore->SiretSiege;
|
|
$indiscore->NumRC;
|
|
*/
|
|
$identite = new IdentiteEntreprise($identite, $this->view);
|
|
//Définition des blocks
|
|
$blocks = array(
|
|
'SiretSiege',
|
|
'NumRC',
|
|
'Actif',
|
|
'RaisonSociale',
|
|
'FormeJuridique',
|
|
'DateImmat',
|
|
'DateCreaEt',
|
|
'Adresse',
|
|
'ActiviteEn',
|
|
'Naf4',
|
|
'OrigineFond',
|
|
'TypeExploitation',
|
|
'Saisonnalite',
|
|
'Capital',
|
|
'ChiffreAffaire',
|
|
);
|
|
$dBlock = array();
|
|
foreach ($blocks as $item) {
|
|
$display = array(
|
|
'label' => method_exists($identite, 'get'.$item.'Label') ? $identite->{'get'.$item.'Label'}() : '',
|
|
'texte' => method_exists($identite, 'get'.$item.'Texte') ? $identite->{'get'.$item.'Texte'}() : '',
|
|
'titre' => method_exists($identite, 'get'.$item.'Titre') ? $identite->{'get'.$item.'Titre'}() : '',
|
|
);
|
|
$dBlock[$item] = $display;
|
|
}
|
|
$this->view->assign('dBlock', $dBlock);
|
|
|
|
$dateRadiation = '';
|
|
if(isset($indiscore->DateRadiation) && $indiscore->DateRadiation!='' && $indiscore->DateRadiation!='0000-00-00')
|
|
$this->view->assign('dateRadiation', WDate::dateT('Ymd', 'd/m/Y', str_replace('-','',$indiscore->DateRadiation)));
|
|
|
|
foreach($indiscore->scores as $name => $sc){
|
|
if($name == 'ConanH')
|
|
$score[$name] = array($sc, 'Score Conan Holder');
|
|
if($name == 'Afdcc2')
|
|
$score[$name] = array($sc, 'Score Afdcc 2');
|
|
if($name == 'Z')
|
|
$score[$name] = array($sc, 'Score Z');
|
|
}
|
|
|
|
$typeScore = $user->getTypeScore();
|
|
switch($typeScore) {
|
|
case '20':
|
|
$maxIndiscore = $typeScore;
|
|
$score['Indiscore'] = array($indiscore->Indiscore20, 'IndiScore');
|
|
break;
|
|
case '100':
|
|
default:
|
|
$maxIndiscore = empty($typeScore)? '100' : $typeScore;
|
|
$score['Indiscore'] = array($indiscore->Indiscore, 'IndiScore');
|
|
break;
|
|
}
|
|
|
|
$score['Indiscore'] = array($indiscore->Indiscore20, 'IndiScore');
|
|
|
|
$this->view->assign('siret', $this->siret);
|
|
$this->view->assign('id', $this->id);
|
|
$this->view->assign('siren', $siren);
|
|
|
|
$this->view->assign('encours', $indiscore->encours);
|
|
$this->view->assign('TendanceIndiscore', $indiscore->TendanceIndiscore);
|
|
$this->view->assign('SituationJuridique', $indiscore->SituationJuridique);
|
|
$this->view->assign('paiement', $indiscore->infoPaiement);
|
|
|
|
$this->view->assign('scores', $score);
|
|
|
|
$this->view->assign('bilanReference', $bilanReference);
|
|
}
|
|
|
|
/**
|
|
* Rapport complet
|
|
*/
|
|
public function indiscore3Action()
|
|
{
|
|
$this->view->headLink()
|
|
->appendStylesheet('/themes/default/styles/comment.css', 'all');
|
|
|
|
$user = new Utilisateur();
|
|
if(!$user->checkPerm('INDISCORE3'))
|
|
$this->_forward('perms', 'error');
|
|
|
|
$sessionEntreprise = new SessionEntreprise($this->siret, $this->id);
|
|
$ws = new WsScores();
|
|
$siren = substr($this->siret,0,9);
|
|
|
|
$infos = $ws->getRapport($siren);
|
|
|
|
$this->view->assign('Identite', $infos->Identite);
|
|
$this->view->assign('Dirigeants', $infos->Dirigeants);
|
|
$this->view->assign('Liens', $infos->Liens);
|
|
$this->view->assign('Annonces', $infos->Annonces);
|
|
$this->view->assign('Ratios', $infos->Ratios);
|
|
$this->view->assign('Indiscore', $infos->Indiscore);
|
|
|
|
require_once 'Scores/RapportComment.php';
|
|
$rapportComment = new RapportComment($siren, $this->id, $infos->Indiscore->tabCommentaires->item, $infos->Ratios);
|
|
$this->view->assign('comment',$rapportComment->out());
|
|
|
|
$this->view->assign('siret', $this->siret);
|
|
$this->view->assign('id', $this->id);
|
|
$this->view->assign('siren', $siren);
|
|
$this->view->assign('raisonSociale', $sessionEntreprise->getRaisonSociale());
|
|
}
|
|
|
|
/**
|
|
* Enquete commerciale
|
|
*/
|
|
public function enquetecAction()
|
|
{
|
|
$this->view->headScript()->appendFile('/themes/default/scripts/enquetec.js', 'text/javascript');
|
|
|
|
//isset($_REQUEST['pays']) ? $pays=$_REQUEST['pays'] : $pays='' ;
|
|
|
|
$commandeEnquete = false;
|
|
$request = $this->getRequest();
|
|
|
|
if ($request->isPost()){
|
|
|
|
$InfoUser = $request->getParam('InfoUser');
|
|
$InfoEnq = $request->getParam('InfoEnq');
|
|
|
|
//Affichage de la demande
|
|
//Vérification des informations
|
|
$formError = false;
|
|
$fields = array();
|
|
|
|
//Info utilisateur obligatoire :
|
|
if($InfoUser['Identite']==''){ $fields[] ='Votre Identite'; $formError=true;}
|
|
if($InfoUser['Tel']==''){ $fields[] ='Votre Téléphone'; $formError=true;}
|
|
if($InfoUser['Email']==''){ $fields[] ='Votre Email'; $formError=true;}
|
|
|
|
//Info entreprise obligatoire :
|
|
if( isset($InfoEnq['Type']) && $InfoEnq['Type']==''){ $fields[] ='Choix du type d\'enquête'; $formError=true;}
|
|
if($InfoEnq['PrecisionsChoix']=='1'){
|
|
if($InfoEnq['Precisions']['Motif']==''){ $fields[] ='Mofif de la demande'; $formError=true;}
|
|
}elseif($InfoEnq['PrecisionsChoix']=='3' || $InfoEnq['PrecisionsChoix']=='4'){
|
|
if($InfoEnq['Precisions']['MontantCA']==''){ $fields[] ='Précisions de la demande'; $formError=true;}
|
|
}elseif($InfoEnq['PrecisionsChoix']=='5'){
|
|
if($InfoEnq['Precisions']['Autre']==''){ $fields[] ='Précisions de la demande'; $formError=true;}
|
|
}
|
|
|
|
if(isset($InfoEnq['ImpayeesChoix']) && $InfoEnq['ImpayeesChoix']=='oui' ){
|
|
if($InfoEnq['Impayees']['Montant']=='' || $InfoEnq['Impayees']['Nombre']=='' || $InfoEnq['Impayees']['Date']==''){ $fields[] ='Précisions sur les impayées'; $formError=true;}
|
|
}
|
|
if(isset($InfoEnq['RetardPaiementChoix']) && $InfoEnq['RetardPaiementChoix']=='oui' ){
|
|
if($InfoEnq['RetardPaiement']['Montant']=='' || $InfoEnq['Nombre']=='' || $InfoEnq['RetardPaiement']['Date']==''){ $fields[] ='Précisions sur le retarde de paiement'; $formError=true;}
|
|
}
|
|
if(isset($_REQUEST['InfoEnq']['LitigeChoix']) && $_REQUEST['InfoEnq']['LitigeChoix']=='oui' ){
|
|
if($_REQUEST['InfoEnq']['Litige']['Precisions']=='' || $_REQUEST['InfoEnq']['Litige']['Precisions']==''){ $fields[] ='Précisions sur le litige'; $formError=TRUE;}
|
|
}
|
|
|
|
if ($formError==true){
|
|
$message = '<font color="red">';
|
|
$message.= 'Veuillez remplir les champs suivants : ';
|
|
$message.= join(', ', $fields);
|
|
$message.= '</font>';
|
|
}else{
|
|
$InfoDemande = $InfoUser;
|
|
$siren = $InfoEnq['Siren'];
|
|
unset($InfoEnq['Siren']);
|
|
//Suppression et assigation des valeurs pour le webservice
|
|
if($InfoEnq['PrecisionsChoix'] = 1){
|
|
$InfoEnq['Precisions']['Type'] = "Enquête sur un client (contrôle crédit)";
|
|
unset($InfoEnq['PrecisionsChoix']);
|
|
}elseif($InfoEnq['PrecisionsChoix']==2){
|
|
$InfoEnq['Precisions']['Type'] = "Enquête sur un prospect (ouverture de compte)";
|
|
unset($InfoEnq['PrecisionsChoix']);
|
|
}elseif($InfoEnq['PrecisionsChoix']==3){
|
|
$InfoEnq['Precisions']['Type'] = "Enquête sur un fournisseur stratégique";
|
|
unset($InfoEnq['PrecisionsChoix']);
|
|
}elseif($InfoEnq['PrecisionsChoix']==4){
|
|
$InfoEnq['Precisions']['Type'] = "Enquête sur un fournisseur non stratégique";
|
|
unset($InfoEnq['PrecisionsChoix']);
|
|
}elseif($InfoEnq['PrecisionsChoix']==5){
|
|
$InfoEnq['Precisions']['Type'] = "Autre type d'enquête (Précisez...)";
|
|
unset($InfoEnq['PrecisionsChoix']);
|
|
}
|
|
|
|
/*
|
|
$ws = new WsScore();
|
|
$result = $ws->commandeEnquete($siren, $InfoEnq, $InfoDemande);
|
|
$commandeEnquete = TRUE;
|
|
*/
|
|
}
|
|
$this->view->assign('formError', $formError);
|
|
$this->view->assign('message', $message);
|
|
$this->view->assign('InfoUser', $InfoUser);
|
|
$this->view->assign('InfoEnq', $InfoEnq);
|
|
}
|
|
|
|
if ($commandeEnquete == false) {
|
|
$ws = new WsScores();
|
|
$infosEntrep = $ws->getIdentite($this->siret, $this->id);
|
|
$this->view->assign('Etab', $infosEntrep);
|
|
|
|
$user = new Utilisateur();
|
|
$this->view->assign('user', $user);
|
|
}
|
|
|
|
|
|
$this->view->assign('commandeEnquete', $commandeEnquete);
|
|
}
|
|
|
|
/**
|
|
* Affichage des informations de scoring creditsafe
|
|
*/
|
|
public function scoringAction()
|
|
{
|
|
$utilisateur = new Utilisateur();
|
|
if(!$utilisateur->checkModeEdition() or !$utilisateur->checkPerm('SCORECSF'))
|
|
$this->render('error/perms', null, 'error');
|
|
|
|
require_once 'Evaluation/DomDocument2.lib.php';
|
|
require_once 'common/curl.php';
|
|
|
|
define('CREDITSAFE_WS_URL', 'https://www.creditsafe.fr/getdata/service/CSFRServices.asmx');
|
|
define('CREDITSAFE_WS_URI', 'https://www.creditsafe.fr/getdata/service/');
|
|
define('CREDITSAFE_WS_USER', 'scores_decisions');
|
|
define('CREDITSAFE_WS_PASS', 'yoann1306');
|
|
define('CREDITSAFE_WS_REF', 'ref');
|
|
/**
|
|
* L'Url du WSDL est bonne simplament le formatage des données a changés, il faut respecter les données !
|
|
* comparer les exemples donnés.
|
|
*
|
|
*/
|
|
$req='<xmlrequest>'.
|
|
'<header>'.
|
|
'<username>'.CREDITSAFE_WS_USER.'</username>'.
|
|
'<password>'.CREDITSAFE_WS_PASS.'</password>'.
|
|
//'<operation>getcompanyinformation</operation>'.
|
|
'<operation>getratinglimit</operation>'.
|
|
'<country>FR</country>'.
|
|
'<language>FR</language>'.
|
|
'<chargereference>'.CREDITSAFE_WS_REF.'</chargereference>'.
|
|
'</header>'.
|
|
'<body>'.
|
|
//'<package>standard</package>'.
|
|
'<package>ratinglimit</package>'.
|
|
"<companynumber>".$this->siret."</companynumber>".
|
|
'</body>'.
|
|
'</xmlrequest>';
|
|
|
|
$success = true;
|
|
$date = date('Ymd');
|
|
$url = 'https://www.creditsafe.fr/getdata/service/CSFRServices.asmx/GetData?RequestXmlStr='.$req;
|
|
$referer = $cookie = '';
|
|
$page = getUrl($url, $cookie, '', $referer, false, '', '');
|
|
$referer = $url;
|
|
$file = APPLICATION_PATH.'/../../data/creditsafe/'.$this->siret.'.xml';
|
|
$xml = html_entity_decode($page['body'], ENT_QUOTES, 'UTF-8');
|
|
$dom_object = new DomDocument2();
|
|
$ws = new WsScores();
|
|
if(!file_exists($file)) {
|
|
file_put_contents($file, $xml); // Ne pas oublier de metre les bons droits sur le dossier.
|
|
$ws->setLog('scorecsf', $this->siret);
|
|
} else {
|
|
$ws->setLog('scorecsf', $this->siret, 0, 'local');
|
|
}
|
|
$dom_object->load($file);
|
|
$companyname = $dom_object->getValueFromTag('companyname');
|
|
$rating = $dom_object->getValueFromTag('rating');
|
|
$ratingdesc1 = str_replace('?',"'",$dom_object->getValueFromTag('ratingdesc1'));
|
|
$ratingdesc2 = str_replace('?',"'",$dom_object->getValueFromTag('ratingdesc2'));
|
|
$creditlimit = $dom_object->getValueFromTag('creditlimit');
|
|
$libelle = '';
|
|
if (strtoupper($creditlimit)<>strtolower($creditlimit) || $creditlimit=='')
|
|
$strCreditlimit = $creditlimit;
|
|
else
|
|
$strCreditlimit = number_format($creditlimit,null,null,' '). ' €';
|
|
|
|
if ($rating >= 40){
|
|
$fontColor = 'green';
|
|
$imgFeux = '<img src="/themes/default/images/scoring/feux_vert.png"/>';
|
|
if ($rating>=71) $libelle='Très bonne cote de crédit/solvabilité';
|
|
elseif ($rating>=51) $libelle='Bonne cote de crédit/solvabilité';
|
|
else $libelle = 'Solvable';
|
|
} elseif ($rating >= 20) {
|
|
$fontColor = 'yellow';//#f2be2c';
|
|
$imgFeux = '<img src="/themes/default/images/scoring/feux_orange.png"/>';
|
|
$libelle = 'Précautions recommandées';
|
|
} elseif (strtoupper($rating) <> strtolower($rating)) {
|
|
$fontColor = 'black';
|
|
$imgFeux=' ';
|
|
}
|
|
elseif ($rating == '') {
|
|
$fontColor = 'black';
|
|
$imgFeux = ' ';
|
|
}
|
|
else {
|
|
$fontColor = 'red';
|
|
$imgFeux = '<img src="/themes/default/images/scoring/feux_rouge.png"/>';
|
|
if ($rating == 0) $libelle='Entreprise en situation de défaillance et ayant un très fort risque de radiation';
|
|
else $libelle = 'Avertissement - Crédit à votre discrétion';
|
|
}
|
|
|
|
/** Assigne les valeur a la vue **/
|
|
if (!empty($companyname)) {
|
|
$this->view->raisonSociale = $companyname;
|
|
} else {
|
|
$session = new SessionEntreprise($this->siret);
|
|
$this->view->raisonSociale = $session->getRaisonSociale();
|
|
}
|
|
$this->view->emailCommande = $utilisateur->getEmail();
|
|
$this->view->id = $this->id;
|
|
$this->view->siren = substr($this->siret, 0,9);
|
|
$this->view->imgFeux = $imgFeux;
|
|
$this->view->fontColor = $fontColor;
|
|
$this->view->rating = $rating;
|
|
$this->view->libelle = $libelle;
|
|
$this->view->strCreditlimit = $strCreditlimit;
|
|
|
|
}
|
|
|
|
/**
|
|
* Commande de scoring partenaire creditsafe
|
|
*/
|
|
public function scoringcommande()
|
|
{
|
|
if ($this->getRequest()->isPost()){
|
|
$request = $this->getRequest();
|
|
$email = $request->getParam('email', '');
|
|
$siren = $request->getParam('siren', '');
|
|
|
|
if (preg_match('#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#',$email) {
|
|
$message = 'Entreprise mise sous surveillance scoring partenaire !';
|
|
require_once 'Scores/Mail.php';
|
|
$mail = new Mail();
|
|
$mail->setSubject("Demande de surveillance score CreditSafe pour $siren à ".$email);
|
|
|
|
$user = new Utilisateur();
|
|
$login $user->getLogin();
|
|
$texte = 'REQUEST='.EOL.print_r($request->getParams(),true).EOL.
|
|
'Utilisateur='.$login;
|
|
|
|
$mail->setBodyTexte($texte);
|
|
$mail->setFrom('contact');
|
|
$mail->addToKey('contact');
|
|
$mail->send();
|
|
|
|
$config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/configuration.ini', 'path');
|
|
$path = $config->data.'/'.$config->log;
|
|
$fp=fopen($path.'/surveillance_scf.csv', 'a');
|
|
fwrite($fp, date('Y/m/d H:i:s').";$siren;".$email.';'.$login.';'.$user->getEmail().';'.$user->getIpAddress()."\n");
|
|
fclose($fp);
|
|
|
|
} else {
|
|
$message = "ERREUR : Veuillez saisir une adresse email valide pour la mise sous surveillance";
|
|
}
|
|
$this->view->assign('message', $message);
|
|
}
|
|
}
|
|
|
|
} |