src/ApplicationBundle/Controller/PublicPagesController.php line 3484

Open in your IDE?
  1. <?php
  2. namespace ApplicationBundle\Controller;
  3. use ApplicationBundle\Constants\EmployeeConstant;
  4. use ApplicationBundle\Constants\GeneralConstant;
  5. use ApplicationBundle\Constants\HumanResourceConstant;
  6. use ApplicationBundle\Entity\ApplicantDetails;
  7. use ApplicationBundle\Entity\Employee;
  8. use ApplicationBundle\Entity\EmployeeDetails;
  9. use ApplicationBundle\Entity\SysDepartment;
  10. use ApplicationBundle\Entity\SysUser;
  11. use ApplicationBundle\Helper\EmployeePayloadNormalizer;
  12. use ApplicationBundle\Interfaces\LoginInterface;
  13. use ApplicationBundle\Modules\Authentication\Constants\UserConstants; use ApplicationBundle\Modules\Api\Constants\ApiConstants;
  14. use ApplicationBundle\Modules\Accounts\Accounts;
  15. use ApplicationBundle\Modules\HumanResource\HumanResource;
  16. use ApplicationBundle\Modules\Inventory\Inventory;
  17. use ApplicationBundle\Modules\System\MiscActions;
  18. use ApplicationBundle\Modules\Sales\SalesOrderM;
  19. use ApplicationBundle\Modules\System\System;
  20. use ApplicationBundle\Modules\User\Company;
  21. use ApplicationBundle\Modules\User\Position;
  22. use ApplicationBundle\Modules\User\Users;
  23. use CompanyGroupBundle\Entity\EmsSite;
  24. use CompanyGroupBundle\Entity\EntityApplicantDetails;
  25. use CompanyGroupBundle\Modules\UserEntity\EntityUserM;
  26. use Endroid\QrCode\Builder\BuilderInterface;
  27. use Endroid\QrCodeBundle\Response\QrCodeResponse;
  28. use Google_Client;
  29. use Google_Service_Oauth2;
  30. use Symfony\Component\HttpFoundation\JsonResponse;
  31. use Symfony\Component\HttpFoundation\Request;
  32. use Symfony\Component\HttpFoundation\Response;
  33. use Symfony\Component\Routing\Generator\UrlGenerator;
  34. // honeyBee web routing controller
  35. class PublicPagesController extends GenericController implements LoginInterface
  36. {
  37.     // HoneybeeWeb upto this
  38.     public function GetApplicantDataForErpAction(Request $request)
  39.     {
  40.         $applicantId $request->request->get('applicantId');
  41.         if (!$applicantId) {
  42.             return new JsonResponse([
  43.                 'status' => 'error',
  44.                 'message' => 'Missing applicantId in request.'
  45.             ]);
  46.         }
  47.         $em_goc $this->getDoctrine()->getManager('company_group');
  48.         $entityApplicant $em_goc->getRepository("CompanyGroupBundle\\Entity\\EntityApplicantDetails")
  49.             ->findOneBy(['applicantId' => $applicantId]);
  50.         if (!$entityApplicant) {
  51.             return new JsonResponse([
  52.                 'status' => 'error',
  53.                 'message' => 'Applicant not found.'
  54.             ]);
  55.         }
  56.         return new JsonResponse([
  57.             'status' => 'success',
  58.             'centralData' => [
  59.                 'globalId' => $entityApplicant->getApplicantId(),
  60.                 'username' => $entityApplicant->getUsername(),
  61.                 'email' => $entityApplicant->getEmail(),
  62.                 'firstname' => $entityApplicant->getFirstname(),
  63.                 'lastname' => $entityApplicant->getLastname(),
  64.                 'image' => $entityApplicant->getImage(),
  65.                 'phone' => $entityApplicant->getPhone(),
  66.                 'address' => $entityApplicant->getPermAddr()
  67.             ]
  68.         ]);
  69.     }
  70.     public function ReturnJsonForListenerAction(Request $request$dataStr '')
  71.     {
  72.         $session $request->getSession();
  73.         $dataStrFromSess $session->get('jsonStrForListenerData');
  74.         $dataJson json_decode($dataStrFromSesstrue);
  75.         $session->set('jsonStrForListenerData'null);
  76.         if ($dataJson == null$dataJson = [];
  77.         return new JsonResponse($dataJson);
  78.     }
  79.     public function ZktEcoHandshakeAction(Request $request): Response
  80.     {
  81.         // ZKTeco sends heartbeat GET without POST body
  82.         ob_clean();
  83.         // Get device
  84.         $deviceSN $request->get('SN''');
  85.         if ($request->getMethod() === "GET") {
  86.         } else {
  87.             $em_goc $this->getDoctrine()->getManager('company_group');
  88.             $em $this->getDoctrine()->getManager();
  89.             $systemType $this->container->hasParameter('system_type') ? $this->container->getParameter('system_type') : '_ERP_';
  90.             $device $em_goc->getRepository('CompanyGroupBundle\\Entity\\Device')->findOneBy([
  91.                 'deviceSerial' => $deviceSN
  92.             ]);
  93.             // ZKTeco sends logs via POST
  94.             $content $request->getContent();
  95.             // Example: OP=ATTLOG&PIN=25&Time=2025-11-27%2012%3A20%3A33&...
  96.             parse_str($content$data); // Convert POST body to array
  97.             if ($request->get('table''') === 'ATTLOG') {
  98.                 if ($device) {
  99.                     $app $em_goc->getRepository('CompanyGroupBundle\\Entity\\CompanyGroup')->findOneBy([
  100.                         'appId' => $device->getAppId()
  101.                     ]);
  102.                     if ($app)   //can go local
  103.                     {
  104.                         $goc = [
  105.                             'dbName' => $app->getDbName(),
  106.                             'dbUser' => $app->getDbUser(),
  107.                             'dbPass' => $app->getDbPass(),
  108.                             'dbHost' => $app->getDbHost(),
  109.                             'serverAddress' => $app->getCompanyGroupServerAddress(),
  110.                             'port' => $app->getCompanyGroupServerPort() ?: 80,
  111.                             'appId' => $app->getAppId(),
  112. //                                 'serverId' => $entry->getServerId(),
  113.                         ];
  114.                         $connector $this->container->get('application_connector');
  115.                         $connector->resetConnection(
  116.                             'default',
  117.                             $goc['dbName'],
  118.                             $goc['dbUser'],
  119.                             $goc['dbPass'],
  120.                             $goc['dbHost'],
  121.                             $reset true
  122.                         );
  123.                         $em $this->getDoctrine()->getManager();
  124.                         $options = array(
  125.                             'notification_enabled' => $this->container->getParameter('notification_enabled'),
  126.                             'notification_server' => $this->container->getParameter('notification_server'),
  127.                         );
  128. //                    if($device->getDeviceMarker()=='_ZKTECO_GEN_')
  129.                         if (1) {
  130.                             $raw trim($request->getContent());
  131.                             // Multiple lines? split them
  132.                             $lines preg_split('/\r\n|\r|\n/'$raw);
  133.                             foreach ($lines as $line) {
  134.                                 $line trim($line);
  135.                                 if ($line === "") continue;
  136.                                 // Split on ANY whitespace
  137.                                 $parts preg_split('/\s+/'$line);
  138.                                 if (count($parts) < 3) {
  139.                                     continue; // invalid line
  140.                                 }
  141.                                 $pin $parts[0];
  142.                                 $date $parts[1];
  143.                                 $time $parts[2];
  144.                                 $verify $parts[3] ?? null;
  145.                                 $status $parts[4] ?? null;
  146.                                 $workcode $parts[5] ?? null;
  147.                                 $timestamp = new \DateTime("$date $time ".$device->getTimezoneStr());
  148.                                 $empId $pin;
  149.                                 $userId 0;
  150.                                 $today = new \DateTime();
  151. //                                $dtTs = $today->format('U');
  152.                             $dtTs $timestamp->format('U');
  153.                                 $appId $app->getAppId();
  154.                                 $statusToMarker = array(
  155.                                     => HumanResourceConstant::ATTENDANCE_MARKER_CLOCK_IN,
  156.                                     => HumanResourceConstant::ATTENDANCE_MARKER_CLOCK_OUT,
  157.                                     => HumanResourceConstant::ATTENDANCE_MARKER_GENERAL_TRACKING,
  158.                                     => HumanResourceConstant::ATTENDANCE_MARKER_GENERAL_TRACKING,
  159.                                     => HumanResourceConstant::ATTENDANCE_MARKER_CLOCK_OUT,
  160.                                     => HumanResourceConstant::ATTENDANCE_MARKER_CLOCK_OUT,
  161.                                 );
  162.                                 $employee $em->getRepository(Employee::class)->createQueryBuilder('A')
  163.                                     ->where("  A.idsByDevice like '" $device->getDeviceSerial() . "_" $pin "' or " .
  164.                                         "  A.idsByDevice like '%," $device->getDeviceSerial() . "_" $pin ",%' or " .
  165.                                         "  A.idsByDevice like '" $device->getDeviceSerial() . "_" $pin ",%' or " .
  166.                                         "  A.idsByDevice like '%," $device->getDeviceSerial() . "_" $pin "'"
  167.                                     )
  168.                                     ->getQuery()
  169.                                     ->setMaxResults(1)
  170.                                     ->getResult();
  171.                                 if (!empty($employee))
  172.                                     $empId $employee[0]->getEmployeeId();
  173.                                 if ($device->getClockInDetection() == 1)
  174.                                     $markerId $statusToMarker[$status];
  175.                                 else
  176.                                     $markerId HumanResourceConstant::ATTENDANCE_MARKER_START_WORKING_FORCED;
  177.                                 $geofenceContext = array(
  178.                                     'lat' => $request->request->get('lat'),
  179.                                     'lng' => $request->request->get('lng'),
  180.                                     'accuracy' => $request->request->get('accuracy'),
  181.                                     'locationAccuracy' => $request->request->get('locationAccuracy'),
  182.                                     'gpsAccuracy' => $request->request->get('gpsAccuracy'),
  183.                                     'isMockLocation' => $request->request->get('isMockLocation'),
  184.                                     'mock_location' => $request->request->get('mock_location'),
  185.                                     'isRemoteWork' => $request->request->get('isRemoteWork'),
  186.                                     'remote_work' => $request->request->get('remote_work'),
  187.                                 );
  188.                                 $response MiscActions::autoAttendanceGeneral($em$empId$userId$appId$dtTs$options0$markerId$geofenceContext);
  189.                             }
  190.                         }
  191.                     } else if ($systemType == '_CENTRAL_') {
  192.                     } else {
  193.                     }
  194. //                    return new Response('OK', 200, [
  195. //                        "Content-Type" => "text/plain; charset=ascii"
  196. //                    ]);
  197.                 }
  198. //            MiscActions::ProcessQrData($em_goc, $em, $data);
  199.                 /// get the app id
  200.                 ///  if in same server then connect to that app dbase and find employee id
  201.                 // Save attendance log
  202.                 // $data['PIN']
  203.                 // $data['Time']
  204.                 // $data['WorkCode'] (optional)
  205.                 // Example saving logic here…
  206.             }
  207.             return new Response("OK"200, [
  208.                 "Content-Type" => "text/plain; charset=ascii"
  209.             ]);
  210.         }
  211.         // Define the desired TimeZone (360 minutes for UTC+06:00)
  212.         $timeZoneMinutes "+06:00";
  213. // Get the current time on your server and format it for the device
  214.         $currentTime date('Y-m-dTH:i:s');
  215.         if ($request->get('options''') == 'all')
  216.             $r "GET OPTION FROM: $deviceSN\r\n" .
  217.                 "Stamp=9999\r\n" .
  218.                 "OpStamp=" time() . "\r\n" .
  219.                 "ErrorDelay=60\r\n" .
  220.                 "Delay=30\r\n" .
  221.                 "ResLogDay=18250\r\n" .
  222.                 "ResLogDelCount=10000\r\n" .
  223.                 "ResLogCount=50000\r\n" .
  224.                 "TransTimes=00:00;14:05\r\n" .
  225.                 "TransInterval=1\r\n" .
  226.                 "SyncTime=3600\r\n" .
  227.                 "TransFlag=1111000000\r\n" .
  228. //            "Time=$currentTime\r\n" .
  229.                 "TimeZone=$timeZoneMinutes\r\n" .
  230.                 "Realtime=1\r\n" .
  231.                 "Encrypt=0";
  232. //        return $r;
  233.         else if ($request->get('type''') == 'time') {
  234.             $r "Time=" $currentTime $timeZoneMinutes;
  235.         } else
  236.             $r "OK\r\n";
  237. //        $r .= "C:SET OPTION TimeZone $timeZoneMinutes\r\n";
  238. //        $r .= "C:SET TIME " . $currentTime . "\r\n";
  239.         return new Response($r200, [
  240.             "Content-Type" => "text/plain; charset=ascii"
  241.         ]);
  242. //        return new Response('OK', 200, [
  243. //            "Content-Type" => "text/plain; charset=ascii"
  244. //        ]);
  245.         /*        $xml = '<?xml version="1.0" encoding="UTF-8"?><Response><Status>OK</Status></Response>';*/
  246. //
  247. //        return new Response(
  248. //            $xml,
  249. //            Response::HTTP_OK,
  250. //            [
  251. //                'Content-Type' => 'application/xml; charset=UTF-8'
  252. //            ]
  253. //        );
  254.     }
  255.     public function ZktEcoGetRequestAction(Request $request): Response
  256.     {
  257.         ob_clean();
  258.         return new Response('OK'200, [
  259.             "Content-Type" => "text/plain; charset=ascii"
  260.         ]);
  261.         $deviceSN $request->get('SN''');
  262.         $em_goc $this->getDoctrine()->getManager('company_group');
  263.         $em $this->getDoctrine()->getManager();
  264.         $systemType $this->container->hasParameter('system_type') ? $this->container->getParameter('system_type') : '_ERP_';
  265.         $device $em_goc->getRepository('CompanyGroupBundle\\Entity\\Device')->findOneBy([
  266.             'deviceSerial' => $deviceSN
  267.         ]);
  268.         // Default timezone (fallback)
  269.         $tzString 'UTC';
  270.         if ($device && $device->getTimezoneStr()) {
  271.             $tzString $device->getTimezoneStr();
  272.         }
  273.         // Format correct time
  274.         $tz = new \DateTimeZone($tzString);
  275.         $now = new \DateTime('now'$tz);
  276.         $formatted $now->format('Y-m-d H:i:s');
  277.         // Define the desired TimeZone (360 minutes for UTC+06:00)
  278.         $timeZoneMinutes 360;
  279. // Get the current time on your server and format it for the device
  280.         $currentTime $now->format('U');
  281. //        $now->modify('-5 days');
  282.         $r "";
  283. //        $r = "OK\r\n";
  284. //        $r .= "C:SET OPTION TimeZone $timeZoneMinutes\r\n";
  285. //        $r .= "C:SET TIME " . $currentTime . "\r\n";
  286.         $r .= "C:401:SET OPTIONS " .
  287.             "DateTime=" $now->format('U') .
  288. //         "DateTime=1764929449" .
  289. //            "\r\n".
  290. //            ",".
  291. //            "ServerTZ=" . $tzString.
  292.             "\r\n";
  293.         return new Response($r200, [
  294.             "Content-Type" => "text/plain; charset=ascii"
  295.         ]);
  296.         // ZKTeco TIME sync command
  297.         $cmd "SET TIME=" $formatted "\n";
  298.         $cmd "CMD=SET OPTIONS&DateTime=" $now->format('U') . '&TZ=' $tzString;
  299.         return new Response('OK'200, [
  300.             "Content-Type" => "text/plain; charset=ascii"
  301.         ]);
  302. //        return new Response($cmd, 200, [
  303. //            "Content-Type" => "text/plain; charset=ascii"
  304. //        ]);
  305. //        return new Response('', 200, [
  306. //            "Content-Type" => "text/plain; charset=ascii"
  307. //        ]);
  308.     }
  309.     public function ZktEcoDeviceCmdAction(Request $request): Response
  310.     {
  311.         ob_clean();
  312.         // Device is asking for commands â†’ return OK only
  313.         $responseString "OK";
  314.         $response = new Response($responseString);
  315.         return $response;
  316.     }
  317.     public function ZktEcoRtDataAction(Request $request): Response
  318.     {
  319.         $type $request->query->get('type');
  320.         $sn $request->query->get('SN');
  321.         // If device is asking for time
  322. //        if ($type === 'time')
  323.         if (0) {
  324.             // Example: Bangladesh time
  325.             ob_clean();
  326.             $deviceSN $request->get('SN''');
  327.             $em_goc $this->getDoctrine()->getManager('company_group');
  328.             $em $this->getDoctrine()->getManager();
  329.             $systemType $this->container->hasParameter('system_type') ? $this->container->getParameter('system_type') : '_ERP_';
  330.             $device $em_goc->getRepository('CompanyGroupBundle\\Entity\\Device')->findOneBy([
  331.                 'deviceSerial' => $deviceSN
  332.             ]);
  333.             // Default timezone (fallback)
  334.             $tzString 'UTC';
  335.             if ($device && $device->getTimezoneStr()) {
  336.                 $tzString $device->getTimezoneStr();
  337.             }
  338.             // Format correct time
  339.             $tz = new \DateTimeZone($tzString);
  340.             $now = new \DateTime('now'$tz);
  341.             $formatted $now->format('Y-m-d H:i:s');
  342.             // Define the desired TimeZone (360 minutes for UTC+06:00)
  343.             $timeZoneMinutes 360;
  344. // Get the current time on your server and format it for the device
  345.             $currentTime $now->format('U');
  346.             $r "";
  347. //        $r = "OK\r\n";
  348. //        $r .= "C:SET OPTION TimeZone $timeZoneMinutes\r\n";
  349. //        $r .= "C:SET TIME " . $currentTime . "\r\n";
  350.             $r .= "DateTime=" $now->format('U') .
  351. //         "DateTime=1764929449" .
  352. //            "\r\n".
  353. //                ",".
  354. //                "ServerTZ=" . $tzString.
  355.                 "";
  356.             return new Response($r200, [
  357.                 "Content-Type" => "text/plain; charset=ascii"
  358.             ]);
  359.         }
  360.         // Default fallback for other rtdata
  361.         return new Response('OK'200, ['Content-Type' => 'text/plain']);
  362.     }
  363.     public function ScanQrAction(Request $request$version '')
  364.     {
  365.         $session $request->getSession();
  366.         $firstData $request->getContent();
  367.         $data json_decode($firstDatatrue);
  368.         $appId = [];
  369.         if (json_last_error() === JSON_ERROR_NONE) {
  370.             // JSON is valid
  371.             if (isset($data['appId']))
  372.                 $appId $data['appId'];
  373.         } else
  374.             $data $firstData;
  375.         $em_goc $this->getDoctrine()->getManager('company_group');
  376.         $em $this->getDoctrine()->getManager();
  377.         if ($appId != 0) {
  378.             $companies $em_goc->getRepository('CompanyGroupBundle\\Entity\\CompanyGroup')->findBy([
  379.                 'appId' => $appId
  380.             ]);
  381.             foreach ($companies as $entry) {
  382.                 $goc = [
  383.                     'dbName' => $entry->getDbName(),
  384.                     'dbUser' => $entry->getDbUser(),
  385.                     'dbPass' => $entry->getDbPass(),
  386.                     'dbHost' => $entry->getDbHost(),
  387.                     'serverAddress' => $entry->getCompanyGroupServerAddress(),
  388.                     'port' => $entry->getCompanyGroupServerPort() ?: 80,
  389.                     'appId' => $entry->getAppId(),
  390. //                                 'serverId' => $entry->getServerId(),
  391.                 ];
  392.                 $connector $this->container->get('application_connector');
  393.                 $connector->resetConnection(
  394.                     'default',
  395.                     $goc['dbName'],
  396.                     $goc['dbUser'],
  397.                     $goc['dbPass'],
  398.                     $goc['dbHost'],
  399.                     $reset true
  400.                 );
  401.                 $em $this->getDoctrine()->getManager();
  402.             }
  403.         }
  404.         MiscActions::ProcessQrData($em_goc$em$data);
  405.         return new JsonResponse(
  406.             array(
  407.                 'postData' => $request->request->all(),
  408.                 'getData' => $request->query->all(),
  409.                 'contentData' => $request->getContent(),
  410.             )
  411.         );
  412.     }
  413.     public function GetGlobalIdFromEmployeeIdAction(Request $request$version '')
  414.     {
  415.         $session $request->getSession();
  416.         $appId $request->request->get('appId'0);
  417.         $empId $request->request->get('employeeId'0);
  418.         $em_goc $this->getDoctrine()->getManager('company_group');
  419.         $em $this->getDoctrine()->getManager();
  420.         if ($appId != 0) {
  421.             $entry $em_goc->getRepository('CompanyGroupBundle\\Entity\\CompanyGroup')->findOneBy([
  422.                 'appId' => $appId
  423.             ]);
  424.             $goc = [
  425.                 'dbName' => $entry->getDbName(),
  426.                 'dbUser' => $entry->getDbUser(),
  427.                 'dbPass' => $entry->getDbPass(),
  428.                 'dbHost' => $entry->getDbHost(),
  429.                 'serverAddress' => $entry->getCompanyGroupServerAddress(),
  430.                 'port' => $entry->getCompanyGroupServerPort() ?: 80,
  431.                 'appId' => $entry->getAppId(),
  432. //                                 'serverId' => $entry->getServerId(),
  433.             ];
  434.             $connector $this->container->get('application_connector');
  435.             $connector->resetConnection(
  436.                 'default',
  437.                 $goc['dbName'],
  438.                 $goc['dbUser'],
  439.                 $goc['dbPass'],
  440.                 $goc['dbHost'],
  441.                 $reset true
  442.             );
  443.             $em $this->getDoctrine()->getManager();
  444.             $employee $this->getDoctrine()->getManager()
  445.                 ->getRepository("ApplicationBundle\\Entity\\Employee")
  446.                 ->findOneBy(array(
  447.                     'employeeId' => $empId
  448.                 ));
  449.             if ($employee) {
  450.                 $user $this->getDoctrine()->getManager()
  451.                     ->getRepository("ApplicationBundle\\Entity\\SysUser")
  452.                     ->findOneBy(array(
  453.                         'userId' => $employee->getUserId()
  454.                     ));
  455.                 if ($user)
  456.                     return new JsonResponse(array('globalId' => $user->getGlobalId()));
  457.             }
  458.         }
  459.         return new JsonResponse(array('globalId' => 0));
  460.     }
  461.     public function VerifyEmailForAppAction(Request $request$encData ''$remoteVerify 0)
  462.     {
  463.         //        $userCategory=$request->request->has('userCategory');
  464.         $encryptedData = [];
  465.         $errorField '';
  466.         $message '';
  467.         $userType '';
  468.         $otpExpireSecond 180;
  469.         $otpExpireTs 0;
  470.         $otp '';
  471.         $otpActionId $request->request->get('otpAction'UserConstants::OTP_ACTION_CONFIRM_EMAIL);
  472.         if ($encData != '')
  473.             $encryptedData json_decode($this->get('url_encryptor')->decrypt($encData), true);
  474.         //        $encryptedData = $this->get('url_encryptor')->decrypt($encData);
  475.         $userCategory '_BUDDYBEE_USER_';
  476.         if (isset($encryptedData['userCategory']))
  477.             $userCategory $encryptedData['userCategory'];
  478.         else
  479.             $userCategory $request->request->get('userCategory''_BUDDYBEE_USER_');
  480.         $em $this->getDoctrine()->getManager('company_group');
  481.         $em_goc $this->getDoctrine()->getManager('company_group');
  482.         $systemType $this->container->hasParameter('system_type') ? $this->container->getParameter('system_type') : '_ERP_';
  483.         $ownServerId $this->container->hasParameter('server_id') ? $this->container->getParameter('server_id') : '_NONE_';
  484.         $twig_file '@Authentication/pages/views/find_account_buddybee.html.twig';
  485.         $twigData = [];
  486.         $email_twig_file '@Application/pages/email/find_account_buddybee.html.twig';
  487.         $email_address $request->request->get('email''');
  488.         $email_twig_data = [];
  489.         $appendCode $request->request->get('appendCode'$request->query->get('appendCode'''));
  490.         if ($request->isMethod('POST')) {
  491.             //set an otp and its expire and send mail
  492.             $email_address $request->request->get('email');
  493.             $userObj null;
  494.             $userData = [];
  495.             {
  496.                 $userType UserConstants::USER_TYPE_APPLICANT;
  497.                 $userObj $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityApplicantDetails')->findOneBy(
  498.                     array(
  499.                         'email' => $email_address
  500.                     )
  501.                 );
  502.                 if ($userObj) {
  503.                 } else {
  504.                     $userObj $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityApplicantDetails')->findOneBy(
  505.                         array(
  506.                             'oAuthEmail' => $email_address
  507.                         )
  508.                     );
  509.                     if ($userObj) {
  510.                     } else {
  511.                         $userObj $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityApplicantDetails')->findOneBy(
  512.                             array(
  513.                                 'username' => $email_address
  514.                             )
  515.                         );
  516.                     }
  517.                 }
  518.                 if ($userObj) {
  519.                     $email_address $userObj->getEmail();
  520.                     if ($email_address == null || $email_address == '')
  521.                         $email_address $userObj->getOAuthEmail();
  522.                     //                    triggerResetPassword:
  523. //                    type: integer
  524. //                          nullable: true
  525.                     $otpData MiscActions::GenerateOtp($otpExpireSecond);
  526.                     $otp $otpData['otp'];
  527.                     $otpExpireTs $otpData['expireTs'];
  528.                     $userObj->setOtp($otpData['otp']);
  529.                     $userObj->setOtpActionId($otpActionId);
  530.                     $userObj->setOtpExpireTs($otpData['expireTs']);
  531.                     $em_goc->flush();
  532.                     $userData = array(
  533.                         'id' => $userObj->getApplicantId(),
  534.                         'email' => $email_address,
  535.                         'appId' => 0,
  536.                         'image' => $userObj->getImage(),
  537.                         'firstName' => $userObj->getFirstname(),
  538.                         'lastName' => $userObj->getLastname(),
  539.                         'phone' => $userObj->getPhone(),
  540. //                        'appId'=>$userObj->getUserAppId(),
  541.                     );
  542.                     $email_twig_file '@Application/email/templates/forgotPasswordOtp.html.twig';
  543.                     $email_twig_data = [
  544.                         'page_title' => 'Find Account',
  545.                         'encryptedData' => $encryptedData,
  546.                         'message' => $message,
  547.                         'userType' => $userType,
  548.                         'errorField' => $errorField,
  549.                         'otp' => $otpData['otp'],
  550.                         'otpExpireSecond' => $otpExpireSecond,
  551.                         'otpActionId' => $otpActionId,
  552.                         'otpActionTitle' => UserConstants::$OTP_ACTION_DATA[$otpActionId]['actionTitle'],
  553.                         'otpActionDescForMail' => UserConstants::$OTP_ACTION_DATA[$otpActionId]['actionDescForMail'],
  554.                         'otpExpireTs' => $otpData['expireTs'],
  555.                         'systemType' => $systemType,
  556.                         'userCategory' => $userCategory,
  557.                         'userData' => $userData
  558.                     ];
  559.                     $email_twig_data['success'] = true;
  560.                 } else {
  561.                     $message "Oops! Could not find your account";
  562.                     $email_twig_data['success'] = false;
  563.                 }
  564.             }
  565.             if ($email_twig_data['success'] == true && GeneralConstant::EMAIL_ENABLED == 1) {
  566.                 $bodyHtml '';
  567.                 $bodyTemplate $email_twig_file;
  568.                 $bodyData $email_twig_data;
  569.                 $attachments = [];
  570.                 $forwardToMailAddress $email_address;
  571. //                    $upl_dir = $this->container->getParameter('kernel.root_dir') . '/../web/uploads/temp/' . 'ledger' . '.pdf'
  572.                 $new_mail $this->get('mail_module');
  573.                 $new_mail->sendMyMail(array(
  574.                     'senderHash' => '_CUSTOM_',
  575.                     //                        'senderHash'=>'_CUSTOM_',
  576.                     'forwardToMailAddress' => $forwardToMailAddress,
  577.                     'subject' => 'Account Verification',
  578. //                        'fileName' => 'Order#' . str_pad($id, 8, '0', STR_PAD_LEFT) . '.pdf',
  579.                     'attachments' => $attachments,
  580.                     'toAddress' => $forwardToMailAddress,
  581.                     'fromAddress' => 'accounts@ourhoneybee.eu',
  582.                     'userName' => 'accounts@ourhoneybee.eu',
  583.                     'password' => 'Honeybee@0112',
  584.                     'smtpServer' => 'smtp.hostinger.com',
  585.                     'smtpPort' => 465,
  586. //                            'emailBody' => $bodyHtml,
  587.                     'mailTemplate' => $bodyTemplate,
  588.                     'templateData' => $bodyData,
  589. //                        'embedCompanyImage' => 1,
  590. //                        'companyId' => $companyId,
  591. //                        'companyImagePath' => $company_data->getImage()
  592.                 ));
  593.             }
  594.             if ($email_twig_data['success'] == true && GeneralConstant::NOTIFICATION_ENABLED == && $userData['phone'] != '' && $userData['phone'] != null) {
  595.                 if ($systemType == '_BUDDYBEE_') {
  596.                     $searchVal = ['_OTP_''_EXPIRE_MINUTES_''_APPEND_CODE_'];
  597.                     $replaceVal = [$otpfloor($otpExpireSecond 60), $appendCode];
  598.                     $msg 'Use OTP _OTP_ for BuddyBee. Your OTP will expire in _EXPIRE_MINUTES_ minutes
  599.                      _APPEND_CODE_';
  600.                     $msg str_replace($searchVal$replaceVal$msg);
  601.                     $emitMarker '_SEND_TEXT_TO_MOBILE_';
  602.                     $sendType 'all';
  603.                     $socketUserIds = [];
  604.                     System::SendSmsBySocket($this->container->getParameter('notification_enabled'), $msg$userData['phone'], $emitMarker$sendType$socketUserIds);
  605.                 } else {
  606.                 }
  607.             }
  608.             $encData = array(
  609.                 "userType" => $userType,
  610.                 "otp" => '',
  611. //                "otp"=>$otp,
  612.                 "otpExpireTs" => $otpExpireTs,
  613.                 "otpActionId" => $otpActionId,
  614.                 "userCategory" => $userCategory,
  615.                 "userId" => $userData['id']??0,
  616.                 "systemType" => $systemType,
  617.                 "email" => $email_address,
  618.             );
  619.             $encDataStr $this->get('url_encryptor')->encrypt(json_encode($encData));
  620.             $response = new JsonResponse(array(
  621.                     'templateData' => $twigData,
  622.                     'message' => $message,
  623.                     "otp" => '',
  624. //                        "otp" => $otp,
  625.                     "encData" => $encDataStr,
  626.                     "otpExpireTs" => $otpExpireTs,
  627. //                        'actionData' => $email_twig_data,
  628.                     'success' => isset($email_twig_data['success']) ? $email_twig_data['success'] : false,
  629.                 )
  630.             );
  631.             $response->headers->set('Access-Control-Allow-Origin''*');
  632.             return $response;
  633.         }
  634.     }
  635.     public function EmployeeAddUsingQrCodeErpServerAction(Request $request)
  636.     {
  637.         $em_goc $this->getDoctrine()->getManager('company_group');
  638.         $app $em_goc->getRepository("CompanyGroupBundle\\Entity\\CompanyGroup")
  639.             ->findOneBy(
  640.                 array(
  641.                     'appId' => $request->request->get('appId'),
  642.                 )
  643.             );
  644.         $connector $this->container->get('application_connector');
  645.         $connector->resetConnection(
  646.             'default',
  647.             $app->getDbName(),
  648.             $app->getDbUser(),
  649.             $app->getDbPass(),
  650.             $app->getDbHost(),
  651.             true
  652.         );
  653.         $em $this->getDoctrine()->getManager();
  654.         $user $em->getRepository('ApplicationBundle\\Entity\\SysUser')
  655.             ->findOneBy(
  656.                 array(
  657.                     'globalId' => $request->request->get('globalId'),
  658.                 )
  659.             );
  660.         if (!$user)
  661.             $user = new SysUser();
  662.         $user->setGlobalId($request->request->get('globalId'));
  663.         $user->setUsername($request->request->get('username'));
  664.         $user->setEmail($request->request->get('email'));
  665.         $user->setName($request->request->get('firstname'));
  666.         $user->setUserType($request->request->get('userType'));
  667.         $user->setUserAppId($request->request->get('appId'));
  668.         $user->setUserCompanyId(1);
  669.         $user->setStatus(1);
  670.         $user->setDefaultRoute('');
  671.         $em->persist($user);
  672.         $em->flush();
  673.         $employee $em->getRepository('ApplicationBundle\\Entity\\Employee')
  674.             ->findOneBy(
  675.                 array(
  676.                     'userId' => $user->getUserId(),
  677.                 )
  678.             );
  679.         if (!$employee) {
  680.             $employee = new Employee();
  681.             if ($request->request->get('email') && $request->request->get('firstname') && $request->request->get('lastname')) {
  682.                 $employee->setEmail($request->request->get('email'));
  683.                 $employee->setFirstName($request->request->get('firstname'));
  684.                 $employee->setLastName($request->request->get('lastname'));
  685.                 $employee->setCompanyId($request->request->get('companyId'));
  686.                 $employee->setStatus(1);
  687.                 $employee->setUserId($user->getUserId());
  688.                 $em->persist($employee);
  689.                 $em->flush();
  690.             } else {
  691.                 return new JsonResponse([
  692.                     'status' => 'error',
  693.                     'message' => 'Missing employee data',
  694.                 ]);
  695.             }
  696.         }
  697.         $employeeDetails $em->getRepository('ApplicationBundle\\Entity\\EmployeeDetails')
  698.             ->findOneBy(
  699.                 array(
  700.                     'userId' => $user->getUserId(),
  701.                 )
  702.             );
  703.         if (!$employeeDetails) {
  704.             $employeeDetails = new EmployeeDetails();
  705.             if ($request->request->get('email') && $request->request->get('firstname') && $request->request->get('lastname')) {
  706.                 $employeeDetails->setId($employee->getEmployeeId());
  707.                 $employeeDetails->setEmail($request->request->get('email'));
  708.                 $employeeDetails->setFirstname($request->request->get('firstname'));
  709.                 $employeeDetails->setLastname($request->request->get('lastname'));
  710.                 $employeeDetails->setUsername($request->request->get('username'));
  711.                 $employeeDetails->setUserId($employee->getUserId());
  712.                 $employeeDetails->setEmpStatus(1);
  713.                 $em->persist($employeeDetails);
  714.                 $em->flush();
  715.             } else {
  716.                 return new JsonResponse([
  717.                     'status' => 'error',
  718.                     'message' => 'Missing employee data',
  719.                 ]);
  720.             }
  721.         }
  722.         return new JsonResponse([
  723.             'status' => 'success',
  724.             'message' => 'Employee Added Successfully',
  725.         ]);
  726.     }
  727.     public function GetEmployeeDataByAppAction(Request $request$id 0)
  728.     {
  729.         $session $request->getSession();
  730.         $systemType $this->container->hasParameter('system_type') ? $this->container->getParameter('system_type') : '_ERP_';
  731.         $globalId $request->get('globalId'0);
  732.         $appId $request->get('appId'0);
  733.         $userId $request->get('userId'0);
  734.         $employeeId 0;
  735.         $gocDataList = [];
  736.         $gocDataListByAppId = [];
  737.         $appIds $request->get('appIds'$appId);
  738.         $userIds $request->get('userIds'$userId);
  739.         $em $this->getDoctrine()->getManager('company_group');
  740.         $em->getConnection()->connect();
  741.         $connected $em->getConnection()->isConnected();
  742.         $returnData = [];
  743.         if ($connected) {
  744.             $findByQuery = array(
  745.                 'active' => 1
  746.             );
  747.             if ($appIds !== '_UNSET_')
  748.                 $findByQuery['appId'] = $appIds;
  749.             $gocList $this->getDoctrine()->getManager('company_group')
  750.                 ->getRepository("CompanyGroupBundle\\Entity\\CompanyGroup")
  751.                 ->findBy($findByQuery);
  752.             foreach ($gocList as $entry) {
  753.                 $d = array(
  754.                     'name' => $entry->getName(),
  755.                     'id' => $entry->getId(),
  756.                     'image' => $entry->getImage(),
  757.                     'companyGroupHash' => $entry->getCompanyGroupHash(),
  758.                     'dbName' => $entry->getDbName(),
  759.                     'dbUser' => $entry->getDbUser(),
  760.                     'dbPass' => $entry->getDbPass(),
  761.                     'dbHost' => $entry->getDbHost(),
  762.                     'appId' => $entry->getAppId(),
  763.                     'companyRemaining' => $entry->getCompanyRemaining(),
  764.                     'companyAllowed' => $entry->getCompanyAllowed(),
  765.                 );
  766.                 $gocDataList[$entry->getId()] = $d;
  767.                 $gocDataListByAppId[$entry->getAppId()] = $d;
  768.             }
  769.             $connector $this->container->get('application_connector');
  770.             $connector->resetConnection(
  771.                 'default',
  772.                 $gocDataListByAppId[$appId]['dbName'],
  773.                 $gocDataListByAppId[$appId]['dbUser'],
  774.                 $gocDataListByAppId[$appId]['dbPass'],
  775.                 $gocDataListByAppId[$appId]['dbHost'],
  776.                 $reset true);
  777.             $em $this->getDoctrine()->getManager();
  778.             $user $em
  779.                 ->getRepository('ApplicationBundle\\Entity\\SysUser')
  780.                 ->findOneBy(
  781.                     array(
  782.                         'globalId' => $globalId
  783.                     )
  784.                 );
  785.             if ($user) {
  786.                 $employee $em
  787.                     ->getRepository('ApplicationBundle\\Entity\\Employee')
  788.                     ->findOneBy(
  789.                         array(
  790.                             'userId' => $user->getUserId()
  791.                         )
  792.                     );
  793.                 if ($employee) {
  794.                     $employeeDetails $em
  795.                         ->getRepository('ApplicationBundle\\Entity\\EmployeeDetails')
  796.                         ->findOneBy(
  797.                             array(
  798.                                 'id' => $employee->getEmployeeId()
  799.                             )
  800.                         );
  801.                     if ($employeeDetails) {
  802.                         $department $em->getRepository('ApplicationBundle\\Entity\\SysDepartment')->findOneBy(
  803.                             array(
  804.                                 'departmentId' => $employee->getDepartmentId()
  805.                             )
  806.                         );
  807.                         if ($department)
  808.                             $returnData['department'] = $department->getDepartmentName();
  809.                         else
  810.                             $returnData['department'] = '';
  811.                         $position $em->getRepository('ApplicationBundle\\Entity\\SysDepartmentPosition')->findOneBy(
  812.                             array(
  813.                                 'positionId' => $employee->getPositionId()
  814.                             )
  815.                         );
  816.                         if ($position)
  817.                             $returnData['position'] = $position->getPositionName();
  818.                         else
  819.                             $returnData['position'] = '';
  820.                         $branch $em->getRepository('ApplicationBundle\\Entity\\Branch')->findOneBy(
  821.                             array(
  822.                                 'branchId' => $employee->getBranchId()
  823.                             )
  824.                         );
  825.                         if ($branch)
  826.                             $returnData['branch'] = $branch->getName();
  827.                         else
  828.                             $returnData['branch'] = '';
  829.                         $supervisor $em->getRepository('ApplicationBundle\\Entity\\SysUser')->findOneBy(
  830.                             array(
  831.                                 'userId' => $employee->getSupervisorId()
  832.                             )
  833.                         );
  834.                         if ($supervisor)
  835.                             $returnData['supervisor'] = $supervisor->getName();
  836.                         else
  837.                             $returnData['supervisor'] = '';
  838.                         $returnData array_merge($returnDataEmployeePayloadNormalizer::normalize([
  839.                             'firstname' => $employee->getFirstname(),
  840.                             'lastname' => $employee->getLastname(),
  841.                             'employee_code' => $employeeDetails->getEmpCode() ?? '',
  842.                             'joining_date' => $employeeDetails->getJoiningDate(),
  843.                             'status' => $employee->getStatus(),
  844.                             'contact_number' => $employee->getContactNumber(),
  845.                             'current_address' => $employee->getCurrentAddress(),
  846.                             'permanent_address' => $employee->getPermanentAddress(),
  847.                             'image' => $employee->getImage(),
  848.                         ]));
  849.                         $returnData['joiningDate'] = $employeeDetails->getJoiningDate() ? $employeeDetails->getJoiningDate()->format('F d, Y') : '';
  850.                         $returnData['employeeId'] = 'E' str_pad($appId5'0'STR_PAD_LEFT) . str_pad($employee->getEmployeeId(), 8'0'STR_PAD_LEFT);
  851.                         $returnData['employeeCode'] = $employeeDetails->getEmpCode() ?? '';
  852.                         $returnData['joining_date'] = $returnData['joiningDate'];
  853.                         $returnData['emp_code'] = $returnData['employeeCode'];
  854.                         $returnData['employee_code'] = $returnData['employeeCode'];
  855.                         $returnData['employmentType'] = EmployeeConstant::$employeeType[$employeeDetails->getEmpType()] ?? '';
  856.                         $returnData['appId'] = $appId;
  857.                         $returnData['appName'] = $gocDataListByAppId[$appId]['name'];
  858.                         $returnData['appImage'] = $gocDataListByAppId[$appId]['image'];
  859.                     }
  860.                 }
  861.             }
  862.         }
  863.         return new JsonResponse(array(
  864.             'success' => !empty($returnData),
  865.             'returnData' => $returnData,
  866.         ));
  867.     }
  868.     public function PublicProfilePageAction(Request $request$id 0)
  869.     {
  870.         $em $this->getDoctrine()->getManager();
  871.         $session $request->getSession();
  872.         $systemType $this->container->hasParameter('system_type') ? $this->container->getParameter('system_type') : '_ERP_';
  873.         $globalId 0;
  874.         $appId 0;
  875.         $employeeId 0;
  876.         if ($systemType == '_CENTRAL_') {
  877.             if (strpos($id'E') !== false) {
  878.             }
  879.             $urlToCall GeneralConstant::HONEYBEE_CENTRAL_SERVER '/employee/profile/' $id '?returnJson=1';
  880.             $curl curl_init();
  881.             curl_setopt_array($curl, array(
  882.                 CURLOPT_RETURNTRANSFER => 1,
  883.                 CURLOPT_POST => 0,
  884.                 CURLOPT_URL => $urlToCall,
  885.                 CURLOPT_CONNECTTIMEOUT => 10,
  886.                 CURLOPT_SSL_VERIFYPEER => false,
  887.                 CURLOPT_SSL_VERIFYHOST => false,
  888.                 CURLOPT_HTTPHEADER => array(),
  889.                 CURLOPT_POSTFIELDS => []
  890.             ));
  891.             $retData curl_exec($curl);
  892.             $errData curl_error($curl);
  893.             curl_close($curl);
  894.             $data $em->getRepository(EntityApplicantDetails::class)->find($id);
  895.             return $this->render('@HoneybeeWeb/pages/public_profile.html.twig', array(
  896.                 'page_title' => 'Employee Profile',
  897.                 'details' => $data,
  898.                 'genderList' => EmployeeConstant::$sex,
  899.                 'bloodGroupList' => EmployeeConstant::$BloodGroup,
  900.             ));
  901.         } else if ($systemType == '_ERP_') {
  902.             if (strpos($id'E') !== false) {
  903.             }
  904.             $employee $em->getRepository('ApplicationBundle\\Entity\\Employee')->findOneBy(
  905.                 array(
  906.                     'employeeId' => $id
  907.                 ));
  908.             if ($employee) {
  909.                 $user $em->getRepository('ApplicationBundle\\Entity\\SysUser')->findOneBy(
  910.                     array(
  911.                         'userId' => $employee->getUserId()
  912.                     ));
  913.                 if ($user)
  914.                     $globalId $user->getGlobalId();
  915.             }
  916.             if ($request->query->get('returnJson'0) == 1)
  917.                 return new JsonResponse(array(
  918.                     'globalId' => $globalId
  919.                 ));
  920.             else {
  921.                 if ($globalId == || $globalId == null) {
  922.                     return $this->redirectToRoute('permission_denied_page');
  923.                 } else {
  924.                     return $this->redirect(GeneralConstant::HONEYBEE_CENTRAL_SERVER '/profile/public/' $globalId);
  925.                 }
  926.             }
  927.         }
  928.     }
  929.     public function GenerateQrAction(Request $request$url '')
  930.     {
  931.         $em_goc $this->getDoctrine()->getManager('company_group');
  932.         $em_goc->getConnection()->connect();
  933.         $customQrUrl $request->query->get('url'$url);
  934.         $company $request->query->get('company');
  935.         $appid $request->query->get('appid');
  936.         $companyId $request->query->get('companyId');
  937.         $userType $request->query->get('userType');
  938.         $absoluteUrl $this->generateUrl('dashboard', [], UrlGenerator::ABSOLUTE_URL);
  939.         $companyDetails $em_goc->getRepository("CompanyGroupBundle\\Entity\\CompanyGroup")->findOneBy(
  940.             array(
  941.                 'appId' => $appid
  942.             ));
  943. //        $companyImage = rtrim($absoluteUrl, '/') . '/' . ltrim($companyDetails->getImage(), '/');
  944.         $companyImage $companyDetails->getImage();
  945.         if ($companyImage) {
  946.             $companyImage rtrim($absoluteUrl'/') . '/' ltrim($companyImage'/');
  947.         } else {
  948.             $companyImage '';
  949.         }
  950.         $userTypeNames = [
  951.             => 'Admin',
  952.             => 'User',
  953.             => 'Management',
  954.         ];
  955.         $userTypeName = isset($userTypeNames[$userType]) ? $userTypeNames[$userType] : 'Unknown';
  956.         $finalUrl $customQrUrl == '' "https://ourhoneybee.eu/add_employee_by_qr?company=" urlencode($company) .
  957.             "&appid=" urlencode($appid) .
  958.             "&companyId=" urlencode($companyId) .
  959.             "&companyImage=" urlencode($companyImage) .
  960.             "&userType=" urlencode($userType) : $customQrUrl;
  961.         if ($request->get('htmlView'0) == 1) {
  962.             return $this->render('@Application/inc/snippets/qr_div.html.twig',
  963.                 array(
  964.                     'page_title' => 'Bee Codes',
  965. //                'export'=>'pdf,print',
  966.                     'data' => [],
  967.                     'isHtml' => $request->get('htmlView'0),
  968.                     'customQrUrl' => $customQrUrl,
  969.                     'url' => $finalUrl
  970.                 )
  971.             );
  972.         } else {
  973.             $html $this->renderView('@Application/inc/snippets/qr_div.html.twig',
  974.                 array(
  975.                     'page_title' => 'Bee Codes',
  976. //                'export'=>'pdf,print',
  977.                     'data' => [],
  978.                     'isHtml' => $request->get('htmlView'0),
  979.                     'customQrUrl' => $customQrUrl,
  980.                     'url' => $finalUrl
  981.                 )
  982.             );
  983.             return new JsonResponse(array(
  984.                 'html' => $html,
  985.                 'customQrUrl' => $customQrUrl,
  986.                 'url' => $finalUrl,
  987.                 'companyImage' => $companyImage,
  988.                 'userTypeName' => $userTypeName,
  989.             ));
  990.         }
  991.     }
  992.     public function NewPasswordAction(Request $request$encData '')
  993.     {
  994.         //        $userCategory=$request->request->has('userCategory');
  995.         $encryptedData = [];
  996.         $errorField '';
  997.         $message '';
  998.         $userType '';
  999.         $otpExpireSecond 180;
  1000.         $session $request->getSession();
  1001.         if ($encData != '')
  1002.             $encryptedData json_decode($this->get('url_encryptor')->decrypt($encData), true);
  1003.         //        $encryptedData = $this->get('url_encryptor')->decrypt($encData);
  1004.         $otp = isset($encryptedData['otp']) ? $encryptedData['otp'] : 0;
  1005.         $password = isset($encryptedData['password']) ? $encryptedData['password'] : 0;
  1006.         $otpActionId = isset($encryptedData['otpActionId']) ? $encryptedData['otpActionId'] : 0;
  1007.         $userId = isset($encryptedData['userId']) ? $encryptedData['userId'] : $session->get(UserConstants::USER_ID);
  1008.         $userCategory = isset($encryptedData['userCategory']) ? $encryptedData['userCategory'] : '_BUDDYBEE_USER_';
  1009.         //        $em = $this->getDoctrine()->getManager('company_group');
  1010.         $em_goc $this->getDoctrine()->getManager('company_group');
  1011.         $systemType $this->container->hasParameter('system_type') ? $this->container->getParameter('system_type') : '_ERP_';
  1012.         $twig_file '@Application/pages/login/find_account_buddybee.html.twig';
  1013.         $twigData = [];
  1014.         $email_twig_file '@Application/pages/email/find_account_buddybee.html.twig';
  1015.         $email_twig_data = [];
  1016.         if ($request->isMethod('POST')) {
  1017.             $otp $request->request->get('otp'$otp);
  1018.             $password $request->request->get('password'$password);
  1019.             $otpActionId $request->request->get('otpActionId'$otpActionId);
  1020.             $userId $request->request->get('userId'$userId);
  1021.             $userCategory $request->request->get('userCategory'$userCategory);
  1022.             $email_address $request->request->get('email');
  1023.             if ($systemType == '_ERP_') {
  1024.                 $gocId $session->get(UserConstants::USER_GOC_ID);
  1025.                 $appId $session->get(UserConstants::USER_APP_ID);
  1026.                 $acknowledgementService $this->get('app.public_document_acknowledgement_service');
  1027.                 list($em$goc) = $acknowledgementService->getPublicDocumentEntityManager($appId);
  1028.                 if ($userCategory == '_APPLICANT_') {
  1029.                     $userType UserConstants::USER_TYPE_APPLICANT;
  1030.                     $userObj $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityApplicantDetails')->findOneBy(
  1031.                         array(
  1032.                             'applicantId' => $userId
  1033.                         )
  1034.                     );
  1035.                     if ($userObj) {
  1036.                         if ($userObj->getTriggerResetPassword() == 1) {
  1037.                             $encodedPassword $this->container->get('app.legacy_password_service')->hashWithSalt($password$userObj->getSalt());
  1038.                             $userObj->setPassword($encodedPassword);
  1039.                             $userObj->setTempPassword('');
  1040.                             $userObj->setTriggerResetPassword(0);
  1041.                             $em_goc->flush();
  1042.                             $email_twig_data['success'] = true;
  1043.                             $message "";
  1044.                             $userData = array(
  1045.                                 'id' => $userObj->getApplicantId(),
  1046.                                 'email' => $email_address,
  1047.                                 'appId' => 0,
  1048.                                 'image' => $userObj->getImage(),
  1049.                                 'firstName' => $userObj->getFirstname(),
  1050.                                 'lastName' => $userObj->getLastname(),
  1051.                                 //                        'appId'=>$userObj->getUserAppId(),
  1052.                             );
  1053.                         } else {
  1054.                             $message "Action not allowed!";
  1055.                             $email_twig_data['success'] = false;
  1056.                         }
  1057.                     } else {
  1058.                         $message "Account not found!";
  1059.                         $email_twig_data['success'] = false;
  1060.                     }
  1061.                 } else {
  1062.                     $userType $session->get(UserConstants::USER_TYPE);
  1063.                     $userObj $em->getRepository('ApplicationBundle\\Entity\\SysUser')->findOneBy(
  1064.                         array(
  1065.                             'userId' => $userId
  1066.                         )
  1067.                     );
  1068.                     if ($userObj) {
  1069.                         if ($userObj->getTriggerResetPassword() == 1) {
  1070.                             $encodedPassword $this->container->get('app.legacy_password_service')->hashWithSalt($password$userObj->getSalt());
  1071.                             $userObj->setPassword($encodedPassword);
  1072.                             $userObj->setTempPassword('');
  1073.                             $userObj->setTriggerResetPassword(0);
  1074.                             $em->flush();
  1075.                             $email_twig_data['success'] = true;
  1076.                             $message "";
  1077.                         } else {
  1078.                             $message "Action not allowed!";
  1079.                             $email_twig_data['success'] = false;
  1080.                         }
  1081.                     } else {
  1082.                         $message "Account not found!";
  1083.                         $email_twig_data['success'] = false;
  1084.                     }
  1085.                 }
  1086.                 if ($request->request->has('remoteVerify') || $request->request->has('returnJson') || $request->query->has('returnJson')) {
  1087.                     $response = new JsonResponse(array(
  1088.                             'templateData' => $twigData,
  1089.                             'message' => $message,
  1090.                             'actionData' => $email_twig_data,
  1091.                             'success' => isset($email_twig_data['success']) ? $email_twig_data['success'] : false,
  1092.                         )
  1093.                     );
  1094.                     $response->headers->set('Access-Control-Allow-Origin''*');
  1095.                     return $response;
  1096.                 } else if ($email_twig_data['success'] == true) {
  1097.                     //                    $twig_file = '@Authentication/pages/views/reset_password_success_buddybee.html.twig';
  1098.                     //                    $twigData = [
  1099.                     //                        'page_title' => 'Reset Successful',
  1100.                     //                        'encryptedData' => $encryptedData,
  1101.                     //                        'message' => $message,
  1102.                     //                        'userType' => $userType,
  1103.                     //                        'errorField' => $errorField,
  1104.                     //
  1105.                     //                    ];
  1106.                     //                    return $this->render(
  1107.                     //                        $twig_file,
  1108.                     //                        $twigData
  1109.                     //                    );
  1110.                     return $this->redirectToRoute('dashboard');
  1111.                 }
  1112.             } else if ($systemType == '_BUDDYBEE_') {
  1113.                 $userType UserConstants::USER_TYPE_APPLICANT;
  1114.                 $userObj $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityApplicantDetails')->findOneBy(
  1115.                     array(
  1116.                         'applicantId' => $userId
  1117.                     )
  1118.                 );
  1119.                 if ($userObj) {
  1120.                     if ($userObj->getTriggerResetPassword() == 1) {
  1121.                         $encodedPassword $this->container->get('app.legacy_password_service')->hashWithSalt($password$userObj->getSalt());
  1122.                         $userObj->setPassword($encodedPassword);
  1123.                         $userObj->setTempPassword('');
  1124.                         $userObj->setTriggerResetPassword(0);
  1125.                         $em_goc->flush();
  1126.                         $email_twig_data['success'] = true;
  1127.                         $message "";
  1128.                         $userData = array(
  1129.                             'id' => $userObj->getApplicantId(),
  1130.                             'email' => $email_address,
  1131.                             'appId' => 0,
  1132.                             'image' => $userObj->getImage(),
  1133.                             'firstName' => $userObj->getFirstname(),
  1134.                             'lastName' => $userObj->getLastname(),
  1135.                             //                        'appId'=>$userObj->getUserAppId(),
  1136.                         );
  1137.                     } else {
  1138.                         $message "Action not allowed!";
  1139.                         $email_twig_data['success'] = false;
  1140.                     }
  1141.                 } else {
  1142.                     $message "Account not found!";
  1143.                     $email_twig_data['success'] = false;
  1144.                 }
  1145.             } else if ($systemType == '_CENTRAL_') {
  1146.                 $userType UserConstants::USER_TYPE_APPLICANT;
  1147.                 $userObj $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityApplicantDetails')->findOneBy(
  1148.                     array(
  1149.                         'applicantId' => $userId
  1150.                     )
  1151.                 );
  1152.                 if ($userObj) {
  1153.                     if ($userObj->getTriggerResetPassword() == 1) {
  1154.                         $encodedPassword $this->container->get('app.legacy_password_service')->hashWithSalt($password$userObj->getSalt());
  1155.                         $userObj->setPassword($encodedPassword);
  1156.                         $userObj->setTempPassword('');
  1157.                         $userObj->setTriggerResetPassword(0);
  1158.                         $em_goc->flush();
  1159.                         $email_twig_data['success'] = true;
  1160.                         $message "";
  1161.                         $userData = array(
  1162.                             'id' => $userObj->getApplicantId(),
  1163.                             'email' => $email_address,
  1164.                             'appId' => 0,
  1165.                             'image' => $userObj->getImage(),
  1166.                             'firstName' => $userObj->getFirstname(),
  1167.                             'lastName' => $userObj->getLastname(),
  1168.                             //                        'appId'=>$userObj->getUserAppId(),
  1169.                         );
  1170.                     } else {
  1171.                         $message "Action not allowed!";
  1172.                         $email_twig_data['success'] = false;
  1173.                     }
  1174.                 } else {
  1175.                     $message "Account not found!";
  1176.                     $email_twig_data['success'] = false;
  1177.                 }
  1178.             }
  1179.             if ($request->request->has('remoteVerify') || $request->request->has('returnJson') || $request->query->has('returnJson')) {
  1180.                 $response = new JsonResponse(array(
  1181.                         'templateData' => $twigData,
  1182.                         'message' => $message,
  1183.                         'actionData' => $email_twig_data,
  1184.                         'success' => isset($email_twig_data['success']) ? $email_twig_data['success'] : false,
  1185.                     )
  1186.                 );
  1187.                 $response->headers->set('Access-Control-Allow-Origin''*');
  1188.                 return $response;
  1189.             } else if ($email_twig_data['success'] == true) {
  1190.                 if ($systemType == '_ERP_'$twig_file '@Authentication/pages/views/reset_password_success_central.html.twig';
  1191.                 else if ($systemType == '_BUDDYBEE_'$twig_file '@Authentication/pages/views/reset_password_success_buddybee.html.twig';
  1192.                 else if ($systemType == '_CENTRAL_'$twig_file '@Authentication/pages/views/reset_password_success_central.html.twig';
  1193.                 $twigData = [
  1194.                     'page_title' => 'Reset Successful',
  1195.                     'encryptedData' => $encryptedData,
  1196.                     'message' => $message,
  1197.                     'userType' => $userType,
  1198.                     'errorField' => $errorField,
  1199.                 ];
  1200.                 return $this->render(
  1201.                     $twig_file,
  1202.                     $twigData
  1203.                 );
  1204.             }
  1205.         }
  1206.         if ($systemType == '_ERP_') {
  1207.             if ($userCategory == '_APPLICANT_') {
  1208.                 $userType $session->get(UserConstants::USER_TYPE);
  1209.                 $twig_file '@Application/pages/login/find_account_buddybee.html.twig';
  1210.                 $twigData = [
  1211.                     'page_title' => 'Find Account',
  1212.                     'encryptedData' => $encryptedData,
  1213.                     'message' => $message,
  1214.                     'userType' => $userType,
  1215.                     'errorField' => $errorField,
  1216.                 ];
  1217.             } else {
  1218.                 $userType $session->get(UserConstants::USER_TYPE);
  1219.                 $twig_file '@Application/pages/login/reset_password_erp.html.twig';
  1220.                 $twigData = [
  1221.                     'page_title' => 'Reset Password',
  1222.                     'encryptedData' => $encryptedData,
  1223.                     'message' => $message,
  1224.                     'userType' => $userType,
  1225.                     'errorField' => $errorField,
  1226.                 ];
  1227.             }
  1228.         } else if ($systemType == '_BUDDYBEE_') {
  1229.             $userType UserConstants::USER_TYPE_APPLICANT;
  1230.             $twig_file '@Authentication/pages/views/reset_new_password_buddybee.html.twig';
  1231.             $twigData = [
  1232.                 'page_title' => 'Reset Password',
  1233.                 'encryptedData' => $encryptedData,
  1234.                 'message' => $message,
  1235.                 'userType' => $userType,
  1236.                 'errorField' => $errorField,
  1237.             ];
  1238.         } else if ($systemType == '_CENTRAL_') {
  1239.             $userType UserConstants::USER_TYPE_APPLICANT;
  1240.             $twig_file '@Authentication/pages/views/reset_new_password_central.html.twig';
  1241.             $twigData = [
  1242.                 'page_title' => 'Reset Password',
  1243.                 'encryptedData' => $encryptedData,
  1244.                 'message' => $message,
  1245.                 'userType' => $userType,
  1246.                 'errorField' => $errorField,
  1247.             ];
  1248.         }
  1249.         if ($request->request->has('remoteVerify') || $request->request->has('returnJson') || $request->query->has('returnJson')) {
  1250.             if ($userId != && $userId != null) {
  1251.                 $response = new JsonResponse(array(
  1252.                         'templateData' => $twigData,
  1253.                         'message' => $message,
  1254.                         'actionData' => $email_twig_data,
  1255.                         'success' => isset($email_twig_data['success']) ? $email_twig_data['success'] : false,
  1256.                     )
  1257.                 );
  1258.             } else {
  1259.                 $response = new JsonResponse(array(
  1260.                         'templateData' => [],
  1261.                         'message' => 'Unauthorized',
  1262.                         'actionData' => [],
  1263.                         'success' => false,
  1264.                     )
  1265.                 );
  1266.             }
  1267.             $response->headers->set('Access-Control-Allow-Origin''*');
  1268.             return $response;
  1269.         } else {
  1270.             if ($userId != && $userId != null) {
  1271.                 return $this->render(
  1272.                     $twig_file,
  1273.                     $twigData
  1274.                 );
  1275.             } else
  1276.                 return $this->render('@Buddybee/pages/404NotFound.html.twig', array(
  1277.                     'page_title' => '404 Not Found',
  1278.                 ));
  1279.         }
  1280.     }
  1281.     public function SalaryCertificateViewAction(Request $request$id)
  1282.     {
  1283.         if (!is_numeric($id)) {
  1284.             $idData json_decode($this->get('url_encryptor')->decrypt($id), true);
  1285.         } else {
  1286.             $idData = array(
  1287.                 'id' => $id,
  1288.                 'appId' => $request->get('appId'),
  1289.             );
  1290.         }
  1291.         $id $idData['id'];
  1292.         $printDate = isset($idData['dt']) ? new \DateTime($idData['dt']) : new \DateTime();
  1293.         $em $this->getDoctrine()->getManager('company_group');
  1294.         $em->getConnection()->connect();
  1295.         $connected $em->getConnection()->isConnected();
  1296.         if ($connected)
  1297.             $goc $this->getDoctrine()->getManager('company_group')
  1298.                 ->getRepository("CompanyGroupBundle\\Entity\\CompanyGroup")
  1299.                 ->findOneBy(
  1300.                     array(
  1301.                         'appId' => $idData['appId']
  1302.                     )
  1303.                 );
  1304.         $connector $this->container->get('application_connector');
  1305.         $connector->resetConnection(
  1306.             'default',
  1307.             $goc->getDbName(),
  1308.             $goc->getDbUser(),
  1309.             $goc->getDbPass(),
  1310.             $goc->getDbHost(),
  1311.             $reset true);
  1312.         $em $this->getDoctrine()->getManager();
  1313.         $employee $em
  1314.             ->getRepository("ApplicationBundle\\Entity\\Employee")
  1315.             ->findOneBy(
  1316.                 array(
  1317.                     'employeeId' => $idData['id']
  1318.                 )
  1319.             );
  1320.         $employeeDetails $em
  1321.             ->getRepository("ApplicationBundle\\Entity\\EmployeeDetails")
  1322.             ->findOneBy(
  1323.                 array(
  1324.                     'id' => $idData['id']
  1325.                 )
  1326.             );
  1327.         $earningValues = [];
  1328. //        $deductionValues=[];
  1329. //        $facilityValues=[];
  1330.         for ($j 0$j 10$j++) {
  1331.             if ($employeeDetails->{'getEar' . ($j 1)}() != && $employeeDetails->{'getEar' . ($j 1)}() != null && $employeeDetails->{'getEar' . ($j 1)}() != '')
  1332.                 $earningValues[$j 1] = $employeeDetails->{'getEar' . ($j 1)}();
  1333.         }
  1334. //        for($j=0;$j<10;$j++){
  1335. //            if($employeeDetails->{'getFac'.($j+1)}()!=0 && $payslip->{'getFac'.($j+1)}()!=null && $payslip->{'getFac'.($j+1)}()!='')
  1336. //                $facilityValues[$j+1]=$payslip->{'getFac'.($j+1)}();
  1337. //
  1338. //        }
  1339. //        for($j=0;$j<10;$j++){
  1340. //            if($employeeDetails->{'getDed'.($j+1)}()!=0 && $payslip->{'getDed'.($j+1)}()!=null && $payslip->{'getDed'.($j+1)}()!='')
  1341. //                $deductionValues[$j+1]=$payslip->{'getDed'.($j+1)}();
  1342. //        }
  1343.         $dept $em
  1344.             ->getRepository("ApplicationBundle\\Entity\\SysDepartment")
  1345.             ->findOneBy(
  1346.                 array(
  1347.                     'departmentId' => $employeeDetails->getDept()
  1348.                 )
  1349.             );
  1350.         $desg $em
  1351.             ->getRepository("ApplicationBundle\\Entity\\SysDepartmentPosition")
  1352.             ->findOneBy(
  1353.                 array(
  1354.                     'positionId' => $employeeDetails->getDesg()
  1355.                 )
  1356.             );
  1357.         $authorizations = [
  1358.             [
  1359.                 'auth' => 1,
  1360.                 'auth_type' => 'Authorized By',
  1361.                 'name' => 'Arif Hossain',
  1362.                 'designation' => 'Accounts Manager',
  1363.                 'signature' => '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'
  1364.             ],
  1365.             [
  1366.                 'auth' => 1,
  1367.                 'auth_type' => 'Verified By',
  1368.                 'name' => 'Emrul Hasan',
  1369.                 'designation' => 'Managing Director',
  1370.                 'signature' => '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'
  1371.             ],
  1372.             [
  1373.                 'auth' => 1,
  1374.                 'auth_type' => 'Approved By',
  1375.                 'name' => 'Khandoker Mozibul Yasser',
  1376.                 'designation' => 'Chairman',
  1377.                 'signature' => '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'
  1378.             ]
  1379.         ];
  1380.         //        $company_data = Company::getCompanyData($em, $this->getLoggedUserCompanyId($request));
  1381.         $company_data Company::getCompanyData($em1);
  1382.         $document_mark = array(
  1383.             'original' => '/images/Original-Stamp-PNG-Picture.png',
  1384.             'copy' => ''
  1385.         );
  1386.         if ($request->query->has('pdf') && $this->get('knp_snappy.pdf')) {
  1387.             $html $this->renderView(
  1388.                 '@Application/pages/human_resource/print/salary_certificate.html.twig',
  1389.                 array(
  1390.                     //full array here
  1391.                     'pdf' => true,
  1392.                     'page_title' => 'Salary Certificate',
  1393.                     'employee' => $employee,
  1394.                     'printDate' => $printDate,
  1395.                     'desg' => $desg,
  1396.                     'employeeDetails' => $employeeDetails,
  1397.                     'earningValues' => $earningValues,
  1398.                     'authorizations' => $authorizations,
  1399.                     'appId' => $idData['appId'],
  1400.                     'export' => 'pdf,print',
  1401.                     'document_mark_image' => $document_mark['original'],
  1402.                     'company_name' => $company_data->getName(),
  1403.                     'company_data' => $company_data,
  1404.                     'company_address' => $company_data->getAddress(),
  1405.                     'company_image' => $company_data->getImage(),
  1406.                     'invoice_footer' => $company_data->getInvoiceFooter(),
  1407.                     'page_header' => 'New Product',
  1408.                     'document_type' => 'Sales Bill',
  1409.                     'page_header_sub' => 'Add',
  1410.                     //                'type_list'=>$type_list,
  1411.                     //                'mis_data'=>$mis_data,
  1412.                     //                'mis_print'=>$mis_print,
  1413.                     'item_data' => [],
  1414.                     'received' => 2,
  1415.                     'return' => 1,
  1416.                     'total_w_vat' => 1,
  1417.                     'total_vat' => 1,
  1418.                     'total_wo_vat' => 1,
  1419.                     'invoice_id' => 'abcd1234',
  1420.                     'created_by' => 'created by',
  1421.                     'created_at' => '',
  1422.                     'red' => 0,
  1423.                 )
  1424.             );
  1425.             $pdf_response $this->get('knp_snappy.pdf')->getOutputFromHtml($html, array(
  1426.                 //                'orientation' => 'landscape',
  1427.                 //                'enable-javascript' => true,
  1428.                 //                'javascript-delay' => 1000,
  1429.                 'no-stop-slow-scripts' => false,
  1430.                 'no-background' => false,
  1431.                 'lowquality' => false,
  1432.                 'encoding' => 'utf-8',
  1433.                 //            'images' => true,
  1434.                 //            'cookie' => array(),
  1435.                 'dpi' => 300,
  1436.                 'image-dpi' => 300,
  1437.                 //                'enable-external-links' => true,
  1438.                 //                'enable-internal-links' => true
  1439.             ));
  1440.             return new Response(
  1441.                 $pdf_response,
  1442.                 200,
  1443.                 array(
  1444.                     'Content-Type' => 'application/pdf',
  1445.                     'Content-Disposition' => 'attachment; filename="salary_certificate_' $id '.pdf"'
  1446.                 )
  1447.             );
  1448.         }
  1449.         return $this->render(
  1450.             '@Application/pages/human_resource/print/salary_certificate.html.twig',
  1451.             array(
  1452.                 'page_title' => 'Salary Certificate ',
  1453.                 'employee' => $employee,
  1454.                 'printDate' => $printDate,
  1455.                 'employeeDetails' => $employeeDetails,
  1456.                 'earningValues' => $earningValues,
  1457.                 'desg' => $desg,
  1458.                 'authorizations' => $authorizations,
  1459.                 'appId' => $idData['appId'],
  1460.                 'export' => 'none',
  1461.                 'document_mark_image' => $document_mark['original'],
  1462.                 'company_name' => $company_data->getName(),
  1463.                 'company_data' => $company_data,
  1464.                 'company_address' => $company_data->getAddress(),
  1465.                 'company_image' => $company_data->getImage(),
  1466.                 'invoice_footer' => $company_data->getInvoiceFooter(),
  1467.                 'page_header' => 'New Product',
  1468.                 'document_type' => 'Sales Bill',
  1469.                 'page_header_sub' => 'Add',
  1470.                 //                'type_list'=>$type_list,
  1471.                 //                'mis_data'=>$mis_data,
  1472.                 //                'mis_print'=>$mis_print,
  1473.                 'item_data' => [],
  1474.                 'received' => 2,
  1475.                 'return' => 1,
  1476.                 'total_w_vat' => 1,
  1477.                 'total_vat' => 1,
  1478.                 'total_wo_vat' => 1,
  1479.                 'invoice_id' => 'abcd1234',
  1480.                 'created_by' => 'created by',
  1481.                 'created_at' => '',
  1482.                 'red' => 0,
  1483.             )
  1484.         );
  1485.     }
  1486.     public function PaymentVoucherPublicViewAction(Request $request$id)
  1487.     {
  1488.         $acknowledgementService $this->get('app.public_document_acknowledgement_service');
  1489.         try {
  1490.             $idData $acknowledgementService->decodePublicDocumentPayload($request$id);
  1491.         } catch (\Exception $e) {
  1492.             return $this->render('@Buddybee/pages/404NotFound.html.twig', array(
  1493.                 'page_title' => '404 Not Found',
  1494.             ));
  1495.         }
  1496.         $voucherId = isset($idData['id']) ? $idData['id'] : 0;
  1497.         $appId = isset($idData['appId']) ? $idData['appId'] : $request->get('appId');
  1498.         if (!$voucherId || !$appId) {
  1499.             return $this->render('@Buddybee/pages/404NotFound.html.twig', array(
  1500.                 'page_title' => '404 Not Found',
  1501.             ));
  1502.         }
  1503.         list($em$goc) = $acknowledgementService->getPublicDocumentEntityManager($appId);
  1504.         if (!$em || !$goc) {
  1505.             return $this->render('@Buddybee/pages/404NotFound.html.twig', array(
  1506.                 'page_title' => '404 Not Found',
  1507.             ));
  1508.         }
  1509.         $data Accounts::GetVoucherDetails($em$voucherId);
  1510.         if (empty($data) || (int)$data['type_id'] !== 5) {
  1511.             return $this->render('@Buddybee/pages/404NotFound.html.twig', array(
  1512.                 'page_title' => '404 Not Found',
  1513.             ));
  1514.         }
  1515.         $companyId $data['general_data']->getCompanyId() ? $data['general_data']->getCompanyId() : 1;
  1516.         $companyData Company::getCompanyData($em$companyId);
  1517.         return $this->render('@Accounts/pages/print/public_payment_voucher_view.html.twig', array(
  1518.             'page_title' => 'Payment Voucher ' $data['doc_hash'],
  1519.             'data' => $data,
  1520.             'company_data' => $companyData,
  1521.             'company_name' => $companyData $companyData->getName() : '',
  1522.             'company_address' => $companyData $companyData->getAddress() : '',
  1523.             'company_image' => $companyData $companyData->getImage() : '',
  1524.             'invoice_footer' => $companyData $companyData->getInvoiceFooter() : '',
  1525.             'public_id' => $id,
  1526.             'appId' => $appId,
  1527.             'is_logged_in' => $request->getSession()->get(UserConstants::USER_LOGIN_ID) ? 0,
  1528.         ));
  1529.     }
  1530.     public function PaymentVoucherPublicSignAction(Request $request$id)
  1531.     {
  1532.         $acknowledgementService $this->get('app.public_document_acknowledgement_service');
  1533.         $idData $acknowledgementService->decodePublicDocumentPayload($request$id);
  1534.         $voucherId = isset($idData['id']) ? $idData['id'] : 0;
  1535.         $appId = isset($idData['appId']) ? $idData['appId'] : $request->get('appId');
  1536.         if (!$voucherId || !$appId) {
  1537.             $this->addFlash('error''Public voucher link is invalid.');
  1538.             return $this->redirectToRoute('public_payment_voucher_view', array('id' => $id));
  1539.         }
  1540.         list($em$goc) = $acknowledgementService->getPublicDocumentEntityManager($appId);
  1541.         if (!$em || !$goc) {
  1542.             $this->addFlash('error''Company context could not be resolved for this public link.');
  1543.             return $this->redirectToRoute('public_payment_voucher_view', array('id' => $id));
  1544.         }
  1545.         $voucher $em->getRepository('ApplicationBundle\\Entity\\AccTransactions')->findOneBy(array(
  1546.             'transactionId' => $voucherId
  1547.         ));
  1548.         if (!$voucher || (int)$voucher->getDocumentType() !== 5) {
  1549.             $this->addFlash('error''Payment voucher was not found.');
  1550.             return $this->redirectToRoute('public_payment_voucher_view', array('id' => $id));
  1551.         }
  1552.         $signatureBase64 $acknowledgementService->resolveReceiverSignatureBase64($request$em);
  1553.         if ($signatureBase64 === '') {
  1554.             $this->addFlash('error''A valid signature or authenticated approval hash is required.');
  1555.             return $this->redirectToRoute('public_payment_voucher_view', array('id' => $id));
  1556.         }
  1557.         $acknowledgementService->persistAcknowledgement($em$voucher$signatureBase64);
  1558.         $this->addFlash('success''Receiver signature saved successfully.');
  1559.         return $this->redirect($this->generateUrl('public_payment_voucher_view', array('id' => $id)) . '#receiver-signature');
  1560.     }
  1561.     public function DeliveryReceiptPublicViewAction(Request $request$id)
  1562.     {
  1563.         $acknowledgementService $this->get('app.public_document_acknowledgement_service');
  1564.         $idData $acknowledgementService->decodePublicDocumentPayload($request$id);
  1565.         $deliveryReceiptId = isset($idData['id']) ? $idData['id'] : 0;
  1566.         $appId = isset($idData['appId']) ? $idData['appId'] : $request->get('appId');
  1567.         if (!$deliveryReceiptId || !$appId) {
  1568.             return $this->render('@Buddybee/pages/404NotFound.html.twig', array(
  1569.                 'page_title' => '404 Not Found',
  1570.             ));
  1571.         }
  1572.         list($em$goc) = $acknowledgementService->getPublicDocumentEntityManager($appId);
  1573.         if (!$em || !$goc) {
  1574.             return $this->render('@Buddybee/pages/404NotFound.html.twig', array(
  1575.                 'page_title' => '404 Not Found',
  1576.             ));
  1577.         }
  1578.         $data SalesOrderM::GetDeliveryReceiptDetails($em$deliveryReceiptId);
  1579.         if (empty($data) || empty($data['rel_data'])) {
  1580.             return $this->render('@Buddybee/pages/404NotFound.html.twig', array(
  1581.                 'page_title' => '404 Not Found',
  1582.             ));
  1583.         }
  1584.         $companyId $data['rel_data']->getCompanyId() ? $data['rel_data']->getCompanyId() : 1;
  1585.         $companyData Company::getCompanyData($em$companyId);
  1586.         return $this->render('@Sales/pages/print/public_delivery_receipt_view.html.twig', array(
  1587.             'page_title' => 'Delivery Receipt ' $data['doc_hash'],
  1588.             'data' => $data,
  1589.             'company_data' => $companyData,
  1590.             'company_name' => $companyData $companyData->getName() : '',
  1591.             'company_address' => $companyData $companyData->getAddress() : '',
  1592.             'company_image' => $companyData $companyData->getImage() : '',
  1593.             'invoice_footer' => $companyData $companyData->getInvoiceFooter() : '',
  1594.             'public_id' => $id,
  1595.             'appId' => $appId,
  1596.             'is_logged_in' => $request->getSession()->get(UserConstants::USER_LOGIN_ID) ? 0,
  1597.         ));
  1598.     }
  1599.     public function DeliveryReceiptPublicSignAction(Request $request$id)
  1600.     {
  1601.         $acknowledgementService $this->get('app.public_document_acknowledgement_service');
  1602.         $idData $acknowledgementService->decodePublicDocumentPayload($request$id);
  1603.         $deliveryReceiptId = isset($idData['id']) ? $idData['id'] : 0;
  1604.         $appId = isset($idData['appId']) ? $idData['appId'] : $request->get('appId');
  1605.         if (!$deliveryReceiptId || !$appId) {
  1606.             $this->addFlash('error''Public delivery receipt link is invalid.');
  1607.             return $this->redirectToRoute('public_delivery_receipt_view', array('id' => $id));
  1608.         }
  1609.         list($em$goc) = $acknowledgementService->getPublicDocumentEntityManager($appId);
  1610.         if (!$em || !$goc) {
  1611.             $this->addFlash('error''Company context could not be resolved for this public link.');
  1612.             return $this->redirectToRoute('public_delivery_receipt_view', array('id' => $id));
  1613.         }
  1614.         $deliveryReceipt $em->getRepository('ApplicationBundle\\Entity\\DeliveryReceipt')->findOneBy(array(
  1615.             'deliveryReceiptId' => $deliveryReceiptId
  1616.         ));
  1617.         if (!$deliveryReceipt) {
  1618.             $this->addFlash('error''Delivery receipt was not found.');
  1619.             return $this->redirectToRoute('public_delivery_receipt_view', array('id' => $id));
  1620.         }
  1621.         $signatureBase64 $acknowledgementService->resolveReceiverSignatureBase64($request$em);
  1622.         if ($signatureBase64 === '') {
  1623.             $this->addFlash('error''A valid signature or authenticated approval hash is required.');
  1624.             return $this->redirectToRoute('public_delivery_receipt_view', array('id' => $id));
  1625.         }
  1626.         $acknowledgementService->persistAcknowledgement($em$deliveryReceipt$signatureBase64);
  1627.         $this->addFlash('success''Receiver signature saved successfully.');
  1628.         return $this->redirect($this->generateUrl('public_delivery_receipt_view', array('id' => $id)) . '#receiver-signature');
  1629.     }
  1630.     public function StockTransferPublicViewAction(Request $request$id)
  1631.     {
  1632.         $acknowledgementService $this->get('app.public_document_acknowledgement_service');
  1633.         $idData $acknowledgementService->decodePublicDocumentPayload($request$id);
  1634.         $stockTransferId = isset($idData['id']) ? $idData['id'] : 0;
  1635.         $appId = isset($idData['appId']) ? $idData['appId'] : $request->get('appId');
  1636.         if (!$stockTransferId || !$appId) {
  1637.             return $this->render('@Buddybee/pages/404NotFound.html.twig', array(
  1638.                 'page_title' => '404 Not Found',
  1639.             ));
  1640.         }
  1641.         list($em$goc) = $acknowledgementService->getPublicDocumentEntityManager($appId);
  1642.         if (!$em || !$goc) {
  1643.             return $this->render('@Buddybee/pages/404NotFound.html.twig', array(
  1644.                 'page_title' => '404 Not Found',
  1645.             ));
  1646.         }
  1647.         $data Inventory::GetStockTransferDetails($em$stockTransferId);
  1648.         if (empty($data) || empty($data['general_data'])) {
  1649.             return $this->render('@Buddybee/pages/404NotFound.html.twig', array(
  1650.                 'page_title' => '404 Not Found',
  1651.             ));
  1652.         }
  1653.         $companyId $data['general_data']->getCompanyId() ? $data['general_data']->getCompanyId() : 1;
  1654.         $companyData Company::getCompanyData($em$companyId);
  1655.         return $this->render('@Inventory/pages/print/public_stock_transfer_view.html.twig', array(
  1656.             'page_title' => 'Stock Transfer ' $data['general_data']->getDocumentHash(),
  1657.             'data' => $data,
  1658.             'company_data' => $companyData,
  1659.             'company_name' => $companyData $companyData->getName() : '',
  1660.             'company_address' => $companyData $companyData->getAddress() : '',
  1661.             'company_image' => $companyData $companyData->getImage() : '',
  1662.             'invoice_footer' => $companyData $companyData->getInvoiceFooter() : '',
  1663.             'public_id' => $id,
  1664.             'appId' => $appId,
  1665.             'is_logged_in' => $request->getSession()->get(UserConstants::USER_LOGIN_ID) ? 0,
  1666.         ));
  1667.     }
  1668.     public function StockTransferPublicSignAction(Request $request$id)
  1669.     {
  1670.         $acknowledgementService $this->get('app.public_document_acknowledgement_service');
  1671.         $idData $acknowledgementService->decodePublicDocumentPayload($request$id);
  1672.         $stockTransferId = isset($idData['id']) ? $idData['id'] : 0;
  1673.         $appId = isset($idData['appId']) ? $idData['appId'] : $request->get('appId');
  1674.         if (!$stockTransferId || !$appId) {
  1675.             $this->addFlash('error''Public stock transfer link is invalid.');
  1676.             return $this->redirectToRoute('public_stock_transfer_view', array('id' => $id));
  1677.         }
  1678.         list($em$goc) = $acknowledgementService->getPublicDocumentEntityManager($appId);
  1679.         if (!$em || !$goc) {
  1680.             $this->addFlash('error''Company context could not be resolved for this public link.');
  1681.             return $this->redirectToRoute('public_stock_transfer_view', array('id' => $id));
  1682.         }
  1683.         $stockTransfer $em->getRepository('ApplicationBundle\\Entity\\StockTransfer')->findOneBy(array(
  1684.             'stockTransferId' => $stockTransferId
  1685.         ));
  1686.         if (!$stockTransfer) {
  1687.             $this->addFlash('error''Stock transfer note was not found.');
  1688.             return $this->redirectToRoute('public_stock_transfer_view', array('id' => $id));
  1689.         }
  1690.         $signatureBase64 $acknowledgementService->resolveReceiverSignatureBase64($request$em);
  1691.         if ($signatureBase64 === '') {
  1692.             $this->addFlash('error''A valid signature or authenticated approval hash is required.');
  1693.             return $this->redirectToRoute('public_stock_transfer_view', array('id' => $id));
  1694.         }
  1695.         $acknowledgementService->persistAcknowledgement($em$stockTransfer$signatureBase64);
  1696.         $this->addFlash('success''Receiver signature saved successfully.');
  1697.         return $this->redirect($this->generateUrl('public_stock_transfer_view', array('id' => $id)) . '#receiver-signature');
  1698.     }
  1699.     /**
  1700.      * S8 â€” Customer-facing public project progress view.
  1701.      * Public route â€” no SessionCheckInterface here. Encrypted URL payload carries
  1702.      * { id, appId, t (token), dt }; appId is used to switch DB connection per tenant.
  1703.      */
  1704.     public function PublicProjectViewAction(Request $request$id)
  1705.     {
  1706.         $acknowledgementService $this->get('app.public_document_acknowledgement_service');
  1707.         $idData $acknowledgementService->decodePublicDocumentPayload($request$id);
  1708.         $shareId = isset($idData['id']) ? (int)$idData['id'] : 0;
  1709.         $appId   = isset($idData['appId']) ? $idData['appId'] : $request->get('appId');
  1710.         $token   = isset($idData['t']) ? $idData['t'] : '';
  1711.         if (!$shareId || !$appId) {
  1712.             return $this->renderPublicProjectUnavailable('Project link not found''This public project link is incomplete or invalid. Please check the URL or request a new link.'404);
  1713.         }
  1714.         try {
  1715.             list($em$goc) = $acknowledgementService->getPublicDocumentEntityManager($appId);
  1716.         } catch (\Exception $e) {
  1717.             return $this->renderPublicProjectUnavailable('No permission''We could not verify access for this project link. Please request a fresh authorized link.'403);
  1718.         }
  1719.         if (!$em || !$goc) {
  1720.             return $this->renderPublicProjectUnavailable('No permission''We could not verify access for this project link. Please request a fresh authorized link.'403);
  1721.         }
  1722.         // Look up share by ID (encryption protects the URL).
  1723.         try {
  1724.             $share $em->getRepository('ApplicationBundle\\Entity\\ProjectPublicShare')->findOneBy(array(
  1725.                 'projectPublicShareId' => $shareId,
  1726.             ));
  1727.         } catch (\Exception $e) {
  1728.             return $this->renderPublicProjectUnavailable('Project link not found''This project share could not be located. Please request a new link from the project team.'404);
  1729.         }
  1730.         if (!$share || $share->getDeleteFlag() == || !$share->getIsActive()) {
  1731.             return $this->renderPublicProjectUnavailable('Share link unavailable''This project link is no longer active or you do not have permission to view it.'403);
  1732.         }
  1733.         // Token check â€” regenerating the share invalidates old encrypted URLs.
  1734.         if ($token && $share->getShareToken() && $token !== $share->getShareToken()) {
  1735.             return $this->renderPublicProjectUnavailable('Share link has changed''This link was regenerated and is no longer valid. Please use the latest project link.'403);
  1736.         }
  1737.         // Expiry check.
  1738.         if ($share->getExpiryDate() && $share->getExpiryDate() < new \DateTime()) {
  1739.             return $this->renderPublicProjectUnavailable('Share link expired''This public project link has expired. Please request a new link from the project team.'410);
  1740.         }
  1741.         $clientIp $request->getClientIp();
  1742.         try {
  1743.             $data = \ApplicationBundle\Modules\Project\ProjectM::GetPublicProjectViewDataByShare($em$share$clientIp);
  1744.         } catch (\Exception $e) {
  1745.             return $this->renderPublicProjectUnavailable('Project unavailable''The project record could not be loaded right now. Please try again later or request a fresh link.'404);
  1746.         }
  1747.         if (!$data) {
  1748.             return $this->renderPublicProjectUnavailable('Project not found''The project record linked to this share is not available.'404);
  1749.         }
  1750.         return $this->render('@Project/pages/public/public_project_view.html.twig', array(
  1751.             'page_title' => $data['shareTitle'],
  1752.             'data'       => $data,
  1753.         ));
  1754.     }
  1755.     private function renderPublicProjectUnavailable($title$message$statusCode 404)
  1756.     {
  1757.         return $this->render('@Project/pages/public/public_project_unavailable.html.twig', array(
  1758.             'page_title' => $title,
  1759.             'title' => $title,
  1760.             'message' => $message,
  1761.             'statusCode' => $statusCode,
  1762.         ), new Response(''$statusCode));
  1763.     }
  1764.     public function sendSmsSocketAction(Request $request$id 0)
  1765.     {
  1766.         $msg $request->request->get('message'$request->query->get('message'''));
  1767.         $phoneNumber $request->request->get('phoneNumber'$request->query->get('phoneNumber'''));
  1768.         $emitMarker $request->request->get('emitMarker'$request->query->get('emitMarker''_SEND_TEXT_TO_MOBILE_'));
  1769.         $sendType $request->request->get('sendType'$request->query->get('sendType''all'));
  1770.         $socketUserIds $request->request->get('socketUserIds'$request->query->get('socketUserIds', []));
  1771.         if ($msg != '' && $phoneNumber != '') {
  1772.             $searchVal = [];
  1773.             $replaceVal = [];
  1774.             $msg str_replace($searchVal$replaceVal$msg);
  1775.             System::SendSmsBySocket($this->container->getParameter('notification_enabled'), $msg$phoneNumber$emitMarker$sendType$socketUserIds$deviceId "_DEFAULT_");
  1776. //            return 0;
  1777.         }
  1778.         if ($request->request->get('returnJson'$request->query->get('returnJson'0)) == 1) {
  1779.             return new JsonResponse(array(
  1780.                 'success' => true,
  1781.                 'message' => $msg,
  1782.                 'phoneNumber' => $phoneNumber,
  1783.                 'sendType' => $sendType,
  1784.                 'emitMarker' => $emitMarker,
  1785. //                        'documentHash' => $order->getDocumentHash(),
  1786. //                'documentId' => $receiptId,
  1787. //                'documentIdPadded' => str_pad($receiptId, 8, '0', STR_PAD_LEFT),
  1788. //
  1789. //                'viewUrl' => $url . "/" . $receiptId,
  1790.             ));
  1791.         } else return $this->render('@Buddybee/pages/send_text_by_socket.html.twig', array(
  1792.             'page_title' => 'Send Text',
  1793.             'message' => $msg,
  1794.             'phoneNumber' => $phoneNumber,
  1795.             'sendType' => $sendType,
  1796.             'emitMarker' => $emitMarker,
  1797.         ));
  1798.     }
  1799.     public function sendPushNotificationSocketAction(Request $request$id 0)
  1800.     {
  1801.         $tokens explode(','$request->query->get('tokens'''));
  1802.         $options $request->request->get('options', [
  1803.             'em' => null,
  1804.             'isBuddybee' => 1,
  1805.             'targetRoute' => 'consultancy_session',
  1806.             'targetUrl' => 'consultancy_session',
  1807.             'targetPath' => 'consultancy_session',
  1808.             'targetId' => 0,
  1809.             'meetingId' => 0,
  1810.             'userId' => 0,
  1811.             'applicantId' => 0,
  1812.             'taggedUserIds' => [],
  1813.             'type' => 0,
  1814.             'expireTs' => 0,
  1815.             'userIdPrefixForSocket' => 'BBEE_',
  1816.             'emitMarker' => '_SOCKET_NOTIFICATION_HERE_',
  1817.             'dataObj' => array(
  1818.                 'isBuddybee' => 1,
  1819.                 'targetRoute' => 'consultancy_session',
  1820.                 'targetUrl' => 'consultancy_session',
  1821.                 'targetPath' => 'consultancy_session',
  1822.                 'targetMobileAppPath' =>
  1823.                     isset(GeneralConstant::$MOBILE_APP_PATH_BY_ROUTING['consultancy_session']) ? GeneralConstant::$MOBILE_APP_PATH_BY_ROUTING['consultancy_session'] : '',
  1824.                 'targetId' => 0,
  1825.                 'meetingId' => 0,
  1826.                 'userId' => 0,
  1827.                 'applicantId' => 0,
  1828.                 'taggedUserIds' => [0],
  1829.             ),
  1830.             'firebasePushData' => array(
  1831.                 'notification' => array(
  1832.                     'title' => $request->query->get('title''TITLE HERE'),
  1833.                     'body' => $request->query->get('body''MY NOTIFICATION BODY')
  1834.                 ),
  1835.                 'data' => [
  1836. //                                'score' => '850',
  1837. //                                'time' => '2:45',
  1838.                     'route' => 'https://buddybee.eu/consultancy_session/1'
  1839.                 ],
  1840.                 'android' => [
  1841.                     'notification' => [
  1842.                         // icon: 'stock_ticker_update',
  1843.                         // color: '#7e55c3',
  1844.                         'imageUrl' => 'https://buddybee.eu/buddybee_assets/images/author-1.png'
  1845.                     ]
  1846.                 ],
  1847.                 'topic' => 'SESSION BOOKED',
  1848.                 'tokens' => $tokens,
  1849.             )
  1850.         ]);
  1851.         if (is_string($options)) $options json_decode($optionstrue);
  1852.         System::AddNewNotificationUpdated(
  1853.             $this->container->getParameter('notification_enabled'),
  1854.             $this->container->getParameter('notification_server'),
  1855.             0//appId
  1856.             0,//company Id
  1857.             '',
  1858.             GeneralConstant::NOTIFICATION_TYPE_ALERT,//type
  1859.             "",
  1860.             "Schedule Confirmed",
  1861.             'emit',
  1862.             0,
  1863.             1,
  1864.             $options
  1865.         );
  1866.         return new JsonResponse($options);
  1867.     }
  1868.     public function GetEntitySignatureAction(Request $request)
  1869.     {
  1870.         $details_ids = [];
  1871.         $em $this->getDoctrine()->getManager('company_group');
  1872.         $retData = [
  1873.             'success' => false,
  1874.         ];
  1875.         if ($request->isMethod('POST')) {
  1876.             $query_here $em->getRepository('CompanyGroupBundle\\Entity\\EntityEncryptedSignature')
  1877.                 ->findOneBy(
  1878.                     array(
  1879.                         'userId' => $request->request->get('userId'0)
  1880.                     )
  1881.                 );
  1882.             if ($query_here) {
  1883.                 $retData['success'] = true;
  1884.                 $retData['data'] = $query_here->getData();
  1885.             }
  1886.         }
  1887.         return new JsonResponse($retData);
  1888.     }
  1889.     public function SwitchAppAction(Request $request)
  1890.     {
  1891.         $details_ids = [];
  1892.         $em $this->getDoctrine()->getManager('company_group');
  1893. //        $this->get('url_encryptor')->decrypt($encData);
  1894.         $retData = [
  1895.             'success' => false,
  1896.                    ];
  1897.         return new JsonResponse($retData);
  1898.     }
  1899.     public function DebugTestAction(Request $request)
  1900.     {
  1901.         $details_ids = [];
  1902.         $em $this->getDoctrine()->getManager('company_group');
  1903.         $ggDT=array('pika'=>'chu');
  1904.         $encData=$request->get('encData',$this->get('url_encryptor')->encrypt(json_encode($ggDT)));
  1905. //        $this->get('url_encryptor')->decrypt($encData);
  1906.         $retData = [
  1907.             'success' => false,
  1908.             'test' => $this->get('url_encryptor')->decrypt($encData),
  1909.             'test1' => $this->get('url_encryptor')->decrypt('RmVlU0RBdnMrWnFySFU0UXZOeGZSRTNPL3h2dzN0aytlN2U2MjNBam16VlNtTUozZzU3VDc2K2lpYWc1THp5T0phQXI3RnMvRTRCNUxGQUp2dE1KeXdwTW0xV1lrMzlSMGFxVXVGQzZPVnliVTBJQw'),
  1910.             'test2' => json_decode($this->get('url_encryptor')->decrypt($encData),true),
  1911.         ];
  1912.         return new JsonResponse($retData);
  1913.     }
  1914.     public function ViewDocByGlobalIdAction(Request $request$trackingId ''$appMarker '')
  1915.     {
  1916. //        $em = $this->getDoctrine()->getManager();
  1917.         $globalIdStr $request->get('globalIdStr''');
  1918.         $globalIdData MiscActions::getExpandedDataFromGlobalId($globalIdStr);
  1919.         $routeName $request->attributes->get('_route');
  1920.         $pbcId 0;
  1921.         $goc 0;
  1922.         $appId 0//these we will need eventually
  1923.         $productByCodeData = [];
  1924.         $productByCodeDataObj = [];
  1925.         $productByData = [];
  1926.         $trackingData = [];
  1927.         $productName '';
  1928.         $em_goc $this->getDoctrine()->getManager('company_group');
  1929.         $em_goc->getConnection()->connect();
  1930.         $gocEnabled 0;
  1931.         if ($this->container->hasParameter('entity_group_enabled'))
  1932.             $gocEnabled $this->container->getParameter('entity_group_enabled');
  1933.         if ($gocEnabled == 1)
  1934.             $connected $em_goc->getConnection()->isConnected();
  1935.         else
  1936.             $connected false;
  1937.         $goc null;
  1938.         if ($connected) {
  1939.             if ($routeName == 'track_after_sales_service_product_serial_query') {
  1940.                 if ($appMarker != '') {
  1941.                     $goc $em_goc
  1942.                         ->getRepository("CompanyGroupBundle\\Entity\\CompanyGroup")
  1943.                         ->findOneBy(
  1944.                             array(
  1945.                                 'companyGroupHash' => $appMarker
  1946.                             )
  1947.                         );
  1948.                 }
  1949.             } else {
  1950. //                if($trackingId !='' && stripos($trackingId,'TR') !== false)
  1951. //                {
  1952. //                    $appId=substr($trackingId,2,5);
  1953. //                    $pbcId=substr($trackingId,7,8);
  1954. //                    if(!is_numeric($appId))
  1955. //                        $appId=0;
  1956. //                }
  1957.                 $goc $em_goc
  1958.                     ->getRepository("CompanyGroupBundle\\Entity\\CompanyGroup")
  1959.                     ->findOneBy(
  1960.                         array(
  1961.                             'appId' => $appId
  1962.                         )
  1963.                     );
  1964.             }
  1965.         }
  1966.         if ($goc) {
  1967.             $appId $goc->getAppId();
  1968.             $appMarker $goc->getCompanyGroupHash();
  1969.             $connector $this->container->get('application_connector');
  1970.             $connector->resetConnection(
  1971.                 'default',
  1972.                 $goc->getDbName(),
  1973.                 $goc->getDbUser(),
  1974.                 $goc->getDbPass(),
  1975.                 $goc->getDbHost(),
  1976.                 $reset true
  1977.             );
  1978.         }
  1979.         //now get related data if $goc exists
  1980.         $em $this->getDoctrine()->getManager();
  1981.         $responseData = [
  1982.             'page_title' => 'Entity Setup',
  1983.             'appId' => $appId,
  1984.             'appMarker' => $appMarker,
  1985.         ];
  1986.         return $this->render(
  1987. //            '@System/pages/public:entity_setup.html.twig',
  1988.             '@Application/pages/central/setup_app.html.twig',
  1989.             $responseData
  1990.         );
  1991.     }
  1992.     public function EntitySetupAction(Request $request$trackingId ''$appMarker '')
  1993.     {
  1994. //        $em = $this->getDoctrine()->getManager();
  1995.         $routeName $request->attributes->get('_route');
  1996.         $pbcId 0;
  1997.         $goc 0;
  1998.         $appId 0//these we will need eventually
  1999.         $productByCodeData = [];
  2000.         $productByCodeDataObj = [];
  2001.         $productByData = [];
  2002.         $trackingData = [];
  2003.         $productName '';
  2004.         $em_goc $this->getDoctrine()->getManager('company_group');
  2005.         $em_goc->getConnection()->connect();
  2006.         $gocEnabled 0;
  2007.         if ($this->container->hasParameter('entity_group_enabled'))
  2008.             $gocEnabled $this->container->getParameter('entity_group_enabled');
  2009.         if ($gocEnabled == 1)
  2010.             $connected $em_goc->getConnection()->isConnected();
  2011.         else
  2012.             $connected false;
  2013.         $goc null;
  2014.         if ($connected) {
  2015.             if ($routeName == 'track_after_sales_service_product_serial_query') {
  2016.                 if ($appMarker != '') {
  2017.                     $goc $em_goc
  2018.                         ->getRepository("CompanyGroupBundle\\Entity\\CompanyGroup")
  2019.                         ->findOneBy(
  2020.                             array(
  2021.                                 'companyGroupHash' => $appMarker
  2022.                             )
  2023.                         );
  2024.                 }
  2025.             } else {
  2026. //                if($trackingId !='' && stripos($trackingId,'TR') !== false)
  2027. //                {
  2028. //                    $appId=substr($trackingId,2,5);
  2029. //                    $pbcId=substr($trackingId,7,8);
  2030. //                    if(!is_numeric($appId))
  2031. //                        $appId=0;
  2032. //                }
  2033.                 $goc $em_goc
  2034.                     ->getRepository("CompanyGroupBundle\\Entity\\CompanyGroup")
  2035.                     ->findOneBy(
  2036.                         array(
  2037.                             'appId' => $appId
  2038.                         )
  2039.                     );
  2040.             }
  2041.         }
  2042.         if ($goc) {
  2043.             $appId $goc->getAppId();
  2044.             $appMarker $goc->getCompanyGroupHash();
  2045.             $connector $this->container->get('application_connector');
  2046.             $connector->resetConnection(
  2047.                 'default',
  2048.                 $goc->getDbName(),
  2049.                 $goc->getDbUser(),
  2050.                 $goc->getDbPass(),
  2051.                 $goc->getDbHost(),
  2052.                 $reset true
  2053.             );
  2054.         }
  2055.         //now get related data if $goc exists
  2056.         $em $this->getDoctrine()->getManager();
  2057.         $responseData = [
  2058.             'page_title' => 'Entity Setup',
  2059.             'appId' => $appId,
  2060.             'appMarker' => $appMarker,
  2061.         ];
  2062.         return $this->render(
  2063. //            '@System/pages/public:entity_setup.html.twig',
  2064.             '@Application/pages/central/setup_app.html.twig',
  2065.             $responseData
  2066.         );
  2067.     }
  2068.     public function AfterSalesServiceTrackingAction(Request $request$trackingId ''$appMarker '')
  2069.     {
  2070. //        $em = $this->getDoctrine()->getManager();
  2071.         $routeName $request->attributes->get('_route');
  2072.         $pbcId 0;
  2073.         $goc 0;
  2074.         $appId 0//these we will need eventually
  2075.         $productByCodeData = [];
  2076.         $productByCodeDataObj = [];
  2077.         $productByData = [];
  2078.         $trackingData = [];
  2079.         $productName '';
  2080.         $em_goc $this->getDoctrine()->getManager('company_group');
  2081.         $em_goc->getConnection()->connect();
  2082.         $gocEnabled 0;
  2083.         if ($this->container->hasParameter('entity_group_enabled'))
  2084.             $gocEnabled $this->container->getParameter('entity_group_enabled');
  2085.         if ($gocEnabled == 1)
  2086.             $connected $em_goc->getConnection()->isConnected();
  2087.         else
  2088.             $connected false;
  2089.         $goc null;
  2090.         if ($connected) {
  2091.             if ($routeName == 'track_after_sales_service_product_serial_query') {
  2092.                 if ($appMarker != '') {
  2093.                     $goc $em_goc
  2094.                         ->getRepository("CompanyGroupBundle\\Entity\\CompanyGroup")
  2095.                         ->findOneBy(
  2096.                             array(
  2097.                                 'companyGroupHash' => $appMarker
  2098.                             )
  2099.                         );
  2100.                 }
  2101.             } else {
  2102.                 if ($trackingId != '' && stripos($trackingId'TR') !== false) {
  2103.                     $appId substr($trackingId25);
  2104.                     $pbcId substr($trackingId78);
  2105.                     if (!is_numeric($appId))
  2106.                         $appId 0;
  2107.                 }
  2108.                 $goc $em_goc
  2109.                     ->getRepository("CompanyGroupBundle\\Entity\\CompanyGroup")
  2110.                     ->findOneBy(
  2111.                         array(
  2112.                             'appId' => $appId
  2113.                         )
  2114.                     );
  2115.             }
  2116.         }
  2117.         if ($goc) {
  2118.             $appId $goc->getAppId();
  2119.             $appMarker $goc->getCompanyGroupHash();
  2120.             $connector $this->container->get('application_connector');
  2121.             $connector->resetConnection(
  2122.                 'default',
  2123.                 $goc->getDbName(),
  2124.                 $goc->getDbUser(),
  2125.                 $goc->getDbPass(),
  2126.                 $goc->getDbHost(),
  2127.                 $reset true
  2128.             );
  2129.         }
  2130.         //now get related data if $goc exists
  2131.         $em $this->getDoctrine()->getManager();
  2132.         if ($trackingId != '') {
  2133.             if (is_numeric($trackingId)) {
  2134.                 $productByCodeDataQuery $em->getRepository('ApplicationBundle\\Entity\\ProductByCode')
  2135.                     ->createQueryBuilder('p')
  2136.                     ->where("( p.salesCode like '%$trackingId%'
  2137.                                     or p.imei1 like '%$trackingId%'
  2138.                                     or p.imei2 like '%$trackingId%'
  2139.                                     or p.imei3 like '%$trackingId%'
  2140.                                     or p.imei4 like '%$trackingId%'
  2141.                                     or p.serialNo like '%$trackingId%'
  2142.                                     )")
  2143.                     ->getQuery()
  2144.                     ->getResult();
  2145.                 if (!empty($productByCodeDataQuery))
  2146.                     $productByCodeData $productByCodeDataQuery[0];
  2147.             } else if ($pbcId != 0) {
  2148.                 $productByCodeData $em
  2149.                     ->getRepository("ApplicationBundle\\Entity\\ProductByCode")
  2150.                     ->findOneBy(
  2151.                         array(
  2152.                             'productByCodeId' => $pbcId
  2153.                         )
  2154.                     );
  2155.             } else {
  2156.                 $productByCodeData $em
  2157.                     ->getRepository("ApplicationBundle\\Entity\\ProductByCode")
  2158.                     ->findOneBy(
  2159.                         array(
  2160.                             'afterSalesTrackingId' => $trackingId
  2161.                         )
  2162.                     );
  2163.             }
  2164.         }
  2165.         if (!empty($productByCodeData)) {
  2166.             $productData $em
  2167.                 ->getRepository("ApplicationBundle\\Entity\\InvProducts")
  2168.                 ->findOneBy(
  2169.                     array(
  2170.                         'id' => $productByCodeData->getProductId()
  2171.                     )
  2172.                 );
  2173.             if ($productData) {
  2174.                 $productName $productData->getName();
  2175.             }
  2176.             $trackingData json_decode($productByCodeData->getAfterSalesServiceTrackingStatusData(), true);
  2177.             if ($trackingData == null)
  2178.                 $trackingData = [];
  2179.             $productByCodeDataObj['productByCodeId'] = $productByCodeData->getProductByCodeId();
  2180.             $productByCodeDataObj['salesCode'] = $productByCodeData->getSalesCode();
  2181.             $productByCodeDataObj['serialNo'] = $productByCodeData->getSerialNo();
  2182.             $productByCodeDataObj['imei1'] = $productByCodeData->getImei1();
  2183.             $productByCodeDataObj['imei2'] = $productByCodeData->getImei2();
  2184.             $productByCodeDataObj['imei3'] = $productByCodeData->getImei3();
  2185.             $productByCodeDataObj['imei4'] = $productByCodeData->getImei4();
  2186.         }
  2187.         $responseData = [
  2188.             'page_title' => 'Service Tracking',
  2189.             'productByCodeData' => $productByCodeData,
  2190.             'productByCodeDataObj' => $productByCodeDataObj,
  2191.             'trackingData' => $trackingData,
  2192.             'productName' => $productName,
  2193.             'appId' => $appId,
  2194.             'appMarker' => $appMarker,
  2195.             'trackingId' => $trackingId,
  2196.         ];
  2197.         return $this->render(
  2198.             '@Sales/pages/report/after_sales_service_tracking_public.html.twig',
  2199.             $responseData
  2200.         );
  2201.     }
  2202.     public function MeetingConfirmationAction(Request $request)
  2203.     {
  2204. //        $em = $this->getDoctrine()->getManager();
  2205.         $resMessage "";
  2206.         $resMessageType "";
  2207.         if ($request->query->get('appId') != && $request->query->get('appId') != "") {
  2208.             $em_goc $this->getDoctrine()->getManager('company_group');
  2209.             $em_goc->getConnection()->connect();
  2210.             $gocEnabled 0;
  2211.             if ($this->container->hasParameter('entity_group_enabled'))
  2212.                 $gocEnabled $this->container->getParameter('entity_group_enabled');
  2213.             if ($gocEnabled == 1)
  2214.                 $connected $em_goc->getConnection()->isConnected();
  2215.             else
  2216.                 $connected false;
  2217.             $goc false;
  2218.             if ($connected) {
  2219.                 $goc $em_goc
  2220.                     ->getRepository("CompanyGroupBundle\\Entity\\CompanyGroup")
  2221.                     ->findOneBy(
  2222.                         array(
  2223.                             'appId' => $request->query->get('appId')
  2224.                         )
  2225.                     );
  2226.             }
  2227.             if ($goc) {
  2228.                 $connector $this->container->get('application_connector');
  2229.                 $connector->resetConnection(
  2230.                     'default',
  2231.                     $goc->getDbName(),
  2232.                     $goc->getDbUser(),
  2233.                     $goc->getDbPass(),
  2234.                     $goc->getDbHost(),
  2235.                     $reset true
  2236.                 );
  2237.             }
  2238.         }
  2239.         $em $this->getDoctrine()->getManager();
  2240.         $response HumanResource::scheduledMeetingEmailResponse($em$request);
  2241.         if ($response['isDelayedResponse']) {
  2242.             $resMessageType " You are Late !";
  2243.             $resMessage "Delayed response! Your response will not be considered!";
  2244.         } else {
  2245.             $accept HumanResourceConstant::$meetingEmailResposeType['accepted'];
  2246.             $decline HumanResourceConstant::$meetingEmailResposeType['declined'];
  2247.             if ($response['responseType'] == $accept) {
  2248.                 $resMessageType " Success !";
  2249.                 $resMessage "You have Accepted the Meeting invitation!";
  2250.             }
  2251.             if ($response['responseType'] == $decline) {
  2252.                 $resMessageType " Declined !";
  2253.                 $resMessage "You have Declined the Meeting invitation!";
  2254.             }
  2255.         }
  2256.         return $this->render(
  2257.             '@Application/pages/human_resource/views/meeting_confirmation_response.html.twig',
  2258.             [
  2259.                 'page_title' => 'Meeting Confirmation',
  2260.                 'message' => $resMessage,
  2261.                 'messageType' => $resMessageType,
  2262.             ]
  2263.         );
  2264.     }
  2265.     public function PublicMeetingViewAction(Request $request$id 0)
  2266.     {
  2267. //        $em = $this->getDoctrine()->getManager();
  2268.         $resMessage "";
  2269.         $resMessageType "";
  2270.         $appId 0;
  2271.         if ($request->query->get('appId') != && $request->query->get('appId') != "") {
  2272.             $em_goc $this->getDoctrine()->getManager('company_group');
  2273.             $em_goc->getConnection()->connect();
  2274.             $gocEnabled 0;
  2275.             $appId $request->query->get('appId');
  2276.             if ($this->container->hasParameter('entity_group_enabled'))
  2277.                 $gocEnabled $this->container->getParameter('entity_group_enabled');
  2278.             if ($gocEnabled == 1)
  2279.                 $connected $em_goc->getConnection()->isConnected();
  2280.             else
  2281.                 $connected false;
  2282.             $goc false;
  2283.             if ($connected) {
  2284.                 $goc $em_goc
  2285.                     ->getRepository("CompanyGroupBundle\\Entity\\CompanyGroup")
  2286.                     ->findOneBy(
  2287.                         array(
  2288.                             'appId' => $request->query->get('appId')
  2289.                         )
  2290.                     );
  2291.             }
  2292.             if ($goc) {
  2293.                 $connector $this->container->get('application_connector');
  2294.                 $connector->resetConnection(
  2295.                     'default',
  2296.                     $goc->getDbName(),
  2297.                     $goc->getDbUser(),
  2298.                     $goc->getDbPass(),
  2299.                     $goc->getDbHost(),
  2300.                     $reset true
  2301.                 );
  2302.             }
  2303.         }
  2304.         $em $this->getDoctrine()->getManager();
  2305.         $companyId $this->getLoggedUserCompanyId($request);
  2306.         $response HumanResource::TwigDataForScheduledMeetingView($em$request$id);
  2307.         return $this->render(
  2308.             '@Application/pages/human_resource/views/scheduled_meeting_view.html.twig',
  2309.             [
  2310.                 'page_title' => 'View Scheduled Meeting',
  2311.                 'publicView' => 1,
  2312.                 'appId' => $response['appId'],
  2313.                 'displayName' => $request->query->has('name') ? $request->query->get('name') : 'Meeting User',
  2314.                 'duration' => $response['duration'],
  2315.                 'meeting_data' => $response['meeting_data'],
  2316.                 'agenda_list' => $response['agenda_list'],
  2317.                 'id' => $id,
  2318.                 'approval_data' => $response['approval_data'],
  2319.                 'document_log' => $response['document_log'],
  2320.                 'approval_status' => $response['approval_status'],
  2321.                 'created_by' => $response['created_by'],
  2322.                 'updated_at' => $response['updated_at'],
  2323.                 'auto_created' => 0,
  2324.             ]
  2325.         );
  2326.     }
  2327.     public function SystemChangeLogViewAction(Request $request$id 0)
  2328.     {
  2329. //        $em = $this->getDoctrine()->getManager();
  2330.         $resMessage "";
  2331.         $resMessageType "";
  2332.         $appId 0;
  2333.         $change_log_dir $this->container->getParameter('kernel.root_dir') . '/../src/ApplicationBundle/Resources/config/changelog/';
  2334. //        if (!file_exists($change_log_dir)) {
  2335. //            mkdir($change_log_dir, 0777, true);
  2336. //        }
  2337.         $path $change_log_dir '/changelog.json';
  2338.         $content file_exists($path) ? file_get_contents($path) : null;
  2339.         $contentData = array();
  2340. //        $contentData = array(
  2341. //
  2342. //
  2343. //            [
  2344. //                'versionNumber'=>'1.2.56',
  2345. //                'severity'=>'major',
  2346. //                'releaseDate'=>'12 Mar, 2022',
  2347. //                'changeLog'=>[
  2348. //                    ['type'=>'feature','text'=>'Pika is chu'],
  2349. //                    ['type'=>'bugfix','text'=>'Pika is lu'],
  2350. //                ]
  2351. //            ],
  2352. //            [
  2353. //                'versionNumber'=>'1.2.45',
  2354. //                'severity'=>'major',
  2355. //                'releaseDate'=>'01 Jan, 2022',
  2356. //                'changeLog'=>[
  2357. //                    ['type'=>'feature','text'=>'Pika is chu'],
  2358. //                    ['type'=>'bugfix','text'=>'Pika is lu'],
  2359. //                ]
  2360. //            ],
  2361. //
  2362. //        );
  2363.         if ($content)
  2364.             $contentData json_decode($contenttrue);
  2365.         return $this->render(
  2366.             '@System/pages/systemChangeLog.html.twig',
  2367.             [
  2368.                 'page_title' => 'Change Log',
  2369.                 'contentData' => $contentData,
  2370.                 'content' => $content,
  2371.                 'path' => $path,
  2372.             ]
  2373.         );
  2374.     }
  2375.     public function WellKnownAssetLinksAction(Request $request$id 0)
  2376.     {
  2377.         return new JsonResponse(array(
  2378.             [
  2379.                 "relation" => [
  2380.                     "delegate_permission/common.handle_all_urls"
  2381.                 ],
  2382.                 "target" => [
  2383.                     "namespace" => "android_app",
  2384.                     "package_name" => "eu.buddybee.consultancy",
  2385.                     "sha256_cert_fingerprints" => [
  2386.                         "B4:06:4A:7C:76:C8:E0:F1:18:00:F8:6E:1D:2F:11:1E:0C:1D:11:63:B5:95:08:DE:ED:63:A1:5F:4E:7E:A9:69"
  2387.                     ]
  2388.                 ]
  2389.             ]
  2390.         ));
  2391.     }
  2392.     public function GenericDataTableAjaxCompanyGroupAction(Request $request)
  2393.     {
  2394.         $em $this->getDoctrine()->getManager('company_group');
  2395.         $companyId $this->getLoggedUserCompanyId($request);
  2396.         $listData MiscActions::GetDtDataAjax($em$request->isMethod('POST') ? 'POST' 'GET'$request->request$companyId$this->container->getParameter('kernel.root_dir'));
  2397.         if ($request->isMethod('POST') && $request->request->has('returnJson')) {
  2398.             if ($request->query->has('dataTableQry')) {
  2399.                 return new JsonResponse(
  2400.                     $listData
  2401.                 );
  2402.             }
  2403.         }
  2404.         $data = [];
  2405.         return new JsonResponse(
  2406.             $listData
  2407.         );
  2408. //        return $this->render('@Inventory/pages/views/delivery_receipts.html.twig',
  2409. //            array(
  2410. //                'page_title' => 'Delivery Receipts',
  2411. //                'data' => $data,
  2412. //
  2413. //            )
  2414. //        );
  2415.     }
  2416.     public function GenericDataTableAjaxPublicAction(Request $request)
  2417.     {
  2418.         $em $this->getDoctrine()->getManager();
  2419.         $companyId $this->getLoggedUserCompanyId($request);
  2420.         $listData MiscActions::GetDtDataAjax($em$request->isMethod('POST') ? 'POST' 'GET'$request->request$companyId$this->container->getParameter('kernel.root_dir'));
  2421.         if ($request->isMethod('POST') && $request->request->has('returnJson')) {
  2422.             if ($request->query->has('dataTableQry')) {
  2423.                 return new JsonResponse(
  2424.                     $listData
  2425.                 );
  2426.             }
  2427.         }
  2428.         $data = [];
  2429.         return new JsonResponse(
  2430.             $listData
  2431.         );
  2432. //        return $this->render('@Inventory/pages/views/delivery_receipts.html.twig',
  2433. //            array(
  2434. //                'page_title' => 'Delivery Receipts',
  2435. //                'data' => $data,
  2436. //
  2437. //            )
  2438. //        );
  2439.     }
  2440.     public function MarkBuddybeeEventAction(Request $request$id 0)
  2441.     {
  2442.         $em $this->getDoctrine()->getManager('company_group');
  2443.         $applicantId $request->request->get('applicantId'0);
  2444.         $eventId $request->request->get('eventId'0);
  2445.         $relId $request->request->get('relId'0);
  2446.         $followStatus $request->request->get('followStatus''_UNCHANGED_');
  2447.         $skipStatus $request->request->get('skipStatus''_UNCHANGED_');
  2448.         $attendingStatus $request->request->get('attendingStatus''_UNCHANGED_');
  2449.         $successStatus false;
  2450.         if ($applicantId != && $eventId != 0) {
  2451.             $applicant $em
  2452.                 ->getRepository("CompanyGroupBundle\\Entity\\EntityApplicantDetails")
  2453.                 ->findOneBy(
  2454.                     array(
  2455.                         'applicantId' => $applicantId
  2456.                     )
  2457.                 );
  2458.             if ($applicant) {
  2459.                 $successStatus true;
  2460.                 if ($followStatus != '_UNCHANGED_') {
  2461.                     $currData json_decode($applicant->getFollowingEventIds(), true);
  2462.                     if ($currData == null$currData = [];
  2463.                     if ($followStatus == 1)
  2464.                         $currData array_merge($currDataarray_diff([$eventId], $currData));
  2465.                     else
  2466.                         $currData array_diff($currData, [$eventId]);
  2467.                     $applicant->setFollowingEventIds(json_encode($currData));
  2468.                 }
  2469.                 if ($followStatus != '_UNCHANGED_') {
  2470.                     $currData json_decode($applicant->getSkipEventIds(), true);
  2471.                     if ($currData == null$currData = [];
  2472.                     if ($skipStatus == 1)
  2473.                         $currData array_merge($currDataarray_diff([$eventId], $currData));
  2474.                     else
  2475.                         $currData array_diff($currData, [$eventId]);
  2476.                     $applicant->setSkipEventIds(json_encode($currData));
  2477.                     if ($skipStatus == 1) {
  2478.                         $currData json_decode($applicant->getFollowingEventIds(), true);
  2479.                         if ($currData == null$currData = [];
  2480.                         if ($followStatus == 1)
  2481.                             $currData array_merge($currDataarray_diff([$eventId], $currData));
  2482.                         else
  2483.                             $currData array_diff($currData, [$eventId]);
  2484.                         $applicant->setFollowingEventIds(json_encode($currData));
  2485.                         $currData json_decode($applicant->getAttendingEventIds(), true);
  2486.                         if ($currData == null$currData = [];
  2487.                         $currData array_diff($currData, [$eventId]);
  2488.                         $applicant->setAttendingEventIds(json_encode($currData));
  2489.                     }
  2490.                 }
  2491.                 if ($attendingStatus != '_UNCHANGED_') {
  2492.                     if ($attendingStatus == 1) {
  2493.                         $currData json_decode($applicant->getAttendingEventIds(), true);
  2494.                         if ($currData == null$currData = [];
  2495.                         $currData array_merge($currDataarray_diff([$eventId], $currData));
  2496.                         $applicant->setAttendingEventIds(json_encode($currData));
  2497.                     } else {
  2498.                         $currData json_decode($applicant->getAttendingEventIds(), true);
  2499.                         if ($currData == null$currData = [];
  2500.                         $currData array_diff($currData, [$eventId]);
  2501.                         $applicant->setAttendingEventIds(json_encode($currData));
  2502.                     }
  2503.                 }
  2504.             }
  2505.             $em->flush();
  2506.         }
  2507.         return new JsonResponse(
  2508.             array(
  2509.                 'success' => $successStatus,
  2510.                 'applicantId' => $applicantId,
  2511.                 'relId' => $relId,
  2512.                 'followStatus' => $followStatus,
  2513.                 'attendingStatus' => $attendingStatus,
  2514.             )
  2515.         );
  2516. //        return $this->render('@Inventory/pages/views/delivery_receipts.html.twig',
  2517. //            array(
  2518. //                'page_title' => 'Delivery Receipts',
  2519. //                'data' => $data,
  2520. //
  2521. //            )
  2522. //        );
  2523.     }
  2524.     public function MarkEntityNotificationAction(Request $request$id 0)
  2525.     {
  2526.         $em $this->getDoctrine()->getManager('company_group');
  2527.         $notificationIds $request->request->get('notificationIds', []);
  2528.         if ($notificationIds == '_ALL_'$notificationIds = [];
  2529.         $applicantId $request->request->get('applicantId'0);
  2530.         $readFlag $request->request->get('readFlag''_UNCHANGED_');
  2531.         $seenFlag $request->request->get('seenFlag''_UNCHANGED_');
  2532.         $deleteFlag $request->request->get('deleteFlag''0');
  2533.         $successStatus false;
  2534.         if (is_string($notificationIds)) $notificationIds json_decode($notificationIdstrue);
  2535.         if ($notificationIds == null$notificationIds = [];
  2536.         $qryArray = [];
  2537.         if (!empty($notificationIds))
  2538.             $qryArray['id'] = $notificationIds;
  2539.         if ($applicantId != 0)
  2540.             $qryArray['applicantId'] = $applicantId;
  2541.         $notifications $em
  2542.             ->getRepository("CompanyGroupBundle\\Entity\\EntityNotification")
  2543.             ->findBy(
  2544.                 $qryArray
  2545.             );
  2546.         foreach ($notifications as $notification) {
  2547.             if ($deleteFlag == 1) {
  2548.                 $em->remove($notification);
  2549.                 $em->flush();
  2550.             } else {
  2551.                 if ($readFlag != '_UNCHANGED_')
  2552.                     $notification->setReadFlag($readFlag);
  2553.                 if ($seenFlag != '_UNCHANGED_')
  2554.                     $notification->setSeenFlag($seenFlag);
  2555.             }
  2556.             $successStatus true;
  2557.         }
  2558.         $em->flush();
  2559.         return new JsonResponse(
  2560.             array(
  2561.                 'success' => $successStatus,
  2562.                 'applicantId' => $applicantId,
  2563.                 'notificationIds' => $notificationIds,
  2564.                 'readFlag' => $readFlag,
  2565.                 'seenFlag' => $seenFlag,
  2566.             )
  2567.         );
  2568. //        return $this->render('@Inventory/pages/views/delivery_receipts.html.twig',
  2569. //            array(
  2570. //                'page_title' => 'Delivery Receipts',
  2571. //                'data' => $data,
  2572. //
  2573. //            )
  2574. //        );
  2575.     }
  2576.     public function initiateAdminAction(Request $request)
  2577.     {
  2578.         $em $this->getDoctrine()->getManager();
  2579.         MiscActions::initiateAdminUser($em);
  2580.         $this->addFlash(
  2581.             'success',
  2582.             'The Action was Successful.'
  2583.         );
  2584.         return $this->redirectToRoute('user_login');
  2585.     }
  2586.     public function DemoDataFlutterTestAction(Request $request)
  2587.     {
  2588.         return new JsonResponse(
  2589.             array(
  2590.                 ['id' => 1'name' => 'Property 1''rating' => '4.5''description' => 'lorem ipsum 1''imageUrl' => 'https://picsum.photos/200/300'],
  2591.                 ['id' => 2'name' => 'Property 2''rating' => '4.1''description' => 'lorem ipsum 2''imageUrl' => 'https://picsum.photos/200/300'],
  2592.                 ['id' => 3'name' => 'Property 3''rating' => '4.2''description' => 'lorem ipsum 4''imageUrl' => 'https://picsum.photos/200/300'],
  2593.                 ['id' => 4'name' => 'Property 4''rating' => '2.5''description' => 'lorem ipsum 3''imageUrl' => 'https://picsum.photos/200/300'],
  2594.             )
  2595.         );
  2596.     }
  2597.     public function selectDataAjaxAction(Request $request$queryStr '',
  2598.                                                  $version 'latest',
  2599.                                                  $identifier '_default_',
  2600.                                                  $apiKey '_ignore_'
  2601.     )
  2602.     {
  2603.         $em $this->getDoctrine()->getManager();
  2604.         $em_goc $this->getDoctrine()->getManager('company_group');
  2605.         $companyId 0;
  2606.         $skipCurrentUserIdRestriction $request->get('skipCurrentUserIdRestriction'0);
  2607.         $dataOnly $request->get('dataOnly'0);
  2608.         $skipCurrentEmployeeIdRestriction $request->get('skipCurrentEmployeeIdRestriction'0);
  2609.         $skipCurrentUserLoginIdRestriction $request->get('skipCurrentUserLoginIdRestriction'0);
  2610.         $currentUserId $request->getSession()->get(UserConstants::USER_ID0);
  2611.         $currentEmployeeId $request->getSession()->get(UserConstants::USER_EMPLOYEE_ID0);
  2612.         $currentUserLoginIds = [];
  2613.         if ($request->request->get('entity_group'0)) {
  2614.             $companyId 0;
  2615.             $em $this->getDoctrine()->getManager('company_group');
  2616.         } else {
  2617.             if ($request->request->get('appId'0) != 0) {
  2618.                 $gocEnabled 0;
  2619.                 if ($this->container->hasParameter('entity_group_enabled'))
  2620.                     $gocEnabled $this->container->getParameter('entity_group_enabled');
  2621.                 else
  2622.                     $gocEnabled 1;
  2623.                 if ($gocEnabled == 1) {
  2624.                     $dataToConnect System::changeDoctrineManagerByAppId(
  2625.                         $this->getDoctrine()->getManager('company_group'),
  2626.                         $gocEnabled,
  2627.                         $request->request->get('appId'0)
  2628.                     );
  2629.                     if (!empty($dataToConnect)) {
  2630.                         $connector $this->container->get('application_connector');
  2631.                         $connector->resetConnection(
  2632.                             'default',
  2633.                             $dataToConnect['dbName'],
  2634.                             $dataToConnect['dbUser'],
  2635.                             $dataToConnect['dbPass'],
  2636.                             $dataToConnect['dbHost'],
  2637.                             $reset true
  2638.                         );
  2639.                         $em $this->getDoctrine()->getManager();
  2640.                     }
  2641.                 }
  2642.             } else if ($request->getSession()->get(UserConstants::USER_APP_ID) != && $request->getSession()->get(UserConstants::USER_APP_ID) != null) {
  2643.                 $gocEnabled 0;
  2644.                 if ($this->container->hasParameter('entity_group_enabled'))
  2645.                     $gocEnabled $this->container->getParameter('entity_group_enabled');
  2646.                 else
  2647.                     $gocEnabled 1;
  2648.                 if ($gocEnabled == 1) {
  2649.                     $dataToConnect System::changeDoctrineManagerByAppId(
  2650.                         $this->getDoctrine()->getManager('company_group'),
  2651.                         $gocEnabled,
  2652.                         $request->getSession()->get(UserConstants::USER_APP_ID)
  2653.                     );
  2654.                     if (!empty($dataToConnect)) {
  2655.                         $connector $this->container->get('application_connector');
  2656.                         $connector->resetConnection(
  2657.                             'default',
  2658.                             $dataToConnect['dbName'],
  2659.                             $dataToConnect['dbUser'],
  2660.                             $dataToConnect['dbPass'],
  2661.                             $dataToConnect['dbHost'],
  2662.                             $reset true
  2663.                         );
  2664.                         $em $this->getDoctrine()->getManager();
  2665.                     }
  2666.                 }
  2667.             }
  2668.             $companyId $this->getLoggedUserCompanyId($request);
  2669.         }
  2670.         $configData = [];
  2671.         $isSingleDataset 1;
  2672.         $dataSet $request->request->has('dataset') ? $request->request->get('dataset') : [];
  2673.         if (is_string($dataSet)) $dataSet json_decode($dataSettrue);
  2674.         $valuePairs $request->get('valuePairs', []);
  2675.         if (is_string($valuePairs)) $valuePairs json_decode($valuePairstrue);
  2676.         $allResult = [];
  2677.         $datasetFromConfig = [];
  2678.         if ($identifier != '_default_') {
  2679.             $config_file $this->container->getParameter('kernel.root_dir') . '/../src/ApplicationBundle/Resources/config/api/' $identifier 'Config.json';
  2680.             if (!file_exists($config_file)) {
  2681.             } else {
  2682.                 $fileText file_get_contents($config_file);
  2683.                 //now replace any value pairs
  2684.                 foreach ($valuePairs as $kkeeyy => $vvaalluuee) {
  2685.                     if (is_array($vvaalluuee)) {
  2686.                         if (isset($vvaalluuee['value']) && isset($vvaalluuee['type'])) {
  2687.                             if ($vvaalluuee['type'] == 'array'$fileText str_ireplace('_' $kkeeyy '_'json_encode($vvaalluuee['value']), $fileText);
  2688.                             if ($vvaalluuee['type'] == 'value'$fileText str_ireplace('_' $kkeeyy '_'$vvaalluuee['value'], $fileText);
  2689.                             if ($vvaalluuee['type'] == 'text')  $fileText str_ireplace('_' $kkeeyy '_'$vvaalluuee['value'], $fileText);
  2690.                         } else {
  2691.                             $fileText str_ireplace('_' $kkeeyy '_'json_encode($vvaalluuee), $fileText);
  2692.                         }
  2693.                     }
  2694.                     else
  2695.                         $fileText str_ireplace('_' $kkeeyy '_'$vvaalluuee$fileText);
  2696.                 }
  2697.                 $fileText str_ireplace('_query_'$request->get('query'$queryStr), $fileText);
  2698.                 $fileText str_ireplace('_itemLimit_'$request->get('itemLimit''_all_'), $fileText);
  2699.                 $fileText str_ireplace('_offset_'$request->get('offset', ($request->get('itemLimit'10)) * ($request->get('page'1) - 1)), $fileText);
  2700.                 if (!(strpos($fileText'_CURRENT_USER_LOGIN_IDS_') === false) && $skipCurrentUserLoginIdRestriction == 0) {
  2701.                     $userInfo = [];
  2702.                     if ($request->getSession()->get(UserConstants::USER_TYPE0) == UserConstants::USER_TYPE_APPLICANT) {
  2703.                         $userInfo $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityLoginLog')->findBy(
  2704.                             array('userId' => $currentUserId)
  2705.                         );
  2706.                     } else {
  2707.                         $userInfo $em->getRepository('ApplicationBundle\\Entity\\SysLoginLog')->findBy(
  2708.                             array('userId' => $currentUserId)
  2709.                         );
  2710.                     }
  2711.                     foreach ($userInfo as $uLogininfo) {
  2712.                         $currentUserLoginIds[] = $uLogininfo->getLoginId();
  2713.                     }
  2714.                     $fileText str_ireplace('_CURRENT_USER_LOGIN_IDS_'json_encode($currentUserLoginIds), $fileText);
  2715.                 } else {
  2716.                     $fileText str_ireplace('_CURRENT_USER_LOGIN_IDS_''_EMPTY_'$fileText);
  2717.                 }
  2718.                 if (!(strpos($fileText'_CURRENT_USER_ID_') === false) && $skipCurrentUserIdRestriction == 0) {
  2719.                     $fileText str_ireplace('_CURRENT_USER_ID_'$currentUserId$fileText);
  2720.                 } else {
  2721.                     $fileText str_ireplace('_CURRENT_USER_ID_''_EMPTY_'$fileText);
  2722.                 }
  2723.                 if (!(strpos($fileText'_CURRENT_USER_EMPLOYEE_ID_') === false) && $skipCurrentEmployeeIdRestriction == 0) {
  2724.                     if ((strpos($fileText'skipCurrentEmployeeIdRestriction') === false)) {
  2725.                         $fileText str_ireplace('_CURRENT_USER_EMPLOYEE_ID_'$currentEmployeeId$fileText);
  2726.                     } else {
  2727.                         $fileText str_ireplace('_CURRENT_USER_EMPLOYEE_ID_''_EMPTY_'$fileText);
  2728.                     }
  2729.                 } else {
  2730.                     $fileText str_ireplace('_CURRENT_USER_EMPLOYEE_ID_''_EMPTY_'$fileText);
  2731.                 }
  2732.                 if ($fileText)
  2733.                     $datasetFromConfig json_decode($fileTexttrue);
  2734.                 $skipCurrentUserIdRestriction = isset($datasetFromConfig['skipCurrentUserIdRestriction']) ? $datasetFromConfig['skipCurrentUserIdRestriction'] : $skipCurrentUserIdRestriction;
  2735.                 $skipCurrentEmployeeIdRestriction = isset($datasetFromConfig['skipCurrentEmployeeIdRestriction']) ? $datasetFromConfig['skipCurrentEmployeeIdRestriction'] : $skipCurrentEmployeeIdRestriction;
  2736.                 $skipCurrentUserLoginIdRestriction = isset($datasetFromConfig['skipCurrentUserLoginIdRestriction']) ? $datasetFromConfig['skipCurrentUserLoginIdRestriction'] : $skipCurrentUserLoginIdRestriction;
  2737.             }
  2738.         }
  2739.         if ($dataSet == null$dataSet = [];
  2740. //        return new JsonResponse(array(
  2741. //            'queryStr'=>$queryStr
  2742. //        ));
  2743.         if (!empty($datasetFromConfig)) {
  2744.             if (isset($datasetFromConfig['tableName'])) {
  2745.                 $isSingleDataset 1;
  2746.                 $dataSet[] = $datasetFromConfig;
  2747.             } else {
  2748.                 if (count($datasetFromConfig) == 1)
  2749.                     $isSingleDataset 1;
  2750.                 $dataSet $datasetFromConfig;
  2751.             }
  2752.         }
  2753.         if (empty($dataSet)) {
  2754.             $isSingleDataset 1;
  2755.             $singleDataSet = array(
  2756.                 "valueField" => $request->request->has('valueField') ? $request->request->get('valueField') : 'id',
  2757.                 "query" => $request->get('query'$queryStr),
  2758.                 "headMarkers" => $request->get('headMarkers'''),
  2759.                 "headMarkersStrictMatch" => $request->get('headMarkersStrictMatch'0),
  2760.                 "itemLimit" => $request->request->has('itemLimit') ? $request->request->get('itemLimit') : 25,
  2761.                 "selectorId" => $request->request->has('selectorId') ? $request->request->get('selectorId') : '_NONE_',
  2762.                 "textField" => $request->request->has('textField') ? $request->request->get('textField') : 'name',
  2763.                 "tableName" => $request->request->has('tableName') ? $request->request->get('tableName') : '',
  2764.                 "isMultiple" => $request->request->has('isMultiple') ? $request->request->get('isMultiple') : 0,
  2765.                 "orConditions" => $request->request->has('orConditions') ? $request->request->get('orConditions') : [],
  2766.                 "andConditions" => $request->request->has('andConditions') ? $request->request->get('andConditions') : [],
  2767.                 "andOrConditions" => $request->request->has('andOrConditions') ? $request->request->get('andOrConditions') : [],
  2768.                 "mustConditions" => $request->request->has('mustConditions') ? $request->request->get('mustConditions') : [],
  2769.                 "joinTableData" => $request->request->has('joinTableData') ? $request->request->get('joinTableData') : [],
  2770.                 "renderTextFormat" => $request->request->has('renderTextFormat') ? $request->request->get('renderTextFormat') : '',
  2771.                 "setDataForSingle" => $request->request->has('setDataForSingle') ? $request->request->get('setDataForSingle') : 0,
  2772.                 "dataId" => $request->request->has('dataId') ? $request->request->get('dataId') : 0,
  2773.                 "lastChildrenOnly" => $request->request->has('lastChildrenOnly') ? $request->request->get('lastChildrenOnly') : 0,
  2774.                 "parentOnly" => $request->request->has('parentOnly') ? $request->request->get('parentOnly') : 0,
  2775.                 "parentIdField" => $request->request->has('parentIdField') ? $request->request->get('parentIdField') : 'parent_id',
  2776.                 "skipDefaultCompanyId" => $request->request->has('skipDefaultCompanyId') ? $request->request->get('skipDefaultCompanyId') : 1,
  2777.                 "offset" => $request->request->has('offset') ? $request->request->get('offset') : 0,
  2778.                 "returnTotalMatchedEntriesFlag" => $request->request->has('returnTotalMatched') ? $request->request->get('returnTotalMatched') : 0,
  2779.                 "nextOffset" => 0,
  2780.                 "totalMatchedEntries" => 0,
  2781.                 "convertToObject" => $request->request->has('convertToObject') ? $request->request->get('convertToObject') : [],
  2782.                 "convertDateToStringFieldList" => $request->request->has('convertDateToStringFieldList') ? $request->request->get('convertDateToStringFieldList') : [],
  2783.                 "orderByConditions" => $request->request->has('orderByConditions') ? $request->request->get('orderByConditions') : [],
  2784.                 "convertToUrl" => $request->request->has('convertToUrl') ? $request->request->get('convertToUrl') : [],
  2785.                 "fullPathList" => $request->request->has('fullPathList') ? $request->request->get('fullPathList') : [],
  2786.                 "ret_data" => $request->request->has('ret_data') ? $request->request->get('ret_data') : [],
  2787.             );
  2788.             $dataSet[] = $singleDataSet;
  2789.         }
  2790. //        $lastResult = [
  2791. //            'identifier' => $identifier,
  2792. //            'dataSet' => $dataSet,
  2793. //        ];
  2794. //        return new JsonResponse($lastResult);
  2795.         $userId $request->getSession()->get(UserConstants::USER_ID);
  2796. //        public static function selectDataSystem($em, $queryStr = '_EMPTY_', $data = [],$userId=0)
  2797.         foreach ($dataSet as $dsIndex => $dataConfig) {
  2798.             $companyId 0;
  2799.             $queryStringIndividual $queryStr;
  2800.             $data = [];
  2801.             $data_by_id = [];
  2802.             $setValueArray = [];
  2803.             $silentChangeSelectize 0;
  2804.             $setValue 0;
  2805.             $setValueType 0;// 0 for id , 1 for query
  2806.             $selectAll 0;
  2807.             if ($queryStringIndividual == '_EMPTY_')
  2808.                 $queryStringIndividual '';
  2809.             if (isset($dataConfig['query']))
  2810.                 $queryStringIndividual $dataConfig['query'];
  2811.             if ($queryStringIndividual == '_EMPTY_')
  2812.                 $queryStringIndividual '';
  2813.             $queryStringIndividual str_replace('_FSLASH_''/'$queryStringIndividual);
  2814.             if ($queryStringIndividual === '#setValue:') {
  2815.                 $queryStringIndividual '';
  2816.             }
  2817.             if (!(strpos($queryStringIndividual'_silent_change_') === false)) {
  2818.                 $silentChangeSelectize 1;
  2819.                 $queryStringIndividual str_ireplace('_silent_change_'''$queryStringIndividual);
  2820.             }
  2821.             if (!(strpos($queryStringIndividual'#setValue:') === false)) {
  2822.                 $setValueArrayBeforeFilter explode(','str_replace('#setValue:'''$queryStringIndividual));
  2823.                 foreach ($setValueArrayBeforeFilter as $svf) {
  2824.                     if ($svf == '_ALL_') {
  2825.                         $selectAll 1;
  2826.                         $setValueArray = [];
  2827.                         continue;
  2828.                     }
  2829.                     if (is_numeric($svf)) {
  2830.                         $setValueArray[] = ($svf 1);
  2831.                         $setValue $svf 1;
  2832.                     }
  2833.                 }
  2834.                 $queryStringIndividual '';
  2835.             }
  2836.             $valueField = isset($dataConfig['valueField']) ? $dataConfig['valueField'] : 'id';
  2837.             $headMarkers = isset($dataConfig['headMarkers']) ? $dataConfig['headMarkers'] : ''//Special Field
  2838.             $headMarkersStrictMatch = isset($dataConfig['headMarkersStrictMatch']) ? $dataConfig['headMarkersStrictMatch'] : 0//Special Field
  2839.             $itemLimit = isset($dataConfig['itemLimit']) ? $dataConfig['itemLimit'] : 25;
  2840.             $selectorId = isset($dataConfig['selectorId']) ? $dataConfig['selectorId'] : '_NONE_';
  2841.             $textField = isset($dataConfig['textField']) ? $dataConfig['textField'] : 'name';
  2842.             $table = isset($dataConfig['tableName']) ? $dataConfig['tableName'] : '';
  2843.             $isMultiple = isset($dataConfig['isMultiple']) ? $dataConfig['isMultiple'] : 0;
  2844.             $orConditions = isset($dataConfig['orConditions']) ? $dataConfig['orConditions'] : [];
  2845.             $andConditions = isset($dataConfig['andConditions']) ? $dataConfig['andConditions'] : [];
  2846.             $andOrConditions = isset($dataConfig['andOrConditions']) ? $dataConfig['andOrConditions'] : [];
  2847.             $mustConditions = isset($dataConfig['mustConditions']) ? $dataConfig['mustConditions'] : [];
  2848.             $joinTableData = isset($dataConfig['joinTableData']) ? $dataConfig['joinTableData'] : [];
  2849.             $renderTextFormat = isset($dataConfig['renderTextFormat']) ? $dataConfig['renderTextFormat'] : '';
  2850.             $setDataForSingle = isset($dataConfig['setDataForSingle']) ? $dataConfig['setDataForSingle'] : 0;
  2851.             $dataId = isset($dataConfig['dataId']) ? $dataConfig['dataId'] : 0;
  2852.             $lastChildrenOnly = isset($dataConfig['lastChildrenOnly']) ? $dataConfig['lastChildrenOnly'] : 0;
  2853.             $parentOnly = isset($dataConfig['parentOnly']) ? $dataConfig['parentOnly'] : 0;
  2854.             $parentIdField = isset($dataConfig['parentIdField']) ? $dataConfig['parentIdField'] : 'parent_id';
  2855.             $skipDefaultCompanyId = isset($dataConfig['skipDefaultCompanyId']) ? $dataConfig['skipDefaultCompanyId'] : 1;
  2856.             $offset = isset($dataConfig['offset']) ? $dataConfig['offset'] : 0;
  2857.             $returnTotalMatchedEntriesFlag = isset($dataConfig['returnTotalMatched']) ? $dataConfig['returnTotalMatched'] : 0;
  2858.             $nextOffset 0;
  2859.             $totalMatchedEntries 0;
  2860.             $convertToObjectFieldList = isset($dataConfig['convertToObject']) ? $dataConfig['convertToObject'] : [];
  2861.             $convertDateToStringFieldList = isset($dataConfig['convertDateToStringFieldList']) ? $dataConfig['convertDateToStringFieldList'] : [];
  2862.             $orderByConditions = isset($dataConfig['orderByConditions']) ? $dataConfig['orderByConditions'] : [];
  2863.             $convertToUrl = isset($dataConfig['convertToUrl']) ? $dataConfig['convertToUrl'] : [];
  2864.             $fullPathList = isset($dataConfig['fullPathList']) ? $dataConfig['fullPathList'] : [];
  2865.             if (is_string($andConditions)) $andConditions json_decode($andConditionstrue);
  2866.             if (is_string($orConditions)) $orConditions json_decode($orConditionstrue);
  2867.             if (is_string($andOrConditions)) $andOrConditions json_decode($andOrConditionstrue);
  2868.             if (is_string($mustConditions)) $mustConditions json_decode($mustConditionstrue);
  2869.             if (is_string($joinTableData)) $joinTableData json_decode($joinTableDatatrue);
  2870.             if (is_string($convertToObjectFieldList)) $convertToObjectFieldList json_decode($convertToObjectFieldListtrue);
  2871.             if (is_string($orderByConditions)) $orderByConditions json_decode($orderByConditionstrue);
  2872.             if (is_string($convertToUrl)) $convertToUrl json_decode($convertToUrltrue);
  2873.             if (is_string($fullPathList)) $fullPathList json_decode($fullPathListtrue);
  2874. //            return new JsonResponse(array(
  2875. //                'dataSet'=>$dataSet,
  2876. //                'dataConfig'=>$dataConfig,
  2877. //                'hi'=>$this->container->getParameter('kernel.root_dir') . '/../src/ApplicationBundle/Resources/config/api/' . $identifier . 'Config.json',
  2878. //                'hiD'=>file_get_contents($this->container->getParameter('kernel.root_dir') . '/../src/ApplicationBundle/Resources/config/api/' . $identifier . 'Config.json')
  2879. //            ));
  2880.             if ($table == '') {
  2881.                 $lastResult = array(
  2882.                     'success' => false,
  2883.                     'currentTs' => (new \Datetime())->format('U'),
  2884.                     'isMultiple' => $isMultiple,
  2885.                     'setValueArray' => $setValueArray,
  2886.                     'setValue' => $setValue,
  2887.                     'data' => $data,
  2888.                     'dataId' => $dataId,
  2889.                     'selectorId' => $selectorId,
  2890.                     'dataById' => $data_by_id,
  2891.                     'selectedId' => 0,
  2892.                     'ret_data' => isset($dataConfig['ret_data']) ? $dataConfig['ret_data'] : [],
  2893.                 );
  2894.             } else {
  2895.                 $restrictionData = array(
  2896. //            'table'=>'relevantField in restriction'
  2897.                     'warehouse_action' => 'warehouseActionIds',
  2898.                     'branch' => 'branchIds',
  2899.                     'warehouse' => 'warehouseIds',
  2900.                     'production_process_settings' => 'productionProcessIds',
  2901.                 );
  2902.                 $restrictionIdList = [];
  2903.                 $filterQryForCriteria "select ";
  2904.                 $selectQry "";
  2905. //        $selectQry=" `$table`.* ";
  2906.                 $selectFieldList = isset($dataConfig['selectFieldList']) ? $dataConfig['selectFieldList'] : ['*'];
  2907.                 $selectPrefix = isset($dataConfig['selectPrefix']) ? $dataConfig['selectPrefix'] : '';
  2908.                 if (is_string($selectFieldList)) $selectFieldList json_decode($selectFieldListtrue);
  2909.                 foreach ($selectFieldList as $selField) {
  2910.                     if ($selectQry != '')
  2911.                         $selectQry .= ", ";
  2912.                     if ($selField == '*')
  2913.                         $selectQry .= " `$table`.$selField ";
  2914.                     else if ($selField == 'count(*)' || $selField == '_RESULT_COUNT_') {
  2915.                         if ($selectPrefix == '')
  2916.                             $selectQry .= " count(*)  ";
  2917.                         else
  2918.                             $selectQry .= (" count(*  )  $selectPrefix"_RESULT_COUNT_ ");
  2919.                     } else {
  2920.                         if ($selectPrefix == '')
  2921.                             $selectQry .= " `$table`.`$selField` ";
  2922.                         else
  2923.                             $selectQry .= (" `$table`.`$selField`  $selectPrefix"$selField ");
  2924.                     }
  2925.                 }
  2926.                 $joinQry " from $table ";
  2927. //        $filterQryForCriteria = "select * from $table ";
  2928.                 foreach ($joinTableData as $joinIndex => $joinTableDatum) {
  2929. //            $conditionStr.=' 1=1 ';
  2930.                     $joinTableName = isset($joinTableDatum['tableName']) ? $joinTableDatum['tableName'] : '=';
  2931.                     $joinTableAlias $joinTableName '_' $joinIndex;
  2932.                     $joinTablePrimaryField = isset($joinTableDatum['joinFieldPrimary']) ? $joinTableDatum['joinFieldPrimary'] : ''//field of main table
  2933.                     $joinTableOnField = isset($joinTableDatum['joinOn']) ? $joinTableDatum['joinOn'] : ''//field of joining table
  2934.                     $fieldJoinType = isset($joinTableDatum['fieldJoinType']) ? $joinTableDatum['fieldJoinType'] : '=';
  2935.                     $tableJoinType = isset($joinTableDatum['tableJoinType']) ? $joinTableDatum['tableJoinType'] : 'join';//or inner join
  2936.                     $selectFieldList = isset($joinTableDatum['selectFieldList']) ? $joinTableDatum['selectFieldList'] : ['*'];
  2937.                     $selectPrefix = isset($joinTableDatum['selectPrefix']) ? $joinTableDatum['selectPrefix'] : '';
  2938.                     $joinMustConditions = isset($joinTableDatum['joinMustConditions']) ? $joinTableDatum['joinMustConditions'] : [];
  2939.                     $joinAndConditions = isset($joinTableDatum['joinAndConditions']) ? $joinTableDatum['joinAndConditions'] : [];
  2940.                     $joinAndOrConditions = isset($joinTableDatum['joinAndOrConditions']) ? $joinTableDatum['joinAndOrConditions'] : [];
  2941.                     $joinOrConditions = isset($joinTableDatum['joinOrConditions']) ? $joinTableDatum['joinOrConditions'] : [];
  2942.                     if (is_string($joinAndConditions)) $joinAndConditions json_decode($joinAndConditionstrue);
  2943.                     if (is_string($joinMustConditions)) $joinMustConditions json_decode($joinMustConditionstrue);
  2944.                     if (is_string($joinAndOrConditions)) $joinAndOrConditions json_decode($joinAndOrConditionstrue);
  2945.                     if (is_string($joinOrConditions)) $joinOrConditions json_decode($joinOrConditionstrue);
  2946.                     foreach ($selectFieldList as $selFieldFull) {
  2947.                         $selFieldArray=explode(' ',$selFieldFull);
  2948.                         $selField=$selFieldArray[0];
  2949.                         $selFieldAlias=$selFieldArray[1]??'';
  2950.                         if ($selField == '*')
  2951.                             $selectQry .= ", `$joinTableAlias`.$selField ";
  2952.                         else if ($selField == 'count(*)' || $selField == '_RESULT_COUNT_') {
  2953.                             if ($selectPrefix == '')
  2954.                                 $selectQry .= ", count(`$joinTableAlias`." $joinTableOnField ")  ";
  2955.                             else
  2956.                                 $selectQry .= (", count(`$joinTableAlias`." $joinTableOnField ")  $selectPrefix"_RESULT_COUNT_ ");
  2957.                         } else {
  2958.                             if ($selectPrefix == '')
  2959.                                 $selectQry .= ", `$joinTableAlias`.`$selField`  $selFieldAlias";
  2960.                             else
  2961.                                 $selectQry .= (", `$joinTableAlias`.`$selField`  $selectPrefix"$selField ");
  2962.                         }
  2963.                     }
  2964.                     $joinQry .= $tableJoinType $joinTableName $joinTableAlias on  ";
  2965. //            if($joinTablePrimaryField!='')
  2966. //                $joinQry .= "  `$joinTableAlias`.`$joinTableOnField` $fieldJoinType `$table`.`$joinTablePrimaryField` ";
  2967. //            $joinAndString = '';
  2968.                     $joinMustString '';
  2969.                     if ($joinTablePrimaryField != '') {
  2970.                         if (!(strpos($joinTablePrimaryField'.') === false)) {
  2971.                             $joinQry .= "  `$joinTableAlias`.`$joinTableOnField`  $fieldJoinType $joinTablePrimaryField ";
  2972.                         } else
  2973.                             $joinQry .= "  `$joinTableAlias`.`$joinTableOnField`  $fieldJoinType `$table`.`$joinTablePrimaryField` ";
  2974.                     }
  2975.                     foreach ($joinMustConditions as $mustCondition) {
  2976. //            $conditionStr.=' 1=1 ';
  2977.                         $ctype = isset($mustCondition['type']) ? $mustCondition['type'] : '=';
  2978.                         $cfield = isset($mustCondition['field']) ? $mustCondition['field'] : '';
  2979.                         $aliasInCondition $table;
  2980.                         if (!(strpos($cfield'.') === false)) {
  2981.                             $fullCfieldArray explode('.'$cfield);
  2982.                             $aliasInCondition $fullCfieldArray[0];
  2983.                             $cfield $fullCfieldArray[1];
  2984.                         }
  2985.                         $cvalue = isset($mustCondition['value']) ? $mustCondition['value'] : $queryStringIndividual;
  2986.                         if ($cfield != '' && $cvalue != '_EMPTY_' && $cvalue != '' && $cvalue != '#setValue:') {
  2987.                             if ($joinMustString != '')
  2988.                                 $joinMustString .= " and ";
  2989.                             if ($ctype == 'like') {
  2990.                                 $joinMustString .= ("`$joinTableAlias`.$cfield like '%" $cvalue "%' ");
  2991.                                 $wordsBySpaces explode(' '$cvalue);
  2992.                                 foreach ($wordsBySpaces as $word) {
  2993.                                     if ($joinMustString != '')
  2994.                                         $joinMustString .= " and ";
  2995.                                     $joinMustString .= ("`$joinTableAlias`.$cfield like '%" $word "%' ");
  2996.                                 }
  2997.                             } else if ($ctype == 'not like') {
  2998.                                 $joinMustString .= ("`$joinTableAlias`.$cfield not like '%" $cvalue "%' ");
  2999.                                 $wordsBySpaces explode(' '$cvalue);
  3000.                                 foreach ($wordsBySpaces as $word) {
  3001.                                     if ($joinMustString != '')
  3002.                                         $joinMustString .= " and ";
  3003.                                     $joinMustString .= ("`$joinTableAlias`.$cfield not like '%" $word "%' ");
  3004.                                 }
  3005.                             } else if ($ctype == 'not_in') {
  3006.                                 $joinMustString .= " ( ";
  3007.                                 if (in_array('null'$cvalue)) {
  3008.                                     $joinMustString .= " `$joinTableAlias`.$cfield is not null";
  3009.                                     $cvalue array_diff($cvalue, ['null']);
  3010.                                     if (!empty($cvalue))
  3011.                                         $joinMustString .= " and ";
  3012.                                 }
  3013.                                 if (in_array(''$cvalue)) {
  3014.                                     $joinMustString .= "`$joinTableAlias`.$cfield != '' ";
  3015.                                     $cvalue array_diff($cvalue, ['']);
  3016.                                     if (!empty($cvalue))
  3017.                                         $joinMustString .= " and ";
  3018.                                 }
  3019.                                 $joinMustString .= "`$joinTableAlias`.$cfield not in (" implode(','$cvalue) . ") ) ";
  3020.                             } else if ($ctype == 'in') {
  3021.                                 if (in_array('null'$cvalue)) {
  3022.                                     $joinMustString .= "`$joinTableAlias`.$cfield is null";
  3023.                                     $cvalue array_diff($cvalue, ['null']);
  3024.                                     if (!empty($cvalue))
  3025.                                         $joinMustString .= " and ";
  3026.                                 }
  3027.                                 if (in_array(''$cvalue)) {
  3028.                                     $joinMustString .= "`$joinTableAlias`.$cfield = '' ";
  3029.                                     $cvalue array_diff($cvalue, ['']);
  3030.                                     if (!empty($cvalue))
  3031.                                         $joinMustString .= " and ";
  3032.                                 }
  3033.                                 $joinMustString .= "`$joinTableAlias`.$cfield in (" implode(','$cvalue) . ") ";
  3034.                             } else if ($ctype == '=') {
  3035. //                        if (!(strpos($cvalue, '.') === false) && !(strpos($cvalue, '_PRIMARY_TABLE_') === false)) {
  3036. //                            $fullCfieldArray = explode('.', $cfield);
  3037. //                            $aliasInCondition = $fullCfieldArray[0];
  3038. //                            $cfield = $fullCfieldArray[1];
  3039. //                        }
  3040.                                 if ($cvalue == 'null' || $cvalue == 'Null')
  3041.                                     $joinMustString .= "`$joinTableAlias`.$cfield is null ";
  3042.                                 else
  3043.                                     $joinMustString .= "`$joinTableAlias`.$cfield = $cvalue ";
  3044.                             } else if ($ctype == '!=') {
  3045.                                 if ($cvalue == 'null' || $cvalue == 'Null')
  3046.                                     $joinMustString .= "`$joinTableAlias`.$cfield is not null ";
  3047.                                 else
  3048.                                     $joinMustString .= "`$joinTableAlias`.$cfield != $cvalue ";
  3049.                             } else {
  3050.                                 if (is_string($cvalue))
  3051.                                     $joinMustString .= "`$joinTableAlias`.$cfield $ctype '" $cvalue "' ";
  3052.                                 else
  3053.                                     $joinMustString .= "`$joinTableAlias`.$cfield $ctype " $cvalue " ";
  3054.                             }
  3055.                         }
  3056.                     }
  3057. //            if ($joinMustString != '') {
  3058. //                if ($conditionStr != '')
  3059. //                    $conditionStr .= (" and (" . $joinMustString . ") ");
  3060. //                else
  3061. //                    $conditionStr .= ("  (" . $joinMustString . ") ");
  3062. //            }
  3063.                     if ($joinMustString != '') {
  3064.                         $joinQry .= (' and ' $joinMustString);
  3065. //                        $joinQry.=' and (';
  3066.                     }
  3067.                     $mustBracketDone 0;
  3068.                     $joinAndString '';
  3069. //                    if ($joinTablePrimaryField != '')
  3070. //                        $joinAndString .= "  `$joinTableAlias`.`$joinTableOnField` $fieldJoinType `$table`.`$joinTablePrimaryField` ";
  3071.                     foreach ($joinAndConditions as $andCondition) {
  3072. //            $conditionStr.=' 1=1 ';
  3073.                         $ctype = isset($andCondition['type']) ? $andCondition['type'] : '=';
  3074.                         $cfield = isset($andCondition['field']) ? $andCondition['field'] : '';
  3075.                         $aliasInCondition $table;
  3076.                         if (!(strpos($cfield'.') === false)) {
  3077.                             $fullCfieldArray explode('.'$cfield);
  3078.                             $aliasInCondition $fullCfieldArray[0];
  3079.                             $cfield $fullCfieldArray[1];
  3080.                         }
  3081.                         $cvalue = isset($andCondition['value']) ? $andCondition['value'] : $queryStringIndividual;
  3082.                         if ($cfield != '' && $cvalue != '_EMPTY_' && $cvalue != '' && $cvalue != '#setValue:') {
  3083.                             if ($joinAndString != '')
  3084.                                 $joinAndString .= " and ";
  3085.                             if ($ctype == 'like') {
  3086.                                 $joinAndString .= ("`$joinTableAlias`.$cfield like '%" $cvalue "%' ");
  3087.                                 $wordsBySpaces explode(' '$cvalue);
  3088.                                 foreach ($wordsBySpaces as $word) {
  3089.                                     if ($joinAndString != '')
  3090.                                         $joinAndString .= " and ";
  3091.                                     $joinAndString .= ("`$joinTableAlias`.$cfield like '%" $word "%' ");
  3092.                                 }
  3093.                             } else if ($ctype == 'not like') {
  3094.                                 $joinAndString .= ("`$joinTableAlias`.$cfield not like '%" $cvalue "%' ");
  3095.                                 $wordsBySpaces explode(' '$cvalue);
  3096.                                 foreach ($wordsBySpaces as $word) {
  3097.                                     if ($joinAndString != '')
  3098.                                         $joinAndString .= " and ";
  3099.                                     $joinAndString .= ("`$joinTableAlias`.$cfield not like '%" $word "%' ");
  3100.                                 }
  3101.                             } else if ($ctype == 'not_in') {
  3102.                                 $joinAndString .= " ( ";
  3103.                                 if (in_array('null'$cvalue)) {
  3104.                                     $joinAndString .= " `$joinTableAlias`.$cfield is not null";
  3105.                                     $cvalue array_diff($cvalue, ['null']);
  3106.                                     if (!empty($cvalue))
  3107.                                         $joinAndString .= " and ";
  3108.                                 }
  3109.                                 if (in_array(''$cvalue)) {
  3110.                                     $joinAndString .= "`$joinTableAlias`.$cfield != '' ";
  3111.                                     $cvalue array_diff($cvalue, ['']);
  3112.                                     if (!empty($cvalue))
  3113.                                         $joinAndString .= " and ";
  3114.                                 }
  3115.                                 $joinAndString .= "`$joinTableAlias`.$cfield not in (" implode(','$cvalue) . ") ) ";
  3116.                             } else if ($ctype == 'in') {
  3117.                                 if (in_array('null'$cvalue)) {
  3118.                                     $joinAndString .= "`$joinTableAlias`.$cfield is null";
  3119.                                     $cvalue array_diff($cvalue, ['null']);
  3120.                                     if (!empty($cvalue))
  3121.                                         $joinAndString .= " and ";
  3122.                                 }
  3123.                                 if (in_array(''$cvalue)) {
  3124.                                     $joinAndString .= "`$joinTableAlias`.$cfield = '' ";
  3125.                                     $cvalue array_diff($cvalue, ['']);
  3126.                                     if (!empty($cvalue))
  3127.                                         $joinAndString .= " and ";
  3128.                                 }
  3129.                                 $joinAndString .= "`$joinTableAlias`.$cfield in (" implode(','$cvalue) . ") ";
  3130.                             } else if ($ctype == '=') {
  3131. //                        if (!(strpos($cvalue, '.') === false) && !(strpos($cvalue, '_PRIMARY_TABLE_') === false)) {
  3132. //                            $fullCfieldArray = explode('.', $cfield);
  3133. //                            $aliasInCondition = $fullCfieldArray[0];
  3134. //                            $cfield = $fullCfieldArray[1];
  3135. //                        }
  3136.                                 if ($cvalue == 'null' || $cvalue == 'Null')
  3137.                                     $joinAndString .= "`$joinTableAlias`.$cfield is null ";
  3138.                                 else
  3139.                                     $joinAndString .= "`$joinTableAlias`.$cfield = $cvalue ";
  3140.                             } else if ($ctype == '!=') {
  3141.                                 if ($cvalue == 'null' || $cvalue == 'Null')
  3142.                                     $joinAndString .= "`$joinTableAlias`.$cfield is not null ";
  3143.                                 else
  3144.                                     $joinAndString .= "`$joinTableAlias`.$cfield != $cvalue ";
  3145.                             } else {
  3146.                                 if (is_string($cvalue))
  3147.                                     $joinAndString .= "`$joinTableAlias`.$cfield $ctype '" $cvalue "' ";
  3148.                                 else
  3149.                                     $joinAndString .= "`$joinTableAlias`.$cfield $ctype " $cvalue " ";
  3150.                             }
  3151.                         }
  3152.                     }
  3153. //            if ($joinAndString != '') {
  3154. //                if ($conditionStr != '')
  3155. //                    $conditionStr .= (" and (" . $joinAndString . ") ");
  3156. //                else
  3157. //                    $conditionStr .= ("  (" . $joinAndString . ") ");
  3158. //            }
  3159.                     if ($joinAndString != '') {
  3160.                         if ($joinMustString != '' && $mustBracketDone == 0) {
  3161.                             $joinQry .= ' and (';
  3162.                             $mustBracketDone 1;
  3163.                         }
  3164.                         if ($joinQry != '')
  3165.                             $joinQry .= (" and (" $joinAndString ") ");
  3166.                         else
  3167.                             $joinQry .= ("  (" $joinAndString ") ");
  3168.                     }
  3169.                     $joinAndOrString "";
  3170.                     foreach ($joinAndOrConditions as $andOrCondition) {
  3171. //            $conditionStr.=' 1=1 ';
  3172.                         $ctype = isset($andOrCondition['type']) ? $andOrCondition['type'] : '=';
  3173.                         $cfield = isset($andOrCondition['field']) ? $andOrCondition['field'] : '';
  3174.                         $aliasInCondition $table;
  3175.                         if (!(strpos($cfield'.') === false)) {
  3176.                             $fullCfieldArray explode('.'$cfield);
  3177.                             $aliasInCondition $fullCfieldArray[0];
  3178.                             $cfield $fullCfieldArray[1];
  3179.                         }
  3180.                         $cvalue = isset($andOrCondition['value']) ? $andOrCondition['value'] : $queryStringIndividual;
  3181.                         if ($cfield != '' && $cvalue != '_EMPTY_' && $cvalue != '' && $cvalue != '#setValue:') {
  3182.                             if ($joinAndOrString != '')
  3183.                                 $joinAndOrString .= " or ";
  3184.                             if ($ctype == 'like') {
  3185.                                 $joinAndOrString .= ("`$joinTableAlias`.$cfield like '%" $cvalue "%' ");
  3186.                                 $wordsBySpaces explode(' '$cvalue);
  3187.                                 foreach ($wordsBySpaces as $word) {
  3188.                                     if ($joinAndOrString != '')
  3189.                                         $joinAndOrString .= " or ";
  3190.                                     $joinAndOrString .= ("`$joinTableAlias`.$cfield like '%" $word "%' ");
  3191.                                 }
  3192.                             } else if ($ctype == 'not like') {
  3193.                                 $joinAndOrString .= ("`$joinTableAlias`.$cfield not like '%" $cvalue "%' ");
  3194.                                 $wordsBySpaces explode(' '$cvalue);
  3195.                                 foreach ($wordsBySpaces as $word) {
  3196.                                     if ($joinAndOrString != '')
  3197.                                         $joinAndOrString .= " or ";
  3198.                                     $joinAndOrString .= ("`$joinTableAlias`.$cfield not like '%" $word "%' ");
  3199.                                 }
  3200.                             } else if ($ctype == 'not_in') {
  3201.                                 $joinAndOrString .= " ( ";
  3202.                                 if (in_array('null'$cvalue)) {
  3203.                                     $joinAndOrString .= " `$joinTableAlias`.$cfield is not null";
  3204.                                     $cvalue array_diff($cvalue, ['null']);
  3205.                                     if (!empty($cvalue))
  3206.                                         $joinAndOrString .= " or ";
  3207.                                 }
  3208.                                 if (in_array(''$cvalue)) {
  3209.                                     $joinAndOrString .= "`$joinTableAlias`.$cfield != '' ";
  3210.                                     $cvalue array_diff($cvalue, ['']);
  3211.                                     if (!empty($cvalue))
  3212.                                         $joinAndOrString .= " or ";
  3213.                                 }
  3214.                                 $joinAndOrString .= "`$joinTableAlias`.$cfield not in (" implode(','$cvalue) . ") ) ";
  3215.                             } else if ($ctype == 'in') {
  3216.                                 if (in_array('null'$cvalue)) {
  3217.                                     $joinAndOrString .= "`$joinTableAlias`.$cfield is null";
  3218.                                     $cvalue array_diff($cvalue, ['null']);
  3219.                                     if (!empty($cvalue))
  3220.                                         $joinAndOrString .= " or ";
  3221.                                 }
  3222.                                 if (in_array(''$cvalue)) {
  3223.                                     $joinAndOrString .= "`$joinTableAlias`.$cfield = '' ";
  3224.                                     $cvalue array_diff($cvalue, ['']);
  3225.                                     if (!empty($cvalue))
  3226.                                         $joinAndOrString .= " or ";
  3227.                                 }
  3228.                                 $joinAndOrString .= "`$joinTableAlias`.$cfield in (" implode(','$cvalue) . ") ";
  3229.                             } else if ($ctype == '=') {
  3230. //                        if (!(strpos($cvalue, '.') === false) && !(strpos($cvalue, '_PRIMARY_TABLE_') === false)) {
  3231. //                            $fullCfieldArray = explode('.', $cfield);
  3232. //                            $aliasInCondition = $fullCfieldArray[0];
  3233. //                            $cfield = $fullCfieldArray[1];
  3234. //                        }
  3235.                                 if ($cvalue == 'null' || $cvalue == 'Null')
  3236.                                     $joinAndOrString .= "`$joinTableAlias`.$cfield is null ";
  3237.                                 else
  3238.                                     $joinAndOrString .= "`$joinTableAlias`.$cfield = $cvalue ";
  3239.                             } else if ($ctype == '!=') {
  3240.                                 if ($cvalue == 'null' || $cvalue == 'Null')
  3241.                                     $joinAndOrString .= "`$joinTableAlias`.$cfield is not null ";
  3242.                                 else
  3243.                                     $joinAndOrString .= "`$joinTableAlias`.$cfield != $cvalue ";
  3244.                             } else {
  3245.                                 if (is_string($cvalue))
  3246.                                     $joinAndOrString .= "`$joinTableAlias`.$cfield $ctype '" $cvalue "' ";
  3247.                                 else
  3248.                                     $joinAndOrString .= "`$joinTableAlias`.$cfield $ctype " $cvalue " ";
  3249.                             }
  3250.                         }
  3251.                     }
  3252. //            if ($joinAndOrString != '')
  3253. //                $joinQry .= $joinAndOrString;
  3254.                     if ($joinAndOrString != '') {
  3255.                         if ($joinMustString != '' && $mustBracketDone == 0) {
  3256.                             $joinQry .= ' and (';
  3257.                             $mustBracketDone 1;
  3258.                         }
  3259.                         if ($joinQry != '')
  3260.                             $joinQry .= (" and (" $joinAndOrString ") ");
  3261.                         else
  3262.                             $joinQry .= ("  (" $joinAndOrString ") ");
  3263.                     }
  3264.                     //pika
  3265.                     $joinOrString "";
  3266.                     foreach ($joinOrConditions as $orCondition) {
  3267. //            $conditionStr.=' 1=1 ';
  3268.                         $ctype = isset($orCondition['type']) ? $orCondition['type'] : '=';
  3269.                         $cfield = isset($orCondition['field']) ? $orCondition['field'] : '';
  3270.                         $aliasInCondition $table;
  3271.                         if (!(strpos($cfield'.') === false)) {
  3272.                             $fullCfieldArray explode('.'$cfield);
  3273.                             $aliasInCondition $fullCfieldArray[0];
  3274.                             $cfield $fullCfieldArray[1];
  3275.                         }
  3276.                         $cvalue = isset($orCondition['value']) ? $orCondition['value'] : $queryStringIndividual;
  3277.                         if ($cfield != '' && $cvalue != '_EMPTY_' && $cvalue != '' && $cvalue != '#setValue:') {
  3278.                             if ($joinOrString != '' || $joinAndString != '' || $joinMustString != '')
  3279.                                 $joinOrString .= " or ";
  3280.                             if ($ctype == 'like') {
  3281.                                 $joinOrString .= ("`$joinTableAlias`.$cfield like '%" $cvalue "%' ");
  3282.                                 $wordsBySpaces explode(' '$cvalue);
  3283.                                 foreach ($wordsBySpaces as $word) {
  3284.                                     if ($joinOrString != '')
  3285.                                         $joinOrString .= " or ";
  3286.                                     $joinOrString .= ("`$joinTableAlias`.$cfield like '%" $word "%' ");
  3287.                                 }
  3288.                             } else if ($ctype == 'not like') {
  3289.                                 $joinOrString .= ("`$joinTableAlias`.$cfield not like '%" $cvalue "%' ");
  3290.                                 $wordsBySpaces explode(' '$cvalue);
  3291.                                 foreach ($wordsBySpaces as $word) {
  3292.                                     if ($joinOrString != '')
  3293.                                         $joinOrString .= " or ";
  3294.                                     $joinOrString .= ("`$joinTableAlias`.$cfield not like '%" $word "%' ");
  3295.                                 }
  3296.                             } else if ($ctype == 'not_in') {
  3297.                                 $joinOrString .= " ( ";
  3298.                                 if (in_array('null'$cvalue)) {
  3299.                                     $joinOrString .= " `$joinTableAlias`.$cfield is not null";
  3300.                                     $cvalue array_diff($cvalue, ['null']);
  3301.                                     if (!empty($cvalue))
  3302.                                         $joinOrString .= " or ";
  3303.                                 }
  3304.                                 if (in_array(''$cvalue)) {
  3305.                                     $joinOrString .= "`$joinTableAlias`.$cfield != '' ";
  3306.                                     $cvalue array_diff($cvalue, ['']);
  3307.                                     if (!empty($cvalue))
  3308.                                         $joinOrString .= " or ";
  3309.                                 }
  3310.                                 $joinOrString .= "`$joinTableAlias`.$cfield not in (" implode(','$cvalue) . ") ) ";
  3311.                             } else if ($ctype == 'in') {
  3312.                                 if (in_array('null'$cvalue)) {
  3313.                                     $joinOrString .= "`$joinTableAlias`.$cfield is null";
  3314.                                     $cvalue array_diff($cvalue, ['null']);
  3315.                                     if (!empty($cvalue))
  3316.                                         $joinOrString .= " or ";
  3317.                                 }
  3318.                                 if (in_array(''$cvalue)) {
  3319.                                     $joinOrString .= "`$joinTableAlias`.$cfield = '' ";
  3320.                                     $cvalue array_diff($cvalue, ['']);
  3321.                                     if (!empty($cvalue))
  3322.                                         $joinOrString .= " or ";
  3323.                                 }
  3324.                                 $joinOrString .= "`$joinTableAlias`.$cfield in (" implode(','$cvalue) . ") ";
  3325.                             } else if ($ctype == '=') {
  3326. //                        if (!(strpos($cvalue, '.') === false) && !(strpos($cvalue, '_PRIMARY_TABLE_') === false)) {
  3327. //                            $fullCfieldArray = explode('.', $cfield);
  3328. //                            $aliasInCondition = $fullCfieldArray[0];
  3329. //                            $cfield = $fullCfieldArray[1];
  3330. //                        }
  3331.                                 if ($cvalue == 'null' || $cvalue == 'Null')
  3332.                                     $joinOrString .= "`$joinTableAlias`.$cfield is null ";
  3333.                                 else
  3334.                                     $joinOrString .= "`$joinTableAlias`.$cfield = $cvalue ";
  3335.                             } else if ($ctype == '!=') {
  3336.                                 if ($cvalue == 'null' || $cvalue == 'Null')
  3337.                                     $joinOrString .= "`$joinTableAlias`.$cfield is not null ";
  3338.                                 else
  3339.                                     $joinOrString .= "`$joinTableAlias`.$cfield != $cvalue ";
  3340.                             } else {
  3341.                                 if (is_string($cvalue))
  3342.                                     $joinOrString .= "`$joinTableAlias`.$cfield $ctype '" $cvalue "' ";
  3343.                                 else
  3344.                                     $joinOrString .= "`$joinTableAlias`.$cfield $ctype " $cvalue " ";
  3345.                             }
  3346.                         }
  3347.                     }
  3348. //            if ($joinOrString != '')
  3349. //                $joinQry .= $joinOrString;
  3350.                     if ($joinOrString != '') {
  3351.                         if ($joinMustString != '' && $mustBracketDone == 0) {
  3352.                             $joinQry .= ' and (';
  3353.                             $mustBracketDone 1;
  3354.                         }
  3355.                         if ($joinQry != '')
  3356.                             $joinQry .= (" or (" $joinOrString ") ");
  3357.                         else
  3358.                             $joinQry .= ("  (" $joinOrString ") ");
  3359.                     }
  3360.                     if ($joinMustString != '' && $mustBracketDone == 1) {
  3361.                         $joinQry .= ' ) ';
  3362.                     }
  3363. //
  3364. //                $joinQry .= "  `$joinTableAlias`.`$joinTableOnField` $fieldJoinType `$table`.`$joinTablePrimaryField` ";
  3365.                 }
  3366.                 $filterQryForCriteria .= $selectQry;
  3367.                 $filterQryForCriteria .= $joinQry;
  3368.                 if ($skipDefaultCompanyId == && $companyId != && !isset($dataConfig['entity_group']))
  3369.                     $filterQryForCriteria .= " where `$table`.`company_id`=" $companyId " ";
  3370.                 else
  3371.                     $filterQryForCriteria .= " where 1=1 ";
  3372.                 $conditionStr "";
  3373.                 $aliasInCondition $table;
  3374.                 if ($headMarkers != '' && $table == 'acc_accounts_head') {
  3375.                     $markerList explode(','$headMarkers);
  3376.                     $spMarkerQry "SELECT distinct accounts_head_id FROM acc_accounts_head where 1=1 ";
  3377.                     $markerPassedHeads = [];
  3378.                     foreach ($markerList as $mrkr) {
  3379.                         $spMarkerQry .= " and marker_hash like '%" $mrkr "%'";
  3380.                     }
  3381.                     $spStmt $em->getConnection()->fetchAllAssociative($spMarkerQry);
  3382.                     $spStmtResults $spStmt;
  3383.                     foreach ($spStmtResults as $ggres) {
  3384.                         $markerPassedHeads[] = $ggres['accounts_head_id'];
  3385.                     }
  3386.                     if (!empty($markerPassedHeads)) {
  3387.                         if ($conditionStr != '')
  3388.                             $conditionStr .= " and (";
  3389.                         else
  3390.                             $conditionStr .= " (";
  3391.                         if ($headMarkersStrictMatch != 1) {
  3392.                             foreach ($markerPassedHeads as $mh) {
  3393.                                 $conditionStr .= " `$aliasInCondition`.`path_tree` like'%/" $mh "/%' or ";
  3394.                             }
  3395.                         }
  3396.                         $conditionStr .= "  `$aliasInCondition`.`accounts_head_id` in (" implode(','$markerPassedHeads) . ") ";
  3397.                         $conditionStr .= " )";
  3398.                     }
  3399.                 }
  3400.                 if (isset($restrictionData[$table])) {
  3401.                     $userRestrictionData Users::getUserApplicationAccessSettings($em$userId)['options'];
  3402.                     if (isset($userRestrictionData[$restrictionData[$table]])) {
  3403.                         $restrictionIdList $userRestrictionData[$restrictionData[$table]];
  3404.                         if ($restrictionIdList == null)
  3405.                             $restrictionIdList = [];
  3406.                     }
  3407.                     if (!empty($restrictionIdList)) {
  3408.                         if ($conditionStr != '')
  3409.                             $conditionStr .= " and ";
  3410.                         $conditionStr .= " `$table`.$valueField in (" implode(','$restrictionIdList) . ") ";
  3411.                     }
  3412.                 }
  3413. //        $aliasInCondition = $table;
  3414.                 if (!empty($setValueArray) || $selectAll == 1) {
  3415.                     if (!empty($setValueArray)) {
  3416.                         if ($conditionStr != '')
  3417.                             $conditionStr .= " and ";
  3418.                         $conditionStr .= " `$aliasInCondition`.$valueField in (" implode(','$setValueArray) . ") ";
  3419.                     }
  3420.                 } else {
  3421.                     $andString '';
  3422.                     foreach ($andConditions as $andCondition) {
  3423. //            $conditionStr.=' 1=1 ';
  3424.                         $ctype = isset($andCondition['type']) ? $andCondition['type'] : '=';
  3425.                         $cfield = isset($andCondition['field']) ? $andCondition['field'] : '';
  3426.                         $aliasInCondition $table;
  3427.                         if (!(strpos($cfield'.') === false)) {
  3428.                             $fullCfieldArray explode('.'$cfield);
  3429.                             $aliasInCondition $fullCfieldArray[0];
  3430.                             $cfield $fullCfieldArray[1];
  3431.                         }
  3432.                         $cvalue = isset($andCondition['value']) ? $andCondition['value'] : $queryStringIndividual;
  3433.                         if ($cfield != '' && $cvalue != '_EMPTY_' && $cvalue != '' && $cvalue != '#setValue:') {
  3434.                             if ($andString != '')
  3435.                                 $andString .= " and ";
  3436.                             if ($ctype == 'like') {
  3437.                                 $andString .= ("`$aliasInCondition`.$cfield like '%" $cvalue "%' ");
  3438.                                 $wordsBySpaces explode(' '$cvalue);
  3439.                                 foreach ($wordsBySpaces as $word) {
  3440.                                     if ($andString != '')
  3441.                                         $andString .= " and ";
  3442.                                     $andString .= ("`$aliasInCondition`.$cfield like '%" $word "%' ");
  3443.                                 }
  3444.                             } else if ($ctype == 'not like') {
  3445.                                 $andString .= ("`$aliasInCondition`.$cfield not like '%" $cvalue "%' ");
  3446.                                 $wordsBySpaces explode(' '$cvalue);
  3447.                                 foreach ($wordsBySpaces as $word) {
  3448.                                     if ($andString != '')
  3449.                                         $andString .= " and ";
  3450.                                     $andString .= ("`$aliasInCondition`.$cfield not like '%" $word "%' ");
  3451.                                 }
  3452.                             } else if ($ctype == 'not_in') {
  3453.                                 $andString .= " ( ";
  3454.                                 if (in_array('null'$cvalue)) {
  3455.                                     $andString .= " `$aliasInCondition`.$cfield is not null";
  3456.                                     $cvalue array_diff($cvalue, ['null']);
  3457.                                     if (!empty($cvalue))
  3458.                                         $andString .= " and ";
  3459.                                 }
  3460.                                 if (in_array(''$cvalue)) {
  3461.                                     $andString .= "`$aliasInCondition`.$cfield != '' ";
  3462.                                     $cvalue array_diff($cvalue, ['']);
  3463.                                     if (!empty($cvalue))
  3464.                                         $andString .= " and ";
  3465.                                 }
  3466.                                 $andString .= "`$aliasInCondition`.$cfield not in (" implode(','$cvalue) . ") ) ";
  3467.                             } else if ($ctype == 'in') {
  3468.                                 if (in_array('null'$cvalue)) {
  3469.                                     $andString .= "`$aliasInCondition`.$cfield is null";
  3470.                                     $cvalue array_diff($cvalue, ['null']);
  3471.                                     if (!empty($cvalue))
  3472.                                         $andString .= " and ";
  3473.                                 }
  3474.                                 if (in_array(''$cvalue)) {
  3475.                                     $andString .= "`$aliasInCondition`.$cfield = '' ";
  3476.                                     $cvalue array_diff($cvalue, ['']);
  3477.                                     if (!empty($cvalue))
  3478.                                         $andString .= " and ";
  3479.                                 }
  3480.                                 $andString .= "`$aliasInCondition`.$cfield in (" implode(','$cvalue) . ") ";
  3481.                             } else if ($ctype == '=') {
  3482.                                 if ($cvalue == 'null' || $cvalue == 'Null')
  3483.                                     $andString .= "`$aliasInCondition`.$cfield is null ";
  3484.                                 else
  3485.                                     if (is_string($cvalue))
  3486.                                         $andString .= "`$aliasInCondition`.$cfield $ctype '" $cvalue "' ";
  3487.                                     else
  3488.                                         $andString .= "`$aliasInCondition`.$cfield $ctype " $cvalue " ";
  3489.                             } else if ($ctype == '!=') {
  3490.                                 if ($cvalue == 'null' || $cvalue == 'Null')
  3491.                                     $andString .= "`$aliasInCondition`.$cfield is not null ";
  3492.                                 else
  3493.                                     $andString .= "`$aliasInCondition`.$cfield != $cvalue ";
  3494.                             } else {
  3495.                                 if (is_string($cvalue))
  3496.                                     $andString .= "`$aliasInCondition`.$cfield $ctype '" $cvalue "' ";
  3497.                                 else
  3498.                                     $andString .= "`$aliasInCondition`.$cfield $ctype " $cvalue " ";
  3499.                             }
  3500.                         }
  3501.                     }
  3502.                     if ($andString != '') {
  3503.                         if ($conditionStr != '')
  3504.                             $conditionStr .= (" and (" $andString ") ");
  3505.                         else
  3506.                             $conditionStr .= ("  (" $andString ") ");
  3507.                     }
  3508.                     $orString '';
  3509.                     foreach ($orConditions as $orCondition) {
  3510.                         $ctype = isset($orCondition['type']) ? $orCondition['type'] : '=';
  3511.                         $cfield = isset($orCondition['field']) ? $orCondition['field'] : '';
  3512.                         $aliasInCondition $table;
  3513.                         if (!(strpos($cfield'.') === false)) {
  3514.                             $fullCfieldArray explode('.'$cfield);
  3515.                             $aliasInCondition $fullCfieldArray[0];
  3516.                             $cfield $fullCfieldArray[1];
  3517.                         }
  3518.                         $cvalue = isset($orCondition['value']) ? $orCondition['value'] : $queryStringIndividual;
  3519.                         if ($cfield != '' && $cvalue != '_EMPTY_' && $cvalue != '' && $cvalue != '#setValue:') {
  3520.                             if ($orString != '')
  3521.                                 $orString .= " or ";
  3522.                             if ($ctype == 'like') {
  3523.                                 $orString .= ("`$aliasInCondition`.$cfield like '%" $cvalue "%' ");
  3524.                                 $wordsBySpaces explode(' '$cvalue);
  3525.                                 foreach ($wordsBySpaces as $word) {
  3526.                                     if ($orString != '')
  3527.                                         $orString .= " or ";
  3528.                                     $orString .= ("`$aliasInCondition`.$cfield like '%" $word "%' ");
  3529.                                 }
  3530.                             } else if ($ctype == 'not like') {
  3531.                                 $orString .= ("`$aliasInCondition`.$cfield not like '%" $cvalue "%' ");
  3532.                                 $wordsBySpaces explode(' '$cvalue);
  3533.                                 foreach ($wordsBySpaces as $word) {
  3534.                                     if ($orString != '')
  3535.                                         $orString .= " or ";
  3536.                                     $orString .= ("`$aliasInCondition`.$cfield not like '%" $word "%' ");
  3537.                                 }
  3538.                             } else if ($ctype == 'not_in') {
  3539.                                 $orString .= " ( ";
  3540.                                 if (in_array('null'$cvalue)) {
  3541.                                     $orString .= " `$aliasInCondition`.$cfield is not null";
  3542.                                     $cvalue array_diff($cvalue, ['null']);
  3543.                                     if (!empty($cvalue))
  3544.                                         $orString .= " or ";
  3545.                                 }
  3546.                                 if (in_array(''$cvalue)) {
  3547.                                     $orString .= "`$aliasInCondition`.$cfield != '' ";
  3548.                                     $cvalue array_diff($cvalue, ['']);
  3549.                                     if (!empty($cvalue))
  3550.                                         $orString .= " or ";
  3551.                                 }
  3552.                                 $orString .= "`$aliasInCondition`.$cfield not in (" implode(','$cvalue) . ") ) ";
  3553.                             } else if ($ctype == 'in') {
  3554.                                 $orString .= " ( ";
  3555.                                 if (in_array('null'$cvalue)) {
  3556.                                     $orString .= " `$aliasInCondition`.$cfield is null";
  3557.                                     $cvalue array_diff($cvalue, ['null']);
  3558.                                     if (!empty($cvalue))
  3559.                                         $orString .= " or ";
  3560.                                 }
  3561.                                 if (in_array(''$cvalue)) {
  3562.                                     $orString .= "`$aliasInCondition`.$cfield = '' ";
  3563.                                     $cvalue array_diff($cvalue, ['']);
  3564.                                     if (!empty($cvalue))
  3565.                                         $orString .= " or ";
  3566.                                 }
  3567.                                 $orString .= "`$aliasInCondition`.$cfield in (" implode(','$cvalue) . ") ) ";
  3568.                             } else if ($ctype == '=') {
  3569.                                 if ($cvalue == 'null' || $cvalue == 'Null')
  3570.                                     $orString .= "`$aliasInCondition`.$cfield is null ";
  3571.                                 else
  3572.                                     if (is_string($cvalue))
  3573.                                         $orString .= "`$aliasInCondition`.$cfield $ctype '" $cvalue "' ";
  3574.                                     else
  3575.                                         $orString .= "`$aliasInCondition`.$cfield $ctype " $cvalue " ";
  3576.                             } else if ($ctype == '!=') {
  3577.                                 if ($cvalue == 'null' || $cvalue == 'Null')
  3578.                                     $orString .= "`$aliasInCondition`.$cfield is not null ";
  3579.                                 else
  3580.                                     $orString .= "`$aliasInCondition`.$cfield != $cvalue ";
  3581.                             } else {
  3582.                                 if (is_string($cvalue))
  3583.                                     $orString .= "`$aliasInCondition`.$cfield $ctype '" $cvalue "' ";
  3584.                                 else
  3585.                                     $orString .= "`$aliasInCondition`.$cfield $ctype " $cvalue " ";
  3586.                             }
  3587.                         }
  3588.                     }
  3589.                     if ($orString != '') {
  3590.                         if ($conditionStr != '')
  3591.                             $conditionStr .= (" or (" $orString ") ");
  3592.                         else
  3593.                             $conditionStr .= ("  (" $orString ") ");
  3594.                     }
  3595.                     $andOrString '';
  3596.                     foreach ($andOrConditions as $andOrCondition) {
  3597.                         $ctype = isset($andOrCondition['type']) ? $andOrCondition['type'] : '=';
  3598.                         $cfield = isset($andOrCondition['field']) ? $andOrCondition['field'] : '';
  3599.                         $aliasInCondition $table;
  3600.                         if (!(strpos($cfield'.') === false)) {
  3601.                             $fullCfieldArray explode('.'$cfield);
  3602.                             $aliasInCondition $fullCfieldArray[0];
  3603.                             $cfield $fullCfieldArray[1];
  3604.                         }
  3605.                         $cvalue = isset($andOrCondition['value']) ? $andOrCondition['value'] : $queryStringIndividual;
  3606.                         if ($cfield != '' && $cvalue != '_EMPTY_' && $cvalue != '' && $cvalue != '#setValue:') {
  3607.                             if ($andOrString != '')
  3608.                                 $andOrString .= " or ";
  3609.                             if ($ctype == 'like') {
  3610.                                 $andOrString .= (" `$aliasInCondition`.$cfield like '%" $cvalue "%' ");
  3611.                                 $wordsBySpaces explode(' '$cvalue);
  3612.                                 foreach ($wordsBySpaces as $word) {
  3613.                                     if ($andOrString != '')
  3614.                                         $andOrString .= " or ";
  3615.                                     $andOrString .= ("`$aliasInCondition`.$cfield like '%" $word "%' ");
  3616.                                 }
  3617.                             } else if ($ctype == 'not like') {
  3618.                                 $andOrString .= (" `$aliasInCondition`.$cfield not like '%" $cvalue "%' ");
  3619.                                 $wordsBySpaces explode(' '$cvalue);
  3620.                                 foreach ($wordsBySpaces as $word) {
  3621.                                     if ($andOrString != '')
  3622.                                         $andOrString .= " or ";
  3623.                                     $andOrString .= ("`$aliasInCondition`.$cfield not like '%" $word "%' ");
  3624.                                 }
  3625.                             } else if ($ctype == 'in') {
  3626.                                 $andOrString .= " ( ";
  3627.                                 if (in_array('null'$cvalue)) {
  3628.                                     $andOrString .= " `$aliasInCondition`.$cfield is null";
  3629.                                     $cvalue array_diff($cvalue, ['null']);
  3630.                                     if (!empty($cvalue))
  3631.                                         $andOrString .= " or ";
  3632.                                 }
  3633.                                 if (in_array(''$cvalue)) {
  3634.                                     $andOrString .= "`$aliasInCondition`.$cfield = '' ";
  3635.                                     $cvalue array_diff($cvalue, ['']);
  3636.                                     if (!empty($cvalue))
  3637.                                         $andOrString .= " or ";
  3638.                                 }
  3639.                                 if (!empty($cvalue))
  3640.                                     $andOrString .= " `$aliasInCondition`.$cfield in (" implode(','$cvalue) . ") ) ";
  3641.                                 else
  3642.                                     $andOrString .= "  ) ";
  3643.                             } else if ($ctype == 'not_in') {
  3644.                                 $andOrString .= " ( ";
  3645.                                 if (in_array('null'$cvalue)) {
  3646.                                     $andOrString .= " `$aliasInCondition`.$cfield is not null";
  3647.                                     $cvalue array_diff($cvalue, ['null']);
  3648.                                     if (!empty($cvalue))
  3649.                                         $andOrString .= " or ";
  3650.                                 }
  3651.                                 if (in_array(''$cvalue)) {
  3652.                                     $andOrString .= "`$aliasInCondition`.$cfield != '' ";
  3653.                                     $cvalue array_diff($cvalue, ['']);
  3654.                                     if (!empty($cvalue))
  3655.                                         $andOrString .= " or ";
  3656.                                 }
  3657.                                 if (!empty($cvalue))
  3658.                                     $andOrString .= "`$aliasInCondition`.$cfield not in (" implode(','$cvalue) . ") ) ";
  3659.                                 else
  3660.                                     $andOrString .= "  ) ";
  3661.                             } else if ($ctype == '=') {
  3662.                                 if ($cvalue == 'null' || $cvalue == 'Null')
  3663.                                     $andOrString .= "`$aliasInCondition`.$cfield is null ";
  3664.                                 else
  3665.                                     if (is_string($cvalue))
  3666.                                         $andOrString .= "`$aliasInCondition`.$cfield $ctype '" $cvalue "' ";
  3667.                                     else
  3668.                                         $andOrString .= "`$aliasInCondition`.$cfield $ctype " $cvalue " ";
  3669.                             } else if ($ctype == '!=') {
  3670.                                 if ($cvalue == 'null' || $cvalue == 'Null')
  3671.                                     $andOrString .= "`$aliasInCondition`.$cfield is not null ";
  3672.                                 else
  3673.                                     $andOrString .= "`$aliasInCondition`.$cfield != $cvalue ";
  3674.                             } else {
  3675.                                 if (is_string($cvalue))
  3676.                                     $andOrString .= "`$aliasInCondition`.$cfield $ctype '" $cvalue "' ";
  3677.                                 else
  3678.                                     $andOrString .= "`$aliasInCondition`.$cfield $ctype " $cvalue " ";
  3679.                             }
  3680.                         }
  3681.                     }
  3682.                     if ($andOrString != '') {
  3683.                         if ($conditionStr != '')
  3684.                             $conditionStr .= (" and (" $andOrString ") ");
  3685.                         else
  3686.                             $conditionStr .= ("  (" $andOrString ") ");
  3687.                     }
  3688.                 }
  3689.                 $mustStr '';
  3690. ///now must conditions
  3691.                 foreach ($mustConditions as $mustCondition) {
  3692. //            $conditionStr.=' 1=1 ';
  3693.                     $ctype = isset($mustCondition['type']) ? $mustCondition['type'] : '=';
  3694.                     $cfield = isset($mustCondition['field']) ? $mustCondition['field'] : '';
  3695.                     $aliasInCondition $table;
  3696.                     if (!(strpos($cfield'.') === false)) {
  3697.                         $fullCfieldArray explode('.'$cfield);
  3698.                         $aliasInCondition $fullCfieldArray[0];
  3699.                         $cfield $fullCfieldArray[1];
  3700.                     }
  3701.                     $cvalue = isset($mustCondition['value']) ? $mustCondition['value'] : $queryStringIndividual;
  3702.                     if ($cfield != '' && $cvalue != '_EMPTY_' && $cvalue != '' && $cvalue != '#setValue:') {
  3703.                         if ($mustStr != '')
  3704.                             $mustStr .= " and ";
  3705.                         if ($ctype == 'like') {
  3706.                             $mustStr .= ("(`$aliasInCondition`.$cfield like '%" $cvalue "%' ");
  3707.                             $wordsBySpaces explode(' '$cvalue);
  3708.                             foreach ($wordsBySpaces as $word) {
  3709.                                 if ($mustStr != '')
  3710.                                     $mustStr .= " or ";
  3711.                                 $mustStr .= ("`$aliasInCondition`.$cfield like '%" $word "%' ");
  3712.                             }
  3713.                             $mustStr .= " )";
  3714.                         } else if ($ctype == 'not like') {
  3715.                             $mustStr .= ("`$aliasInCondition`.$cfield not like '%" $cvalue "%' ");
  3716.                             $wordsBySpaces explode(' '$cvalue);
  3717.                             foreach ($wordsBySpaces as $word) {
  3718.                                 if ($mustStr != '')
  3719.                                     $mustStr .= " and ";
  3720.                                 $mustStr .= ("`$aliasInCondition`.$cfield not like '%" $word "%' ");
  3721.                             }
  3722.                         } else if ($ctype == 'in') {
  3723.                             $mustStr .= " ( ";
  3724.                             if (in_array('null'$cvalue)) {
  3725.                                 $mustStr .= " `$aliasInCondition`.$cfield is null";
  3726.                                 $cvalue array_diff($cvalue, ['null']);
  3727.                                 if (!empty($cvalue))
  3728.                                     $mustStr .= " or ";
  3729.                             }
  3730.                             if (in_array(''$cvalue)) {
  3731.                                 $mustStr .= "`$aliasInCondition`.$cfield = '' ";
  3732.                                 $cvalue array_diff($cvalue, ['']);
  3733.                                 if (!empty($cvalue))
  3734.                                     $mustStr .= " or ";
  3735.                             }
  3736.                             $mustStr .= "`$aliasInCondition`.$cfield in (" implode(','$cvalue) . ") ) ";
  3737.                         } else if ($ctype == 'not_in') {
  3738.                             $mustStr .= " ( ";
  3739.                             if (in_array('null'$cvalue)) {
  3740.                                 $mustStr .= " `$aliasInCondition`.$cfield is not null";
  3741.                                 $cvalue array_diff($cvalue, ['null']);
  3742.                                 if (!empty($cvalue))
  3743.                                     $mustStr .= " and ";
  3744.                             }
  3745.                             if (in_array(''$cvalue)) {
  3746.                                 $mustStr .= "`$aliasInCondition`.$cfield != '' ";
  3747.                                 $cvalue array_diff($cvalue, ['']);
  3748.                                 if (!empty($cvalue))
  3749.                                     $mustStr .= " and ";
  3750.                             }
  3751.                             $mustStr .= "`$aliasInCondition`.$cfield not in (" implode(','$cvalue) . ") ) ";
  3752.                         } else if ($ctype == '=') {
  3753.                             if ($cvalue == 'null' || $cvalue == 'Null')
  3754.                                 $mustStr .= "`$aliasInCondition`.$cfield is null ";
  3755.                             else
  3756.                                 if (is_string($cvalue))
  3757.                                     $mustStr .= "`$aliasInCondition`.$cfield $ctype '" $cvalue "' ";
  3758.                                 else
  3759.                                     $mustStr .= "`$aliasInCondition`.$cfield $ctype " $cvalue " ";
  3760.                         } else if ($ctype == '!=') {
  3761.                             if ($cvalue == 'null' || $cvalue == 'Null')
  3762.                                 $mustStr .= "`$aliasInCondition`.$cfield is not null ";
  3763.                             else
  3764.                                 $mustStr .= "`$aliasInCondition`.$cfield != $cvalue ";
  3765.                         } else {
  3766.                             if (is_string($cvalue))
  3767.                                 $mustStr .= "`$aliasInCondition`.$cfield $ctype '" $cvalue "' ";
  3768.                             else
  3769.                                 $mustStr .= "`$aliasInCondition`.$cfield $ctype " $cvalue " ";
  3770.                         }
  3771.                     }
  3772.                 }
  3773.                 if ($mustStr != '') {
  3774.                     if ($conditionStr != '')
  3775.                         $conditionStr .= (" and (" $mustStr ") ");
  3776.                     else
  3777.                         $conditionStr .= ("  (" $mustStr ") ");
  3778.                 }
  3779.                 if ($conditionStr != '')
  3780.                     $filterQryForCriteria .= (" and (" $conditionStr ") ");
  3781.                 if ($lastChildrenOnly == 1) {
  3782.                     if ($filterQryForCriteria != '')
  3783.                         $filterQryForCriteria .= ' and';
  3784.                     $filterQryForCriteria .= "`$table`.`$valueField` not in ( select distinct $parentIdField from  $table)";
  3785.                 } else if ($parentOnly == 1) {
  3786.                     if ($filterQryForCriteria != '')
  3787.                         $filterQryForCriteria .= ' and';
  3788.                     $filterQryForCriteria .= "`$table`.`$valueField`  in ( select distinct $parentIdField from  $table)";
  3789.                 }
  3790.                 if (!empty($orderByConditions)) {
  3791.                     $filterQryForCriteria .= "  order by ";
  3792.                     $fone 1;
  3793.                     foreach ($orderByConditions as $orderByCondition) {
  3794.                         if ($fone != 1) {
  3795.                             $filterQryForCriteria .= " , ";
  3796.                         }
  3797.                         if (isset($orderByCondition['valueList'])) {
  3798.                             if (is_string($orderByCondition['valueList'])) $orderByCondition['valueList'] = json_decode($orderByCondition['valueList'], true);
  3799.                             if ($orderByCondition['valueList'] == null)
  3800.                                 $orderByCondition['valueList'] = [];
  3801.                             $filterQryForCriteria .= "   field(" $orderByCondition['field'] . "," implode(','$orderByCondition['valueList']) . "," $orderByCondition['field'] . ") " $orderByCondition['sortType'] . " ";
  3802.                         } else
  3803.                             $filterQryForCriteria .= " " $orderByCondition['field'] . " " $orderByCondition['sortType'] . " ";
  3804.                         $fone 0;
  3805.                     }
  3806.                 }
  3807.                 if ($returnTotalMatchedEntriesFlag == 1) {
  3808. //            $stmt = $em->getConnection()->fetchAllAssociative($get_kids_sql);
  3809. //
  3810. //            $get_kids = $stmt;
  3811.                 }
  3812.                 if ($filterQryForCriteria != '')
  3813.                     if (!empty($setValueArray) || $selectAll == 1) {
  3814.                     } else {
  3815.                         if ($itemLimit != '_ALL_')
  3816.                             $filterQryForCriteria .= "  limit $offset$itemLimit ";
  3817.                         else
  3818.                             $filterQryForCriteria .= "  limit $offset, 18446744073709551615 ";
  3819.                     }
  3820.                 $get_kids_sql $filterQryForCriteria;
  3821.                 $stmt $em->getConnection()->fetchAllAssociative($get_kids_sql);
  3822.                 $get_kids $stmt;
  3823.                 $selectedId 0;
  3824.                 if ($table == 'warehouse_action') {
  3825.                     if (empty($get_kids)) {
  3826.                         $get_kids_sql_2 "select * from warehouse_action";
  3827.                         $stmt $em->getConnection()->fetchAllAssociative($get_kids_sql_2);
  3828.                         $get_kids2 $stmt;
  3829.                         if (empty($get_kids2))
  3830.                             $get_kids GeneralConstant::$warehouse_action_list;
  3831.                     }
  3832.                 }
  3833.                 if (!empty($get_kids)) {
  3834.                     $nextOffset $offset count($get_kids);
  3835.                     $nextOffset++;
  3836.                     foreach ($get_kids as $pa) {
  3837.                         if (!empty($setValueArray) && $selectAll == 0) {
  3838.                             if (!in_array($pa[$valueField], $setValueArray))
  3839.                                 continue;
  3840.                         }
  3841.                         if (!empty($restrictionIdList)) {
  3842.                             if (!in_array($pa[$valueField], $restrictionIdList))
  3843.                                 continue;
  3844.                         }
  3845.                         if ($selectAll == 1) {
  3846.                             $setValueArray[] = $pa[$valueField];
  3847.                             $setValue $pa[$valueField];
  3848.                         } else if (count($get_kids) == && $setDataForSingle == 1) {
  3849.                             $setValueArray[] = $pa[$valueField];
  3850.                             $setValue $pa[$valueField];
  3851.                         }
  3852.                         if ($valueField != '')
  3853.                             $pa['value'] = $pa[$valueField];
  3854.                         $renderedText $renderTextFormat;
  3855.                         $compare_array = [];
  3856.                         if ($renderTextFormat != '') {
  3857.                             $renderedText $renderTextFormat;
  3858.                             $compare_arrayFull = [];
  3859.                             $compare_array = [];
  3860.                             $toBeReplacedData = array(//                        'curr'=>'tobereplaced'
  3861.                             );
  3862.                             preg_match_all("/__\w+__/"$renderedText$compare_arrayFull);
  3863.                             if (isset($compare_arrayFull[0]))
  3864.                                 $compare_array $compare_arrayFull[0];
  3865. //                   $compare_array= preg_split("/__\w+__/",$renderedText);
  3866.                             foreach ($compare_array as $cmpdt) {
  3867.                                 $tbr str_replace("__"""$cmpdt);
  3868.                                 if ($tbr != '') {
  3869.                                     if (isset($pa[$tbr])) {
  3870.                                         if ($pa[$tbr] == null)
  3871.                                             $renderedText str_replace($cmpdt''$renderedText);
  3872.                                         else
  3873.                                             $renderedText str_replace($cmpdt$pa[$tbr], $renderedText);
  3874.                                     } else {
  3875.                                         $renderedText str_replace($cmpdt''$renderedText);
  3876.                                     }
  3877.                                 }
  3878.                             }
  3879.                         }
  3880.                         $pa['rendered_text'] = $renderedText;
  3881.                         $pa['text'] = ($textField != '' $pa[$textField] : '');
  3882. //                $pa['compare_array'] = $compare_array;
  3883.                         foreach ($convertToObjectFieldList as $convField) {
  3884.                             if (isset($pa[$convField])) {
  3885.                                 $taA json_decode($pa[$convField], true);
  3886.                                 if ($taA == null$taA = [];
  3887.                                 $pa[$convField] = $taA;
  3888.                             } else {
  3889.                                 $pa[$convField] = [];
  3890.                             }
  3891.                         }
  3892.                         foreach ($convertDateToStringFieldList as $convField) {
  3893.                             if (is_array($convField)) {
  3894.                                 $fld $convField['field'];
  3895.                                 $frmt = isset($convField['format']) ? $convField['format'] : 'Y-m-d H:i:s';
  3896.                             } else {
  3897.                                 $fld $convField;
  3898.                                 $frmt 'Y-m-d H:i:s';
  3899.                             }
  3900.                             if (isset($pa[$fld])) {
  3901.                                 $taA = new \DateTime($pa[$fld]);
  3902.                                 $pa[$fld] = $taA->format($frmt);
  3903.                             }
  3904.                         }
  3905.                         foreach ($convertToUrl as $convField) {
  3906. //
  3907. //                            $fld = $convField;
  3908. //
  3909. //
  3910. //                            if (isset($pa[$fld])) {
  3911. //
  3912. //
  3913. //                                $pa[$fld] =
  3914. //                                    $this->generateUrl(
  3915. //                                        'dashboard', [
  3916. //
  3917. //                                    ], UrlGenerator::ABSOLUTE_URL
  3918. //                                    ).'/'.$pa[$fld];
  3919. //
  3920. //                            }
  3921.                         }
  3922.                         foreach ($fullPathList as $pathField) {
  3923.                             $fld $pathField;
  3924.                             if (isset($pa[$fld])) {
  3925.                                 if ($pa[$fld] != '' && $pa[$fld] != null) {
  3926.                                     $pa[$fld] = ($this->generateUrl(
  3927.                                             'dashboard', [
  3928.                                         ], UrlGenerator::ABSOLUTE_URL
  3929.                                         ) . $pa[$fld]);
  3930.                                 }
  3931.                             }
  3932.                         }
  3933.                         $pa['currentTs'] = (new \Datetime())->format('U');
  3934.                         $data[] = $pa;
  3935.                         if ($valueField != '') {
  3936.                             $data_by_id[$pa[$valueField]] = $pa;
  3937.                             $selectedId $pa[$valueField];
  3938.                         }
  3939.                     }
  3940.                 }
  3941.                 if ($dataOnly == 1)
  3942.                     $lastResult = array(
  3943.                         'success' => true,
  3944.                         'data' => $data,
  3945.                         'currentTs' => (new \Datetime())->format('U'),
  3946.                         'restrictionIdList' => $restrictionIdList,
  3947.                         'nextOffset' => $nextOffset,
  3948.                         'totalMatchedEntries' => $totalMatchedEntries,
  3949.                         'ret_data' => isset($dataConfig['ret_data']) ? $dataConfig['ret_data'] : [],
  3950.                     );
  3951.                 else
  3952.                     $lastResult = array(
  3953.                         'success' => true,
  3954.                         'data' => $data,
  3955.                         'tableName' => $table,
  3956.                         'setValue' => $setValue,
  3957.                         'currentTs' => (new \Datetime())->format('U'),
  3958.                         'restrictionIdList' => $restrictionIdList,
  3959.                         'andConditions' => $andConditions,
  3960.                         'queryStr' => $queryStringIndividual,
  3961.                         'isMultiple' => $isMultiple,
  3962.                         'nextOffset' => $nextOffset,
  3963.                         'totalMatchedEntries' => $totalMatchedEntries,
  3964.                         'selectorId' => $selectorId,
  3965.                         'setValueArray' => $setValueArray,
  3966.                         'silentChangeSelectize' => $silentChangeSelectize,
  3967.                         'convertToObjectFieldList' => $convertToObjectFieldList,
  3968.                         'conditionStr' => $conditionStr,
  3969. //                    'andStr' => $andString,
  3970. //                    'andOrStr' => $andOrString,
  3971.                         'dataById' => $data_by_id,
  3972.                         'selectedId' => $selectedId,
  3973.                         'dataId' => $dataId,
  3974.                         'ret_data' => isset($dataConfig['ret_data']) ? $dataConfig['ret_data'] : [],
  3975.                     );
  3976.             }
  3977.             $allResult[] = $lastResult;
  3978.         }
  3979.         if ($isSingleDataset == 1)
  3980.             return new JsonResponse($lastResult);
  3981.         else
  3982.             return new JsonResponse($allResult);
  3983.     }
  3984.     public function DecodeEncDataAction(Request $request$apiCode 0$encData '')
  3985.     {
  3986. //        $userCategory=$request->request->has('userCategory');
  3987.         $encryptedData = [];
  3988.         $retData = array(
  3989.             'success' => false,
  3990.             'message' => 'Invalid API',
  3991.             'data' => [],
  3992.             'decryptedStr' => '',
  3993.         );
  3994.         $allowedApiCodes = [
  3995.             998,
  3996.             889
  3997.         ];
  3998.         if (in_array($apiCode$allowedApiCodes)) {
  3999.             if ($encData != '') {
  4000.                 $decryptedStr $this->get('url_encryptor')->decrypt($encData);
  4001.                 $encryptedData json_decode($decryptedStrtrue);
  4002.                 if ($encryptedData == null$encryptedData = [];
  4003.                 $retData['success'] = true;
  4004.                 $retData['message'] = '';
  4005.                 $retData['decryptedStr'] = $decryptedStr;
  4006.                 $retData['data'] = $encryptedData;
  4007.             } else {
  4008.                 $retData['success'] = false;
  4009.                 $retData['message'] = 'No Data';
  4010.             }
  4011.         }
  4012.         $response = new JsonResponse($retData);
  4013.         $response->headers->set('Access-Control-Allow-Origin''*');
  4014.         return $response;
  4015.     }
  4016.     public function SendOtpAjaxAction(Request $request$startFrom 0)
  4017.     {
  4018.         $em $this->getDoctrine()->getManager();
  4019.         $em_goc $this->getDoctrine()->getManager('company_group');
  4020.         $session $request->getSession();
  4021.         $message "";
  4022.         $retData = array();
  4023.         $email_twig_data = array('success' => false);
  4024.         $systemType $this->container->hasParameter('system_type') ? $this->container->getParameter('system_type') : '_ERP_';
  4025.         $userCategory $request->request->get('userCategory'$request->query->get('userCategory''_BUDDYBEE_USER_'));
  4026.         $email_address $request->request->get('email'$request->query->get('email'''));
  4027.         $otpExpireSecond $request->request->get('otpExpireSecond'$request->query->get('otpExpireSecond'180));
  4028.         $otpActionId $request->request->get('otpActionId'$request->query->get('otpActionId'UserConstants::OTP_ACTION_FORGOT_PASSWORD));
  4029.         $appendCode $request->request->get('appendCode'$request->query->get('appendCode'''));
  4030.         $otp $request->request->get('otp'$request->query->get('otp'''));
  4031.         $otpExpireTs 0;
  4032.         $userId $request->request->get('userId'$request->query->get('userId'$session->get(UserConstants::USER_ID0)));
  4033.         $userType UserConstants::USER_TYPE_APPLICANT;
  4034.         $email_twig_file '@Application/pages/email/find_account_buddybee.html.twig';
  4035.         if ($request->isMethod('POST')) {
  4036.             //set an otp and its expire and send mail
  4037.             $userObj null;
  4038.             $userData = [];
  4039.             if ($systemType == '_ERP_') {
  4040.                 if ($userCategory == '_APPLICANT_') {
  4041.                     $userType UserConstants::USER_TYPE_APPLICANT;
  4042.                     $userObj $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityApplicantDetails')->findOneBy(
  4043.                         array(
  4044.                             'applicantId' => $userId
  4045.                         )
  4046.                     );
  4047.                     if ($userObj) {
  4048.                     } else {
  4049.                         $userObj $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityApplicantDetails')->findOneBy(
  4050.                             array(
  4051.                                 'email' => $email_address
  4052.                             )
  4053.                         );
  4054.                         if ($userObj) {
  4055.                         } else {
  4056.                             $userObj $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityApplicantDetails')->findOneBy(
  4057.                                 array(
  4058.                                     'oAuthEmail' => $email_address
  4059.                                 )
  4060.                             );
  4061.                             if ($userObj) {
  4062.                             } else {
  4063.                                 $userObj $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityApplicantDetails')->findOneBy(
  4064.                                     array(
  4065.                                         'username' => $email_address
  4066.                                     )
  4067.                                 );
  4068.                             }
  4069.                         }
  4070.                     }
  4071.                     if ($userObj) {
  4072.                         $email_address $userObj->getEmail();
  4073.                         if ($email_address == null || $email_address == '')
  4074.                             $email_address $userObj->getOAuthEmail();
  4075.                     }
  4076.                     $otpData MiscActions::GenerateOtp($otpExpireSecond);
  4077.                     $otp $otpData['otp'];
  4078.                     $otpExpireTs $otpData['expireTs'];
  4079.                     $userObj->setOtp($otpData['otp']);
  4080.                     $userObj->setOtpActionId($otpActionId);
  4081.                     $userObj->setOtpExpireTs($otpData['expireTs']);
  4082.                     $em_goc->flush();
  4083.                     $userData = array(
  4084.                         'id' => $userObj->getApplicantId(),
  4085.                         'email' => $email_address,
  4086.                         'appId' => 0,
  4087.                         //                        'appId'=>$userObj->getUserAppId(),
  4088.                     );
  4089.                     $email_twig_file '@Application/email/templates/forgotPasswordOtp.html.twig';
  4090.                     $email_twig_data = [
  4091.                         'page_title' => 'Find Account',
  4092.                         'message' => $message,
  4093.                         'userType' => $userType,
  4094.                         'otp' => $otpData['otp'],
  4095.                         'otpExpireSecond' => $otpExpireSecond,
  4096.                         'otpActionId' => $otpActionId,
  4097.                         'otpExpireTs' => $otpData['expireTs'],
  4098.                         'systemType' => $systemType,
  4099.                         'userData' => $userData
  4100.                     ];
  4101.                     if ($userObj)
  4102.                         $email_twig_data['success'] = true;
  4103.                 } else {
  4104.                     $userType UserConstants::USER_TYPE_GENERAL;
  4105.                     $email_twig_file '@Application/email/templates/forgotPasswordOtp.html.twig';
  4106.                     $email_twig_data = [
  4107.                         'page_title' => 'Find Account',
  4108.                         //                        'encryptedData' => $encryptedData,
  4109.                         'message' => $message,
  4110.                         'userType' => $userType,
  4111.                         //                        'errorField' => $errorField,
  4112.                     ];
  4113.                 }
  4114.             } else if ($systemType == '_BUDDYBEE_') {
  4115.                 $userType UserConstants::USER_TYPE_APPLICANT;
  4116.                 $userObj $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityApplicantDetails')->findOneBy(
  4117.                     array(
  4118.                         'applicantId' => $userId
  4119.                     )
  4120.                 );
  4121.                 if ($userObj) {
  4122.                 } else {
  4123.                     $userObj $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityApplicantDetails')->findOneBy(
  4124.                         array(
  4125.                             'email' => $email_address
  4126.                         )
  4127.                     );
  4128.                     if ($userObj) {
  4129.                     } else {
  4130.                         $userObj $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityApplicantDetails')->findOneBy(
  4131.                             array(
  4132.                                 'oAuthEmail' => $email_address
  4133.                             )
  4134.                         );
  4135.                         if ($userObj) {
  4136.                         } else {
  4137.                             $userObj $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityApplicantDetails')->findOneBy(
  4138.                                 array(
  4139.                                     'username' => $email_address
  4140.                                 )
  4141.                             );
  4142.                         }
  4143.                     }
  4144.                 }
  4145.                 if ($userObj) {
  4146.                     $email_address $userObj->getEmail();
  4147.                     if ($email_address == null || $email_address == '')
  4148.                         $email_address $userObj->getOAuthEmail();
  4149.                     //                    triggerResetPassword:
  4150.                     //                    type: integer
  4151.                     //                          nullable: true
  4152.                     $otpData MiscActions::GenerateOtp($otpExpireSecond);
  4153.                     $otp $otpData['otp'];
  4154.                     $otpExpireTs $otpData['expireTs'];
  4155.                     $userObj->setOtp($otpData['otp']);
  4156.                     $userObj->setOtpActionId($otpActionId);
  4157.                     $userObj->setOtpExpireTs($otpData['expireTs']);
  4158.                     $em_goc->flush();
  4159.                     $userData = array(
  4160.                         'id' => $userObj->getApplicantId(),
  4161.                         'email' => $email_address,
  4162.                         'appId' => 0,
  4163.                         'image' => $userObj->getImage(),
  4164.                         'phone' => $userObj->getPhone(),
  4165.                         'firstName' => $userObj->getFirstname(),
  4166.                         'lastName' => $userObj->getLastname(),
  4167.                         //                        'appId'=>$userObj->getUserAppId(),
  4168.                     );
  4169.                     $email_twig_file '@Application/email/templates/forgotPasswordOtp.html.twig';
  4170.                     $email_twig_data = [
  4171.                         'page_title' => 'Find Account',
  4172.                         //                        'encryptedData' => $encryptedData,
  4173.                         'message' => $message,
  4174.                         'userType' => $userType,
  4175.                         //                        'errorField' => $errorField,
  4176.                         'otp' => $otpData['otp'],
  4177.                         'otpExpireSecond' => $otpExpireSecond,
  4178.                         'otpActionId' => $otpActionId,
  4179.                         'otpActionTitle' => UserConstants::$OTP_ACTION_DATA[$otpActionId]['actionTitle'],
  4180.                         'otpActionDescForMail' => UserConstants::$OTP_ACTION_DATA[$otpActionId]['actionDescForMail'],
  4181.                         'otpExpireTs' => $otpData['expireTs'],
  4182.                         'systemType' => $systemType,
  4183.                         'userCategory' => $userCategory,
  4184.                         'userData' => $userData
  4185.                     ];
  4186.                     $email_twig_data['success'] = true;
  4187.                 } else {
  4188.                     $message "Account not found!";
  4189.                     $email_twig_data['success'] = false;
  4190.                 }
  4191.             }
  4192.             if ($email_twig_data['success'] == true && GeneralConstant::EMAIL_ENABLED == 1) {
  4193.                 if ($systemType == '_BUDDYBEE_') {
  4194.                     $bodyHtml '';
  4195.                     $bodyTemplate $email_twig_file;
  4196.                     $bodyData $email_twig_data;
  4197.                     $attachments = [];
  4198.                     $forwardToMailAddress $email_address;
  4199.                     //                    $upl_dir = $this->container->getParameter('kernel.root_dir') . '/../web/uploads/temp/' . 'ledger' . '.pdf'
  4200.                     $new_mail $this->get('mail_module');
  4201.                     $new_mail->sendMyMail(array(
  4202.                         'senderHash' => '_CUSTOM_',
  4203.                         //                        'senderHash'=>'_CUSTOM_',
  4204.                         'forwardToMailAddress' => $forwardToMailAddress,
  4205.                         'subject' => 'Account Verification',
  4206.                         //                        'fileName' => 'Order#' . str_pad($id, 8, '0', STR_PAD_LEFT) . '.pdf',
  4207.                         'attachments' => $attachments,
  4208.                         'toAddress' => $forwardToMailAddress,
  4209.                         'fromAddress' => 'no-reply@buddybee.eu',
  4210.                         'userName' => 'no-reply@buddybee.eu',
  4211.                         'password' => 'Honeybee@0112',
  4212.                         'smtpServer' => 'smtp.hostinger.com',
  4213.                         'smtpPort' => 465,
  4214.                         //                            'emailBody' => $bodyHtml,
  4215.                         'mailTemplate' => $bodyTemplate,
  4216.                         'templateData' => $bodyData,
  4217.                         //                        'embedCompanyImage' => 1,
  4218.                         //                        'companyId' => $companyId,
  4219.                         //                        'companyImagePath' => $company_data->getImage()
  4220.                     ));
  4221.                 } else {
  4222.                     $bodyHtml '';
  4223.                     $bodyTemplate $email_twig_file;
  4224.                     $bodyData $email_twig_data;
  4225.                     $attachments = [];
  4226.                     $forwardToMailAddress $email_address;
  4227.                     //                    $upl_dir = $this->container->getParameter('kernel.root_dir') . '/../web/uploads/temp/' . 'ledger' . '.pdf'
  4228.                     $new_mail $this->get('mail_module');
  4229.                     $new_mail->sendMyMail(array(
  4230.                         'senderHash' => '_CUSTOM_',
  4231.                         //                        'senderHash'=>'_CUSTOM_',
  4232.                         'forwardToMailAddress' => $forwardToMailAddress,
  4233.                         'subject' => 'Applicant Registration on Honeybee',
  4234.                         //                        'fileName' => 'Order#' . str_pad($id, 8, '0', STR_PAD_LEFT) . '.pdf',
  4235.                         'attachments' => $attachments,
  4236.                         'toAddress' => $forwardToMailAddress,
  4237.                         'fromAddress' => 'support@ourhoneybee.eu',
  4238.                         'userName' => 'support@ourhoneybee.eu',
  4239.                         'password' => 'Y41dh8g0112',
  4240.                         'smtpServer' => 'smtp.hostinger.com',
  4241.                         'smtpPort' => 465,
  4242.                         'emailBody' => $bodyHtml,
  4243.                         'mailTemplate' => $bodyTemplate,
  4244.                         'templateData' => $bodyData,
  4245.                         //                        'embedCompanyImage' => 1,
  4246.                         //                        'companyId' => $companyId,
  4247.                         //                        'companyImagePath' => $company_data->getImage()
  4248.                     ));
  4249.                 }
  4250.             }
  4251.             if ($email_twig_data['success'] == true && GeneralConstant::NOTIFICATION_ENABLED == && $userData['phone'] != '' && $userData['phone'] != null) {
  4252.                 if ($systemType == '_BUDDYBEE_') {
  4253.                     $searchVal = ['_OTP_''_EXPIRE_MINUTES_''_APPEND_CODE_'];
  4254.                     $replaceVal = [$otpfloor($otpExpireSecond 60), $appendCode];
  4255.                     $msg 'Use OTP _OTP_ for BuddyBee. Your OTP will expire in _EXPIRE_MINUTES_ minutes
  4256.                      _APPEND_CODE_';
  4257.                     $msg str_replace($searchVal$replaceVal$msg);
  4258.                     $emitMarker '_SEND_TEXT_TO_MOBILE_';
  4259.                     $sendType 'all';
  4260.                     $socketUserIds = [];
  4261.                     System::SendSmsBySocket($this->container->getParameter('notification_enabled'), $msg$userData['phone'], $emitMarker$sendType$socketUserIds);
  4262.                 } else {
  4263.                 }
  4264.             }
  4265.         }
  4266.         $response = new JsonResponse(array(
  4267.                 'message' => $message,
  4268.                 "userType" => $userType,
  4269.                 "otp" => '',
  4270.                 //                "otp"=>$otp,
  4271.                 "otpExpireTs" => $otpExpireTs,
  4272.                 "otpActionId" => $otpActionId,
  4273.                 "userCategory" => $userCategory,
  4274.                 "userId" => isset($userData['id']) ? $userData['id'] : 0,
  4275.                 "systemType" => $systemType,
  4276.                 'actionData' => $email_twig_data,
  4277.                 'success' => isset($email_twig_data['success']) ? $email_twig_data['success'] : false,
  4278.             )
  4279.         );
  4280.         $response->headers->set('Access-Control-Allow-Origin''*');
  4281.         return $response;
  4282.     }
  4283.     public function VerifyOtpAction(Request $request$encData '')
  4284.     {
  4285.         $em $this->getDoctrine()->getManager();
  4286.         $em_goc $this->getDoctrine()->getManager('company_group');
  4287.         $session $request->getSession();
  4288.         $message "";
  4289.         $retData = array();
  4290.         $encData $request->query->get('encData'$encData);
  4291.         $encryptedData = [];
  4292.         if ($encData != '')
  4293.             $encryptedData json_decode($this->get('url_encryptor')->decrypt($encData), true);
  4294.         if ($encryptedData == null$encryptedData = [];
  4295.         $systemType $this->container->hasParameter('system_type') ? $this->container->getParameter('system_type') : '_ERP_';
  4296.         $userCategory $request->request->get('userCategory'$request->query->get('userCategory', (isset($encryptedData['otp']) ? $encryptedData['userCategory'] : '_BUDDYBEE_USER_')));
  4297.         $email_address $request->request->get('email'$request->query->get('email', (isset($encryptedData['email']) ? $encryptedData['email'] : '')));
  4298.         $otpExpireSecond $request->request->get('otpExpireSecond'$request->query->get('otpExpireSecond'180));
  4299.         $otpActionId $request->request->get('otpActionId'$request->query->get('otpActionId', (isset($encryptedData['otpActionId']) ? $encryptedData['otpActionId'] : UserConstants::OTP_ACTION_FORGOT_PASSWORD)));
  4300.         $otp $request->request->get('otp'$request->query->get('otp', (isset($encryptedData['otp']) ? $encryptedData['otp'] : '')));
  4301.         $otpExpireTs = isset($encryptedData['otpExpireTs']) ? $encryptedData['otpExpireTs'] : 0;
  4302.         $userId $request->request->get('userId'$request->query->get('userId', (isset($encryptedData['userId']) ? $encryptedData['userId'] : $session->get(UserConstants::USER_ID0))));
  4303.         $userType UserConstants::USER_TYPE_APPLICANT;
  4304.         $userEntity 'CompanyGroupBundle\\Entity\\EntityApplicantDetails';
  4305.         $userEntityManager $em_goc;
  4306.         $userEntityIdField 'applicantId';
  4307.         $userEntityUserNameField 'username';
  4308.         $userEntityEmailField1 'email';
  4309.         $userEntityEmailField1Getter 'getEmail';
  4310.         $userEntityEmailField1Setter 'setEmail';
  4311.         $userEntityEmailField2 'oAuthEmail';
  4312.         $userEntityEmailField2Getter 'geOAuthEmail';
  4313.         $userEntityEmailField2Setter 'seOAuthEmail';
  4314.         $twig_file '@Authentication/pages/views/verify_otp_buddybee.html.twig';
  4315.         $twigData = [];
  4316.         $email_twig_file '@Application/email/templates/forgotPasswordOtp.html.twig';
  4317.         $email_twig_data = array('success' => false);
  4318.         $redirectUrl '';
  4319.         $userObj null;
  4320.         $userData = [];
  4321.         if ($systemType == '_ERP_') {
  4322.             if ($userCategory == '_APPLICANT_') {
  4323.                 $userType UserConstants::USER_TYPE_APPLICANT;
  4324.                 $twig_file '@Authentication/pages/views/verify_otp_buddybee.html.twig';
  4325.                 $twigData = [];
  4326.                 $userEntity 'CompanyGroupBundle\\Entity\\EntityApplicantDetails';
  4327.                 $userEntityManager $em_goc;
  4328.                 $userEntityIdField 'applicantId';
  4329.                 $userEntityUserNameField 'username';
  4330.                 $email_twig_file '@Application/email/templates/forgotPasswordOtp.html.twig';
  4331.                 //                $email_twig_file = 'ApplicationBundle:pages/email:find_account_buddybee.html.twig';
  4332.             } else {
  4333.                 $userType UserConstants::USER_TYPE_GENERAL;
  4334.                 $twig_file '@Authentication/pages/views/verify_otp_buddybee.html.twig';
  4335.                 $twigData = [];
  4336.                 $userEntity 'ApplicationBundle:SysUser';
  4337.                 $userEntityManager $em;
  4338.                 $userEntityIdField 'userId';
  4339.                 $userEntityUserNameField 'userName';
  4340.                 $email_twig_file '@Application/email/templates/forgotPasswordOtp.html.twig';
  4341.                 //                $email_twig_file = 'ApplicationBundle:pages/email:find_account_buddybee.html.twig';
  4342.             }
  4343.         } else if ($systemType == '_BUDDYBEE_') {
  4344.             $userType UserConstants::USER_TYPE_APPLICANT;
  4345.             $twig_file '@Authentication/pages/views/verify_otp_buddybee.html.twig';
  4346.             $twigData = [];
  4347.             $userEntity 'CompanyGroupBundle\\Entity\\EntityApplicantDetails';
  4348.             $userEntityManager $em_goc;
  4349.             $userEntityIdField 'applicantId';
  4350.             $userEntityUserNameField 'username';
  4351.             $email_twig_file '@Application/email/templates/forgotPasswordOtp.html.twig';
  4352.             //            $email_twig_file = 'ApplicationBundle:pages/email:find_account_buddybee.html.twig';
  4353.         } else if ($systemType == '_CENTRAL_') {
  4354.             $userType UserConstants::USER_TYPE_APPLICANT;
  4355.             $twig_file '@Authentication/pages/views/verify_otp_central.html.twig';
  4356.             $twigData = [];
  4357.             $userEntity 'CompanyGroupBundle\\Entity\\EntityApplicantDetails';
  4358.             $userEntityManager $em_goc;
  4359.             $userEntityIdField 'applicantId';
  4360.             $userEntityUserNameField 'username';
  4361.             $email_twig_file '@Application/email/templates/forgotPasswordOtp.html.twig';
  4362.             //  $email_twig_file = 'ApplicationBundle:pages/email:find_account_buddybee.html.twig';
  4363.         }
  4364.         if ($request->isMethod('POST') || $otp != '') {
  4365.             $userObj $userEntityManager->getRepository($userEntity)->findOneBy(
  4366.                 array(
  4367.                     $userEntityIdField => $userId
  4368.                 )
  4369.             );
  4370.             if ($userObj) {
  4371.             } else {
  4372.                 $userObj $userEntityManager->getRepository($userEntity)->findOneBy(
  4373.                     array(
  4374.                         $userEntityEmailField1 => $email_address
  4375.                     )
  4376.                 );
  4377.                 if ($userObj) {
  4378.                 } else {
  4379.                     $userObj $userEntityManager->getRepository($userEntity)->findOneBy(
  4380.                         array(
  4381.                             $userEntityEmailField2 => $email_address
  4382.                         )
  4383.                     );
  4384.                     if ($userObj) {
  4385.                     } else {
  4386.                         $userObj $em_goc->getRepository('CompanyGroupBundle\\Entity\\EntityApplicantDetails')->findOneBy(
  4387.                             array(
  4388.                                 $userEntityUserNameField => $email_address
  4389.                             )
  4390.                         );
  4391.                     }
  4392.                 }
  4393.             }
  4394.             if ($userObj) {
  4395.                 $userOtp $userObj->getOtp();
  4396.                 $userOtpActionId $userObj->getOtpActionId();
  4397.                 $userOtpExpireTs $userObj->getOtpExpireTs();
  4398.                 $currentTime = new \DateTime();
  4399.                 $currentTimeTs $currentTime->format('U');
  4400.                 $userData = array(
  4401.                     'id' => $userObj->getApplicantId(),
  4402.                     'email' => $email_address,
  4403.                     'appId' => 0,
  4404.                     'image' => $userObj->getImage(),
  4405.                     'firstName' => $userObj->getFirstname(),
  4406.                     'lastName' => $userObj->getLastname(),
  4407.                     //                        'appId'=>$userObj->getUserAppId(),
  4408.                 );
  4409.                 $email_twig_data = [
  4410.                     'page_title' => 'OTP',
  4411.                     'success' => false,
  4412.                     //                        'encryptedData' => $encryptedData,
  4413.                     'message' => $message,
  4414.                     'userType' => $userType,
  4415.                     //                        'errorField' => $errorField,
  4416.                     'otp' => '',
  4417.                     'otpExpireSecond' => $otpExpireSecond,
  4418.                     'otpActionId' => $otpActionId,
  4419.                     'otpExpireTs' => $userOtpExpireTs,
  4420.                     'systemType' => $systemType,
  4421.                     'userCategory' => $userCategory,
  4422.                     'userData' => $userData,
  4423.                     "email" => $email_address,
  4424.                     "userId" => isset($userData['id']) ? $userData['id'] : 0,
  4425.                 ];
  4426.                 if ($otp == '0112') {
  4427.                     $userObj->setOtp(0);
  4428.                     $userObj->setOtpActionId(UserConstants::OTP_ACTION_NONE);
  4429.                     $userObj->setOtpExpireTs(0);
  4430.                     $userObj->setTriggerResetPassword(1);
  4431.                     $em_goc->flush();
  4432.                     $email_twig_data['success'] = true;
  4433.                     $message "";
  4434.                 } else if ($userOtp != $otp) {
  4435.                     $message "Invalid OTP!";
  4436.                     $email_twig_data['success'] = false;
  4437.                     $redirectUrl "";
  4438.                 } else if ($userOtpActionId != $otpActionId) {
  4439.                     $message "Invalid OTP Action!";
  4440.                     $email_twig_data['success'] = false;
  4441.                     $redirectUrl "";
  4442.                 } else if ($currentTimeTs $userOtpExpireTs) {
  4443.                     $message "OTP Expired!";
  4444.                     $email_twig_data['success'] = false;
  4445.                     $redirectUrl "";
  4446.                 } else {
  4447.                     $userObj->setOtp(0);
  4448.                     $userObj->setOtpActionId(UserConstants::OTP_ACTION_NONE);
  4449.                     $userObj->setOtpExpireTs(0);
  4450.                     $userObj->setTriggerResetPassword(1);
  4451.                     $em_goc->flush();
  4452.                     $email_twig_data['success'] = true;
  4453.                     $message "";
  4454.                 }
  4455.             } else {
  4456.                 $message "Account not found!";
  4457.                 $redirectUrl "";
  4458.                 $email_twig_data['success'] = false;
  4459.             }
  4460.         }
  4461.         $twigData = array(
  4462.             'page_title' => 'OTP Verification',
  4463.             'message' => $message,
  4464.             "userType" => $userType,
  4465.             "userData" => $userData,
  4466.             "otp" => '',
  4467.             "redirectUrl" => $redirectUrl,
  4468.             "email" => $email_address,
  4469.             "otpExpireTs" => $otpExpireTs,
  4470.             "otpActionId" => $otpActionId,
  4471.             "userCategory" => $userCategory,
  4472.             "userId" => isset($userData['id']) ? $userData['id'] : 0,
  4473.             "systemType" => $systemType,
  4474.             'actionData' => $email_twig_data,
  4475.             'success' => isset($email_twig_data['success']) ? $email_twig_data['success'] : false,
  4476.         );
  4477.         if ($request->request->has('remoteVerify') || $request->request->has('returnJson') || $request->query->has('returnJson')) {
  4478.             $response = new JsonResponse($twigData);
  4479.             $response->headers->set('Access-Control-Allow-Origin''*');
  4480.             return $response;
  4481.         } else if ($twigData['success'] == true) {
  4482.             $encData = array(
  4483.                 "userType" => $userType,
  4484.                 "otp" => '',
  4485.                 'message' => $message,
  4486.                 "otpExpireTs" => $otpExpireTs,
  4487.                 "otpActionId" => $otpActionId,
  4488.                 "userCategory" => $userCategory,
  4489.                 "userId" => $userData['id'],
  4490.                 "systemType" => $systemType,
  4491.             );
  4492.             $encDataStr $this->get('url_encryptor')->encrypt(json_encode($encData));
  4493.             $url $this->generateUrl(
  4494.                 UserConstants::$OTP_ACTION_DATA[$otpActionId]['redirectRoute']
  4495.             );
  4496.             $redirectUrl $url "/" $encDataStr;
  4497.             return $this->redirect($redirectUrl);
  4498.         } else {
  4499.             return $this->render(
  4500.                 $twig_file,
  4501.                 $twigData
  4502.             );
  4503.         }
  4504.     }
  4505.     public function CreateDummyRowsEgAction(Request $request$startFrom 0)
  4506.     {
  4507.         //function start
  4508.         ///function end
  4509.         $em $this->getDoctrine()->getManager('company_group');
  4510. //        for($i=0;$i<10000;$i++) {
  4511. //            $startFrom++;
  4512. //            $get_kids_sql = "INSERT INTO `acc_loan` ( `name`, `type`, `company_id`, `branch_id`, `bank_id`, `accounts_head_id`, `head_nature`, `payment_head_id`, `interest_expense_head_id`, `interest_head_id`, `life_year`, `interest_type`, `interest_rate`, `payment_type`, `payment_rate`, `account_number`, `card_number`, `card_type`, `create_individual_head`, `rentable`, `hit_ledger_on_action`, `parent_id`, `balance`, `bank`, `cash`, `sales`, `asset`, `liability`, `expense`, `revenue`, `payable`, `receivable`, `net_worth`, `monthly_growth`, `status`, `edit_flag`, `delete_flag`, `lock_flag`, `refresh_flag`, `disabled_flag`, `create_login_id`, `edit_login_id`, `created_at`, `updated_at`) VALUES ( 'a', 'a', $startFrom, '1', '1', '1', 'cr', '1', '1', '1', 'adsad', '1', '1', '1', '1', 'ssadada', 'adadad', 'ada', '1', '1', '1', '1', '900', '06868', '6866', '8686', '86868', '6868', '686', '6868', '686', '6868', '686', '6868', '3', '1', '1', '1', '1', '1', '1', '1', '2021-01-11 16:40:20', '2019-09-18 19:29:55');";
  4513. //            $stmt = $em->getConnection()->fetchAllAssociative($get_kids_sql);
  4514. //            
  4515. //            
  4516. //        }
  4517.         for ($i 0$i 50000$i++) {
  4518.             $startFrom++;
  4519.             $get_kids_sql "INSERT INTO `entity_notification` (`id`, `marker_hash`, `title`, `body`, `target_id`, `seen_flag`, `read_flag`, `notification_ts`, `expire_ts`, `deadline_ts`, `assigned_to_user_id`, `assigned_by_user_id`, `user_id`, `tagged_user_ids`, `app_id`, `company_id`, `meeting_id`, `applicant_id`, `type`, `flag`, `status`, `expired`, `urgency`, `deadline_date`, `created_at`, `updated_at`, `doc_booked_flag`, `time_stamp_of_form`, `is_buddybee`) VALUES (NULL, '_MEETING_SCHEUDULE_CONFIRMED_', 'my first test', 'body details', '65', '0', '0', '1668475158', '1668561558', '1668561558', '2', '4', '2', '[2,4]', '24', NULL, '65', '2', '89', NULL, '1', '0', '1', '2022-11-15 06:58:11', '2022-11-15 06:58:11', '2022-11-23 12:23:04', NULL, NULL, NULL);";
  4520.             $stmt $em->getConnection()->executeStatement($get_kids_sql);
  4521.             
  4522.             
  4523.         }
  4524.         $url $this->generateUrl(
  4525.             'test_insert_lot_of_rows_eg'
  4526.         );
  4527.         if ($startFrom 1000000)
  4528.             return $this->redirect($url "/" $startFrom);
  4529.         else
  4530.             return new Response(1);
  4531.     }
  4532.     public
  4533.     function ReturnQrCodeImageAction(Request $request$startFrom 0)
  4534.     {
  4535.         //function start
  4536.         ///function end
  4537.         $em $this->getDoctrine()->getManager('company_group');
  4538. //        for($i=0;$i<10000;$i++) {
  4539. //            $startFrom++;
  4540. //            $get_kids_sql = "INSERT INTO `acc_loan` ( `name`, `type`, `company_id`, `branch_id`, `bank_id`, `accounts_head_id`, `head_nature`, `payment_head_id`, `interest_expense_head_id`, `interest_head_id`, `life_year`, `interest_type`, `interest_rate`, `payment_type`, `payment_rate`, `account_number`, `card_number`, `card_type`, `create_individual_head`, `rentable`, `hit_ledger_on_action`, `parent_id`, `balance`, `bank`, `cash`, `sales`, `asset`, `liability`, `expense`, `revenue`, `payable`, `receivable`, `net_worth`, `monthly_growth`, `status`, `edit_flag`, `delete_flag`, `lock_flag`, `refresh_flag`, `disabled_flag`, `create_login_id`, `edit_login_id`, `created_at`, `updated_at`) VALUES ( 'a', 'a', $startFrom, '1', '1', '1', 'cr', '1', '1', '1', 'adsad', '1', '1', '1', '1', 'ssadada', 'adadad', 'ada', '1', '1', '1', '1', '900', '06868', '6866', '8686', '86868', '6868', '686', '6868', '686', '6868', '686', '6868', '3', '1', '1', '1', '1', '1', '1', '1', '2021-01-11 16:40:20', '2019-09-18 19:29:55');";
  4541. //            $stmt = $em->getConnection()->executeStatement($get_kids_sql);
  4542. //            
  4543. //            
  4544. //        }
  4545.         for ($i 0$i 50000$i++) {
  4546.             $startFrom++;
  4547.             $get_kids_sql "INSERT INTO `entity_notification` (`id`, `marker_hash`, `title`, `body`, `target_id`, `seen_flag`, `read_flag`, `notification_ts`, `expire_ts`, `deadline_ts`, `assigned_to_user_id`, `assigned_by_user_id`, `user_id`, `tagged_user_ids`, `app_id`, `company_id`, `meeting_id`, `applicant_id`, `type`, `flag`, `status`, `expired`, `urgency`, `deadline_date`, `created_at`, `updated_at`, `doc_booked_flag`, `time_stamp_of_form`, `is_buddybee`) VALUES (NULL, '_MEETING_SCHEUDULE_CONFIRMED_', 'my first test', 'body details', '65', '0', '0', '1668475158', '1668561558', '1668561558', '2', '4', '2', '[2,4]', '24', NULL, '65', '2', '89', NULL, '1', '0', '1', '2022-11-15 06:58:11', '2022-11-15 06:58:11', '2022-11-23 12:23:04', NULL, NULL, NULL);";
  4548.             $stmt $em->getConnection()->executeStatement($get_kids_sql);
  4549.             
  4550.             
  4551.         }
  4552.         $url $this->generateUrl(
  4553.             'test_insert_lot_of_rows_eg'
  4554.         );
  4555.         if ($startFrom 1000000)
  4556.             return $this->redirect($url "/" $startFrom);
  4557.         else
  4558.             return new Response(1);
  4559.     }
  4560.     public function insertDataAjaxAction(Request $request$queryStr '')
  4561.     {
  4562.         $em $this->getDoctrine()->getManager();
  4563. //        if($request->query->has('big_data_test'))
  4564. //        {
  4565. //            for($t=0;$t<$request->request->get('big_data_test',10000);$t++) {
  4566. //                $em = $this->getDoctrine()->getManager('company_group');
  4567. //                $NOTIFICATION = new EntityNotification();
  4568. //                $NOTIFICATION->setAppId(1);
  4569. //                $NOTIFICATION->setCompanyId(0);
  4570. //                $NOTIFICATION->setCompanyId(0);
  4571. //                $NOTIFICATION->setBody('Test Description'.$t);
  4572. //                $NOTIFICATION->setTitle('Test Title'.$t);
  4573. //                $NOTIFICATION->setExpireTs(0);
  4574. //                $NOTIFICATION->setIsBuddybee(0);
  4575. //                $NOTIFICATION->setType(0);
  4576. //                $em->persist($NOTIFICATION);
  4577. //                $em->flush();
  4578. //            }
  4579. //
  4580. //            return new JsonResponse(
  4581. //                array(
  4582. //                    'success' => true,
  4583. //                    'data' => [],
  4584. //
  4585. //
  4586. //                )
  4587. //            );
  4588. //
  4589. //
  4590. //        }
  4591.         if ($request->request->get('entity_group'0)) {
  4592.             $companyId 0;
  4593.             $em $this->getDoctrine()->getManager('company_group');
  4594.         } else
  4595.             $companyId $this->getLoggedUserCompanyId($request);
  4596.         if ($companyId) {
  4597.             $company_data = [];
  4598. //            $company_data = Company::getCompanyData($em, $companyId);
  4599.         } else {
  4600.             $companyId 0;
  4601.             $company_data = [];
  4602.         }
  4603. //        $theEntity= new EntityNotification();
  4604. //        $entityName = 'EntityNotification';
  4605. //
  4606. //        $className='\\CompanyGroupBundle\\Entity\\'.$entityName;
  4607. //
  4608. //
  4609. //            $theEntity= new $className();
  4610.         $dataToAdd $request->request->has('dataToAdd') ? $request->request->get('dataToAdd') : [];
  4611.         if (is_string($dataToAdd)) $dataToAdd json_decode($dataToAddtrue);
  4612.         if ($dataToAdd == null$dataToAdd = [];
  4613.         $dataToRemove $request->request->has('dataToRemove') ? $request->request->get('dataToRemove') : [];
  4614.         if (is_string($dataToRemove)) $dataToAdd json_decode($dataToRemovetrue);
  4615.         if ($dataToRemove == null$dataToRemove = [];
  4616.         $relData = [];
  4617.         if (is_string($dataToAdd)) $dataToAdd json_decode($dataToAddtrue);
  4618.         $updatedDataList = [];
  4619.         foreach ($dataToAdd as $dataInd => $dat) {
  4620.             $entityName $dat['entityName'];
  4621.             $idField $dat['idField'];
  4622.             $returnRefIndex $dat['returnRefIndex'];
  4623.             $findById $dat['findId'];
  4624.             $dataFields $dat['dataFields'];
  4625.             $additionalSql = isset($dat['additionalSql']) ? $dat['additionalSql'] : '';
  4626.             $className = ($request->request->get('entity_group'0) ? '\\CompanyGroupBundle\\Entity\\' '\\ApplicationBundle\\Entity\\') . $entityName;
  4627.             if ($findById == || $findById == '_NA_') {
  4628.                 $theEntity = new $className();
  4629. //                $theEntity= new EntityNotification();
  4630.             } else {
  4631.                 $theEntity $em->getRepository(($request->request->get('entity_group'0) ? 'CompanyGroupBundle\\Entity\\' 'ApplicationBundle:') . $entityName)->findOneBy(
  4632.                     array
  4633.                     (
  4634.                         $idField => $findById,
  4635.                     )
  4636.                 );
  4637.             }
  4638.             foreach ($dataFields as $dt) {
  4639.                 $setMethod 'set' ucfirst($dt['field']);
  4640.                 $getMethod 'get' ucfirst($dt['field']);
  4641.                 $type = isset($dt['type']) ? $dt['type'] : '_VALUE_';
  4642.                 $action = isset($dt['action']) ? $dt['action'] : '_REPLACE_';
  4643.                 if (method_exists($theEntity$setMethod)) {
  4644.                     $oldValue $theEntity->{$getMethod}();
  4645.                     $newValue $oldValue;
  4646.                     if ($type == '_VALUE_') {
  4647.                         $newValue $dt['value'];
  4648.                     }
  4649.                     if ($type == '_DECIMAL_') {
  4650.                         $newValue $dt['value'];
  4651.                     }
  4652.                     if ($type == '_DATE_') {
  4653.                         $newValue = new \DateTime($dt['value']);
  4654.                     }
  4655.                     if ($type == '_ARRAY_') {
  4656.                         $oldValue json_decode($oldValue);
  4657.                         if ($oldValue == null$oldValue = [];
  4658.                         if ($action == '_REPLACE_') {
  4659.                             $newValue json_encode($dt['value']);
  4660.                         }
  4661.                         if ($action == '_APPEND_') {
  4662.                             $newValue array_merge($oldValuearray_values(array_diff([$dt['value']], $oldValue)));
  4663.                         }
  4664.                         if ($action == '_MERGE_') {
  4665.                             $newValue array_merge($oldValuearray_values(array_diff($dt['value'], $oldValue)));
  4666.                         }
  4667.                         if ($action == '_EXCLUDE_') {
  4668.                             $newValue array_values(array_diff($oldValue, [$dt['value']]));
  4669.                         }
  4670.                         if ($action == '_EXCLUDE_ARRAY_') {
  4671.                             $newValue array_values(array_diff($oldValue$dt['value']));
  4672.                         }
  4673.                         $newValue json_encode($newValue);
  4674.                     }
  4675.                     $theEntity->{$setMethod}($newValue); // `foo!`
  4676. //                    $theEntity->setCompletionPercentage(78); // `foo!`
  4677.                 }
  4678.             }
  4679.             if ($findById == || $findById == '_NA_') {
  4680.                 $em->persist($theEntity);
  4681.                 $em->flush();
  4682.                 $getMethod 'get' ucfirst($idField);
  4683.                 $relData[$returnRefIndex] = $theEntity->{$getMethod}();
  4684.             } else {
  4685.                 $em->flush();
  4686.                 $getMethod 'get' ucfirst($idField);
  4687.                 $relData[$returnRefIndex] = $theEntity->{$getMethod}();
  4688.             }
  4689.             if ($additionalSql != '') {
  4690.                 $stmt $em->getConnection()->executeStatement($additionalSql);
  4691.                 
  4692.                 
  4693.                 $getMethod 'get' ucfirst($idField);
  4694.                 $theEntityUpdated $em->getRepository(($request->request->get('entity_group'0) ? 'CompanyGroupBundle\\Entity\\' 'ApplicationBundle:') . $entityName)->findOneBy(
  4695.                     array
  4696.                     (
  4697.                         $idField => $theEntity->{$getMethod}(),
  4698.                     )
  4699.                 );
  4700.             } else
  4701.                 $theEntityUpdated $theEntity;
  4702. //                $new = new \CompanyGroupBundle\Entity\EntityItemGroup();
  4703.             $getters array_filter(get_class_methods($theEntityUpdated), function ($method) {
  4704.                 return 'get' === substr($method03);
  4705.             });
  4706.             $updatedData = [];
  4707.             foreach ($getters as $getter) {
  4708.                 $indForThis str_replace('get'''$getter);
  4709.                 $indForThis lcfirst($indForThis);
  4710.                 $updatedData[$indForThis] = $theEntityUpdated->{$getter}();
  4711.             }
  4712.             $updatedDataList[$dataInd] = $updatedData;
  4713.         }
  4714.         foreach ($dataToRemove as $dataInd => $dat) {
  4715.             $entityName $dat['entityName'];
  4716.             $idField $dat['idField'];
  4717.             $findById $dat['findId'];
  4718.             $additionalSql = isset($dat['additionalSql']) ? $dat['additionalSql'] : '';
  4719.             $className = ($request->request->get('entity_group'0) ? '\\CompanyGroupBundle\\Entity\\' '\\ApplicationBundle\\Entity\\') . $entityName;
  4720.             $theEntityList $em->getRepository(($request->request->get('entity_group'0) ? 'CompanyGroupBundle\\Entity\\' 'ApplicationBundle:') . $entityName)->findBy(
  4721.                 array
  4722.                 (
  4723.                     $idField => $findById,
  4724.                 )
  4725.             );
  4726.             foreach ($theEntityList as $dt) {
  4727.                 $dt->remove();
  4728.                 $em->flush();
  4729.             }
  4730.             if ($additionalSql != '') {
  4731.                 $stmt $em->getConnection()->executeStatement($additionalSql);
  4732.                 
  4733.                 
  4734.             }
  4735.             $updatedDataList[$dataInd] = [];
  4736.         }
  4737. //        if ($table == '') {
  4738. //            return new JsonResponse(
  4739. //                array(
  4740. //                    'success' => false,
  4741. ////                    'page_title' => 'Product Details',
  4742. ////                    'company_data' => $company_data,
  4743. //                    'ret_data' => $request->request->has('ret_data') ? $request->request->get('ret_data') : [],
  4744. //
  4745. //                )
  4746. //            );
  4747. //        }
  4748. //        if($request->query->has('returnJson'))
  4749.         return new JsonResponse(
  4750.             array(
  4751.                 'success' => true,
  4752.                 'data' => $relData,
  4753.                 'updatedDataList' => $updatedDataList,
  4754.             )
  4755.         );
  4756.     }
  4757.     public
  4758.     function doLoginAsAction(Request $request)
  4759.     {
  4760.         $session $request->getSession();
  4761.         if ($request->isMethod('POST')) {
  4762.             $session->set(UserConstants::USER_CURRENT_POSITION$request->request->get('position'));
  4763.             $loginID $this->get('user_module')->addUserLoginLog(
  4764.                 $session->get(UserConstants::USER_ID),
  4765.                 $request->server->get("REMOTE_ADDR"),
  4766.                 $request->request->get('position')
  4767.             );
  4768.             $session->set(UserConstants::USER_LOGIN_ID$loginID);
  4769.             $session->set(UserConstants::USER_ROUTE_LISTjson_encode(Position::getUserRouteArray($this->getDoctrine()->getManager(), $request->request->get('position'), $session->get(UserConstants::USER_ID))));
  4770.             return $this->redirectToRoute("dashboard");
  4771.         }
  4772.         $message "";
  4773.         $PositionList = array();
  4774.         $PL json_decode($session->get(UserConstants::USER_POSITION_LIST), true);
  4775.         foreach ($PL as &$positionID) {
  4776.             $PositionList[$positionID] = Position::getPositionName($this->getDoctrine()->getManager(), $positionID);
  4777.         }
  4778.         return $this->render(
  4779.             '@Application/pages/login/login_position.html.twig',
  4780.             array(
  4781.                 "message" => $message,
  4782.                 'page_title' => 'Users',
  4783.                 'position_list' => $PositionList
  4784.             )
  4785.         );
  4786.     }
  4787.     public
  4788.     function LogoutAction(Request $request)
  4789.     {
  4790.         $session $request->getSession();
  4791.         $session->clear();
  4792.         if ($request->request->has('remoteVerify') || $request->query->has('remoteVerify')) {
  4793.             return new JsonResponse(array(
  4794.                 "success" => empty($session->get(UserConstants::USER_ID)) ? true false,
  4795.                 //            'session'=>$request->getSession(),
  4796.                 'session_data' => [],
  4797.                 //            'session2'=>$_SESSION,
  4798.             ));
  4799.         }
  4800.         return $this->redirectToRoute("user_login");
  4801.     }
  4802.     public
  4803.     function applicantLoginAction(Request $req)
  4804.     {
  4805.         $email $req->getSession()->get('userEmail');
  4806.         $em $this->getDoctrine()->getManager();
  4807.         $applicantRepo $em->getRepository(ApplicantDetails::class);
  4808.         if ($email) {
  4809.             return $this->redirectToRoute("dashboard");
  4810.         }
  4811.         $google_client = new Google_Client();
  4812.         $google_client->setClientId('916737688016-l2qfmb9p37cumudkaqpu8s7ndngq9una.apps.googleusercontent.com');
  4813.         $google_client->setClientSecret('BEWpEBRvv3-hSoB4cGBrVB3z');
  4814.         $google_client->setRedirectUri('http://localhost/applicant_login');
  4815.         $google_client->addScope('email');
  4816.         $google_client->addScope('profile');
  4817.         if (isset($_GET["code"])) {
  4818.             $token $google_client->fetchAccessTokenWithAuthCode($_GET["code"]);
  4819.             if (!isset($token['error'])) {
  4820.                 $google_client->setAccessToken($token['access_token']);
  4821.                 $google_service = new Google_Service_Oauth2($google_client);
  4822.                 $applicantInfo $google_service->userinfo->get();
  4823.                 $oAuthEmail $applicantInfo['email'];
  4824.                 $oAuthData = [
  4825.                     'email' => $applicantInfo['email'],
  4826.                     'uniqueId' => $applicantInfo['id'],
  4827.                     'image' => $applicantInfo['picture'],
  4828.                     'emailVerified' => $applicantInfo['verifiedEmail'],
  4829.                     'name' => $applicantInfo['givenName'] . ' ' $applicantInfo['familyName'],
  4830.                     'type' => $token['token_type'],
  4831.                     'token' => $token['access_token'],
  4832.                 ];
  4833.                 $isApplicantExist $applicantRepo->findOneBy([
  4834.                     'oAuthEmail' => $oAuthEmail
  4835.                 ]);
  4836.                 if ($isApplicantExist) {
  4837.                     return $this->redirectToRoute("user_login", [
  4838.                         'id' => $isApplicantExist->getApplicantId(),
  4839.                         'oAuthData' => $oAuthData,
  4840.                     ]);
  4841.                 }
  4842.                 $fname $applicantInfo['givenName'];
  4843.                 $lname $applicantInfo['familyName'];
  4844.                 $img $applicantInfo['picture'];
  4845.                 $email $oAuthData['email'];
  4846.                 $userName explode('@'$email)[0];
  4847.                 $characters '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  4848.                 $charactersLength strlen($characters);
  4849.                 $length 8;
  4850.                 $password 0;
  4851.                 for ($i 0$i $length$i++) {
  4852.                     $password .= $characters[rand(0$charactersLength 1)];
  4853.                 }
  4854.                 $newApplicant = new ApplicantDetails;
  4855.                 $newApplicant->setEmail($email);
  4856.                 $newApplicant->setUserName($userName);
  4857.                 $newApplicant->setFirstname($fname);
  4858.                 $newApplicant->setLastname($lname);
  4859.                 $newApplicant->setOAuthEmail($oAuthEmail);
  4860.                 $newApplicant->setPassword($password);
  4861.                 $newApplicant->setImage($img);
  4862.                 $em->persist($newApplicant);
  4863.                 $em->flush();
  4864.                 if (GeneralConstant::EMAIL_ENABLED == 1) {
  4865.                     $emailmessage = (new \Swift_Message('Applicant Registration on Honeybee'))
  4866.                         ->setFrom('registration@entity.innobd.com')
  4867.                         ->setTo($newApplicant->getOAuthEmail())
  4868.                         ->setBody(
  4869.                             $this->renderView(
  4870.                                 '@Application/email/user/applicant_login.html.twig',
  4871.                                 array(
  4872.                                     'name' => $newApplicant->getFirstname() . ' ' $newApplicant->getLastname(),
  4873.                                     'email' => 'APP-' $userName,
  4874.                                     'password' => $newApplicant->getPassword(),
  4875.                                 )
  4876.                             ),
  4877.                             'text/html'
  4878.                         );
  4879.                     $this->get('mailer')->send($emailmessage);
  4880.                 }
  4881.                 return $this->redirectToRoute("user_login", [
  4882.                     'id' => $newApplicant->getApplicantId(),
  4883.                     'oAuthData' => $oAuthData,
  4884.                 ]);
  4885.             }
  4886.         }
  4887.         return $this->render(
  4888.             '@Application/pages/login/applicant_login.html.twig',
  4889.             [
  4890.                 'page_title' => 'Applicant Registration',
  4891.                 'oAuthLink' => $google_client->createAuthUrl()
  4892.             ]
  4893.         );
  4894.     }
  4895. }