src/Controller/PersonalController.php line 855

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use App\Entity\Menu;
  7. use App\Service\LogHistoryService;
  8. use App\Entity\User;
  9. use App\Entity\UserToken;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  14. use App\Service\AppApiService;
  15. use App\Service\PowerOn;
  16. use App\Entity\AppPersonalAccount;
  17. use App\Entity\MediaObject;
  18. use App\Entity\AppCounterReading;
  19. use App\Entity\ServiceOrderHistory;
  20. use App\Entity\Accounts;
  21. use Symfony\Component\HttpKernel\KernelInterface
  22. use Symfony\Component\Security\Core\Security;
  23. use Symfony\Component\Serializer\SerializerInterface;
  24. use App\Repository\ServiceOrderHistoryRepository;
  25. class PersonalController extends AbstractController
  26. {
  27.     public $datetime;
  28.     public $entityManager;
  29.     public $passwordEncoder;
  30.     public $appApiService;
  31.     private $kernel;
  32.     private $logHistory;
  33.     private $security;
  34.     private $powerOn;
  35.     public function __construct
  36.         ?\DateTimeInterface $datetime
  37.         EntityManagerInterface $entityManager
  38.         PowerOn $powerOn,
  39.         AppApiService $appApiService
  40.         KernelInterface $kernel,  
  41.         LogHistoryService $logHistory,
  42.         Security $security
  43.         ){
  44.         $this->datetime $datetime;
  45.         $this->entityManager $entityManager;
  46.         $this->appApiService $appApiService;
  47.         $this->kernel $kernel;
  48.         $this->logHistory $logHistory;
  49.         $this->security $security;
  50.         $this->powerOn $powerOn;
  51.     }
  52.     public function valid($requestFilds$requiredFilds){
  53.         $errors '';
  54.         foreach($requiredFilds as $f){
  55.             if(!isset($requestFilds[$f]))
  56.                 $errors .= $f"
  57.         }
  58.         return $errors;
  59.     }
  60.     
  61.     private function isUserData($userId=false$accountNumber=false){
  62.         $user $this->security->getUser();
  63.         if(!$user)
  64.             return ['rezult' => false'error' => 'Користувач не авторизований'];
  65.         if(!$userId AND !$accountNumber)
  66.             return ['rezult' => false'error' => 'Не вказані всі необхідні параметри'];
  67.         /** Якщо користувач вказаний і він не рівний залогованому */
  68.         if($userId AND $user->getId() != $userId)
  69.             return ['rezult' => false'error' => '1) Недостатньо прав для виконання дії'];
  70.         elseif($userId AND $user->getId() == $userId AND !$accountNumber)
  71.             return ['rezult' => true];
  72.         /** якщо є номер особового і він рівний номеру залогованого користувача */
  73.         if($accountNumber)
  74.             foreach($user->getAppPersonalAccounts() as $acc){
  75.                 if( $acc->getNumber() == $accountNumber)
  76.                     return ['rezult' => true];
  77.             }
  78.         return ['rezult' => false'error' => '2) Недостатньо прав для виконання дії'];
  79.        
  80.     }
  81.     
  82.     #[Route('/api/create-personal-account-bot'name'createPersonalAccountBot')]
  83.     public function createPersonalAccountBot(Request $request)
  84.     {
  85.         $data json_decode($request->getContent(), true);
  86.         $logId $this->logHistory->save(false'create-personal-account-bot'$data);
  87.         $valid $this->valid$data, ['accounts''method''owner'] );
  88.         if( empty($valid) ){
  89.             $isUserData $this->isUserData($data['owner']);
  90.             if( $isUserData['rezult'] ){
  91.                 
  92.                 $find $this->entityManager->getRepository(User::class)->findOneBy(['id' => $data['owner']]);
  93.                 if($find){
  94.                     $resultAccounts = [];
  95.                     foreach($data['accounts'] as $value){
  96.                         $number trimarray_key_first($value) );
  97.                         $name $value[$number];
  98.                         $resultAccounts[$number] = false;
  99.                         $data = [
  100.                             'account' => $number
  101.                         ];
  102.                         $res json_decode$this->appApiService->account_all_data($data) , true );  
  103.                         if(isset($res['rez']) AND $res['rez'] == 1){
  104.                             if(isset($res['data']) AND count($res['data']) > 0){
  105.                                 $name = (!empty($name)) ? $name $number;
  106.                                 $accounts $this->entityManager->getRepository(Accounts::class)->findOneBy(['number' => $number]);
  107.                                 if(!$accounts){
  108.                                     $accounts = new Accounts();
  109.                                     $accounts->setNumber($number);
  110.                                     $accounts->setEic($res['data'][0]['eic_kod']);
  111.                                     $this->entityManager->persist($accounts);
  112.                                     $this->entityManager->flush();
  113.                                 }
  114.                                 $personal = new AppPersonalAccount();
  115.                                 $personal->setOwner($find);
  116.                                 $personal->setNumber($number);
  117.                                 $personal->setName($name);
  118.                                 $personal->setNumberOfScale((int) $res['data'][0]['number_of_scale']);
  119.                                 $personal->setActive(true);
  120.                                 $personal->setIsMain(true);
  121.                                 $personal->setFullAddress($res['data'][0]['name']);
  122.                                 $personal->setCity($res['data'][0]['city_name']);
  123.                                 $personal->setStreet($res['data'][0]['street_name']);
  124.                                 $personal->setBuilding($res['data'][0]['building_name']);
  125.                                 // $personal->setRoom($res['room']);
  126.                                 $personal->setMainFullAddress($res['data'][0]['name']);
  127.                                 $personal->setEic($res['data'][0]['eic_kod']);
  128.                                 $personal->setDateEntered($this->datetime);
  129.                                 $personal->setType('person');
  130.                                 $personal->setAccounts($accounts);
  131.                                 $personal->setCounter($res['data'][0]['counter']);
  132.                                 $personal->setNotificationStatus('active');
  133.                                 $this->entityManager->persist($personal);
  134.                                 $this->entityManager->flush();
  135.                                 $resultAccounts[$number] = true;
  136.                             }
  137.                         }  
  138.                         $rez = [
  139.                             'registered' => true,
  140.                             'registerAccounts' => $resultAccounts
  141.                         ];
  142.                     }
  143.                 }else{
  144.                     $rez = ['registered' => false];
  145.                 }
  146.                 
  147.             }else{
  148.                 $rez = ['registered' => false'error' => $isUserData['error']];
  149.             }
  150.         }else{
  151.             $rez = ['registered' => false'error' => "Не задано поля: $valid"];
  152.         }
  153.         $response = new JsonResponse();
  154.         $response->setData($rez);
  155.         $this->logHistory->save($logId'create-personal-account-bot'$rez);
  156.         return $response;
  157.     }
  158.     /** Cтворити рахунок  { "owner": "31", "account":"0900015104", "method":"by_name", "value": "Подолюк", "name": "Test 1" } */
  159.     #[Route('/api/create-personal-account'name'createPersonalAccount')]
  160.     public function createPersonalAccount(Request $request)
  161.     {
  162.         $data json_decode($request->getContent(), true);
  163.         $logId $this->logHistory->save(false'create-personal-account'$data);
  164.         $valid $this->valid$data, ['owner''account''method''value'] );
  165.         if( empty($valid) ){
  166.             $isUserData $this->isUserData($data['owner']);
  167.             if( $isUserData['rezult'] ){
  168.                 $find $this->entityManager->getRepository(User::class)->findOneBy(['id' => $data['owner']]);
  169.                 if($find){
  170.                     $data = ['account' => $data['account'], 'app_user_id' => $find->getId(), 'check_method' => $data['method'], 'check_value' => $data['value'], 'name' => $data['name']];
  171.                     $res json_decode$this->appApiService->checkPersonalAccount($data) , true );
  172.                     $name = (!empty($data['name'])) ? $data['name'] : $data['account'];
  173.                     if(isset($res['account_ok']) AND $res['account_ok'] ){
  174.                         $accounts $this->entityManager->getRepository(Accounts::class)->findOneBy(['number' => $data['account']]);
  175.                         if(!$accounts){
  176.                             $accounts = new Accounts();
  177.                             $accounts->setNumbertrim$data['account'] ));
  178.                             $accounts->setEic($res['eic']);
  179.                             $this->entityManager->persist($accounts);
  180.                             $this->entityManager->flush();
  181.                         }
  182.                         $personal = new AppPersonalAccount();
  183.                         $personal->setOwner($find);
  184.                         $personal->setNumber(trim$data['account'] ));
  185.                         $personal->setName($name);
  186.                         $personal->setNumberOfScale((int) $res['number_of_scale']);
  187.                         $personal->setActive(true);
  188.                         $personal->setIsMain(true);
  189.                         $personal->setFullAddress($res['full_address']);
  190.                         $personal->setCity($res['city']);
  191.                         $personal->setStreet($res['street']);
  192.                         $personal->setBuilding($res['building']);
  193.                         $personal->setRoom($res['room']);
  194.                         $personal->setMainFullAddress($res['full_address']);
  195.                         $personal->setEic($res['eic']);
  196.                         $personal->setDateEntered($this->datetime);
  197.                         $personal->setType('person');
  198.                         $personal->setAccounts($accounts);
  199.                         $personal->setCounter($res['counter']);
  200.                         $personal->setNotificationStatus('active');
  201.                         $this->entityManager->persist($personal);
  202.                         $this->entityManager->flush();
  203.                         $rez = [
  204.                             'registered' => true,
  205.                             'id' => $personal->getId(),
  206.                             'name' => $personal->getName(),
  207.                             'number' => trim$personal->getNumber() ),
  208.                             'numberOfScale' => $personal->getNumberOfScale(),
  209.                             'fullAddress' => $personal->getFullAddress(),
  210.                             'city' => $personal->getCity(),
  211.                             'street' => $personal->getStreet(),
  212.                             'building' => $personal->getBuilding(),
  213.                             'room' => $personal->getRoom(),
  214.                             'mainFullAddress' => $personal->getMainFullAddress(),
  215.                             'account' => [
  216.                                 'statusLight' => $accounts->getStatusLight(),
  217.                                 'statusPlanning' => $accounts->getStatusPlanning(),
  218.                             ]
  219.                         ];
  220.                     }else{
  221.                         $rez = ['registered' => false$res];
  222.                     }
  223.                 
  224.                 }else{
  225.                     $rez = ['registered' => false];
  226.                 }
  227.             }else{
  228.                 $rez = ['registered' => false'error' => $isUserData['error']];
  229.             }
  230.         }else{
  231.             $rez = ['registered' => false'error' => "Не задано поля: $valid"];
  232.         }
  233.         
  234.         
  235.     
  236.         $response = new JsonResponse();
  237.         $response->setData($rez);
  238.         $this->logHistory->save($logId'create-personal-account'$rez);
  239.         return $response;
  240.     }
  241.     #[Route('/api/create-personal-account_test'name'createPersonalAccountTest')]
  242.     public function createPersonalAccountTest(Request $request)
  243.     {
  244.         $data json_decode($request->getContent(), true);
  245.         // $data = ['account' => '0900015104', 'check_method' => 'by_name', 'check_value' => 'Подолюк'];
  246.         $res json_decode$this->appApiService->checkPersonalAccount($data) , true );
  247.         var_dump($res); die;
  248.         
  249.     }
  250.     /** наяність світла { "user": "31", "account":"0900015104" } */
  251.     #[Route('/api/check-light'name'check_light')]
  252.     public function check_light(Request $request)
  253.     {
  254.         $data json_decode($request->getContent(), true);
  255.         $logId $this->logHistory->save(false'check-light'$data);
  256.         $valid $this->valid$data, ['account''user'] );
  257.         if( empty($valid) ){
  258.             $isUserData $this->isUserData($data['user'], $data['account']);
  259.             if( $isUserData['rezult'] ){
  260.                 $data =  [
  261.                         'method' => 'check-light',
  262.                         'data' => [
  263.                             'account' => $data['account'],
  264.                             // 'eic'     => '36457',
  265.                     ],
  266.                 ];
  267.                 $rezult json_decode$this->appApiService->get($data) , true );
  268.                 if($rezult['rez']){
  269.                     $rez = [
  270.                         'rezult' => true
  271.                         'іs_included_disconnection_task' => (isset( $rezult['іs_included_disconnection_task']) ) ? $rezult['іs_included_disconnection_task'] : 0,
  272.                         'reazon' => (isset( $rezult['reazon']) ) ? $rezult['reazon'] : ''
  273.                         'reazon_yur' => (isset( $rezult['reazon_yur']) ) ? $rezult['reazon_yur']: ''    ,
  274.                         'owner_adress' => $rezult['owner_adress'],
  275.                         'light' => $rezult['light'],
  276.                         'date' => $rezult['date'],
  277.                         'diff_eic_count' => $rezult['diff_eic_count'],
  278.                         'eic' => $rezult['eic'],
  279.                         'dno_id' => $rezult['dno_id'],
  280.                         'disconnect_warning_guid' =>  (isset( $rezult['disconnect_warning_guid']))?$rezult['disconnect_warning_guid'] : '',
  281.                     ];   
  282.                 }else{
  283.                     $rez = ['rezult' => false'error' => $rezult['err_msg']];   
  284.                 }
  285.             }else{
  286.                 $rez = ['rezult' => false'error' => $isUserData['error']];
  287.             }
  288.         }else{
  289.             $rez = ['rezult' => false'error' => "Не задано поля: $valid"];   
  290.         }
  291.         $response = new JsonResponse();
  292.         $response->setData($rez);
  293.         $this->logHistory->save($logId'check-light'$rez);
  294.         return $response;
  295.     }
  296.     /** графік гпв { "user": "31", "account":"0900015104" } */
  297.     #[Route('/api/get-group-gpv'name'get_group_gpv')]
  298.     public function get_group_gpv(Request $request)
  299.     {
  300.         $data json_decode($request->getContent(), true);
  301.         // $logId = $this->logHistory->save(false, 'get_group_gpv', $data);
  302.         $valid $this->valid$data, ['account''user'] );
  303.         if( empty($valid) ){
  304.             $isUserData $this->isUserData($data['user'], $data['account']);
  305.             if( $isUserData['rezult'] ){
  306.                 $data =  [
  307.                         'method' => 'get-group-gpv',
  308.                         'data' => [
  309.                             'account' => $data['account'],
  310.                             // 'eic'     => '36457',
  311.                     ],
  312.                 ];
  313.                 $rezult json_decode$this->appApiService->get($data) , true );
  314.                 if($rezult['rez']){
  315.                     $rez = [
  316.                         'rezult' => true
  317.                         'rem_name' => $rezult['rem_name'],
  318.                         'odg_name' => $rezult['odg_name'],
  319.                         'cherg_gav' => $rezult['cherg_gav'],
  320.                         'cherg_achr' => $rezult['cherg_achr'],
  321.                         'cherg_gvsp' => $rezult['cherg_gvsp'],
  322.                         'cherg_sgav' => $rezult['cherg_sgav'],
  323.                         'cherg_gpv' => $rezult['cherg_gpv'],
  324.                     ];   
  325.                 }else{
  326.                     $rez = ['rezult' => false'error' => $rezult['err_msg']];   
  327.                 }
  328.             }else{
  329.                 $rez = ['rezult' => false'error' => $isUserData['error']];
  330.             }
  331.         }else{
  332.             $rez = ['rezult' => false'error' => "Не задано поля: $valid"];   
  333.         }
  334.         $response = new JsonResponse();
  335.         $response->setData($rez);
  336.         // $this->logHistory->save($logId, 'get_group_gpv', $rez);
  337.         return $response;
  338.     }
  339.     /** заплановані роботи { "user": "31", "account":"0900015104" } */
  340.     #[Route('/api/get-scheduled-works'name'get_scheduled_works')]
  341.     public function get_scheduled_works(Request $request)
  342.     {
  343.         $data json_decode($request->getContent(), true);
  344.         $logId $this->logHistory->save(false'get_scheduled_works'$data);
  345.         $valid $this->valid$data, ['account''user'] );
  346.         if( empty($valid) ){
  347.             $data =  [
  348.                     'method' => 'get-scheduled-works',
  349.                     'data' => [
  350.                         'account' => $data['account'],
  351.                         // 'eic'     => '36457',
  352.                 ],
  353.             ];
  354.             $rezult json_decode$this->appApiService->get($data) , true );
  355.             if($rezult['rez']){
  356.                 $rez = [
  357.                     'rezult' => true
  358.                     'message' => $rezult['message'],
  359.                     'works' => $rezult['works'],
  360.                 ];   
  361.             }else{
  362.                 $rez = ['rezult' => false'error' => $rezult['err_msg']];   
  363.             }
  364.         }else{
  365.             $rez = ['rezult' => false'error' => "Не задано поля: $valid"];   
  366.         }
  367.         $response = new JsonResponse();
  368.         $response->setData($rez);
  369.         $this->logHistory->save($logId'get_scheduled_works'$rez);
  370.         return $response;
  371.     }
  372.     /** Низька напруга  { "user": "31", "account": "", "phone":"", "voltage":"", "voltage_susidy": "", "media": "111" } */
  373.     #[Route('/api/set-low-quality-voltage'name'set_low_quality_voltage')]
  374.     public function set_low_quality_voltage(Request $request)
  375.     {
  376.         // echo '<pre>';
  377.         $data json_decode($request->getContent(), true);
  378.         // $data = [
  379.         //     'user' => 31,
  380.         //     'account' => '0900015104',
  381.         //     'phone' => '380xxxxxxxxx',
  382.         //     'voltage' => '123',
  383.         //     'voltage_susidy' => 'Так',
  384.         //     'media' => 2
  385.         //     // 'imageFile' => new CURLFile(realpath(__DIR__) . '/11.png'),
  386.         // ];
  387.         $logId $this->logHistory->save(false'set_low_quality_voltage'$data);
  388.         
  389.         
  390.         $valid $this->valid$data, ['account''user''phone''voltage''voltage_susidy''media'] );
  391.         if( empty($valid) ){
  392.             $isUserData $this->isUserData($data['owner']);
  393.             if( $isUserData['rezult'] ){
  394.                 $find $this->entityManager->getRepository(User::class)->findOneBy(['id' => $data['user']]);
  395.                 if($find){
  396.                     $mediaObject $this->entityManager->getRepository(MediaObject::class)->findOneBy(['id' => $data['media']]);
  397.                     if (!$mediaObject) {
  398.                         return new JsonResponse(['rezult' => false,'error' => 'MediaObject not found'], 404);
  399.                     }
  400.                     // Отримуємо шлях до файлу
  401.                     $filePath $this->kernel->getProjectDir() . '/public' .$mediaObject->getFullPath() ;
  402.                     // echo "<br> $filePath <br>";
  403.                     $permission json_decode$this->appApiService->check_allow_for_low_quality_voltage($data['account']) , true); 
  404.                     if(!$permission['rez'] AND $permission['dozvil'] !== true){
  405.                         // print_r( $permission); die;
  406.                         return new JsonResponse(['rezult' => false,'error' => $permission['err_msg']], 404);
  407.                     }
  408.                     // var_dump( $permission);
  409.                     // die;
  410.                     $data =  [
  411.                         'app_user_id' => $find->getId(),
  412.                         'account' => $data['account'],
  413.                         'phone' => $data['phone'],
  414.                         'voltage' => $data['voltage'],
  415.                         'voltage_susidy' => $data['voltage_susidy'],
  416.                         'imageFile' => new \CURLFile$filePath ),
  417.                     ];
  418.                     $rezult json_decode$this->appApiService->set_low_quality_voltage($data) , true );
  419.                     if($rezult['rez']){
  420.                         $rez = [
  421.                             'rezult' => true
  422.                             'message' => 'Дані відправлено!',
  423.                             // 'account' => $rezult['account'],
  424.                         ];   
  425.                     }else{
  426.                         $rez = ['rezult' => false'error' => $rezult['err_msg']];   
  427.                     }
  428.                 }else{
  429.                     $rez = ['rezult' => false'error' => "Користувача не знайдено!"];   
  430.                 }
  431.             }else{
  432.                 $rez = ['rezult' => false'error' => $isUserData['error']];
  433.             }
  434.         }else{
  435.             $rez = ['rezult' => false'error' => "Не задано поля: $valid"];   
  436.         }
  437.         $response = new JsonResponse();
  438.         $response->setData($rez);
  439.         $this->logHistory->save($logId'set_low_quality_voltage'$rez);
  440.         return $response;
  441.     }
  442.     /** Заявка на сервісне обслуговування  { "user": "31", "account": "", "phone":"", "service_code":"", "description":"", "media": [1,2,3], "pdf": "" } */
  443.     #[Route('/api/service-order'name'service_order')]
  444.     public function service_order(Request $request)
  445.     {
  446.         // echo '<pre>';
  447.         $data json_decode($request->getContent(), true);
  448.         // $data = [
  449.         //     'user' => 31,
  450.         //     'account' => '0900015104',
  451.         //     'phone' => '380xxxxxxxxx',
  452.         //     'service_code' => '9',
  453.         //     'description' => 'Так',
  454.         //     'media' => [4,5,6]
  455.         //     // 'imageFile' => new CURLFile(realpath(__DIR__) . '/11.png'),
  456.         // ];
  457.         $logId $this->logHistory->save(false'service-order'$data);
  458.         if(isset($data['service_code']) AND (  $data['service_code'] == 63  OR $data['service_code'] == 10 OR $data['service_code'] == OR $data['service_code'] == 113 OR $data['service_code'] == 26))
  459.             $valid $this->valid$data, ['account''user''phone''service_code''description''pdf'] );
  460.         else 
  461.             $valid $this->valid$data, ['account''user''phone''service_code''description''media''pdf'] );
  462.         if( empty($valid) ){
  463.             $isUserData $this->isUserData($data['user'], $data['account']);
  464.             if($isUserData['rezult'] ){
  465.              
  466.                 $find $this->entityManager->getRepository(User::class)->findOneBy(['id' => $data['user']]);
  467.                 if($find){
  468.                     if($data['service_code'] != 63 AND $data['service_code'] != 10 AND $data['service_code'] != AND $data['service_code'] != 113 AND $data['service_code'] != 26){
  469.                     // $mediaObject = $this->entityManager->getRepository(MediaObject::class)->findOneBy(['id' => $data['media']]);
  470.                         $mediaObjects $this->entityManager->getRepository(MediaObject::class)->findBy(['id' => $data['media']]);
  471.                         if (!$mediaObjects) {
  472.                             return new JsonResponse(['rezult' => false,'error' => 'MediaObject not found'], 404);
  473.                         }
  474.                     }
  475.                     $pdf = (!empty($data['pdf'])) ? $data['pdf']: false;
  476.                     $data =  [
  477.                         'account' => $data['account'],
  478.                         'app_user_id' => $find->getId(),
  479.                         'phone' => str_replace('+''',  $find->getPhone() ), ///  $data['phone'] присилають декілька номерів тел через кому
  480.                         'service_code' => $data['service_code'],
  481.                         'description' => $data['description'],
  482.                         // 'imageFile' => new \CURLFile( $filePath ),
  483.                     ];
  484.                     $i 1;
  485.                     if($data['service_code'] != 63 AND $data['service_code'] != 10 AND $data['service_code'] != AND $data['service_code'] != 113 AND $data['service_code'] != 26)
  486.                         foreach($mediaObjects as $k => $mediaObject){
  487.                             $i $k 1;
  488.                             $filePath $this->kernel->getProjectDir() . '/public' .$mediaObject->getFullPath() ;
  489.                             $data["imageFile$i"] = new \CURLFile$filePath );
  490.                         }
  491.                     if($pdf){
  492.                         if(isset($data["imageFile$i"]))
  493.                             ++$i;
  494.                         $data["imageFile$i"] = new \CURLFile$this->kernel->getProjectDir() . '/public' $pdf );
  495.                     }
  496.                     // $filePath = $this->kernel->getProjectDir() . '/public' .$mediaObject->getFullPath() ;
  497.                     // echo "<br> $filePath <br>";
  498.                     // $permission = json_decode( $this->appApiService->check_allow_for_low_quality_voltage($data['account']) , true); 
  499.                     // if(!$permission['rez'] AND $permission['dozvil'] !== true){
  500.                     //     // print_r( $permission); die;
  501.                     //     return new JsonResponse(['rezult' => false,'error' => $permission['err_msg']], 404);
  502.                     // }
  503.                     // var_dump( $permission);
  504.                     // die;
  505.                     // $data =  [
  506.                     //     'account' => $data['account'],
  507.                     //     'phone' => $data['phone'],
  508.                     //     'voltage' => $data['voltage'],
  509.                     //     'voltage_susidy' => $data['voltage_susidy'],
  510.                     //     'imageFile' => new \CURLFile( $filePath ),
  511.                     // ];
  512.     /*
  513.     const serviceCodesArr = [
  514.         { service_code: 9, label: "Встановлення зонного лічильника" },
  515.         { service_code: 10, label: "Лічильник не працює" },
  516.         { service_code: 21, label: "Неправильний показ" },
  517.         { service_code: 32, label: "Зміна власника" },
  518.         { service_code: 35, label: "Підключення електроустановок замовника після виконання ТУ" },
  519.         { service_code: 63, label: "Звернення щодо підозри на крадіжку" },
  520.         { service_code: 79, label: "Заміна автоматичного вимикача, який опломбований ОСР" },
  521.         { service_code: 85, label: "Відсутність пломб на засобі обліку" },
  522.         { service_code: 86, label: "Закриття особового рахунку" },
  523.     ];
  524.     */
  525.                     $orderNames = [
  526.                         =>  "Встановлення зонного лічильника",
  527.                         10 =>  "Лічильник не працює",
  528.                         21 =>  "Неправильний показ",
  529.                         32 =>  "Зміна власника",
  530.                         35 =>  "Підключення електроустановок замовника після виконання ТУ",
  531.                         63 =>  "Звернення щодо підозри на крадіжку",
  532.                         79 =>  "Заміна автоматичного вимикача, який опломбований ОСР",
  533.                         85 =>  "Відсутність пломб на засобі обліку",
  534.                         86 =>  "Закриття особового рахунку",
  535.                         113 =>  "Узгодження дати візиту",
  536.                         26 =>  "Відновити живлення після відключення",
  537.                     ];
  538.                     foreach($find->getAppPersonalAccounts() as $acc){
  539.                         if(trim$acc->getNumber() ) == $data['account'])
  540.                             $account $acc;
  541.                     }
  542.                     if($account){
  543.                         $ServiceOrderHistory = new ServiceOrderHistory();
  544.                         $ServiceOrderHistory->setName($orderNames[$data['service_code']]);
  545.                         // $ServiceOrderHistory->setRequest($data);
  546.                         $ServiceOrderHistory->setDateEntered( new \DateTime() );
  547.                         $ServiceOrderHistory->setType($data['service_code']);
  548.                         $ServiceOrderHistory->setDescription($data['description']);
  549.                         $ServiceOrderHistory->setCommentar($data['description']);
  550.                         $ServiceOrderHistory->setStatus('new');
  551.                         $ServiceOrderHistory->setPersonalAccount($account);
  552.                         if($pdf)
  553.                             $ServiceOrderHistory->setPdf(  $pdf );
  554.                         $ServiceOrderHistory->setPersonalAccount($account);
  555.                         $this->entityManager->persist($ServiceOrderHistory);
  556.                         $this->entityManager->flush();
  557.                         $data["id"] = $ServiceOrderHistory->getId();
  558.                     }
  559.                     $rezult json_decode$this->appApiService->service_order($data) , true );
  560.                     if($rezult['rez']){
  561.                         $account false;
  562.                         
  563.                         $rez = [
  564.                             'rezult' => true
  565.                             'message' => 'Дані відправлено!',
  566.                             // 'account' => $rezult['account'],
  567.                         ];   
  568.                     }else{
  569.                         $rez = ['rezult' => false'error' => $rezult['err_msg']];   
  570.                     }
  571.                 }else{
  572.                     $rez = ['rezult' => false'error' => "Користувача не знайдено!"];   
  573.                 }
  574.             }else{
  575.                 $rez = ['rezult' => false'error' => $isUserData['error']];
  576.             }
  577.         }else{
  578.             $rez = ['rezult' => false'error' => "Не задано поля: $valid"];   
  579.         }
  580.         $response = new JsonResponse();
  581.         $response->setData($rez);
  582.         $this->logHistory->save($logId'service-order'$rez);
  583.         return $response;
  584.     }
  585.     /** Обірваний провід { "user": 31, "account": "0900015104", "reason_type": "brok", "phone": "380xxxxxxxxx", "address": "Тернопільська 75", "lat": "50.067404", "lon": "25.171442", "media": 111 } */
  586.     #[Route('/api/set-broken-lines'name'set_broken_lines')]
  587.     public function set_broken_lines(Request $request)
  588.     {
  589.         // echo '<pre>';
  590.         $data json_decode($request->getContent(), true);
  591.         // $data = [
  592.         //     'user' => 31,
  593.         //     'account' => '0900015104',
  594.         //     'phone' => '380xxxxxxxxx',
  595.         //     'voltage' => '123',
  596.         //     'voltage_susidy' => 'Так',
  597.         //     'media' => 2,
  598.         //     'lat' => '1111',
  599.         //     'lon' => '2222',
  600.         //     'reason_type' => '22',
  601.         //     'address' => '222',
  602.         //     // 'imageFile' => new CURLFile(realpath(__DIR__) . '/11.png'),
  603.         // ];
  604.         $logId $this->logHistory->save(false'set_broken_lines'$data);
  605.         
  606.         
  607.         $valid $this->valid$data, ['reason_type''user''phone''address''lat''lon'] );
  608.         if( empty($valid) ){
  609.             $isUserData $this->isUserData($data['user'], $data['account']);
  610.             if($isUserData['rezult'] ){
  611.                 $find $this->entityManager->getRepository(User::class)->findOneBy(['id' => $data['user']]);
  612.                 if($find){
  613.                     if(isset($data['media'])){
  614.                         $mediaObject $this->entityManager->getRepository(MediaObject::class)->findOneBy(['id' => $data['media']]);
  615.                         if (!$mediaObject) {
  616.                             return new JsonResponse(['rezult' => false,'error' => 'MediaObject not found'], 404);
  617.                         }
  618.                         // Отримуємо шлях до файлу
  619.                         $filePath $this->kernel->getProjectDir() . '/public' .$mediaObject->getFullPath() ;
  620.                     }
  621.                     // echo "<br> $filePath <br>";
  622.                     $permission json_decode$this->appApiService->check_allow_for_low_quality_voltage($data['account']) , true); 
  623.                     if(!$permission['rez'] AND $permission['dozvil'] !== true){
  624.                         // print_r( $permission); die;
  625.                         return new JsonResponse(['rezult' => false,'error' => $permission['err_msg']], 404);
  626.                     }
  627.                     // var_dump( $permission);
  628.                     // die;
  629.                     $data =  [
  630.                         'phone' => $data['phone'],
  631.                         'app_user_id' => $find->getId(),
  632.                         'reason_type' => $data['reason_type'],
  633.                         'address' => $data['address'],
  634.                         'lat' => $data['lat'],
  635.                         'lon' => $data['lon'],
  636.                         // 'imageFile' => new \CURLFile( $filePath ),
  637.                     ];
  638.                     if(isset($filePath))
  639.                         $data['imageFile'] = new \CURLFile$filePath );
  640.                     $rezult json_decode$this->appApiService->set_broken_lines($data) , true );
  641.                     
  642.                     if($rezult['rez']){
  643.                         // foreach($find->getAppPersonalAccounts() as $acc){
  644.                         //     if($acc->getNumber() == $data['account'])
  645.                         //         $account = $acc;
  646.                         // }
  647.                         // if($account){
  648.                         //     $ServiceOrderHistory = new ServiceOrderHistory();
  649.                         //     $ServiceOrderHistory->setName('set-broken-lines');
  650.                         //     $ServiceOrderHistory->setDateEntered( new \DateTime() );
  651.                         //     $ServiceOrderHistory->setType('set-broken-lines');
  652.                         //     $ServiceOrderHistory->setStatus('new');
  653.                         //     $ServiceOrderHistory->setPersonalAccount($account);
  654.                         //     $this->entityManager->persist($ServiceOrderHistory);
  655.                         //     $this->entityManager->flush();
  656.                         // }
  657.                         $rez = [
  658.                             'rezult' => true
  659.                             'message' => 'Дані відправлено!',
  660.                             // 'account' => $rezult['account'],
  661.                         ];   
  662.                     }else{
  663.                         $rez = ['rezult' => false'error' => $rezult['err_msg']];   
  664.                     }
  665.                 }else{
  666.                     $rez = ['rezult' => false'error' => "Користувача не знайдено!"];   
  667.                 }
  668.             }else{
  669.                 $rez = ['rezult' => false'error' => $isUserData['error']];
  670.             }
  671.         }else{
  672.             $rez = ['rezult' => false'error' => "Не задано поля: $valid"];   
  673.         }
  674.         $response = new JsonResponse();
  675.         $response->setData($rez);
  676.         $this->logHistory->save($logId'set_broken_lines'$rez);
  677.         return $response;
  678.     }
  679.     /** Отримати останній показник {} */
  680.     #[Route('/api/get-last-meter-readings'name'get_last_meter_readings')]
  681.     public function get_last_meter_readings(Request $request)
  682.     {
  683.         // echo '<pre>';
  684.         $data json_decode($request->getContent(), true);
  685.         // $data = [
  686.         //     'user' => 31,
  687.         //     'account' => '0900015104',
  688.         // ];
  689.         $logId $this->logHistory->save(false'get_last_meter_readings'$data);
  690.         
  691.         
  692.         $valid $this->valid$data, ['account''user'] );
  693.         if( empty($valid) ){
  694.             $isUserData $this->isUserData($data['user'], $data['account']);
  695.             if( $isUserData['rezult'] ){
  696.            
  697.                 $data = [
  698.                     'method' => 'get-last-meter-readings',
  699.                     'data' => [
  700.                         'account' => $data['account'],
  701.                     ],
  702.                 ]; 
  703.                 $rezult json_decode$this->appApiService->get($data) , true );
  704.                 if($rezult['rez']){
  705.                     $rez = [
  706.                         'rezult' => true
  707.                         'date_on' => $rezult['date_on'],
  708.                         'reading1' => $rezult['reading1'],
  709.                         'reading2' => $rezult['reading2'],
  710.                         'reading3' => $rezult['reading3'],
  711.                         // 'account' => $rezult['account'],
  712.                     ];   
  713.                 }else{
  714.                     $rez = ['rezult' => false'error' => $rezult['err_msg']];   
  715.                 }
  716.             }else{
  717.                 $rez = ['rezult' => false'error' => $isUserData['error']];   
  718.             }
  719.         }else{
  720.             $rez = ['rezult' => false'error' => "Не задано поля: $valid"];   
  721.         }
  722.         $response = new JsonResponse();
  723.         $response->setData($rez);
  724.         $this->logHistory->save($logId'get_last_meter_readings'$rez);
  725.         return $response;
  726.     }
  727.         /** Отримати Історію показників лічильника {} */
  728.     #[Route('/api/get-meter-readings-history'name'get_meter_readings_history')]
  729.     public function get_meter_readings_history(Request $request)
  730.     {
  731.         file_put_contents('/var/www/symfony_docker/var/log/log.txt'date('Y-m-d H:i:s') . "get_meter_readings_history: " $request->getContent() . "\n"FILE_APPEND);
  732.         // echo '<pre>';
  733.         $data json_decode($request->getContent(), true);
  734.         // $data = [
  735.         //     'user' => 31,
  736.         //     'account' => '0900015104',
  737.         // ];
  738.         $logId $this->logHistory->save(false'get_meter_readings_history'$data);
  739.         
  740.         
  741.         $valid $this->valid$data, ['account''user'] );
  742.         if( empty($valid) ){
  743.             $isUserData $this->isUserData($data['user'], $data['account']);
  744.             file_put_contents('/var/www/symfony_docker/var/log/log.txt'date('Y-m-d H:i:s') . "1111\n"FILE_APPEND);
  745.             if( $isUserData['rezult'] ){
  746.                 $accountNumber $data['account'];
  747.                 $data = [
  748.                     'method' => 'get-meter-readings-history',
  749.                     'data' => [
  750.                         'account' => $data['account'],
  751.                     ],
  752.                 ]; 
  753.                 file_put_contents('/var/www/symfony_docker/var/log/log.txt'date('Y-m-d H:i:s') . "22222\n"FILE_APPEND);
  754.                 $rezult json_decode$this->appApiService->get($data) , true );
  755.                 file_put_contents('/var/www/symfony_docker/var/log/log.txt'date('Y-m-d H:i:s') . "33333\n"FILE_APPEND);
  756.                 if($rezult['rez'] AND isset($rezult['data']) ){
  757.                     $user $this->security->getUser();
  758.                     $rez json_decode($rezult['data'], true);  
  759.                     $lastAnswerDate = new \DateTime( );
  760.                     file_put_contents('/var/www/symfony_docker/var/log/log.txt'date('Y-m-d H:i:s') . "4444444\n"FILE_APPEND);
  761.                     foreach($user->getAppPersonalAccounts() as $acc){
  762.                         if( $acc->getNumber() == $accountNumber){ 
  763.                             if(!empty($rez)){
  764.                                 $acc->setLastHistoryCounterDate( new \DateTime() );
  765.                                 $acc->setLastHistoryCounter$rez);
  766.                             }else{
  767.                                 $rez $acc->getLastHistoryCounter();
  768.                                 $lastAnswerDate $acc->getLastHistoryCounterDate();
  769.                                 if(empty($rez)){
  770.                                     $rez = [];
  771.                                     $lastAnswerDate = new \DateTime( );
  772.                                 }
  773.                             }
  774.                             // $acc->setLastHistoryCounter()
  775.                         }
  776.                     }
  777.                     file_put_contents('/var/www/symfony_docker/var/log/log.txt'date('Y-m-d H:i:s') . "555555\n"FILE_APPEND);
  778.                     
  779.                     $rez = [
  780.                         'rezult' => true
  781.                         'data' => $rez,
  782.                         'lastAnswerDate' => $lastAnswerDate->format('Y-m-d H:i:s'),
  783.                     ]; 
  784.                 }else{
  785.                     $rez = ['rezult' => false'error' => $rezult['err_msg']];   
  786.                 }
  787.             }else{
  788.                 $rez = ['rezult' => false'error' => $isUserData['error']];   
  789.             }
  790.         }else{
  791.             $rez = ['rezult' => false'error' => "Не задано поля: $valid"];   
  792.         }
  793.         file_put_contents('/var/www/symfony_docker/var/log/log.txt'date('Y-m-d H:i:s') . "666666\n"FILE_APPEND);
  794.         $response = new JsonResponse();
  795.         $response->setData($rez);
  796.         $this->logHistory->save($logId'get_meter_readings_history'$rez);
  797.         file_put_contents('/var/www/symfony_docker/var/log/log.txt'date('Y-m-d H:i:s') . "77777\n"FILE_APPEND);
  798.         return $response;
  799.     }
  800.     #[Route('/api/cron-set-meter-readings'name'cron_set_meter_readings')]
  801.     public function cron_set_meter_readings(Request $request)
  802.     {
  803.         $AppCounterReading $this->entityManager->getRepository(AppCounterReading::class)->findBy(['status' => 'new']);
  804.         if(count($AppCounterReading) > 0){
  805.             $Ids array_map(fn($n) => $n->getId(), $AppCounterReading);
  806.             // Масове оновлення статусу та дати
  807.             $this->entityManager->createQuery(
  808.                 'UPDATE App\Entity\AppCounterReading n
  809.                 SET n.status = :newStatus, 
  810.                     n.date_send = :now 
  811.                 WHERE n.id IN (:ids)'
  812.             )
  813.             ->setParameter('newStatus''in_progress')
  814.             ->setParameter('now', new \DateTime())
  815.             ->setParameter('ids'$Ids)
  816.             ->execute();
  817.         }
  818.         $i 0;
  819.         foreach($AppCounterReading as $counterReding){
  820.             $p =  $counterReding->getPersonal()->getOwner()->getPhone();
  821.             $p str_replace('+'''$p);
  822.             $data =  [
  823.                 'method' => 'set-meter-readings',
  824.                 'data' => [
  825.                     'phone' => $p,
  826.                     'app_user_id' => $counterReding->getPersonal()->getOwner()->getId(),
  827.                     'account' => trim($counterReding->getPersonal()->getNumber()),
  828.                     'number_of_scale' => $counterReding->getPersonal()->getNumberOfScale(),
  829.                     'reading1' => $counterReding->getValue(),
  830.                     'reading2' => $counterReding->getValue2(),
  831.                     'reading3' => $counterReding->getValue3(),
  832.                 ]
  833.             ];
  834.             $rezult json_decode$this->appApiService->get($data) , true );
  835.             if($rezult['rez']){
  836.                 $counterReding->setDateSend(new \DateTime());
  837.                 $counterReding->setStatus('complate');
  838.                 $this->entityManager->persist($counterReding);
  839.                 $this->entityManager->flush();
  840.                 $i++;  
  841.             }else{
  842.                 $rez = ['rezult' => false'error' => $rezult['err_msg']];   
  843.                 $counterReding->setStatus('error');
  844.                 $counterReding->setDescription($rezult['err_msg']);
  845.                 $this->entityManager->persist($counterReding);
  846.                 $this->entityManager->flush();
  847.             }
  848.         }
  849.        
  850.        
  851.        
  852.        
  853.         $rez = ['count' => count($AppCounterReading)];
  854.         $response = new JsonResponse();
  855.         $response->setData($rez);
  856.         return $response;
  857.     }
  858.     /** Відправка показників лічильника { "user": "31", "account":"0900015104", "number_of_scale":"3", "reading1":"1234", "reading2":"0", "reading3":"0" } */   
  859.     #[Route('/api/set-meter-readings'name'set_meter_readings')]
  860.     public function set_meter_readings(Request $request)
  861.     {
  862.    
  863.         $data json_decode($request->getContent(), true);
  864.         $logId $this->logHistory->save(false'set_meter_readings'$data);
  865.         
  866.         
  867.         $valid $this->valid$data, ['account''user''number_of_scale''reading1''reading2''reading3'] );
  868.         if( empty($valid)  ){
  869.             $isUserData $this->isUserData($data['user'], $data['account']);
  870.             if( $isUserData['rezult'] ){
  871.                 $find $this->entityManager->getRepository(User::class)->findOneBy(['id' => $data['user']]);
  872.                 if($find){
  873.                     $data =  [
  874.                         'method' => 'set-meter-readings',
  875.                         'data' => [
  876.                             'phone' => $find->getPhone(),
  877.                             'app_user_id' => $find->getId(),
  878.                             'account' => $data['account'],
  879.                             'number_of_scale' => $data['number_of_scale'],
  880.                             'reading1' => $data['reading1'],
  881.                             'reading2' => $data['reading2'],
  882.                             'reading3' => $data['reading3'],
  883.                         ]
  884.                     ];
  885.                     $rezult json_decode$this->appApiService->get($data) , true );
  886.                     if($rezult['rez']){
  887.                         $rez = [
  888.                             'rezult' => true
  889.                             'message' => 'Дані відправлено!',
  890.                         ];   
  891.                     }else{
  892.                         $rez = ['rezult' => false'error' => $rezult['err_msg']];   
  893.                     }
  894.                 }else{
  895.                     $rez = ['rezult' => false'error' => 'Користувача не знайдено!'];   
  896.                 }
  897.             }else{
  898.                 $rez = ['rezult' => false'error' => $isUserData['error']];
  899.             }
  900.         }else{
  901.             $rez = ['rezult' => false'error' => "Не задано поля: $valid"];   
  902.         }
  903.         $response = new JsonResponse();
  904.         $response->setData($rez);
  905.         $this->logHistory->save($logId'set_meter_readings'$rez);
  906.         return $response;
  907.     }
  908.     /** Заявка на відновлення електропостачання { "user": 31, "account": "0900015104", "eic": "36457", "dno_id": "1", "when_off": "2024-08-01 14:30", "pib": "Іваненко Іван Іванович", "phone": "380xxxxxxxxx", "eic_count": "1" } */
  909.     #[Route('/api/set-no-light-request'name'set_no_light_request')]
  910.     public function set_no_light_request(Request $request)
  911.     {
  912.         // echo '<pre>';
  913.         $data json_decode($request->getContent(), true);
  914.         // $data = [
  915.         //     'user' => 31,
  916.         //     'account' => '0900015104',
  917.         //     'phone' => '380xxxxxxxxx',
  918.         //     'voltage' => '123',
  919.         //     'voltage_susidy' => 'Так',
  920.         //     'media' => 2
  921.         //     // 'imageFile' => new CURLFile(realpath(__DIR__) . '/11.png'),
  922.         // ];
  923.         $logId $this->logHistory->save(false'set_no_light_request'$data);
  924.         
  925.         
  926.         $valid $this->valid$data, ['account''eic''user''dno_id''when_off''pib''phone''eic_count'] );
  927.         if( empty($valid) ){
  928.             $isUserData $this->isUserData($data['user'], $data['account']);
  929.             if( $isUserData['rezult'] ){
  930.                 $find $this->entityManager->getRepository(User::class)->findOneBy(['id' => $data['user']]);
  931.                 $accountNumber trim($data['account']);
  932.                 $account false;
  933.                 if($find){
  934.                     $permission json_decode$this->appApiService->check_last_register_no_power($data['account']) , true); 
  935.                 
  936.                     if(!$permission['rez'] AND $permission['dozvil'] !== true){
  937.                         // print_r( $permission); die;
  938.                         return new JsonResponse(['rezult' => false,'error' => $permission['err_msg']], 404);
  939.                     }
  940.                     // var_dump( $permission);
  941.                     // die;
  942.                     $data =  [
  943.                         'method' => 'set-no-light-request',
  944.                         'data' => [
  945.                             'account' => $accountNumber,
  946.                             'app_user_id' => $find->getId(),
  947.                             'eic' => $data['eic'],
  948.                             'dno_id' => $data['dno_id'],
  949.                             'when_off' => $data['when_off'],
  950.                             'pib' => $data['pib'],
  951.                             'phone' => $data['phone'],
  952.                             'eic_count' => $data['eic_count'],
  953.                         ],
  954.                     ];
  955.                     
  956.                     $rezult json_decode$this->appApiService->get($data) , true );
  957.                     if(isset($rezult['rez']) AND $rezult['rez']){
  958.                         foreach($find->getAppPersonalAccounts() as $acc){
  959.                             if(trim$acc->getNumber() ) == $accountNumber)
  960.                                 $account $acc;
  961.                         }
  962.                         if($account){
  963.                             $ServiceOrderHistory = new ServiceOrderHistory();
  964.                             $ServiceOrderHistory->setName('Заявка про відсутність електроенерії');
  965.                             $ServiceOrderHistory->setDateEntered( new \DateTime() );
  966.                             $ServiceOrderHistory->setType('set-no-light-request');
  967.                             $ServiceOrderHistory->setStatus('new');
  968.                             $ServiceOrderHistory->setPersonalAccount($account);
  969.                             $this->entityManager->persist($ServiceOrderHistory);
  970.                             $this->entityManager->flush();
  971.                         }
  972.                         $rez = [
  973.                             'rezult' => true
  974.                             'message' => 'Дані відправлено!',
  975.                             // 'account' => $rezult['account'],
  976.                         ];   
  977.                     }else{
  978.                         $rez = ['rezult' => false'error' => $rezult['err_msg']];   
  979.                     }
  980.                 }else{
  981.                     $rez = ['rezult' => false'error' => 'Користувача не знайдено!'];   
  982.                 }
  983.             }else{  
  984.                 $rez = ['rezult' => false'error' => $isUserData['error']];
  985.             }
  986.         }else{
  987.             $rez = ['rezult' => false'error' => "Не задано поля: $valid"];   
  988.         }
  989.         $response = new JsonResponse();
  990.         $response->setData($rez);
  991.         $this->logHistory->save($logId'set_no_light_request'$rez);
  992.         return $response;
  993.     }
  994.     /** Отримати всі акаунти по номеру телефону { "phone": "380xxxxxxxxx", "bot_type": "telegram" } */
  995.     #[Route('/api/get-all-accounts-by-phone'name'get_all_accounts_by_phone')]
  996.     public function get_all_accounts_by_phone(Request $request)
  997.     {
  998.         $data json_decode($request->getContent(), true);
  999.       
  1000.         $logId $this->logHistory->save(false'get_all_accounts_by_phone'$data);
  1001.         
  1002.         
  1003.         $valid $this->valid$data, ['phone''bot_type'] );
  1004.         if( empty($valid) ){
  1005.             $user $this->security->getUser();
  1006.             if($user and $user->getPhone() == $data['phone']){
  1007.                 // ok
  1008.             
  1009.                 $data =  [
  1010.                     'method' => 'get-all-accounts-by-phone',
  1011.                     'data' => [
  1012.                         'phone' => $data['phone'],
  1013.                         'bot_type' => $data['bot_type'],
  1014.                     ],
  1015.                 ];
  1016.                 $rezult json_decode$this->appApiService->get($data) , true );
  1017.                 
  1018.                 if($rezult['rez']){
  1019.                     $rez = [
  1020.                         'rezult' => true
  1021.                         'accounts' => $rezult['accounts']
  1022.                     ];   
  1023.                 }else{
  1024.                     $rez = ['rezult' => false'error' => $rezult['err_msg']];   
  1025.                 }
  1026.             }else{
  1027.                 $rez = ['rezult' => false'error' => "Користувача не знайдено або номер телефону не співпадає!"];   
  1028.             }
  1029.             
  1030.         }else{
  1031.             $rez = ['rezult' => false'error' => "Не задано поля: $valid"];   
  1032.         }
  1033.         $response = new JsonResponse();
  1034.         $response->setData($rez);
  1035.         $this->logHistory->save($logId'get_all_accounts_by_phone'$rez);
  1036.         return $response;
  1037.     }
  1038.     /** Створення особового рахунку юридичної особи { "eic": "36457", "edrpou": "12345678", "name": "ТОВ Ромашка", "owner": "31" } */
  1039.     #[Route('/api/yur-create-personal-account'name'yurCreatePersonalAccount')]
  1040.     public function yurCreatePersonalAccount(Request $request)
  1041.     {
  1042.         $data json_decode($request->getContent(), true);
  1043.         $logId $this->logHistory->save(false'yurCreatePersonalAccount'$data);
  1044.         $valid $this->valid$data, ['eic''edrpou''name''owner'] );
  1045.         if( empty($valid) ){
  1046.             $isUserData $this->isUserData($data['owner'], false);
  1047.                 if( $isUserData['rezult'] ){
  1048.                 $find $this->entityManager->getRepository(User::class)->findOneBy(['id' => $data['owner']]);
  1049.                 if($find){
  1050.                     $data = ['eic' => $data['eic'], 'app_user_id' => $find->getId(), 'edrpou' => $data['edrpou'],'name' => $data['name']];                    
  1051.                     $res json_decode$this->appApiService->YurCheckPersonalAccount($data) , true );
  1052.                     $name = (!empty($data['name'])) ? $data['name'] : $data['eic'];
  1053.                     if(isset($res['rez']) AND $res['rez']  AND $res['correct_data']){
  1054.                         $personal = new AppPersonalAccount();
  1055.                         $personal->setOwner($find);
  1056.                         $personal->setNumber(trim$data['eic'] ));
  1057.                         $personal->setName($name);
  1058.                         $personal->setNumberOfScale(0);
  1059.                         $personal->setActive(true);
  1060.                         $personal->setIsMain(true);
  1061.                         $personal->setDateEntered($this->datetime);
  1062.                         $personal->setType('factory');
  1063.                         $personal->setEic($data['eic']);
  1064.                         $personal->setNotificationStatus('disabled');
  1065.                         $this->entityManager->persist($personal);
  1066.                         $this->entityManager->flush();
  1067.                         foreach($res['data'] as $res_data){
  1068.                             $accounts $this->entityManager->getRepository(Accounts::class)->findOneBy(['number' => $res_data['acc'], 'eic' => $res_data['eic_kod']]);
  1069.                             if(!$accounts){
  1070.                                 $accounts = new Accounts();
  1071.                                 $accounts->setNumber(trim$res_data['acc'] ));
  1072.                                 $accounts->setEic($res_data['eic_kod']);
  1073.                                 $accounts->setEicParent($res_data['eic_kod_place']);
  1074.                                 $this->entityManager->persist($accounts);
  1075.                                 $this->entityManager->flush();
  1076.                             }
  1077.                             $personalChild = new AppPersonalAccount();
  1078.                             $personalChild->setOwner($find);
  1079.                             $personalChild->setNumber(trim$res_data['acc'] ));
  1080.                             $personalChild->setName($res_data['name']);
  1081.                             $personalChild->setCounter($res_data['counter']);
  1082.                             $personalChild->setNumberOfScale(0);
  1083.                             $personalChild->setActive(true);
  1084.                             $personalChild->setIsMain(false);
  1085.                             $personalChild->setIsShow(true);
  1086.                             $personalChild->setDateEntered($this->datetime);
  1087.                             $personalChild->setType('factory');
  1088.                             $personalChild->setEic($res_data['eic_kod']);
  1089.                             $personalChild->setParent($personal);
  1090.                             $fullAdresses $res_data['city_name'] . ' ' $res_data['street_name'] . ' ' $res_data['building_name'];
  1091.                             $personalChild->setFullAddress($fullAdresses);
  1092.                             $personalChild->setCity($res_data['city_name']);
  1093.                             $personalChild->setStreet($res_data['street_name']);
  1094.                             $personalChild->setBuilding($res_data['building_name']);
  1095.                             $personalChild->setMainFullAddress($fullAdresses);
  1096.                             $personalChild->setNotificationStatus('active');
  1097.                             $this->entityManager->persist($personalChild);
  1098.                             $this->entityManager->flush();
  1099.                         }
  1100.                         
  1101.                         $rez = [
  1102.                             'registered' => true,
  1103.                             'id' => $personal->getId(),
  1104.                             
  1105.                         ];
  1106.                     }else{
  1107.                         $rez = ['registered' => false$res];
  1108.                     }
  1109.                 }else{
  1110.                     $rez = ['registered' => false];
  1111.                 }
  1112.             }else{
  1113.                 $rez = ['registered' => false'error' => $isUserData['error']];
  1114.             }
  1115.         }else{
  1116.             $rez = ['registered' => false'error' => "Не задано поля: $valid"];
  1117.         }
  1118.         
  1119.         
  1120.     
  1121.         $response = new JsonResponse();
  1122.         $response->setData($rez);
  1123.         $this->logHistory->save($logId'yurCreatePersonalAccount'$rez);
  1124.         return $response;
  1125.     }
  1126.     #[Route('/api/service_order_histories/last'name'service_order_history_last'methods: ['GET'])]
  1127.     public function getLastByFilter(
  1128.         Request $request,
  1129.         ServiceOrderHistoryRepository $repository,
  1130.         SerializerInterface $serializer,
  1131.     ): JsonResponse {
  1132.         $type   $request->query->get('type');
  1133.         $number $request->query->get('number');
  1134.         if (!$type || !$number) {
  1135.             return new JsonResponse([
  1136.                 'error' => 'Parameters "type" and "number" are required',
  1137.             ], 400);
  1138.         }
  1139.         $qb $repository->createQueryBuilder('h')
  1140.             ->leftJoin('h.personalAccount''pa')
  1141.             ->andWhere('h.type = :type')
  1142.             ->andWhere('pa.number = :number'// ⚠️ якщо інше поле — зміни тут
  1143.             ->setParameter('type'$type)
  1144.             ->setParameter('number'$number)
  1145.             ->orderBy('h.dateEntered''DESC')
  1146.             ->setMaxResults(1);
  1147.         $result $qb->getQuery()->getOneOrNullResult();
  1148.         if (!$result) {
  1149.             return new JsonResponse([], 200);
  1150.         }
  1151.         return new JsonResponse(
  1152.             $serializer->serialize(
  1153.                 $result,
  1154.                 'json',
  1155.                 ['groups' => ['service_history:read']]
  1156.             ),
  1157.             200,
  1158.             [],
  1159.             true
  1160.         );
  1161.     }
  1162.     #[Route('/api/pw_cities'name'pw_cities'methods: ['GET'])]
  1163.     public function pw_cities(
  1164.         Request $request
  1165.     ): JsonResponse {
  1166.         $request $request->query->all();
  1167.         $result $this->powerOn->sendCurl($request'/api/pw_cities');
  1168.         return new JsonResponse(
  1169.             $result,
  1170.             200,
  1171.             [],
  1172.             true
  1173.         );
  1174.     }
  1175.     #[Route('/api/pw_otgs'name'pw_otgs'methods: ['GET'])]
  1176.     public function pw_otgs(
  1177.         Request $request
  1178.     ): JsonResponse {
  1179.         $request $request->query->all();
  1180.         // echo '<pre>';
  1181.         // print_r($request);
  1182.         // die;
  1183.         $result $this->powerOn->sendCurl($request'/api/pw_otgs');
  1184.         return new JsonResponse(
  1185.             $result,
  1186.             200,
  1187.             [],
  1188.             true
  1189.         );
  1190.     }
  1191.     /**
  1192.      * pagination:false
  1193.      * city.id: 851
  1194.      */
  1195.     #[Route('/api/pw_streets'name'pw_streets'methods: ['GET'])]
  1196.     public function pw_streets(
  1197.         Request $request
  1198.     ): JsonResponse {
  1199.         $request $request->query->all();
  1200.         
  1201.         $result $this->powerOn->sendCurl($request'/api/pw_streets');
  1202.         return new JsonResponse(
  1203.             $result,
  1204.             200,
  1205.             [],
  1206.             true
  1207.         );
  1208.     }
  1209.     /** 
  1210.      * pagination: false
  1211.      * city.id: 851
  1212.      * street.id: 7815
  1213.      * 
  1214.      */
  1215.     #[Route('/api/pw_accounts'name'pw_accounts'methods: ['GET'])]
  1216.     public function pw_accounts(
  1217.         Request $request
  1218.     ): JsonResponse {
  1219.         $request $request->query->all();
  1220.         $result $this->powerOn->sendCurl($request'/api/pw_accounts');
  1221.         return new JsonResponse(
  1222.             $result,
  1223.             200,
  1224.             [],
  1225.             true
  1226.         );
  1227.     }
  1228.     // #[Route('/api/pw_accounts', name: 'pw_accounts', methods: ['GET'])]
  1229.     // public function pw_accounts(
  1230.     //     Request $request
  1231.     // ): JsonResponse {
  1232.     //     // /api/pw_accounts_all_data
  1233.     //     $request = $request->query->all();
  1234.     //     $result = $this->powerOn->sendCurl($request, '/api/pw_accounts');
  1235.     //     return new JsonResponse(
  1236.     //         $result,
  1237.     //         200,
  1238.     //         [],
  1239.     //         true
  1240.     //     );
  1241.     // }
  1242.     #[Route('/api/create-personal-account-address'name'createPersonalAccountAddress')]
  1243.     public function createPersonalAccountAddress(Request $request)
  1244.     {
  1245.         // 473629
  1246.         $data json_decode($request->getContent(), true);
  1247.         $logId $this->logHistory->save(false'create-personal-account-address'$data);
  1248.         $valid $this->valid$data, ['account',  'owner''full_address'] ); 
  1249.         if( empty($valid) ){
  1250.             $isUserData $this->isUserData($data['owner']);
  1251.             if( $isUserData['rezult'] ){
  1252.                 $find $this->entityManager->getRepository(User::class)->findOneBy(['id' => $data['owner']]);
  1253.                 if($find){
  1254.                     $number trim$data['account'] );
  1255.                     $name =  isset($data['name']) ? trim$data['name'] ) : '';
  1256.                         $d = [
  1257.                             'account' => $number
  1258.                         ];
  1259.                         $res json_decode$this->powerOn->sendPost($d'/api/pw_accounts_all_data') , true );  
  1260.                         if(isset($res['res']) AND $res['res']){
  1261.                             if(isset($res['data'])){
  1262.                                 $personal $this->entityManager->getRepository(AppPersonalAccount::class)->findOneBy(['number' => $res['data']['acc'], 'owner' => $find]);
  1263.                                 if(!$personal){
  1264.                                     
  1265.                                     $name = (!empty($name)) ? $name $number;
  1266.                                     $accounts $this->entityManager->getRepository(Accounts::class)->findOneBy(['number' => $res['data']['acc']]);
  1267.                                     if(!$accounts){
  1268.                                         $accounts = new Accounts();
  1269.                                         $accounts->setNumber($res['data']['acc']);
  1270.                                         $accounts->setEic($res['data']['eicKod']);
  1271.                                         $this->entityManager->persist($accounts);
  1272.                                         $this->entityManager->flush();
  1273.                                     }
  1274.                                     $personal = new AppPersonalAccount();
  1275.                                     $personal->setOwner($find);
  1276.                                     $personal->setNumber($res['data']['acc']);
  1277.                                     $personal->setName($name);
  1278.                                     $personal->setActive(true);
  1279.                                     $personal->setIsMain(true);
  1280.                                     $personal->setFullAddress($data['full_address']);
  1281.                                     $personal->setCity($res['data']['city']);
  1282.                                     $personal->setStreet($res['data']['street']);
  1283.                                     $personal->setBuilding($res['data']['buildingName']);
  1284.                                     $personal->setMainFullAddress($data['full_address']);
  1285.                                     $personal->setEic($res['data']['eicKod']);
  1286.                                     $personal->setDateEntered($this->datetime);
  1287.                                     $personal->setType('address');
  1288.                                     $personal->setAccounts($accounts);
  1289.                                     $personal->setNotificationStatus('active');
  1290.                                     $this->entityManager->persist($personal);
  1291.                                     $this->entityManager->flush();
  1292.                                      $rez = [
  1293.                                         'registered' => true,
  1294.                                         'id' => $personal->getId(),
  1295.                                         'full_address' => $personal->getFullAddress()
  1296.                                     ];
  1297.                                 }else{
  1298.                                     $rez = [
  1299.                                         'registered' => false,
  1300.                                         'error' => 'Особовий рахунок вже існує!'
  1301.                                     ];
  1302.                                 }
  1303.                             }else{
  1304.                                 $rez = ['registered' => false'error' => "Не знайдено даних по адресі!"];
  1305.                             }
  1306.                             
  1307.                         }else{
  1308.                             $rez = ['registered' => false'error' => "Нема відповіді сервера!"];
  1309.                         }
  1310.                     
  1311.                 }else{
  1312.                     $rez = ['registered' => false];
  1313.                 }
  1314.                 
  1315.             }else{
  1316.                 $rez = ['registered' => false'error' => $isUserData['error']];
  1317.             }
  1318.         }else{
  1319.             $rez = ['registered' => false'error' => "Не задано поля: $valid"];
  1320.         }
  1321.         $response = new JsonResponse();
  1322.         $response->setData($rez);
  1323.         $this->logHistory->save($logId'create-personal-account-address'$rez);
  1324.         return $response;
  1325.     }
  1326.     
  1327. }