From e634c136cf098f3abc7b60b513b7f74343ce48f5 Mon Sep 17 00:00:00 2001 From: Aram HARUTYUNYAN Date: Wed, 12 Feb 2014 08:46:25 +0000 Subject: [PATCH] Issue #0001858: --- .../controllers/WorldcheckController.php | 172 +++++++++++++++++- application/models/Worldcheck.php | 71 ++++++++ .../default/scripts/worldcheck/index.phtml | 64 ------- .../default/scripts/worldcheck/list.phtml | 64 +++++++ .../scripts/worldcheck/matchcontent.phtml | 37 +++- .../scripts/worldcheck/organigramme.phtml | 58 ++++++ .../scripts/worldcheck/orgchildren.phtml | 1 + .../default/scripts/worldcheck/popup.phtml | 78 ++++++++ .../default/images/worldcheck/individual.png | Bin 0 -> 3637 bytes .../images/worldcheck/organisation.png | Bin 0 -> 3762 bytes 10 files changed, 473 insertions(+), 72 deletions(-) create mode 100644 application/views/default/scripts/worldcheck/list.phtml create mode 100644 application/views/default/scripts/worldcheck/organigramme.phtml create mode 100644 application/views/default/scripts/worldcheck/orgchildren.phtml create mode 100644 application/views/default/scripts/worldcheck/popup.phtml create mode 100644 public/themes/default/images/worldcheck/individual.png create mode 100644 public/themes/default/images/worldcheck/organisation.png diff --git a/application/controllers/WorldcheckController.php b/application/controllers/WorldcheckController.php index 714f9304a..2cea68b50 100644 --- a/application/controllers/WorldcheckController.php +++ b/application/controllers/WorldcheckController.php @@ -14,7 +14,7 @@ class WorldcheckController extends Zend_Controller_Action } /** - * + * Get nameIdentifier and set all data into the session */ public function indexAction() { @@ -24,7 +24,8 @@ class WorldcheckController extends Zend_Controller_Action $param->dirNom = ($dirNom)?$dirNom:$request->getParam('dirSociete'); $param->dirPrenom = $request->getParam('dirPrenom'); $param->dirType = $request->getParam('dirType'); - $param->Siren = $request->getParam('siren'); + + $entityId = $request->getParam('entityId', null); $user = new Scores_Utilisateur(); $session = new SessionWorldcheck(); @@ -41,10 +42,45 @@ class WorldcheckController extends Zend_Controller_Action $param->nameIdentifier = $localDBParams->nameIdentifier; $session->setSession($param); } + + if ($entityId===null) { + $this->_redirect('/worldcheck/list'); + } else { + $id = $request->getParam('id', null); + + $data = new stdClass(); + $data->nameIdentifier = $session->getNameIdentifier(); + $data->matchType = 'WATCHLIST'; + $matchArr = $wc->getMatchesArrName($data); + $paramAssoc = new stdClass(); + $paramAssoc->matchIdentifier = $matchArr[$entityId]; + $paramAssoc->nameType = $session->getNameType(); + + $nodeParam = $wc->getAssociates($paramAssoc); + $wcLocal->setTree($nodeParam); + + $this->_redirect('/worldcheck/orgchildren/entityid/'.$entityId.'/id/'.$id); + } + } + + /** + * List results of WorldCheck search + */ + public function listAction() + { + $request = $this->getRequest(); + $wc = new WsWorldCheck(); + $session = new SessionWorldcheck(); + $param = new stdClass(); + $nameIdentifier = $session->getNameIdentifier(); $matchCount = $session->getMatchCount(); - + + $param->dirNom = $session->getName(); + $param->dirPrenom = $session->getFName(); + $param->dirType = $session->getNameType(); + if ($matchCount!==0) { $summary = new stdClass(); @@ -155,13 +191,141 @@ class WorldcheckController extends Zend_Controller_Action $param->nameType = $session->getNameType(); $wc = new WsWorldCheck(); + $nodeParam = $wc->getAssociates($param); + //print_r($nodeParam); + $db = new Application_Model_Worldcheck(); + $db->setTree($nodeParam); $cache = new Cache(); $content = $cache->wcCache($this->wcConfig['cachedir'], $wc, "getDetailsContent", $param, $param->matchIdentifier); - $this->view->assign('matchIdentifier', $param->matchIdentifier); $this->view->assign('content', $content); $this->view->assign('nameType', $param->nameType); $this->view->assign('exportObjet', $content); } + + /** + * le Parent de l'organigramme des associés + */ + public function organigrammeAction() + { + $this->_helper->layout()->disableLayout(); + $wc = new WsWorldCheck(); + + $request = $this->getRequest(); + $entityId = $request->getParam('entityid', null); + + $wcLocal = new Application_Model_Worldcheck(); + $currentBranch = $wcLocal->getTree($entityId); + + $primary = $currentBranch['primary']; + + $parent = array(); + + $data = new stdClass(); + $data->title = $primary['fullName']; + $data->icon = "/themes/default/images/worldcheck/".strtolower($primary['nameType']).".png"; + + $attr = new stdClass(); + $attr->id = uniqid('wc_'); + $attr->entityId = $primary['entityId']; + $attr->nameType = $primary['nameType']; + $attr->lastName = $primary['lastName']; + $attr->givenName = $primary['givenName']; + + $parent[] = array( + "data" => $data, + "attr" => $attr, + "state" => "closed", + "parent" => "#" + ); + + $jData = json_encode($parent); + $this->view->assign('data', $jData); + } + + /** + * les associés du parent de l'organigramme + */ + public function orgchildrenAction() + { + $this->_helper->layout()->disableLayout(); + $wc = new WsWorldCheck(); + + $request = $this->getRequest(); + $entityId = $request->getParam('entityid', null); + $id = $request->getParam('id', null); + + $wcLocal = new Application_Model_Worldcheck(); + $currentBranch = $wcLocal->getTree($entityId); + + $associates = $currentBranch['associates']; + + $children = array(); + + foreach ($associates as $associate) { + + $data = new stdClass(); + $data->title = $associate['fullName']; + $data->icon = "/themes/default/images/worldcheck/".strtolower($associate['nameType']).".png"; + + $attr = new stdClass(); + $attr->id = uniqid('wc_'); + $attr->entityId = $associate['entityId']; + $attr->nameType = $associate['nameType']; + $attr->lastName = $associate['lastName']; + $attr->givenName = $associate['givenName']; + + $children[] = array( + "data" => $data, + "attr" => $attr, + "state" => "closed", + "parent" => $id, + ); + } + + $jData = json_encode($children); + $this->view->assign('data', $jData); + } + + /** + * Affichage de l'information courte de chaque node dans le popup + */ + public function popupAction() + { + $this->_helper->layout()->disableLayout(); + $request = $this->getRequest(); + $entityId = $request->getParam('entityId', null); + $entityIdP = $request->getParam('entityIdP', null); + + $wc = new WsWorldCheck(); + $user = new Scores_Utilisateur(); + + $paramP = new stdClass(); + $paramP->idClient = $user->getIdClient(); + $paramP->dirNom = $request->getParam('dirNomP'); + $paramP->dirPrenom = $request->getParam('dirPrenomP'); + $paramP->dirType = $request->getParam('dirTypeP'); + + $wcLocal = new Application_Model_Worldcheck(); + $result = $wcLocal->getScreenerId($paramP); + + $data = new stdClass(); + $data->nameIdentifier = $result->nameIdentifier; + $data->matchType = "WATCHLIST"; + $matches = $wc->getMatchesArrName($data); + + $param = new stdClass(); + $param->matchIdentifier = $matches[$entityIdP]; + $param->nameType = $paramP->dirType; + $associates = $wc->getAssociates($param); + + foreach($associates['associates'] as $assoc) + { + if ($assoc['entityId']==$entityId) + break; + } + + $this->view->assign('data', $assoc); + } } \ No newline at end of file diff --git a/application/models/Worldcheck.php b/application/models/Worldcheck.php index ef56b8568..267860ac6 100644 --- a/application/models/Worldcheck.php +++ b/application/models/Worldcheck.php @@ -2,6 +2,8 @@ class Application_Model_Worldcheck extends Zend_Db_Table_Abstract { protected $_name = 'worldcheck'; + protected $tbList = 'worldcheck_list'; + protected $tbAssoc = 'worldcheck_a'; /** * Return nameIdentifier and matchCount from local DB if found. @@ -70,4 +72,73 @@ class Application_Model_Worldcheck extends Zend_Db_Table_Abstract } return false; } + + /** + * Set WorldCheck associates tree data into DB + * @param array $nodeParams + * @param string $nodeType, value must be 'p'[parent] or 'a'[associate] + */ + public function setTree($nodeParams) + { + $primary = array( + 'entityId'=>'', + 'nameType'=>'', + 'fullName'=>'', + 'givenName'=>'', + 'lastName'=>''); + + $assoc = array( + 'entityIdP'=>'', + 'entityId'=>'', + 'nameType'=>'', + 'fullName'=>'', + 'givenName'=>'', + 'lastName'=>''); + + $primary = array_intersect_key($nodeParams['primary'], $primary); + + $sql = $this->getAdapter()->select() + ->from($this->tbList, 'entityId') + ->where('entityId=?', $primary['entityId']); + if (!$this->getAdapter()->fetchRow($sql)) { + $this->getAdapter()->insert($this->tbList, $primary); + } + + $associates = $nodeParams['associates']; + + foreach($associates as $associate) { + $associate = array_intersect_key($associate, $assoc); + $associate['entityIdP'] = $primary['entityId']; + + $sql = $this->getAdapter()->select() + ->from($this->tbAssoc, array('entityId', 'entityIdP')) + ->where('entityId=?', $associate['entityId']) + ->where('entityIdP=?', $primary['entityId']); + if (!$this->getAdapter()->fetchRow($sql)) { + $this->getAdapter()->insert($this->tbAssoc, $associate); + } + } + } + + /** + * Get WorldCheck associates tree data from DB + * @param string $entityId + * @return Ambigous > + */ + public function getTree($entityId) + { + $sql = $this->getAdapter()->select() + ->from(array('a' => $this->tbAssoc), array('a.entityId', 'a.fullName', 'a.givenName', 'a.lastName', 'a.nameType')) + ->join(array('l' => $this->tbList), 'a.entityIdP = l.entityId', array()) + ->where('a.entityIdP=?', $entityId); + $associates = $this->getAdapter()->fetchAll($sql); + + $sql = $this->getAdapter()->select() + ->from(array('l' => $this->tbList), array('l.entityId', 'l.fullName', 'l.givenName', 'l.lastName', 'l.nameType')) + ->where('l.entityId=?', $entityId); + $primary = $this->getAdapter()->fetchRow($sql); + + $output = array('primary' => $primary, 'associates' => $associates); + return $output; + } } diff --git a/application/views/default/scripts/worldcheck/index.phtml b/application/views/default/scripts/worldcheck/index.phtml index e9a27e0d0..e69de29bb 100644 --- a/application/views/default/scripts/worldcheck/index.phtml +++ b/application/views/default/scripts/worldcheck/index.phtml @@ -1,64 +0,0 @@ -
-

World-Check

-
-filtres) { ?> -param->dirType =='INDIVIDUAL') {?> -
- -
- - - -
-resultWC) -{ -?> -
Aucun résultat.
-resultWC; - - $reponse = count($resultWC)==1?'réponse':'réponses'; - $title = count($resultWC).' '.$reponse.' avec les critères "'.$this->param->dirNom.' '.$this->param->dirPrenom.'"'; -?> -
-
-
-
    ol_number; ?>> -paginator as $entityId=>$shortData) -{ -?> -
  1. -lastName.' '.$shortData->givenName;?>
    - -description) && $shortData->description!='') {?> - - - - - -country) && $shortData->country!='') {?> - - - - - -
    Descriptiondescription;?>
    Countrycountry));?>
    -
  2. - -
-
-

$this->itemCount) { echo $this->paginator; } ?>

- -
\ No newline at end of file diff --git a/application/views/default/scripts/worldcheck/list.phtml b/application/views/default/scripts/worldcheck/list.phtml new file mode 100644 index 000000000..e9a27e0d0 --- /dev/null +++ b/application/views/default/scripts/worldcheck/list.phtml @@ -0,0 +1,64 @@ +
+

World-Check

+
+filtres) { ?> +param->dirType =='INDIVIDUAL') {?> +
+ +
+ + + +
+resultWC) +{ +?> +
Aucun résultat.
+resultWC; + + $reponse = count($resultWC)==1?'réponse':'réponses'; + $title = count($resultWC).' '.$reponse.' avec les critères "'.$this->param->dirNom.' '.$this->param->dirPrenom.'"'; +?> +
+
+
+
    ol_number; ?>> +paginator as $entityId=>$shortData) +{ +?> +
  1. +lastName.' '.$shortData->givenName;?>
    + +description) && $shortData->description!='') {?> + + + + + +country) && $shortData->country!='') {?> + + + + + +
    Descriptiondescription;?>
    Countrycountry));?>
    +
  2. + +
+
+

$this->itemCount) { echo $this->paginator; } ?>

+ +
\ No newline at end of file diff --git a/application/views/default/scripts/worldcheck/matchcontent.phtml b/application/views/default/scripts/worldcheck/matchcontent.phtml index 50d24f381..494802cbc 100644 --- a/application/views/default/scripts/worldcheck/matchcontent.phtml +++ b/application/views/default/scripts/worldcheck/matchcontent.phtml @@ -161,6 +161,35 @@ foreach($content[0]->roles->role as $role) associates->associate)) { +$wcOrganigramme = array( + 'controller' => 'worldcheck', + 'action' => 'organigramme', + 'entityid' => $content[0]->entityId); +?> + + +associates->associate as $associate) { ?>

@@ -203,16 +232,16 @@ if ($associate->associatetype=='ASSOCIATE') ?> Associate: targetEntity->names->name[0]->fullName;?> targetEntity->names->name[0]->lastName.'/dirPrenom/'.$associate->targetEntity->names->name[0]->givenName;?> -
+
 Search in Extranet  
diff --git a/application/views/default/scripts/worldcheck/organigramme.phtml b/application/views/default/scripts/worldcheck/organigramme.phtml new file mode 100644 index 000000000..b5731fc9f --- /dev/null +++ b/application/views/default/scripts/worldcheck/organigramme.phtml @@ -0,0 +1,58 @@ +
+ + \ No newline at end of file diff --git a/application/views/default/scripts/worldcheck/orgchildren.phtml b/application/views/default/scripts/worldcheck/orgchildren.phtml new file mode 100644 index 000000000..f9d72ebf1 --- /dev/null +++ b/application/views/default/scripts/worldcheck/orgchildren.phtml @@ -0,0 +1 @@ +data ?> \ No newline at end of file diff --git a/application/views/default/scripts/worldcheck/popup.phtml b/application/views/default/scripts/worldcheck/popup.phtml new file mode 100644 index 000000000..de2a495b5 --- /dev/null +++ b/application/views/default/scripts/worldcheck/popup.phtml @@ -0,0 +1,78 @@ + +
+data;?> +
+
+
Category
+
+
+ +
+
Biography
+
+
+ +
+
Relations
+
", $data['identification']);?>
+
+ +
+
Links
+
+'recherche', + 'action'=>'dirigeant', + 'dirNom'=>$data['lastName'], + 'dirPrenom'=>$data['givenName'], + ); +} else { + $paramExtranet = array( + 'controller'=>'recherche', + 'action'=>'entreprise', + 'raisonSociale'=>$data['fullName'], + ); +} +?> +Search more in Extranet +
+'worldcheck', + 'action'=>'index', + 'dirNom'=>$data['lastName'], + 'dirPrenom'=>$data['givenName'], + 'dirType'=>$data['nameType'] + ); +?> +Search more in WorldCheck +
+
+
\ No newline at end of file diff --git a/public/themes/default/images/worldcheck/individual.png b/public/themes/default/images/worldcheck/individual.png new file mode 100644 index 0000000000000000000000000000000000000000..65647c4a09b0bf4b84a61b58b10d60cc661f43f3 GIT binary patch literal 3637 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