src/Controller/CURLController.php line 53

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
  9. use Symfony\Component\HttpKernel\KernelInterface;
  10. use App\Services\CsvResponse;
  11. use App\Services\OnTraceServerSync;
  12. use App\Entity\ProductType;
  13. use App\Services\Utils;
  14. use App\Entity\Parameter;
  15. use App\Entity\Product;
  16. use App\Entity\Placement;
  17. /**
  18.  * SOAP controller.
  19.  *
  20.  * @Route("/")
  21.  */
  22. class CURLController extends AbstractController
  23. {
  24.     /**
  25.      * @Route("/url_interface.php", name="curl", methods={"GET","POST"})
  26.      */
  27.     public function urlInterfaceAction(Request $requestKernelInterface $kernelOnTraceServerSync $sync)
  28.     {
  29.         try {
  30.             $container=$kernel->getContainer();
  31.             $logger=$container->get('monolog.logger.onTraceEvents');
  32.             $internal_api=$container->get('on_trace_internal_api');
  33.             $api=$container->get('on_trace_api');
  34.             
  35.             $filename='file.csv';
  36.             $debugTimes='';
  37.             $startTime=microtime(true);
  38.             $class=$request->get('class');                
  39.             $internal_api->logEventIn($class);
  40.             $str='';
  41.             foreach($request->query->all() as $key=>$o$str=$str.$key.'='.$o.'&';
  42.             foreach($request->request->all() as $key=>$o) if (is_string($key) && is_string($o)) $str=$str.$key.'='.$o.'&';
  43.             //$logger->info('        '.$str);        
  44.             $isJson=false;
  45.             $doLog=true;
  46.             
  47.             if (array_search($class,array('add_inout','add_group','add_queue','add_device','add_segment','isalive','monitor'))!==false &&
  48.                     Parameter::get($this->getDoctrine()->getConnection(), Parameter::STOP_EVENTS)) {
  49.                 $result='ERROR STOPPED EVENTS';
  50.             } else {            
  51.                 try {
  52.                     switch ($class) {
  53.                         case 'add_inout'
  54.                             $data=explode("\n",$request->getContent());
  55.                             if (count($data)>1) { //multiple add_inout
  56.                                 $type=array(); $date=array(); $height=array(); $line=array(); $idEvents=array();
  57.                                 foreach($data as $l) {
  58.                                     $params=array();
  59.                                     parse_str($l,$params);
  60.                                     $type[]=$params['type'];
  61.                                     $date[]=$params['date'];
  62.                                     $height[]=$params['height'];
  63.                                     $line[]=$params['line'];                                
  64.                                     $idEvents[]=array_key_exists('id',$params)?$params['id']:null;
  65.                                 }
  66.                                 $result=$internal_api->add_inout($request->get('prod_ref'),$idEvents$type,
  67.                                     $date,$height,$line);
  68.                             } else {                        
  69.                                 $result=$internal_api->add_inout($request->get('prod_ref'), $request->get('id'), 
  70.                                         $request->get('type'),$request->get('date'),$request->get('height'),
  71.                                         $request->get('line'));
  72.                             }
  73.                             if (is_array($result)) {
  74.                                 $debugTimes=$result['time'];
  75.                                 $result=$result['result'];
  76.                             }
  77.                             break;
  78.                         case 'add_group':
  79.                             //class=add_group&members=3&child=1date=20100330132859&prod_ref=XXXX
  80.                             $data=explode("\n",$request->getContent());
  81.                             if (count($data)>1) { //multiple add_inout
  82.                                 $line=array(); $members=array(); $child=array(); $date=array(); 
  83.                                 foreach($data as $l) {
  84.                                     $params=array();
  85.                                     parse_str($l,$params);
  86.                                     $line[]=$params['line'];
  87.                                     $members[]=$params['members'];
  88.                                     $child[]=$params['child'];
  89.                                     $date[]=$params['date'];
  90.                                 }
  91.                                 $result=$internal_api->add_group($request->get('prod_ref'),$line$members$child,$date);
  92.                             } else {                        
  93.                                 $result=$internal_api->add_group($request->get('prod_ref'), $request->get('line'),$request->get('members'), 
  94.                                         $request->get('child'),$request->get('date'));
  95.                             }
  96.                             if (is_array($result)) {
  97.                                 $debugTimes=$result['time'];
  98.                                 $result=$result['result'];
  99.                             }                        
  100.                             break;
  101.                         case 'add_queue'
  102.                             $data=explode("\n",$request->getContent());
  103.                             if (count($data)>1) { //multiple add_inout
  104.                                 $type=array(); $subType=array(); $zone=array();  $idEvents=array();  $qtime=array();  $date=array();  $height=array(); $total=array();
  105.                                 foreach($data as $l) {
  106.                                     $params=array();
  107.                                     parse_str($l,$params);
  108.                                     $type[]=$params['type'];
  109.                                     $subType[]=$params['sub_type'];
  110.                                     $zone[]=$params['zone'];
  111.                                     $idEvents[]=array_key_exists('id',$params)?$params['id']:null;
  112.                                     $qtime[]=$params['qtime'];
  113.                                     $date[]=$params['date'];
  114.                                     $height[]=$params['height'];
  115.                                     $total[]=$params['total'];
  116.                                 }
  117.                                 $result=$internal_api->add_queue($request->get('prod_ref'), $idEvents$type$subType$zone$qtime$date$height$total);
  118.                             } else {                        
  119.                                 $result=$internal_api->add_queue($request->get('prod_ref'), $request->get('id'), 
  120.                                         $request->get('type'), $request->get('sub_type'),$request->get('zone'), 
  121.                                         $request->get('qtime'),$request->get('date'), $request->get('height'), $request->get('total')); 
  122.                             }
  123.                             if (is_array($result)) {
  124.                                 $debugTimes=$result['time'];
  125.                                 $result=$result['result'];
  126.                             }
  127.                             break;                    
  128.                         case 'add_device'
  129.                             //return new Response('ERROR server busy');
  130.                             $data=explode("\n",$request->getContent());
  131.                             if (count($data)>1) { //multiple add_device
  132.                                 $dev_id=array(); $model=array(); $first_t=array(); $last_t=array(); $status=array();
  133.                                 foreach($data as $line) {
  134.                                     $params=array();
  135.                                     parse_str($line,$params);
  136.                                     $dev_id[]=$params['dev_id'];
  137.                                     $model[]=$params['model'];
  138.                                     $first_t[]=$params['first_t'];
  139.                                     $last_t[]=$params['last_t'];
  140.                                     $status[]=$params['status'];
  141.                                 }
  142.                                 $result=$internal_api->add_device($request->get('prod_ref'),$dev_id,
  143.                                     $model,$first_t,$last_t,$status,null,null,null,null);
  144.                             } else {
  145.                                 $result=$internal_api->add_device($request->get('prod_ref'),$request->get('dev_id'),
  146.                                     $request->get('model'),$request->get('first_t'),$request->get('last_t'),
  147.                                     $request->get('status'),$request->get('mq'),$request->get('sq'),
  148.                                     $request->get('mp'),$request->get('sq'));                                                          
  149.                             }
  150.                             break;
  151.                         case 'add_segment'
  152.                             $data=explode("\n",$request->getContent());
  153.                             if (count($data)>1) { //multiple add_device
  154.                                 $age=array(); $gender=array(); $expression=array(); $duration=array(); $distance=array(); $date=array(); $type=array();
  155.                                 foreach($data as $line) {
  156.                                     $params=array();
  157.                                     parse_str($line,$params);
  158.                                     $age[]=$params['age'];
  159.                                     $gender[]=$params['gender'];
  160.                                     $expression[]=$params['expression'];
  161.                                     $duration[]=$params['duration'];
  162.                                     $distance[]=$params['distance'];
  163.                                     $date[]=$params['date'];
  164.                                     $type[]=$params['type'];
  165.                                 }
  166.                                 $result=$internal_api->add_segment($request->get('prod_ref'),$age$gender$expression$duration$distance$date$type);                              
  167.                             } else {
  168.                                 $result=$internal_api->add_segment($request->get('prod_ref'),$request->get('age'),
  169.                                         $request->get('gender'),$request->get('expression'),$request->get('duration'),
  170.                                         $request->get('distance'),$request->get('date'),$request->get('type')); 
  171.                             }
  172.                             break;
  173.                         case 'add_health':
  174.                             //class=add_health&prod_ref=XXXX&co2=500&temp=25.6&hr=58&date=20210620195959
  175.                             $data=explode("\n",$request->getContent());
  176.                             if (count($data)>1) { //multiple add_device
  177.                                 $co2=array(); $temp=array(); $hr=array(); $date=array();
  178.                                 foreach($data as $line) {
  179.                                     $params=array();
  180.                                     parse_str($line,$params);
  181.                                     $co2[]=$params['co2'];
  182.                                     $temp[]=$params['temp'];
  183.                                     $hr[]=$params['hr'];
  184.                                     $date[]=$params['date'];
  185.                                 }
  186.                                 $result=$internal_api->add_health($request->get('prod_ref'),$co2$temp$hr$date);
  187.                             } else {
  188.                                 $result=$internal_api->add_health($request->get('prod_ref'),$request->get('co2'),
  189.                                     $request->get('temp'),$request->get('hr'),$request->get('date'));                                                          
  190.                             }
  191.                             break;
  192.                         case 'get_access'
  193.                             $result=$internal_api->get_access($request->get('idPlacement'));
  194.                             return $this->addHeaders(new Response($result));
  195.                             break;                      
  196.                         case 'get_timetable'
  197.                             $result=$internal_api->get_timetable($request->get('prod_ref'),$request->get('date')); break;                      
  198.                         case 'get_calendar'
  199.                             $result=$internal_api->get_calendar($request->get('prod_ref')); break;                      
  200.                         case 'isalive'
  201.                             $result=$internal_api->isalive($request->get('prod_ref'),$request->get('type'),$request->get('local_time')); break;
  202.                         case 'monitor':
  203.                             $result=$internal_api->monitor($request->get('prod_ref'),$request->get('disk'),
  204.                                     $request->get('temp'),$request->get('rb'),$request->get('varN'),
  205.                                     $request->get('status'),$request->get('lastboot'),$request->get('ip'),
  206.                                     $request->get('rtp'),
  207.                                     $request->getMethod()=='GET'?$request->getQueryString():$request->getContent());
  208.                             break;
  209.                         case 'select'
  210.                             $doLog=false;
  211.                             if ($request->getMethod()=='GET') {
  212.                                 $result=$api->select(
  213.                                         $request->get('login'),$request->get('password'),$request->get('ticket'),
  214.                                         $request->get('productType'),
  215.                                         $request->get('dataType'),
  216.                                         $request->get('dateIn'),$request->get('dateEnd'),$request->get('freq'), 
  217.                                         $request->get('idType'),$request->get('ids'),
  218.                                         $request->get('innerIdOperation'),
  219.                                         $request->get('idsOperation'),
  220.                                         $request->get('projectOperation')); 
  221.                             } else {
  222.                                 $params = array();
  223.                                 $content $request->getContent();
  224.                                 $login=$request->get('login');
  225.                                 $ticket=$request->get('ticket');
  226.                                 $password=$request->get('password');
  227.                                 if (!empty($content))
  228.                                 {
  229.                                     $params json_decode($content); // 2nd param to get as array
  230.                                     $result=$api->selectMulti($login$password$ticket$params);
  231.                                 }
  232.                             }
  233.                             $isJson=true;
  234.                             break;                    
  235.                         case 'selectRealTime'
  236.                             $doLog=false;
  237.                             $result=$api->selectRealTime(
  238.                                     $request->get('login'),$request->get('password'),$request->get('ticket'),
  239.                                     $request->get('idType'),$request->get('ids'),
  240.                                     $request->get('idsOperation')); 
  241.                             $isJson=true;
  242.                             break;     
  243.                         case 'selectAlerts'
  244.                             $doLog=false;
  245.                             $result=$api->selectAlerts(
  246.                                     $request->get('login'),$request->get('password'),$request->get('ticket'),
  247.                                     $request->get('idType'),$request->get('ids')); 
  248.                             $isJson=true;
  249.                             break;                             
  250.                         case 'selectEntity'
  251.                             $doLog=false;
  252.                             $result=$api->selectEntity(
  253.                                     $request->get('login'),$request->get('password'),$request->get('ticket'),
  254.                                     $request->get('idType'),$request->get('ids'),
  255.                                     $request->get('dataType'));
  256.                             $isJson=true;
  257.                             break;      
  258.                         case 'selectUserEntities':
  259.                             $doLog=false;
  260.                             $result=$api->selectUserEntities(
  261.                                     $request->get('login'),$request->get('password'),$request->get('ticket'),
  262.                                     $request->get('idType'),$request->get('productType')); 
  263.                             $isJson=true;
  264.                             break; 
  265.                         case 'selectJson':
  266.                             if ($request->getMethod()==='POST') {
  267.                                 $content $request->getContent();
  268.                                 if (!empty($content))
  269.                                 {
  270.                                     $params json_decode($contenttrue); //to array
  271.                                     $result=$api->selectJson($params);
  272.                                     $isJson=true;
  273.                                 }
  274.                             }
  275.                             break;                     
  276.                         case 'selectUserThresholds':
  277.                             $doLog=false;
  278.                             $result=$api->selectUserThresholds($request->get('login'),$request->get('password'), $request->get('ticket')); 
  279.                             $isJson=true;
  280.                             break; 
  281.                         case 'sync':
  282.                             if ($request->getMethod()==='POST') {
  283.                                 $content $request->getContent();                                
  284.                                 if (!empty($content))
  285.                                 {
  286.                                     $container->get('monolog.logger.onTraceSync')->info('url_interface/sync=>ip:'.$request->getClientIp().'-->'.$content);
  287.                                     $params json_decode($content); 
  288.                                     switch($params->op) {
  289.                                         case 'serverToMasterSync':
  290.                                             $sync=$container->get('on_trace_server_to_master_sync');
  291.                                             $result=$sync->import($request->getClientIp(), $params);
  292.                                             $isJson=true;
  293.                                             break;
  294.                                         case 'transfer':                   
  295.                                             $sync=$container->get('on_trace_transfer_sync');
  296.                                             $result=$sync->import($request->getClientIp(), $params);
  297.                                             break;
  298.                                         case 'copyProduct':                   
  299.                                             $sync=$container->get('on_trace_transfer_sync');
  300.                                             $result=$sync->importProduct($request->getClientIp(), $params);
  301.                                             break;
  302.                                         case 'tansferNotify':                   
  303.                                             $sync=$container->get('on_trace_transfer_sync');
  304.                                             $result=$sync->notify($request->getClientIp(), $params);
  305.                                             break;    
  306.                                         case 'ping':
  307.                                             $result='OK';
  308.                                             break;
  309.                                         case 'update':
  310.                                         case 'updateFields':
  311.                                         case 'canDelete':
  312.                                         case 'delete':
  313.                                         case 'markDeleted':
  314.                                         case '':
  315.                                             $sync=$container->get('on_trace_master_to_server_sync');
  316.                                             $result=$sync->sync(
  317.                                                     $request->getClientIp(), $request->getSchemeAndHttpHost(), 
  318.                                                     $params->entity$params->op$params->id$params->values);
  319.                                             $isJson=true;
  320.                                             break;
  321.                                         case 'doBackup':
  322.                                         case 'getBackupProgress':
  323.                                             $isJson=true;
  324.                                             $sync=$container->get('on_trace_backup_sync');
  325.                                             $result=$sync->dispatch($request->getClientIp(), 
  326.                                                     $request->getHttpHost(), 
  327.                                                     $params->op$params->id);
  328.                                             break;
  329.                                         case 'initSlaveServer':
  330.                                             $sync=$container->get('on_trace_discover_sync');
  331.                                             $sync->initSlaveServer($request->getClientIp());
  332.                                             $result='OK';
  333.                                             break;
  334.                                         case 'addServerToGlobalMaster':
  335.                                             $sync=$container->get('on_trace_discover_sync');
  336.                                             $result=$sync->addServerToGlobalMaster($request->getClientIp(), $params);
  337.                                             $isJson=true;
  338.                                             break;
  339.                                         case 'addMaterializedData':
  340.                                             $sync=$container->get('on_trace_global_sync');
  341.                                             $result=$sync->addMaterializedData($request->getClientIp(), $params->table$params->id$params->data);
  342.                                             $isJson=true;
  343.                                             break;
  344.                                         default:
  345.                                             $result="unkown op=[$op]";
  346.                                     }                                
  347.                                 } else $result='sync without parameters';
  348.                             } /*else  {
  349.                                 //$result='sync must use POST';
  350.                                 $sync=$container->get('on_trace_master_to_server_sync');
  351.                                 $result=$sync->sync(
  352.                                         $request->getClientIp(), $request->getSchemeAndHttpHost(), 
  353.                                         $request->get('entity'), $request->get('op'), $request->get('id'), $request->get('values'));
  354.                             }*/
  355.                             break;  
  356.                         case 'syncAppGestio':
  357.                             $entity null;
  358.                             $trusted_ip '91.142.215.75';
  359.                             if ($request->getMethod()==='POST' && $request->getClientIp()===$trusted_ip) {
  360.                                 switch ($request->get('type')) {
  361.                                     case 'branch'
  362.                                         $entity $internal_api->appGestio_branch(
  363.                                             $request->get('idBranch'),
  364.                                             $request->get('branch_name')
  365.                                         ); 
  366.                                         break;
  367.                                     case 'client'
  368.                                         $entity $internal_api->appGestio_client(
  369.                                             $request->get('idClient'),
  370.                                             $request->get('client_name'),
  371.                                             $request->get('idBranch')
  372.                                         ); 
  373.                                         break;
  374.                                     case 'sale'
  375.                                         $entity $internal_api->appGestio_sale(
  376.                                             $request->get('prod_ref'),
  377.                                             $request->get('idClient')
  378.                                         ); 
  379.                                         break;
  380.                                     case 'license'
  381.                                         $entity $internal_api->appGestio_license(
  382.                                             $request->get('prod_ref'),
  383.                                             $request->get('op')
  384.                                         ); 
  385.                                         break;
  386.                                     case 'generate_products':
  387.                                         $internal_api->appGestio_generate_products(
  388.                                             $request->get('quantity')
  389.                                         );
  390.                                         break;
  391.                                     default: break;
  392.                                 }
  393.                                 $sync=$container->get('on_trace_master_to_server_sync');
  394.                                 $sync->prepare($entity);
  395.                                 $r=$sync->update($entity);
  396.                                 $result=$entity->getId();
  397.                             }
  398.                             break;
  399.                         case 'syncMonitoring':
  400.                             if ($request->getMethod()==='POST') {
  401.                                 $content $request->getContent();
  402.                                 if (!empty($content))
  403.                                 {
  404.                                     $params json_decode($content); 
  405.                                     $result=$sync->syncMonitoring($request->getClientIp(), $params->idProduct$params->status);
  406.                                 } else $result='syncMonitoring without parameters';
  407.                             }
  408.                             break;
  409.                         case 'syncSelectStatus':
  410.                             if ($request->getMethod()==='POST') {
  411.                                 $content $request->getContent();
  412.                                 if (!empty($content))
  413.                                 {
  414.                                     $params json_decode($content); 
  415.                                     $result=$sync->selectStatus($request->getClientIp(), $params->idProducts);
  416.                                 } else $result='syncSelectStatus without parameters';
  417.                             }
  418.                             $isJson=true;
  419.                             break;
  420.                         case 'docEfficency':
  421.                             if ($request->getMethod()==='POST') {
  422.                                 $doc='';
  423.                                 $format=$request->get('format');
  424.                                 $content $request->get('data');
  425.                                 if (!empty($content))
  426.                                 {
  427.                                     $data json_decode($content); 
  428.                                     $eff=$container->get('on_trace_efficency');
  429.                                     if ($format=='pdf'$doc$eff->getPdf($data$format);
  430.                                     else $doc$eff->getCsv($data$format);
  431.                                 };
  432.                                 return new Response($doc200, array(
  433.                                     'Content-Type' => $format=='pdf'?'application/pdf':'text/csv',
  434.                                     'Content-Disposition' => 'attachment; filename="'.$data->file.'.'.$format.'"',
  435.                                 ));
  436.                             }
  437.                             break;                                              
  438.                         default: $result='Unknown command '.$class;
  439.                     }
  440.                 } catch (AccessDeniedHttpException $e) {
  441.                     throw $e;
  442.                 }catch (\Exception $e) {
  443.                     $result=$e->getMessage().' '.$e->getTraceAsString();
  444.                     $logger->info('        ERROR internal: '.$result);
  445.                     return new Response('ERROR internal: '.$result);
  446.                 }
  447.             }
  448.             $elapsedTime=round((microtime(true)-$startTime)*1000);
  449.             if ($doLog) {
  450.                 $logger->info('Result(IP '.$request->getClientIp().'): '.$str.'-->'.($isJson?'*':$result). '['.$elapsedTime.'ms] ['.$debugTimes.']');     
  451.             }
  452.             $internal_api->logEventOut($class$elapsedTime);
  453.             if ($isJson) {
  454.                 if ($request->get('format')=='CSV' || $request->get('format')=='CSV2') {
  455.                     $filename='';
  456.                     $aIds=explode(',',$request->get('ids'));
  457.                     if ($request->get('idType')=='placement' && count($aIds)==&& $aIds[0]) {
  458.                         $placement=$this->getDoctrine()->getRepository(Placement::class)->find($request->get('ids'));
  459.                         $filename=$placement->getName().'-';
  460.                     } else {
  461.                         $filename='T-';
  462.                     }
  463.                     
  464.                     $dateIn=$request->get('dateIn');
  465.                     $dateEnd=$request->get('dateEnd');
  466.                     if ($dateIn==$dateEnd) {
  467.                         $filename.=$dateIn;
  468.                     } else {
  469.                         $filename.=$dateIn.'-'.$dateEnd;
  470.                     }
  471.                     return new CsvResponse($result,$filename.'.csv',$request->get('format'));
  472.                 } else return $this->addHeaders(new JsonResponse($result));
  473.             } else return new Response($result);
  474.         } catch (AccessDeniedHttpException $e) {
  475.                 throw $e;
  476.         } catch( \Exception $e) {
  477.             $result=$e->getMessage().' '.$e->getTraceAsString();
  478.             error_log('        ERROR internal: '.$result);
  479.             return new Response('ERROR internal: '.$result);
  480.         }
  481.     }
  482.     
  483.     function addHeaders($response) {
  484.         $response->headers->set('Access-Control-Allow-Origin''*');  //allow CORS Cross Origin 
  485.         return $response;
  486.     }
  487.     
  488.     
  489.     
  490.    /**
  491.      * @Route("/axpeco", name="axpeco", methods={"GET","POST"})
  492.      */
  493.     public function axpecoAction(Request $requestKernelInterface $kernel)
  494.     {
  495.         $container=$kernel->getContainer();
  496.         $logger=$container->get('monolog.logger.onTraceEvents');
  497.         $internal_api=$container->get('on_trace_internal_api');
  498.         $em $this->getDoctrine()->getManager();       
  499.         
  500.         $str='';
  501.         foreach($request->query->all() as $key=>$o$str=$str.$key.'='.$o.'&';
  502.         foreach($request->request->all() as $key=>$o) if (is_string($key) && is_string($o)) $str=$str.$key.'='.$o.'&';
  503.         $logger->info('AXPECO -->'.$str);     
  504.         
  505.         $id=$request->get('id');
  506.         $product=$em->getRepository(Product::class)->findOneBy(array('prodRef'=>$id));   
  507.         if ($product) {
  508.             $placement=$product->getPlacement();
  509.             $productFunction=$product->getProductFunction(ProductType::INOUT);                 
  510.             if ($productFunction && $placement) {
  511.                 if ($request->getMethod()=='GET') {
  512.                     $date=$productFunction->getLastIsAlive()->format('c');
  513.                     return new JsonResponse($date);
  514.                 } else if ($request->getMethod()=='POST') {
  515.                     $jsonData=$request->get('data');
  516.                     $data=json_decode($jsonData);
  517.                     
  518.                     //busquem l'Ășltim bloc de 5minuts amb dades (in!=0 o out!=0)
  519.                     //per descartar-lo, ja que a vegades els comptadors envien 
  520.                     //dades temporals                    
  521.                     $lastData=null;
  522.                     foreach($data as $row) {
  523.                         $date=$row->date;
  524.                         $ins=$row->in;
  525.                         $outs=$row->out;
  526.                         $pos=strpos($date,'+');
  527.                         if ($pos>0) { 
  528.                             $date=substr($date,0,$pos);
  529.                         }
  530.                         $oDate=\DateTime::createFromFormat('Y-m-d?H:i:s'$date);
  531.                         if ($ins>|| $outs>0$lastData=$oDate;
  532.                     }
  533.                     
  534.                     $txt='';
  535.                     $lastIsAlive=$productFunction->getLastIsAlive();
  536.                     foreach($data as $row) {
  537.                         $date=$row->date;
  538.                         $ins=$row->in;
  539.                         $outs=$row->out;
  540.                         $pos=strpos($date,'+');
  541.                         if ($pos>0) { 
  542.                             $date=substr($date,0,$pos);
  543.                         }
  544.                         $oDate=\DateTime::createFromFormat('Y-m-d?H:i:s'$date);
  545.                         if ($oDate>$lastIsAlive  && $lastData && $oDate<$lastData && ($ins>|| $outs>0) ) {
  546.                             $date=Utils::DateTimeToYYYYMMDDhhmmss($oDate);
  547.                             $txt.=$date.'--'.$ins.'--'.$outs."\r\n";
  548.                             $aType=array(); $aDate=array(); $aHeight=array(); $aLine=array();
  549.                             //IN's
  550.                             for($i=0;$i<$ins;$i++) {
  551.                                 $aType[]='IN';
  552.                                 $aDate[]=$date;
  553.                                 $aHeight[]=150;
  554.                                 $aLine[]=0;
  555.                             }
  556.                             //OUT's
  557.                             for($i=0;$i<$outs;$i++) {
  558.                                 $aType[]='OUT';
  559.                                 $aDate[]=$date;
  560.                                 $aHeight[]=150;
  561.                                 $aLine[]=0;
  562.                             }                        
  563.                             $result=$internal_api->add_inout($id,null,$aType,
  564.                                 $aDate,$aHeight,$aLine);   
  565.                             $productFunction->setLastIsAlive($oDate);
  566.                         }
  567.                     }
  568.                     $em->persist($productFunction);
  569.                     $em->flush();
  570.                     $logger->info('AXPECO -->'.$txt);                    
  571.                     return new JsonResponse(array('result'=>'OK'));
  572.                 }
  573.             }
  574.         }
  575.         return new JsonResponse('ERROR');
  576.     }
  577. }
  578.     
  579. ?>