Browse Source

Merge branch 'hotfix-client-state-onu' into 'master'

Hotfix client state onu

See merge request interlink-sa/flowdat3/modules/ftth!154
Jean Sumara Leopoldo 5 năm trước cách đây
mục cha
commit
eae60bfd1b

+ 1 - 0
.gitignore

@@ -23,3 +23,4 @@ app/Resources/workflows/workflow_list.yml
 /web/workflows_png/*
 !web/workflows_png/.gitkeep
 /app/config/bundles/ik/base-admin-bundle/parameters.yml
+.idea

+ 1 - 0
app/config/url_webservice.yml.dist

@@ -10,6 +10,7 @@ parameters:
 
     onu: '%url_ftth%/api/onus.json'
     client: 'https://%env(HOST_BASE)%/api/clients.json'
+    client_active: 'https://%env(HOST_BASE)%/api/clients/actives.json'
     active_menu: FTTH
     navbar_menu:
         Base: '%url_base%'

+ 1 - 0
app/config/url_webservice.yml.docker

@@ -9,6 +9,7 @@ parameters:
 
     onu: '%url_ftth%/api/onus.json'
     client: 'https://%env(HOST_BASE)%/api/clients.json'
+    client_active: 'https://%env(HOST_BASE)%/api/clients/actives.json'
     active_menu: FTTH
     navbar_menu:
         Base: '%url_base%'

+ 20 - 0
src/FTTHBundle/Admin/ONUAdmin.php

@@ -6,6 +6,10 @@ use Base\AdminBundle\Checks\CheckParametersAsURL;
 use Buzz\Message\RequestInterface as HttpRequestInterface;
 use Doctrine\ORM\EntityRepository;
 use FTTHBundle\Entity\NAP;
+use FTTHBundle\Entity\ONU;
+use FTTHBundle\Factory\ExceptionFactory;
+use FTTHBundle\Service\ClientService;
+use FTTHBundle\Utils\ONUStateEnum;
 use Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery;
 use Sonata\AdminBundle\Datagrid\DatagridMapper;
 use Sonata\AdminBundle\Datagrid\ListMapper;
@@ -22,7 +26,9 @@ use Symfony\Component\Form\Extension\Core\Type\HiddenType;
 use FTTHBundle\Entity\ONUTemplate;
 use FTTHBundle\Form\ServicePortType;
 use FTTHBundle\Utils\OLTModelMark;
+use WebserviceBundle\Services\Webservice;
 use WorkflowBundle\Admin\WorkflowBaseAdmin;
+use Exception;
 
 class ONUAdmin extends WorkflowBaseAdmin
 {
@@ -739,9 +745,23 @@ class ONUAdmin extends WorkflowBaseAdmin
 
     }
 
+
+    /**
+     * @param ONU $onu
+     * @throws Exception
+     */
     public function prePersist($onu)
     {
         $onu->setOlt($onu->getNap()->getOlt());
+        $webService = $this->get("webservice");
+        if($webService instanceof Webservice){
+            try{
+                $clientService = new ClientService($webService, $this->getConfigurationPool()->getContainer());
+                $clientService->setStateOnu($onu);
+            }catch (Exception $ex){
+                ExceptionFactory::make($ex->getMessage());
+            }
+        }
     }
 
     /**

+ 17 - 0
src/FTTHBundle/Factory/ExceptionFactory.php

@@ -0,0 +1,17 @@
+<?php
+
+
+namespace FTTHBundle\Factory;
+
+use Exception;
+
+class ExceptionFactory
+{
+    /**
+     * @param $message string
+     * @throws Exception
+     */
+    public static function make($message){
+        throw new Exception($message);
+    }
+}

+ 77 - 0
src/FTTHBundle/Service/ClientService.php

@@ -0,0 +1,77 @@
+<?php
+
+
+namespace FTTHBundle\Service;
+
+use Exception;
+use FTTHBundle\Entity\ONU;
+use FTTHBundle\Factory\ExceptionFactory;
+use FTTHBundle\Utils\ClientStateEnum;
+use FTTHBundle\Utils\ONUStateEnum;
+use WebserviceBundle\Services\Webservice;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+class ClientService
+{
+    /**
+     * @var Webservice
+     */
+    protected $webservice;
+
+    /**
+     * @var ContainerInterface
+     */
+    protected $serviceContainer;
+
+    /**
+     * @param Webservice $webservice
+     * @param ContainerInterface $serviceContainer
+     */
+    public function __construct(Webservice $webservice, ContainerInterface $serviceContainer)
+    {
+        $this->webservice = $webservice;
+        $this->serviceContainer = $serviceContainer;
+    }
+
+    /**
+     * @param $id int
+     * @return Client || Exception
+     * @throws Exception
+     */
+    public function getById($id){
+        try{
+            $this->checkContainerParameter();
+            $filters = array("qb-ids" => $id, 'qb-criteria' => true);
+            return $this->webservice->getData($this->serviceContainer->getParameter('client'), $filters)[0];
+        }catch (Exception $ex){
+            ExceptionFactory::make($ex->getMessage());
+        }
+    }
+
+
+    /**
+     * @param ONU $onu
+     * @throws Exception
+     */
+    public function setStateOnu(ONU $onu){
+        try{
+            $clientEnums = new ClientStateEnum();
+            $client = $this->getById($onu->getClientId());
+            if(!is_null($client) && $clientEnums->containsStatesDisabled($client['currentState'])){
+                ExceptionFactory::make("Not is possible use client with current state 'cancelled' or 'deleted'");
+            }
+            $onu->setCurrentState(ONUStateEnum::ACTIVE);
+        }catch (Exception $ex){
+            ExceptionFactory::make($ex->getMessage());
+        }
+    }
+
+    /**
+     * @throws Exception
+     */
+    private function checkContainerParameter(){
+        if(!$this->serviceContainer->hasParameter('client')){
+            ExceptionFactory::make("Don't exists parameters 'client' to search the webservice");
+        }
+    }
+}

+ 22 - 0
src/FTTHBundle/Utils/ClientStateEnum.php

@@ -0,0 +1,22 @@
+<?php
+
+
+namespace FTTHBundle\Utils;
+
+
+class ClientStateEnum
+{
+    const CURRENT_STATE_SUSPEND = 'suspend';
+    const CURRENT_STATE_CANCELLED = 'cancelled';
+    const CURRENT_STATE_DELETED = 'deleted';
+
+
+    /**
+     * @param $state string
+     * @return bool
+     */
+    public function containsStatesDisabled($state)
+    {
+        return $state === self::CURRENT_STATE_CANCELLED || $state === self::CURRENT_STATE_DELETED;
+    }
+}

+ 11 - 0
src/FTTHBundle/Utils/ONUStateEnum.php

@@ -0,0 +1,11 @@
+<?php
+
+
+namespace FTTHBundle\Utils;
+
+
+class ONUStateEnum
+{
+    const ACTIVE = "active";
+    const DISABLE = "disable";
+}