src/Controller/DefaultController.php line 71

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Dompdf\Dompdf;
  4. use Dompdf\Options;
  5. use App\Entity\Site;
  6. use App\Entity\User;
  7. use App\Entity\Klient;
  8. use App\Entity\Atrybuty;
  9. use App\Entity\Produkty;
  10. use App\Entity\Purchaser;
  11. use App\Form\PricingType;
  12. use App\Entity\Zamowienia;
  13. use App\Entity\AtrybutyGrupy;
  14. use App\Entity\AtrybutyProdukt;
  15. use Symfony\Component\Mime\Email;
  16. use App\Repository\SiteRepository;
  17. use App\Repository\UserRepository;
  18. use App\Repository\ProduktyRepository;
  19. use App\Repository\SettingsRepository;
  20. use App\Repository\KategorieRepository;
  21. use App\Repository\PurchaserRepository;
  22. use App\Repository\AtrybutyGrupyRepository;
  23. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  24. use App\Repository\AtrybutyProduktrepository;
  25. use Symfony\Component\HttpFoundation\Request;
  26. use Symfony\Component\Mailer\MailerInterface;
  27. use Symfony\Component\HttpFoundation\Response;
  28. use Symfony\Component\Routing\Annotation\Route;
  29. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  30. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  31. use Doctrine\Persistence\ManagerRegistry as PersistenceManagerRegistry;
  32. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  33. class DefaultController extends AbstractController
  34. {
  35.     
  36.     public function __construct(private SiteRepository $siteRepository){
  37.     }
  38.     /**
  39.      * @Route("/page/{page}", name="page")
  40.      */
  41.     public function indexPage(Site $pageRequest $request,  PersistenceManagerRegistry $doctrine
  42.     KategorieRepository $kategorieRepository)
  43.     
  44.     {
  45.         // replace this example code with whatever you need
  46.         //$repository = $doctrine
  47.         //->getRepository($kategorie);
  48.         
  49.         $strony $this->siteRepository->findBy([],['sortOrder'=>'ASC']);
  50.         
  51.         return $this->render('/default/page.html.twig', [
  52.             'strona' => $page,
  53.             'strony'=>$strony
  54.         ]);
  55.     }
  56.     /**
  57.      * @Route("/", name="homepage")
  58.      */
  59.     public function indexAction(Request $request,  PersistenceManagerRegistry $doctrine
  60.     KategorieRepository $kategorieRepository)
  61.     
  62.     {
  63.         // replace this example code with whatever you need
  64.         //$repository = $doctrine
  65.         //->getRepository($kategorie);
  66.         $kategorie $kategorieRepository->findBy(['visible' => true],['kategoria'=>'ASC']);
  67.         $strony $this->siteRepository->findBy([],['sortOrder'=>'ASC']);
  68.         
  69.         return $this->render('/default/index.html.twig', [
  70.             'kategorie' => $kategorie,
  71.             'strony'=>$strony
  72.         ]);
  73.     }
  74.     /**
  75.      * @Route("/produkty.html", name="strona_produkty")
  76.      */
  77.     public function produktyAction(Request $requestPersistenceManagerRegistry $doctrineProduktyRepository $produktyRepository)
  78.     {
  79.         // replace this example code with whatever you need
  80.         $repository $produktyRepository;
  81.         $strony $this->siteRepository->findBy([],['sortOrder'=>'ASC']);
  82.         $produkty $repository->findBy([
  83.             'kategoria' => $request->query->get('id'),
  84.             'aktywny'=>true]);
  85.         return $this->render('/default/produkty.html.twig', [
  86.             'produkty' => $produkty,
  87.             'strony'=>$strony
  88.         ]);
  89.     }
  90.     /**
  91.      * @Route("/produkt.html", name="strona_produkt")
  92.      */
  93.     public function produktAction(Request $requestPersistenceManagerRegistry $doctrineSettingsRepository $settingsRepositoryProduktyRepository $produktyRepositoryAtrybutyGrupyRepository $atrybutyGrupyRepositoryAtrybutyProduktrepository $atrybutyProduktrepository)
  94.     {
  95.         // pobieramy konfiguracje i przydzielamy do tablicy
  96.         $rows $settingsRepository->findAll();
  97.         $settings = array();
  98.         foreach ($rows as $row) {
  99.             $settings[$row->getConfigName()] = $row->getConfigValue();
  100.         }
  101.         $produkt $produktyRepository->findOneById($request->query->get('id'));
  102.         $atrybutygrupy $atrybutyGrupyRepository->findBy(array(), array('kolejnosc' => 'asc'));
  103.         //$repository = $atrybutyProduktrepository->findAll();
  104.         $grupy = array();
  105.         foreach ($atrybutygrupy as $foo) {
  106.             $atrybutyprodukt $atrybutyProduktrepository->findBy(
  107.                 array(
  108.                     'idGrupy'        => $foo->getId(),
  109.                     'idProduktu'    => $request->query->get('id')
  110.                 ),
  111.                 array('kolejnosc' => 'ASC')
  112.             );
  113.             $par = array();
  114.             foreach ($atrybutyprodukt as $foo2) {
  115.                 $par[$foo2->getIdAtrybut()] = $foo2;
  116.             }
  117.             $grupy[] = array(
  118.                 'id'            => $foo->getId(),
  119.                 'nazwa'            => $foo->getNazwa(),
  120.                 'typ'            => $foo->getTyp(),
  121.                 'pokaz_cene'    => $foo->getPokazCene(),
  122.                 'par'            => $par
  123.             );
  124.         }
  125.         //dd($grupy);
  126.         $form $this->createForm(PricingType::class);
  127.         $strony $this->siteRepository->findBy([],['sortOrder'=>'ASC']);
  128.         return $this->render('/default/produkt.html.twig', array(
  129.             'produkt'        => $produkt,
  130.             'grupy'            => $grupy,
  131.             'settings'        => $settings,
  132.             'back_href'        => $this->container->get('request_stack')->getCurrentRequest()->headers->get('referer'),
  133.             'form'            => $form->createView(),
  134.             'strony'=>$strony
  135.         ));
  136.     }
  137.     /**
  138.      * @Route("/potwierdz_zamowienie.html", name="strona_potwierdz")
  139.      */
  140.     public function potwierdzAction(Request $requestPersistenceManagerRegistry $doctrineProduktyRepository $produktyRepositoryAtrybutyGrupyRepository $atrybutyGrupyRepositoryAtrybutyProduktrepository $atrybutyProduktrepository)
  141.     {
  142.         // replace this example code with whatever you need
  143.         // $repository = $doctrine
  144.         //     ->getRepository('App:Produkty');
  145.         $produkt $produktyRepository->findOneById($request->get('id'));
  146.         //$content = $request->getContent();
  147.         //dd($content);
  148.         $gr $request->get('gr');
  149.         $war $request->get('war');
  150.         $ord = array();
  151.         $cena 0;
  152.         $square $request->get('powierzchnia');
  153.         $vat $request->get('vat');
  154.         //dd($war);
  155.         foreach ($war as $key => $value) {
  156.             $atrybutyprodukt $atrybutyProduktrepository->findOneById($key);
  157.             $atrybutygrupa $atrybutyGrupyRepository->findOneById($atrybutyprodukt->getIdGrupy());
  158.             if ($atrybutyprodukt) {
  159.                 $ord[] = array(
  160.                     'nazwa'        => $atrybutyprodukt->getNazwa(),
  161.                     'id'        => $atrybutyprodukt->getId(),
  162.                     'wartosc'    => $value,
  163.                     'cena'        => $atrybutyprodukt->getCena(),
  164.                     'typ'        => $atrybutyprodukt->getTyp(),
  165.                     'grupa'        => $atrybutygrupa->getNazwa()
  166.                 );
  167.                 if ($atrybutyprodukt->getCenaWymiar()) {
  168.                     $cena += $atrybutyprodukt->getCena() * $square;
  169.                 } else {
  170.                     $cena += $atrybutyprodukt->getCena();
  171.                 }
  172.             }
  173.         }
  174.         foreach ($gr as $key => $value) {
  175.             $atrybutyprodukt $atrybutyProduktrepository->findOneById($value);
  176.             $atrybutygrupa $atrybutyGrupyRepository->findOneById($atrybutyprodukt->getIdGrupy());
  177.             if ($atrybutyprodukt) {
  178.                 $ord[] = array(
  179.                     'nazwa'            => $atrybutyprodukt->getNazwa(),
  180.                     'id'            => $atrybutyprodukt->getId(),
  181.                     'wartosc'        => $value,
  182.                     'cena'            => $atrybutyprodukt->getCena(),
  183.                     'typ'            => $atrybutyprodukt->getTyp(),
  184.                     'grupa'            => $atrybutygrupa->getNazwa()
  185.                 );
  186.                 if ($atrybutyprodukt->getCenaWymiar()) {
  187.                     $cena += $atrybutyprodukt->getCena() * $square;
  188.                 } else {
  189.                     $cena += $atrybutyprodukt->getCena();
  190.                 }
  191.                 //echo $atrybutyprodukt->getNazwa() . ' ' . $atrybutyprodukt->getCena() . ' c: ' . $cena . '<br>';
  192.             }
  193.         }
  194.         $strony $this->siteRepository->findBy([],['sortOrder'=>'ASC']);
  195.         return $this->render('/default/potwierdz.html.twig', array(
  196.             'produkt'        => $produkt,
  197.             'order'            => $ord,
  198.             'cena'            => $cena,
  199.             'vat'            => $vat,
  200.             'powierzchnia'    => $square,
  201.             'strony'=>$strony
  202.         ));
  203.     }
  204.     /**
  205.      * @Route("/realizuj.html", name="strona_realizuj")
  206.      */
  207.     public function realizujAction(
  208.         Request $request,
  209.         PersistenceManagerRegistry $doctrine,
  210.         UserRepository $userRepository,
  211.         AtrybutyProduktrepository $atrybutyProduktrepository,
  212.         AtrybutyGrupyRepository $atrybutyGrupyRepository,
  213.         ProduktyRepository $produktyRepository,
  214.         MailerInterface $mailer,
  215.         ParameterBagInterface $parameterBag,
  216.         PurchaserRepository    $purchaserRepository
  217.     ) {
  218.         // owner sunglass i user www dla zamowienia ze strony
  219.         $user $userRepository->findOneBy(array('www' => 1));
  220.         /**
  221.          * @var User $user
  222.          */
  223.         $id_user $user->getId();
  224.         /**
  225.          * @var User $id_owner
  226.          */
  227.         $partner $user->getPartner();
  228.         $order $request->get('order');
  229.         $purchaser $purchaserRepository->findOneBy([
  230.             'partner' => $partner,
  231.             'mail' => $request->get('email_firmy')
  232.         ]);
  233.         if (!$purchaser) {
  234.             $purchaser = new Purchaser();
  235.             $purchaser->setNazwa($request->get('nazwa_firmy'));
  236.             $purchaser->setAdres($request->get('adres'));
  237.             $purchaser->setKod($request->get('kod'));
  238.             $purchaser->setMiasto($request->get('miasto'));
  239.             $purchaser->setTelefon($request->get('telefon'));
  240.             $purchaser->setMail($request->get('email_firmy'));
  241.             $purchaser->setPartner($partner);
  242.             $purchaser->setUser($user);
  243.             $purchaser->setWojewodztwo($request->get('wojewodztwo'));
  244.             $em $doctrine->getManager();
  245.             $em->persist($purchaser);
  246.             $em->flush();
  247.         }
  248.         
  249.         $id_klient $purchaser->getId();
  250.         $square $request->get('powierzchnia');
  251.         $order $request->get('order');
  252.         $vat $request->get('vat');
  253.         $margin 0;
  254.         $cena 0;
  255.         $cenaRabat 0;
  256.         $cenaBezMarzy 0;
  257.         $discount 0;
  258.         $all = [];
  259.         $marginEnd $user->getPartner()->getMarza();
  260.         $discountEnd $request->get('rabat_hidden');
  261.         foreach ($order as $key => $foo) {
  262.             $atrybutyprodukt $atrybutyProduktrepository->findOneById($key);
  263.             if ($atrybutyprodukt->getStalaCena()) {
  264.                 $margin 0;
  265.                 $discount 0;
  266.             } else {
  267.                 $margin $marginEnd;
  268.                 $discount $discountEnd;
  269.             }
  270.             if ($atrybutyprodukt->getCenaWymiar()) {
  271.                 $cena += $atrybutyprodukt->getCena() * $square;
  272.                 $cenaBezMarzy += $atrybutyprodukt->getCenaRabat($margin) * $square;
  273.                 $cenaRabat += ($atrybutyprodukt->getCena() * $square) * ($discount 100);
  274.             } else {
  275.                 $cena += $atrybutyprodukt->getCena();
  276.                 $cenaBezMarzy += $atrybutyprodukt->getCenaRabat($margin);
  277.                 $cenaRabat += $atrybutyprodukt->getCena() * ($discount 100);
  278.             }
  279.             $all[$key] = array(
  280.                 'id' => $atrybutyprodukt->getId(),
  281.                 'nazwa' => $atrybutyprodukt->getNazwa(),
  282.                 'cena' => $atrybutyprodukt->getCena(),
  283.                 'brutto' => $atrybutyprodukt->getBrutto($vat),
  284.                 'cena_marza' => $atrybutyprodukt->getCena(),
  285.                 'brutto_marza' => $atrybutyprodukt->getBrutto($vat),
  286.                 'wartosc' => $foo,
  287.                 'img' => $atrybutyprodukt->getWebPath(),
  288.                 'typ' => $atrybutyprodukt->getTyp(),
  289.                 'grupa' => $atrybutyprodukt->getIdGrupy()
  290.             );
  291.         }
  292.         $zamowienie = new Zamowienia();
  293.         $zamowienie->setIdProdukt($request->get('id'));
  294.         $zamowienie->setUser($user);
  295.         $zamowienie->setPurchaser($purchaser);
  296.         $zamowienie->setPartner($partner);
  297.         // cena netto bez marży
  298.         $zamowienie->setWartosc($cena);
  299.         $zamowienie->setNazwaDostawa($request->get('nazwa_firmy'));
  300.         $zamowienie->setAdresDostawa($request->get('adres'));
  301.         $zamowienie->setKodDostawa($request->get('kod'));
  302.         $zamowienie->setDataZamowienia(new \DateTime());
  303.         $zamowienie->setMiastoDostawa($request->get('miasto'));
  304.         $zamowienie->setProdukt($all);
  305.         $zamowienie->setVat($vat);
  306.         $zamowienie->setMargin($partner->getMarza());
  307.         $zamowienie->setDiscount(0);
  308.         $zamowienie->setSquare($square);
  309.         $zamowienie->setMail($request->get('email_firmy'));
  310.         $zamowienie->setCenaBezRabat($cena);
  311.         $zamowienie->setCenaBezMarza($cenaBezMarzy);
  312.         $zamowienie->setProfit($cenaRabat-$cenaBezMarzy);
  313.         $zamowienie->setWojewodztwo($request->get('wojewodztwo'));
  314.         $em $doctrine->getManager();
  315.         $em->persist($zamowienie);
  316.         $em->flush();
  317.         // ********************************
  318.         // wyslanie maila z potwierdzeniem
  319.         //
  320.         foreach ($zamowienie->getProdukt() as $key => $value) {
  321.             $attributes[] = array(
  322.                 'nazwa'        => $value['nazwa'],
  323.                 'id'        => $value['id'],
  324.                 'wartosc'    => $value['wartosc'],
  325.                 'typ'        => $value['typ'],
  326.                 'grupa'        => $atrybutyGrupyRepository->findOneById($value['grupa'])->getNazwa()
  327.             );
  328.         }
  329.         // tworzymy załącznik pdf
  330.         $path '../public/uploads/pdf/';
  331.         $filename 'zamowienie-' sha1(uniqid(mt_rand(), true)) . '.pdf';
  332.         $cena_netto $cena;
  333.         $cena_brutto $cena $vat;
  334.         $cena_rabat_netto $cena_netto * ($discount 100);
  335.         $cena_rabat_brutto $cena_rabat_netto $vat;
  336.         $discount_value $cena_netto $cena_rabat_netto;
  337.         //dd($user->getKlient());
  338.         //dd( $request->get('image'));
  339.         $pdf_data = array(
  340.             'attributes'    => $attributes,
  341.             'product'        => $produktyRepository
  342.                 ->findOneById($zamowienie->getIdProdukt()),
  343.             'nr'            => $zamowienie->getId(),
  344.             'client'        => array(
  345.                 'name'            => $request->get('nazwa_firmy'),
  346.                 'adres'            => $request->get('adres'),
  347.                 'miasto'        => $request->get('kod') . ' ' $request->get('miasto'),
  348.                 'tel'            => $request->get('telefon'),
  349.                 'email'            => $request->get('email_firmy')
  350.             ),
  351.             'trader'        => array(
  352.                 'username'        => $user->getName(),
  353.                 'nazwa'            => $user->getPartner()->getNazwa(),
  354.                 'adres'            => $user->getPartner()->getAdres(),
  355.                 'miasto'        => $user->getPartner()->getKod() . ' ' $user->getPartner()->getMiasto(),
  356.                 'tel'            => $user->getPartner()->getTelefon(),
  357.                 'email'            => $user->getEmail(),
  358.                 'tytul'            => $user->getPartner()->getPartnerKategory()->getNazwa()
  359.             ),
  360.             'image'                    => $this->imageToBase64($this->getParameter('kernel.project_dir') .'/public/'$request->get('image')),
  361.             'netto'                    => $cena_netto,
  362.             'brutto'                => $cena_brutto,
  363.             'netto_discount'        => $cena_rabat_netto,
  364.             'brutto_discount'        => $cena_rabat_brutto,
  365.             'vat'                    => $cena_rabat_brutto $cena_rabat_netto,
  366.             'discount'                => $discount,
  367.             'discount_value'        => $discount_value,
  368.             'uwagi'                    => $request->get('uwagi')
  369.         );
  370.         
  371.         // $html = $this->renderView('/emails/zamowienie-klient.pdf.html.twig', $pdf_data);
  372.         // $arguments = array(
  373.         //     'outputFilename' => $path . $filename,
  374.         //     'outputDest' => 'F'
  375.         // );
  376.         $fontPath $parameterBag->get('kernel.project_dir').'/public/fonts';
  377.         $html =  $this->renderView('/emails/zamowienie-klient.pdf.html.twig'$pdf_data);
  378.         //return  $this->render('/emails/zamowienie-klient.pdf.html.twig', $pdf_data);
  379.         $pdfOptions = new Options(['isHtml5ParserEnabled' => true'isRemoteEnabled' => true,'fontDir' => $fontPath]);
  380.         $pdfOptions->setChroot($fontPath);
  381.         $pdfOptions->set('defaultFont''DejaVu Sans');
  382.         $dompdf = new Dompdf($pdfOptions);
  383.         
  384.     
  385.         $dompdf->getFontMetrics()->registerFont(
  386.             ['family' => 'DejaVu Sans''style' => 'normal''weight' => 'normal'],
  387.             $fontPath '/DejaVuSans.ttf'
  388.         );
  389.         $dompdf->getFontMetrics()->registerFont(
  390.             ['family' => 'DejaVu Sans''style' => 'normal''weight' => 'bold'],
  391.             $fontPath '/DejaVuSans-Bold.ttf'
  392.         ); // you have to set the style (e.g. italic) and weigh
  393.         //$font = $dompdf->getFontMetrics()->get_font("DejaVu Sans", "normal");
  394.         //dd($font);
  395.         $dompdf->loadHtml($html,'UTF-8');
  396.         $dompdf->render();
  397.         //die($html);
  398.         
  399.         $output $dompdf->output();
  400.         //die($output);
  401.         // $dompdf->stream("mypdf.pdf", [
  402.         //     "Attachment" => true
  403.         // ]);
  404.         //die();
  405.         $html = [
  406.             'attributes'    => $attributes,
  407.             'nr'            => $zamowienie->getId(),
  408.             'trader'        => array(
  409.                 'username'        => $user->getName(),
  410.                 'nazwa'            => $user->getPartner()->getNazwa(),
  411.                 'adres'            => $user->getPartner()->getAdres(),
  412.                 'miasto'        => $user->getPartner()->getKod() . ' ' $user->getPartner()->getMiasto(),
  413.                 'tel'            => $user->getPartner()->getTelefon(),
  414.                 'email'            => $user->getEmail()
  415.             )
  416.         ];
  417.     
  418.         $bcc = ['biuro@glazio.pl'];
  419.         $bcc array_unique($bcc);
  420.         // wysylamy email
  421.         $message = (new TemplatedEmail())
  422.             ->subject('Zamówienie nr ' $zamowienie->getId())
  423.             ->from('biuro@glazio.pl')
  424.             ->to($purchaser->getMail());
  425.             foreach($bcc as $foo){
  426.                 $message->bcc($foo);
  427.             }
  428.             $message
  429.             ->context($html)
  430.             ->htmlTemplate('emails/zamowienie.email.html.twig')
  431.             ->attach($output.'.pdf'$filename);
  432.     
  433.             try {
  434.                 $mailer->send($message);
  435.             } catch (TransportExceptionInterface $e) {
  436.                 // some error prevented the email sending; display an
  437.                 // error message or try to resend the message
  438.                 echo $e->getMessage();
  439.             }
  440.         
  441.         
  442.         // $transport = $this->container->get('mailer')->getTransport();
  443.         // $spool = $transport->getSpool();
  444.         // $spool->flushQueue($this->container->get('swiftmailer.transport.real'));
  445.         //unlink($path . $filename);
  446.         $strony $this->siteRepository->findBy([],['sortOrder'=>'ASC']);
  447.         return $this->render('/default/realizuj.html.twig', array('strony'=>$strony));
  448.     }
  449.         /**
  450.         * @Route("/strona_pytanie", name="strona_pytanie")
  451.         */
  452.         public function questionAction(
  453.             Request $request
  454.             PersistenceManagerRegistry $doctrine
  455.             ProduktyRepository $produktyRepository
  456.             AtrybutyGrupyRepository $atrybutyGrupyRepository
  457.             AtrybutyProduktrepository $atrybutyProduktrepository
  458.             UserRepository $userRepository,
  459.             MailerInterface $mailer,
  460.             ParameterBagInterface $parameterBag
  461.             )
  462.         {
  463.             $response = array();
  464.             $attributes = array();
  465.                 // informacje o ustawionych atrybutach
  466.             
  467.             $produkt $produktyRepository->findOneById($request->get('id'));
  468.             $gr $request->get('gr');
  469.             $war $request->get('war');
  470.             foreach($gr as $key => $value) {
  471.                 if(empty($value)) continue;
  472.                 $atrybutyprodukt $atrybutyProduktrepository->findOneById($value);
  473.                 $atrybutygrupy $atrybutyGrupyRepository->findOneById($atrybutyprodukt->getIdGrupy());
  474.                 $attributes[] = array(
  475.                     'grupa'            => $atrybutygrupy->getNazwa(),
  476.                     'nazwa'            => $atrybutyprodukt->getNazwa()
  477.                 );
  478.             }
  479.             foreach($war as $key => $value) {
  480.                 if(empty($value)) continue;
  481.                 $atrybutyprodukt $atrybutyProduktrepository->findOneById($key);
  482.                 $atrybutygrupy $atrybutyGrupyRepository->findOneById($atrybutyprodukt->getIdGrupy());
  483.                 $attributes[] = array(
  484.                     'grupa'            => $atrybutyprodukt->getNazwa(),
  485.                     'nazwa'            => $value
  486.                 );
  487.             }
  488.                 // -- walidacja ----------------
  489.                 // zły nadawca
  490.             if( empty($request->get('sender_name')) ) {
  491.                 $response = array(
  492.                     'name' => 'sender_name',
  493.                     'error' => 'Popraw to pole.'
  494.                 );
  495.                 // zły email
  496.             } else if ( ! filter_var($request->get('sender_email'), FILTER_VALIDATE_EMAIL) ) {
  497.                 $response = array(
  498.                     'name' => 'sender_email',
  499.                     'error' => 'Popraw to pole.'
  500.                 );
  501.                 // wszystko w porządku
  502.             } else {
  503.                     // pobieramy zalogowanego usera
  504.                 
  505.                 $user $userRepository->findOneBy(array('www' => 1));
  506.                     // ceny dla salonu i sklepu
  507.                 $cena_netto $request->get('cena_netto');
  508.                 $cena_brutto $request->get('cena_brutto');
  509.                     // dodatkowe ceny dla salonu, dla sklepu rabat zawsze 0
  510.                 $discount $request->get('rabat_send',0);
  511.                 $cena_rabat_netto $request->get('cena_rabat_netto',0);
  512.                 $cena_rabat_brutto $request->get('cena_rabat_brutto',0);
  513.                 if ($cena_rabat_netto)
  514.                 $discount_value $cena_rabat_netto $cena_netto;
  515.                 else
  516.                 $discount_value 0;
  517.                     // tworzymy załącznik pdf
  518.                 $path './../../public/uploads/pdf/';
  519.                 $filename 'wycena-' sha1(uniqid(mt_rand(), true)) . '.pdf';
  520.                 $pdf_data = array(
  521.                     'attributes'    => $attributes,
  522.                     'product'        => $produkt,
  523.                     'client'        => array(
  524.                             'name'            => $request->get('sender_name'),
  525.                             'tel'            => $request->get('sender_tel'),
  526.                             'email'            => $request->get('sender_email'),
  527.                         ),
  528.                     'trader'        => array(
  529.                             'username'        => $user->getName(),
  530.                             'nazwa'            => $user->getPartner()->getNazwa(),
  531.                             'adres'            => $user->getPartner()->getAdres(),
  532.                             'miasto'        => $user->getPartner()->getKod() . ' ' $user->getPartner()->getMiasto(),
  533.                             'tel'            => $user->getPartner()->getTelefon(),
  534.                             //'email'            => $user->getEmail()
  535.                         ),
  536.                     'image'            => $request->getScheme() . '://' $request->getHttpHost() .'/'$request->getBasePath() . $request->get('image'),
  537.                     'comments'                => $request->get('comments'),
  538.                     'netto'                    => $cena_netto,
  539.                     'brutto'                => $cena_brutto,
  540.                     'vat'                    => $cena_rabat_brutto $cena_rabat_netto,
  541.                     'discount'                => $discount,
  542.                     'discount_value'        => $discount_value,
  543.                     'netto_discount'        => $cena_rabat_netto?$cena_rabat_netto:$cena_netto,
  544.                     'brutto_discount'        => $cena_rabat_brutto?$cena_rabat_brutto:$cena_brutto
  545.                     );
  546.                     //dd($pdf_data);
  547.                 
  548.                     $fontPath $parameterBag->get('kernel.project_dir').'/public/fonts';
  549.             $html =  $this->renderView('/emails/wycena.pdf.html.twig'$pdf_data);
  550.             $pdfOptions = new Options(['isHtml5ParserEnabled' => true'isRemoteEnabled' => true,'fontDir' => $fontPath]);
  551.         $pdfOptions->set('defaultFont''DejaVu Sans');
  552.         $dompdf = new Dompdf($pdfOptions);
  553.         $dompdf->loadHtml($html,'UTF-8');
  554.             $dompdf->render();
  555.             //die($html);
  556.         
  557.         $output $dompdf->output();
  558.                 $body = array(
  559.                                 'attributes'    => $attributes,
  560.                                 'product'        => $produkt,
  561.                                 'client'        => array(
  562.                                         'name'            => $request->get('sender_name'),
  563.                                         'tel'            => $request->get('sender_tel'),
  564.                                         'email'            => $request->get('sender_email'),
  565.                                     ),
  566.                                 'trader'        => array(
  567.                                         'username'        => $user->getName(),
  568.                                         'nazwa'            => $user->getPartner()->getNazwa(),
  569.                                         'adres'            => $user->getPartner()->getAdres(),
  570.                                         'miasto'        => $user->getPartner()->getKod() . ' ' $user->getPartner()->getMiasto(),
  571.                                         'tel'            => $user->getPartner()->getTelefon(),
  572.                                         'email'            => $user->getEmail()
  573.                                     ),
  574.                                 );
  575.                         
  576.                         
  577.     //->setFrom($user->getEmail())
  578.                 $message = (new TemplatedEmail())
  579.                     ->subject('Prośba o wycenę produktu')
  580.                     ->from('biuro@glazio.pl')
  581.                     ->to($request->get('sender_email'))
  582.                     ->cc($user->getEmail())
  583.                     ->context($body,'text/html')
  584.                     ->attach($output.'.pdf'$filename);
  585.                 if( $request->get('username') != 'www') {
  586.                     $message->bcc('biuro@glazio.pl');
  587.                 }
  588.                 try {
  589.                     $mailer->send($message);
  590.                 } catch (TransportExceptionInterface $e) {
  591.                     // some error prevented the email sending; display an
  592.                     // error message or try to resend the message
  593.                     echo $e->getMessage();
  594.                 }
  595.             
  596.                 // $this->get('mailer')->send($message);
  597.                 // $transport = $this->container->get('mailer')->getTransport();
  598.                 // $spool = $transport->getSpool();
  599.                 // $spool->flushQueue($this->container->get('swiftmailer.transport.real'));
  600.                 // unlink($path.$filename);
  601.                 $response['success'] = 'Wiadomość została wysłana.';
  602.             }
  603.             $json = new Response();
  604.             $json->setContent(json_encode($response));
  605.             $json->headers->set('Content-Type''application/json');
  606.             return $json;
  607.         }
  608.     // #[Route('/default', name: 'app_default')]
  609.     // public function index(): Response
  610.     // {
  611.     //     return $this->render('default/index.html.twig', [
  612.     //         'controller_name' => 'DefaultController',
  613.     //     ]);
  614.     // }
  615.     private function imageToBase64($path) {
  616.         $path $path;
  617.         $type pathinfo($pathPATHINFO_EXTENSION);
  618.         $data file_get_contents($path);
  619.         $base64 'data:image/' $type ';base64,' base64_encode($data);
  620.         return $base64;
  621.     }
  622. }