src/Controller/shop/ProductController.php line 794

  1. <?php
  2. namespace App\Controller\shop;
  3. use App\Classes\AppConfig;
  4. use App\Classes\Data\OrderPaymentData;
  5. use App\Classes\Data\OrderStatusData;
  6. use App\Classes\Data\StatusData;
  7. use App\Entity\Category;
  8. use App\Entity\City;
  9. use App\Entity\Code;
  10. use App\Entity\Comment;
  11. use App\Entity\Image;
  12. use App\Entity\Order;
  13. use App\Entity\OrderProduct;
  14. use App\Entity\Ponuda;
  15. use App\Entity\Product;
  16. use App\Entity\User;
  17. use App\Entity\Visit;
  18. use App\Form\OrderFormCustomerType;
  19. use App\Service\UploadService;
  20. use DateTimeImmutable;
  21. use App\Service\MailService;
  22. use Doctrine\ORM\EntityManagerInterface;
  23. use Doctrine\Persistence\ManagerRegistry;
  24. use Knp\Snappy\Pdf;
  25. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  26. use Symfony\Component\Asset\Packages;
  27. use Symfony\Component\HttpFoundation\JsonResponse;
  28. use Symfony\Component\HttpFoundation\RedirectResponse;
  29. use Symfony\Component\HttpFoundation\Request;
  30. use Symfony\Component\HttpFoundation\Response;
  31. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  32. use Symfony\Component\Routing\Annotation\Route;
  33. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  34. use Symfony\Component\Routing\RouterInterface;
  35. #[Route('products')]
  36. class ProductController extends AbstractController {
  37.   private $knpSnappyPdf;
  38.   public function __construct(private readonly ManagerRegistry $em, private readonly UrlGeneratorInterface $routerPdf $knpSnappyPdf) {
  39.     $this->knpSnappyPdf $knpSnappyPdf;
  40.   }
  41.   #[Route('/cart'name'app_cart')]
  42.   public function cartList(SessionInterface $session): Response {
  43. //    if ($session->has('basketCheckout')) {
  44. //      $session->remove('basketCheckout');
  45. //    }
  46. //    if ($session->has('basketUkupnoPorez')) {
  47. //      $session->remove('basketUkupnoPorez');
  48. //    }
  49. //    if ($session->has('basketUkupnoPdv')) {
  50. //      $session->remove('basketUkupnoPdv');
  51. //    }
  52. //    if ($session->has('basket')) {
  53. //      $session->remove('basket');
  54. //    }
  55. //    if ($session->has('dostava')) {
  56. //      $session->remove('dostava');
  57. //    }
  58. //    if ($session->has('ukupnoProizvoda')) {
  59. //      $session->remove('ukupnoProizvoda');
  60. //    }
  61.     if ($this->isGranted('ROLE_USER')) {
  62.       if (!$this->isGranted('ROLE_EMPLOYEE')) {
  63.         return $this->redirect($this->generateUrl('app_home'));
  64.       }
  65.     }
  66.     $args = [];
  67.     if ($session->has('basket')) {
  68.       $productsBasket $session->get('basket');
  69.       $productDatas = [];
  70.       $korisnik $this->getUser();
  71.       $ukupanPdv 0;
  72.       $totalPdv 0;
  73.       $ukupnoProizvoda 0;
  74.       //test
  75.       $dostava 0;
  76.       foreach ($productsBasket as $product) {
  77.         $productData $this->em->getRepository(Product::class)->find(intval($product['pid']));
  78.         $porez $productData->getVat();
  79.         $popust $productData->isDiscount();
  80.         $pdv = ($productData->getPricePDV() * ($porez 100)) * $product['qty'];
  81.         $ukupnaCenaDinKrajnja $productData->getPricePDV() * $product['qty'];
  82.         $ukupanPdv $ukupanPdv $pdv;
  83.         $totalPdv $totalPdv $ukupnaCenaDinKrajnja;
  84.         $ukupnoProizvoda $ukupnoProizvoda $product['qty'];
  85.         $productDatas[] = [
  86.           'pid' => $product['pid'],
  87.           'qty' => $product['qty'],
  88.           'product' => $productData,
  89.           'cenaKomad' => $productData->getPricePDV(),
  90. //          'ukupnaCenaDin' => $ukupnaCenaDin,
  91. //          'ukupnaCenaDinOsnovna' => $ukupnaCenaDinOsnovna,
  92. //          'ukupnaCenaDinPopust' => $ukupnaCenaDinPopust,
  93.           'ukupnaCenaDinKrajnja' => $ukupnaCenaDinKrajnja,
  94.           'porez' => $porez,
  95.           'popust' => $popust,
  96.           'slika' => $productData->getMainImage()->getThumbnail100(),
  97.         ];
  98.       }
  99.       $args['basket'] = $productDatas;
  100.       $args['ukupanPorez'] = $ukupanPdv;
  101.       $args['ukupnoPdv'] = $totalPdv;
  102.       $args['ukupnoProizvoda'] = $ukupnoProizvoda;
  103.       $args['dostava'] = $dostava;
  104.       if ($session->has('basketCheckout')) {
  105.         $session->remove('basketCheckout');
  106.       }
  107.       $session->set('basketCheckout'$productDatas);
  108.       if ($session->has('basketUkupnoPorez')) {
  109.         $session->remove('basketUkupnoPorez');
  110.       }
  111.       $session->set('basketUkupnoPorez'$ukupanPdv);
  112.       if ($session->has('basketUkupnoPdv')) {
  113.         $session->remove('basketUkupnoPdv');
  114.       }
  115.       $session->set('basketUkupnoPdv'$totalPdv);
  116.       if ($session->has('ukupnoProizvoda')) {
  117.         $session->remove('ukupnoProizvoda');
  118.       }
  119.       $session->set('ukupnoProizvoda'$ukupnoProizvoda);
  120.       if ($session->has('dostava')) {
  121.         $session->remove('dostava');
  122.       }
  123.       $session->set('dostava'$dostava);
  124.       return $this->render('front/product/korpa.html.twig'$args);
  125.     }
  126.     return $this->render('front/product/korpa.html.twig'$args);
  127.   }
  128.   #[Route('/cart-code'name'app_cart_code')]
  129.   public function basketCode(Request $request): JsonResponse {
  130.     $code $request->query->get('code');
  131.     $promoCode $this->em->getRepository(Code::class)->findOneBy(['title' => $code'isSuspended' => false]);
  132.     if ($promoCode) {
  133.       return new JsonResponse(['success' => true'discount' => $promoCode->getValue(), 'name' => $promoCode->getTitle()]);
  134.     } else {
  135.       return new JsonResponse(['success' => false'message' => 'Kod je neispravan ili je istekao.']);
  136.     }
  137.   }
  138.   #[Route('/cart-add'name'app_cart_add')]
  139.   public function basketAdd(Request $requestSessionInterface $session): RedirectResponse|JsonResponse {
  140.     if ($this->isGranted('ROLE_USER')) {
  141.       if (!$this->isGranted('ROLE_EMPLOYEE')) {
  142.         return $this->redirect($this->generateUrl('app_home'));
  143.       }
  144.     }
  145.     $proizvod $session->get('basket', []);
  146.     $pid $request->get('pid');
  147.     $qty = (int)$request->get('quantity'1);
  148.     $found false;
  149.     // Prolazak kroz postojeće proizvode da se proveri da li pid već postoji
  150.     foreach ($proizvod as &$product) { // Koristimo referencu '&' za modifikaciju postojećeg niza
  151.       if ($product['pid'] == $pid) {
  152.         $product['qty'] += $qty// Uvećaj količinu
  153.         $found true;
  154.         break;
  155.       }
  156.     }
  157.     // Ako proizvod nije pronađen, dodaj ga u korpu
  158.     if (!$found) {
  159.       $proizvod[] = ['pid' => $pid'qty' => $qty];
  160.     }
  161.     // Sačuvaj ažuriranu korpu
  162.     $session->set('basket'$proizvod);
  163.     // Izračunaj ukupnu količinu proizvoda u korpi
  164.     $totalItems array_reduce($proizvod, function ($carry$item) {
  165.       return $carry $item['qty'];
  166.     }, 0);
  167.     return new JsonResponse([
  168.       'status' => 'success',
  169.       'message' => 'Proizvod je uspešno dodat!',
  170.       'totalItems' => $totalItems
  171.     ]);
  172. //    $proizvod = $session->get('basket', []);
  173. //    $pid = $request->get('pid');
  174. //    $qty = (int)$request->get('quantity', 1);
  175. //
  176. //    foreach ($proizvod as $product) {
  177. //      if ($product['pid'] == $pid) {
  178. //        return new JsonResponse(['status' => 'error', 'message' => 'Proizvod već postoji u korpi!']);
  179. //      }
  180. //    }
  181. //
  182. //    $proizvod[] = ['pid' => $pid, 'qty' => $qty];
  183. //    $session->set('basket', $proizvod);
  184. //
  185. //    // Calculate total items in the basket
  186. //    $totalItems = array_reduce($proizvod, function ($carry, $item) {
  187. //      return $carry + $item['qty'];
  188. //    }, 0);
  189. //
  190. //    return new JsonResponse(['status' => 'success', 'message' => 'Proizvod je uspešno dodat!', 'totalItems' => $totalItems]);
  191.   }
  192.   #[Route('/cart-count'name'app_cart_count')]
  193.   public function showCart(SessionInterface $session): JsonResponse {
  194.     $proizvod $session->get('basket', []);
  195.     $totalItems array_sum(array_column($proizvod'qty'));
  196.     return new JsonResponse(['totalItems' => $totalItems]);
  197.   }
  198.   #[Route('/cart-delete/{id}'name'app_cart_delete')]
  199.   public function basketDelete(int $idSessionInterface $session): Response {
  200.     if ($this->isGranted('ROLE_USER')) {
  201.       if (!$this->isGranted('ROLE_EMPLOYEE')) {
  202.         return $this->redirect($this->generateUrl('app_home'));
  203.       }
  204.     }
  205.     if ($session->has('basket')) {
  206.       $proizvod $session->get('basket');
  207.       foreach ($proizvod as $i => $product) {
  208.         if ($product['pid'] == $id) {
  209.           array_splice($proizvod$i1);
  210.           $session->set('basket'$proizvod);
  211.           return $this->redirectToRoute('app_cart');
  212.         }
  213.       }
  214.     }
  215.     return $this->redirectToRoute('app_cart');
  216.   }
  217.   #[Route('/cart-recalculate'name'app_cart_recalculate')]
  218.   public function basketPreracunRequest $requestSessionInterface $session): RedirectResponse|bool {
  219.     if ($this->isGranted('ROLE_USER')) {
  220.       if (!$this->isGranted('ROLE_EMPLOYEE')) {
  221.         return $this->redirect($this->generateUrl('app_home'));
  222.       }
  223.     }
  224.     if ($session->has('basket')) {
  225.       $data $request->request->all();
  226.       if (array_key_exists('pdf'$data)) {
  227.           unset($data['pdf']);
  228.       }
  229.       $session->remove('basket');
  230.       $proizvod = [];
  231.       foreach ($data as $pid => $qty) {
  232.         if (substr($pid05) == 'pQty_') {
  233.           $pid substr($pid5);
  234.           if ($qty != 0) {
  235.             $proizvod[] = ['pid' => $pid'qty' => $qty];
  236.           }
  237.         } else {
  238.           break;
  239.         }
  240.       }
  241.       $session->set('basket'$proizvod);
  242.       return $this->redirectToRoute('app_cart');
  243.     }
  244.     return false;
  245.   }
  246.   #[Route('/kasa'name'app_cart_kasa')]
  247.   public function checkout(Request $requestSessionInterface $sessionMailService $mailService): Response {
  248.     if ($this->isGranted('ROLE_USER')) {
  249.       if (!$this->isGranted('ROLE_EMPLOYEE')) {
  250.         return $this->redirect($this->generateUrl('app_home'));
  251.       }
  252.     }
  253.     if (!$session->has('ukupnoProizvoda')) {
  254.       return $this->redirect($this->generateUrl('app_shop_home'));
  255.     }
  256. //    $okUrl = $this->generateUrl('app_shop_home', [], UrlGeneratorInterface::ABSOLUTE_URL);
  257. //
  258. //    // Generisanje URL-a za neuspešan odgovor sa dodatnim parametrima
  259. //    $failUrl = $this->generateUrl('app_kontakt', ['OrderId' => 489], UrlGeneratorInterface::ABSOLUTE_URL);
  260. //
  261.     $args = [];
  262.     $order = new Order();
  263.     $korisnik $this->getUser();
  264.     if (!is_null($korisnik)) {
  265.       $order->setCreatedBy($korisnik);
  266.       $order->setMember($korisnik);
  267.       $order->setIme($korisnik->getIme());
  268.       $order->setPrezime($korisnik->getPrezime());
  269.       $order->setAdresa($korisnik->getAdresa());
  270.       $order->setGrad($korisnik->getGrad());
  271.       $order->setTelefon1($korisnik->getTelefon1());
  272.       $order->setEmail($korisnik->getEmail());
  273.     }
  274.     //test
  275.     $args['dostava'] = 0;
  276. //    $args['procenatPoreza'] = 20;
  277.     //
  278. //    $args['basket'] = $session->get('basketCheckout');
  279. //    $args['ukupnaCena'] = $session->get('basketUkupno');
  280. //    $args['ukupnaCenaPdv'] = $session->get('basketUkupnoPdv') + $args['dostava'];
  281. //    $args['ukupnoProizvoda'] = $session->get('ukupnoProizvoda');
  282.     $args['basket'] = $session->get('basketCheckout');
  283.     $args['ukupnoPorez'] = $session->get('basketUkupnoPorez');
  284.     $args['ukupnaCenaPdv'] = $session->get('basketUkupnoPdv');
  285.     $args['ukupnoProizvoda'] = $session->get('ukupnoProizvoda');
  286.     $order->setPriceTotalPDV($args['ukupnaCenaPdv'] + $args['dostava']);
  287.     $order->setPriceTotal($args['ukupnaCenaPdv']);
  288.     $form $this->createForm(OrderFormCustomerType::class, $order, ['action' => $this->generateUrl('app_cart_kasa'), 'method' => 'post']);
  289.     if ($request->isMethod('POST')) {
  290.       $form->handleRequest($request);
  291.       if ($request->request->get('fake_field') == '' && $request->request->get('dynamic_token') !== null) {
  292.         if ($form->isSubmitted() && $form->isValid()) {
  293.           foreach ($session->get('basketCheckout') as $product) {
  294.             $orderProduct = new OrderProduct();
  295.             $dbProduct $this->em->getRepository(Product::class)->find($product['pid']);
  296.             $orderProduct->setProduct($dbProduct);
  297.             $orderProduct->setTitle($dbProduct->getTitle());
  298.             $orderProduct->setKolicina($product['qty']);
  299.             $orderProduct->setPricePDV($product['cenaKomad']);
  300.             $orderProduct->setPriceTotalPDV($product['ukupnaCenaDinKrajnja']);
  301.             $orderProduct->setSku($dbProduct->getSku());
  302.             $order->addProduct($orderProduct);
  303.           }
  304.           $order->setPriceTotalWithoutDelivery($order->getPriceTotalPDV() - $order->getPriceDelivery());
  305.           $order->setStatus(OrderStatusData::PENDING);
  306.           $order->setPlacanje($request->request->get('placanje'));
  307.           $order->setDostava($request->request->get('dostava'));
  308.           if (!is_null($request->request->get('diler'))) {
  309.             $order->setIsDiler(true);
  310.             $order->setStatus(OrderStatusData::PROFAKTURA);
  311.           }
  312.           $this->em->getRepository(Order::class)->generateOrderKey($order);
  313.           $order $this->em->getRepository(Order::class)->save($order$this->getUser());
  314.           if ($session->has('basketCheckout')) {
  315.             $session->remove('basketCheckout');
  316.           }
  317.           if ($session->has('basketUkupnoPorez')) {
  318.             $session->remove('basketUkupnoPorez');
  319.           }
  320.           if ($session->has('basketUkupnoPdv')) {
  321.             $session->remove('basketUkupnoPdv');
  322.           }
  323.           if ($session->has('basket')) {
  324.             $session->remove('basket');
  325.           }
  326.           if ($session->has('dostava')) {
  327.             $session->remove('dostava');
  328.           }
  329.           if ($session->has('ukupnoProizvoda')) {
  330.             $session->remove('ukupnoProizvoda');
  331.           }
  332.           if ($order->getPlacanje() == OrderPaymentData::ONLINE) {
  333.             $orgOid $order->getOrderKey();
  334.             $orgAmount number_format($order->getPriceTotalPDV() , 2'.''');
  335.             $orgOkUrl "https://pcboomboom.rs/products/order-success";
  336.             $orgFailUrl "https://pcboomboom.rs/products/order-fail";
  337.             $orgShopUrl "https://pcboomboom.rs";
  338.             $orgRnd microtime();
  339.             $clientId str_replace("|""\\|"str_replace("\\""\\\\"AppConfig::CLIENT_ID));
  340.             $oid str_replace("|""\\|"str_replace("\\""\\\\"$orgOid));
  341.             $amount str_replace("|""\\|"str_replace("\\""\\\\"$orgAmount));
  342.             $shopUrl str_replace("|""\\|"str_replace("\\""\\\\"$orgShopUrl));
  343.             $okUrl str_replace("|""\\|"str_replace("\\""\\\\"$orgOkUrl));
  344.             $failUrl str_replace("|""\\|"str_replace("\\""\\\\"$orgFailUrl));
  345.             $transactionType str_replace("|""\\|"str_replace("\\""\\\\"AppConfig::AUTH_TYPE));
  346.             $installment str_replace("|""\\|"str_replace("\\""\\\\"AppConfig::INSTALLMENT_NO));
  347.             $rnd str_replace(["|""\\""."" "], ["\\|""\\\\"""""], $orgRnd);
  348.             $currency str_replace("|""\\|"str_replace("\\""\\\\"AppConfig::STORE_CURRENCY));
  349.             $storeKey str_replace("|""\\|"str_replace("\\""\\\\"AppConfig::STORE_KEY));
  350.             $plainText $clientId "|" $oid "|" $amount "|" $okUrl "|" $failUrl "|" $transactionType "|" $installment "|" $rnd "||||" $currency "|" $storeKey;
  351.             $hashValue hash('sha512'$plainText);
  352.             $hash base64_encode (pack('H*',$hashValue));
  353.             $args['clientId'] = $clientId// Vaš Merchant ID
  354.             $args['oid'] = $oid// Jedinstveni ID porudžbine
  355.             $args['amount'] = $amount// Iznos plaćanja
  356.             $args['okUrl'] = $okUrl;
  357.             $args['failUrl'] = $failUrl;
  358.             $args['tranType'] = $transactionType;
  359.             $args['instalment'] = $installment;
  360.             $args['rnd'] = $rnd// Generišite nasumičan string
  361.             $args['currency'] = $currency// Valuta
  362.             $args['storeKey'] = $storeKey;
  363.             $args['hash'] = $hash;
  364.             $args['storetype'] = AppConfig::STORE_TYPE;
  365.             $args['hashAlgorithm'] = AppConfig::ALGORITHM;
  366.             $args['lang'] = AppConfig::LANGUAGE;
  367.             $args['shopUrl'] = $orgShopUrl;
  368.             return $this->render('front/product/payment.html.twig'$args);
  369.           }
  370.           $mailService->order($order);
  371.           $args['order'] = $order;
  372.           if ($order->isDiler()) {
  373.             return $this->render('front/product/success_offer.html.twig'$args);
  374.           }
  375.           return $this->render('front/product/success.html.twig'$args);
  376.         }
  377.       } else {
  378.         $this->addFlash('error''Nismo uspeli da verifikujemo porudžbinu. Molimo vas da probate ponovo.');
  379.         return $this->redirectToRoute('app_cart_kasa');
  380.       }
  381.     }
  382.     $args['form'] = $form->createView();
  383.     return $this->render('front/product/kasa.html.twig'$args);
  384.   }
  385.   #[Route('/add-comment/{id}'name'app_comment_add')]
  386. //  #[Entity('comment', expr: 'repository.findForForm(id)')]
  387. //  #[Security("is_granted('USER_EDIT', usr)", message: 'Nemas pristup', statusCode: 403)]
  388.   public function formComment(Request $requestProduct $product): Response {
  389.     if ($this->isGranted('ROLE_USER')) {
  390.       if (!$this->isGranted('ROLE_EMPLOYEE')) {
  391.         return $this->redirect($this->generateUrl('app_home'));
  392.       }
  393.     }
  394.     if ($request->isMethod('POST')) {
  395.       $lastComment $this->em->getRepository(Comment::class)->getOneByUser($request->request->get('member'));
  396.       if (!is_null($lastComment)) {
  397.         $now = new DateTimeImmutable();
  398.         $commentTime $lastComment['created'];
  399.         $interval $now->diff($commentTime);
  400.         if ($interval->== && $interval->30) {
  401.           return new JsonResponse(['status' => 'error''message' => 'Poslednji komentar je ostavljen pre manje od pola sata. Molimo sačekajte pola sata pre nego što ostavite novi komentar.']);
  402.         }
  403.       }
  404.       $komentar = new Comment();
  405.       $komentar->setProduct($product);
  406.       $komentar->setCreatedBy($this->em->getRepository(User::class)->find($request->request->get('member')));
  407.       $komentar->setComment($request->request->get('comment'));
  408.       $komentar->setOcena($request->request->get('rating'));
  409.       $komentar->setStatus(0);
  410.       $this->em->getRepository(Comment::class)->save($komentar);
  411.       return new JsonResponse(['status' => 'success''message' => 'Komentar je uspešno dodat. Biće objavljen nakon verifikacije administratora.']);
  412.     }
  413.     return new JsonResponse(['status' => 'error''message' => 'Došlo je do greške.']);
  414.   }
  415.   #[Route('/favorite-add'name'app_favorite_add')]
  416.   public function favoriteAdd(Request $request): RedirectResponse|JsonResponse {
  417.     if ($this->isGranted('ROLE_USER')) {
  418.       if (!$this->isGranted('ROLE_EMPLOYEE')) {
  419.         return $this->redirect($this->generateUrl('app_home'));
  420.       }
  421.     }
  422.     $pid $request->get('product_id');
  423.     $product $this->em->getRepository(Product::class)->find((int)$pid);
  424.     $user $this->getUser();
  425.     $favoriti $user->getFavorite();
  426.     if ($favoriti->contains($product)) {
  427.       // Proizvod je u kolekciji omiljenih
  428.       return new JsonResponse(['status' => 'error''message' => 'Proizvod već postoji u Vašoj listi želja.']);
  429.     } else {
  430.       $user->addFavorite($product);
  431.       $user $this->em->getRepository(User::class)->save($user);
  432.       $count $user->getFavorite()->count();
  433.       return new JsonResponse(['status' => 'success''totalFavorites' => $count'message' => 'Proizvod je uspešno dodat u Vašu listu favorita.']);
  434.     }
  435.   }
  436.   #[Route('/favorite-remove/{id}'name'app_favorite_remove')]
  437.   public function favoriteRemove(Product $productRequest $request): Response {
  438.     if ($this->isGranted('ROLE_USER')) {
  439.       if (!$this->isGranted('ROLE_EMPLOYEE')) {
  440.         return $this->redirect($this->generateUrl('app_home'));
  441.       }
  442.     }
  443.     $user $this->getUser();
  444.     $user->removeFavorite($product);
  445.     $user $this->em->getRepository(User::class)->save($user);
  446.     return $this->redirectToRoute('app_profile_view');
  447.   }
  448.   #[Route('/favorite-count'name'app_favorite_count')]
  449.   public function showFavorite(): JsonResponse {
  450.     $count $this->getUser()->getFavorite()->count();
  451.     return new JsonResponse(['totalFavorites' => $count]);
  452.   }
  453.   #[Route('/order-success'name'app_order_success')]
  454.   public function success(Request $requestMailService $mailService): Response {
  455.     if ($this->isGranted('ROLE_USER')) {
  456.       if (!$this->isGranted('ROLE_EMPLOYEE')) {
  457.         return $this->redirect($this->generateUrl('app_home'));
  458.       }
  459.     }
  460.     $args = [];
  461.     $oid $request->request->get('oid');
  462.     $order $this->em->getRepository(Order::class)->findOneBy(['orderKey' => $oid]);
  463. //    $order = $this->em->getRepository(Order::class)->find(37);
  464.     if (!is_null($request->request->get('TransId'))) {
  465.       $transId $request->request->get('TransId');
  466.       $order->setTransId($transId);
  467.     }
  468.     if (!is_null($request->request->get('AuthCode'))) {
  469.       $authCode $request->request->get('AuthCode');
  470.       $order->setAuthCode($authCode);
  471.     }
  472.     if (!is_null($request->request->get('ProcReturnCode'))) {
  473.       $prCode $request->request->get('ProcReturnCode');
  474.       $order->setPrCode($prCode);
  475.     }
  476.     if (!is_null($request->request->get('clientIp'))) {
  477.       $clientIp $request->request->get('clientIp');
  478.       $order->setClientIp($clientIp);
  479.     }
  480.     if (!is_null($request->request->get('instalment'))) {
  481.       $installment $request->request->get('instalment');
  482.       $order->setInstallment($installment);
  483.     }
  484.     if (!is_null($request->request->get('Response'))) {
  485.       $responseTrans $request->request->get('Response');
  486.       $order->setResponse($responseTrans);
  487.     }
  488.     if (!is_null($request->request->get('EXTRA_TRXDATE'))) {
  489.       $transDate $request->request->get('EXTRA_TRXDATE');
  490.       $order->setTransDate($transDate);
  491.     }
  492.     if (!is_null($request->request->get('mdStatus'))) {
  493.       $mdStatus $request->request->get('mdStatus');
  494.       $order->setMdStatus($mdStatus);
  495.     }
  496.     $order $this->em->getRepository(Order::class)->savePayment($order);
  497.     $mailService->order($order);
  498.     $args['order'] = $order;
  499.     return $this->render('front/product/success.html.twig'$args);
  500.   }
  501.   #[Route('/order-fail'name'app_order_fail')]
  502.   public function fail(Request $requestMailService $mailService): Response {
  503.     if ($this->isGranted('ROLE_USER')) {
  504.       if (!$this->isGranted('ROLE_EMPLOYEE')) {
  505.         return $this->redirect($this->generateUrl('app_home'));
  506.       }
  507.     }
  508.     $args = [];
  509.     $oid $request->request->get('oid');
  510.     $order $this->em->getRepository(Order::class)->findOneBy(['orderKey' => $oid]);
  511.     if (!is_null($request->request->get('TransId'))) {
  512.       $transId $request->request->get('TransId');
  513.       $order->setTransId($transId);
  514.     }
  515.     if (!is_null($request->request->get('AuthCode'))) {
  516.       $authCode $request->request->get('AuthCode');
  517.       $order->setAuthCode($authCode);
  518.     }
  519.     if (!is_null($request->request->get('ProcReturnCode'))) {
  520.       $prCode $request->request->get('ProcReturnCode');
  521.       $order->setPrCode($prCode);
  522.     }
  523.     if (!is_null($request->request->get('clientIp'))) {
  524.       $clientIp $request->request->get('clientIp');
  525.       $order->setClientIp($clientIp);
  526.     }
  527.     if (!is_null($request->request->get('instalment'))) {
  528.       $installment $request->request->get('instalment');
  529.       $order->setInstallment($installment);
  530.     }
  531.     if (!is_null($request->request->get('Response'))) {
  532.       $responseTrans $request->request->get('Response');
  533.       $order->setResponse($responseTrans);
  534.     }
  535.     if (!is_null($request->request->get('EXTRA_TRXDATE'))) {
  536.       $transDate $request->request->get('EXTRA_TRXDATE');
  537.       $order->setTransDate($transDate);
  538.     }
  539.     if (!is_null($request->request->get('mdStatus'))) {
  540.       $mdStatus $request->request->get('mdStatus');
  541.       $order->setMdStatus($mdStatus);
  542.     }
  543.     $order $this->em->getRepository(Order::class)->savePayment($order);
  544.     $mailService->orderFail($order);
  545.     $args['order'] = $order;
  546.     return $this->render('front/product/fail.html.twig'$args);
  547.   }
  548.   #[Route('/export-pdf-product/{id}'name'app_product_pdf')]
  549. //  #[Security("is_granted('USER_VIEW', usr)", message: 'Nemas pristup', statusCode: 403)]
  550.   public function pdfProduct(Product $productRequest $request,)    : Response {
  551.     $args['product'] = $product;
  552.     $args['category'] = $product->getCategory();
  553.     $html $this->renderView('front/product/pdf.html.twig'$args);
  554.     $pdfContent $this->knpSnappyPdf->getOutputFromHtml($html);
  555.     return new Response($pdfContent200, [
  556.       'Content-Type' => 'application/pdf',
  557.       'Content-Disposition' => 'inline; filename="order_' $product->getSku() . '.pdf"',
  558.     ]);
  559.   }
  560.   #[Route('/export-pdf/{id}'name'app_offer_pdf')]
  561. //  #[Security("is_granted('USER_VIEW', usr)", message: 'Nemas pristup', statusCode: 403)]
  562.   public function pdf(Order $orderRequest $request)    : Response {
  563.     if ($this->isGranted('ROLE_USER')) {
  564.       if (!$this->isGranted('ROLE_EMPLOYEE')) {
  565.         return $this->redirect($this->generateUrl('app_home'));
  566.       }
  567.     }
  568.     $args['order'] = $order;
  569.     $products $order->getProduct();
  570.     $kolicina 0;
  571.     foreach ($products as $prod) {
  572.       $kolicina $kolicina $prod->getKolicina();
  573.     }
  574.     $args['noProducts'] = $kolicina;
  575.     $args['statusi'] = OrderStatusData::STATUS;
  576.     $args['memorandum'] = $this->getUser()->hasNullProperties();
  577.     $html $this->renderView('order/pdf.html.twig'$args);
  578.     $pdfContent $this->knpSnappyPdf->getOutputFromHtml($html);
  579.     return new Response($pdfContent200, [
  580.       'Content-Type' => 'application/pdf',
  581.       'Content-Disposition' => 'inline; filename="order_' $order->getOrderKey() . '.pdf"',
  582.     ]);
  583.   }
  584.   #[Route('/export-pdf-korpa/'name'app_offer_pdf_korpa')]
  585. //  #[Security("is_granted('USER_VIEW', usr)", message: 'Nemas pristup', statusCode: 403)]
  586.   public function pdfKorpa(SessionInterface $sessionRequest $request): Response {
  587.     $args['type'] = $request->query->get('type');
  588.     $args['basket'] = $session->get('basketCheckout');
  589.     $args['ukupnoPorez'] = $session->get('basketUkupnoPorez');
  590.     $args['ukupnaCenaPdv'] = $session->get('basketUkupnoPdv');
  591.     $args['ukupnoProizvoda'] = $session->get('ukupnoProizvoda');
  592.     $args['memorandum'] = $this->getUser()->hasNullProperties();
  593.     $html $this->renderView('order/korpa_pdf.html.twig'$args);
  594.     $pdfContent $this->knpSnappyPdf->getOutputFromHtml($html);
  595.     return new Response($pdfContent200, [
  596.       'Content-Type' => 'application/pdf',
  597.       'Content-Disposition' => 'attachment; filename="offer_' date('Y-m-d_H-i-s') . '.pdf"',
  598.     ]);
  599.   }
  600.   #[Route('/get-users-ajax-search-products'name'app_ajax_search')]
  601.   public function getProducts(Request $requestEntityManagerInterface $emPackages $assetsManager,RouterInterface $router): JsonResponse {
  602.     $term $request->query->get('q''');
  603.     $products $em->getRepository(Product::class)->searchByTermAjax($term);
  604.     $results = [];
  605.     foreach ($products as $product) {
  606.       $results[] = [
  607.         'id' => $product['id'],
  608.         'text' => $product['title'],
  609.         'pricePDV' => $product['pricePDV'],
  610.         'link' => $router->generate('app_shop_product_view', ['id' => $product['id']]),
  611.         'slika' => $assetsManager->getUrl($product['thumbnail100'])
  612.       ];
  613.     }
  614.     return new JsonResponse(['results' => $results]);
  615.   }
  616.   #[Route('/products-category-random/{id}'name'app_products_category_random')]
  617.   public function productsCategory(Category $category): Response {
  618.     $args = [];
  619.     $args['randomProducts'] = $this->em->getRepository(Product::class)->searchByCategory($category);
  620.     return $this->render('front/include/products_category.html.twig'$args);
  621.   }
  622.   #[Route('/view/{id}'name'app_shop_product_view')]
  623. //  #[Security("is_granted('USER_VIEW', usr)", message: 'Nemas pristup', statusCode: 403)]
  624.   public function view(Product $productSessionInterface $session): Response {
  625.     if ($this->isGranted('ROLE_USER')) {
  626.       if (!$this->isGranted('ROLE_EMPLOYEE')) {
  627.         return $this->redirect($this->generateUrl('app_home'));
  628.       }
  629.     }
  630.     if ($product->getPricePDV() == || $product->isSuspended()) {
  631.       return $this->redirect($this->generateUrl('app_shop_home'));
  632.     }
  633.     $args['product'] = $product;
  634.     $args['category'] = $product->getCategory();
  635.     $args['productComments'] = $this->em->getRepository(Comment::class)->findBy(['product' => $product'status' => StatusData::PRIHVACEN]);
  636.     $args['noActiveComments'] = $this->em->getRepository(Comment::class)->count(['product' => $product'status' => StatusData::PRIHVACEN]);
  637.     $args['stars'] = $this->em->getRepository(Comment::class)->getStars($product->getId());
  638.     $visit $product->getVisits()->first();
  639.     $visit->setVisit($visit->getVisit() + 1);
  640.     $visit $this->em->getRepository(Visit::class)->save($visit);
  641.     $args['visits'] = $visit->getVisit();
  642.     return $this->render('front/product/view.html.twig'$args);
  643.   }
  644.   #[Route('/edit-pdf-korpa/'name'app_offer_edit_pdf_korpa')]
  645. //  #[Security("is_granted('USER_VIEW', usr)", message: 'Nemas pristup', statusCode: 403)]
  646.   public function pdfEditKorpa(SessionInterface $sessionRequest $request): Response {
  647.     $args['type'] = $request->query->get('type');
  648.     $args['basket'] = $session->get('basketCheckout');
  649.     $args['ukupnoPorez'] = $session->get('basketUkupnoPorez');
  650.     $args['ukupnaCenaPdv'] = $session->get('basketUkupnoPdv');
  651.     $args['ukupnoProizvoda'] = $session->get('ukupnoProizvoda');
  652.     $args['gradovi'] = $this->em->getRepository(City::class)->findAll();
  653.     return $this->render('front/product/edit.html.twig'$args);
  654.   }
  655.   #[Route('/edit-export-pdf-korpa/'name'app_edit_basket_pdf')]
  656. //  #[Security("is_granted('USER_VIEW', usr)", message: 'Nemas pristup', statusCode: 403)]
  657.   public function pdfEditKorpaExport(SessionInterface $sessionMailService $mailServiceRequest $requestUploadService $uploadService): Response {
  658.     $test = new OrderProduct();
  659.     $korisnik $this->getUser();
  660.     $args['type'] = $request->request->get('type');
  661.     $args['ime'] = $request->request->get('ime');
  662.     $args['prezime'] = $request->request->get('prezime');
  663.     $args['telefon'] = $request->request->get('telefon');
  664.     $args['email'] = $request->request->get('email') ?: null;
  665.     $args['grad'] = $request->request->get('grad') ?: null;
  666.     if (!is_null($args['grad'])) {
  667.       $args['grad'] = $this->em->getRepository(City::class)->find(($request->request->get('grad')));
  668.     }
  669.     $args['adresa'] = $request->request->get('adresa') ?: null;
  670.     $args['napomena'] = $request->request->get('napomena');
  671.     $args['rNaziv'] = $request->request->all('rad')['title'];
  672.     $args['rCena'] = $request->request->all('rad')['price'];
  673.     $args['total'] = $request->request->get('totalPdvPrikaz');
  674.     $args['proizvodi'] = [];
  675.     $args['proizvodiNew'] = [];
  676.     $slike $request->files->all();
  677.     foreach ($request->request->all() as $key => $value ) {
  678.       if ($key != 'totalPdvPrikaz' && $key != 'type' && $key != 'rad' && $key != 'ime' && $key != 'prezime' && $key != 'telefon' && $key != 'adresa' && $key != 'grad' && $key != 'napomena' && $key != 'email' && $key != 'manual' && $key != 'procenat' && !str_starts_with($key'new_')) {
  679.         $prozivod $this->em->getRepository(Product::class)->find($key);
  680.         $args['proizvodi'][] = [
  681.           'product' => $prozivod,
  682.           'price' => $value['price'],
  683.           'qty' => $value['qty'],
  684.           'totalno' => $value['totalno'],
  685.           'desc' => $value['desc'],
  686.         ];
  687.       }
  688.       if (str_starts_with($key'new_')) {
  689.         if (isset($slike[$key])) {
  690.           if (!is_null($slike[$key]['image'])) {
  691.             $image $slike[$key]['image'];
  692.             $slika $uploadService->upload($image$test->getImageUploadPath());
  693.             $slika $this->em->getRepository(Image::class)->addImageProduct($slika$test->getThumbUploadPath(), $this->getParameter('kernel.project_dir'));
  694.             $slika $slika->getThumbnail100();
  695.           } else {
  696.             $slika '/assets/images/no_image_product.png';
  697.           }
  698.         } else {
  699.           $slika '/assets/images/no_image_product.png';
  700.         }
  701.         $args['proizvodiNew'][] = [
  702.           'product' => $value['title'],
  703.           'price' => $value['price'],
  704.           'qty' => $value['qty'],
  705.           'totalno' => $value['totalno'],
  706.           'desc' => $value['desc'],
  707.           'slika' => $slika,
  708.         ];
  709.       }
  710.     }
  711.     if ($args['type'] == 1) {
  712.       $order = new Order();
  713.       $order->setCreatedBy($korisnik);
  714.       $order->setMember($korisnik);
  715.       $order->setIme($args['ime']);
  716.       $order->setPrezime($args['prezime']);
  717.       $order->setAdresa($args['adresa']);
  718.       $order->setGrad($args['grad']);
  719.       $order->setTelefon1($args['telefon']);
  720.       $order->setEmail($args['email']);
  721.       $args['dostava'] = 0;
  722.       $order->setPriceTotalPDV($args['total'] + $args['dostava']);
  723.       $order->setPriceTotal($args['total']);
  724.       $order->setPriceTotalWithoutDelivery($args['total']);
  725.       $order->setStatus(OrderStatusData::PENDING);
  726.       $order->setIsDiler(true);
  727.       $order->setStatus(OrderStatusData::PROFAKTURA);
  728.       $this->em->getRepository(Order::class)->generateOrderKey($order);
  729.       //dodaje proizvode iz baze
  730.       foreach ($args['proizvodi'] as $product) {
  731.         $orderProduct = new OrderProduct();
  732.         $dbProduct $product['product'];
  733.         $orderProduct->setProduct($dbProduct);
  734.         $orderProduct->setTitle($dbProduct->getTitle());
  735.         $orderProduct->setKolicina($product['qty']);
  736.         $orderProduct->setPricePDV($product['price']);
  737.         $orderProduct->setPriceTotalPDV($product['totalno']);
  738.         $orderProduct->setDescription($product['desc']);
  739.         $orderProduct->setSku($dbProduct->getSku());
  740.         $order->addProduct($orderProduct);
  741.       }
  742.       //dodaje rad
  743.       if (!empty($args['rNaziv']) && !empty($args['rCena'])) {
  744.         $orderProduct = new OrderProduct();
  745.         $orderProduct->setTitle(mb_strtoupper(trim($args['rNaziv'])));
  746.         $orderProduct->setProduct($this->em->getRepository(Product::class)->find(999999));
  747.         $orderProduct->setKolicina(1);
  748.         $orderProduct->setPricePDV($args['rCena']);
  749.         $orderProduct->setPriceTotalPDV($args['rCena']);
  750.         $order->addProduct($orderProduct);
  751.       }
  752.       //dodaje custom proizvode
  753.       $broj 0;
  754.       foreach ($args['proizvodiNew'] as $productNew) {
  755.         $formB sprintf('%02d'$broj);
  756.         $orderProduct = new OrderProduct();
  757.         $orderProduct->setProduct($this->em->getRepository(Product::class)->find('9999' $formB));
  758.         $orderProduct->setTitle($productNew['product']);
  759.         $orderProduct->setKolicina($productNew['qty']);
  760.         $orderProduct->setPricePDV($productNew['price']);
  761.         $orderProduct->setPriceTotalPDV($productNew['totalno']);
  762.         $orderProduct->setSku(0);
  763.         $orderProduct->setImage($productNew['slika']);
  764.         $orderProduct->setDescription($productNew['desc']);
  765.         $order->addProduct($orderProduct);
  766.         $broj++;
  767.       }
  768.       if (!empty($args['proizvodiNew'])) {
  769.         $order->setIsCustom(true);
  770.       }
  771.       if ($session->has('basketCheckout')) {
  772.         $session->remove('basketCheckout');
  773.       }
  774.       if ($session->has('basketUkupnoPorez')) {
  775.         $session->remove('basketUkupnoPorez');
  776.       }
  777.       if ($session->has('basketUkupnoPdv')) {
  778.         $session->remove('basketUkupnoPdv');
  779.       }
  780.       if ($session->has('basket')) {
  781.         $session->remove('basket');
  782.       }
  783.       if ($session->has('dostava')) {
  784.         $session->remove('dostava');
  785.       }
  786.       if ($session->has('ukupnoProizvoda')) {
  787.         $session->remove('ukupnoProizvoda');
  788.       }
  789.       $args['order'] = $this->em->getRepository(Order::class)->save($order$this->getUser());
  790.       $mailService->order($args['order']);
  791.     }
  792.     if ($args['type'] == 0) {
  793.             $order = new Ponuda();
  794.             $order->setIme($args['ime']);
  795.             $order->setPrezime($args['prezime']);
  796.             $order->setAdresa($args['adresa']);
  797.             $order->setGrad($args['grad']);
  798.             $order->setTelefon1($args['telefon']);
  799.             $order->setEmail($args['email']);
  800.             $order->setDiler($korisnik);
  801.             $products = [];
  802.             //dodaje proizvode iz baze
  803.             foreach ($args['proizvodi'] as $product) {
  804.                 $products[] = [
  805.                     'id' => $product['product']->getId(),
  806.                     'title' => $product['product']->getTitle(),
  807.                     'price' => $product['price'],
  808.                     'desc' => $product['desc'],
  809.                     'product' => $product['product'],
  810.                     'slika' => $product['product']->getMainImage()->getThumbnail100(),
  811.                     'opis' => $product['product']->getDescription(),
  812.                 ];
  813.             }
  814.             //dodaje rad
  815.             if (!empty($args['rNaziv']) && !empty($args['rCena'])) {
  816.                 $products[] = [
  817.                     'id' => '',
  818.                     'title' => trim($args['rNaziv']),
  819.                     'price' => $args['rCena'],
  820.                     'desc' => '',
  821.                     'product' => '',
  822.                     'slika' => '',
  823.                     'opis' => '',
  824.                 ];
  825.             }
  826.             //dodaje custom proizvode
  827.             foreach ($args['proizvodiNew'] as $productNew) {
  828.                 $products[] = [
  829.                     'id' => '',
  830.                     'title' => $productNew['product'],
  831.                     'price' => $productNew['price'],
  832.                     'desc' => $productNew['desc'],
  833.                     'product' => '',
  834.                     'slika' => $productNew['slika'],
  835.                     'opis' => '',
  836.                 ];
  837.             }
  838.             $order->setProducts($products);
  839. //dodato da brise iz korpe
  840.       if ($session->has('basketCheckout')) {
  841.         $session->remove('basketCheckout');
  842.       }
  843.       if ($session->has('basketUkupnoPorez')) {
  844.         $session->remove('basketUkupnoPorez');
  845.       }
  846.       if ($session->has('basketUkupnoPdv')) {
  847.         $session->remove('basketUkupnoPdv');
  848.       }
  849.       if ($session->has('basket')) {
  850.         $session->remove('basket');
  851.       }
  852.       if ($session->has('dostava')) {
  853.         $session->remove('dostava');
  854.       }
  855.       if ($session->has('ukupnoProizvoda')) {
  856.         $session->remove('ukupnoProizvoda');
  857.       }
  858.             $args['order'] = $this->em->getRepository(Ponuda::class)->save($order);
  859. //            $mailService->offerp($args['order']);
  860.         }
  861.     $args['memorandum'] = $this->getUser()->hasNullProperties();
  862. //    return $this->render('order/edit_korpa_pdf.html.twig', $args);
  863.     $html $this->renderView('order/edit_korpa_pdf.html.twig'$args);
  864.     $pdfContent $this->knpSnappyPdf->getOutputFromHtml($html);
  865.     return new Response($pdfContent200, [
  866.       'Content-Type' => 'application/pdf',
  867.       'Content-Disposition' => 'attachment; filename="offer_' date('Y-m-d_H-i-s') . '.pdf"',
  868.     ]);
  869.   }
  870.   #[Route('/edit-pdf-profile/{id}'name'app_offer_edit_pdf_profile')]
  871. //  #[Security("is_granted('USER_VIEW', usr)", message: 'Nemas pristup', statusCode: 403)]
  872.   public function pdfEditProfile(Order $orderSessionInterface $sessionRequest $request): Response {
  873.     $args['ime'] = $order->getIme();
  874.     $args['prezime'] = $order->getPrezime();
  875.     $args['telefon'] = $order->getTelefon1();
  876.     $args['adresa'] = $order->getAdresa();
  877.     $args['grad'] = $order->getGrad();
  878.     $args['email'] = $order->getEmail();
  879.     $args['basket'] = [];
  880.     foreach ($order->getProduct()->toArray() as $prod) {
  881.       if ($prod->getProduct()->getId() > 999899 && $prod->getProduct()->getId() < 999999) {
  882.         $custom true;
  883.       } else {
  884.         $custom false;
  885.       }
  886.       $args['basket'][] = [
  887.         "pid" => $prod->getProduct()->getId(),
  888.         "qty" => $prod->getKolicina(),
  889.         "product" => $prod->getProduct(),
  890.         "cenaKomad" => $prod->getPricePDV(),
  891.         "ukupnaCenaDinKrajnja" => $prod->getPriceTotalPDV(),
  892.         "porez" => 20,
  893.         "popust" => false,
  894.         "slika" => $prod->getImage(),
  895.         "custom" => $custom,
  896.         "title" => $prod->getTitle(),
  897.         "desc" => $prod->getDescription(),
  898.       ];
  899.     }
  900.     $args['type'] = 1;
  901.     $args['ukupnoPorez'] = null;
  902.     $args['ukupnaCenaPdv'] = $order->getPriceTotalPDV();
  903.     $args['ukupnoProizvoda'] = $order->getProduct()->count();
  904.     $args['gradovi'] = $this->em->getRepository(City::class)->findAll();
  905.     return $this->render('front/product/edit_profile.html.twig'$args);
  906.   }
  907.   #[Route('/edit-export-pdf-profile/'name'app_edit_profile_pdf')]
  908. //  #[Security("is_granted('USER_VIEW', usr)", message: 'Nemas pristup', statusCode: 403)]
  909.   public function pdfEditProfileExport(SessionInterface $sessionMailService $mailServiceRequest $requestUploadService $uploadService): Response {
  910. //dd($request);
  911.     $test = new OrderProduct();
  912.     $args['type'] = 1;
  913.     $args['ime'] = $request->request->get('ime');
  914.     $args['prezime'] = $request->request->get('prezime');
  915.     $args['telefon'] = $request->request->get('telefon');
  916.     $args['email'] = $request->request->get('email') ?: null;
  917.     $args['grad'] = $request->request->get('grad') ?: null;
  918.     if (!is_null($args['grad'])) {
  919.       $args['grad'] = $this->em->getRepository(City::class)->find(($request->request->get('grad')));
  920.     }
  921.     $args['adresa'] = $request->request->get('adresa') ?: null;
  922.     $args['napomena'] = $request->request->get('napomena');
  923.     $args['rNaziv'] = $request->request->all('rad')['title'];
  924.     $args['rCena'] = $request->request->all('rad')['price'];
  925.     $args['total'] = $request->request->get('totalPdvPrikaz');
  926.     $args['proizvodi'] = [];
  927.     $args['proizvodiNew'] = [];
  928.     $slike $request->files->all();
  929.     foreach ($request->request->all() as $key => $value ) {
  930.       if ($key != 'totalPdvPrikaz' && $key != 'type' && $key != 'rad' && $key != 'ime' && $key != 'prezime' && $key != 'telefon' && $key != 'adresa' && $key != 'grad' && $key != 'napomena' && $key != 'email' && $key != 'manual' && $key != 'procenat' && $key != 'slikaOld' && !str_starts_with($key'new_')) {
  931.         $prozivod $this->em->getRepository(Product::class)->find($key);
  932.         if ($prozivod->getId() < 999900 || $prozivod->getId() > 999998) {
  933.           $args['proizvodi'][] = [
  934.             'product' => $prozivod,
  935.             'price' => $value['price'],
  936.             'qty' => $value['qty'],
  937.             'totalno' => $value['totalno'],
  938.             'desc' => $value['desc'],
  939.           ];
  940.         } else {
  941.           $args['proizvodiNew'][] = [
  942.             'product' => $value['titleOld'],
  943.             'price' => $value['price'],
  944.             'qty' => $value['qty'],
  945.             'totalno' => $value['totalno'],
  946.             'desc' => $value['desc'],
  947.             'slika' => $value['slikaOld'],
  948.           ];
  949.         }
  950.       }
  951.       if (str_starts_with($key'new_')) {
  952.         if (isset($slike[$key])) {
  953.           if (!is_null($slike[$key]['image'])) {
  954.             $image $slike[$key]['image'];
  955.             $slika $uploadService->upload($image$test->getImageUploadPath());
  956.             $slika $this->em->getRepository(Image::class)->addImageProduct($slika$test->getThumbUploadPath(), $this->getParameter('kernel.project_dir'));
  957.             $slika $slika->getThumbnail100();
  958.           } else {
  959.             $slika '/assets/images/no_image_product.png';
  960.           }
  961.         } else {
  962.           $slika '/assets/images/no_image_product.png';
  963.         }
  964.         $args['proizvodiNew'][] = [
  965.           'product' => $value['title'],
  966.           'price' => $value['price'],
  967.           'qty' => $value['qty'],
  968.           'totalno' => $value['totalno'],
  969.           'desc' => $value['desc'],
  970.           'slika' => $slika,
  971.         ];
  972.       }
  973.     }
  974.     $broj 0;
  975.     if ($args['type'] == 1) {
  976.       $order = new Order();
  977.       $korisnik $this->getUser();
  978.       $order->setCreatedBy($korisnik);
  979.       $order->setMember($korisnik);
  980.       $order->setIme($args['ime']);
  981.       $order->setPrezime($args['prezime']);
  982.       $order->setAdresa($args['adresa']);
  983.       $order->setGrad($args['grad']);
  984.       $order->setTelefon1($args['telefon']);
  985.       $order->setEmail($args['email']);
  986.       $args['dostava'] = 0;
  987.       $order->setPriceTotalPDV($args['total'] + $args['dostava']);
  988.       $order->setPriceTotal($args['total']);
  989.       $order->setPriceTotalWithoutDelivery($args['total']);
  990.       $order->setStatus(OrderStatusData::PENDING);
  991.       $order->setIsDiler(true);
  992.       $order->setStatus(OrderStatusData::PROFAKTURA);
  993.       $this->em->getRepository(Order::class)->generateOrderKey($order);
  994.       //dodaje proizvode iz baze
  995.       foreach ($args['proizvodi'] as $product) {
  996.         $orderProduct = new OrderProduct();
  997.         $dbProduct $product['product'];
  998.         $orderProduct->setProduct($dbProduct);
  999.         $orderProduct->setTitle($dbProduct->getTitle());
  1000.         $orderProduct->setKolicina($product['qty']);
  1001.         $orderProduct->setPricePDV($product['price']);
  1002.         $orderProduct->setPriceTotalPDV($product['totalno']);
  1003.         $orderProduct->setDescription($product['desc']);
  1004.         $orderProduct->setSku($dbProduct->getSku());
  1005.         $order->addProduct($orderProduct);
  1006.         if ($dbProduct->getId() > 999899 && $dbProduct->getId() < 999999) {
  1007.           $broj++;
  1008.         }
  1009.       }
  1010.       //dodaje rad
  1011.       if (!empty($args['rNaziv']) && !empty($args['rCena'])) {
  1012.         $orderProduct = new OrderProduct();
  1013.         $orderProduct->setTitle(mb_strtoupper(trim($args['rNaziv'])));
  1014.         $orderProduct->setProduct($this->em->getRepository(Product::class)->find(999999));
  1015.         $orderProduct->setKolicina(1);
  1016.         $orderProduct->setPricePDV($args['rCena']);
  1017.         $orderProduct->setPriceTotalPDV($args['rCena']);
  1018.         $order->addProduct($orderProduct);
  1019.       }
  1020.       //dodaje custom proizvode
  1021.       $broj++;
  1022.       foreach ($args['proizvodiNew'] as $productNew) {
  1023.         $formB sprintf('%02d'$broj);
  1024.         $orderProduct = new OrderProduct();
  1025.         $orderProduct->setProduct($this->em->getRepository(Product::class)->find('9999' $formB));
  1026.         $orderProduct->setTitle($productNew['product']);
  1027.         $orderProduct->setKolicina($productNew['qty']);
  1028.         $orderProduct->setPricePDV($productNew['price']);
  1029.         $orderProduct->setPriceTotalPDV($productNew['totalno']);
  1030.         $orderProduct->setSku(0);
  1031.         $orderProduct->setImage($productNew['slika']);
  1032.         $orderProduct->setDescription($productNew['desc']);
  1033.         $order->addProduct($orderProduct);
  1034.         $broj++;
  1035.       }
  1036.       if (!empty($args['proizvodiNew'])) {
  1037.         $order->setIsCustom(true);
  1038.       }
  1039.       $args['order'] = $this->em->getRepository(Order::class)->save($order$this->getUser());
  1040.       $mailService->order($args['order']);
  1041.     }
  1042.     $args['memorandum'] = $this->getUser()->hasNullProperties();
  1043. //    return $this->render('order/edit_korpa_pdf.html.twig', $args);
  1044.     $html $this->renderView('order/edit_korpa_pdf.html.twig'$args);
  1045.     $pdfContent $this->knpSnappyPdf->getOutputFromHtml($html);
  1046.     return new Response($pdfContent200, [
  1047.       'Content-Type' => 'application/pdf',
  1048.       'Content-Disposition' => 'attachment; filename="offer_' date('Y-m-d_H-i-s') . '.pdf"',
  1049.     ]);
  1050.   }
  1051. //
  1052. //
  1053. //  #[Route('/edit-pdf-profile/{id}', name: 'app_offer_edit_pdf_profile')]
  1054. ////  #[Security("is_granted('USER_VIEW', usr)", message: 'Nemas pristup', statusCode: 403)]
  1055. //  public function pdfEditProfile(Order $order, Request $request): Response {
  1056. //
  1057. //    $args['type'] = 1;
  1058. //    $args['gradovi'] = $this->em->getRepository(City::class)->findAll();
  1059. //    $args['order'] = $order;
  1060. //
  1061. //    $order->setCreatedBy($korisnik);
  1062. //    $order->setMember($korisnik);
  1063. //    $order->setIme($args['ime']);
  1064. //    $order->setPrezime($args['prezime']);
  1065. //    $order->setAdresa($args['adresa']);
  1066. //    $order->setGrad($args['grad']);
  1067. //    $order->setTelefon1($args['telefon']);
  1068. //    $order->setEmail($args['email']);
  1069. //    $args['basket'] = $session->get('basketCheckout');
  1070. //
  1071. //    $args['ukupnaCenaPdv'] = $session->get('basketUkupnoPdv');
  1072. //    $args['ukupnoProizvoda'] = $session->get('ukupnoProizvoda');
  1073. //
  1074. //    $args['dostava'] = 0;
  1075. //
  1076. //    $order->setPriceTotalPDV($args['total'] + $args['dostava']);
  1077. //    $order->setPriceTotal($args['total']);
  1078. //    $order->setPriceTotalWithoutDelivery($args['total']);
  1079. //    $order->setStatus(OrderStatusData::PENDING);
  1080. //    $order->setIsDiler(true);
  1081. //    $order->setStatus(OrderStatusData::PROFAKTURA);
  1082. //    $this->em->getRepository(Order::class)->generateOrderKey($order);
  1083. //
  1084. //    foreach ($args['proizvodi'] as $product) {
  1085. //
  1086. //      $orderProduct = new OrderProduct();
  1087. //      $dbProduct = $product['product'];
  1088. //      $orderProduct->setProduct($dbProduct);
  1089. //      $orderProduct->setTitle($dbProduct->getTitle());
  1090. //      $orderProduct->setKolicina($product['qty']);
  1091. //      $orderProduct->setPricePDV($product['price']);
  1092. //      $orderProduct->setPriceTotalPDV($product['totalno']);
  1093. //      $orderProduct->setSku($dbProduct->getSku());
  1094. //      $order->addProduct($orderProduct);
  1095. //    }
  1096. //    if (!empty($args['rNaziv']) && !empty($args['rCena'])) {
  1097. //      $orderProduct = new OrderProduct();
  1098. //      $orderProduct->setTitle(mb_strtoupper(trim($args['rNaziv'])));
  1099. //      $orderProduct->setProduct($this->em->getRepository(Product::class)->find(999999));
  1100. //      $orderProduct->setKolicina(1);
  1101. //      $orderProduct->setPricePDV($args['rCena']);
  1102. //      $orderProduct->setPriceTotalPDV($args['rCena']);
  1103. //      $order->addProduct($orderProduct);
  1104. //    }
  1105. //
  1106. //    $args['basket'] = $session->get('basketCheckout');
  1107. //    $args['ukupnoPorez'] = $session->get('basketUkupnoPorez');
  1108. //    $args['ukupnaCenaPdv'] = $session->get('basketUkupnoPdv');
  1109. //    $args['ukupnoProizvoda'] = $session->get('ukupnoProizvoda');
  1110. //
  1111. //    $args['gradovi'] = $this->em->getRepository(City::class)->findAll();
  1112. //
  1113. //    return $this->render('front/product/edit.html.twig', $args);
  1114. //
  1115. //  }
  1116. }