src/Controller/ClientInquiryController.php line 303

Open in your IDE?
  1. <?php
  2.     namespace App\Controller;
  3.     use App\Entity\Announcement;
  4.     use App\Entity\ContactPerson;
  5.     use App\Entity\Customer;
  6.     use App\Entity\CustomerAddress;
  7.     use App\Entity\CustomerInvoiceAddress;
  8.     use App\Entity\Inquiry;
  9.     use App\Entity\InquiryDiscussionEntry;
  10.     use App\Entity\InquiryFile;
  11.     use App\Entity\InquirySupplier;
  12.     use App\Entity\Make;
  13.     use App\Entity\Notification;
  14.     use App\Entity\Offer;
  15.     use App\Entity\OfferFile;
  16.     use App\Entity\PrivateMessage;
  17.     use App\Entity\PrivateMessageAttachment;
  18.     use App\Entity\User;
  19.     use App\Form\InquiryType;
  20.     use App\Form\OfferType;
  21.     use App\Form\PrivateMessageType;
  22.     use App\Repository\AnnouncementRepository;
  23.     use App\Repository\ContactPersonRepository;
  24.     use App\Repository\CustomerAddressRepository;
  25.     use App\Repository\CustomerRepository;
  26.     use App\Repository\InquiryDiscussionEntryRepository;
  27.     use App\Repository\InquiryFileRepository;
  28.     use App\Repository\InquiryRepository;
  29.     use App\Repository\InquirySupplierRepository;
  30.     use App\Repository\OfferRepository;
  31.     use App\Repository\PrivateMessageRepository;
  32.     use App\Services\EmailService;
  33.     use App\Services\GoogleStorageService;
  34.     use App\Services\InquiryService;
  35.     use App\Services\NotificationService;
  36.     use App\Utils\ExtendedEntity;
  37.     use DateTime;
  38.     use Doctrine\Common\Collections\ArrayCollection;
  39.     use Exception;
  40.     use ReflectionClass;
  41.     use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  42.     use Symfony\Component\Form\Form;
  43.     use Symfony\Component\Form\FormInterface;
  44.     use Symfony\Component\HttpFoundation\JsonResponse;
  45.     use Symfony\Component\HttpFoundation\RedirectResponse;
  46.     use Symfony\Component\HttpFoundation\Request;
  47.     use Symfony\Component\HttpFoundation\Response;
  48.     use Symfony\Component\HttpFoundation\Session\SessionInterface;
  49.     use Symfony\Component\Routing\RouterInterface;
  50.     use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  51.     use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  52.     use Symfony\Contracts\Translation\TranslatorInterface;
  53.     use Twig\Environment;
  54.     class ClientInquiryController extends DictionaryController  {
  55.         const PAGE_LIMIT 50;
  56.         private $inquiryService;
  57.         private $emailService;
  58.         private $customerRepository;
  59.         private $offerRepository;
  60.         private $customerAddressRepository;
  61.         private $notificationService;
  62.         private $inquiryDiscussionEntryRepository;
  63.         private $privateMessageRepository;
  64.         private $inquirySupplierRepository;
  65.         private $inquiryFileRepository;
  66.         private $router;
  67.         private $tokenStorage;
  68.         private $announcementRepository;
  69.         private $contactPersonRepository;
  70.         public function __construct(Environment $twig,
  71.                                     TranslatorInterface $translator,
  72.                                     AuthenticationUtils $authenticationUtils,
  73.                                     SessionInterface $session,
  74.                                     InquiryRepository $entityRepository,
  75.                                     InquiryService $inquiryService,
  76.                                     TokenStorageInterface $tokenStorage,
  77.                                     EmailService $emailService,
  78.                                     CustomerRepository $customerRepository,
  79.                                     OfferRepository $offerRepository,
  80.                                     CustomerAddressRepository $customerAddressRepository,
  81.                                     NotificationService $notificationService,
  82.                                     InquiryDiscussionEntryRepository $inquiryDiscussionEntryRepository,
  83.                                     PrivateMessageRepository $privateMessageRepository,
  84.                                     InquirySupplierRepository $inquirySupplierRepository,
  85.                                     InquiryFileRepository $inquiryFileRepository,
  86.                                     RouterInterface $router,
  87.                                     AnnouncementRepository $announcementRepository,
  88.                                     ContactPersonRepository $contactPersonRepository
  89.         ) {
  90.             parent::__construct($twig$translator$authenticationUtils$session);
  91.             $this->entityRepository $entityRepository;
  92.             $this->inquiryService $inquiryService;
  93.             $this->emailService $emailService;
  94.             $this->customerRepository $customerRepository;
  95.             $this->offerRepository $offerRepository;
  96.             $this->customerAddressRepository $customerAddressRepository;
  97.             $this->notificationService $notificationService;
  98.             $this->inquiryDiscussionEntryRepository $inquiryDiscussionEntryRepository;
  99.             $this->privateMessageRepository $privateMessageRepository;
  100.             $this->inquirySupplierRepository $inquirySupplierRepository;
  101.             $this->inquiryFileRepository $inquiryFileRepository;
  102.             $this->router $router;
  103.             $this->tokenStorage $tokenStorage;
  104.             $this->announcementRepository $announcementRepository;
  105.             $this->contactPersonRepository $contactPersonRepository;
  106.             /** @var Customer $customer */
  107.             $customer $tokenStorage->getToken()->getUser();
  108.             //[$activeCount, $waitForDecisionCount, $chosenCount, $withoutOfferCount] = $this->entityRepository->getInquiriesCounts($customer);
  109.             //[$newCount, $duringCount, $wonCount, $lostCount] = $this->entityRepository->getSupplierInquiriesCount($customer);
  110. //            $chosenInquiries = $this->entityRepository->getFinishedChosenCustomersInquiriesIds($customer, 200);
  111. //            $activeInquiries = $this->entityRepository->getActiveCustomersInquiriesIdsWithoutMessagesChecking($customer, 200);
  112. //            $newInquiries =  $this->entityRepository->getLatestInquiriesIds($customer, 200);
  113. //            $wonInquiries = $this->entityRepository->getWonInquiriesIds($customer, 200);
  114. //            $duringInquiries = $this->entityRepository->getDuringInquiriesIds($customer, 200);
  115. //            $lostInquiries = $this->entityRepository->getLostInquiriesIds($customer, 200);
  116. //            $waitForDecisionInquiries = $this->entityRepository->getFinishedWaitForDecisionCustomersInquiries($customer, 200);
  117. //            $withoutOfferInquiries = $this->entityRepository->getFinishedWithoutOfferCustomersInquiries($customer, 200);
  118.             $chosenInquiries $this->entityRepository->getFinishedChosenCustomersInquiriesIds($customer);
  119.             $activeInquiries $this->entityRepository->getActiveCustomersInquiriesIds($customer);
  120.             $newInquiries =  $this->entityRepository->getLatestInquiriesIds($customer);
  121.             $wonInquiries $this->entityRepository->getWonInquiriesIds($customer);
  122.             $duringInquiries $this->entityRepository->getDuringInquiriesIds($customer);
  123.             $lostInquiries $this->entityRepository->getLostInquiriesIds($customer);
  124.             $waitForDecisionInquiries $this->entityRepository->getFinishedWaitForDecisionCustomersInquiries($customer);
  125.             $withoutOfferInquiries $this->entityRepository->getFinishedWithoutOfferCustomersInquiries($customer);
  126.             $this->getTwig()->addGlobal('activeCount'count($activeInquiries));
  127.             $this->getTwig()->addGlobal('waitForDecisionCount'count($waitForDecisionInquiries));
  128.             $this->getTwig()->addGlobal('chosenCount'count($chosenInquiries));
  129.             $this->getTwig()->addGlobal('withoutOfferCount'count($withoutOfferInquiries));
  130.             $this->getTwig()->addGlobal('newCount',  count($newInquiries));
  131.             $this->getTwig()->addGlobal('duringCount',  count($duringInquiries));
  132.             $this->getTwig()->addGlobal('wonCount',  count($wonInquiries));
  133.             $this->getTwig()->addGlobal('rWonCount'$this->entityRepository->completeWonInquiries($customer));
  134.             $this->getTwig()->addGlobal('lostCount',  count($lostInquiries));
  135.             $unreadAllPrivateMessagesCount $this->privateMessageRepository->getAllUnreadPrivateMessages($customer);
  136.             $this->getTwig()->addGlobal('unreadAllPrivateMessagesCount',  $unreadAllPrivateMessagesCount);
  137.             $unreadPrivateMessages $this->privateMessageRepository->getUnreadPrivateMessagesForOffers($customer);
  138.             $unreadPrivateMessagesForFolders = [];
  139.             $unreadPrivateMessagesForFolders['active'] = 0;
  140.             $unreadPrivateMessagesForFolders['waitForDecision'] = 0;
  141.             $unreadPrivateMessagesForFolders['chosen'] = 0;
  142.             $unreadPrivateMessagesForFolders['withoutOffer'] = 0;
  143.             $unreadPrivateMessagesForFolders['new'] = 0;
  144.             $unreadPrivateMessagesForFolders['during'] = 0;
  145.             $unreadPrivateMessagesForFolders['won'] = 0;
  146.             $unreadPrivateMessagesForFolders['lost'] = 0;
  147.             foreach ($chosenInquiries as $inquiry) {
  148.                 if (isset($unreadPrivateMessages[$inquiry['id']])) {
  149.                     $unreadPrivateMessagesForFolders['chosen']++;
  150.                 }
  151.             }
  152.             foreach ($activeInquiries as $inquiry) {
  153.                 if (isset($unreadPrivateMessages[$inquiry['id']])) {
  154.                     $unreadPrivateMessagesForFolders['active']++;
  155.                 }
  156.             }
  157.             foreach ($newInquiries as $inquiry) {
  158.                 if (isset($unreadPrivateMessages[$inquiry['id']])) {
  159.                     $unreadPrivateMessagesForFolders['new']++;
  160.                 }
  161.             }
  162.             foreach ($duringInquiries as $inquiry) {
  163.                 if (isset($unreadPrivateMessages[$inquiry['id']])) {
  164.                     $unreadPrivateMessagesForFolders['during']++;
  165.                 }
  166.             }
  167.             foreach ($wonInquiries as $inquiry) {
  168.                 if (isset($unreadPrivateMessages[$inquiry['id']])) {
  169.                     $unreadPrivateMessagesForFolders['won']++;
  170.                 }
  171.             }
  172.             foreach ($lostInquiries as $inquiry) {
  173.                 if (isset($unreadPrivateMessages[$inquiry['id']])) {
  174.                     $unreadPrivateMessagesForFolders['lost']++;
  175.                 }
  176.             }
  177.             /** @var Inquiry $inquiry */
  178.             foreach ($waitForDecisionInquiries as $inquiry) {
  179.                 if (isset($unreadPrivateMessages[$inquiry->getId()])) {
  180.                     $unreadPrivateMessagesForFolders['waitForDecision']++;
  181.                 }
  182.             }
  183.             /** @var Inquiry $inquiry */
  184.             foreach ($withoutOfferInquiries as $inquiry) {
  185.                 if (isset($unreadPrivateMessages[$inquiry->getId()])) {
  186.                     $unreadPrivateMessagesForFolders['withoutOffer']++;
  187.                 }
  188.             }
  189.             $this->getTwig()->addGlobal('unreadPrivateMessagesForFolders'$unreadPrivateMessagesForFolders);
  190.             if ($customer->getIsSupplier()) {
  191.                 $supplierCookieName 'popupAnnouncementSupplier' date('Ymd');
  192.                 if (isset($_COOKIE[$supplierCookieName])) {
  193.                     $this->getTwig()->addGlobal('showAnnouncementForSupplier'false);
  194.                 } else {
  195.                     setcookie($supplierCookieName"1"time() + 100000000'/');
  196.                     /** @var Announcement $announcement */
  197.                     $announcementForSupplier $this->announcementRepository->findOneBy(['type' => 'supplier''active' => true]);
  198.                     if ($announcementForSupplier !== null) {
  199.                         $this->getTwig()->addGlobal('showAnnouncementForSupplier'true);
  200.                         $this->getTwig()->addGlobal('announcementForSupplierContent'str_replace("\r\n"'<br/>'$announcementForSupplier->getContent()));
  201.                     } else {
  202.                         $this->getTwig()->addGlobal('showAnnouncementForSupplier'false);
  203.                     }
  204.                 }
  205.             } else {
  206.                 $this->getTwig()->addGlobal('showAnnouncementForSupplier'false);
  207.             }
  208.             if ($customer->getIsRecipient()) {
  209.                 $recipientCookieName 'popupAnnouncementSupplier' date('Ymd');
  210.                 if (isset($_COOKIE[$recipientCookieName])) {
  211.                     $this->getTwig()->addGlobal('showAnnouncementForRecipient'false);
  212.                 } else {
  213.                     setcookie($recipientCookieName"1"time() + 100000000'/');
  214.                     /** @var Announcement $announcement */
  215.                     $announcementForRecipient $this->announcementRepository->findOneBy(['type' => 'recipient''active' => true]);
  216.                     if ($announcementForRecipient !== null) {
  217.                         $this->getTwig()->addGlobal('showAnnouncementForRecipient'true);
  218.                         $this->getTwig()->addGlobal('announcementForRecipientContent'str_replace("\r\n"'<br/>'$announcementForRecipient->getContent()));
  219.                     } else {
  220.                         $this->getTwig()->addGlobal('showAnnouncementForRecipient'false);
  221.                     }
  222.                 }
  223.             } else {
  224.                 $this->getTwig()->addGlobal('showAnnouncementForRecipient'false);
  225.             }
  226.         }
  227.         public function updateAddresses()
  228.         {
  229.             $em $this->getDoctrine()->getManager();
  230.             $addreses $this->inquirySupplierRepository->findAll();
  231.             foreach($addreses as $address) {
  232.                 if(is_null($address->getCustomerAddress())){
  233.                     foreach ($address->getCustomer()->getAddresses() as $adres) {
  234.                         if($adres->isDefaultAddress()) {
  235.                             $address->setCustomerAddress($adres);
  236.                             $em->persist($address);
  237.                         }
  238.                     }
  239.                 }
  240.             }
  241.             $em->flush();
  242.         }
  243.         public function indexActive(Request $request) : Response
  244.         {
  245.             //oznaczanie wszystkich starszych niż 30 dni jako przeczytane -->
  246.             $canMarkNotifications false;
  247.             if (file_exists('mark_notification.tmstmp')) {
  248.                 $timestamp file_get_contents('mark_notification.tmstmp');
  249.                 if ($timestamp < (time() - 3600)) {
  250.                     $canMarkNotifications true;
  251.                 }
  252.             } else {
  253.                 $canMarkNotifications true;
  254.             }
  255.             if ($canMarkNotifications) {
  256.                 $monthAgo = (new DateTime())->modify('-30 days');
  257.                 $sql "UPDATE notification SET is_read=1, read_at = NOW() WHERE is_read=0 AND read_at IS NULL AND created_at < '" $monthAgo->format('Y-m-d H:i:s') . "'";
  258.                 $em $this->getDoctrine()->getManager();
  259.                 $stmt $em->getConnection()->prepare($sql);
  260.                 $stmt->execute();
  261.                 $sql "UPDATE private_message SET read_at = NOW() WHERE read_at IS NULL AND created_at < '" $monthAgo->format('Y-m-d H:i:s') . "'";
  262.                 $em $this->getDoctrine()->getManager();
  263.                 $stmt $em->getConnection()->prepare($sql);
  264.                 $stmt->execute();
  265.                 file_put_contents('mark_notification.tmstmp'time());
  266.             }
  267.             // <-- koniec oznaczania
  268.             $customer $this->get('security.token_storage')->getToken()->getUser();
  269.             $inqiries $this->entityRepository->getActiveCustomersInquiries($customer$request->attributes->get('page'), self::PAGE_LIMIT);
  270.             $inquiriesIds $this->entityRepository->getActiveCustomersInquiriesIds($customer);
  271.             $inquiriesCount count($inquiriesIds);
  272.             if (!empty($inqiries)) {
  273.                 if (reset($inqiries)->getCustomerAddress() !== null) {
  274.                     $loggedAddressForGoogleMaps reset($inqiries)->getCustomerAddress()->getCity() . '+' reset($inqiries)->getCustomerAddress()->getStreet() . '+' reset($inqiries)->getCustomerAddress()->getPropertyNumber();
  275.                 } else {
  276.                     $loggedAddressForGoogleMaps null;
  277.                 }
  278.             } else {
  279.                 $loggedAddressForGoogleMaps null;
  280.             }
  281.             $unreadPrivateMessages $this->getUnreadInquiryPrivateMessages();
  282.             $unreadPrivateMessagesForOffersObj $this->privateMessageRepository->getUnreadPrivateMessagesForOffersForRecipient($customer);
  283.             $unreadMessagesForOffersForRecipient = [];
  284.             foreach ($unreadPrivateMessagesForOffersObj as $inquiryId => $pmDatas) {
  285.                 foreach ($pmDatas as $pmData) {
  286.                     $unreadMessagesForOffersForRecipient[$pmData['offer_id']] = true;
  287.                 }
  288.             }
  289.             $unreadPrivateMessagesForOffers = [];
  290.             foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
  291.                 foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
  292.                     $unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
  293.                 }
  294.             }
  295.             return new Response(
  296.                 $this->getTwig()->render(
  297.                     $this->getConfiguration()['templates']['index'],
  298.                     [
  299.                         'entities' => $inqiries,
  300.                         'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
  301.                         'unreadPrivateMessages' => $unreadPrivateMessages,
  302.                         'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
  303.                         'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
  304.                         'folder' => 'active',
  305.                         'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
  306.                         'count' => $inquiriesCount,
  307.                         'routing' => 'client_inquiry_active',
  308.                         'limit' => self::PAGE_LIMIT,
  309.                         'page' => $request->attributes->get('page'),
  310.                         'unreadMessagesForOffersForRecipient' => $unreadMessagesForOffersForRecipient
  311.                     ]
  312.                 )
  313.             );
  314.         }
  315.         public function indexLatest(Request $request) : Response
  316.         {
  317.             /** @var Customer $customer */
  318.             $customer $this->get('security.token_storage')->getToken()->getUser();
  319.             if ($customer->getIsSupplier()) {
  320.                 $inqiries $this->entityRepository->getLatestInquiries($customer$request->attributes->get('page'), self::PAGE_LIMIT);
  321.                 $inquiriesIds $this->entityRepository->getLatestInquiriesIds($customer);
  322.                 $inquiriesCount count($inquiriesIds);
  323.                 if (!empty($inqiries)) {
  324.                     if (reset($inqiries)->getCustomerAddress() !== null) {
  325.                         $loggedAddressForGoogleMaps reset($inqiries)->getCustomerAddress()->getCity() . '+' reset($inqiries)->getCustomerAddress()->getStreet() . '+' reset($inqiries)->getCustomerAddress()->getPropertyNumber();
  326.                     } else {
  327.                         $loggedAddressForGoogleMaps null;
  328.                     }
  329.                 } else {
  330.                     $loggedAddressForGoogleMaps null;
  331.                 }
  332.                 $unreadPrivateMessages $this->getUnreadInquiryPrivateMessages();
  333.                 $unreadPrivateMessagesForOffers = [];
  334.                 foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
  335.                     foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
  336.                         $unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
  337.                     }
  338.                 }
  339.                 return new Response(
  340.                     $this->getTwig()->render(
  341.                         $this->getConfiguration()['templates']['index'],
  342.                         [
  343.                             'entities' => $inqiries,
  344.                             'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
  345.                             'unreadPrivateMessages' => $unreadPrivateMessages,
  346.                             'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
  347.                             'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
  348.                             'folder' => 'latest',
  349.                             'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
  350.                             'count' => $inquiriesCount,
  351.                             'routing' => 'supplier_inquiry_latest',
  352.                             'limit' => self::PAGE_LIMIT,
  353.                             'page' => $request->attributes->get('page'),
  354.                         ]
  355.                     )
  356.                 );
  357.             } else {
  358.                 return $this->redirectToRoute('client_homepage');
  359.             }
  360.         }
  361.         public function indexDuring(Request $request) : Response
  362.         {
  363.             /** @var Customer $customer */
  364.             $customer $this->get('security.token_storage')->getToken()->getUser();
  365.             if ($customer->getIsSupplier()) {
  366.                 $inqiries $this->entityRepository->getDuringInquiries($customer$request->attributes->get('page'), self::PAGE_LIMIT);
  367.                 $inquiriesIds $this->entityRepository->getDuringInquiriesIds($customer);
  368.                 $inquiriesCount count($inquiriesIds);
  369.                 if (!empty($inqiries)) {
  370.                     if (reset($inqiries)->getCustomerAddress() !== null) {
  371.                         $loggedAddressForGoogleMaps reset($inqiries)->getCustomerAddress()->getCity() . '+' reset($inqiries)->getCustomerAddress()->getStreet() . '+' reset($inqiries)->getCustomerAddress()->getPropertyNumber();
  372.                     } else {
  373.                         $loggedAddressForGoogleMaps null;
  374.                     }
  375.                 } else {
  376.                     $loggedAddressForGoogleMaps null;
  377.                 }
  378.                 $unreadPrivateMessages $this->getUnreadInquiryPrivateMessages();
  379.                 $unreadPrivateMessagesForOffers = [];
  380.                 foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
  381.                     foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
  382.                         $unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
  383.                     }
  384.                 }
  385.                 return new Response(
  386.                     $this->getTwig()->render(
  387.                         $this->getConfiguration()['templates']['index'],
  388.                         [
  389.                             'entities' => $inqiries,
  390.                             'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
  391.                             'unreadPrivateMessages' => $unreadPrivateMessages,
  392.                             'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
  393.                             'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
  394.                             'folder' => 'during',
  395.                             'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
  396.                             'count' => $inquiriesCount,
  397.                             'routing' => 'supplier_inquiry_during',
  398.                             'limit' => self::PAGE_LIMIT,
  399.                             'page' => $request->attributes->get('page'),
  400.                         ]
  401.                     )
  402.                 );
  403.             } else {
  404.                 return $this->redirectToRoute('client_homepage');
  405.             }
  406.         }
  407.         public function indexWon(Request $request) : Response
  408.         {
  409.             /** @var Customer $customer */
  410.             $customer $this->get('security.token_storage')->getToken()->getUser();
  411.             if ($customer->getIsSupplier()) {
  412.                 $inqiries $this->entityRepository->getWonInquiries($customer$request->attributes->get('page'), self::PAGE_LIMIT);
  413.                 $inquiriesIds $this->entityRepository->getWonInquiriesIds($customer);
  414.                 $inquiriesCount count($inquiriesIds);
  415.                 $privateMessagesDates $this->privateMessageRepository->getPrivateMessagesForInquiries($customer);
  416.                 $sortedInquiries = [];
  417.                 /** @var Inquiry $inquiry */
  418.                 foreach ($inqiries as $inquiry) {
  419.                     $sortedInquiriesRow['inquiry'] = $inquiry;
  420.                     if (isset($privateMessagesDates[$inquiry->getId()])) {
  421.                         $dateTime = new DateTime();
  422.                         $dateTime->modify('+1 year');
  423.                         $sortedInquiriesRow['date'] = $dateTime;//$privateMessagesDates[$inquiry->getId()];
  424.                     } else {
  425.                         $sortedInquiriesRow['date'] = $inquiry->getCreatedAt();
  426.                     }
  427.                     $sortedInquiries[] = $sortedInquiriesRow;
  428.                 }
  429.                 usort($sortedInquiries, function($a$b) {
  430.                     return $b['date']->getTimestamp() - $a['date']->getTimestamp();
  431.                 });
  432.                 $inqiries = [];
  433.                 foreach ($sortedInquiries as $inq) {
  434.                     $inqiries[] = $inq['inquiry'];
  435.                 }
  436.                 if (!empty($inqiries)) {
  437.                     if (reset($inqiries)->getCustomerAddress() !== null) {
  438.                         $loggedAddressForGoogleMaps reset($inqiries)->getCustomerAddress()->getCity() . '+' reset($inqiries)->getCustomerAddress()->getStreet() . '+' reset($inqiries)->getCustomerAddress()->getPropertyNumber();
  439.                     } else {
  440.                         $loggedAddressForGoogleMaps null;
  441.                     }
  442.                 } else {
  443.                     $loggedAddressForGoogleMaps null;
  444.                 }
  445.                 $unreadPrivateMessages $this->getUnreadInquiryPrivateMessages();
  446.                 $unreadPrivateMessagesForOffers = [];
  447.                 foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
  448.                     foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
  449.                         $unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
  450.                     }
  451.                 }
  452.                 return new Response(
  453.                     $this->getTwig()->render(
  454.                         $this->getConfiguration()['templates']['index'],
  455.                         [
  456.                             'entities' => $inqiries,
  457.                             'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
  458.                             'unreadPrivateMessages' => $unreadPrivateMessages,
  459.                             'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
  460.                             'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
  461.                             'folder' => 'won',
  462.                             'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
  463.                             'count' => $inquiriesCount,
  464.                             'routing' => 'supplier_inquiry_won',
  465.                             'limit' => self::PAGE_LIMIT,
  466.                             'page' => $request->attributes->get('page'),
  467.                         ]
  468.                     )
  469.                 );
  470.             } else {
  471.                 return $this->redirectToRoute('client_homepage');
  472.             }
  473.         }
  474.         public function indexLost(Request $request) : Response
  475.         {
  476.             /** @var Customer $customer */
  477.             $customer $this->get('security.token_storage')->getToken()->getUser();
  478.             if ($customer->getIsSupplier()) {
  479.                 $inqiries $this->entityRepository->getLostInquiries($customer$request->attributes->get('page'), self::PAGE_LIMIT);
  480.                 $inquiriesIds $this->entityRepository->getLostInquiriesIds($customer);
  481.                 $inquiriesCount count($inquiriesIds);
  482.                 if (!empty($inqiries)) {
  483.                     if (reset($inqiries)->getCustomerAddress() !== null) {
  484.                         $loggedAddressForGoogleMaps reset($inqiries)->getCustomerAddress()->getCity() . '+' reset($inqiries)->getCustomerAddress()->getStreet() . '+' reset($inqiries)->getCustomerAddress()->getPropertyNumber();
  485.                     } else {
  486.                         $loggedAddressForGoogleMaps null;
  487.                     }
  488.                 } else {
  489.                     $loggedAddressForGoogleMaps null;
  490.                 }
  491.                 $unreadPrivateMessages $this->getUnreadInquiryPrivateMessages();
  492.                 $unreadPrivateMessagesForOffers = [];
  493.                 foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
  494.                     foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
  495.                         $unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
  496.                     }
  497.                 }
  498.                 return new Response(
  499.                     $this->getTwig()->render(
  500.                         $this->getConfiguration()['templates']['index'],
  501.                         [
  502.                             'entities' => $inqiries,
  503.                             'lost' => true,
  504.                             'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
  505.                             'unreadPrivateMessages' => $unreadPrivateMessages,
  506.                             'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
  507.                             'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
  508.                             'folder' => 'lost',
  509.                             'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
  510.                             'count' => $inquiriesCount,
  511.                             'routing' => 'supplier_inquiry_lost',
  512.                             'limit' => self::PAGE_LIMIT,
  513.                             'page' => $request->attributes->get('page'),
  514.                         ]
  515.                     )
  516.                 );
  517.             } else {
  518.                 return $this->redirectToRoute('client_homepage');
  519.             }
  520.         }
  521.         public function indexWaitForDecision() : Response
  522.         {
  523.             $customer $this->get('security.token_storage')->getToken()->getUser();
  524.             $inqiries $this->entityRepository->getFinishedWaitForDecisionCustomersInquiries($customer);
  525.             if (!empty($inqiries)) {
  526.                 if (reset($inqiries)->getCustomerAddress() !== null) {
  527.                     $loggedAddressForGoogleMaps reset($inqiries)->getCustomerAddress()->getCity() . '+' reset($inqiries)->getCustomerAddress()->getStreet() . '+' reset($inqiries)->getCustomerAddress()->getPropertyNumber();
  528.                 } else {
  529.                     $loggedAddressForGoogleMaps null;
  530.                 }
  531.             } else {
  532.                 $loggedAddressForGoogleMaps null;
  533.             }
  534.             $unreadPrivateMessages $this->getUnreadInquiryPrivateMessages();
  535.             $unreadPrivateMessagesForOffers = [];
  536.             foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
  537.                 foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
  538.                     $unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
  539.                 }
  540.             }
  541.             return new Response(
  542.                 $this->getTwig()->render(
  543.                     $this->getConfiguration()['templates']['index'],
  544.                     [
  545.                         'entities' => $inqiries,
  546.                         'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
  547.                         'unreadPrivateMessages' => $unreadPrivateMessages,
  548.                         'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
  549.                         'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
  550.                         'folder' => 'waitForDecision',
  551.                         'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
  552.                     ]
  553.                 )
  554.             );
  555.         }
  556.         public function indexChosen(Request $request) : Response
  557.         {
  558.             $customer $this->get('security.token_storage')->getToken()->getUser();
  559.             $inqiries $this->entityRepository->getFinishedChosenCustomersInquiries($customer$request->attributes->get('page'), self::PAGE_LIMIT);
  560.             $inquiriesIds $this->entityRepository->getFinishedChosenCustomersInquiriesIds($customer);
  561.             $inquiriesCount count($inquiriesIds);
  562.             $privateMessagesDates $this->privateMessageRepository->getPrivateMessagesForInquiries($customer);
  563.             $sortedInquiries = [];
  564.             /** @var Inquiry $inquiry */
  565.             foreach ($inqiries as $inquiry) {
  566.                 $sortedInquiriesRow['inquiry'] = $inquiry;
  567.                 if (isset($privateMessagesDates[$inquiry->getId()])) {
  568.                     $dateTime = new DateTime();
  569.                     $dateTime->modify('+1 year');
  570.                     $sortedInquiriesRow['date'] = $dateTime;//$privateMessagesDates[$inquiry->getId()];
  571.                 } else {
  572.                     $sortedInquiriesRow['date'] = $inquiry->getCreatedAt();
  573.                 }
  574.                 $sortedInquiries[] = $sortedInquiriesRow;
  575.             }
  576.             usort($sortedInquiries, function($a$b) {
  577.                 return $b['date']->getTimestamp() - $a['date']->getTimestamp();
  578.             });
  579.             $inqiries = [];
  580.             foreach ($sortedInquiries as $inq) {
  581.                 $inqiries[] = $inq['inquiry'];
  582.             }
  583.             if (!empty($inqiries)) {
  584.                 if (reset($inqiries)->getCustomerAddress() !== null) {
  585.                     $loggedAddressForGoogleMaps reset($inqiries)->getCustomerAddress()->getCity() . '+' reset($inqiries)->getCustomerAddress()->getStreet() . '+' reset($inqiries)->getCustomerAddress()->getPropertyNumber();
  586.                 } else {
  587.                     $loggedAddressForGoogleMaps null;
  588.                 }
  589.             } else {
  590.                 $loggedAddressForGoogleMaps null;
  591.             }
  592.             $unreadPrivateMessages $this->getUnreadInquiryPrivateMessages();
  593.             $unreadPrivateMessagesForOffers = [];
  594.             foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
  595.                 foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
  596.                     $unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
  597.                 }
  598.             }
  599.             return new Response(
  600.                 $this->getTwig()->render(
  601.                     $this->getConfiguration()['templates']['index'],
  602.                     [
  603.                         'entities' => $inqiries,
  604.                         'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
  605.                         'unreadPrivateMessages' => $unreadPrivateMessages,
  606.                         'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
  607.                         'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
  608.                         'folder' => 'chosen',
  609.                         'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
  610.                         'count' => $inquiriesCount,
  611.                         'routing' => 'client_inquiry_chosen',
  612.                         'limit' => self::PAGE_LIMIT,
  613.                         'page' => $request->attributes->get('page'),
  614.                     ]
  615.                 )
  616.             );
  617.         }
  618.         public function indexWithoutOffer() : Response
  619.         {
  620.             $customer $this->get('security.token_storage')->getToken()->getUser();
  621.             $inqiries $this->entityRepository->getFinishedWithoutOfferCustomersInquiries($customer);
  622.             if (!empty($inqiries)) {
  623.                 if (reset($inqiries)->getCustomerAddress() !== null) {
  624.                     $loggedAddressForGoogleMaps reset($inqiries)->getCustomerAddress()->getCity() . '+' reset($inqiries)->getCustomerAddress()->getStreet() . '+' reset($inqiries)->getCustomerAddress()->getPropertyNumber();
  625.                 } else {
  626.                     $loggedAddressForGoogleMaps null;
  627.                 }
  628.             } else {
  629.                 $loggedAddressForGoogleMaps null;
  630.             }
  631.             $unreadPrivateMessages $this->getUnreadInquiryPrivateMessages();
  632.             $unreadPrivateMessagesForOffers = [];
  633.             foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
  634.                 foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
  635.                     $unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
  636.                 }
  637.             }
  638.             return new Response(
  639.                 $this->getTwig()->render(
  640.                     $this->getConfiguration()['templates']['index'],
  641.                     [
  642.                         'entities' => $inqiries,
  643.                         'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
  644.                         'unreadPrivateMessages' => $unreadPrivateMessages,
  645.                         'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
  646.                         'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
  647.                         'folder' => 'withoutOffer',
  648.                         'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
  649.                     ]
  650.                 )
  651.             );
  652.         }
  653.         public function indexArchived(Request $request) : Response
  654.         {
  655.             $customer $this->get('security.token_storage')->getToken()->getUser();
  656.             $inqiries $this->entityRepository->getArchivedCustomersInquiries($customer$request->attributes->get('page'), self::PAGE_LIMIT);
  657.             $inquiriesIds $this->entityRepository->getArchivedCustomersInquiriesIds($customer);
  658.             $inquiriesCount count($inquiriesIds);
  659.             if (!empty($inqiries)) {
  660.                 if (reset($inqiries)->getCustomerAddress() !== null) {
  661.                     $loggedAddressForGoogleMaps reset($inqiries)->getCustomerAddress()->getCity() . '+' reset($inqiries)->getCustomerAddress()->getStreet() . '+' reset($inqiries)->getCustomerAddress()->getPropertyNumber();
  662.                 } else {
  663.                     $loggedAddressForGoogleMaps null;
  664.                 }
  665.             } else {
  666.                 $loggedAddressForGoogleMaps null;
  667.             }
  668.             $unreadPrivateMessages $this->getUnreadInquiryPrivateMessages();
  669.             $unreadPrivateMessagesForOffers = [];
  670.             foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
  671.                 foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
  672.                     $unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
  673.                 }
  674.             }
  675.             return new Response(
  676.                 $this->getTwig()->render(
  677.                     $this->getConfiguration()['templates']['index'],
  678.                     [
  679.                         'entities' => $inqiries,
  680.                         'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
  681.                         'unreadPrivateMessages' => $unreadPrivateMessages,
  682.                         'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
  683.                         'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
  684.                         'folder' => 'archived',
  685.                         'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
  686.                         'count' => $inquiriesCount,
  687.                         'routing' => 'client_inquiry_archived',
  688.                         'limit' => self::PAGE_LIMIT,
  689.                         'page' => $request->attributes->get('page'),
  690.                     ]
  691.                 )
  692.             );
  693.         }
  694.         public function show(Request $request) : Response
  695.         {
  696.             /** @var Customer $customer */
  697.             $customer $this->get('security.token_storage')->getToken()->getUser();
  698.             /** @var Inquiry $inquiry */
  699.             $inquiry $this->entityRepository->find($request->attributes->get('id'));
  700.             $makeIds = [];
  701.             /** @var Make $make */
  702.             foreach ($customer->getMakes()->toArray() as $make) {
  703.                 $makeIds[$make->getId()] = $make->getId() ;
  704.             }
  705.             if ($customer->getIsSupplier()) {
  706.                 $inquirySupplier $this->inquirySupplierRepository->findOneBy(['inquiry' => $inquiry->getId(), 'customer' => $customer->getId(), 'seen' => false]);
  707.                 if ($inquirySupplier !== null) {
  708.                     $inquirySupplier->setSeen(true);
  709.                     $entityManager $this->getDoctrine()->getManager();
  710.                     $entityManager->persist($inquirySupplier);
  711.                     $entityManager->flush();
  712.                 }
  713.                 if ($inquiry->getRecipient()->getId() !== $customer->getId()) {
  714.                     $inquirySupplier $this->inquirySupplierRepository->findOneBy(['inquiry' => $inquiry->getId(), 'customer' => $customer->getId()]);
  715.                     if ($inquirySupplier === null) {
  716.                         $this->addFlash('error'$this->getTranslator()->trans('inquiry.messages.you_cannot_see_not_yours_inquiry'));
  717.                         return $this->redirectToRoute('supplier_inquiry_latest');
  718.                     }
  719.                 }
  720.             }
  721.             $choosedSuppliersForInquiryIds = [];
  722.             foreach ($inquiry->getChoosedSuppliers() as $choosedSupplier) {
  723.                 $choosedSuppliersForInquiryIds[$choosedSupplier->getId()] = $choosedSupplier->getId();
  724.             }
  725.             if ($customer->getIsRecipient() && !$customer->getIsSupplier()) {
  726.                 if ($customer->getId() !== $inquiry->getRecipient()->getId()) {
  727.                     $this->addFlash('error'$this->getTranslator()->trans('inquiry.messages.you_cannot_see_not_yours_inquiry'));
  728.                     return $this->redirectToRoute('client_inquiry_active');
  729.                 }
  730.             } elseif ($customer->getIsSupplier() && !$customer->getIsRecipient()) {
  731.                 /** @var Inquiry $inquiry */
  732.                 if ((!in_array($inquiry->getMake()->getId(), $makeIds)) && ($inquiry->getRecipient()->getId() != $customer->getId())) {
  733.                     $this->addFlash('error'$this->getTranslator()->trans('inquiry.messages.you_cannot_see_inquiry_for_not_your_makes'));
  734.                     return $this->redirectToRoute('supplier_inquiry_latest');
  735.                 }
  736.             } elseif ($customer->getIsSupplier() && $customer->getIsRecipient()) {
  737.                 if (
  738.                     (!in_array($inquiry->getMake()->getId(), $makeIds)) && ($inquiry->getRecipient()->getId() != $customer->getId()) &&
  739.                     ($customer->getId() !== $inquiry->getRecipient()->getId()) && (!in_array($customer->getId(), $choosedSuppliersForInquiryIds))
  740.                 ) {
  741.                     $this->addFlash('error'$this->getTranslator()->trans('inquiry.messages.you_cannot_see_inquiry_for_not_your_makes'));
  742.                     return $this->redirectToRoute('supplier_inquiry_latest');
  743.                 }
  744.             }
  745.             if($this->entityRepository->checkIfInquiryIsLost($inquiry$this->get('security.token_storage')->getToken()->getUser())) {
  746.                 $lost true;
  747.             } else {
  748.                 $lost false;
  749.             }
  750.             $notChosen false;
  751.             $thisCustomer false;
  752.             foreach ($inquiry->getOffers() as $offer) {
  753.                 if ($offer->getChosen()) {
  754.                     $notChosen true;
  755.                 }
  756.             }
  757.             if ($inquiry->getRecipient()->getId() == $customer->getId()) {
  758.                 $thisCustomer true;
  759.             }
  760.             $loggedAddressForGoogleMaps null;
  761.             if ($thisCustomer) {
  762.                 if ($inquiry->getCustomerAddress() !== null) {
  763.                     $loggedAddressForGoogleMaps $inquiry->getCustomerAddress()->getCity() . '+' $inquiry->getCustomerAddress()->getStreet() . '+' $inquiry->getCustomerAddress()->getPropertyNumber();
  764.                 }
  765.             } else {
  766.                 /** @var CustomerAddress $address */
  767.                 foreach ($customer->getAddresses() as $address) {
  768.                     if ($address->isDefaultAddress()) {
  769.                         $loggedAddressForGoogleMaps $address->getCity() . '+' $address->getStreet() . '+' $address->getPropertyNumber();
  770.                     }
  771.                 }
  772.             }
  773.             $inquirySuppliersIds = [];
  774.             $contactPersonsForCustomers = [];
  775.             /** @var InquirySupplier $inquirySupplier */
  776.             foreach ($inquiry->getInquirySuppliers() as $inquirySupplier) {
  777.                 $defaultContactPerson $this->contactPersonRepository->findOneBy([
  778.                     'customer' => $inquirySupplier->getCustomer()->getId(),
  779.                     'defaultPerson' => true
  780.                 ]);
  781.                 $contactPersonsForCustomers[$inquirySupplier->getCustomer()->getId()] = $defaultContactPerson;
  782.             }
  783.             $googleStorageService = new GoogleStorageService(
  784.                 $this->getParameter('file_upload_google_storage_key_file_location'),
  785.                 $this->getParameter('file_upload_google_storage_project_id'),
  786.                 $this->getParameter('file_upload_google_storage_bucket_name'),
  787.                 $this->getParameter('file_upload_google_storage_bucket_location')
  788.             );
  789.             $miniatureFiles = [];
  790.             $entityManager $this->getEntityManager();
  791.             foreach ($inquiry->getInquiryFiles() as $inquiryFile) {
  792.                 if ($inquiryFile->getFileType() == 'image') {
  793.                     $miniatureFile = new InquiryFile();
  794.                     $filePath pathinfo($inquiryFile->getFilePath(), PATHINFO_DIRNAME);
  795.                     $filename pathinfo($inquiryFile->getFilePath(), PATHINFO_FILENAME);
  796.                     $extension pathinfo($inquiryFile->getFilePath(), PATHINFO_EXTENSION);
  797.                     $miniatureFilePath $filePath DIRECTORY_SEPARATOR $filename '_100x100.' $extension ;
  798.                     $miniatureFile->setFilePath($miniatureFilePath);
  799.                     [$url$validityTime] = $googleStorageService->createGoogleStorageFileUrl($miniatureFile);
  800.                     $miniatureFiles[$inquiryFile->getId()]['100x100']['url'] = $url;
  801.                 }
  802.                 [$url$validityTime] = $googleStorageService->createGoogleStorageFileUrl($inquiryFile);
  803.                 $inquiryFile->setUrl($url);
  804.                 $inquiryFile->setUrlValidityDate($validityTime);
  805.                 $entityManager->persist($inquiryFile);
  806.             }
  807.             $entityManager->flush();
  808.             return new Response(
  809.                 $this->getTwig()->render(
  810.                     $this->getConfiguration()['templates']['show'],
  811.                     [
  812.                         'inquiry' => $inquiry,
  813.                         'lost' => $lost,
  814.                         'showArchiveButton' => (!$notChosen && $thisCustomer && !$inquiry->getArchived()),
  815.                         'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
  816.                         'contactPersonsForCustomers' => $contactPersonsForCustomers,
  817.                         'phrase' => $request->attributes->get('phrase'),
  818.                         'miniatureFiles' => $miniatureFiles
  819.                     ]
  820.                 )
  821.             );
  822.         }
  823.         public function indexSupplierArchived(Request $request) : Response
  824.         {
  825.             /** @var Customer $customer */
  826.             $customer $this->get('security.token_storage')->getToken()->getUser();
  827.             if ($customer->getIsSupplier()) {
  828.                 $inqiries $this->entityRepository->getArchivedSupplierInquiries($customer$request->attributes->get('page'), self::PAGE_LIMIT);
  829.                 $inquiriesIds $this->entityRepository->getArchivedSupplierInquiriesIds($customer);
  830.                 $inquiriesCount count($inquiriesIds);
  831.                 if (!empty($inqiries)) {
  832.                     $loggedAddressForGoogleMaps reset($inqiries)->getCustomerAddress()->getCity() . '+' reset($inqiries)->getCustomerAddress()->getStreet() . '+' reset($inqiries)->getCustomerAddress()->getPropertyNumber();
  833.                 } else {
  834.                     $loggedAddressForGoogleMaps '';
  835.                 }
  836.                 $unreadPrivateMessages $this->getUnreadInquiryPrivateMessages();
  837.                 $unreadPrivateMessagesForOffers = [];
  838.                 foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
  839.                     foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
  840.                         $unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
  841.                     }
  842.                 }
  843.                 return new Response(
  844.                     $this->getTwig()->render(
  845.                         $this->getConfiguration()['templates']['index'],
  846.                         [
  847.                             'entities' => $inqiries,
  848.                             'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
  849.                             'unreadPrivateMessages' => $unreadPrivateMessages,
  850.                             'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
  851.                             'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
  852.                             'folder' => 'supplierArchived',
  853.                             'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
  854.                             'count' => $inquiriesCount,
  855.                             'routing' => 'supplier_inquiry_archived',
  856.                             'limit' => self::PAGE_LIMIT,
  857.                             'page' => $request->attributes->get('page'),
  858.                         ]
  859.                     )
  860.                 );
  861.             } else {
  862.                 return $this->redirectToRoute('client_homepage');
  863.             }
  864.         }
  865.         public function makeOffer(Request $request) : Response
  866.         {
  867.             $inquiry null;
  868.             $offer null;
  869.             if (null !== $request->attributes->get('id')) {
  870.                 /** @var Inquiry $inquiry */
  871.                 $inquiry $this->entityRepository->find($request->attributes->get('id'));
  872.                 $offer = new Offer();
  873.             } elseif (null !== $request->attributes->get('offerId')) {
  874.                 /** @var Offer $offer */
  875.                 $offer $this->offerRepository->find($request->attributes->get('offerId'));
  876.                 $inquiry $offer->getInquiry();
  877.             }
  878. //          zlec 11312
  879. //            if ($inquiry->getExpirationDate() <= new DateTime()) {
  880. //                $this->addFlash('error', $this->getTranslator()->trans('inquiry.messages.isLost'));
  881. //                return $this->redirectToRoute('supplier_inquiry_lost');
  882. //            }
  883.             if($this->entityRepository->checkIfInquiryIsLost($inquiry$this->get('security.token_storage')->getToken()->getUser())) {
  884.                 $this->addFlash('error'$this->getTranslator()->trans('inquiry.messages.isLost'));
  885.                 return $this->redirectToRoute('supplier_inquiry_lost');
  886.             }
  887.             $formNewOffer $this->createForm(OfferType::class, $offer);
  888.             $formNewOffer->add('submit'SubmitType::class, ['label' => 'offer.makeOffer']);
  889.             $oldOfferFiles = [];
  890.             if (null !== $request->attributes->get('offerId')) {
  891.                 foreach ($offer->getOfferFiles() as $offerFile) {
  892.                     $oldOfferFiles[] = $offerFile;
  893.                 }
  894.             }
  895.             /** @var Customer $customer */
  896.             $customer $this->get('security.token_storage')->getToken()->getUser();
  897.             $formNewOffer->handleRequest($request);
  898.             if ($formNewOffer->isSubmitted() && $formNewOffer->isValid()) {
  899.                 $offerFileArray = [];
  900.                 foreach ($offer->getOfferFiles() as $offerUploadedFile) {
  901.                     $offerFileArray[] = $this->inquiryService->createOfferFileFromUploadedFile($offer$offerUploadedFile'file');
  902.                 }
  903.                 $offerFileArray array_merge($offerFileArray$oldOfferFiles);
  904.                 /** @var OfferFile $offerFile */
  905.                 foreach ($offerFileArray as $offerFile) {
  906.                     $offerFile->setOffer($offer);
  907.                 }
  908.                 if(!is_null($request->files->get('offer')['invoiceFile'])) {
  909.                     $invoiceFile $this->inquiryService->createOfferFileFromUploadedFile($offer$request->files->get('offer')['invoiceFile'], OfferFile::OFFER_FILE_KIND_INVOICE);
  910.                     if ($offer->getInquiry()->getRecipient()->isNotificationsInvoiceNotification()) {
  911.                         $this->notificationService->createNotification('offer.messages.supplierAttachedInvoice'$offer->getInquiry()->getRecipient(), $offer->getSupplier(), Notification::NOTIFICATION_TYPE_INVOICE$offer->getId());
  912.                     }
  913.                 } else {
  914.                     $invoiceFile $offer->getInvoiceFile();
  915.                 }
  916.                 $googleStorageService = new GoogleStorageService(
  917.                     $this->getParameter('file_upload_google_storage_key_file_location'),
  918.                     $this->getParameter('file_upload_google_storage_project_id'),
  919.                     $this->getParameter('file_upload_google_storage_bucket_name'),
  920.                     $this->getParameter('file_upload_google_storage_bucket_location')
  921.                 );
  922.                 $pathForOfferFiles $_SERVER['DOCUMENT_ROOT'] . '/upload/' $offer->getFileUploadId();
  923.                 $files glob($pathForOfferFiles '/*.*');
  924.                 foreach ($files as $file) {
  925.                     $fileContent file_get_contents($file);
  926.                     $extension pathinfo($filePATHINFO_EXTENSION);
  927.                     $newFilename uniqid('upload.'true) . '.' $extension;
  928.                     $mimeType mime_content_type($file);
  929.                     $fileType = (strpos($mimeType'image/') !== false) ? 'image' 'file';
  930.                     $uploadOfferFile = new OfferFile();
  931.                     $uploadOfferFile->setOffer($offer);
  932.                     $uploadOfferFile->setFileType($fileType);
  933.                     $uploadOfferFile->setMimeType($mimeType);
  934.                     $uploadOfferFile->setFilePath('upload/' $newFilename);
  935.                     $uploadOfferFile->setOriginalFileName(basename($file));
  936.                     $uploadOfferFile $googleStorageService->saveFileWithMiniaturesToFilesystem($uploadOfferFile$fileContent);
  937.                     unlink($file);
  938.                     $offerFileArray[] = $uploadOfferFile;
  939.                 }
  940.                 @rmdir($pathForOfferFiles);
  941.                 $offer->setOfferFiles(new ArrayCollection($offerFileArray));
  942.                 $offer->setSupplier($customer);
  943.                 $offer->setInquiry($inquiry);
  944.                 $offer->setCreatedAt(new DateTime());
  945.                 $offer->setTotalPrice($offer->getPriceAfterDiscount() + $offer->getDeliveryPrice());
  946.                 $offer->setRequestInvoice($offer->getRequestInvoice() ?? false);
  947.                 $offer->setInvoiceFile($invoiceFile);
  948.                 $entityManager $this->getDoctrine()->getManager();
  949.                 $entityManager->persist($offer);
  950.                 $customer->setLastOfferDate(new DateTime());
  951.                 $entityManager->persist($customer);
  952.                 if (null !== $request->attributes->get('offerId')) {
  953.                     foreach ($offer->getOfferFiles() as $file) {
  954.                         $file->setOffer($offer);
  955.                         $entityManager->persist($file);
  956.                     }
  957.                 }
  958.                 $privateMessagesForCustomerAndInquiry $this->privateMessageRepository->findBy([
  959.                     'author' => $customer->getId(),
  960.                     'inquiry' => $inquiry->getId()
  961.                 ]);
  962.                 /** @var PrivateMessage $privateMessageForCustomerAndInquiry */
  963.                 foreach ($privateMessagesForCustomerAndInquiry as $privateMessageForCustomerAndInquiry) {
  964.                     if ($privateMessageForCustomerAndInquiry->getOffer() === null) {
  965.                         $privateMessageForCustomerAndInquiry->setOffer($offer);
  966.                         $privateMessageForCustomerAndInquiry->setInquiry($offer->getInquiry());
  967.                         $entityManager->persist($privateMessageForCustomerAndInquiry);
  968.                     }
  969.                 }
  970.                 $entityManager->flush();
  971.                 /** @var RouterInterface $router */
  972.                 $router $this->get('router');
  973.                 if (null !== $request->attributes->get('offerId')) {
  974.                     $content $this->getTwig()->render(
  975.                         'Email/updateOffer.html.twig',
  976.                         [
  977.                             'inquiryLink' => $router->generate('client_inquiry_details', ['id' => $inquiry->getId()], RouterInterface::ABSOLUTE_URL)
  978.                         ]
  979.                     );
  980.                     $notificationContent 'offer.mail.offerForInquiryWasUpdated';
  981.                 } else {
  982.                     $content $this->getTwig()->render(
  983.                         'Email/newOffer.html.twig',
  984.                         [
  985.                             'inquiryLink' => $router->generate('client_inquiry_details', ['id' => $inquiry->getId()], RouterInterface::ABSOLUTE_URL)
  986.                         ]
  987.                     );
  988.                     $notificationContent 'offer.mail.newOfferForInquiry';
  989.                 }
  990.                 if ($offer->getSupplier()->isNotificationsOfferNotification()) {
  991.                     $this->notificationService->createNotification($notificationContent$inquiry->getRecipient(), $offer->getSupplier(), Notification::NOTIFICATION_TYPE_OFFER$offer->getId());
  992.                 }
  993.                 if ($offer->getSupplier()->isNotificationsOfferMail()) {
  994.                     $this->emailService->send(
  995.                         [$inquiry->getRecipient()->getUsername()],
  996.                         $this->getTranslator()->trans('defaultContent.mail.subject') . ' ' $inquiry->getMake() . ' ' $inquiry->getModel() . ' ' $inquiry->getRegistrationNumber(),
  997.                         $content
  998.                     );
  999.                 }
  1000.                 $this->checkBestOffer($offer);
  1001.                 $this->addFlash('success'$this->getTranslator()->trans('offer.messages.offerWasMade'));
  1002.                 return $this->redirectToRoute($this->getConfiguration()['routings']['inquiryDetails'], ['id' => $inquiry->getId()]);
  1003.             }
  1004.             $loggedAddressForGoogleMaps null;
  1005.             /** @var CustomerAddress $address */
  1006.             foreach ($customer->getAddresses() as $address) {
  1007.                 if ($address->isDefaultAddress()) {
  1008.                     $loggedAddressForGoogleMaps $address->getCity() . '+' $address->getStreet() . '+' $address->getPropertyNumber();
  1009.                 }
  1010.             }
  1011.             $googleStorageService = new GoogleStorageService(
  1012.                 $this->getParameter('file_upload_google_storage_key_file_location'),
  1013.                 $this->getParameter('file_upload_google_storage_project_id'),
  1014.                 $this->getParameter('file_upload_google_storage_bucket_name'),
  1015.                 $this->getParameter('file_upload_google_storage_bucket_location')
  1016.             );
  1017.             $miniatureFiles = [];
  1018.             $entityManager $this->getEntityManager();
  1019.             /** @var OfferFile $offerFile */
  1020.             foreach ($offer->getOfferFiles() as $offerFile) {
  1021.                 if (($offerFile->getWidth() === null) && (strpos($offerFile->getMimeType(), 'image') !== false)) {
  1022.                     $imageData getimagesize($offerFile->getFilePath());
  1023.                     $offerFile->setWidth($imageData[0]);
  1024.                     $offerFile->setHeight($imageData[1]);
  1025.                     $entityManager->persist($offerFile);
  1026.                 }
  1027.                 if ($offerFile->getFileType() == 'image') {
  1028.                     $miniatureFile = new OfferFile();
  1029.                     $filePath pathinfo($offerFile->getFilePath(), PATHINFO_DIRNAME);
  1030.                     $filename pathinfo($offerFile->getFilePath(), PATHINFO_FILENAME);
  1031.                     $extension pathinfo($offerFile->getFilePath(), PATHINFO_EXTENSION);
  1032.                     $miniatureFilePath $filePath DIRECTORY_SEPARATOR $filename '_100x100.' $extension ;
  1033.                     $miniatureFile->setFilePath($miniatureFilePath);
  1034.                     [$url$validityTime] = $googleStorageService->createGoogleStorageFileUrl($miniatureFile);
  1035.                     $miniatureFiles[$offerFile->getId()]['100x100']['url'] = $url;
  1036.                 }
  1037.                 [$url$validityTime] = $googleStorageService->createGoogleStorageFileUrl($offerFile);
  1038.                 $offerFile->setUrl($url);
  1039.                 $offerFile->setUrlValidityDate($validityTime);
  1040.                 $entityManager->persist($offerFile);
  1041.             }
  1042.             foreach ($inquiry->getInquiryFiles() as $inquiryFile) {
  1043.                 if (($inquiryFile->getWidth() === null) && (strpos($inquiryFile->getMimeType(), 'image') !== false)) {
  1044.                     $imageData getimagesize($inquiryFile->getFilePath());
  1045.                     $inquiryFile->setWidth($imageData[0]);
  1046.                     $inquiryFile->setHeight($imageData[1]);
  1047.                     $entityManager->persist($inquiryFile);
  1048.                 }
  1049.                 if ($inquiryFile->getFileType() == 'image') {
  1050.                     $miniatureFile = new InquiryFile();
  1051.                     $filePath pathinfo($inquiryFile->getFilePath(), PATHINFO_DIRNAME);
  1052.                     $filename pathinfo($inquiryFile->getFilePath(), PATHINFO_FILENAME);
  1053.                     $extension pathinfo($inquiryFile->getFilePath(), PATHINFO_EXTENSION);
  1054.                     $miniatureFilePath $filePath DIRECTORY_SEPARATOR $filename '_100x100.' $extension ;
  1055.                     $miniatureFile->setFilePath($miniatureFilePath);
  1056.                     [$url$validityTime] = $googleStorageService->createGoogleStorageFileUrl($miniatureFile);
  1057.                     $miniatureFiles[$inquiryFile->getId()]['100x100']['url'] = $url;
  1058.                 }
  1059.                 [$url$validityTime] = $googleStorageService->createGoogleStorageFileUrl($inquiryFile);
  1060.                 $inquiryFile->setUrl($url);
  1061.                 $inquiryFile->setUrlValidityDate($validityTime);
  1062.                 $entityManager->persist($inquiryFile);
  1063.             }
  1064.             $entityManager->flush();
  1065.             return new Response(
  1066.                 $this->getTwig()->render(
  1067.                     $this->getConfiguration()['templates']['newOffer'],
  1068.                     [
  1069.                         'offer' => $offer,
  1070.                         'inquiry' => $inquiry,
  1071.                         'formNewOffer' => $formNewOffer->createView(),
  1072.                         'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
  1073.                         'miniatureFiles' => $miniatureFiles,
  1074.                     ]
  1075.                 )
  1076.             );
  1077.         }
  1078.         public function privateMessageGetFile($id)
  1079.         {
  1080.             /** @var PrivateMessageAttachment $file */
  1081.             $file $this->getDoctrine()->getRepository(PrivateMessageAttachment::class)->find($id);
  1082.             $response = new Response();
  1083.             $response->headers->set('Cache-Control''private');
  1084.             $response->headers->set('Content-type'$file->getMimeType());
  1085.             $response->headers->set('Content-Disposition''attachment; filename="' basename($file->getOriginalFileName()) . '";');
  1086.             //$response->headers->set('Content-length', filesize($file->getFilePath()));
  1087.             $response->sendHeaders();
  1088.             $response->setContent(file_get_contents($file->getUrl()));
  1089.             return $response;
  1090.         }
  1091.         public function addDiscussionEntry(Request $request) : Response
  1092.         {
  1093.             /** @var RouterInterface $router */
  1094.             $router $this->get('router');
  1095.             $content trim($request->request->get('content'));
  1096.             do {
  1097.                 $imageTagContent substr($contentstrpos($content'<img src="data'));
  1098.                 $imageTagContent substr($imageTagContent0strpos($imageTagContent'/>'));
  1099.                 $imageType substr($imageTagContentstrpos($imageTagContent'src="') + strlen('src="'));
  1100.                 $imageType substr($imageType0strpos($imageType'base64,') + strlen('base64,'));
  1101.                 $imageContent substr($imageTagContentstrpos($imageTagContent'base64,') + strlen('base64,'));
  1102.                 $imageContent substr($imageContent0strpos($imageContent'"'));
  1103.                 $imageToFile base64_decode($imageContent);
  1104.                 $imageFileName 'upload/' uniqid('discussion_image_'true) . '.png';
  1105.                 file_put_contents($imageFileName$imageToFile);
  1106.                 $newImageTagContent str_replace(
  1107.                     $imageType $imageContent,
  1108.                     $router->generate('client_homepage', [], RouterInterface::ABSOLUTE_URL) . '/' $imageFileName,
  1109.                     $imageTagContent
  1110.                 );
  1111.                 $content str_replace($imageTagContent$newImageTagContent$content);
  1112.             } while (strpos($content'"data:image') !== false);
  1113.             /** @var Customer $customer */
  1114.             $customer $this->get('security.token_storage')->getToken()->getUser();
  1115.             /** @var Inquiry $inquiry */
  1116.             $inquiry $this->entityRepository->find($request->request->get('inquiryId'));
  1117.             /** @var InquiryDiscussionEntry $inquiryDiscussionEntry */
  1118.             $inquiryDiscussionEntry = new InquiryDiscussionEntry();
  1119.             $inquiryDiscussionEntry->setAuthor($customer);
  1120.             $inquiryDiscussionEntry->setInquiry($inquiry);
  1121.             $inquiryDiscussionEntry->setContent($content);
  1122.             $inquiryDiscussionEntry->setCreatedAt(new DateTime());
  1123.             if (($request->request->get('supplierId') != 0)) {
  1124.                 $supplier $this->customerRepository->find($request->request->get('supplierId'));
  1125.                 $inquiryDiscussionEntry->setRecipient($supplier);
  1126.             }
  1127.             $entityManager $this->getDoctrine()->getManager();
  1128.             $entityManager->persist($inquiryDiscussionEntry);
  1129.             $entityManager->flush();
  1130.             /** @var Inquiry $inquiry */
  1131.             $inquiry $this->entityRepository->find($request->request->get('inquiryId'));
  1132.             [$discussionEntries$loggedCustomerIsSupplier] = $this->prepareDiscussionEntries($customer$inquiry);
  1133.             $response['content'] = $this->getTwig()->render(
  1134.                 $this->getConfiguration()['templates']['discussionEntries'],
  1135.                 [
  1136.                     'inquiry' => $inquiry,
  1137.                     'discussionEntries' => $discussionEntries,
  1138.                     'loggedCustomerIsSupplier' => $loggedCustomerIsSupplier,
  1139.                     'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries($inquiry->getId()),
  1140.                     'loggerCustomer' => $customer
  1141.                 ]
  1142.             );
  1143.             $content $this->getTwig()->render(
  1144.                 'Email/newDiscussionEntry.html.twig',
  1145.                 [
  1146.                     'inquiryLink' => $router->generate('client_inquiry_details', ['id' => $inquiry->getId()], RouterInterface::ABSOLUTE_URL),
  1147.                     'inquiry' => $inquiry,
  1148.                     'discussionEntry' => $inquiryDiscussionEntry
  1149.                 ]
  1150.             );
  1151.             $recipientAddresses = [];
  1152.             if ($inquiryDiscussionEntry->getRecipient() === null) {
  1153.                 foreach ($inquiry->getInquiryDiscussionEntries() as $discussionEntryAll) {
  1154.                     $recipientAddresses[$discussionEntryAll->getAuthor()->getUsername()] = $discussionEntryAll->getAuthor();
  1155.                 }
  1156.             } else {
  1157.                 $recipientAddresses[$inquiryDiscussionEntry->getRecipient()->getUsername()] = $inquiryDiscussionEntry->getRecipient();
  1158.             }
  1159.             if (isset($recipientAddresses[$customer->getUsername()])) {
  1160.                 unset($recipientAddresses[$customer->getUsername()]);
  1161.             }
  1162.             /** @var Customer $supplier */
  1163.             foreach ($recipientAddresses as $address) {
  1164.                 if ($address->isNotificationsInquiryNotification()) {
  1165.                     $this->notificationService->createNotification('inquiry.mail.newDisccussionEntry'$address$inquiry->getRecipient(), Notification::NOTIFICATION_TYPE_INQUIRY$inquiry->getId(), $inquiryDiscussionEntry->getId());
  1166.                 }
  1167.                 if ($address->isNotificationsInquiryMail()) {
  1168.                     $this->emailService->send(
  1169.                         [$address->getUsername()],
  1170.                         $this->getTranslator()->trans('defaultContent.mail.subject') . ' ' $inquiry->getMake() . ' ' $inquiry->getModel() . ' ' $inquiry->getRegistrationNumber(),
  1171.                         $content
  1172.                     );
  1173.                 }
  1174.             }
  1175.             return new JsonResponse($response);
  1176.         }
  1177.         public function refreshDiscussionEntry(Request $request) : Response
  1178.         {
  1179.             /** @var Inquiry $inquiry */
  1180.             $inquiry $this->entityRepository->find($request->request->get('entityId'));
  1181.             $html $this->getTwig()->render(
  1182.                 'ClientInquiry/Entries.html.twig',
  1183.                 [
  1184.                     'inquiry' => $inquiry,
  1185.                 ]
  1186.             );
  1187.             $response['html'] = $html;
  1188.             return new JsonResponse($response);
  1189.         }
  1190.         public function saveEntity(Request $requestFormInterface $form$entity$edit false$sourceInquiry null)
  1191.         {
  1192.             $filesIds $request->request->get('filesIds');
  1193.             $suppliersAddressArray = [];
  1194.             /** @var Inquiry $entity */
  1195.             if(!is_null($request->request->get('choosedSuppliers')) && !$edit) {
  1196.                 foreach ($request->request->get('choosedSuppliers') as $suppliersAddress) {
  1197.                     $customerAddress $this->customerAddressRepository->find($suppliersAddress);
  1198.                     $supplier $this->customerRepository->findByCustomerAddress($customerAddress);
  1199.                     foreach ($supplier as $s) {
  1200.                         $suppliersAddressArray[] = $customerAddress;
  1201.                         $entity->addChoosedSupplier($s);
  1202.                     }
  1203.                 }
  1204.             }
  1205.             $form->handleRequest($request);
  1206.             if ($form->isSubmitted() && $form->isValid()) {
  1207.                 if($entity->getChoosedSuppliers()->count() == 0) {
  1208.                     $this->addFlash('error''Musisz wybrać przynajmniej jednego dostawcę części.');
  1209.                     return $form;
  1210.                 }
  1211.                 if($entity->getChoosedSuppliers()->count() > 3) {
  1212.                     $this->addFlash('error''Uwaga! Możesz wybrać maksymalnie 3 dostawców danej marki do których wyślesz swoje zapytanie.');
  1213.                     return $form;
  1214.                 }
  1215. //                if (null !== $entity->getVinPhoto()) {
  1216. //                    $vinFile = $this->inquiryService->createInquiryFileFromUploadedFile($entity, $entity->getVinPhoto(), 'imageVIN');
  1217. //                    $entity->setVinPhoto($vinFile);
  1218. //                }
  1219. //
  1220. //                if (null !== $entity->getEstimateFile()) {
  1221. //                    $estimateFile = $this->inquiryService->createInquiryFileFromUploadedFile($entity, $entity->getEstimateFile(), 'fileEstimate');
  1222. //                    $entity->setEstimateFile($estimateFile);
  1223. //                }
  1224. //                $inquiryFileArray = [];
  1225. //                foreach ($entity->getInquiryFiles() as $inquiryUploadedFile) {
  1226. //                    $inquiryFileArray[] = $this->inquiryService->createInquiryFileFromUploadedFile($entity, $inquiryUploadedFile, 'file');
  1227. //                }
  1228. //                $entity->setInquiryFiles(new ArrayCollection($inquiryFileArray));
  1229.                 $pathForInquiryFiles $_SERVER['DOCUMENT_ROOT'] . '/upload/' $entity->getFileUploadId();
  1230.                 $files glob($pathForInquiryFiles '/*.*');
  1231.                 $inquiryFileArray = [];
  1232.                 if($edit) {
  1233.                     $filesForInquiry $this->getDoctrine()->getRepository(InquiryFile::class)->findBy(['inquiry' => $entity->getId()]);
  1234.                     if(!empty($filesForInquiry)) {
  1235.                         /** @var InquiryFile $item */
  1236.                         foreach ($filesForInquiry as $item) {
  1237.                             $item->setInquiry($entity);
  1238.                             $inquiryFileArray[] = $item;
  1239.                         }
  1240.                     }
  1241.                 }
  1242.                 $googleStorageService = new GoogleStorageService(
  1243.                     $this->getParameter('file_upload_google_storage_key_file_location'),
  1244.                     $this->getParameter('file_upload_google_storage_project_id'),
  1245.                     $this->getParameter('file_upload_google_storage_bucket_name'),
  1246.                     $this->getParameter('file_upload_google_storage_bucket_location')
  1247.                 );
  1248.                 foreach ($files as $file) {
  1249.                     $fileContent file_get_contents($file);
  1250.                     $extension pathinfo($filePATHINFO_EXTENSION);
  1251.                     $newFilename uniqid('upload.'true) . '.' $extension;
  1252.                     $mimeType mime_content_type($file);
  1253.                     $fileType = (strpos($mimeType'image/') !== false) ? 'image' 'file';
  1254.                     $inquiryFile = new InquiryFile();
  1255.                     $inquiryFile->setInquiry($entity);
  1256.                     $inquiryFile->setFileKind('file');
  1257.                     $inquiryFile->setFileType($fileType);
  1258.                     $inquiryFile->setFilePath($newFilename);
  1259.                     $inquiryFile->setOriginalFileName(basename($file));
  1260.                     $inquiryFile->setMimeType($mimeType);
  1261.                     $inquiryFile $googleStorageService->saveFileWithMiniaturesToFilesystem($inquiryFile$fileContent);
  1262.                     unlink($file);
  1263.                     $inquiryFileArray[] = $inquiryFile;
  1264.                 }
  1265.                 @rmdir($pathForInquiryFiles);
  1266. //                foreach ($files as $file) {
  1267. //
  1268. //                    $extension = pathinfo($file, PATHINFO_EXTENSION);
  1269. //                    $newFilename = uniqid('upload.', true) . '.' . $extension;
  1270. //                    $mimeType = mime_content_type($file);
  1271. //                    $fileType = (strpos($mimeType, 'image/') !== false) ? 'image' : 'file';
  1272. //
  1273. //                    rename($file, $_SERVER['DOCUMENT_ROOT'] . '/upload/' . $newFilename);
  1274. //
  1275. //                    $inquiryFile = new InquiryFile();
  1276. //                    $inquiryFile->setInquiry($entity);
  1277. //                    $inquiryFile->setFileKind('file');
  1278. //                    $inquiryFile->setFileType($fileType);
  1279. //                    $inquiryFile->setFilePath('upload/' . $newFilename);
  1280. //                    $inquiryFile->setOriginalFileName(basename($file));
  1281. //                    $inquiryFile->setMimeType($mimeType);
  1282. //
  1283. //                    $inquiryFileArray[] = $inquiryFile;
  1284. //                }
  1285.                 if ($sourceInquiry !== null) {
  1286.                     $fileRepository $this->getDoctrine()->getRepository(InquiryFile::class);
  1287.                     $filesIds trim($filesIds);
  1288.                     $filesIds explode(','$filesIds);
  1289.                     foreach ($filesIds as $fileId) {
  1290.                         $fileId trim($fileId);
  1291.                         /** @var InquiryFile $file */
  1292.                         $file $fileRepository->find($fileId);
  1293.                         if ($file !== null) {
  1294.                             $fileClone = clone $file;
  1295.                             $fileClone->setId(null);
  1296.                             $fileClone->setInquiry($entity);
  1297.                             $inquiryFileArray[] = $fileClone;
  1298.                         }
  1299.                     }
  1300.                 }
  1301.                 $entity->setInquiryFiles(new ArrayCollection($inquiryFileArray));
  1302.                 /** @var Customer $customer */
  1303.                 $customer $this->get('security.token_storage')->getToken()->getUser();
  1304.                 $entity->setRecipient($customer);
  1305.                 $entityManager $this->getDoctrine()->getManager();
  1306.                 $entityManager->persist($entity);
  1307.                 $customer->setLastInquiryDate(new DateTime());
  1308.                 $entityManager->persist($customer);
  1309.                 $entityManager->flush();
  1310.                 $suppliersArray = [
  1311.                     'entity' => $entity,
  1312.                     'suppliers' => $suppliersAddressArray
  1313.                 ];
  1314.                 $this->addInquirySuppliers($suppliersArray);
  1315.                 return $this->redirectToRoute($this->getConfiguration()['routings']['index']);
  1316.             } else {
  1317.                 return $form;
  1318.             }
  1319.         }
  1320.         private function addInquirySuppliers($inquiryData)
  1321.         {
  1322.             /**
  1323.              * @var CustomerAddress $addr
  1324.              */
  1325.             $em $this->getDoctrine()->getManager();
  1326.             $inquiry $inquiryData['entity'];
  1327.             if(!is_null($inquiryData['suppliers'])) {
  1328.                 foreach ($inquiryData['suppliers'] as $addr) {
  1329.                     $check $this->inquirySupplierRepository->findOneBy([
  1330.                         'inquiry' => $inquiry,
  1331.                         'customer' => $addr->getCustomer(),
  1332.                         'customerAddress' => $addr
  1333.                     ]);
  1334.                     if(!$check) {
  1335.                         $inquirySupplier = new InquirySupplier();
  1336.                         $inquirySupplier->setInquiry($inquiry);
  1337.                         $inquirySupplier->setCustomer($addr->getCustomer());
  1338.                         $inquirySupplier->setCustomerAddress($addr);
  1339.                         $inquirySupplier->setSeen(false);
  1340.                         $em->persist($inquirySupplier);
  1341.                     }
  1342.                 }
  1343.                 $em->flush();
  1344.             }
  1345.         }
  1346.         public function uploadFile(Request $request)
  1347.         {
  1348.             $files $this->inquiryService->uploadTemporaryFiles($_FILES$request->attributes->get('id'));
  1349.             return new JsonResponse([
  1350.                 'file' => $_FILES['inquiry'],
  1351.                 'width' => $files['width'],
  1352.                 'height' => $files['height']
  1353.             ]);
  1354.         }
  1355.         public function deleteFile(Request $request)
  1356.         {
  1357.             return $this->inquiryService->deleteTemporaryFile($request->request->get('file'), $request->request->get('id'));
  1358.         }
  1359.         public function deleteUploadedFile(Request $request)
  1360.         {
  1361.             $file $this->inquiryFileRepository->find($request->request->get('id'));
  1362.             $entityManager $this->getDoctrine()->getManager();
  1363.             $entityManager->remove($file);
  1364.             $entityManager->flush();
  1365.             return new JsonResponse(['message' => 'Usunięto plik '$file->getOriginalFileName(), 'status' => 'success'], 200);
  1366.         }
  1367.         public function finishNow(Request $request) : Response
  1368.         {
  1369.             /** @var Customer $customer */
  1370.             $customer $this->get('security.token_storage')->getToken()->getUser();
  1371.             $inquiry $this->entityRepository->find($request->request->get('entityId'));
  1372.             if ($customer->getIsRecipient()) {
  1373.                 if ($customer->getId() !== $inquiry->getRecipient()->getId()) {
  1374.                     $response['status'] = 'ERROR';
  1375.                     $response['message'] = $this->getTranslator()->trans('inquiry.messages.you_cannot_finish_not_yours_inquiry');
  1376.                     return new JsonResponse($response);
  1377.                 }
  1378.             }
  1379.             try {
  1380.                 $inquiry->setExpirationDate(new DateTime());
  1381.                 $entityManager $this->getDoctrine()->getManager();
  1382.                 $entityManager->persist($inquiry);
  1383.                 $entityManager->flush();
  1384.                 $response['status'] = 'OK';
  1385.             } catch (Exception $e) {
  1386.                 $response['status'] = 'ERROR';
  1387.                 if ($_SERVER['APP_ENV'] == 'dev') {
  1388.                     $response['message'] = $e->getMessage();
  1389.                 }
  1390.             }
  1391.             return new JsonResponse($response);
  1392.         }
  1393.         public function archive(Request $request) : Response
  1394.         {
  1395.             /** @var Customer $customer */
  1396.             $customer $this->get('security.token_storage')->getToken()->getUser();
  1397.             /** @var Inquiry $inquiry */
  1398.             $inquiry $this->entityRepository->find($request->request->get('entityId'));
  1399.             if($inquiry->getArchived()) {
  1400.                 $response['status'] = 'ERROR';
  1401.                 $response['message'] = $this->getTranslator()->trans('inquiry.messages.isArchived');
  1402.                 return new JsonResponse($response);
  1403.             }
  1404.             if ($customer->getIsRecipient()) {
  1405.                 if ($customer->getId() !== $inquiry->getRecipient()->getId()) {
  1406.                     $response['status'] = 'ERROR';
  1407.                     $response['message'] = $this->getTranslator()->trans('inquiry.messages.you_cannot_archive_not_yours_inquiry');
  1408.                     return new JsonResponse($response);
  1409.                 }
  1410.             }
  1411.             try {
  1412.                 $inquiry->setArchived(true);
  1413.                 $inquiry->setExpirationDate(new DateTime());
  1414.                 $entityManager $this->getDoctrine()->getManager();
  1415.                 $entityManager->persist($inquiry);
  1416.                 $entityManager->flush();
  1417.                 $response['status'] = 'OK';
  1418.             } catch (Exception $e) {
  1419.                 $response['status'] = 'ERROR';
  1420.                 if ($_SERVER['APP_ENV'] == 'dev') {
  1421.                     $response['message'] = $e->getMessage();
  1422.                 }
  1423.             }
  1424.             return new JsonResponse($response);
  1425.         }
  1426.         public function edit(Request $request) : Response
  1427.         {
  1428.             $sourceInquiryid $request->attributes->get('sourceInquiryId');
  1429.             $sourceInquiry null;
  1430.             if ($sourceInquiryid !== null) {
  1431.                 $sourceInquiry $this->entityRepository->find($sourceInquiryid);
  1432.             }
  1433.             $edit false;
  1434.             /** @var Customer $loggedUser */
  1435.             $loggedUser $this->get('security.token_storage')->getToken()->getUser();
  1436.             if ($loggedUser->isAvoidUserForCreateNewInquiries()) {
  1437.                 return new RedirectResponse('/');
  1438.             }
  1439.             $customerAddress $loggedUser->getAddresses()->get(0);
  1440.             $loggedAddressForGoogleMaps null;
  1441.             if ($customerAddress !== null) {
  1442.                 $loggedAddressForGoogleMaps $customerAddress->getCity() . '+' $customerAddress->getStreet() . '+' $customerAddress->getPropertyNumber();
  1443.             }
  1444.             if (null !== $request->attributes->get('id')) {
  1445.                 $edit true;
  1446.                 /** @var ExtendedEntity $entity */
  1447.                 $entity $this->entityRepository->find($request->attributes->get('id'));
  1448.                 $usingExtendedEntityTrait in_array(
  1449.                     ExtendedEntity::class,
  1450.                     array_keys((new ReflectionClass(get_class($entity)))->getTraits())
  1451.                 );
  1452.                 if ($usingExtendedEntityTrait) {
  1453.                     $entity->setUpdatedAt(new DateTime());
  1454.                     if ($loggedUser instanceof User) {
  1455.                         $entity->setUpdatedBy($loggedUser);
  1456.                     }
  1457.                 }
  1458.             } else {
  1459.                 $entityClass =  $this->getConfiguration()['classes']['entity'];
  1460.                 /** @var ExtendedEntity $entity */
  1461.                 $entity = new $entityClass();
  1462.                 $usingExtendedEntityTrait in_array(
  1463.                     ExtendedEntity::class,
  1464.                     array_keys((new ReflectionClass(get_class($entity)))->getTraits())
  1465.                 );
  1466.                 if ($usingExtendedEntityTrait) {
  1467.                     $entity->setCreatedAt(new DateTime());
  1468.                     if ($loggedUser instanceof User ) {
  1469.                         $entity->setCreatedBy($loggedUser);
  1470.                     }
  1471.                 }
  1472.             }
  1473.             if ($request->request->get('inquiry') !== null) {
  1474.                 if (!isset($request->request->get('inquiry')['choosedSuppliers'])) {
  1475.                     $suppliersForMake $this->customerRepository->findSuppliersForMake($request->request->get('inquiry')['make']);
  1476.                     $suppliersIds = [];
  1477.                     foreach ($suppliersForMake as $supplier) {
  1478.                         $suppliersIds[] = (string)$supplier->getId();
  1479.                     }
  1480.                     $inquiryData $request->request->get('inquiry');
  1481.                     $inquiryData['choosedSuppliers'] = $suppliersIds;
  1482.                     $request->request->set('inquiry'$inquiryData);
  1483.                 } else {
  1484.                     $suppliersForMake $this->customerRepository->findSuppliersForMake($request->request->get('inquiry')['make']);
  1485.                 }
  1486.             }
  1487.             $formClass =  $this->getConfiguration()['classes']['form'];
  1488.             $form $this->createForm($formClass$entity);
  1489.             $form->add('submit'SubmitType::class, ['label' => 'common.save']);
  1490.             /**
  1491.              * @var Form $response
  1492.              * @var Inquiry $entity
  1493.              */
  1494.             $response $this->saveEntity($request$form$entity$edit$sourceInquiry);
  1495.             if ($response instanceof RedirectResponse) {
  1496.                 $fileName '../var/log/inquiry_create_' $entity->getId() . '.log';
  1497.                 file_put_contents($fileName'data zapisu: ' date('Y-m-d H:i:s') . PHP_EOLFILE_APPEND);
  1498.                 file_put_contents($fileName'marka, model, vin, rejestracja: ' $entity->getMake()->getName() . ', ' $entity->getModel() . ', ' $entity->getVin() . ', ' $entity->getRegistrationNumber() . PHP_EOLFILE_APPEND);
  1499.                 file_put_contents($fileName'Kontrahenci przypisani do tej marki: 'PHP_EOLFILE_APPEND);
  1500.                 foreach ($suppliersForMake as $supplierForMake) {
  1501.                     file_put_contents($fileName' - id ' $supplierForMake->getId() . ' - ' $supplierForMake->getCompanyName() . PHP_EOLFILE_APPEND);
  1502.                 }
  1503.                 file_put_contents($fileName'Kontrahenci rzeczywiście przypisani do tego zapytania: 'PHP_EOLFILE_APPEND);
  1504.                 foreach ($entity->getChoosedSuppliers() as $choosedSupplier) {
  1505.                     file_put_contents($fileName' - id ' $choosedSupplier->getId() . ' - ' $choosedSupplier->getCompanyName() . PHP_EOLFILE_APPEND);
  1506.                 }
  1507.                 if (!$entity->getChoosedSuppliers()->isEmpty() && $edit == false) {
  1508.                     /** @var RouterInterface $router */
  1509.                     $router $this->get('router');
  1510.                     $notificationContent 'inquiry.mail.newInquiry';
  1511.                     /** @var Inquiry $entity */
  1512.                     $content $this->getTwig()->render(
  1513.                         'Email/newInquiry.html.twig',
  1514.                         [
  1515.                             'inquiryLink' => $router->generate('client_inquiry_details', ['id' => $entity->getId()], RouterInterface::ABSOLUTE_URL),
  1516.                             'inquiry' => $entity
  1517.                         ]
  1518.                     );
  1519.                     /** @var Customer $supplier */
  1520.                     foreach ($entity->getChoosedSuppliers() as $supplier) {
  1521.                         if ($supplier->isNotificationsInquiryNotification()) {
  1522.                             $this->notificationService->createNotification($notificationContent$supplier$entity->getRecipient(), Notification::NOTIFICATION_TYPE_INQUIRY$entity->getId());
  1523.                             file_put_contents($fileName'Powiadomienie zostało przypisane do dostawcy' PHP_EOLFILE_APPEND);
  1524.                         }
  1525.                         if ($supplier->isNotificationsInquiryMail()) {
  1526.                             $this->emailService->send(
  1527.                                 [$supplier->getUsername()],
  1528.                                 $this->getTranslator()->trans('defaultContent.mail.subject') . ' ' $entity->getMake() . ' ' $entity->getModel() . ' ' $entity->getRegistrationNumber(),
  1529.                                 $content
  1530.                             );
  1531.                             file_put_contents($fileName'Mail został wysłany do dostawcy' PHP_EOLFILE_APPEND);
  1532.                         }
  1533.                     }
  1534.                 }
  1535.                 $this->addFlash('success''Zapytanie zostało wysłane');
  1536.                 return $response;
  1537.             } else {
  1538.                 $choosedSuppliers $this->customerRepository->findSuppliersWithAddresses();
  1539.                 $inquirySuppliers = [];
  1540.                 foreach ($entity->getChoosedSuppliers() as $inquirySupplier) {
  1541.                     $inquirySuppliers[$inquirySupplier->getId()] = $inquirySupplier->getId();
  1542.                 }
  1543.                 $entityManager $this->getDoctrine()->getManager();
  1544.                 foreach ($entity->getInquiryFiles() as $inquiryFile) {
  1545.                     if (($inquiryFile->getWidth() === null) && (strpos($inquiryFile->getMimeType(), 'image') !== false)) {
  1546.                         $imageData getimagesize($inquiryFile->getFilePath());
  1547.                         $inquiryFile->setWidth($imageData[0]);
  1548.                         $inquiryFile->setHeight($imageData[1]);
  1549.                         $entityManager->persist($inquiryFile);
  1550.                     }
  1551.                 }
  1552.                 $entityManager->flush();
  1553.                 $ratiosForCustomers = [];
  1554.                 $customersWithIds = [];
  1555.                 /** @var Customer $choosedSupplier */
  1556.                 foreach ($choosedSuppliers as $choosedSupplier) {
  1557.                     $ratiosForCustomers[$choosedSupplier->getId()] = $this->inquiryService->calculateRatioForCustomer($choosedSupplier);
  1558.                     $customersWithIds[$choosedSupplier->getId()] = $choosedSupplier;
  1559.                 }
  1560.                 $sortedSuppliers = [];
  1561.                 arsort($ratiosForCustomers);
  1562.                 foreach ($ratiosForCustomers as $customerId => $ratio) {
  1563.                     $sortedSuppliers[] = $customersWithIds[$customerId];
  1564.                 }
  1565.                 $googleStorageService = new GoogleStorageService(
  1566.                     $this->getParameter('file_upload_google_storage_key_file_location'),
  1567.                     $this->getParameter('file_upload_google_storage_project_id'),
  1568.                     $this->getParameter('file_upload_google_storage_bucket_name'),
  1569.                     $this->getParameter('file_upload_google_storage_bucket_location')
  1570.                 );
  1571.                 $miniatureFiles = [];
  1572.                 $entityManager $this->getEntityManager();
  1573.                 foreach ($entity->getInquiryFiles() as $inquiryFile) {
  1574.                     if ($inquiryFile->getFileType() == 'image') {
  1575.                         $miniatureFile = new InquiryFile();
  1576.                         $filePath pathinfo($inquiryFile->getFilePath(), PATHINFO_DIRNAME);
  1577.                         $filename pathinfo($inquiryFile->getFilePath(), PATHINFO_FILENAME);
  1578.                         $extension pathinfo($inquiryFile->getFilePath(), PATHINFO_EXTENSION);
  1579.                         $miniatureFilePath $filePath DIRECTORY_SEPARATOR $filename '_100x100.' $extension ;
  1580.                         $miniatureFile->setFilePath($miniatureFilePath);
  1581.                         [$url$validityTime] = $googleStorageService->createGoogleStorageFileUrl($miniatureFile);
  1582.                         $miniatureFiles[$inquiryFile->getId()]['100x100']['url'] = $url;
  1583.                     }
  1584.                     [$url$validityTime] = $googleStorageService->createGoogleStorageFileUrl($inquiryFile);
  1585.                     $inquiryFile->setUrl($url);
  1586.                     $inquiryFile->setUrlValidityDate($validityTime);
  1587.                     $entityManager->persist($inquiryFile);
  1588.                 }
  1589.                 $entityManager->flush();
  1590.                 return new Response(
  1591.                     $this->getTwig()->render(
  1592.                         $this->getConfiguration()['templates']['edit'],
  1593.                         [
  1594.                             'form' => $response->createView(),
  1595.                             'customer' => $loggedUser,
  1596.                             'choosedSuppliers' => $sortedSuppliers,
  1597.                             'inquirySuppliers' => $inquirySuppliers,
  1598.                             'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
  1599.                             'isAdditional' => ($request->attributes->get('id') === null),
  1600.                             'miniatureFiles' => $miniatureFiles,
  1601.                         ]
  1602.                     )
  1603.                 );
  1604.             }
  1605.         }
  1606.         public function sendMailPartsOrdered(Request $request)
  1607.         {
  1608.             /** @var Offer $offer */
  1609.             $offer $this->offerRepository->find($request->request->get('offerId'));
  1610.             $content $this->getTwig()->render(
  1611.                 'Email/orderConfirmation.html.twig',
  1612.                 [
  1613.                     'supplier' => $offer->getSupplier(),
  1614.                     'offer' => $offer
  1615.                 ]
  1616.             );
  1617.             if ($offer->getInquiry()->getRecipient()->isNotificationsOfferNotification()) {
  1618.                 $this->notificationService->createNotification('defaultContent.mail.orderConfirmation'$offer->getInquiry()->getRecipient(), $offer->getSupplier(), Notification::NOTIFICATION_TYPE_OFFER$offer->getId());
  1619.             }
  1620.             if ($offer->getInquiry()->getRecipient()->isNotificationsOfferMail()) {
  1621.                 $this->emailService->send(
  1622.                     [$offer->getInquiry()->getRecipient()->getUsername()],
  1623.                     $this->getTranslator()->trans('defaultContent.mail.subject') . ' ' $offer->getInquiry()->getMake() . ' ' .
  1624.                     $offer->getInquiry()->getModel() . ' ' $offer->getInquiry()->getRegistrationNumber() . ' ' .
  1625.                     $this->getTranslator()->trans('defaultContent.mail.orderConfirmation'),
  1626.                     $content
  1627.                 );
  1628.             }
  1629.             $offer->setPartsOrdered(true);
  1630.             $offer->setOrderedDate(new DateTime());
  1631.             $discussion = new InquiryDiscussionEntry();
  1632.             $discussion
  1633.                 ->setInquiry($offer->getInquiry())
  1634.                 ->setContent($this->getTranslator()->trans('defaultContent.mail.orderConfirmationContent'))
  1635.                 ->setAuthor($offer->getSupplier())
  1636.                 ->setCreatedAt(new DateTime());
  1637.             $entityManager $this->getDoctrine()->getManager();
  1638.             $entityManager->persist($offer);
  1639.             $entityManager->persist($discussion);
  1640.             $entityManager->flush();
  1641.             $response['status'] = 'OK';
  1642.             return new JsonResponse($response);
  1643.         }
  1644.         public function sendMailPartsSended(Request $request)
  1645.         {
  1646.             /** @var Offer $offer */
  1647.             $offer $this->offerRepository->find($request->request->get('offerId'));
  1648.             $content $this->getTwig()->render(
  1649.                 'Email/sendConfirmation.html.twig',
  1650.                 [
  1651.                     'supplier' => $offer->getSupplier()
  1652.                 ]
  1653.             );
  1654.             if ($offer->getInquiry()->getRecipient()->isNotificationsOfferNotification()) {
  1655.                 $this->notificationService->createNotification('defaultContent.mail.sendConfirmation'$offer->getInquiry()->getRecipient(), $offer->getSupplier(), Notification::NOTIFICATION_TYPE_OFFER$offer->getId());
  1656.             }
  1657.             $offer->setPartsSended(true);
  1658.             $offer->setSendDate(new DateTime());
  1659.             $entityManager $this->getDoctrine()->getManager();
  1660.             $entityManager->persist($offer);
  1661.             $entityManager->flush();
  1662.             if ($offer->getInquiry()->getRecipient()->isNotificationsOfferMail()) {
  1663.                 $this->emailService->send(
  1664.                     [$offer->getInquiry()->getRecipient()->getUsername()],
  1665.                     $this->getTranslator()->trans('defaultContent.mail.subject') . ' ' $offer->getInquiry()->getMake() . ' ' .
  1666.                     $offer->getInquiry()->getModel() . ' ' $offer->getInquiry()->getRegistrationNumber() . ' ' .
  1667.                     $this->getTranslator()->trans('defaultContent.mail.sendConfirmationContent'),
  1668.                     $content
  1669.                 );
  1670.             }
  1671.             $response['status'] = 'OK';
  1672.             return new JsonResponse($response);
  1673.         }
  1674.         private function prepareDiscussionEntries(Customer $customerInquiry $inquiry) : array
  1675.         {
  1676.             $discussionEntriesWithoutRecipientCount 0;
  1677.             foreach ($inquiry->getInquiryDiscussionEntries() as $discussionEntry) {
  1678.                 if ($discussionEntry->getRecipient() === null$discussionEntriesWithoutRecipientCount++;
  1679.             }
  1680.             $discussionEntries = [];
  1681.             if ($discussionEntriesWithoutRecipientCount 0) {
  1682.                 $discussionEntries[0]['recipientNameName'] = $inquiry->getRecipient()->getCompanyName();
  1683.                 $discussionEntries[0]['supplierName'] = 'Wszyscy';
  1684.                 $discussionEntries[0]['entries'] = [];
  1685.             }
  1686.             $loggedCustomerIsSupplier false;
  1687.             foreach ($inquiry->getInquirySuppliers() as $inquirySupplier) {
  1688.                 $discussionEntries[$inquirySupplier->getCustomer()->getId()]['recipientNameName'] = $inquiry->getRecipient()->getCompanyName();
  1689.                 $discussionEntries[$inquirySupplier->getCustomer()->getId()]['supplierName'] = $inquirySupplier->getCustomer()->getCompanyName();
  1690.                 $discussionEntries[$inquirySupplier->getCustomer()->getId()]['entries'] = [];
  1691.                 if ($inquirySupplier->getCustomer()->getId() == $customer->getId()) {
  1692.                     $loggedCustomerIsSupplier true;
  1693.                 }
  1694.             }
  1695.             /** @var InquiryDiscussionEntry $discussionEntry */
  1696.             foreach ($inquiry->getInquiryDiscussionEntries() as $discussionEntry) {
  1697.                 if (!$loggedCustomerIsSupplier) {
  1698.                     //zalogowany jest odbiorca dla danego zapytania
  1699.                     if ($customer->getId() == $discussionEntry->getAuthor()->getId()) {
  1700.                         //autorem wiadomości jest odbiorca
  1701.                         if ($discussionEntry->getRecipient() === null) {
  1702.                             //stara wiadomość bez odbiorcy, czyli do wszystkich
  1703.                             $id 0;
  1704.                         } else {
  1705.                             //wiadomość z odbiorcą
  1706.                             $id $discussionEntry->getRecipient()->getId();
  1707.                         }
  1708.                     } else {
  1709.                         //autorem wiadomości jest dostawca
  1710.                         if ($discussionEntry->getRecipient() === null) {
  1711.                             $id 0;
  1712.                         } else {
  1713.                             $id $discussionEntry->getAuthor()->getId();
  1714.                         }
  1715.                     }
  1716.                 } else {
  1717.                     //zalogowany jest dostawca dla danego zapytania
  1718.                     if ($customer->getId() == $discussionEntry->getAuthor()->getId()) {
  1719.                         //autorem wiadomości jest dostawca
  1720.                         if ($discussionEntry->getRecipient() === null) {
  1721.                             //stara wiadomość bez odbiorcy, czyli do wszystkich
  1722.                             $id 0;
  1723.                         } else {
  1724.                             //wiadomość z odbiorcą
  1725.                             $id $discussionEntry->getAuthor()->getId();
  1726.                         }
  1727.                     } else {
  1728.                         //autorem wiadomości jest odbiorca
  1729.                         if ($discussionEntry->getRecipient() === null) {
  1730.                             //stara wiadomość bez odbiorcy, czyli do wszystkich
  1731.                             $id 0;
  1732.                         } else {
  1733.                             //wiadomość z odbiorcą
  1734.                             $id $discussionEntry->getRecipient()->getId();
  1735.                         }
  1736.                     }
  1737.                 }
  1738.                 if (isset($discussionEntries[$id])) {
  1739.                     $discussionEntries[$id]['entries'][] = $discussionEntry;
  1740.                 }
  1741.             }
  1742.             return [$discussionEntries$loggedCustomerIsSupplier];
  1743.         }
  1744.         public function showPrivateMessageListModal(Request $request)
  1745.         {
  1746.             $offer $this->offerRepository->find($request->request->get('offerId'));
  1747.             $notificationRepository $this->getDoctrine()->getRepository(Notification::class);
  1748.             $formNewMessage $this->createForm(PrivateMessageType::class, new PrivateMessage(), ['inquiryId' => null'parentId' => null]);
  1749.             $formNewMessage->add('submit'SubmitType::class, [
  1750.                 'label' => 'common.send',
  1751.                 'attr' => [
  1752.                     'class' => 'btn-lg btn-primary'
  1753.                 ]
  1754.             ]);
  1755.             $privateMessages $this->getDoctrine()->getRepository(PrivateMessage::class)->getPrivateMessagesForOffer($offer);
  1756.             $privateMessageIds = [];
  1757.             /** @var PrivateMessage $privateMessage */
  1758.             foreach ($privateMessages as $privateMessage) {
  1759.                 $privateMessageIds[$privateMessage->getId()] = $privateMessage;
  1760.             }
  1761.             $notificationsForMessages $notificationRepository->findBy(['entityType' => 'offer''entityId' => $offer->getId(), 'contentId' => $privateMessageIds]);
  1762.             $notificationsForMessagesArray = [];
  1763.             foreach ($notificationsForMessages as $notificationsForMessage) {
  1764.                 $notificationsForMessagesArray[$notificationsForMessage->getContentId()] = $notificationsForMessage;
  1765.             }
  1766.             $entityManager $this->getDoctrine()->getManager();
  1767.             foreach ($privateMessages as $privateMessage) {
  1768.                 /** @var PrivateMessageAttachment $attachmentFile */
  1769.                 foreach ($privateMessage->getAttachmentFiles() as $attachmentFile) {
  1770.                     if (($attachmentFile->getWidth() === null) && (strpos($attachmentFile->getMimeType(), 'image') !== false)) {
  1771.                         $imageData getimagesize($attachmentFile->getFilePath());
  1772.                         $attachmentFile->setWidth($imageData[0]);
  1773.                         $attachmentFile->setHeight($imageData[1]);
  1774.                         $entityManager->persist($attachmentFile);
  1775.                     }
  1776.                 }
  1777.             }
  1778.             $entityManager->flush();
  1779.             $html $this->getTwig()->render(
  1780.                 'ClientOffer/privateMessageModalContent.html.twig',
  1781.                 [
  1782.                     'offer' => $offer,
  1783.                     'privateMessages' => $privateMessages,
  1784.                     'formNewMessage' => $formNewMessage->createView(),
  1785.                     'notificationsForMessages' => $notificationsForMessagesArray,
  1786.                 ]
  1787.             );
  1788.             $response['status'] = 'OK';
  1789.             $response['title'] = 'Wiadomości prywatne';
  1790.             $response['offerId'] = $offer->getId();
  1791.             $response['html'] = $html;
  1792.             return new JsonResponse($response);
  1793.         }
  1794.         public function showDiscussionListModal(Request $request)
  1795.         {
  1796.             /** @var Customer $customer */
  1797.             $customer $this->get('security.token_storage')->getToken()->getUser();
  1798.             /** @var Inquiry $inquiry */
  1799.             $inquiry $this->entityRepository->find($request->request->get('inquiryId'));
  1800.             $makeIds = [];
  1801.             /** @var Make $make */
  1802.             foreach ($customer->getMakes()->toArray() as $make) {
  1803.                 $makeIds[$make->getId()] = $make->getId() ;
  1804.             }
  1805.             if ($customer->getIsRecipient() && !$customer->getIsSupplier()) {
  1806.                 if ($customer->getId() !== $inquiry->getRecipient()->getId()) {
  1807.                     return $this->getTranslator()->trans('inquiry.messages.you_cannot_see_not_yours_inquiry');
  1808.                 }
  1809.             } elseif ($customer->getIsSupplier()) {
  1810.                 /** @var Inquiry $inquiry */
  1811.                 if ((!in_array($inquiry->getMake()->getId(), $makeIds)) && ($inquiry->getRecipient()->getId() != $customer->getId())) {
  1812.                     return $this->getTranslator()->trans('inquiry.messages.you_cannot_see_inquiry_for_not_your_makes');
  1813.                 }
  1814.             }
  1815.             [$discussionEntries$loggedCustomerIsSupplier] = $this->prepareDiscussionEntries($customer$inquiry);
  1816.             $html =
  1817.                 $this->getTwig()->render(
  1818.                     $this->getConfiguration()['templates']['discussionEntries'],
  1819.                     [
  1820.                         'inquiry' => $inquiry,
  1821.                         'discussionEntries' => $discussionEntries,
  1822.                         'loggedCustomerIsSupplier' => $loggedCustomerIsSupplier,
  1823.                         'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries($inquiry->getId()),
  1824.                         'loggerCustomer' => $customer
  1825.                     ]
  1826.                 );
  1827.             $response['status'] = 'OK';
  1828.             $response['html'] = '<div class="col-sm-12" id="inquiry-discussion-entries">' $html '</div>';
  1829.             $response['title'] = 'Dyskusja: ' $inquiry->getMake() . ' ' .$inquiry->getModel();
  1830.             $response['suppliersIds'] = array_keys($discussionEntries);
  1831.             return new JsonResponse($response);
  1832.         }
  1833.         public function getConfiguration()
  1834.         {
  1835.             return [
  1836.                 'templates' => [
  1837.                     'index' => 'ClientInquiry/index.html.twig',
  1838.                     'edit' => 'ClientInquiry/edit.html.twig',
  1839.                     'show' => 'ClientInquiry/show.html.twig',
  1840.                     'discussionEntries' => 'ClientInquiry/discussionEntries.html.twig',
  1841.                     'newOffer' => 'ClientInquiry/newOffer.html.twig'
  1842.                 ],
  1843.                 'routings' => [
  1844.                     'index' => 'client_inquiry_active',
  1845.                     'inquiryDetails' => 'client_inquiry_details'
  1846.                 ],
  1847.                 'classes' => [
  1848.                     'entity' => Inquiry::class,
  1849.                     'form' => InquiryType::class
  1850.                 ]
  1851.             ];
  1852.         }
  1853.         public function setDefaultAddress(Request $request)
  1854.         {
  1855.             $entityManager $this->getDoctrine()->getManager();
  1856.             $customer $this->get('security.token_storage')->getToken()->getUser();
  1857.             $defaultCustomerAddress $this->customerAddressRepository->find($request->request->get('addressId'));
  1858.             if ($defaultCustomerAddress->getCustomer()->getId() == $customer->getId()) {
  1859.                 $customerAddresses $this->customerAddressRepository->findBy(['customer' => $customer->getId()]);
  1860.                 foreach ($customerAddresses as $customerAddress) {
  1861.                     $customerAddress->setDefaultAddress(false);
  1862.                     $entityManager->persist($customerAddress);
  1863.                 }
  1864.                 $entityManager->flush();
  1865.                 $defaultCustomerAddress->setDefaultAddress(true);
  1866.                 $entityManager->persist($defaultCustomerAddress);
  1867.                 $entityManager->flush();
  1868.                 $response['status'] = 'OK';
  1869.                 $response['addressId'] = $request->request->get('addressId');
  1870.             } else {
  1871.                 $response['status'] = 'ERROR';
  1872.                 $response['message'] = 'Nie możesz zmienić na domyślny nie swojego adresu';
  1873.             }
  1874.             return new JsonResponse($response);
  1875.         }
  1876.         public function setDefaultContactPerson(Request $request)
  1877.         {
  1878.             $entityManager $this->getDoctrine()->getManager();
  1879.             $customer $this->get('security.token_storage')->getToken()->getUser();
  1880.             /** @var ContactPerson $defaultContactPerson */
  1881.             $defaultContactPerson $this->contactPersonRepository->find($request->request->get('contactPersonId'));
  1882.             if ($defaultContactPerson->getCustomer()->getId() == $customer->getId()) {
  1883.                 $contactPersons $this->contactPersonRepository->findBy(['customer' => $customer->getId()]);
  1884.                 foreach ($contactPersons as $contactPerson) {
  1885.                     $contactPerson->setDefaultPerson(false);
  1886.                     $entityManager->persist($contactPerson);
  1887.                 }
  1888.                 $entityManager->flush();
  1889.                 $defaultContactPerson->setDefaultPerson(true);
  1890.                 $defaultContactPerson->setActive(true);
  1891.                 $entityManager->persist($defaultContactPerson);
  1892.                 $entityManager->flush();
  1893.                 $response['status'] = 'OK';
  1894.                 $response['contactPersonId'] = $request->request->get('contactPersonId');
  1895.             } else {
  1896.                 $response['status'] = 'ERROR';
  1897.                 $response['message'] = 'Nie możesz zmienić na domyślny nie swojej osoby kontaktowej';
  1898.             }
  1899.             return new JsonResponse($response);
  1900.         }
  1901.         public function getSuppliersForMake(Request $request)
  1902.         {
  1903.             /** @var Customer $customer */
  1904.             $customer $this->tokenStorage->getToken()->getUser();
  1905.             $customersMakesIds = [];
  1906.             foreach($customer->getMakes() as $make) {
  1907.                 $customersMakesIds[$make->getId()] = $make->getId();
  1908.             }
  1909. //            dump(in_array($request->request->get('makeId'), $customersMakesIds));
  1910. //            dump($customer->getIsSupplier());
  1911. //            dump($customer->getIsRecipient());
  1912. //            dump(!$customer->isCanSeeOtherSuppliersOfHisMakes());
  1913. //            die;
  1914.             if (
  1915.                 in_array($request->request->get('makeId'), $customersMakesIds) &&
  1916.                 $customer->getIsSupplier() &&
  1917.                 $customer->getIsRecipient() &&
  1918.                 !$customer->isCanSeeOtherSuppliersOfHisMakes()
  1919.             ) {
  1920.                 $response['status'] = 'CANT_SEE_SUPPLIERS';
  1921.                 return new JsonResponse($response);
  1922.             }
  1923.             $suppliers $this->customerRepository->findSuppliersForMake($request->request->get('makeId'));
  1924.             $response['status'] = 'OK';
  1925.             foreach ($suppliers as $supplier) {
  1926.                 $response['suppliers'][$supplier->getId()] = $supplier->getId();
  1927.             }
  1928.             return new JsonResponse($response);
  1929.         }
  1930.         private function checkBestOffer(Offer $offer)
  1931.         {
  1932.             $lowestPrice 99999999999;
  1933.             foreach ($offer->getInquiry()->getOffers() as $offerLoop) {
  1934.                 $lowestPrice min($lowestPrice$offerLoop->getTotalPrice());
  1935.             }
  1936.             if($offer->getTotalPrice() == $lowestPrice) {
  1937.                 foreach ($offer->getInquiry()->getOffers() as $offerForNotify)
  1938.                 {
  1939.                     if ($offerForNotify->getId() != $offer->getId())
  1940.                     {
  1941.                         if ($offerForNotify->getSupplier()->isNotificationsInquiryNotification() && $offerForNotify->getSupplier()->isCanGetNotificationsAboutBetterOffer()) {
  1942.                             $this->notificationService->createNotification('offer.messages.newBestOffer'$offerForNotify->getSupplier(), $offer->getSupplier(), Notification::NOTIFICATION_TYPE_INQUIRY$offerForNotify->getInquiry()->getId());
  1943.                         }
  1944.                     }
  1945.                 }
  1946.             }
  1947.         }
  1948.         public function ajaxPartStatus(Request $request$id)
  1949.         {
  1950.             $entityManager $this->getDoctrine()->getManager();
  1951.             /**
  1952.              * @var Customer $customer
  1953.              */
  1954.             $customer $this->get('security.token_storage')->getToken()->getUser();
  1955.             /**
  1956.              * @var Inquiry $inquiry
  1957.              */
  1958.             $inquiry $this->getDoctrine()->getRepository(Inquiry::class)->find($id);
  1959.             if(!$inquiry){
  1960.                 return new JsonResponse(['status' => 'error''message' => 'Nie ma takiego zapytania ofertowego'], 500);
  1961.             }
  1962.             if($customer->getId() != $inquiry->getRecipient()->getId() && $customer->getIsRecipient()) {
  1963.                 return new JsonResponse([
  1964.                     'status' => 'error',
  1965.                     'message' => 'Nie jesteś kupującym dla tego zapytania ofertowego.'
  1966.                 ], 500);
  1967.             }
  1968.             $partsIssued $request->get('partsIssued');
  1969.             $partsReceived $request->get('partsReceived');
  1970.             if ($partsIssued == "true") {
  1971.                 $inquiry->setIsPartsIssued(true);
  1972.                 $inquiry->setPartsIssuedDate(new DateTime());
  1973.             } else {
  1974.                 $inquiry->setIsPartsIssued(false);
  1975.                 $inquiry->setPartsIssuedDate(null);
  1976.             }
  1977.             if ($partsReceived == "true") {
  1978.                 $inquiry->setIsPartsReceived(true);
  1979.                 $inquiry->setPartsReceivedDate(new DateTime());
  1980.             } else {
  1981.                 $inquiry->setIsPartsReceived(false);
  1982.                 $inquiry->setPartsReceivedDate(null);
  1983.             }
  1984.             $entityManager->persist($inquiry);
  1985.             $entityManager->flush();
  1986.             return new JsonResponse([
  1987.                 'status' => 'success',
  1988.                 'message' => 'Zmieniono status części.',
  1989.                 'partsIssued' => $partsIssued,
  1990.                 'partsReceived' => $partsReceived
  1991.             ], 200);
  1992.         }
  1993.         public function getUnreadInquiryDiscussionEntries($id null)
  1994.         {
  1995.             $messages $this->inquiryDiscussionEntryRepository->getInquiryDiscussionEntries($id);
  1996.             return [
  1997.                 'messages' => $messages
  1998.             ];
  1999.         }
  2000.         public function getUnreadInquiryPrivateMessages()
  2001.         {
  2002.             $customer $this->get('security.token_storage')->getToken()->getUser();
  2003.             $privateMessages $this->privateMessageRepository->getUnreadPrivateMessagesForOffers($customer);
  2004.             return [
  2005.                 'privateMessages' => $privateMessages
  2006.             ];
  2007.         }
  2008.         public function getLastPrivateMessages($inqiries)
  2009.         {
  2010.             $customer $this->get('security.token_storage')->getToken()->getUser();
  2011.             return $this->privateMessageRepository->getLastPrivateMessagesForOffers($customer$inqiries);
  2012.         }
  2013.         public function sendReminderToSupplier(Request $request) : JsonResponse
  2014.         {
  2015.             /** @var Inquiry $inquiry */
  2016.             $inquiry $this->entityRepository->find($request->request->get('inquiryId'));
  2017.             /** @var Customer $supplier */
  2018.             $supplier $this->customerRepository->find($request->request->get('supplierId'));
  2019.             /** @var InquirySupplier $inquirySupplier */
  2020.             $inquirySupplier $this->inquirySupplierRepository->find($request->request->get('inquirySupplierId'));
  2021.             /** @var DateTime $expirationDate */
  2022.             $expirationDate $inquiry->getExpirationDate();
  2023.             $currentDate = new DateTime();
  2024.             if ($expirationDate $currentDate) {
  2025.                 $expirationDate = new DateTime();
  2026.             }
  2027.             $expirationDate->modify('+3 hours');
  2028.             $inquiry->setExpirationDate($expirationDate);
  2029.             $entityManager $this->getDoctrine()->getManager();
  2030.             $entityManager->persist($inquiry);
  2031.             $inquirySupplier->setReminderSent(true);
  2032.             $entityManager->persist($inquirySupplier);
  2033.             $entityManager->flush();
  2034.             $inquiryLink $this->router->generate('client_inquiry_details', ['id' => $inquiry->getId()], RouterInterface::ABSOLUTE_URL);
  2035.             $content 'Przypominamy o zapytaniu ofertowym dotyczącym samochodu ' $inquiry->getMake() . ' ' $inquiry->getModel() . ' ' .
  2036.                 $inquiry->getRegistrationNumber() . '<br/>' .
  2037.                 '<a href="' $inquiryLink '">Przejdź do zapytania</a>'
  2038.             ;
  2039.             $this->emailService->send(
  2040.                 [$supplier->getUsername()],
  2041.                 'CZĘŚCI DLA SERWISU - przypomnienie o zapytaniu: ' $inquiry->getMake() . ' ' $inquiry->getModel(),
  2042.                 $content
  2043.             );
  2044.             return new JsonResponse(['status' => 'OK']);
  2045.         }
  2046.         public function updateSupplierAddressRoutes(Request $request) : JsonResponse
  2047.         {
  2048.             $customerAddress $this->customerAddressRepository->find($request->request->get('addressId'));
  2049.             $loggedAddressForGoogleMaps $customerAddress->getCity() . '+' $customerAddress->getStreet() . '+' $customerAddress->getPropertyNumber();
  2050.             $addressArray = [];
  2051.             $suppliers $this->customerRepository->findSuppliersWithAddresses();
  2052.             /** @var Customer $supplier */
  2053.             foreach ($suppliers as $supplier) {
  2054.                 /** @var CustomerAddress $address */
  2055.                 foreach ($supplier->getAddresses() as $customerAddress) {
  2056.                     if ($customerAddress->isDefaultAddress()) {
  2057.                         $addressArray[$supplier->getId()] = $this->getTwig()->render(
  2058.                             'ClientInquiry/showRouteButton.html.twig',
  2059.                             [
  2060.                                 'address' => $customerAddress,
  2061.                                 'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
  2062.                             ]
  2063.                         );;
  2064.                     }
  2065.                 }
  2066.             }
  2067.             return new JsonResponse($addressArray);
  2068.         }
  2069.         public function unarchive(Request $request) : Response
  2070.         {
  2071.             /** @var Customer $customer */
  2072.             $customer $this->get('security.token_storage')->getToken()->getUser();
  2073.             /** @var Inquiry $inquiry */
  2074.             $inquiry $this->entityRepository->find($request->request->get('entityId'));
  2075.             if(!$inquiry->getArchived()) {
  2076.                 $response['status'] = 'ERROR';
  2077.                 $response['message'] = $this->getTranslator()->trans('inquiry.messages.notArchived');
  2078.                 return new JsonResponse($response);
  2079.             }
  2080.             if ($customer->getIsRecipient()) {
  2081.                 if ($customer->getId() !== $inquiry->getRecipient()->getId()) {
  2082.                     $response['status'] = 'ERROR';
  2083.                     $response['message'] = $this->getTranslator()->trans('inquiry.messages.you_cannot_unarchive_not_yours_inquiry');
  2084.                     return new JsonResponse($response);
  2085.                 }
  2086.             }
  2087.             try {
  2088.                 $inquiry->setArchived(false);
  2089.                 $entityManager $this->getDoctrine()->getManager();
  2090.                 $entityManager->persist($inquiry);
  2091.                 $entityManager->flush();
  2092.                 $response['status'] = 'OK';
  2093.             } catch (Exception $e) {
  2094.                 $response['status'] = 'ERROR';
  2095.                 if ($_SERVER['APP_ENV'] == 'dev') {
  2096.                     $response['message'] = $e->getMessage();
  2097.                 }
  2098.             }
  2099.             return new JsonResponse($response);
  2100.         }
  2101.         public function inquiryChangeStatus(Request $request) : JsonResponse
  2102.         {
  2103.             $inquiryId $request->request->get('inquiryId');
  2104.             $status $request->request->get('status');
  2105.             /** @var Inquiry $inquiry */
  2106.             $inquiry $this->entityRepository->find($inquiryId);
  2107.             $inquiry->setBuyerStatus($status);
  2108.             $entityManager $this->getDoctrine()->getManager();
  2109.             $entityManager->persist($inquiry);
  2110.             $entityManager->flush();
  2111.             return new JsonResponse(['status' => 'OK']);
  2112.         }
  2113.         public function inquiryChangeStatusSeller(Request $request) : JsonResponse
  2114.         {
  2115.             $inquiryId $request->request->get('inquiryId');
  2116.             $status $request->request->get('status');
  2117.             /** @var Inquiry $inquiry */
  2118.             $inquiry $this->entityRepository->find($inquiryId);
  2119.             $inquiry->setSellerStatus($status);
  2120.             $entityManager $this->getDoctrine()->getManager();
  2121.             $entityManager->persist($inquiry);
  2122.             $entityManager->flush();
  2123.             return new JsonResponse(['status' => 'OK']);
  2124.         }
  2125.         public function addTimeToInquiry(Request $request): JsonResponse
  2126.         {
  2127.             $inquiryId $request->request->get('inquiryId');
  2128.             /** @var Inquiry $inquiry */
  2129.             $inquiry $this->entityRepository->find($inquiryId);
  2130.             /** @var DateTime $expirationData */
  2131.             $expirationDate $inquiry->getExpirationDate();
  2132.             $expirationDate->modify('+3 hours');
  2133.             $inquiry->setExpirationDate($expirationDate);
  2134.             $entityManager $this->getDoctrine()->getManager();
  2135.             $entityManager->persist($inquiry);
  2136.             $entityManager->flush();
  2137.             return new JsonResponse(['status' => 'OK']);
  2138.         }
  2139.         public function getSupplierCard(Request $request) : JsonResponse
  2140.         {
  2141.             /** @var Customer $supplier */
  2142.             $supplier $this->customerRepository->find($request->request->get('supplierId'));
  2143.             return new JsonResponse([
  2144.                 'content' => $supplier->getSupplierCard()
  2145.             ]);
  2146.         }
  2147.         public function checkInvoiceAddress(Request $request): JsonResponse
  2148.         {
  2149.             $invoiceAddressId $request->request->get('invoiceAddress');
  2150.             /** @var Customer $customer */
  2151.             $customer $this->get('security.token_storage')->getToken()->getUser();
  2152.             if (($invoiceAddressId == '') || (!$customer->isIgp())) {
  2153.                 return new JsonResponse([
  2154.                     'status' => 'OK'
  2155.                 ]);
  2156.             }
  2157.             $invoiceAddressRepository $this->getDoctrine()->getRepository(CustomerInvoiceAddress::class);
  2158.             $invoiceAddress $invoiceAddressRepository->find($invoiceAddressId);
  2159.             if ($customer->getNIP() == $invoiceAddress->getNip()) {
  2160.                 return new JsonResponse([
  2161.                     'status' => 'OK'
  2162.                 ]);
  2163.             } else {
  2164.                 $address $invoiceAddress->getZipCode() . ' ' $invoiceAddress->getCity() . ' ' $invoiceAddress->getStreet() . ' ' $invoiceAddress->getPropertyNumber();
  2165.                 if ($invoiceAddress->getApartmentNumber() != '') {
  2166.                     $address .= '/' $invoiceAddress->getApartmentNumber();
  2167.                 }
  2168.                 return new JsonResponse([
  2169.                     'status' => 'CONFIRMATION',
  2170.                     'name' => $invoiceAddress->getName(),
  2171.                     'nip' => $invoiceAddress->getNip(),
  2172.                     'address' => $address,
  2173.                 ]);
  2174.             }
  2175.         }
  2176.     }