<?php
namespace App\Controller;
use App\Entity\Announcement;
use App\Entity\ContactPerson;
use App\Entity\Customer;
use App\Entity\CustomerAddress;
use App\Entity\CustomerInvoiceAddress;
use App\Entity\Inquiry;
use App\Entity\InquiryDiscussionEntry;
use App\Entity\InquiryFile;
use App\Entity\InquirySupplier;
use App\Entity\Make;
use App\Entity\Notification;
use App\Entity\Offer;
use App\Entity\OfferFile;
use App\Entity\PrivateMessage;
use App\Entity\PrivateMessageAttachment;
use App\Entity\User;
use App\Form\InquiryType;
use App\Form\OfferType;
use App\Form\PrivateMessageType;
use App\Repository\AnnouncementRepository;
use App\Repository\ContactPersonRepository;
use App\Repository\CustomerAddressRepository;
use App\Repository\CustomerRepository;
use App\Repository\InquiryDiscussionEntryRepository;
use App\Repository\InquiryFileRepository;
use App\Repository\InquiryRepository;
use App\Repository\InquirySupplierRepository;
use App\Repository\OfferRepository;
use App\Repository\PrivateMessageRepository;
use App\Services\EmailService;
use App\Services\GoogleStorageService;
use App\Services\InquiryService;
use App\Services\NotificationService;
use App\Utils\ExtendedEntity;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Exception;
use ReflectionClass;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Form;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Contracts\Translation\TranslatorInterface;
use Twig\Environment;
class ClientInquiryController extends DictionaryController {
const PAGE_LIMIT = 50;
private $inquiryService;
private $emailService;
private $customerRepository;
private $offerRepository;
private $customerAddressRepository;
private $notificationService;
private $inquiryDiscussionEntryRepository;
private $privateMessageRepository;
private $inquirySupplierRepository;
private $inquiryFileRepository;
private $router;
private $tokenStorage;
private $announcementRepository;
private $contactPersonRepository;
public function __construct(Environment $twig,
TranslatorInterface $translator,
AuthenticationUtils $authenticationUtils,
SessionInterface $session,
InquiryRepository $entityRepository,
InquiryService $inquiryService,
TokenStorageInterface $tokenStorage,
EmailService $emailService,
CustomerRepository $customerRepository,
OfferRepository $offerRepository,
CustomerAddressRepository $customerAddressRepository,
NotificationService $notificationService,
InquiryDiscussionEntryRepository $inquiryDiscussionEntryRepository,
PrivateMessageRepository $privateMessageRepository,
InquirySupplierRepository $inquirySupplierRepository,
InquiryFileRepository $inquiryFileRepository,
RouterInterface $router,
AnnouncementRepository $announcementRepository,
ContactPersonRepository $contactPersonRepository
) {
parent::__construct($twig, $translator, $authenticationUtils, $session);
$this->entityRepository = $entityRepository;
$this->inquiryService = $inquiryService;
$this->emailService = $emailService;
$this->customerRepository = $customerRepository;
$this->offerRepository = $offerRepository;
$this->customerAddressRepository = $customerAddressRepository;
$this->notificationService = $notificationService;
$this->inquiryDiscussionEntryRepository = $inquiryDiscussionEntryRepository;
$this->privateMessageRepository = $privateMessageRepository;
$this->inquirySupplierRepository = $inquirySupplierRepository;
$this->inquiryFileRepository = $inquiryFileRepository;
$this->router = $router;
$this->tokenStorage = $tokenStorage;
$this->announcementRepository = $announcementRepository;
$this->contactPersonRepository = $contactPersonRepository;
/** @var Customer $customer */
$customer = $tokenStorage->getToken()->getUser();
//[$activeCount, $waitForDecisionCount, $chosenCount, $withoutOfferCount] = $this->entityRepository->getInquiriesCounts($customer);
//[$newCount, $duringCount, $wonCount, $lostCount] = $this->entityRepository->getSupplierInquiriesCount($customer);
// $chosenInquiries = $this->entityRepository->getFinishedChosenCustomersInquiriesIds($customer, 200);
// $activeInquiries = $this->entityRepository->getActiveCustomersInquiriesIdsWithoutMessagesChecking($customer, 200);
// $newInquiries = $this->entityRepository->getLatestInquiriesIds($customer, 200);
// $wonInquiries = $this->entityRepository->getWonInquiriesIds($customer, 200);
// $duringInquiries = $this->entityRepository->getDuringInquiriesIds($customer, 200);
// $lostInquiries = $this->entityRepository->getLostInquiriesIds($customer, 200);
// $waitForDecisionInquiries = $this->entityRepository->getFinishedWaitForDecisionCustomersInquiries($customer, 200);
// $withoutOfferInquiries = $this->entityRepository->getFinishedWithoutOfferCustomersInquiries($customer, 200);
$chosenInquiries = $this->entityRepository->getFinishedChosenCustomersInquiriesIds($customer);
$activeInquiries = $this->entityRepository->getActiveCustomersInquiriesIds($customer);
$newInquiries = $this->entityRepository->getLatestInquiriesIds($customer);
$wonInquiries = $this->entityRepository->getWonInquiriesIds($customer);
$duringInquiries = $this->entityRepository->getDuringInquiriesIds($customer);
$lostInquiries = $this->entityRepository->getLostInquiriesIds($customer);
$waitForDecisionInquiries = $this->entityRepository->getFinishedWaitForDecisionCustomersInquiries($customer);
$withoutOfferInquiries = $this->entityRepository->getFinishedWithoutOfferCustomersInquiries($customer);
$this->getTwig()->addGlobal('activeCount', count($activeInquiries));
$this->getTwig()->addGlobal('waitForDecisionCount', count($waitForDecisionInquiries));
$this->getTwig()->addGlobal('chosenCount', count($chosenInquiries));
$this->getTwig()->addGlobal('withoutOfferCount', count($withoutOfferInquiries));
$this->getTwig()->addGlobal('newCount', count($newInquiries));
$this->getTwig()->addGlobal('duringCount', count($duringInquiries));
$this->getTwig()->addGlobal('wonCount', count($wonInquiries));
$this->getTwig()->addGlobal('rWonCount', $this->entityRepository->completeWonInquiries($customer));
$this->getTwig()->addGlobal('lostCount', count($lostInquiries));
$unreadAllPrivateMessagesCount = $this->privateMessageRepository->getAllUnreadPrivateMessages($customer);
$this->getTwig()->addGlobal('unreadAllPrivateMessagesCount', $unreadAllPrivateMessagesCount);
$unreadPrivateMessages = $this->privateMessageRepository->getUnreadPrivateMessagesForOffers($customer);
$unreadPrivateMessagesForFolders = [];
$unreadPrivateMessagesForFolders['active'] = 0;
$unreadPrivateMessagesForFolders['waitForDecision'] = 0;
$unreadPrivateMessagesForFolders['chosen'] = 0;
$unreadPrivateMessagesForFolders['withoutOffer'] = 0;
$unreadPrivateMessagesForFolders['new'] = 0;
$unreadPrivateMessagesForFolders['during'] = 0;
$unreadPrivateMessagesForFolders['won'] = 0;
$unreadPrivateMessagesForFolders['lost'] = 0;
foreach ($chosenInquiries as $inquiry) {
if (isset($unreadPrivateMessages[$inquiry['id']])) {
$unreadPrivateMessagesForFolders['chosen']++;
}
}
foreach ($activeInquiries as $inquiry) {
if (isset($unreadPrivateMessages[$inquiry['id']])) {
$unreadPrivateMessagesForFolders['active']++;
}
}
foreach ($newInquiries as $inquiry) {
if (isset($unreadPrivateMessages[$inquiry['id']])) {
$unreadPrivateMessagesForFolders['new']++;
}
}
foreach ($duringInquiries as $inquiry) {
if (isset($unreadPrivateMessages[$inquiry['id']])) {
$unreadPrivateMessagesForFolders['during']++;
}
}
foreach ($wonInquiries as $inquiry) {
if (isset($unreadPrivateMessages[$inquiry['id']])) {
$unreadPrivateMessagesForFolders['won']++;
}
}
foreach ($lostInquiries as $inquiry) {
if (isset($unreadPrivateMessages[$inquiry['id']])) {
$unreadPrivateMessagesForFolders['lost']++;
}
}
/** @var Inquiry $inquiry */
foreach ($waitForDecisionInquiries as $inquiry) {
if (isset($unreadPrivateMessages[$inquiry->getId()])) {
$unreadPrivateMessagesForFolders['waitForDecision']++;
}
}
/** @var Inquiry $inquiry */
foreach ($withoutOfferInquiries as $inquiry) {
if (isset($unreadPrivateMessages[$inquiry->getId()])) {
$unreadPrivateMessagesForFolders['withoutOffer']++;
}
}
$this->getTwig()->addGlobal('unreadPrivateMessagesForFolders', $unreadPrivateMessagesForFolders);
if ($customer->getIsSupplier()) {
$supplierCookieName = 'popupAnnouncementSupplier' . date('Ymd');
if (isset($_COOKIE[$supplierCookieName])) {
$this->getTwig()->addGlobal('showAnnouncementForSupplier', false);
} else {
setcookie($supplierCookieName, "1", time() + 100000000, '/');
/** @var Announcement $announcement */
$announcementForSupplier = $this->announcementRepository->findOneBy(['type' => 'supplier', 'active' => true]);
if ($announcementForSupplier !== null) {
$this->getTwig()->addGlobal('showAnnouncementForSupplier', true);
$this->getTwig()->addGlobal('announcementForSupplierContent', str_replace("\r\n", '<br/>', $announcementForSupplier->getContent()));
} else {
$this->getTwig()->addGlobal('showAnnouncementForSupplier', false);
}
}
} else {
$this->getTwig()->addGlobal('showAnnouncementForSupplier', false);
}
if ($customer->getIsRecipient()) {
$recipientCookieName = 'popupAnnouncementSupplier' . date('Ymd');
if (isset($_COOKIE[$recipientCookieName])) {
$this->getTwig()->addGlobal('showAnnouncementForRecipient', false);
} else {
setcookie($recipientCookieName, "1", time() + 100000000, '/');
/** @var Announcement $announcement */
$announcementForRecipient = $this->announcementRepository->findOneBy(['type' => 'recipient', 'active' => true]);
if ($announcementForRecipient !== null) {
$this->getTwig()->addGlobal('showAnnouncementForRecipient', true);
$this->getTwig()->addGlobal('announcementForRecipientContent', str_replace("\r\n", '<br/>', $announcementForRecipient->getContent()));
} else {
$this->getTwig()->addGlobal('showAnnouncementForRecipient', false);
}
}
} else {
$this->getTwig()->addGlobal('showAnnouncementForRecipient', false);
}
}
public function updateAddresses()
{
$em = $this->getDoctrine()->getManager();
$addreses = $this->inquirySupplierRepository->findAll();
foreach($addreses as $address) {
if(is_null($address->getCustomerAddress())){
foreach ($address->getCustomer()->getAddresses() as $adres) {
if($adres->isDefaultAddress()) {
$address->setCustomerAddress($adres);
$em->persist($address);
}
}
}
}
$em->flush();
}
public function indexActive(Request $request) : Response
{
//oznaczanie wszystkich starszych niż 30 dni jako przeczytane -->
$canMarkNotifications = false;
if (file_exists('mark_notification.tmstmp')) {
$timestamp = file_get_contents('mark_notification.tmstmp');
if ($timestamp < (time() - 3600)) {
$canMarkNotifications = true;
}
} else {
$canMarkNotifications = true;
}
if ($canMarkNotifications) {
$monthAgo = (new DateTime())->modify('-30 days');
$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') . "'";
$em = $this->getDoctrine()->getManager();
$stmt = $em->getConnection()->prepare($sql);
$stmt->execute();
$sql = "UPDATE private_message SET read_at = NOW() WHERE read_at IS NULL AND created_at < '" . $monthAgo->format('Y-m-d H:i:s') . "'";
$em = $this->getDoctrine()->getManager();
$stmt = $em->getConnection()->prepare($sql);
$stmt->execute();
file_put_contents('mark_notification.tmstmp', time());
}
// <-- koniec oznaczania
$customer = $this->get('security.token_storage')->getToken()->getUser();
$inqiries = $this->entityRepository->getActiveCustomersInquiries($customer, $request->attributes->get('page'), self::PAGE_LIMIT);
$inquiriesIds = $this->entityRepository->getActiveCustomersInquiriesIds($customer);
$inquiriesCount = count($inquiriesIds);
if (!empty($inqiries)) {
if (reset($inqiries)->getCustomerAddress() !== null) {
$loggedAddressForGoogleMaps = reset($inqiries)->getCustomerAddress()->getCity() . '+' . reset($inqiries)->getCustomerAddress()->getStreet() . '+' . reset($inqiries)->getCustomerAddress()->getPropertyNumber();
} else {
$loggedAddressForGoogleMaps = null;
}
} else {
$loggedAddressForGoogleMaps = null;
}
$unreadPrivateMessages = $this->getUnreadInquiryPrivateMessages();
$unreadPrivateMessagesForOffersObj = $this->privateMessageRepository->getUnreadPrivateMessagesForOffersForRecipient($customer);
$unreadMessagesForOffersForRecipient = [];
foreach ($unreadPrivateMessagesForOffersObj as $inquiryId => $pmDatas) {
foreach ($pmDatas as $pmData) {
$unreadMessagesForOffersForRecipient[$pmData['offer_id']] = true;
}
}
$unreadPrivateMessagesForOffers = [];
foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
$unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
}
}
return new Response(
$this->getTwig()->render(
$this->getConfiguration()['templates']['index'],
[
'entities' => $inqiries,
'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
'unreadPrivateMessages' => $unreadPrivateMessages,
'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
'folder' => 'active',
'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
'count' => $inquiriesCount,
'routing' => 'client_inquiry_active',
'limit' => self::PAGE_LIMIT,
'page' => $request->attributes->get('page'),
'unreadMessagesForOffersForRecipient' => $unreadMessagesForOffersForRecipient
]
)
);
}
public function indexLatest(Request $request) : Response
{
/** @var Customer $customer */
$customer = $this->get('security.token_storage')->getToken()->getUser();
if ($customer->getIsSupplier()) {
$inqiries = $this->entityRepository->getLatestInquiries($customer, $request->attributes->get('page'), self::PAGE_LIMIT);
$inquiriesIds = $this->entityRepository->getLatestInquiriesIds($customer);
$inquiriesCount = count($inquiriesIds);
if (!empty($inqiries)) {
if (reset($inqiries)->getCustomerAddress() !== null) {
$loggedAddressForGoogleMaps = reset($inqiries)->getCustomerAddress()->getCity() . '+' . reset($inqiries)->getCustomerAddress()->getStreet() . '+' . reset($inqiries)->getCustomerAddress()->getPropertyNumber();
} else {
$loggedAddressForGoogleMaps = null;
}
} else {
$loggedAddressForGoogleMaps = null;
}
$unreadPrivateMessages = $this->getUnreadInquiryPrivateMessages();
$unreadPrivateMessagesForOffers = [];
foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
$unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
}
}
return new Response(
$this->getTwig()->render(
$this->getConfiguration()['templates']['index'],
[
'entities' => $inqiries,
'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
'unreadPrivateMessages' => $unreadPrivateMessages,
'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
'folder' => 'latest',
'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
'count' => $inquiriesCount,
'routing' => 'supplier_inquiry_latest',
'limit' => self::PAGE_LIMIT,
'page' => $request->attributes->get('page'),
]
)
);
} else {
return $this->redirectToRoute('client_homepage');
}
}
public function indexDuring(Request $request) : Response
{
/** @var Customer $customer */
$customer = $this->get('security.token_storage')->getToken()->getUser();
if ($customer->getIsSupplier()) {
$inqiries = $this->entityRepository->getDuringInquiries($customer, $request->attributes->get('page'), self::PAGE_LIMIT);
$inquiriesIds = $this->entityRepository->getDuringInquiriesIds($customer);
$inquiriesCount = count($inquiriesIds);
if (!empty($inqiries)) {
if (reset($inqiries)->getCustomerAddress() !== null) {
$loggedAddressForGoogleMaps = reset($inqiries)->getCustomerAddress()->getCity() . '+' . reset($inqiries)->getCustomerAddress()->getStreet() . '+' . reset($inqiries)->getCustomerAddress()->getPropertyNumber();
} else {
$loggedAddressForGoogleMaps = null;
}
} else {
$loggedAddressForGoogleMaps = null;
}
$unreadPrivateMessages = $this->getUnreadInquiryPrivateMessages();
$unreadPrivateMessagesForOffers = [];
foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
$unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
}
}
return new Response(
$this->getTwig()->render(
$this->getConfiguration()['templates']['index'],
[
'entities' => $inqiries,
'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
'unreadPrivateMessages' => $unreadPrivateMessages,
'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
'folder' => 'during',
'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
'count' => $inquiriesCount,
'routing' => 'supplier_inquiry_during',
'limit' => self::PAGE_LIMIT,
'page' => $request->attributes->get('page'),
]
)
);
} else {
return $this->redirectToRoute('client_homepage');
}
}
public function indexWon(Request $request) : Response
{
/** @var Customer $customer */
$customer = $this->get('security.token_storage')->getToken()->getUser();
if ($customer->getIsSupplier()) {
$inqiries = $this->entityRepository->getWonInquiries($customer, $request->attributes->get('page'), self::PAGE_LIMIT);
$inquiriesIds = $this->entityRepository->getWonInquiriesIds($customer);
$inquiriesCount = count($inquiriesIds);
$privateMessagesDates = $this->privateMessageRepository->getPrivateMessagesForInquiries($customer);
$sortedInquiries = [];
/** @var Inquiry $inquiry */
foreach ($inqiries as $inquiry) {
$sortedInquiriesRow['inquiry'] = $inquiry;
if (isset($privateMessagesDates[$inquiry->getId()])) {
$dateTime = new DateTime();
$dateTime->modify('+1 year');
$sortedInquiriesRow['date'] = $dateTime;//$privateMessagesDates[$inquiry->getId()];
} else {
$sortedInquiriesRow['date'] = $inquiry->getCreatedAt();
}
$sortedInquiries[] = $sortedInquiriesRow;
}
usort($sortedInquiries, function($a, $b) {
return $b['date']->getTimestamp() - $a['date']->getTimestamp();
});
$inqiries = [];
foreach ($sortedInquiries as $inq) {
$inqiries[] = $inq['inquiry'];
}
if (!empty($inqiries)) {
if (reset($inqiries)->getCustomerAddress() !== null) {
$loggedAddressForGoogleMaps = reset($inqiries)->getCustomerAddress()->getCity() . '+' . reset($inqiries)->getCustomerAddress()->getStreet() . '+' . reset($inqiries)->getCustomerAddress()->getPropertyNumber();
} else {
$loggedAddressForGoogleMaps = null;
}
} else {
$loggedAddressForGoogleMaps = null;
}
$unreadPrivateMessages = $this->getUnreadInquiryPrivateMessages();
$unreadPrivateMessagesForOffers = [];
foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
$unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
}
}
return new Response(
$this->getTwig()->render(
$this->getConfiguration()['templates']['index'],
[
'entities' => $inqiries,
'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
'unreadPrivateMessages' => $unreadPrivateMessages,
'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
'folder' => 'won',
'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
'count' => $inquiriesCount,
'routing' => 'supplier_inquiry_won',
'limit' => self::PAGE_LIMIT,
'page' => $request->attributes->get('page'),
]
)
);
} else {
return $this->redirectToRoute('client_homepage');
}
}
public function indexLost(Request $request) : Response
{
/** @var Customer $customer */
$customer = $this->get('security.token_storage')->getToken()->getUser();
if ($customer->getIsSupplier()) {
$inqiries = $this->entityRepository->getLostInquiries($customer, $request->attributes->get('page'), self::PAGE_LIMIT);
$inquiriesIds = $this->entityRepository->getLostInquiriesIds($customer);
$inquiriesCount = count($inquiriesIds);
if (!empty($inqiries)) {
if (reset($inqiries)->getCustomerAddress() !== null) {
$loggedAddressForGoogleMaps = reset($inqiries)->getCustomerAddress()->getCity() . '+' . reset($inqiries)->getCustomerAddress()->getStreet() . '+' . reset($inqiries)->getCustomerAddress()->getPropertyNumber();
} else {
$loggedAddressForGoogleMaps = null;
}
} else {
$loggedAddressForGoogleMaps = null;
}
$unreadPrivateMessages = $this->getUnreadInquiryPrivateMessages();
$unreadPrivateMessagesForOffers = [];
foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
$unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
}
}
return new Response(
$this->getTwig()->render(
$this->getConfiguration()['templates']['index'],
[
'entities' => $inqiries,
'lost' => true,
'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
'unreadPrivateMessages' => $unreadPrivateMessages,
'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
'folder' => 'lost',
'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
'count' => $inquiriesCount,
'routing' => 'supplier_inquiry_lost',
'limit' => self::PAGE_LIMIT,
'page' => $request->attributes->get('page'),
]
)
);
} else {
return $this->redirectToRoute('client_homepage');
}
}
public function indexWaitForDecision() : Response
{
$customer = $this->get('security.token_storage')->getToken()->getUser();
$inqiries = $this->entityRepository->getFinishedWaitForDecisionCustomersInquiries($customer);
if (!empty($inqiries)) {
if (reset($inqiries)->getCustomerAddress() !== null) {
$loggedAddressForGoogleMaps = reset($inqiries)->getCustomerAddress()->getCity() . '+' . reset($inqiries)->getCustomerAddress()->getStreet() . '+' . reset($inqiries)->getCustomerAddress()->getPropertyNumber();
} else {
$loggedAddressForGoogleMaps = null;
}
} else {
$loggedAddressForGoogleMaps = null;
}
$unreadPrivateMessages = $this->getUnreadInquiryPrivateMessages();
$unreadPrivateMessagesForOffers = [];
foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
$unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
}
}
return new Response(
$this->getTwig()->render(
$this->getConfiguration()['templates']['index'],
[
'entities' => $inqiries,
'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
'unreadPrivateMessages' => $unreadPrivateMessages,
'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
'folder' => 'waitForDecision',
'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
]
)
);
}
public function indexChosen(Request $request) : Response
{
$customer = $this->get('security.token_storage')->getToken()->getUser();
$inqiries = $this->entityRepository->getFinishedChosenCustomersInquiries($customer, $request->attributes->get('page'), self::PAGE_LIMIT);
$inquiriesIds = $this->entityRepository->getFinishedChosenCustomersInquiriesIds($customer);
$inquiriesCount = count($inquiriesIds);
$privateMessagesDates = $this->privateMessageRepository->getPrivateMessagesForInquiries($customer);
$sortedInquiries = [];
/** @var Inquiry $inquiry */
foreach ($inqiries as $inquiry) {
$sortedInquiriesRow['inquiry'] = $inquiry;
if (isset($privateMessagesDates[$inquiry->getId()])) {
$dateTime = new DateTime();
$dateTime->modify('+1 year');
$sortedInquiriesRow['date'] = $dateTime;//$privateMessagesDates[$inquiry->getId()];
} else {
$sortedInquiriesRow['date'] = $inquiry->getCreatedAt();
}
$sortedInquiries[] = $sortedInquiriesRow;
}
usort($sortedInquiries, function($a, $b) {
return $b['date']->getTimestamp() - $a['date']->getTimestamp();
});
$inqiries = [];
foreach ($sortedInquiries as $inq) {
$inqiries[] = $inq['inquiry'];
}
if (!empty($inqiries)) {
if (reset($inqiries)->getCustomerAddress() !== null) {
$loggedAddressForGoogleMaps = reset($inqiries)->getCustomerAddress()->getCity() . '+' . reset($inqiries)->getCustomerAddress()->getStreet() . '+' . reset($inqiries)->getCustomerAddress()->getPropertyNumber();
} else {
$loggedAddressForGoogleMaps = null;
}
} else {
$loggedAddressForGoogleMaps = null;
}
$unreadPrivateMessages = $this->getUnreadInquiryPrivateMessages();
$unreadPrivateMessagesForOffers = [];
foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
$unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
}
}
return new Response(
$this->getTwig()->render(
$this->getConfiguration()['templates']['index'],
[
'entities' => $inqiries,
'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
'unreadPrivateMessages' => $unreadPrivateMessages,
'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
'folder' => 'chosen',
'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
'count' => $inquiriesCount,
'routing' => 'client_inquiry_chosen',
'limit' => self::PAGE_LIMIT,
'page' => $request->attributes->get('page'),
]
)
);
}
public function indexWithoutOffer() : Response
{
$customer = $this->get('security.token_storage')->getToken()->getUser();
$inqiries = $this->entityRepository->getFinishedWithoutOfferCustomersInquiries($customer);
if (!empty($inqiries)) {
if (reset($inqiries)->getCustomerAddress() !== null) {
$loggedAddressForGoogleMaps = reset($inqiries)->getCustomerAddress()->getCity() . '+' . reset($inqiries)->getCustomerAddress()->getStreet() . '+' . reset($inqiries)->getCustomerAddress()->getPropertyNumber();
} else {
$loggedAddressForGoogleMaps = null;
}
} else {
$loggedAddressForGoogleMaps = null;
}
$unreadPrivateMessages = $this->getUnreadInquiryPrivateMessages();
$unreadPrivateMessagesForOffers = [];
foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
$unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
}
}
return new Response(
$this->getTwig()->render(
$this->getConfiguration()['templates']['index'],
[
'entities' => $inqiries,
'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
'unreadPrivateMessages' => $unreadPrivateMessages,
'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
'folder' => 'withoutOffer',
'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
]
)
);
}
public function indexArchived(Request $request) : Response
{
$customer = $this->get('security.token_storage')->getToken()->getUser();
$inqiries = $this->entityRepository->getArchivedCustomersInquiries($customer, $request->attributes->get('page'), self::PAGE_LIMIT);
$inquiriesIds = $this->entityRepository->getArchivedCustomersInquiriesIds($customer);
$inquiriesCount = count($inquiriesIds);
if (!empty($inqiries)) {
if (reset($inqiries)->getCustomerAddress() !== null) {
$loggedAddressForGoogleMaps = reset($inqiries)->getCustomerAddress()->getCity() . '+' . reset($inqiries)->getCustomerAddress()->getStreet() . '+' . reset($inqiries)->getCustomerAddress()->getPropertyNumber();
} else {
$loggedAddressForGoogleMaps = null;
}
} else {
$loggedAddressForGoogleMaps = null;
}
$unreadPrivateMessages = $this->getUnreadInquiryPrivateMessages();
$unreadPrivateMessagesForOffers = [];
foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
$unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
}
}
return new Response(
$this->getTwig()->render(
$this->getConfiguration()['templates']['index'],
[
'entities' => $inqiries,
'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
'unreadPrivateMessages' => $unreadPrivateMessages,
'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
'folder' => 'archived',
'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
'count' => $inquiriesCount,
'routing' => 'client_inquiry_archived',
'limit' => self::PAGE_LIMIT,
'page' => $request->attributes->get('page'),
]
)
);
}
public function show(Request $request) : Response
{
/** @var Customer $customer */
$customer = $this->get('security.token_storage')->getToken()->getUser();
/** @var Inquiry $inquiry */
$inquiry = $this->entityRepository->find($request->attributes->get('id'));
$makeIds = [];
/** @var Make $make */
foreach ($customer->getMakes()->toArray() as $make) {
$makeIds[$make->getId()] = $make->getId() ;
}
if ($customer->getIsSupplier()) {
$inquirySupplier = $this->inquirySupplierRepository->findOneBy(['inquiry' => $inquiry->getId(), 'customer' => $customer->getId(), 'seen' => false]);
if ($inquirySupplier !== null) {
$inquirySupplier->setSeen(true);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($inquirySupplier);
$entityManager->flush();
}
if ($inquiry->getRecipient()->getId() !== $customer->getId()) {
$inquirySupplier = $this->inquirySupplierRepository->findOneBy(['inquiry' => $inquiry->getId(), 'customer' => $customer->getId()]);
if ($inquirySupplier === null) {
$this->addFlash('error', $this->getTranslator()->trans('inquiry.messages.you_cannot_see_not_yours_inquiry'));
return $this->redirectToRoute('supplier_inquiry_latest');
}
}
}
$choosedSuppliersForInquiryIds = [];
foreach ($inquiry->getChoosedSuppliers() as $choosedSupplier) {
$choosedSuppliersForInquiryIds[$choosedSupplier->getId()] = $choosedSupplier->getId();
}
if ($customer->getIsRecipient() && !$customer->getIsSupplier()) {
if ($customer->getId() !== $inquiry->getRecipient()->getId()) {
$this->addFlash('error', $this->getTranslator()->trans('inquiry.messages.you_cannot_see_not_yours_inquiry'));
return $this->redirectToRoute('client_inquiry_active');
}
} elseif ($customer->getIsSupplier() && !$customer->getIsRecipient()) {
/** @var Inquiry $inquiry */
if ((!in_array($inquiry->getMake()->getId(), $makeIds)) && ($inquiry->getRecipient()->getId() != $customer->getId())) {
$this->addFlash('error', $this->getTranslator()->trans('inquiry.messages.you_cannot_see_inquiry_for_not_your_makes'));
return $this->redirectToRoute('supplier_inquiry_latest');
}
} elseif ($customer->getIsSupplier() && $customer->getIsRecipient()) {
if (
(!in_array($inquiry->getMake()->getId(), $makeIds)) && ($inquiry->getRecipient()->getId() != $customer->getId()) &&
($customer->getId() !== $inquiry->getRecipient()->getId()) && (!in_array($customer->getId(), $choosedSuppliersForInquiryIds))
) {
$this->addFlash('error', $this->getTranslator()->trans('inquiry.messages.you_cannot_see_inquiry_for_not_your_makes'));
return $this->redirectToRoute('supplier_inquiry_latest');
}
}
if($this->entityRepository->checkIfInquiryIsLost($inquiry, $this->get('security.token_storage')->getToken()->getUser())) {
$lost = true;
} else {
$lost = false;
}
$notChosen = false;
$thisCustomer = false;
foreach ($inquiry->getOffers() as $offer) {
if ($offer->getChosen()) {
$notChosen = true;
}
}
if ($inquiry->getRecipient()->getId() == $customer->getId()) {
$thisCustomer = true;
}
$loggedAddressForGoogleMaps = null;
if ($thisCustomer) {
if ($inquiry->getCustomerAddress() !== null) {
$loggedAddressForGoogleMaps = $inquiry->getCustomerAddress()->getCity() . '+' . $inquiry->getCustomerAddress()->getStreet() . '+' . $inquiry->getCustomerAddress()->getPropertyNumber();
}
} else {
/** @var CustomerAddress $address */
foreach ($customer->getAddresses() as $address) {
if ($address->isDefaultAddress()) {
$loggedAddressForGoogleMaps = $address->getCity() . '+' . $address->getStreet() . '+' . $address->getPropertyNumber();
}
}
}
$inquirySuppliersIds = [];
$contactPersonsForCustomers = [];
/** @var InquirySupplier $inquirySupplier */
foreach ($inquiry->getInquirySuppliers() as $inquirySupplier) {
$defaultContactPerson = $this->contactPersonRepository->findOneBy([
'customer' => $inquirySupplier->getCustomer()->getId(),
'defaultPerson' => true
]);
$contactPersonsForCustomers[$inquirySupplier->getCustomer()->getId()] = $defaultContactPerson;
}
$googleStorageService = new GoogleStorageService(
$this->getParameter('file_upload_google_storage_key_file_location'),
$this->getParameter('file_upload_google_storage_project_id'),
$this->getParameter('file_upload_google_storage_bucket_name'),
$this->getParameter('file_upload_google_storage_bucket_location')
);
$miniatureFiles = [];
$entityManager = $this->getEntityManager();
foreach ($inquiry->getInquiryFiles() as $inquiryFile) {
if ($inquiryFile->getFileType() == 'image') {
$miniatureFile = new InquiryFile();
$filePath = pathinfo($inquiryFile->getFilePath(), PATHINFO_DIRNAME);
$filename = pathinfo($inquiryFile->getFilePath(), PATHINFO_FILENAME);
$extension = pathinfo($inquiryFile->getFilePath(), PATHINFO_EXTENSION);
$miniatureFilePath = $filePath . DIRECTORY_SEPARATOR . $filename . '_100x100.' . $extension ;
$miniatureFile->setFilePath($miniatureFilePath);
[$url, $validityTime] = $googleStorageService->createGoogleStorageFileUrl($miniatureFile);
$miniatureFiles[$inquiryFile->getId()]['100x100']['url'] = $url;
}
[$url, $validityTime] = $googleStorageService->createGoogleStorageFileUrl($inquiryFile);
$inquiryFile->setUrl($url);
$inquiryFile->setUrlValidityDate($validityTime);
$entityManager->persist($inquiryFile);
}
$entityManager->flush();
return new Response(
$this->getTwig()->render(
$this->getConfiguration()['templates']['show'],
[
'inquiry' => $inquiry,
'lost' => $lost,
'showArchiveButton' => (!$notChosen && $thisCustomer && !$inquiry->getArchived()),
'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
'contactPersonsForCustomers' => $contactPersonsForCustomers,
'phrase' => $request->attributes->get('phrase'),
'miniatureFiles' => $miniatureFiles
]
)
);
}
public function indexSupplierArchived(Request $request) : Response
{
/** @var Customer $customer */
$customer = $this->get('security.token_storage')->getToken()->getUser();
if ($customer->getIsSupplier()) {
$inqiries = $this->entityRepository->getArchivedSupplierInquiries($customer, $request->attributes->get('page'), self::PAGE_LIMIT);
$inquiriesIds = $this->entityRepository->getArchivedSupplierInquiriesIds($customer);
$inquiriesCount = count($inquiriesIds);
if (!empty($inqiries)) {
$loggedAddressForGoogleMaps = reset($inqiries)->getCustomerAddress()->getCity() . '+' . reset($inqiries)->getCustomerAddress()->getStreet() . '+' . reset($inqiries)->getCustomerAddress()->getPropertyNumber();
} else {
$loggedAddressForGoogleMaps = '';
}
$unreadPrivateMessages = $this->getUnreadInquiryPrivateMessages();
$unreadPrivateMessagesForOffers = [];
foreach ($unreadPrivateMessages['privateMessages'] as $inquiryId => $unreadPrivateMessageDatas) {
foreach ($unreadPrivateMessageDatas as $unreadPrivateMessage) {
$unreadPrivateMessagesForOffers[$unreadPrivateMessage['offer_id']] = true;
}
}
return new Response(
$this->getTwig()->render(
$this->getConfiguration()['templates']['index'],
[
'entities' => $inqiries,
'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries(),
'unreadPrivateMessages' => $unreadPrivateMessages,
'unreadPrivateMessagesForOffers' => $unreadPrivateMessagesForOffers,
'lastPrivateMessages' => $this->getLastPrivateMessages($inqiries),
'folder' => 'supplierArchived',
'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
'count' => $inquiriesCount,
'routing' => 'supplier_inquiry_archived',
'limit' => self::PAGE_LIMIT,
'page' => $request->attributes->get('page'),
]
)
);
} else {
return $this->redirectToRoute('client_homepage');
}
}
public function makeOffer(Request $request) : Response
{
$inquiry = null;
$offer = null;
if (null !== $request->attributes->get('id')) {
/** @var Inquiry $inquiry */
$inquiry = $this->entityRepository->find($request->attributes->get('id'));
$offer = new Offer();
} elseif (null !== $request->attributes->get('offerId')) {
/** @var Offer $offer */
$offer = $this->offerRepository->find($request->attributes->get('offerId'));
$inquiry = $offer->getInquiry();
}
// zlec 11312
// if ($inquiry->getExpirationDate() <= new DateTime()) {
// $this->addFlash('error', $this->getTranslator()->trans('inquiry.messages.isLost'));
// return $this->redirectToRoute('supplier_inquiry_lost');
// }
if($this->entityRepository->checkIfInquiryIsLost($inquiry, $this->get('security.token_storage')->getToken()->getUser())) {
$this->addFlash('error', $this->getTranslator()->trans('inquiry.messages.isLost'));
return $this->redirectToRoute('supplier_inquiry_lost');
}
$formNewOffer = $this->createForm(OfferType::class, $offer);
$formNewOffer->add('submit', SubmitType::class, ['label' => 'offer.makeOffer']);
$oldOfferFiles = [];
if (null !== $request->attributes->get('offerId')) {
foreach ($offer->getOfferFiles() as $offerFile) {
$oldOfferFiles[] = $offerFile;
}
}
/** @var Customer $customer */
$customer = $this->get('security.token_storage')->getToken()->getUser();
$formNewOffer->handleRequest($request);
if ($formNewOffer->isSubmitted() && $formNewOffer->isValid()) {
$offerFileArray = [];
foreach ($offer->getOfferFiles() as $offerUploadedFile) {
$offerFileArray[] = $this->inquiryService->createOfferFileFromUploadedFile($offer, $offerUploadedFile, 'file');
}
$offerFileArray = array_merge($offerFileArray, $oldOfferFiles);
/** @var OfferFile $offerFile */
foreach ($offerFileArray as $offerFile) {
$offerFile->setOffer($offer);
}
if(!is_null($request->files->get('offer')['invoiceFile'])) {
$invoiceFile = $this->inquiryService->createOfferFileFromUploadedFile($offer, $request->files->get('offer')['invoiceFile'], OfferFile::OFFER_FILE_KIND_INVOICE);
if ($offer->getInquiry()->getRecipient()->isNotificationsInvoiceNotification()) {
$this->notificationService->createNotification('offer.messages.supplierAttachedInvoice', $offer->getInquiry()->getRecipient(), $offer->getSupplier(), Notification::NOTIFICATION_TYPE_INVOICE, $offer->getId());
}
} else {
$invoiceFile = $offer->getInvoiceFile();
}
$googleStorageService = new GoogleStorageService(
$this->getParameter('file_upload_google_storage_key_file_location'),
$this->getParameter('file_upload_google_storage_project_id'),
$this->getParameter('file_upload_google_storage_bucket_name'),
$this->getParameter('file_upload_google_storage_bucket_location')
);
$pathForOfferFiles = $_SERVER['DOCUMENT_ROOT'] . '/upload/' . $offer->getFileUploadId();
$files = glob($pathForOfferFiles . '/*.*');
foreach ($files as $file) {
$fileContent = file_get_contents($file);
$extension = pathinfo($file, PATHINFO_EXTENSION);
$newFilename = uniqid('upload.', true) . '.' . $extension;
$mimeType = mime_content_type($file);
$fileType = (strpos($mimeType, 'image/') !== false) ? 'image' : 'file';
$uploadOfferFile = new OfferFile();
$uploadOfferFile->setOffer($offer);
$uploadOfferFile->setFileType($fileType);
$uploadOfferFile->setMimeType($mimeType);
$uploadOfferFile->setFilePath('upload/' . $newFilename);
$uploadOfferFile->setOriginalFileName(basename($file));
$uploadOfferFile = $googleStorageService->saveFileWithMiniaturesToFilesystem($uploadOfferFile, $fileContent);
unlink($file);
$offerFileArray[] = $uploadOfferFile;
}
@rmdir($pathForOfferFiles);
$offer->setOfferFiles(new ArrayCollection($offerFileArray));
$offer->setSupplier($customer);
$offer->setInquiry($inquiry);
$offer->setCreatedAt(new DateTime());
$offer->setTotalPrice($offer->getPriceAfterDiscount() + $offer->getDeliveryPrice());
$offer->setRequestInvoice($offer->getRequestInvoice() ?? false);
$offer->setInvoiceFile($invoiceFile);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($offer);
$customer->setLastOfferDate(new DateTime());
$entityManager->persist($customer);
if (null !== $request->attributes->get('offerId')) {
foreach ($offer->getOfferFiles() as $file) {
$file->setOffer($offer);
$entityManager->persist($file);
}
}
$privateMessagesForCustomerAndInquiry = $this->privateMessageRepository->findBy([
'author' => $customer->getId(),
'inquiry' => $inquiry->getId()
]);
/** @var PrivateMessage $privateMessageForCustomerAndInquiry */
foreach ($privateMessagesForCustomerAndInquiry as $privateMessageForCustomerAndInquiry) {
if ($privateMessageForCustomerAndInquiry->getOffer() === null) {
$privateMessageForCustomerAndInquiry->setOffer($offer);
$privateMessageForCustomerAndInquiry->setInquiry($offer->getInquiry());
$entityManager->persist($privateMessageForCustomerAndInquiry);
}
}
$entityManager->flush();
/** @var RouterInterface $router */
$router = $this->get('router');
if (null !== $request->attributes->get('offerId')) {
$content = $this->getTwig()->render(
'Email/updateOffer.html.twig',
[
'inquiryLink' => $router->generate('client_inquiry_details', ['id' => $inquiry->getId()], RouterInterface::ABSOLUTE_URL)
]
);
$notificationContent = 'offer.mail.offerForInquiryWasUpdated';
} else {
$content = $this->getTwig()->render(
'Email/newOffer.html.twig',
[
'inquiryLink' => $router->generate('client_inquiry_details', ['id' => $inquiry->getId()], RouterInterface::ABSOLUTE_URL)
]
);
$notificationContent = 'offer.mail.newOfferForInquiry';
}
if ($offer->getSupplier()->isNotificationsOfferNotification()) {
$this->notificationService->createNotification($notificationContent, $inquiry->getRecipient(), $offer->getSupplier(), Notification::NOTIFICATION_TYPE_OFFER, $offer->getId());
}
if ($offer->getSupplier()->isNotificationsOfferMail()) {
$this->emailService->send(
[$inquiry->getRecipient()->getUsername()],
$this->getTranslator()->trans('defaultContent.mail.subject') . ' ' . $inquiry->getMake() . ' ' . $inquiry->getModel() . ' ' . $inquiry->getRegistrationNumber(),
$content
);
}
$this->checkBestOffer($offer);
$this->addFlash('success', $this->getTranslator()->trans('offer.messages.offerWasMade'));
return $this->redirectToRoute($this->getConfiguration()['routings']['inquiryDetails'], ['id' => $inquiry->getId()]);
}
$loggedAddressForGoogleMaps = null;
/** @var CustomerAddress $address */
foreach ($customer->getAddresses() as $address) {
if ($address->isDefaultAddress()) {
$loggedAddressForGoogleMaps = $address->getCity() . '+' . $address->getStreet() . '+' . $address->getPropertyNumber();
}
}
$googleStorageService = new GoogleStorageService(
$this->getParameter('file_upload_google_storage_key_file_location'),
$this->getParameter('file_upload_google_storage_project_id'),
$this->getParameter('file_upload_google_storage_bucket_name'),
$this->getParameter('file_upload_google_storage_bucket_location')
);
$miniatureFiles = [];
$entityManager = $this->getEntityManager();
/** @var OfferFile $offerFile */
foreach ($offer->getOfferFiles() as $offerFile) {
if (($offerFile->getWidth() === null) && (strpos($offerFile->getMimeType(), 'image') !== false)) {
$imageData = getimagesize($offerFile->getFilePath());
$offerFile->setWidth($imageData[0]);
$offerFile->setHeight($imageData[1]);
$entityManager->persist($offerFile);
}
if ($offerFile->getFileType() == 'image') {
$miniatureFile = new OfferFile();
$filePath = pathinfo($offerFile->getFilePath(), PATHINFO_DIRNAME);
$filename = pathinfo($offerFile->getFilePath(), PATHINFO_FILENAME);
$extension = pathinfo($offerFile->getFilePath(), PATHINFO_EXTENSION);
$miniatureFilePath = $filePath . DIRECTORY_SEPARATOR . $filename . '_100x100.' . $extension ;
$miniatureFile->setFilePath($miniatureFilePath);
[$url, $validityTime] = $googleStorageService->createGoogleStorageFileUrl($miniatureFile);
$miniatureFiles[$offerFile->getId()]['100x100']['url'] = $url;
}
[$url, $validityTime] = $googleStorageService->createGoogleStorageFileUrl($offerFile);
$offerFile->setUrl($url);
$offerFile->setUrlValidityDate($validityTime);
$entityManager->persist($offerFile);
}
foreach ($inquiry->getInquiryFiles() as $inquiryFile) {
if (($inquiryFile->getWidth() === null) && (strpos($inquiryFile->getMimeType(), 'image') !== false)) {
$imageData = getimagesize($inquiryFile->getFilePath());
$inquiryFile->setWidth($imageData[0]);
$inquiryFile->setHeight($imageData[1]);
$entityManager->persist($inquiryFile);
}
if ($inquiryFile->getFileType() == 'image') {
$miniatureFile = new InquiryFile();
$filePath = pathinfo($inquiryFile->getFilePath(), PATHINFO_DIRNAME);
$filename = pathinfo($inquiryFile->getFilePath(), PATHINFO_FILENAME);
$extension = pathinfo($inquiryFile->getFilePath(), PATHINFO_EXTENSION);
$miniatureFilePath = $filePath . DIRECTORY_SEPARATOR . $filename . '_100x100.' . $extension ;
$miniatureFile->setFilePath($miniatureFilePath);
[$url, $validityTime] = $googleStorageService->createGoogleStorageFileUrl($miniatureFile);
$miniatureFiles[$inquiryFile->getId()]['100x100']['url'] = $url;
}
[$url, $validityTime] = $googleStorageService->createGoogleStorageFileUrl($inquiryFile);
$inquiryFile->setUrl($url);
$inquiryFile->setUrlValidityDate($validityTime);
$entityManager->persist($inquiryFile);
}
$entityManager->flush();
return new Response(
$this->getTwig()->render(
$this->getConfiguration()['templates']['newOffer'],
[
'offer' => $offer,
'inquiry' => $inquiry,
'formNewOffer' => $formNewOffer->createView(),
'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
'miniatureFiles' => $miniatureFiles,
]
)
);
}
public function privateMessageGetFile($id)
{
/** @var PrivateMessageAttachment $file */
$file = $this->getDoctrine()->getRepository(PrivateMessageAttachment::class)->find($id);
$response = new Response();
$response->headers->set('Cache-Control', 'private');
$response->headers->set('Content-type', $file->getMimeType());
$response->headers->set('Content-Disposition', 'attachment; filename="' . basename($file->getOriginalFileName()) . '";');
//$response->headers->set('Content-length', filesize($file->getFilePath()));
$response->sendHeaders();
$response->setContent(file_get_contents($file->getUrl()));
return $response;
}
public function addDiscussionEntry(Request $request) : Response
{
/** @var RouterInterface $router */
$router = $this->get('router');
$content = trim($request->request->get('content'));
do {
$imageTagContent = substr($content, strpos($content, '<img src="data'));
$imageTagContent = substr($imageTagContent, 0, strpos($imageTagContent, '/>'));
$imageType = substr($imageTagContent, strpos($imageTagContent, 'src="') + strlen('src="'));
$imageType = substr($imageType, 0, strpos($imageType, 'base64,') + strlen('base64,'));
$imageContent = substr($imageTagContent, strpos($imageTagContent, 'base64,') + strlen('base64,'));
$imageContent = substr($imageContent, 0, strpos($imageContent, '"'));
$imageToFile = base64_decode($imageContent);
$imageFileName = 'upload/' . uniqid('discussion_image_', true) . '.png';
file_put_contents($imageFileName, $imageToFile);
$newImageTagContent = str_replace(
$imageType . $imageContent,
$router->generate('client_homepage', [], RouterInterface::ABSOLUTE_URL) . '/' . $imageFileName,
$imageTagContent
);
$content = str_replace($imageTagContent, $newImageTagContent, $content);
} while (strpos($content, '"data:image') !== false);
/** @var Customer $customer */
$customer = $this->get('security.token_storage')->getToken()->getUser();
/** @var Inquiry $inquiry */
$inquiry = $this->entityRepository->find($request->request->get('inquiryId'));
/** @var InquiryDiscussionEntry $inquiryDiscussionEntry */
$inquiryDiscussionEntry = new InquiryDiscussionEntry();
$inquiryDiscussionEntry->setAuthor($customer);
$inquiryDiscussionEntry->setInquiry($inquiry);
$inquiryDiscussionEntry->setContent($content);
$inquiryDiscussionEntry->setCreatedAt(new DateTime());
if (($request->request->get('supplierId') != 0)) {
$supplier = $this->customerRepository->find($request->request->get('supplierId'));
$inquiryDiscussionEntry->setRecipient($supplier);
}
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($inquiryDiscussionEntry);
$entityManager->flush();
/** @var Inquiry $inquiry */
$inquiry = $this->entityRepository->find($request->request->get('inquiryId'));
[$discussionEntries, $loggedCustomerIsSupplier] = $this->prepareDiscussionEntries($customer, $inquiry);
$response['content'] = $this->getTwig()->render(
$this->getConfiguration()['templates']['discussionEntries'],
[
'inquiry' => $inquiry,
'discussionEntries' => $discussionEntries,
'loggedCustomerIsSupplier' => $loggedCustomerIsSupplier,
'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries($inquiry->getId()),
'loggerCustomer' => $customer
]
);
$content = $this->getTwig()->render(
'Email/newDiscussionEntry.html.twig',
[
'inquiryLink' => $router->generate('client_inquiry_details', ['id' => $inquiry->getId()], RouterInterface::ABSOLUTE_URL),
'inquiry' => $inquiry,
'discussionEntry' => $inquiryDiscussionEntry
]
);
$recipientAddresses = [];
if ($inquiryDiscussionEntry->getRecipient() === null) {
foreach ($inquiry->getInquiryDiscussionEntries() as $discussionEntryAll) {
$recipientAddresses[$discussionEntryAll->getAuthor()->getUsername()] = $discussionEntryAll->getAuthor();
}
} else {
$recipientAddresses[$inquiryDiscussionEntry->getRecipient()->getUsername()] = $inquiryDiscussionEntry->getRecipient();
}
if (isset($recipientAddresses[$customer->getUsername()])) {
unset($recipientAddresses[$customer->getUsername()]);
}
/** @var Customer $supplier */
foreach ($recipientAddresses as $address) {
if ($address->isNotificationsInquiryNotification()) {
$this->notificationService->createNotification('inquiry.mail.newDisccussionEntry', $address, $inquiry->getRecipient(), Notification::NOTIFICATION_TYPE_INQUIRY, $inquiry->getId(), $inquiryDiscussionEntry->getId());
}
if ($address->isNotificationsInquiryMail()) {
$this->emailService->send(
[$address->getUsername()],
$this->getTranslator()->trans('defaultContent.mail.subject') . ' ' . $inquiry->getMake() . ' ' . $inquiry->getModel() . ' ' . $inquiry->getRegistrationNumber(),
$content
);
}
}
return new JsonResponse($response);
}
public function refreshDiscussionEntry(Request $request) : Response
{
/** @var Inquiry $inquiry */
$inquiry = $this->entityRepository->find($request->request->get('entityId'));
$html = $this->getTwig()->render(
'ClientInquiry/Entries.html.twig',
[
'inquiry' => $inquiry,
]
);
$response['html'] = $html;
return new JsonResponse($response);
}
public function saveEntity(Request $request, FormInterface $form, $entity, $edit = false, $sourceInquiry = null)
{
$filesIds = $request->request->get('filesIds');
$suppliersAddressArray = [];
/** @var Inquiry $entity */
if(!is_null($request->request->get('choosedSuppliers')) && !$edit) {
foreach ($request->request->get('choosedSuppliers') as $suppliersAddress) {
$customerAddress = $this->customerAddressRepository->find($suppliersAddress);
$supplier = $this->customerRepository->findByCustomerAddress($customerAddress);
foreach ($supplier as $s) {
$suppliersAddressArray[] = $customerAddress;
$entity->addChoosedSupplier($s);
}
}
}
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if($entity->getChoosedSuppliers()->count() == 0) {
$this->addFlash('error', 'Musisz wybrać przynajmniej jednego dostawcę części.');
return $form;
}
if($entity->getChoosedSuppliers()->count() > 3) {
$this->addFlash('error', 'Uwaga! Możesz wybrać maksymalnie 3 dostawców danej marki do których wyślesz swoje zapytanie.');
return $form;
}
// if (null !== $entity->getVinPhoto()) {
// $vinFile = $this->inquiryService->createInquiryFileFromUploadedFile($entity, $entity->getVinPhoto(), 'imageVIN');
// $entity->setVinPhoto($vinFile);
// }
//
// if (null !== $entity->getEstimateFile()) {
// $estimateFile = $this->inquiryService->createInquiryFileFromUploadedFile($entity, $entity->getEstimateFile(), 'fileEstimate');
// $entity->setEstimateFile($estimateFile);
// }
// $inquiryFileArray = [];
// foreach ($entity->getInquiryFiles() as $inquiryUploadedFile) {
// $inquiryFileArray[] = $this->inquiryService->createInquiryFileFromUploadedFile($entity, $inquiryUploadedFile, 'file');
// }
// $entity->setInquiryFiles(new ArrayCollection($inquiryFileArray));
$pathForInquiryFiles = $_SERVER['DOCUMENT_ROOT'] . '/upload/' . $entity->getFileUploadId();
$files = glob($pathForInquiryFiles . '/*.*');
$inquiryFileArray = [];
if($edit) {
$filesForInquiry = $this->getDoctrine()->getRepository(InquiryFile::class)->findBy(['inquiry' => $entity->getId()]);
if(!empty($filesForInquiry)) {
/** @var InquiryFile $item */
foreach ($filesForInquiry as $item) {
$item->setInquiry($entity);
$inquiryFileArray[] = $item;
}
}
}
$googleStorageService = new GoogleStorageService(
$this->getParameter('file_upload_google_storage_key_file_location'),
$this->getParameter('file_upload_google_storage_project_id'),
$this->getParameter('file_upload_google_storage_bucket_name'),
$this->getParameter('file_upload_google_storage_bucket_location')
);
foreach ($files as $file) {
$fileContent = file_get_contents($file);
$extension = pathinfo($file, PATHINFO_EXTENSION);
$newFilename = uniqid('upload.', true) . '.' . $extension;
$mimeType = mime_content_type($file);
$fileType = (strpos($mimeType, 'image/') !== false) ? 'image' : 'file';
$inquiryFile = new InquiryFile();
$inquiryFile->setInquiry($entity);
$inquiryFile->setFileKind('file');
$inquiryFile->setFileType($fileType);
$inquiryFile->setFilePath($newFilename);
$inquiryFile->setOriginalFileName(basename($file));
$inquiryFile->setMimeType($mimeType);
$inquiryFile = $googleStorageService->saveFileWithMiniaturesToFilesystem($inquiryFile, $fileContent);
unlink($file);
$inquiryFileArray[] = $inquiryFile;
}
@rmdir($pathForInquiryFiles);
// foreach ($files as $file) {
//
// $extension = pathinfo($file, PATHINFO_EXTENSION);
// $newFilename = uniqid('upload.', true) . '.' . $extension;
// $mimeType = mime_content_type($file);
// $fileType = (strpos($mimeType, 'image/') !== false) ? 'image' : 'file';
//
// rename($file, $_SERVER['DOCUMENT_ROOT'] . '/upload/' . $newFilename);
//
// $inquiryFile = new InquiryFile();
// $inquiryFile->setInquiry($entity);
// $inquiryFile->setFileKind('file');
// $inquiryFile->setFileType($fileType);
// $inquiryFile->setFilePath('upload/' . $newFilename);
// $inquiryFile->setOriginalFileName(basename($file));
// $inquiryFile->setMimeType($mimeType);
//
// $inquiryFileArray[] = $inquiryFile;
// }
if ($sourceInquiry !== null) {
$fileRepository = $this->getDoctrine()->getRepository(InquiryFile::class);
$filesIds = trim($filesIds);
$filesIds = explode(',', $filesIds);
foreach ($filesIds as $fileId) {
$fileId = trim($fileId);
/** @var InquiryFile $file */
$file = $fileRepository->find($fileId);
if ($file !== null) {
$fileClone = clone $file;
$fileClone->setId(null);
$fileClone->setInquiry($entity);
$inquiryFileArray[] = $fileClone;
}
}
}
$entity->setInquiryFiles(new ArrayCollection($inquiryFileArray));
/** @var Customer $customer */
$customer = $this->get('security.token_storage')->getToken()->getUser();
$entity->setRecipient($customer);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($entity);
$customer->setLastInquiryDate(new DateTime());
$entityManager->persist($customer);
$entityManager->flush();
$suppliersArray = [
'entity' => $entity,
'suppliers' => $suppliersAddressArray
];
$this->addInquirySuppliers($suppliersArray);
return $this->redirectToRoute($this->getConfiguration()['routings']['index']);
} else {
return $form;
}
}
private function addInquirySuppliers($inquiryData)
{
/**
* @var CustomerAddress $addr
*/
$em = $this->getDoctrine()->getManager();
$inquiry = $inquiryData['entity'];
if(!is_null($inquiryData['suppliers'])) {
foreach ($inquiryData['suppliers'] as $addr) {
$check = $this->inquirySupplierRepository->findOneBy([
'inquiry' => $inquiry,
'customer' => $addr->getCustomer(),
'customerAddress' => $addr
]);
if(!$check) {
$inquirySupplier = new InquirySupplier();
$inquirySupplier->setInquiry($inquiry);
$inquirySupplier->setCustomer($addr->getCustomer());
$inquirySupplier->setCustomerAddress($addr);
$inquirySupplier->setSeen(false);
$em->persist($inquirySupplier);
}
}
$em->flush();
}
}
public function uploadFile(Request $request)
{
$files = $this->inquiryService->uploadTemporaryFiles($_FILES, $request->attributes->get('id'));
return new JsonResponse([
'file' => $_FILES['inquiry'],
'width' => $files['width'],
'height' => $files['height']
]);
}
public function deleteFile(Request $request)
{
return $this->inquiryService->deleteTemporaryFile($request->request->get('file'), $request->request->get('id'));
}
public function deleteUploadedFile(Request $request)
{
$file = $this->inquiryFileRepository->find($request->request->get('id'));
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($file);
$entityManager->flush();
return new JsonResponse(['message' => 'Usunięto plik '. $file->getOriginalFileName(), 'status' => 'success'], 200);
}
public function finishNow(Request $request) : Response
{
/** @var Customer $customer */
$customer = $this->get('security.token_storage')->getToken()->getUser();
$inquiry = $this->entityRepository->find($request->request->get('entityId'));
if ($customer->getIsRecipient()) {
if ($customer->getId() !== $inquiry->getRecipient()->getId()) {
$response['status'] = 'ERROR';
$response['message'] = $this->getTranslator()->trans('inquiry.messages.you_cannot_finish_not_yours_inquiry');
return new JsonResponse($response);
}
}
try {
$inquiry->setExpirationDate(new DateTime());
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($inquiry);
$entityManager->flush();
$response['status'] = 'OK';
} catch (Exception $e) {
$response['status'] = 'ERROR';
if ($_SERVER['APP_ENV'] == 'dev') {
$response['message'] = $e->getMessage();
}
}
return new JsonResponse($response);
}
public function archive(Request $request) : Response
{
/** @var Customer $customer */
$customer = $this->get('security.token_storage')->getToken()->getUser();
/** @var Inquiry $inquiry */
$inquiry = $this->entityRepository->find($request->request->get('entityId'));
if($inquiry->getArchived()) {
$response['status'] = 'ERROR';
$response['message'] = $this->getTranslator()->trans('inquiry.messages.isArchived');
return new JsonResponse($response);
}
if ($customer->getIsRecipient()) {
if ($customer->getId() !== $inquiry->getRecipient()->getId()) {
$response['status'] = 'ERROR';
$response['message'] = $this->getTranslator()->trans('inquiry.messages.you_cannot_archive_not_yours_inquiry');
return new JsonResponse($response);
}
}
try {
$inquiry->setArchived(true);
$inquiry->setExpirationDate(new DateTime());
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($inquiry);
$entityManager->flush();
$response['status'] = 'OK';
} catch (Exception $e) {
$response['status'] = 'ERROR';
if ($_SERVER['APP_ENV'] == 'dev') {
$response['message'] = $e->getMessage();
}
}
return new JsonResponse($response);
}
public function edit(Request $request) : Response
{
$sourceInquiryid = $request->attributes->get('sourceInquiryId');
$sourceInquiry = null;
if ($sourceInquiryid !== null) {
$sourceInquiry = $this->entityRepository->find($sourceInquiryid);
}
$edit = false;
/** @var Customer $loggedUser */
$loggedUser = $this->get('security.token_storage')->getToken()->getUser();
if ($loggedUser->isAvoidUserForCreateNewInquiries()) {
return new RedirectResponse('/');
}
$customerAddress = $loggedUser->getAddresses()->get(0);
$loggedAddressForGoogleMaps = null;
if ($customerAddress !== null) {
$loggedAddressForGoogleMaps = $customerAddress->getCity() . '+' . $customerAddress->getStreet() . '+' . $customerAddress->getPropertyNumber();
}
if (null !== $request->attributes->get('id')) {
$edit = true;
/** @var ExtendedEntity $entity */
$entity = $this->entityRepository->find($request->attributes->get('id'));
$usingExtendedEntityTrait = in_array(
ExtendedEntity::class,
array_keys((new ReflectionClass(get_class($entity)))->getTraits())
);
if ($usingExtendedEntityTrait) {
$entity->setUpdatedAt(new DateTime());
if ($loggedUser instanceof User) {
$entity->setUpdatedBy($loggedUser);
}
}
} else {
$entityClass = $this->getConfiguration()['classes']['entity'];
/** @var ExtendedEntity $entity */
$entity = new $entityClass();
$usingExtendedEntityTrait = in_array(
ExtendedEntity::class,
array_keys((new ReflectionClass(get_class($entity)))->getTraits())
);
if ($usingExtendedEntityTrait) {
$entity->setCreatedAt(new DateTime());
if ($loggedUser instanceof User ) {
$entity->setCreatedBy($loggedUser);
}
}
}
if ($request->request->get('inquiry') !== null) {
if (!isset($request->request->get('inquiry')['choosedSuppliers'])) {
$suppliersForMake = $this->customerRepository->findSuppliersForMake($request->request->get('inquiry')['make']);
$suppliersIds = [];
foreach ($suppliersForMake as $supplier) {
$suppliersIds[] = (string)$supplier->getId();
}
$inquiryData = $request->request->get('inquiry');
$inquiryData['choosedSuppliers'] = $suppliersIds;
$request->request->set('inquiry', $inquiryData);
} else {
$suppliersForMake = $this->customerRepository->findSuppliersForMake($request->request->get('inquiry')['make']);
}
}
$formClass = $this->getConfiguration()['classes']['form'];
$form = $this->createForm($formClass, $entity);
$form->add('submit', SubmitType::class, ['label' => 'common.save']);
/**
* @var Form $response
* @var Inquiry $entity
*/
$response = $this->saveEntity($request, $form, $entity, $edit, $sourceInquiry);
if ($response instanceof RedirectResponse) {
$fileName = '../var/log/inquiry_create_' . $entity->getId() . '.log';
file_put_contents($fileName, 'data zapisu: ' . date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND);
file_put_contents($fileName, 'marka, model, vin, rejestracja: ' . $entity->getMake()->getName() . ', ' . $entity->getModel() . ', ' . $entity->getVin() . ', ' . $entity->getRegistrationNumber() . PHP_EOL, FILE_APPEND);
file_put_contents($fileName, 'Kontrahenci przypisani do tej marki: '. PHP_EOL, FILE_APPEND);
foreach ($suppliersForMake as $supplierForMake) {
file_put_contents($fileName, ' - id ' . $supplierForMake->getId() . ' - ' . $supplierForMake->getCompanyName() . PHP_EOL, FILE_APPEND);
}
file_put_contents($fileName, 'Kontrahenci rzeczywiście przypisani do tego zapytania: '. PHP_EOL, FILE_APPEND);
foreach ($entity->getChoosedSuppliers() as $choosedSupplier) {
file_put_contents($fileName, ' - id ' . $choosedSupplier->getId() . ' - ' . $choosedSupplier->getCompanyName() . PHP_EOL, FILE_APPEND);
}
if (!$entity->getChoosedSuppliers()->isEmpty() && $edit == false) {
/** @var RouterInterface $router */
$router = $this->get('router');
$notificationContent = 'inquiry.mail.newInquiry';
/** @var Inquiry $entity */
$content = $this->getTwig()->render(
'Email/newInquiry.html.twig',
[
'inquiryLink' => $router->generate('client_inquiry_details', ['id' => $entity->getId()], RouterInterface::ABSOLUTE_URL),
'inquiry' => $entity
]
);
/** @var Customer $supplier */
foreach ($entity->getChoosedSuppliers() as $supplier) {
if ($supplier->isNotificationsInquiryNotification()) {
$this->notificationService->createNotification($notificationContent, $supplier, $entity->getRecipient(), Notification::NOTIFICATION_TYPE_INQUIRY, $entity->getId());
file_put_contents($fileName, 'Powiadomienie zostało przypisane do dostawcy' . PHP_EOL, FILE_APPEND);
}
if ($supplier->isNotificationsInquiryMail()) {
$this->emailService->send(
[$supplier->getUsername()],
$this->getTranslator()->trans('defaultContent.mail.subject') . ' ' . $entity->getMake() . ' ' . $entity->getModel() . ' ' . $entity->getRegistrationNumber(),
$content
);
file_put_contents($fileName, 'Mail został wysłany do dostawcy' . PHP_EOL, FILE_APPEND);
}
}
}
$this->addFlash('success', 'Zapytanie zostało wysłane');
return $response;
} else {
$choosedSuppliers = $this->customerRepository->findSuppliersWithAddresses();
$inquirySuppliers = [];
foreach ($entity->getChoosedSuppliers() as $inquirySupplier) {
$inquirySuppliers[$inquirySupplier->getId()] = $inquirySupplier->getId();
}
$entityManager = $this->getDoctrine()->getManager();
foreach ($entity->getInquiryFiles() as $inquiryFile) {
if (($inquiryFile->getWidth() === null) && (strpos($inquiryFile->getMimeType(), 'image') !== false)) {
$imageData = getimagesize($inquiryFile->getFilePath());
$inquiryFile->setWidth($imageData[0]);
$inquiryFile->setHeight($imageData[1]);
$entityManager->persist($inquiryFile);
}
}
$entityManager->flush();
$ratiosForCustomers = [];
$customersWithIds = [];
/** @var Customer $choosedSupplier */
foreach ($choosedSuppliers as $choosedSupplier) {
$ratiosForCustomers[$choosedSupplier->getId()] = $this->inquiryService->calculateRatioForCustomer($choosedSupplier);
$customersWithIds[$choosedSupplier->getId()] = $choosedSupplier;
}
$sortedSuppliers = [];
arsort($ratiosForCustomers);
foreach ($ratiosForCustomers as $customerId => $ratio) {
$sortedSuppliers[] = $customersWithIds[$customerId];
}
$googleStorageService = new GoogleStorageService(
$this->getParameter('file_upload_google_storage_key_file_location'),
$this->getParameter('file_upload_google_storage_project_id'),
$this->getParameter('file_upload_google_storage_bucket_name'),
$this->getParameter('file_upload_google_storage_bucket_location')
);
$miniatureFiles = [];
$entityManager = $this->getEntityManager();
foreach ($entity->getInquiryFiles() as $inquiryFile) {
if ($inquiryFile->getFileType() == 'image') {
$miniatureFile = new InquiryFile();
$filePath = pathinfo($inquiryFile->getFilePath(), PATHINFO_DIRNAME);
$filename = pathinfo($inquiryFile->getFilePath(), PATHINFO_FILENAME);
$extension = pathinfo($inquiryFile->getFilePath(), PATHINFO_EXTENSION);
$miniatureFilePath = $filePath . DIRECTORY_SEPARATOR . $filename . '_100x100.' . $extension ;
$miniatureFile->setFilePath($miniatureFilePath);
[$url, $validityTime] = $googleStorageService->createGoogleStorageFileUrl($miniatureFile);
$miniatureFiles[$inquiryFile->getId()]['100x100']['url'] = $url;
}
[$url, $validityTime] = $googleStorageService->createGoogleStorageFileUrl($inquiryFile);
$inquiryFile->setUrl($url);
$inquiryFile->setUrlValidityDate($validityTime);
$entityManager->persist($inquiryFile);
}
$entityManager->flush();
return new Response(
$this->getTwig()->render(
$this->getConfiguration()['templates']['edit'],
[
'form' => $response->createView(),
'customer' => $loggedUser,
'choosedSuppliers' => $sortedSuppliers,
'inquirySuppliers' => $inquirySuppliers,
'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
'isAdditional' => ($request->attributes->get('id') === null),
'miniatureFiles' => $miniatureFiles,
]
)
);
}
}
public function sendMailPartsOrdered(Request $request)
{
/** @var Offer $offer */
$offer = $this->offerRepository->find($request->request->get('offerId'));
$content = $this->getTwig()->render(
'Email/orderConfirmation.html.twig',
[
'supplier' => $offer->getSupplier(),
'offer' => $offer
]
);
if ($offer->getInquiry()->getRecipient()->isNotificationsOfferNotification()) {
$this->notificationService->createNotification('defaultContent.mail.orderConfirmation', $offer->getInquiry()->getRecipient(), $offer->getSupplier(), Notification::NOTIFICATION_TYPE_OFFER, $offer->getId());
}
if ($offer->getInquiry()->getRecipient()->isNotificationsOfferMail()) {
$this->emailService->send(
[$offer->getInquiry()->getRecipient()->getUsername()],
$this->getTranslator()->trans('defaultContent.mail.subject') . ' ' . $offer->getInquiry()->getMake() . ' ' .
$offer->getInquiry()->getModel() . ' ' . $offer->getInquiry()->getRegistrationNumber() . ' ' .
$this->getTranslator()->trans('defaultContent.mail.orderConfirmation'),
$content
);
}
$offer->setPartsOrdered(true);
$offer->setOrderedDate(new DateTime());
$discussion = new InquiryDiscussionEntry();
$discussion
->setInquiry($offer->getInquiry())
->setContent($this->getTranslator()->trans('defaultContent.mail.orderConfirmationContent'))
->setAuthor($offer->getSupplier())
->setCreatedAt(new DateTime());
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($offer);
$entityManager->persist($discussion);
$entityManager->flush();
$response['status'] = 'OK';
return new JsonResponse($response);
}
public function sendMailPartsSended(Request $request)
{
/** @var Offer $offer */
$offer = $this->offerRepository->find($request->request->get('offerId'));
$content = $this->getTwig()->render(
'Email/sendConfirmation.html.twig',
[
'supplier' => $offer->getSupplier()
]
);
if ($offer->getInquiry()->getRecipient()->isNotificationsOfferNotification()) {
$this->notificationService->createNotification('defaultContent.mail.sendConfirmation', $offer->getInquiry()->getRecipient(), $offer->getSupplier(), Notification::NOTIFICATION_TYPE_OFFER, $offer->getId());
}
$offer->setPartsSended(true);
$offer->setSendDate(new DateTime());
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($offer);
$entityManager->flush();
if ($offer->getInquiry()->getRecipient()->isNotificationsOfferMail()) {
$this->emailService->send(
[$offer->getInquiry()->getRecipient()->getUsername()],
$this->getTranslator()->trans('defaultContent.mail.subject') . ' ' . $offer->getInquiry()->getMake() . ' ' .
$offer->getInquiry()->getModel() . ' ' . $offer->getInquiry()->getRegistrationNumber() . ' ' .
$this->getTranslator()->trans('defaultContent.mail.sendConfirmationContent'),
$content
);
}
$response['status'] = 'OK';
return new JsonResponse($response);
}
private function prepareDiscussionEntries(Customer $customer, Inquiry $inquiry) : array
{
$discussionEntriesWithoutRecipientCount = 0;
foreach ($inquiry->getInquiryDiscussionEntries() as $discussionEntry) {
if ($discussionEntry->getRecipient() === null) $discussionEntriesWithoutRecipientCount++;
}
$discussionEntries = [];
if ($discussionEntriesWithoutRecipientCount > 0) {
$discussionEntries[0]['recipientNameName'] = $inquiry->getRecipient()->getCompanyName();
$discussionEntries[0]['supplierName'] = 'Wszyscy';
$discussionEntries[0]['entries'] = [];
}
$loggedCustomerIsSupplier = false;
foreach ($inquiry->getInquirySuppliers() as $inquirySupplier) {
$discussionEntries[$inquirySupplier->getCustomer()->getId()]['recipientNameName'] = $inquiry->getRecipient()->getCompanyName();
$discussionEntries[$inquirySupplier->getCustomer()->getId()]['supplierName'] = $inquirySupplier->getCustomer()->getCompanyName();
$discussionEntries[$inquirySupplier->getCustomer()->getId()]['entries'] = [];
if ($inquirySupplier->getCustomer()->getId() == $customer->getId()) {
$loggedCustomerIsSupplier = true;
}
}
/** @var InquiryDiscussionEntry $discussionEntry */
foreach ($inquiry->getInquiryDiscussionEntries() as $discussionEntry) {
if (!$loggedCustomerIsSupplier) {
//zalogowany jest odbiorca dla danego zapytania
if ($customer->getId() == $discussionEntry->getAuthor()->getId()) {
//autorem wiadomości jest odbiorca
if ($discussionEntry->getRecipient() === null) {
//stara wiadomość bez odbiorcy, czyli do wszystkich
$id = 0;
} else {
//wiadomość z odbiorcą
$id = $discussionEntry->getRecipient()->getId();
}
} else {
//autorem wiadomości jest dostawca
if ($discussionEntry->getRecipient() === null) {
$id = 0;
} else {
$id = $discussionEntry->getAuthor()->getId();
}
}
} else {
//zalogowany jest dostawca dla danego zapytania
if ($customer->getId() == $discussionEntry->getAuthor()->getId()) {
//autorem wiadomości jest dostawca
if ($discussionEntry->getRecipient() === null) {
//stara wiadomość bez odbiorcy, czyli do wszystkich
$id = 0;
} else {
//wiadomość z odbiorcą
$id = $discussionEntry->getAuthor()->getId();
}
} else {
//autorem wiadomości jest odbiorca
if ($discussionEntry->getRecipient() === null) {
//stara wiadomość bez odbiorcy, czyli do wszystkich
$id = 0;
} else {
//wiadomość z odbiorcą
$id = $discussionEntry->getRecipient()->getId();
}
}
}
if (isset($discussionEntries[$id])) {
$discussionEntries[$id]['entries'][] = $discussionEntry;
}
}
return [$discussionEntries, $loggedCustomerIsSupplier];
}
public function showPrivateMessageListModal(Request $request)
{
$offer = $this->offerRepository->find($request->request->get('offerId'));
$notificationRepository = $this->getDoctrine()->getRepository(Notification::class);
$formNewMessage = $this->createForm(PrivateMessageType::class, new PrivateMessage(), ['inquiryId' => null, 'parentId' => null]);
$formNewMessage->add('submit', SubmitType::class, [
'label' => 'common.send',
'attr' => [
'class' => 'btn-lg btn-primary'
]
]);
$privateMessages = $this->getDoctrine()->getRepository(PrivateMessage::class)->getPrivateMessagesForOffer($offer);
$privateMessageIds = [];
/** @var PrivateMessage $privateMessage */
foreach ($privateMessages as $privateMessage) {
$privateMessageIds[$privateMessage->getId()] = $privateMessage;
}
$notificationsForMessages = $notificationRepository->findBy(['entityType' => 'offer', 'entityId' => $offer->getId(), 'contentId' => $privateMessageIds]);
$notificationsForMessagesArray = [];
foreach ($notificationsForMessages as $notificationsForMessage) {
$notificationsForMessagesArray[$notificationsForMessage->getContentId()] = $notificationsForMessage;
}
$entityManager = $this->getDoctrine()->getManager();
foreach ($privateMessages as $privateMessage) {
/** @var PrivateMessageAttachment $attachmentFile */
foreach ($privateMessage->getAttachmentFiles() as $attachmentFile) {
if (($attachmentFile->getWidth() === null) && (strpos($attachmentFile->getMimeType(), 'image') !== false)) {
$imageData = getimagesize($attachmentFile->getFilePath());
$attachmentFile->setWidth($imageData[0]);
$attachmentFile->setHeight($imageData[1]);
$entityManager->persist($attachmentFile);
}
}
}
$entityManager->flush();
$html = $this->getTwig()->render(
'ClientOffer/privateMessageModalContent.html.twig',
[
'offer' => $offer,
'privateMessages' => $privateMessages,
'formNewMessage' => $formNewMessage->createView(),
'notificationsForMessages' => $notificationsForMessagesArray,
]
);
$response['status'] = 'OK';
$response['title'] = 'Wiadomości prywatne';
$response['offerId'] = $offer->getId();
$response['html'] = $html;
return new JsonResponse($response);
}
public function showDiscussionListModal(Request $request)
{
/** @var Customer $customer */
$customer = $this->get('security.token_storage')->getToken()->getUser();
/** @var Inquiry $inquiry */
$inquiry = $this->entityRepository->find($request->request->get('inquiryId'));
$makeIds = [];
/** @var Make $make */
foreach ($customer->getMakes()->toArray() as $make) {
$makeIds[$make->getId()] = $make->getId() ;
}
if ($customer->getIsRecipient() && !$customer->getIsSupplier()) {
if ($customer->getId() !== $inquiry->getRecipient()->getId()) {
return $this->getTranslator()->trans('inquiry.messages.you_cannot_see_not_yours_inquiry');
}
} elseif ($customer->getIsSupplier()) {
/** @var Inquiry $inquiry */
if ((!in_array($inquiry->getMake()->getId(), $makeIds)) && ($inquiry->getRecipient()->getId() != $customer->getId())) {
return $this->getTranslator()->trans('inquiry.messages.you_cannot_see_inquiry_for_not_your_makes');
}
}
[$discussionEntries, $loggedCustomerIsSupplier] = $this->prepareDiscussionEntries($customer, $inquiry);
$html =
$this->getTwig()->render(
$this->getConfiguration()['templates']['discussionEntries'],
[
'inquiry' => $inquiry,
'discussionEntries' => $discussionEntries,
'loggedCustomerIsSupplier' => $loggedCustomerIsSupplier,
'unreadInquiry' => $this->getUnreadInquiryDiscussionEntries($inquiry->getId()),
'loggerCustomer' => $customer
]
);
$response['status'] = 'OK';
$response['html'] = '<div class="col-sm-12" id="inquiry-discussion-entries">' . $html . '</div>';
$response['title'] = 'Dyskusja: ' . $inquiry->getMake() . ' ' .$inquiry->getModel();
$response['suppliersIds'] = array_keys($discussionEntries);
return new JsonResponse($response);
}
public function getConfiguration()
{
return [
'templates' => [
'index' => 'ClientInquiry/index.html.twig',
'edit' => 'ClientInquiry/edit.html.twig',
'show' => 'ClientInquiry/show.html.twig',
'discussionEntries' => 'ClientInquiry/discussionEntries.html.twig',
'newOffer' => 'ClientInquiry/newOffer.html.twig'
],
'routings' => [
'index' => 'client_inquiry_active',
'inquiryDetails' => 'client_inquiry_details'
],
'classes' => [
'entity' => Inquiry::class,
'form' => InquiryType::class
]
];
}
public function setDefaultAddress(Request $request)
{
$entityManager = $this->getDoctrine()->getManager();
$customer = $this->get('security.token_storage')->getToken()->getUser();
$defaultCustomerAddress = $this->customerAddressRepository->find($request->request->get('addressId'));
if ($defaultCustomerAddress->getCustomer()->getId() == $customer->getId()) {
$customerAddresses = $this->customerAddressRepository->findBy(['customer' => $customer->getId()]);
foreach ($customerAddresses as $customerAddress) {
$customerAddress->setDefaultAddress(false);
$entityManager->persist($customerAddress);
}
$entityManager->flush();
$defaultCustomerAddress->setDefaultAddress(true);
$entityManager->persist($defaultCustomerAddress);
$entityManager->flush();
$response['status'] = 'OK';
$response['addressId'] = $request->request->get('addressId');
} else {
$response['status'] = 'ERROR';
$response['message'] = 'Nie możesz zmienić na domyślny nie swojego adresu';
}
return new JsonResponse($response);
}
public function setDefaultContactPerson(Request $request)
{
$entityManager = $this->getDoctrine()->getManager();
$customer = $this->get('security.token_storage')->getToken()->getUser();
/** @var ContactPerson $defaultContactPerson */
$defaultContactPerson = $this->contactPersonRepository->find($request->request->get('contactPersonId'));
if ($defaultContactPerson->getCustomer()->getId() == $customer->getId()) {
$contactPersons = $this->contactPersonRepository->findBy(['customer' => $customer->getId()]);
foreach ($contactPersons as $contactPerson) {
$contactPerson->setDefaultPerson(false);
$entityManager->persist($contactPerson);
}
$entityManager->flush();
$defaultContactPerson->setDefaultPerson(true);
$defaultContactPerson->setActive(true);
$entityManager->persist($defaultContactPerson);
$entityManager->flush();
$response['status'] = 'OK';
$response['contactPersonId'] = $request->request->get('contactPersonId');
} else {
$response['status'] = 'ERROR';
$response['message'] = 'Nie możesz zmienić na domyślny nie swojej osoby kontaktowej';
}
return new JsonResponse($response);
}
public function getSuppliersForMake(Request $request)
{
/** @var Customer $customer */
$customer = $this->tokenStorage->getToken()->getUser();
$customersMakesIds = [];
foreach($customer->getMakes() as $make) {
$customersMakesIds[$make->getId()] = $make->getId();
}
// dump(in_array($request->request->get('makeId'), $customersMakesIds));
// dump($customer->getIsSupplier());
// dump($customer->getIsRecipient());
// dump(!$customer->isCanSeeOtherSuppliersOfHisMakes());
// die;
if (
in_array($request->request->get('makeId'), $customersMakesIds) &&
$customer->getIsSupplier() &&
$customer->getIsRecipient() &&
!$customer->isCanSeeOtherSuppliersOfHisMakes()
) {
$response['status'] = 'CANT_SEE_SUPPLIERS';
return new JsonResponse($response);
}
$suppliers = $this->customerRepository->findSuppliersForMake($request->request->get('makeId'));
$response['status'] = 'OK';
foreach ($suppliers as $supplier) {
$response['suppliers'][$supplier->getId()] = $supplier->getId();
}
return new JsonResponse($response);
}
private function checkBestOffer(Offer $offer)
{
$lowestPrice = 99999999999;
foreach ($offer->getInquiry()->getOffers() as $offerLoop) {
$lowestPrice = min($lowestPrice, $offerLoop->getTotalPrice());
}
if($offer->getTotalPrice() == $lowestPrice) {
foreach ($offer->getInquiry()->getOffers() as $offerForNotify)
{
if ($offerForNotify->getId() != $offer->getId())
{
if ($offerForNotify->getSupplier()->isNotificationsInquiryNotification() && $offerForNotify->getSupplier()->isCanGetNotificationsAboutBetterOffer()) {
$this->notificationService->createNotification('offer.messages.newBestOffer', $offerForNotify->getSupplier(), $offer->getSupplier(), Notification::NOTIFICATION_TYPE_INQUIRY, $offerForNotify->getInquiry()->getId());
}
}
}
}
}
public function ajaxPartStatus(Request $request, $id)
{
$entityManager = $this->getDoctrine()->getManager();
/**
* @var Customer $customer
*/
$customer = $this->get('security.token_storage')->getToken()->getUser();
/**
* @var Inquiry $inquiry
*/
$inquiry = $this->getDoctrine()->getRepository(Inquiry::class)->find($id);
if(!$inquiry){
return new JsonResponse(['status' => 'error', 'message' => 'Nie ma takiego zapytania ofertowego'], 500);
}
if($customer->getId() != $inquiry->getRecipient()->getId() && $customer->getIsRecipient()) {
return new JsonResponse([
'status' => 'error',
'message' => 'Nie jesteś kupującym dla tego zapytania ofertowego.'
], 500);
}
$partsIssued = $request->get('partsIssued');
$partsReceived = $request->get('partsReceived');
if ($partsIssued == "true") {
$inquiry->setIsPartsIssued(true);
$inquiry->setPartsIssuedDate(new DateTime());
} else {
$inquiry->setIsPartsIssued(false);
$inquiry->setPartsIssuedDate(null);
}
if ($partsReceived == "true") {
$inquiry->setIsPartsReceived(true);
$inquiry->setPartsReceivedDate(new DateTime());
} else {
$inquiry->setIsPartsReceived(false);
$inquiry->setPartsReceivedDate(null);
}
$entityManager->persist($inquiry);
$entityManager->flush();
return new JsonResponse([
'status' => 'success',
'message' => 'Zmieniono status części.',
'partsIssued' => $partsIssued,
'partsReceived' => $partsReceived
], 200);
}
public function getUnreadInquiryDiscussionEntries($id = null)
{
$messages = $this->inquiryDiscussionEntryRepository->getInquiryDiscussionEntries($id);
return [
'messages' => $messages
];
}
public function getUnreadInquiryPrivateMessages()
{
$customer = $this->get('security.token_storage')->getToken()->getUser();
$privateMessages = $this->privateMessageRepository->getUnreadPrivateMessagesForOffers($customer);
return [
'privateMessages' => $privateMessages
];
}
public function getLastPrivateMessages($inqiries)
{
$customer = $this->get('security.token_storage')->getToken()->getUser();
return $this->privateMessageRepository->getLastPrivateMessagesForOffers($customer, $inqiries);
}
public function sendReminderToSupplier(Request $request) : JsonResponse
{
/** @var Inquiry $inquiry */
$inquiry = $this->entityRepository->find($request->request->get('inquiryId'));
/** @var Customer $supplier */
$supplier = $this->customerRepository->find($request->request->get('supplierId'));
/** @var InquirySupplier $inquirySupplier */
$inquirySupplier = $this->inquirySupplierRepository->find($request->request->get('inquirySupplierId'));
/** @var DateTime $expirationDate */
$expirationDate = $inquiry->getExpirationDate();
$currentDate = new DateTime();
if ($expirationDate < $currentDate) {
$expirationDate = new DateTime();
}
$expirationDate->modify('+3 hours');
$inquiry->setExpirationDate($expirationDate);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($inquiry);
$inquirySupplier->setReminderSent(true);
$entityManager->persist($inquirySupplier);
$entityManager->flush();
$inquiryLink = $this->router->generate('client_inquiry_details', ['id' => $inquiry->getId()], RouterInterface::ABSOLUTE_URL);
$content = 'Przypominamy o zapytaniu ofertowym dotyczącym samochodu ' . $inquiry->getMake() . ' ' . $inquiry->getModel() . ' ' .
$inquiry->getRegistrationNumber() . '<br/>' .
'<a href="' . $inquiryLink . '">Przejdź do zapytania</a>'
;
$this->emailService->send(
[$supplier->getUsername()],
'CZĘŚCI DLA SERWISU - przypomnienie o zapytaniu: ' . $inquiry->getMake() . ' ' . $inquiry->getModel(),
$content
);
return new JsonResponse(['status' => 'OK']);
}
public function updateSupplierAddressRoutes(Request $request) : JsonResponse
{
$customerAddress = $this->customerAddressRepository->find($request->request->get('addressId'));
$loggedAddressForGoogleMaps = $customerAddress->getCity() . '+' . $customerAddress->getStreet() . '+' . $customerAddress->getPropertyNumber();
$addressArray = [];
$suppliers = $this->customerRepository->findSuppliersWithAddresses();
/** @var Customer $supplier */
foreach ($suppliers as $supplier) {
/** @var CustomerAddress $address */
foreach ($supplier->getAddresses() as $customerAddress) {
if ($customerAddress->isDefaultAddress()) {
$addressArray[$supplier->getId()] = $this->getTwig()->render(
'ClientInquiry/showRouteButton.html.twig',
[
'address' => $customerAddress,
'loggedAddressForGoogleMaps' => $loggedAddressForGoogleMaps,
]
);;
}
}
}
return new JsonResponse($addressArray);
}
public function unarchive(Request $request) : Response
{
/** @var Customer $customer */
$customer = $this->get('security.token_storage')->getToken()->getUser();
/** @var Inquiry $inquiry */
$inquiry = $this->entityRepository->find($request->request->get('entityId'));
if(!$inquiry->getArchived()) {
$response['status'] = 'ERROR';
$response['message'] = $this->getTranslator()->trans('inquiry.messages.notArchived');
return new JsonResponse($response);
}
if ($customer->getIsRecipient()) {
if ($customer->getId() !== $inquiry->getRecipient()->getId()) {
$response['status'] = 'ERROR';
$response['message'] = $this->getTranslator()->trans('inquiry.messages.you_cannot_unarchive_not_yours_inquiry');
return new JsonResponse($response);
}
}
try {
$inquiry->setArchived(false);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($inquiry);
$entityManager->flush();
$response['status'] = 'OK';
} catch (Exception $e) {
$response['status'] = 'ERROR';
if ($_SERVER['APP_ENV'] == 'dev') {
$response['message'] = $e->getMessage();
}
}
return new JsonResponse($response);
}
public function inquiryChangeStatus(Request $request) : JsonResponse
{
$inquiryId = $request->request->get('inquiryId');
$status = $request->request->get('status');
/** @var Inquiry $inquiry */
$inquiry = $this->entityRepository->find($inquiryId);
$inquiry->setBuyerStatus($status);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($inquiry);
$entityManager->flush();
return new JsonResponse(['status' => 'OK']);
}
public function inquiryChangeStatusSeller(Request $request) : JsonResponse
{
$inquiryId = $request->request->get('inquiryId');
$status = $request->request->get('status');
/** @var Inquiry $inquiry */
$inquiry = $this->entityRepository->find($inquiryId);
$inquiry->setSellerStatus($status);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($inquiry);
$entityManager->flush();
return new JsonResponse(['status' => 'OK']);
}
public function addTimeToInquiry(Request $request): JsonResponse
{
$inquiryId = $request->request->get('inquiryId');
/** @var Inquiry $inquiry */
$inquiry = $this->entityRepository->find($inquiryId);
/** @var DateTime $expirationData */
$expirationDate = $inquiry->getExpirationDate();
$expirationDate->modify('+3 hours');
$inquiry->setExpirationDate($expirationDate);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($inquiry);
$entityManager->flush();
return new JsonResponse(['status' => 'OK']);
}
public function getSupplierCard(Request $request) : JsonResponse
{
/** @var Customer $supplier */
$supplier = $this->customerRepository->find($request->request->get('supplierId'));
return new JsonResponse([
'content' => $supplier->getSupplierCard()
]);
}
public function checkInvoiceAddress(Request $request): JsonResponse
{
$invoiceAddressId = $request->request->get('invoiceAddress');
/** @var Customer $customer */
$customer = $this->get('security.token_storage')->getToken()->getUser();
if (($invoiceAddressId == '') || (!$customer->isIgp())) {
return new JsonResponse([
'status' => 'OK'
]);
}
$invoiceAddressRepository = $this->getDoctrine()->getRepository(CustomerInvoiceAddress::class);
$invoiceAddress = $invoiceAddressRepository->find($invoiceAddressId);
if ($customer->getNIP() == $invoiceAddress->getNip()) {
return new JsonResponse([
'status' => 'OK'
]);
} else {
$address = $invoiceAddress->getZipCode() . ' ' . $invoiceAddress->getCity() . ' ' . $invoiceAddress->getStreet() . ' ' . $invoiceAddress->getPropertyNumber();
if ($invoiceAddress->getApartmentNumber() != '') {
$address .= '/' . $invoiceAddress->getApartmentNumber();
}
return new JsonResponse([
'status' => 'CONFIRMATION',
'name' => $invoiceAddress->getName(),
'nip' => $invoiceAddress->getNip(),
'address' => $address,
]);
}
}
}