src/Controller/ProductController.php line 456

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use App\Service\TrafficTracker;
  7. use Symfony\Contracts\Translation\TranslatorInterface;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use App\Entity\Partner;
  10. use App\Entity\Productbywholesaler;
  11. use App\Entity\Vendorpartnerlevel;
  12. use App\Entity\Vendors;
  13. use App\Entity\Vendorprogramms;
  14. use App\Entity\Productunit;
  15. use App\Entity\Customer;
  16. use App\Entity\Product;
  17. use App\Entity\Usercart;
  18. use App\Entity\User;
  19. use App\Entity\Agreements;
  20. use App\Entity\Productimages;
  21. use App\Entity\Businessoportinities;
  22. use App\Service\HeaderData;
  23. use App\Service\Translation;
  24. use App\Service\ServiceNotification;
  25. use App\Entity\Productsbusinessoportinities;
  26. use App\Form\Product\EditProduct;
  27. use App\Form\Import\ProductsImport;
  28. use App\Service\RegisterEvent;
  29. use App\Service\ExtensionFileService;
  30. use App\Service\SanitizeService;
  31. use DateTime;
  32. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  33. use Symfony\Component\Serializer\Serializer;
  34. use App\Entity\Payperiod;
  35. use Psr\Log\LoggerInterface;
  36. use App\Service\PriceCalculatorService;
  37. use App\Service\JsonSearchService;
  38. class ProductController extends AbstractController {
  39.     private $priceCalculatorService;
  40.     public function __construct(PriceCalculatorService $priceCalculatorService)
  41.     {
  42.         $this->priceCalculatorService $priceCalculatorService;
  43.     }
  44.     
  45.     /**
  46.      *
  47.      * @Route("/product/default/index/{vendorId}/{status}", name="product_index")
  48.      */
  49.     public function index(Request $requestTranslatorInterface $translatorTrafficTracker $trafficTracker$vendorId 0$status 1) {
  50.         $trafficTracker->registerTraffic();
  51.         $pbwRepository $this->getDoctrine()->getRepository(Productbywholesaler::class);
  52.         $productRepository $this->getDoctrine()->getRepository(Product::class);
  53.         $userRepository $this->getDoctrine()->getRepository(user::class);
  54.         
  55.         $user $this->getUser();
  56.         $vendors = array();
  57.         $userKaty false;
  58.         $miniVendor false;
  59.         $idWholesaler null;
  60.                 
  61.         if ($user->getWholesaler() == null && $user->getPartner() == null && $user->getCustomer() == null && $user->getVendor() == null) {
  62.             $userKaty true;
  63.             $data $productRepository->createQueryBuilder('p')->getQuery()->execute();
  64.             foreach($data as $p){
  65.                 $vendors[$p->getProductline()->getVendor()->getId()]=$p->getProductline()->getVendor()->getName();
  66.             }
  67.             asort($vendors);                       
  68.         }
  69.         elseif($user->getWholesaler()){
  70.             $idWholesaler $user->getWholesaler()->getId();
  71.         }
  72.         $statusArray=array(=> $translator->trans('app.General.All'), => $translator->trans('app.General.Active'), => $translator->trans('app.General.Inactive'));
  73.         
  74.         return $this->render('/product/index.html.twig', array(
  75.             'userKaty' => $userKaty==false 1,
  76.             'vendors' => $vendors,
  77.             'vendorId' => $vendorId,
  78.             'idWholesaler' => $idWholesaler==false $idWholesaler,
  79.             'miniVendor' => $userRepository->isMinivendor($user)==false 1,
  80.             'pbwRepository' => $pbwRepository,
  81.             'statusArray' => $statusArray,
  82.             'status' => $status
  83.         ));
  84.     }
  85.     /**
  86.      * @Route("/server/processing", name="server_processing")
  87.      */
  88.     public function serverProcessing(Request $requestTranslatorInterface $translatorTranslation $translation)
  89.     {
  90.         $entityManager $this->getDoctrine()->getManager();
  91.         $pbwRepository $this->getDoctrine()->getRepository(Productbywholesaler::class);
  92.         $user $this->getUser();
  93.         $locale $request->getLocale();
  94.         $wholesaler $user->getWholesaler() ? $user->getWholesaler()->getId() : null;
  95.         $vendor $user->getVendor() ? $user->getVendor()->getId() : $_GET['vendorId'];
  96.         $status $_GET['status'];
  97.         $columnNames=array();
  98.         $flavoursGroupIds null;
  99.         $statusFilter "";
  100.         if($user->getWholesaler())
  101.         {
  102.             if($status==2){ $statusFilter " AND pbw.unregistrationdate is null"; }
  103.             if($status==3){ $statusFilter " AND pbw.unregistrationdate is not null"; }
  104.         }
  105.         else{
  106.             if($status==2){ $statusFilter " AND p.unregistrationdate is null"; }
  107.             if($status==3){ $statusFilter " AND p.unregistrationdate is not null"; }
  108.         }
  109.         if($user->getWholesaler())
  110.         {
  111.             //BUSCAMOS primero por sku en los flavours de Productbywholesaler
  112.             if (!empty($_GET['search']['value'])) {
  113.                 $flavours 'SELECT DISTINCT p.groupid FROM App\Entity\Productbywholesaler pbw JOIN pbw.product p JOIN p.productLine pl JOIN pl.vendor v where v.isminivendor = 0 and pbw.wholesaler = :wholesaler and p.productType is null and (p.sku like :sku OR p.name like :name)';
  114.                 
  115.                 $flavoursGroupIds $entityManager
  116.                     ->createQuery($flavours)
  117.                     ->setParameter('wholesaler'$wholesaler)
  118.                     ->setParameter('sku''%'.$_GET['search']['value'].'%')
  119.                     ->setParameter('name'$_GET['search']['value'])
  120.                     ->getResult();
  121.             }
  122.         }
  123.         else{
  124.             //BUSCAMOS primero por sku en los flavours de Product
  125.             if (!empty($_GET['search']['value'])) {
  126.                 $flavours 'SELECT DISTINCT p.groupid FROM App\Entity\Product p JOIN p.productLine pl JOIN pl.vendor v where ';
  127.                 if ($vendor!=0) {
  128.                     $flavours .= 'v.id = :vendor and ';
  129.                 }
  130.                 $flavours .= 'p.productType is null and (p.sku like :sku OR p.name like :name)';
  131.                 
  132.                 $flavoursGroupIds $entityManager->createQuery($flavours);
  133.                 if ($vendor!=0) {
  134.                     $flavoursGroupIds $flavoursGroupIds->setParameter('vendor'$vendor);  
  135.                 }   
  136.                 $flavoursGroupIds $flavoursGroupIds
  137.                     ->setParameter('sku''%'.$_GET['search']['value'].'%')
  138.                     ->setParameter('name'$_GET['search']['value'])
  139.                     ->getResult();
  140.             }    
  141.         }
  142.         
  143.         if($user->getWholesaler())
  144.         {
  145.             $dql 'SELECT pbw FROM App\Entity\Productbywholesaler pbw JOIN pbw.product p JOIN p.payPeriod pp JOIN p.productLine pl JOIN pl.vendor v where v.isminivendor = 0 and pbw.wholesaler = :wholesaler and p.productType is not null'.$statusFilter;
  146.             $dqlCountFiltered 'SELECT count(pbw) FROM App\Entity\Productbywholesaler pbw JOIN pbw.product p JOIN p.payPeriod pp JOIN p.productLine pl JOIN pl.vendor v where v.isminivendor = 0 and pbw.wholesaler = :wholesaler and p.productType is not null'.$statusFilter;
  147.         }
  148.         else
  149.         {
  150.             $dql 'SELECT p FROM App\Entity\Product p JOIN p.productLine pl JOIN pl.vendor v where ';
  151.             if($vendor!=0){$dql .= 'pl.vendor = :vendor and ';}
  152.             $dql .= 'p.productType is not null'.$statusFilter;
  153.             
  154.             $dqlCountFiltered 'SELECT count(p) FROM App\Entity\Product p JOIN p.productLine pl JOIN pl.vendor v where ';
  155.             if($vendor!=0){$dqlCountFiltered .= 'pl.vendor = :vendor and ';}
  156.             $dqlCountFiltered .= 'p.productType is not null'.$statusFilter;
  157.         }
  158.         $sqlFilter '';
  159.         if($user->getWholesaler())
  160.         {
  161.             if (!empty($_GET['search']['value'])) {
  162.                 $strMainSearch $_GET['search']['value'];
  163.                 $sqlFilter .= " (v.name LIKE '%".$strMainSearch."%' OR "
  164.                     ."pl.name LIKE '%".$strMainSearch."%' OR "
  165.                     ."p.name LIKE '%".$strMainSearch."%' OR ("
  166.                     ."p.sku LIKE '%".$strMainSearch."%' OR p.id IN (:flavoursGroupIds)) OR "
  167.                     ."p.duration LIKE '%".$strMainSearch."%' OR "
  168.                     ."pp.period LIKE '%".$strMainSearch."%' OR "
  169.                     ."pbw.price LIKE '%".$strMainSearch."%')";
  170.             }
  171.             $columnNames=[
  172.                 '0' => '',
  173.                 '1' => 'pl.vendor.name',
  174.                 '2' => 'pl.name',
  175.                 '3' => 'p.name',
  176.                 '4' => 'p.sku',
  177.                 '5' => 'p.duration',
  178.                 '6' => 'pbw.price',
  179.                 '7' => '',
  180.                 '8' => ''
  181.             ];
  182.         }
  183.         else{
  184.             if (!empty($_GET['search']['value'])) {
  185.                 $strMainSearch $_GET['search']['value'];
  186.                 $sqlFilter .= " (v.name LIKE '%".$strMainSearch."%' OR "
  187.                     ."pl.name LIKE '%".$strMainSearch."%' OR "
  188.                     ."p.name LIKE '%".$strMainSearch."%' OR "
  189.                     ."p.sku LIKE '%".$strMainSearch."%' OR p.id IN (:flavoursGroupIds) OR "
  190.                     ."p.duration LIKE '%".$strMainSearch."%') ";
  191.             }
  192.             $columnNames=[
  193.                 '0' => '',
  194.                 '1' => 'pl.vendor.name',
  195.                 '2' => 'pl.name',
  196.                 '3' => 'p.name',
  197.                 '4' => 'p.sku',
  198.                 '5' => 'p.duration',
  199.                 '6' => '',
  200.                 '7' => ''
  201.             ];
  202.         }
  203.         
  204.         if (!empty($sqlFilter)) {
  205.             $dql .= ' AND'.$sqlFilter;
  206.             $dqlCountFiltered .= ' AND'.$sqlFilter;
  207.         }
  208.         if (!empty($_GET['order']['0']['column']!=1)) {
  209.             $dql .= ' ORDER BY '.$columnNames[$_GET["order"][0]["column"]].' '.$_GET["order"][0]["dir"];
  210.         }
  211.         else{
  212.             $dql .= ' ORDER BY v.name ASC';
  213.         }
  214.         if($user->getWholesaler())
  215.         {
  216.             $items $entityManager
  217.                 ->createQuery($dql)
  218.                 ->setParameter('wholesaler'$wholesaler)
  219.                 ->setFirstResult($_GET['start']);
  220.             if ($_GET['length']!=-1) {
  221.                 $items=$items->setMaxResults($_GET['length']);
  222.             }       
  223.             if (!empty($sqlFilter)) {
  224.                 $items=$items->setParameter('flavoursGroupIds'$flavoursGroupIds);
  225.             }
  226.         }
  227.         else
  228.         {
  229.             $items $entityManager
  230.                 ->createQuery($dql)               
  231.                 ->setFirstResult($_GET['start']);
  232.             if ($_GET['length']!=-1) {
  233.                 $items=$items->setMaxResults($_GET['length']);
  234.             }    
  235.             if ($vendor!=0) {
  236.                 $items=$items->setParameter('vendor'$vendor);
  237.             }
  238.             if (!empty($sqlFilter)) {
  239.                 $items=$items->setParameter('flavoursGroupIds'$flavoursGroupIds);
  240.             }
  241.         }
  242.         $items $items->getResult();
  243.         $data = [];
  244.         if($user->getWholesaler())
  245.         {
  246.             //with WHOLESALER PROFILE we work with PRODUCTBYWHOLESALER entity
  247.             foreach ($items as $key => $value) {
  248.                 $url $this->generateUrl('product_editproduct', array('id' => $value->getId()));
  249.                 $status is_null($value->getUnregistrationDate()) ? "<span class='label label-success'>".$translator->trans('app.General.Active')."</span>" "<span class='label label-danger'>".$translator->trans('app.General.Inactive')."</span>";
  250.                 $circle = ($value->getProduct()->getProductType()->getId()!=|| !is_null($value->getProduct()->getRenovationProduct())) ? "<i class='base fa fa-lg fa-fw m-r-10 fa-plus-circle' group='".$value->getProduct()->getGroupId()."' style='pointer:cursor;'></i>" "" ;
  251.                 $currency $user->getWholesaler()->getCurrency()->getIso();
  252.                 $currencyFormat = new \NumberFormatter($request->getLocale(), \NumberFormatter::CURRENCY);
  253.                 $data[] = [
  254.                     'DT_RowId' => $value->getId(),                 
  255.                     $circle,
  256.                     $value->getProduct()->getProductline()->getVendor()->getName(),
  257.                     $value->getProduct()->getProductline()->getName(),
  258.                     "<span title='".$value->getProduct()->getName()."'><a href='".$url."' >".$value->getProduct()->getName()."</a></span>",
  259.                     $value->getProduct()->getSku(),
  260.                     $value->getProduct()->getDuration(),
  261.                     $currencyFormat->formatCurrency(round($pbwRepository->getPrice($value), 2), $currency),
  262.                     $translation->getTranslationBy($value->getProduct()->getPayperiod(), $locale'period'),
  263.                     $status,
  264.                 ];
  265.             }
  266.         
  267.             $recordsTotal $entityManager
  268.                 ->createQuery('SELECT count(pbw) FROM App\Entity\Productbywholesaler pbw JOIN pbw.product p JOIN p.payPeriod pp JOIN p.productLine pl JOIN pl.vendor v where v.isminivendor = 0 and pbw.wholesaler = :wholesaler and p.productType is not null')
  269.                 ->setParameter('wholesaler'$wholesaler)
  270.                 ->getSingleScalarResult();
  271.             $recordsFiltered $entityManager
  272.                 ->createQuery($dqlCountFiltered)
  273.                 ->setParameter('wholesaler'$wholesaler);
  274.             if (!empty($sqlFilter)) {
  275.                 $recordsFiltered=$recordsFiltered->setParameter('flavoursGroupIds'$flavoursGroupIds);
  276.             }
  277.             $recordsFiltered $recordsFiltered->getSingleScalarResult();
  278.         }
  279.         else
  280.         {
  281.             //with MINIVENDORS and KATY PROFILES we work with PRODUCT entity
  282.             foreach ($items as $key => $value) {
  283.                 $url $this->generateUrl('product_editproduct', array('id' => $value->getId()));
  284.                 $status is_null($value->getUnregistrationDate()) ? "<span class='label label-success'>".$translator->trans('app.General.Active')."</span>" "<span class='label label-danger'>".$translator->trans('app.General.Inactive')."</span>";
  285.                 $circle = ($value->getProductType()->getId()!=|| !is_null($value->getRenovationProduct())) ? "<i class='base fa fa-lg fa-fw m-r-10 fa-plus-circle' group='".$value->getGroupId()."' style='pointer:cursor;'></i>" "" ;
  286.                 $data[] = [
  287.                     'DT_RowId' => $value->getId(),
  288.                     $circle,
  289.                     $value->getProductline()->getVendor()->getName(),
  290.                     $value->getProductline()->getName(),
  291.                     "<span title='".$value->getName()."'><a href='".$url."' >".$value->getName()."</a></span>",
  292.                     $value->getSku(),
  293.                     $value->getDuration(),
  294.                     $translation->getTranslationBy($value->getPayperiod(), $locale'period'),
  295.                     $status,
  296.                 ];
  297.             }
  298.             $queryRecordsTotal='';
  299.             if ($vendor!=0) {
  300.                 $queryRecordsTotal='SELECT count(p) FROM App\Entity\Product p JOIN p.productLine pl JOIN pl.vendor v where pl.vendor = :vendor and p.productType is not null';
  301.             }
  302.             else{
  303.                 $queryRecordsTotal='SELECT count(p) FROM App\Entity\Product p JOIN p.productLine pl where p.productType is not null';
  304.             }
  305.             $recordsTotal $entityManager->createQuery($queryRecordsTotal);
  306.             if ($vendor!=0) {
  307.                 $recordsTotal=$recordsTotal->setParameter('vendor'$vendor);
  308.             }      
  309.             $recordsTotal $recordsTotal->getSingleScalarResult();
  310.             $recordsFiltered $entityManager
  311.                 ->createQuery($dqlCountFiltered);
  312.             if ($vendor!=0) {
  313.                 $recordsFiltered=$recordsFiltered->setParameter('vendor'$vendor);
  314.             }    
  315.             if (!empty($sqlFilter)) {
  316.                 $recordsFiltered=$recordsFiltered->setParameter('flavoursGroupIds'$flavoursGroupIds);
  317.             }
  318.             $recordsFiltered $recordsFiltered->getSingleScalarResult();
  319.         }    
  320.         
  321.         return $this->json([
  322.             'recordsTotal' => $recordsTotal,
  323.             'recordsFiltered' => $recordsFiltered,
  324.             'data' => $data,
  325.             'dql' => $dql,
  326.             'groupIds' => $flavoursGroupIds,
  327.             'dqlCountFiltered' => $dqlCountFiltered,
  328.         ]);
  329.     }
  330.     /**
  331.      * @Route("/product/default/exportproducts", name="product_export")
  332.      */
  333.     public function exportProducts(Request $requestTrafficTracker $trafficTrackerTranslatorInterface $translator) {
  334.         $trafficId $trafficTracker->registerTraffic();
  335.         $user $this->getUser();
  336.         $entityManager $this->getDoctrine()->getManager();
  337.         $pbwRepository $this->getDoctrine()->getRepository(Productbywholesaler::class);
  338.         $entityIds $request->request->get('entityIds');
  339.         $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
  340.         $sheet $spreadsheet->getActiveSheet();
  341.         $sheet->SetCellValue('A1'$translator->trans('app.General.Vendor'));
  342.         $sheet->SetCellValue('B1'$translator->trans('app.General.ProductLine'));
  343.         $sheet->SetCellValue('C1'$translator->trans('app.General.Name'));
  344.         $sheet->SetCellValue('D1'$translator->trans('app.General.SKU'));
  345.         $sheet->SetCellValue('E1'$translator->trans('app.General.Duration'));
  346.         if ($user->getWholesaler()) {
  347.             $sheet->SetCellValue('F1'$translator->trans('app.General.Price'));
  348.             $sheet->SetCellValue('G1'$translator->trans('app.LicenseManager.PaymentPeriod'));
  349.             $sheet->SetCellValue('H1'$translator->trans('app.General.Status'));      
  350.         }
  351.         else{
  352.             $sheet->SetCellValue('F1'$translator->trans('app.LicenseManager.PaymentPeriod'));
  353.             $sheet->SetCellValue('G1'$translator->trans('app.General.Status'));
  354.         }
  355.         if ($user->getWholesaler()) {
  356.             $groupIds $entityManager
  357.             ->createQuery('SELECT p.groupid FROM App\Entity\Productbywholesaler pbw JOIN pbw.product p JOIN p.productLine pl JOIN pl.vendor v where v.isminivendor = 0 and pbw.wholesaler = :wholesaler and pbw.id IN (:pbwIds)')
  358.             ->setParameter('wholesaler'$user->getWholesaler())
  359.             ->setParameter('pbwIds'$entityIds)
  360.             ->getResult();
  361.             $pbws $entityManager
  362.             ->createQuery('SELECT pbw FROM App\Entity\Productbywholesaler pbw JOIN pbw.product p where  p.groupid IN (:groupIds) and pbw.wholesaler = :wholesaler')
  363.             ->setParameter('wholesaler'$user->getWholesaler())
  364.             ->setParameter('groupIds'$groupIds)
  365.             ->getResult();
  366.             $pos 2;
  367.             foreach ($pbws as $pbw) {
  368.                 $sheet->SetCellValue('A' $pos$pbw->getProduct()->getProductline()->getVendor()->getName());
  369.                 $sheet->SetCellValue('B' $pos$pbw->getProduct()->getProductline()->getName());
  370.                 $sheet->SetCellValue('C' $pos$pbw->getProduct()->getName());
  371.                 $sheet->SetCellValue('D' $pos$pbw->getProduct()->getSku());
  372.                 $sheet->SetCellValue('E' $pos$pbw->getProduct()->getDuration());
  373.                 $currency $user->getWholesaler()->getCurrency()->getIso();
  374.                 $currencyFormat = new \NumberFormatter($request->getLocale(), \NumberFormatter::CURRENCY);
  375.                 $sheet->SetCellValue('F' $pos$currencyFormat->formatCurrency(round($pbwRepository->getPrice($pbw), 2), $currency));
  376.                 $sheet->SetCellValue('G' $pos$pbw->getProduct()->getPayperiod()->getPeriod());
  377.                 $sheet->SetCellValue('H' $pos, !is_null($pbw->getUnregistrationdate()) ? $translator->trans('app.General.Inactive') : $translator->trans('app.General.Active'));         
  378.                 $pos++;
  379.             }
  380.         }
  381.         else{
  382.             $products $entityManager
  383.             ->createQuery('SELECT p FROM App\Entity\Product p where  p.groupid IN (:groupIds)')
  384.             ->setParameter('groupIds'$entityIds)
  385.             ->getResult();
  386.             $pos 2;
  387.             foreach ($products as $p) {
  388.                 $sheet->SetCellValue('A' $pos$p->getProductline()->getVendor()->getName());
  389.                 $sheet->SetCellValue('B' $pos$p->getProductline()->getName());
  390.                 $sheet->SetCellValue('C' $pos$p->getName());
  391.                 $sheet->SetCellValue('D' $pos$p->getSku());
  392.                 $sheet->SetCellValue('E' $pos$p->getDuration());
  393.                 $sheet->SetCellValue('F' $pos$p->getPayperiod()->getPeriod());
  394.                 $sheet->SetCellValue('G' $pos$p->getDuration());         
  395.                 $pos++;
  396.             }
  397.         }     
  398.         
  399.         $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
  400.         $fileName 'orders_' date('Y-m-d') . '.xlsx';
  401.         header('Content-Type: application/vnd.ms-excel');
  402.         header('Content-Disposition: attachment; filename="' urlencode($fileName) . '"');
  403.         header('Cache-Control: max-age=0');
  404.         ob_start();
  405.         $writer->save('php://output');
  406.         $xlsData ob_get_contents();
  407.         ob_end_clean();
  408.         $response = array('op' => 'ok''file' => "data:application/vnd.ms-excel;base64," base64_encode($xlsData));
  409.         die(json_encode($response));
  410.     }
  411.     
  412.     
  413.     /**
  414.      *
  415.      * @Route("/product/default/editproduct/{id}", name="product_editproduct", requirements={"id"="\d+"})
  416.      */
  417.     public function editproduct(Request $requestTrafficTracker $trafficTrackerTranslatorInterface $translatorTranslation $translationRegisterEvent $registerEventSanitizeService $sanitizeServiceJsonSearchService $jsonSearchService$id 0ExtensionFileService $extensionFileService) {
  418.          
  419.         $trafficTracker->registerTraffic();
  420.         $entityManager $this->getDoctrine()->getManager();
  421.         $productRepository $this->getDoctrine()->getRepository(Product::class);
  422.         $pbwRepository $this->getDoctrine()->getRepository(Productbywholesaler::class);
  423.         $userRepository $this->getDoctrine()->getRepository(User::class);
  424.         $licensetypeRepository $this->getDoctrine()->getRepository(\App\Entity\Licensetype::class);
  425.         $locale $request->getLocale();
  426.         $session $this->get('session');
  427.         $productQ $productRepository->find($id);        
  428.         $user $this->getUser();
  429.         $currency = array();
  430.         $control false;
  431.         $userKaty null;  
  432.         $isBasePrice false;     
  433.         if ($user->getWholesaler()) {
  434.             $product $entityManager->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw "               
  435.                 'where pbw.wholesaler = :idWholesaler and pbw.id = :id ')
  436.                 ->setParameter('idWholesaler'$this->getUser()->getWholesaler()->getId())
  437.                 ->setParameter('id'$id)
  438.                 ->getOneOrNullResult();
  439.             
  440.             if (!is_null($product)) { $isBasePrice $productRepository->isBasePriceProduct($product->getProduct()); }
  441.               
  442.         }
  443.         else if ($user->getVendor()) {
  444.             
  445.             if (!$productQ) {
  446.                 
  447.                 return $this->redirectToRoute('product_index');
  448.             }
  449.             
  450.             $product $entityManager->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw "               
  451.                 'where pbw.product = :product ')
  452.                 ->setParameter('product'$productQ)
  453.                 ->getResult();
  454.             
  455.             $isBasePrice $productRepository->isBasePriceProduct($productQ);    
  456.         }
  457.         else if ($user->getPartner() == null && $user->getCustomer() == null) {
  458.             $userKaty true;
  459.             $product $productRepository->find($id);
  460.         }
  461.         if (!$product) { return $this->redirectToRoute('product_index'); }
  462.         $productImages = array();
  463.         $productCover = array();
  464.         $productBwImages = array();
  465.         $cont = array();
  466.         if ($this->getUser()->getWholesaler()) {
  467.             if ($product->getUnregistrationdate() != null) {
  468.                 $active false;
  469.             }
  470.             else {
  471.                 $active true;
  472.             }
  473.             $data = array(
  474.               'precio' => $pbwRepository->getPrice($productfalse) ? $pbwRepository->getPrice($productfalse) : 0,
  475.               'active' => $active,
  476.               'description' => $product->getDescription(),
  477.               'saleTerms' => $product->getSaleTerms(),
  478.               'requirements' => $product->getRequirements(),
  479.               //'stock' => 0,
  480.               //'allowOverage' => true,
  481.               //'overage' => 0,
  482.               'isHardware' => $product->getProduct()->getIsHardware(),
  483.               'isBasePrice' => $isBasePrice,
  484.               'basePrice' => $product->getBasePrice(),
  485.               'isMain' => $product->getProduct()->getId()==$product->getProduct()->getGroupid() ? true false
  486.             );
  487.         }
  488.         else if ($this->getUser()->getVendor()) {
  489.             foreach ($product as $p) {
  490.                 if ($p->getUnregistrationdate() != null) {
  491.                     $active false;
  492.                 }
  493.                 else {
  494.                     $active true;
  495.                 }
  496.                 $data[$p->getId()] = array(
  497.                   'id' => $p->getId(),
  498.                   'country' => $p->getWholesaler()->getCountry()->getAlpha3Code(),
  499.                   'precio' => $pbwRepository->getPrice($pfalse) ? $pbwRepository->getPrice($pfalse) : 0,
  500.                   'active' => $active,
  501.                   'description' => $p->getDescription(),
  502.                   'saleTerms' => $p->getSaleTerms(),
  503.                   'requirements' => $p->getRequirements(),
  504.                 ); 
  505.             }
  506.         }
  507.         else if ($userKaty) {
  508.             
  509.             if ($product->getUnregistrationdate() != null) {
  510.                 $active false;
  511.             }
  512.             else {
  513.                 $active true;
  514.             }
  515.             $data = array(
  516.               'active' => $active,
  517.             );            
  518.             
  519.         }
  520.         $form $this->createForm(EditProduct::class, null, array(
  521.             'translator' => $translator,
  522.             'productQ' => $productQ,
  523.             'data' => $data,
  524.             'user' => $user,
  525.             'userKaty' => $userKaty,
  526.         ));
  527.         
  528.         $form->handleRequest($request);
  529.         // If cancelled
  530.         if ($form->getClickedButton() && 'cancel' === $form->getClickedButton()->getName()) {          
  531.             $this->get('session')->getFlashBag()->add('warning'$translator->trans('app.General.SystemMessages.NoChanges'));
  532.             return $this->redirectToRoute('product_index');        
  533.         }
  534.         if ($userKaty || $user->getVendor() && $productQ->getIsFlavour() == && $productQ->getCanSellAlone() == 1) {
  535.             //Delete coverImage
  536.             if ($form->isSubmitted() && $form->isValid() && $form->get('deletecoverImage')->isClicked()) {
  537.                 $post $form->getData();
  538.                 $selectedimages $post['selecteditemsCover'];
  539.                 $selectedimagesarray explode(','$selectedimages);
  540.                 $this->deleteImages($translator$id$selectedimagesarray$session$extensionFileService);
  541.                 return $this->redirectToRoute('product_editproduct', array('id' => $id));     
  542.             }
  543.         }
  544.         
  545.         
  546.         if ($userKaty || $user->getWholesaler() || $user->getVendor() && $productQ->getIsFlavour() == && $productQ->getCanSellAlone() == 1) {        
  547.             
  548.             //Delete images           
  549.             if ($form->isSubmitted() && $form->isValid() && $form->get('deleteImages')->isClicked()) { 
  550.                 $post $form->getData();
  551.                 $selectedimages $post['selecteditems'];
  552.                 $selectedimagesarray explode(','$selectedimages);
  553.                 $this->deleteImages($translator$id$selectedimagesarray$session$extensionFileService);
  554.                 return $this->redirectToRoute('product_editproduct', array('id' => $id));     
  555.             }
  556.                        
  557.             if ($user->getVendor()) {
  558.                 foreach ($product as $p) {
  559.                     if ($form->isSubmitted() && $form->isValid() && $form->get('deletepbwImages_' $p->getId())->isClicked()) {
  560.                         $post $form->getData();
  561.                         $selectedimages $post['selecteditemsPbwImages_' $p->getId()];
  562.                         $selectedimagesarray explode(','$selectedimages);
  563.                         $this->deleteImages($translator$id$selectedimagesarray$session$extensionFileService);
  564.                         $control true;
  565.                     }
  566.                 }
  567.                 if ($control == true) {
  568.                     return $this->redirectToRoute('product_editproduct', array('id' => $id));    
  569.                 }
  570.             }
  571.         }
  572.             
  573.         if ($form->isSubmitted() and $form->isValid()) {          
  574.             $post $form->getData();
  575.             if ($user->getWholesaler()) {
  576.                 if ($post['active']) {                  
  577.                     $prd $productRepository->find($product->getProduct());                   
  578.                     if ($prd->getId() == $prd->getGroupId()) {
  579.                                               
  580.                         $prdGroup $entityManager->createQuery('SELECT p FROM App\Entity\Product p '            
  581.                             'where p.groupid = :groupId ')
  582.                             ->setParameters(array('groupId' => $prd->getGroupId()))
  583.                             ->getResult();
  584.                         
  585.                         $pbwToActive $pbwRepository->createQueryBuilder('pbw'
  586.                             ->andWhere('pbw.wholesaler = :idWholesaler and pbw.product IN (:products)')    
  587.                             ->setParameters(array('idWholesaler'=> $user->getWholesaler(), 'products'=> $prdGroup))
  588.                             ->getQuery()
  589.                             ->getResult();
  590.                                         
  591.                         foreach ($pbwToActive as $pbw) {
  592.                             $pbw->setUnregistrationdate(null);
  593.                             $entityManager->persist($pbw);
  594.                             $entityManager->flush();
  595.                         }
  596.                     }
  597.                     else {
  598.                         $product->setUnregistrationdate(null);
  599.                     }
  600.                 }
  601.                 else if(!$product->getUnregistrationdate() && $post['active'] == false){
  602.                     $prd $productRepository->find($product->getProduct());
  603.                     if ($prd->getId() == $prd->getGroupId()) {
  604.                         $prdGroup $entityManager->createQuery('SELECT p FROM App\Entity\Product p '            
  605.                             'where p.groupid = :groupId ')
  606.                             ->setParameters(array('groupId' => $prd->getGroupId()))
  607.                             ->getResult();
  608.                         
  609.                         $pbwToDelete $pbwRepository->createQueryBuilder('pbw'
  610.                             ->andWhere('pbw.wholesaler = :idWholesaler and pbw.product IN (:products)')    
  611.                             ->setParameters(array('idWholesaler'=> $user->getWholesaler(), 'products'=> $prdGroup))
  612.                             ->getQuery()
  613.                             ->getResult();
  614.                         foreach ($pbwToDelete as $pbw) {
  615.                             $pbw->setUnregistrationdate(new \DateTime());
  616.                             $entityManager->persist($pbw);
  617.                             $entityManager->flush();
  618.                         }
  619.                     }
  620.                     else {
  621.                         $product->setUnregistrationdate(new \DateTime());
  622.                     }
  623.                 }
  624.                 if($sanitizeService->getSanitize($form->get('description')->getData())){
  625.                     $product->setDescription($form['description']->getData());                                  
  626.                 }else{
  627.                     $product->setDescription('');              
  628.                 }
  629.                 if($sanitizeService->getSanitize($form->get('requirements')->getData())){
  630.                     $product->setRequirements($form['requirements']->getData());                                  
  631.                 }else{
  632.                     $product->setRequirements('');              
  633.                 }
  634.                 if($sanitizeService->getSanitize($form->get('saleTerms')->getData())){
  635.                     $product->setSaleTerms($form['saleTerms']->getData());                                  
  636.                 }else{
  637.                     $product->setSaleTerms('');              
  638.                 }
  639.                 
  640.                 $product->setPrice($post['Price']);
  641.                 if($isBasePrice){$product->setBasePrice($post['BasePrice']);}              
  642.                 $entityManager->persist($product);
  643.                 $entityManager->flush();
  644.             }
  645.             
  646.             if ($user->getVendor()) {
  647.                 foreach ($product as $p) {
  648.                     $p->setPrice($post['Price_' $p->getId()]);
  649.                     if ($user->getWholesaler() || $user->getVendor() && $productQ->getIsFlavour() == && $productQ->getCanSellAlone() == 1) {
  650.                         $p->setDescription($post['description_' $p->getId()]);
  651.                         $p->setSaleTerms($post['saleTerms_' $p->getId()]);
  652.                         $p->setRequirements($post['requirements_' $p->getId()]);
  653.                     }
  654.                     $entityManager->persist($p);
  655.                     $entityManager->flush();
  656.                 }
  657.             }         
  658.             
  659.             //Save the images in the product If there is an attachment
  660.             if (!empty($post['attachment_'])) {
  661.                 $postType "attachment_";
  662.                 $this->addImages($id$product$post['attachment_'], $userKaty$postType$translator$registerEvent$session);
  663.             }
  664.             foreach ($product as $p) {
  665.                 if (!empty($post['pbwImages_' $p->getId()])) {
  666.                     $postType "attachmentpbw_";
  667.                     $this->addImages($id$p$post['pbwImages_' $p->getId()], $userKaty$postType$translator$registerEvent$session);
  668.                 }
  669.             }
  670.             
  671.             if (!empty($post['coverImage_'])) {
  672.                 $imageCover $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '            
  673.                     'where pi.product = :product and pi.iscoverimage = 1 ')
  674.                     ->setParameters(array('product' => $productQ))
  675.                     ->getResult();    
  676.                 if (sizeof($imageCover) != 0) {
  677.                     $this->get('session')->getFlashBag()->add('danger'$translator->trans('app.General.SystemMessages.LimitExceeded'));
  678.                     return $this->redirectToRoute('product_editproduct', array('id' => $id)); 
  679.                 }
  680.                 $postType "coverImage_";
  681.                 $this->addImages($id$product$post['coverImage_'], $userKaty$postType$translator$registerEvent$session);
  682.             }            
  683.       
  684.             
  685.             if ($session->getFlashBag()->keys() == null
  686.             {
  687.                 
  688.                 if ($form->getClickedButton() && 'save' === $form->getClickedButton()->getName()) {
  689.                     $session->getFlashBag()->add('success'$translator->trans('app.General.SystemMessages.ChangesSaved'));
  690.                     return $this->redirectToRoute('product_index'); 
  691.                 }
  692.                 
  693.                 
  694.                 if ($user->getVendor()) {
  695.                   foreach ($product as $p) {
  696.                       if ($form->isSubmitted() && $form->isValid() && $form->get('save_view_' $p->getId())->isClicked()) {  
  697.                           if ($p->getUnregistrationdate()) { 
  698.                             $session->getFlashBag()->add('success'$translator->trans('app.General.SystemMessages.ChangesSaved'));
  699.                           }
  700.                           else {
  701.                             return $this->redirectToRoute('catalog_view', array('id' => $p->getId())); 
  702.                           }
  703.                       }
  704.                   }
  705.                 }
  706.                 
  707.                                
  708.                 if (!$user->getVendor() && $form->getClickedButton() && 'save_view' === $form->getClickedButton()->getName()) {
  709.                     if ($product->getUnregistrationdate()) {
  710.                         $session->getFlashBag()->add('success'$translator->trans('app.General.SystemMessages.ChangesSaved'));
  711.                         return $this->redirectToRoute('product_index'); 
  712.                     }
  713.                     else {
  714.                         return $this->redirectToRoute('catalog_view', array('id' => $id)); 
  715.                     }
  716.                 }
  717.             }           
  718.             else {
  719.                 foreach ($session->getFlashBag()->all()['danger'] as $a) {
  720.                     $session->getFlashBag()->add('danger'$a);
  721.                 }
  722.                 return $this->redirectToRoute('product_editproduct', array('id' => $id)); 
  723.             }
  724.             
  725.         }
  726.         
  727.         if ($this->getUser()->getWholesaler()) {
  728.             $images $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '            
  729.             'where pi.productByWholesaler = :pbw and pi.iscoverimage = 0 ')
  730.             ->setParameters(array('pbw' => $product))
  731.             ->getResult();           
  732.         }       
  733.         else if ($user->getVendor()) {
  734.             
  735.             $images $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '            
  736.             'where pi.product = :product and pi.iscoverimage = 0 and pi.productByWholesaler is null ')
  737.             ->setParameters(array('product' => $productQ))
  738.             ->getResult();
  739.           
  740.             foreach ($product as $pId) {
  741.                 $IdW[] = $pId->getId();
  742.             }
  743.             
  744.             $imagespbw $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '            
  745.             'where pi.productByWholesaler IN (:pbw) and pi.iscoverimage = 0 ')
  746.             ->setParameters(array('pbw' => $IdW))
  747.             ->getResult();
  748.             
  749.             if (!empty($imagespbw)) {
  750.                 for ($pos 0$pos sizeof($imagespbw); $pos++) {
  751.                     $productBwImages[] = [
  752.                       'id' => $imagespbw[$pos]->getId(),
  753.                       'pbwId' => $imagespbw[$pos]->getProductByWholesaler()->getId(),
  754.                       'path' => '/uploads/images/productImages/' $imagespbw[$pos]->getImageName(),
  755.                       'default' => $imagespbw[$pos]->getIsDefaultImage(),
  756.                       'cover' => $imagespbw[$pos]->getIsCoverImage()
  757.                     ];
  758.                 }
  759.                 for ($pos 0$pos sizeof($imagespbw); $pos++) {
  760.                     $cont[$imagespbw[$pos]->getProductByWholesaler()->getId()] = [];
  761.                 }
  762.             }
  763.             $imageCover $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '            
  764.                     'where pi.product = :product and pi.iscoverimage = 1 ')
  765.                     ->setParameters(array('product' => $productQ))
  766.                     ->setMaxResults(1
  767.                     ->getOneOrNullResult();
  768.             
  769.         }        
  770.         else if ($userKaty) {
  771.             $productQ $product;
  772.          
  773.             $images $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '            
  774.             'where pi.product = :product and pi.productByWholesaler is null and pi.iscoverimage = 0 ')
  775.             ->setParameters(array('product' => $productQ))
  776.             ->getResult();
  777.             
  778.             $imageCover $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '            
  779.             'where pi.product = :product and pi.iscoverimage = 1 ')
  780.             ->setParameters(array('product' => $productQ))
  781.             ->setMaxResults(1)        
  782.             ->getOneOrNullResult();
  783.         }
  784.                 
  785.         if (!empty($images)) {
  786.             for ($pos 0$pos sizeof($images); $pos++) {
  787.                 $productImages[] = [
  788.                   'id' => $images[$pos]->getId(),
  789.                   'path' => '/uploads/images/productImages/' $images[$pos]->getImageName(),
  790.                   'default' => $images[$pos]->getIsDefaultImage(),
  791.                   'cover' => $images[$pos]->getIsCoverImage()
  792.                 ];
  793.             }
  794.         }
  795.         if (!empty($imageCover)) {
  796.             $productCover = [
  797.               'id' => $imageCover->getId(),
  798.               'path' => '/uploads/images/productImages/' $imageCover->getImageName(),
  799.               'default' => $imageCover->getIsDefaultImage(),
  800.               'cover' => $imageCover->getIsCoverImage()
  801.             ];
  802.         }
  803.         if ($this->getUser()->getWholesaler()) {
  804.             $productQ $product->getProduct();
  805.         }
  806.         
  807.         if ($this->getUser()->getVendor()) {
  808.             foreach ($product as $item) {
  809.                 $agreement $entityManager->createQuery('SELECT a FROM App\Entity\Agreements a '            
  810.                     'where a.programm = :programm and a.wholesaler = :wholesaler ')
  811.                     ->setParameters(array('programm' => $productQ->getVendorProgramm()->getId(), 'wholesaler'=>$item->getWholesaler()->getId()))
  812.                     ->setMaxResults(1)
  813.                     ->getOneOrNullResult();
  814.  
  815.                 $currency[$item->getWholesaler()->getId()] = ( ($agreement) ? $agreement->getEntryCurrency()->getIso() : $item->getWholesaler()->getCurrency()->getIso());
  816.             }
  817.         }
  818.         
  819.         $licenseTypeIds=$jsonSearchService->searchKeyInArray($productRepository->getParentSkuIds($productQ)->getParameters(), 'licenseType');
  820.         
  821.         $licenseTypes=[];
  822.         if($licenseTypeIds){
  823.             foreach($licenseTypeIds[0] as $value){                
  824.                 $lt $licensetypeRepository->find((int)$value);
  825.                 $licenseTypes[$lt->getId()] = $translation->getTranslationBy($lt$locale'name');   
  826.             }
  827.         }
  828.                 
  829.         return $this->render('/product/editproduct.html.twig', array(
  830.             'cont' => $cont,
  831.             'currency' => $currency,
  832.             'productByWh' => $product,
  833.             'product' => $productQ,
  834.             'payperiod' => $productQ->getPayPeriod(),
  835.             'licensetype' => $licenseTypes,
  836.             'productImages' => $productImages,
  837.             'productCover' => $productCover,
  838.             'productBwImages' => $productBwImages,
  839.             'userKaty' => $userKaty,
  840.             'form' => $form->createView(),
  841.             'userRepository' => $userRepository,
  842.             'isBasePrice' => $isBasePrice,
  843.          ));
  844.     }    
  845.     
  846.     
  847.     public function addImages($id$product$post$userKaty$postType$translator$registerEvent$session) {
  848.         $entityManager $this->getDoctrine()->getManager();
  849.         $productRepository $this->getDoctrine()->getRepository(Product::class);
  850.         $user $this->getUser();   
  851.         $numImg 0;
  852.         foreach ($post as $img) {
  853.             $productImg = new Productimages();
  854.             // Get extension
  855.             $extension $img->guessExtension();
  856.             // Get size
  857.             $size $img->getSize();
  858.             $valid_extensions = array('jpeg''jpg''png''gif');
  859.             if (in_array($extension$valid_extensions)) {
  860.                 //Check file size '1MB'
  861.                 if ($size 1000000) {
  862.                     $image getimagesize($img);
  863.                     $maximum = array(
  864.                       'width' => '500',
  865.                       'height' => '600'
  866.                     );
  867.                     $image_width $image[0];
  868.                     $image_height $image[1];
  869.                     if ($image_width $maximum['width'] || $image_height $maximum['height']) {                      
  870.                         $session->getFlashBag()->add('danger'$translator->trans('app.General.Guidelines.Max500px'));
  871.                         return $this->redirectToRoute('product_editproduct', ['id' => $id]);                             
  872.                     }
  873.                     else {
  874.                         // Get extension
  875.                         $filename uniqid() . '.' $extension;
  876.                         $productImg->setImagename($filename);
  877.                         // Try to save file
  878.                         $img->move($this->getParameter('private_folder').'/images/productImages/'$filename);
  879.                         $productImg->setRegistrationdate(new \DateTime());
  880.                         if ($postType == "attachment_") {
  881.                             if ($user->getWholesaler()) {
  882.                                 $productImg->setProductByWholesaler($product);
  883.                             }
  884.                             else if ($userKaty or $user->getVendor()) {
  885.                                 $productQ $productRepository->find($id);
  886.                                 if ($user->getVendor()) {
  887.                                     $product $productQ;
  888.                                 }
  889.                                 $productImg->setProduct($product);
  890.                             }
  891.                             if ($numImg == 0) {
  892.                                 
  893.                                 $images $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '            
  894.                                     'where pi.product = :productId and pi.isdefaultimage = 1')
  895.                                     ->setParameters(array('productId' => $id))
  896.                                     ->getResult();
  897.                                 
  898.                                 if (sizeof($images)) {
  899.                                     $productImg->setisDefaultImage(1);
  900.                                 }
  901.                             }
  902.                         }
  903.                         if ($postType == "coverImage_") {
  904.                             $productQ $productRepository->find($id);
  905.                             if ($user->getVendor()) {
  906.                                 $product $productQ;
  907.                             }
  908.                             $productImg->setProduct($product);
  909.                             $productImg->setIsCoverImage(1);
  910.                         }
  911.                         if ($postType == "attachmentpbw_") {
  912.                             $productImg->setProductByWholesaler($product);
  913.                         }
  914.                         $entityManager->persist($productImg);
  915.                         $entityManager->flush();           
  916.                         $registerEvent->addModifiedBy($productImg$this->getUser()->getId());
  917.                         $numImg++;
  918.                     }
  919.                 }
  920.                 else {
  921.                     $session->getFlashBag()->add('danger'$translator->trans('app.General.Guidelines.ImageSize'));
  922.                     return $this->redirectToRoute('product_editproduct', array('id' => $id)); 
  923.                 }
  924.             }
  925.             else {
  926.                 $session->getFlashBag()->add('danger'$translator->trans('app.General.Guidelines.ImageFormat'));
  927.                 return $this->redirectToRoute('product_editproduct', array('id' => $id)); 
  928.             }
  929.         }
  930.     }
  931.     
  932.     
  933.     private function deleteImages($translator$productId$imagesId$session$extensionFileService) {
  934.         
  935.         $mistakes false;
  936.         $entityManager $this->getDoctrine()->getManager();
  937.         $imageRepository $this->getDoctrine()->getRepository(Productimages::class);
  938.         
  939.         foreach ($imagesId as $id) {          
  940.             $imageToDelete $imageRepository->find($id);
  941.             if ($imageToDelete != null) {
  942.                 $image_path $this->getParameter('private_folder').'/images/productImages/' $imageToDelete->getImagename();
  943.                 $imageName $imageToDelete->getImagename();
  944.                 $sanitize $extensionFileService->getSanitize('img'$imageName);
  945.                 if($sanitize){
  946.                     if (file_exists($image_path)) {
  947.                         unlink($image_path);
  948.                     }
  949.                     $entityManager->remove($imageToDelete);
  950.                     $entityManager->flush();
  951.                 }
  952.                 else {
  953.                     $mistakes true;
  954.                 }
  955.             }
  956.             else {
  957.                 $mistakes true;
  958.             }
  959.         }
  960.         
  961.         if (!$imagesId){
  962.             $session->getFlashBag()->add('danger'$translator->trans('app.General.SystemMessages.NoChanges'));
  963.         }
  964.         if ($mistakes){
  965.             $session->getFlashBag()->add('danger'$translator->trans('app.General.SystemMessages.NoChanges'));
  966.         }
  967.         else{
  968.             $session->getFlashBag()->add('success'$translator->trans('app.General.SystemMessages.Deleted'));
  969.         }
  970.     }
  971.     
  972.     
  973.     private function searchProductsToDownload($pais=0) {
  974.         
  975.         $em $this->getDoctrine()->getManager();
  976.         $userRepository $this->getDoctrine()->getRepository(User::class); 
  977.         $user $userRepository->find($this->getUser()->getId());
  978.         
  979.         if ($pais) {
  980.             $wholesaler $em->createQuery('SELECT w FROM App\Entity\Wholesaler w '            
  981.                 'where w.country = :country ')
  982.                 ->setParameters(array('country' => $pais))
  983.                 ->setMaxResults(1)
  984.                 ->getOneOrNullResult();
  985.         }
  986.         else {
  987.             $wholesaler $user->getWholesaler();
  988.         }
  989.         
  990.         $productByWholesaler$em->createQuery('SELECT pbw FROM App\Entity\Productbywholesaler pbw '            
  991.             ' JOIN pbw.product p '
  992.             ' JOIN p.productLine pl'
  993.             ' JOIN pl.vendor v '
  994.             'where pbw.wholesaler = :wholesaler and v.isminivendor = 0'
  995.             'and p.unregistrationdate is null')
  996.             ->setParameters(array('wholesaler' => $wholesaler))
  997.             ->getResult();
  998.         
  999.         if($userRepository->isMiniVendor($user)){
  1000.             $productByWholesaler$em->createQuery('SELECT pbw FROM App\Entity\Productbywholesaler pbw '            
  1001.                 ' JOIN pbw.product p '
  1002.                 ' JOIN p.productLine pl '
  1003.                 ' JOIN pl.vendor v '    
  1004.                 'where pbw.wholesaler = :wholesaler and v.id = :vendor '
  1005.                 'and p.unregistrationdate is null')
  1006.                 ->setParameters(array('wholesaler' => $wholesaler->getId(), 'vendor'=>$this->getUser()->getVendor()->getId()))
  1007.                 ->getResult();
  1008.         }
  1009.         return $productByWholesaler;          
  1010.     }
  1011.     
  1012.     
  1013.     /**
  1014.     * 
  1015.     * @Route("/product/default/editbackofficeproduct/{groupid}", name="edit_backoffice_product", requirements={"groupid"="\d+"}))
  1016.     */
  1017.     public function editpbw(Request $request$groupid$edit null) {
  1018.         $em $this->getDoctrine()->getManager();  
  1019.         $payPeriodRepository $this->getDoctrine()->getRepository(\App\Entity\Payperiod::class);
  1020.         $productRepository $this->getDoctrine()->getRepository(\App\Entity\Product::class);
  1021.         $productUnitRepository $this->getDoctrine()->getRepository(\App\Entity\Productunit::class);
  1022.         $plRepository $this->getDoctrine()->getRepository(\App\Entity\Productline::class);
  1023.         $vpRepository $this->getDoctrine()->getRepository(\App\Entity\Vendorprogramms::class);
  1024.         
  1025.         $edit $request->get('edit');       
  1026.         $updates json_decode($request->get('updates'));
  1027.         
  1028.         if ($edit) {
  1029.             foreach ($updates as $key => $toedit) {
  1030.                 $product $productRepository->find($key);
  1031.                 $product->setName($toedit->name);
  1032.                 $product->setDescriptiveName($toedit->descriptivename);                              
  1033.                 $product->setDuration($toedit->duration);
  1034.                 $product->setPayperiod($payPeriodRepository->find($toedit->payperiod));
  1035.                 $product->setVolumeMin($toedit->volmin);
  1036.                 $product->setVolumeMax($toedit->volmax);
  1037.                 $product->setProductUnit($productUnitRepository->find($toedit->unitid));
  1038.                 $product->setProductline($plRepository->find($toedit->plid));
  1039.                 $product->setProductVendorId($toedit->productVendorId);
  1040.                 $product->setIsVolumeEditable($toedit->volumeEditable);
  1041.                 
  1042.                 $product->setDownloadLink($toedit->downloadLink);
  1043.                 $product->setConsoleLink($toedit->consoleLink);
  1044.                 
  1045.                 
  1046.                 $product->setFare($toedit->fare == 1);
  1047.                 if($product->getProducttype()){
  1048.                     $product->setCanSellAlone($request->get('catalog'));                   
  1049.                 }
  1050.                 $product->setCanSell($request->get('catalog'));
  1051.                 $product->setAcceptsMarkup($toedit->markup);
  1052.                 $product->setQuantityActive($toedit->quantityActive);
  1053.                 
  1054.                 $product->setAddons(explode (","$toedit->addons));
  1055.                 $product->setOrderPriority($toedit->orderPriority);
  1056.                 $product->setRequiresRenewal($request->get('requiresRenewal'));
  1057.                 $product->setVendorProgramm($vpRepository->find($request->get('programm')));
  1058.                 $product->setIsHardware($toedit->isHardware == 1);
  1059.                 $product->setParameters(json_decode($toedit->parameterstrue));
  1060.                 $product->setRenovationProduct($productRepository->find($toedit->defaultRenewal));
  1061.                                 
  1062.                 if($toedit->limitRenewalMonths!=""){
  1063.                     $product->setLimitRenewalMonths($toedit->limitRenewalMonths);
  1064.                 }                          
  1065.                 
  1066.                 try {
  1067.                     $product->setSku($toedit->sku);
  1068.                     $em->persist($product);
  1069.                     $em->flush();
  1070.                 }
  1071.                 catch (\Exception $e) {
  1072.         
  1073.                     $this->get('session')->getFlashBag()->add('danger''Duplicated Sku: '.$toedit->sku);                      
  1074.                     return $this->redirectToRoute('edit_backoffice_product', ['groupid' => $groupid]);
  1075.                 }
  1076.             }
  1077.         }
  1078.         
  1079.         $products$em->createQuery('SELECT p FROM App\Entity\Product p '            
  1080.         'where p.groupid = :group')
  1081.         ->setParameter('group'$groupid)        
  1082.         ->getResult();                            
  1083.         $arrayProductLines = array();
  1084.         if ($groupid) {           
  1085.             $vendorProgramm$em->createQuery('SELECT vp FROM App\Entity\Vendorprogramms vp '            
  1086.             'where vp.id = :vpId')
  1087.             ->setParameter('vpId'$products[0]->getVendorProgramm()->getId())
  1088.             ->setMaxResults(1)      
  1089.             ->getOneOrNullResult(); 
  1090.             
  1091.             $productLines$em->createQuery('SELECT pl FROM App\Entity\Productline pl '            
  1092.             'where pl.vendor = :vendorId ORDER BY pl.name asc')
  1093.             ->setParameter('vendorId'$vendorProgramm->getVendor()->getId())
  1094.             ->getResult(); 
  1095.             
  1096.             $payperiods$em->createQuery('SELECT pl FROM App\Entity\Productline pl '            
  1097.             'where pl.vendor = :vendorId')
  1098.             ->setParameter('vendorId'$vendorProgramm->getVendor()->getId())
  1099.             ->getResult();
  1100.             
  1101.             $programms$em->createQuery('SELECT p FROM App\Entity\Vendorprogramms p')->getResult();
  1102.             foreach ($productLines as $pl) {
  1103.                 array_push($arrayProductLines, array("id" => $pl->getId(), "name" => $pl->getName(), "vname" => $pl->getVendor()->getName()));
  1104.             }
  1105.         }
  1106.         return $this->render('backoffice/editbackofficeproduct.html.twig', [
  1107.             'data' => $products
  1108.             'groupid' => $groupid
  1109.             'productlines' => $arrayProductLines,
  1110.             'payperiods'=> $payPeriodRepository->findAll(),
  1111.             'programms' => $programms
  1112.         ]);
  1113.     }
  1114.     
  1115.     /**
  1116.     * 
  1117.     * @Route("/product/default/getproductsgroup", name="product_getproductsgroup")
  1118.     */
  1119.     public function getproductsgroup(Request $requestTranslatorInterface $translator) {       
  1120.         $em $this->getDoctrine()->getManager();
  1121.         
  1122.         $arrayProducts = array();
  1123.         $groupid $request->get('id');
  1124.         $products $em->createQuery("SELECT p FROM \App\Entity\Product p "               
  1125.             'where p.groupid = :group and p.id <> :group')
  1126.             ->setParameter('group'$groupid)
  1127.             ->getResult();
  1128.              
  1129.         foreach ($products as $product) {
  1130.             $url $this->generateUrl('product_editproduct', array('id' => $product->getId()));
  1131.             $status is_null($product->getUnregistrationDate()) ? "<span class='label label-success'>".$translator->trans('app.General.Active')."</span>" "<span class='label label-danger'>".$translator->trans('app.General.Inactive')."</span>";
  1132.             $arrayProducts[$product->getId()] = array(
  1133.                 $product->getId(), 
  1134.                 $product->getProductline()->getName(), 
  1135.                 $product->getName(), $product->getSku(), 
  1136.                 $product->getGroupid(), 
  1137.                 $product->getDuration(), 
  1138.                 $product->getPayperiod()->getPeriod(), 
  1139.                 $product->getVolumemin(), 
  1140.                 $product->getVolumemax(), 
  1141.                 $product->getVendorProgramm()->getId(), 
  1142.                 $product->getFare(), 
  1143.                 $product->getCanSell(), 
  1144.                 $product->getAcceptsMarkup(),
  1145.                 "<span title='".$product->getName()."'><a href='".$url."' >".$product->getName()."</a></span>",
  1146.                 $status,
  1147.             );
  1148.         }
  1149.                 
  1150.         $response json_encode($arrayProducts);
  1151.               
  1152.         return new Response($response200, array(
  1153.             'Content-Type' => 'application/json'
  1154.         ));
  1155.     }
  1156.     /**
  1157.     * 
  1158.     * @Route("/product/default/getallproductsgroup", name="product_getallproductsgroup")
  1159.     */
  1160.     public function getallproductsgroup(Request $requestTranslatorInterface $translator) {       
  1161.         $em $this->getDoctrine()->getManager();
  1162.         
  1163.         $arrayProducts = array();
  1164.         $groupid $request->get('id');
  1165.         $products $em->createQuery("SELECT p FROM \App\Entity\Product p "               
  1166.             'where p.groupid = :group')
  1167.             ->setParameter('group'$groupid)
  1168.             ->getResult();
  1169.              
  1170.         foreach ($products as $product) {
  1171.             $url $this->generateUrl('product_editproduct', array('id' => $product->getId()));
  1172.             $status is_null($product->getUnregistrationDate()) ? "<span class='label label-success'>".$translator->trans('app.General.Active')."</span>" "<span class='label label-danger'>".$translator->trans('app.General.Inactive')."</span>";
  1173.             $arrayProducts[$product->getId()] = array(
  1174.                 $product->getId(), 
  1175.                 $product->getProductline()->getName(), 
  1176.                 $product->getName(), $product->getSku(), 
  1177.                 $product->getGroupid(), 
  1178.                 $product->getDuration(), 
  1179.                 $product->getPayperiod()->getPeriod(), 
  1180.                 $product->getVolumemin(), 
  1181.                 $product->getVolumemax(), 
  1182.                 $product->getVendorProgramm()->getId(), 
  1183.                 $product->getFare(), 
  1184.                 $product->getCanSell(), 
  1185.                 $product->getAcceptsMarkup(),
  1186.                 "<a href='".$url."' >".$product->getName()."</a>",
  1187.                 $status,
  1188.             );
  1189.         }
  1190.                 
  1191.         $response json_encode($arrayProducts);
  1192.               
  1193.         return new Response($response200, array(
  1194.             'Content-Type' => 'application/json'
  1195.         ));
  1196.     }
  1197.     /**
  1198.     * 
  1199.     * @Route("/product/default/getpbwsbygroup", name="product_getpbwsbygroup")
  1200.     */
  1201.     public function getpbwsbygroup(Request $requestTranslatorInterface $translator) {       
  1202.         $em $this->getDoctrine()->getManager();
  1203.         $wholesalerRepository $this->getDoctrine()->getRepository(\App\Entity\Wholesaler::class);
  1204.         $pbwRepository $this->getDoctrine()->getRepository(Productbywholesaler::class);
  1205.         $arrayPbws = array();
  1206.         $groupid $request->get('id');
  1207.         $wholesalerid $request->get('wholesaler');
  1208.         $pbws $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "               
  1209.             'where p.groupid = :group and p.id <> :group and pbw.wholesaler = :wholesaler')
  1210.             ->setParameter('group'$groupid)
  1211.             ->setParameter('wholesaler'$wholesalerid)
  1212.             ->getResult();
  1213.         foreach ($pbws as $pbw) {
  1214.             $url $this->generateUrl('product_editproduct', array('id' => $pbw->getId()));
  1215.             $status is_null($pbw->getUnregistrationDate()) ? "<span class='label label-success'>".$translator->trans('app.General.Active')."</span>" "<span class='label label-danger'>".$translator->trans('app.General.Inactive')."</span>";
  1216.             $currency $wholesalerRepository->find($wholesalerid)->getCurrency()->getIso();
  1217.             $currencyFormat = new \NumberFormatter($request->getLocale(), \NumberFormatter::CURRENCY);
  1218.             
  1219.             $arrayPbws[$pbw->getId()] = array(
  1220.                 $pbw->getId(),
  1221.                 $pbw->getProduct()->getProductline()->getVendor()->getName(), 
  1222.                 $pbw->getProduct()->getProductline()->getName(), 
  1223.                 "<span title='".$pbw->getProduct()->getName()."'><a href='".$url."' >".$pbw->getProduct()->getName()."</a></span>",
  1224.                 $pbw->getProduct()->getSku(),
  1225.                 $pbw->getProduct()->getDuration(),  
  1226.                 $currencyFormat->formatCurrency(round($pbwRepository->getPrice($pbw), 2), $currency),
  1227.                 $pbw->getProduct()->getPayperiod()->getPeriod(),
  1228.                 $status,
  1229.             );
  1230.         }
  1231.                 
  1232.         $response json_encode($arrayPbws);
  1233.               
  1234.         return new Response($response200, array(
  1235.             'Content-Type' => 'application/json'
  1236.         ));
  1237.     }
  1238.     
  1239.     
  1240.     /**
  1241.     * 
  1242.     * @Route("/product/default/editpbwsbyprogramm", name="product_editpbwsbyprogramm")
  1243.     */
  1244.     public function editpbwsbyprogramm(Request $request$programmId 0$wholesalerId 0$productLineId 0) {
  1245.         $search $request->get('search');
  1246.         $edit $request->get('edit');
  1247.         $products = array();
  1248.         $productsToAsign = array();
  1249.         $pbwsArray = array();
  1250.         $arrayProgramms = array();
  1251.         $arrayProductLines = array();
  1252.         $em $this->getDoctrine()->getManager();  
  1253.         $wholesalerRepository $this->getDoctrine()->getRepository(\App\Entity\Wholesaler::class);
  1254.         $wholesalers $wholesalerRepository->findAll();
  1255.         
  1256.         if ($search) {
  1257.             
  1258.             $programmId $request->get('programm');
  1259.             $wholesalerId $request->get('wholesaler');
  1260.             $productLineId $request->get('productline');
  1261.             $products $em->createQuery("SELECT p FROM \App\Entity\Product p "               
  1262.             'where p.vendorProgramm = :programm and p.productLine = :productline '
  1263.             'and p.isflavour = 0 and p.unregistrationdate is null and p.productType is not null and p.groupid is not null')
  1264.             ->setParameter('programm'$programmId)
  1265.             ->setParameter('productline'$productLineId)        
  1266.             ->getResult();
  1267.             
  1268.             
  1269.             $pbws $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "               
  1270.             'where pbw.wholesaler = :wholesaler and pbw.unregistrationdate is null '
  1271.             'and p.vendorProgramm = :programm and p.productLine = :productline '
  1272.             'and p.isflavour = 0 and p.unregistrationdate is null and p.productType is not null and p.groupid is not null')
  1273.             ->setParameter('programm'$programmId)
  1274.             ->setParameter('productline'$productLineId)
  1275.             ->setParameter('wholesaler'$wholesalerId)        
  1276.             ->getResult();
  1277.             
  1278.             $pbwsArray = array();
  1279.             foreach ($pbws as $pbw) {
  1280.                 array_push($pbwsArray$pbw->getProduct()->getId());
  1281.             }
  1282.             $arrayProgramms $this->getarrayprogrammsbywholesaler($wholesalerId);
  1283.             $arrayProductLines $this->getarrayplsbyprogramm($programmId);
  1284.         }
  1285.        
  1286.         
  1287.         if ($edit) {
  1288.             $toactive json_decode($request->get('toactive'));
  1289.             $todisable json_decode($request->get('todisable'));
  1290.             $wholesalerId json_decode($request->get('wholesaler'));
  1291.             $programmId $request->get('programm');
  1292.             $productLineId $request->get('productline');
  1293.             foreach ($toactive as $newasignation) {
  1294.                 $products $em->createQuery("SELECT p FROM \App\Entity\Product p "               
  1295.                 'where p.groupid = :groupid ')
  1296.                 ->setParameter('groupid'$newasignation)
  1297.                 ->getResult();
  1298.                 
  1299.                 $pbwsAlreadyAsigned $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "               
  1300.                 'where pbw.wholesaler = :wholesaler '
  1301.                 'and p.groupid = :groupid')
  1302.                 ->setParameter('groupid'$newasignation)
  1303.                 ->setParameter('wholesaler'$wholesalerId)        
  1304.                 ->getResult();
  1305.                 if (sizeof($pbwsAlreadyAsigned) == 0) {
  1306.                     
  1307.                     foreach ($products as $p) {
  1308.                         $newPBW = new Productbywholesaler();
  1309.                         $newPBW->setProduct($p);
  1310.                         $newPBW->setWholesaler($wholesalerRepository->find($wholesalerId));
  1311.                         $em->persist($newPBW);
  1312.                         $em->flush();
  1313.                     }
  1314.                 }
  1315.                 else {
  1316.                     foreach ($pbwsAlreadyAsigned as $pbw) {
  1317.                         $pbw->setUnregistrationdate(null);
  1318.                         $em->persist($pbw);
  1319.                         $em->flush();
  1320.                     }
  1321.                 }
  1322.             }
  1323.             foreach ($todisable as $toUnregistrate) { //id's - por cada wholesaler en el selector
  1324.                 $products $em->createQuery("SELECT p FROM \App\Entity\Product p "               
  1325.                 'where p.groupid = :groupid ')
  1326.                 ->setParameter('groupid'$toUnregistrate)
  1327.                 ->getResult();
  1328.                
  1329.                 $pbwsBase $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw "               
  1330.                 'where pbw.wholesaler = :wholesaler and pbw.product = :product')
  1331.                 ->setParameter('wholesaler'$wholesalerId)
  1332.                 ->setParameter('product'$toUnregistrate)        
  1333.                 ->setMaxResults(1)
  1334.                 ->getResult();
  1335.                 $pbwsToUnregistrate $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "               
  1336.                 'where pbw.wholesaler = :wholesaler '
  1337.                 'and p.groupid = :groupid')
  1338.                 ->setParameter('groupid'$toUnregistrate)
  1339.                 ->setParameter('wholesaler'$wholesalerId)        
  1340.                 ->getResult();
  1341.                 foreach ($pbwsToUnregistrate as $pbw) {
  1342.                     $pbw->setUnregistrationdate(new \DateTime());
  1343.                     $em->persist($pbw);
  1344.                     $em->flush();
  1345.                 }  
  1346.             }
  1347.             $arrayProgramms $this->getarrayprogrammsbywholesaler($wholesalerId);
  1348.             $arrayProductLines $this->getarrayplsbyprogramm($programmId);
  1349.             $products $em->createQuery("SELECT p FROM \App\Entity\Product p "               
  1350.             'where p.vendorProgramm = :programm and p.productLine = :productline '
  1351.             'and p.isflavour = 0 and p.unregistrationdate is null and p.productType is not null and p.groupid is not null')
  1352.             ->setParameter('programm'$programmId)
  1353.             ->setParameter('productline'$productLineId)        
  1354.             ->getResult();
  1355.             
  1356.             
  1357.             $pbws $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "               
  1358.             'where pbw.wholesaler = :wholesaler and pbw.unregistrationdate is null '
  1359.             'and p.vendorProgramm = :programm and p.productLine = :productline '
  1360.             'and p.isflavour = 0 and p.unregistrationdate is null and p.productType is not null and p.groupid is not null')
  1361.             ->setParameter('programm'$programmId)
  1362.             ->setParameter('productline'$productLineId)
  1363.             ->setParameter('wholesaler'$wholesalerId)        
  1364.             ->getResult();
  1365.             $pbwsArray = array();
  1366.             foreach ($pbws as $pbw) {
  1367.                 array_push($pbwsArray$pbw->getProduct()->getId());
  1368.             }
  1369.         } 
  1370.         return $this->render('product/editpbwsbyprogramm.html.twig', [
  1371.             'programmId' => $programmId
  1372.             'wholesalers' => $wholesalers
  1373.             'wholesalerId' => $wholesalerId
  1374.             'productLineId' => $productLineId,
  1375.             'products' => $products,
  1376.             'pbwsArray' => $pbwsArray,
  1377.             'arrayProgramms' => $arrayProgramms
  1378.             'arrayProductLines' => $arrayProductLines
  1379.         ]);
  1380.     }
  1381.         /**
  1382.     * 
  1383.     * @Route("/product/default/editpbwskusbyprogramm/{id}/{idWholesaler}", name="product_editpbwskusbyprogramm")
  1384.     */
  1385.     public function editpbwskusbyprogramm(Request $request$id$idWholesaler) {
  1386.         $edit $request->get('edit');
  1387.         $products = array();
  1388.         $productsToAsign = array();
  1389.         $pbwsArray = array();
  1390.         $arrayProgramms = array();
  1391.         $arrayProductLines = array();
  1392.         $em $this->getDoctrine()->getManager();  
  1393.         $wholesalerRepository $this->getDoctrine()->getRepository(\App\Entity\Wholesaler::class);
  1394.         $wholesalers $wholesalerRepository->findAll();
  1395.         $products $em->createQuery("SELECT p FROM \App\Entity\Product p "               
  1396.         'where p.groupid = :id and p.unregistrationdate is null')
  1397.         ->setParameter('id'$id)
  1398.         ->getResult();
  1399.         $pbws $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "               
  1400.         'where pbw.wholesaler = :wholesaler and p.groupid = :id and pbw.unregistrationdate is null and p.unregistrationdate is null')
  1401.         ->setParameter('wholesaler'$idWholesaler)
  1402.         ->setParameter('id'$id)        
  1403.         ->getResult();
  1404.         $pbwsArray = array();
  1405.         foreach ($pbws as $pbw) {
  1406.             array_push($pbwsArray$pbw->getProduct()->getId());
  1407.         }
  1408.         if ($edit) {
  1409.             $toactive json_decode($request->get('toactive'));
  1410.             $todisable json_decode($request->get('todisable'));
  1411.             $wholesalerId json_decode($request->get('wholesaler'));
  1412.             foreach ($toactive as $newasignation) {
  1413.                 $products $em->createQuery("SELECT p FROM \App\Entity\Product p "               
  1414.                 'where p.id = :id ')
  1415.                 ->setParameter('id'$newasignation)
  1416.                 ->getResult();
  1417.                 $pbwsAlreadyAsigned $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "               
  1418.                 'where pbw.wholesaler = :wholesaler '
  1419.                 'and p.id = :id')
  1420.                 ->setParameter('id'$newasignation)
  1421.                 ->setParameter('wholesaler'$wholesalerId)        
  1422.                 ->getResult();
  1423.                 if (sizeof($pbwsAlreadyAsigned) == 0) {
  1424.                     foreach ($products as $p) {
  1425.                         $newPBW = new Productbywholesaler();
  1426.                         $newPBW->setProduct($p);
  1427.                         $newPBW->setWholesaler($wholesalerRepository->find($wholesalerId));
  1428.                         $em->persist($newPBW);
  1429.                         $em->flush();
  1430.                     }
  1431.                 }
  1432.                 else {
  1433.                     foreach ($pbwsAlreadyAsigned as $pbw) {
  1434.                         $pbw->setUnregistrationdate(null);
  1435.                         $em->persist($pbw);
  1436.                         $em->flush();
  1437.                     }
  1438.                 }
  1439.             }
  1440.             $errorIds = array();
  1441.             foreach ($todisable as $toUnregistrate) { //id's - por cada wholesaler en el selector
  1442.                 $products $em->createQuery("SELECT p FROM \App\Entity\Product p "               
  1443.                 'where p.id = :id ')
  1444.                 ->setParameter('id'$toUnregistrate)
  1445.                 ->getResult();
  1446.                 $pbwsBase $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw "               
  1447.                 'where pbw.wholesaler = :wholesaler and pbw.product = :product')
  1448.                 ->setParameter('wholesaler'$wholesalerId)
  1449.                 ->setParameter('product'$toUnregistrate)        
  1450.                 ->setMaxResults(1)
  1451.                 ->getResult();
  1452.                 $pbwsToUnregistrate $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "               
  1453.                 'where pbw.wholesaler = :wholesaler '
  1454.                 'and p.id = :id')
  1455.                 ->setParameter('id'$toUnregistrate)
  1456.                 ->setParameter('wholesaler'$wholesalerId)        
  1457.                 ->getResult();
  1458.                 foreach ($pbwsToUnregistrate as $pbw) {
  1459.                     $pbw->setUnregistrationdate(new \DateTime());
  1460.                     $em->persist($pbw);
  1461.                     $em->flush();
  1462.                 }
  1463.             }
  1464.             $products $em->createQuery("SELECT p FROM \App\Entity\Product p "               
  1465.             'where p.groupid = :id and p.unregistrationdate is null')
  1466.             ->setParameter('id'$id)
  1467.             ->getResult();
  1468.             $pbws $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "               
  1469.             'where pbw.wholesaler = :wholesaler and p.groupid = :id and pbw.unregistrationdate is null and p.unregistrationdate is null')
  1470.             ->setParameter('wholesaler'$idWholesaler)
  1471.             ->setParameter('id'$id)        
  1472.             ->getResult();
  1473.             $pbwsArray = array();
  1474.             foreach ($pbws as $pbw) {
  1475.                 array_push($pbwsArray$pbw->getProduct()->getId());
  1476.             }
  1477.             if (!empty($errorIds)) {
  1478.                 $str implode(", "$errorIds);
  1479.                 $this->get('session')->getFlashBag()->add('danger''Productos no desasignados por estar en Portada: ' $str);
  1480.             }
  1481.             return $this->redirectToRoute('product_editpbwskusbyprogramm', ['id' => $id'idWholesaler' => $idWholesaler]);
  1482.         } 
  1483.         return $this->render('product/editpbwskusbyprogramm.html.twig', [
  1484.             'id' => $id,
  1485.             'wholesalers' => $wholesalers
  1486.             'idWholesaler' => $idWholesaler
  1487.             'products' => $products,
  1488.             'pbwsArray' => $pbwsArray
  1489.         ]);
  1490.     }
  1491.        
  1492.     
  1493.     /**
  1494.     * 
  1495.     * @Route("/product/default/getprogrammsbywholesaler", name="getprogrammsbywholesaler")
  1496.     */
  1497.     public function getprogrammsbywholesaler(Request $request) {
  1498.         $em $this->getDoctrine()->getManager();
  1499.         $wholesalerId $request->get('id');
  1500.         $arrayProgramms = array();
  1501.         $arrayProgramms $this->getarrayprogrammsbywholesaler($wholesalerId);
  1502.         
  1503.         $response json_encode($arrayProgramms);
  1504.               
  1505.         return new Response($response200, array(
  1506.             'Content-Type' => 'application/json'
  1507.         ));
  1508.    
  1509.     }
  1510.     
  1511.     
  1512.     public function getarrayprogrammsbywholesaler($id) {
  1513.         $em $this->getDoctrine()->getManager();
  1514.         $arrayProgramms = array();
  1515.         $agreements $em->createQuery("SELECT a FROM \App\Entity\Agreements a "               
  1516.             'where a.wholesaler = :wholesaler ')
  1517.             ->setParameter('wholesaler'$id)
  1518.             ->getResult();
  1519.         foreach ($agreements as $a) {
  1520.             
  1521.             $prog $em->createQuery("SELECT vp FROM \App\Entity\VendorProgramms vp "               
  1522.             'where vp.id = :id ')
  1523.             ->setParameter('id'$a->getProgramm()->getId())                   
  1524.             ->getOneOrNullResult();
  1525.             
  1526.             if (!empty($prog)) {
  1527.                 array_push($arrayProgramms, array("id" => $prog->getId(), "name" => $prog->getName(), "vname" => $prog->getVendor()->getName()));
  1528.             }
  1529.         }
  1530.         return $arrayProgramms;
  1531.     }
  1532.     
  1533.     
  1534.     /**
  1535.     * 
  1536.     * @Route("/product/default/getplsbyprogramm", name="getplsbyprogramm")
  1537.     */
  1538.     public function getplsbyprogramm(Request $request) {
  1539.        
  1540.         $em $this->getDoctrine()->getManager();
  1541.         $arrayProductLines = array();
  1542.         $programmId $request->get('id');
  1543.         $arrayProductLines $this->getarrayplsbyprogramm($programmId);
  1544.         
  1545.         $response json_encode($arrayProductLines);
  1546.               
  1547.         return new Response($response200, array(
  1548.             'Content-Type' => 'application/json'
  1549.         ));
  1550.   
  1551.     }
  1552.     
  1553.     
  1554.     public function getarrayplsbyprogramm($id) {
  1555.         
  1556.         $em $this->getDoctrine()->getManager();
  1557.         
  1558.         $vendorProgramm $em->createQuery("SELECT vp FROM \App\Entity\VendorProgramms vp "               
  1559.             'where vp.id = :id ')
  1560.             ->setParameter('id'$id)                   
  1561.             ->getOneOrNullResult();
  1562.   
  1563.         $arrayProductLines = array();
  1564.         $productLines $em->createQuery("SELECT pl FROM \App\Entity\Productline pl "               
  1565.             'where pl.vendor = :vendor AND pl.unregistrationdate is null ORDER BY pl.name asc')
  1566.             ->setParameter('vendor'$vendorProgramm->getVendor()->getId())      
  1567.             ->setParameter('vendor'$vendorProgramm->getVendor()->getId())
  1568.             ->getResult();
  1569.         foreach ($productLines as $pl) {
  1570.             array_push($arrayProductLines, array("id" => $pl->getId(), "name" => $pl->getName(), "vname" => $pl->getVendor()->getName()));
  1571.         }
  1572.         return $arrayProductLines;
  1573.     }
  1574.     
  1575.     
  1576.     /**
  1577.     * 
  1578.     * @Route("/product/default/createproduct", name="product_createproduct")
  1579.     */
  1580.     public function createproduct(Request $request) {
  1581.         $dataProduct = array();
  1582.         $session $this->get('session');
  1583.         $em $this->getDoctrine()->getManager();  
  1584.         $progsRepository $this->getDoctrine()->getRepository(\App\Entity\Vendorprogramms::class);
  1585.         $unitsRepository $this->getDoctrine()->getRepository(\App\Entity\Productunit::class);
  1586.         $payperiodRepository $this->getDoctrine()->getRepository(\App\Entity\Payperiod::class);
  1587.         $productlineRepository $this->getDoctrine()->getRepository(\App\Entity\Productline::class);
  1588.         $licensetypeRepository $this->getDoctrine()->getRepository(\App\Entity\Licensetype::class);
  1589.         
  1590.         $dataProduct['producttype'] = $request->get('producttype');
  1591.         $dataProduct['producttype_name'] = $request->get('producttype_name');
  1592.         $dataProduct['programm'] = $request->get('programm');
  1593.         $dataProduct['line'] = $request->get('line');
  1594.         $dataProduct['licensetype'] = $request->request->get('licensetype', []);
  1595.         $dataProduct['downloadlink'] = $request->get('downloadlink');
  1596.         $dataProduct['consolelink'] = $request->get('consolelink');
  1597.         $dataProduct['fare'] = $request->get('fare');
  1598.         $dataProduct['markup'] = $request->get('markup');
  1599.         $dataProduct['function'] = $request->get('function');
  1600.         $dataProduct['vendorid'] = $request->get('vendorid');
  1601.         $dataProduct['hardware'] = $request->get('hardware');
  1602.        
  1603.         $version $request->get('version');
  1604.         $flavour $request->get('flavour');
  1605.         $manintenance $request->get('maintenance');
  1606.         $renewal $request->get('renewal');
  1607.         $renewal $request->get('extrafiels');//revisar utilidad de este bloque
  1608.         $extrafiels $request->get('extrafiels');
  1609.         $baseprice $request->get('baseprice');
  1610.         $dataProduct['sku'] = $request->get('sku');
  1611.         $dataProduct['name'] = $request->get('name');
  1612.         $dataProduct['payperiod'] = $request->get('payperiod');
  1613.         $dataProduct['volumemin'] = $request->get('volumemin');
  1614.         $dataProduct['volumemax'] = $request->get('volumemax');
  1615.         $dataProduct['duration'] = $request->get('duration');
  1616.         $dataProduct['unit'] = $request->get('unit');
  1617.         $dataProduct['requiresrenewal'] = $request->get('requiresrenewal');
  1618.         $input_hidden_versions json_decode($request->get('input_hidden_versions'));
  1619.         $input_hidden_flavours json_decode($request->get('input_hidden_flavours'));
  1620.         $input_hidden_maintenances json_decode($request->get('input_hidden_maintenances'));
  1621.         $input_hidden_renewals json_decode($request->get('input_hidden_renewals'));
  1622.         $input_hidden_extrafields json_decode($request->get('input_hidden_extrafields'));
  1623.         
  1624.         if ($dataProduct['producttype']) {
  1625.             $arrayGeneralParaRenovaciones = array(); // index => objecto, index => objeto
  1626.             $newproduct $this->insertProduct($dataProduct$progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository$input_hidden_extrafields$baseprice);
  1627.             if (!$newproduct) {
  1628.                 $session->getFlashBag()->add('danger'"SKU " $dataProduct['sku'] . " duplicado.");
  1629.             }
  1630.             else {
  1631.                 $arrayGeneralParaRenovaciones['1'] = $newproduct;
  1632.                 switch ($dataProduct['producttype']) {
  1633.                     case "3":
  1634.                         $maintenances = array();
  1635.                         foreach ($input_hidden_maintenances as $maintenance) {
  1636.                             $newmaintenance $this->insertMaintenances($dataProduct$maintenance$newproduct->getId(), $progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository);
  1637.                             array_push($maintenances$newmaintenance->getId());
  1638.                             $arrayGeneralParaRenovaciones[$maintenance->index] = $newmaintenance;
  1639.                         }
  1640.                         $newproduct->setMaintenanceSkuIds($maintenances);
  1641.                         $em->persist($newproduct);
  1642.                         $em->flush();
  1643.                         break;
  1644.                     //<option value="4" >flavoured_list_type</option>
  1645.                     //<option value="5" >flavoured_type</option>                 
  1646.                     //<option value="6" >flavoured_duration</option>
  1647.                     //<option value="10">flavoured_volumelist_duration</option>
  1648.                     //<option value="15">flavoured_duration_volumeinput</option>
  1649.                     //<option value="7" >flavoured_version</option>
  1650.                     //<option value="13">flavoured_version_volume_input</option>
  1651.                     //<option value="24">flavoured_volumeinput_duration_payperiod</option>
  1652.                     case "4":
  1653.                     case "5":
  1654.                     case "6":
  1655.                     case "10":
  1656.                     case "15":
  1657.                     case "7"// version=sabor
  1658.                     case "13"// version=sabor
  1659.                     case "24":
  1660.                     case "26":          
  1661.                         foreach ($input_hidden_flavours as $flavour) {
  1662.                             $newflavour $this->insertFlavour($dataProduct$flavour$newproduct->getId(), $newproduct->getId(), $progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository);
  1663.                             $arrayGeneralParaRenovaciones[$flavour->index] = $newflavour;
  1664.                         }
  1665.                         $newproduct->setHasFlavours(1);
  1666.                         $em->persist($newproduct);
  1667.                         $em->flush();
  1668.                         break;
  1669.                     //<option value="8" >flavour_list_with_maintenance</option>
  1670.                     //<option value="9" >flavour_with_maintenance</option>
  1671.                     //<option value="12">flavoured_version_maintenance</option>
  1672.                     case "8":
  1673.                     case "9":
  1674.                     case "12"// version=sabor    
  1675.                         $saboresRef = array(); // 2 => newFlavour(4789), 3 => newFlavour(4790)
  1676.                         foreach ($input_hidden_flavours as $flavour) {
  1677.                             $newflavour $this->insertFlavour($dataProduct$flavour$newproduct->getId(), $newproduct->getId(), $progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository);
  1678.                             $saboresRef[$flavour->index] = $newflavour;
  1679.                             $arrayGeneralParaRenovaciones[$flavour->index] = $newflavour;
  1680.                         }
  1681.                         $newproduct->setHasFlavours(1);
  1682.                         $em->persist($newproduct);
  1683.                         $em->flush();
  1684.                         $maintenancesRefs = array(); // 2 => array(4791, 4792, 4793), 3 => array(4794, 4795, 4796)
  1685.                         foreach ($input_hidden_maintenances as $maintenance) {
  1686.                             $newmaintenance $this->insertMaintenances($dataProduct$maintenance$newproduct->getId(), $progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository);
  1687.                             if (array_key_exists($maintenance->related$maintenancesRefs)) {
  1688.                                 array_push($maintenancesRefs[$maintenance->related], $newmaintenance->getId());
  1689.                             }
  1690.                             else {
  1691.                                 $maintenancesRefs[$maintenance->related] = array($newmaintenance->getId());
  1692.                             }
  1693.                             $arrayGeneralParaRenovaciones[$maintenance->index] = $newmaintenance;
  1694.                         }
  1695.                         foreach ($saboresRef as $key => $newFlavour) {
  1696.                             $newFlavour->setMaintenanceSkuIds($maintenancesRefs[$key]);
  1697.                             $em->persist($newFlavour);
  1698.                             $em->flush();
  1699.                         }
  1700.                         break;
  1701.                     //<option value="11" style="background-color: #f59c1a8a;">flavoured_version_with_volume</option>
  1702.                     //<option value="14" style="background-color: #f59c1a8a;">flavoured_version_volumeninput_rango</option>
  1703.                     //<option value="16" style="background-color: #f59c1a8a;">flavoured_version_volumeinput_duration</option>
  1704.                     case "11":
  1705.                     case "14":
  1706.                     case "16":
  1707.                     case "20":
  1708.                     case "21":        
  1709.                     case "25":
  1710.                         $versionsRef = array(); // 2 => newversion(4789), 3 => newversion(4790)
  1711.                         foreach ($input_hidden_versions as $version) {
  1712.                             $newversion $this->insertVersion($dataProduct$version$newproduct->getId(), $progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository); // insertVersion = I
  1713.                             $versionsRef[$version->index] = $newversion;
  1714.                             $arrayGeneralParaRenovaciones[$version->index] = $newversion;
  1715.                         }
  1716.                         $newproduct->setHasFlavours(1);
  1717.                         $em->persist($newproduct);
  1718.                         $em->flush();
  1719.                         foreach ($input_hidden_flavours as $flavour) {
  1720.                             $newflavour $this->insertFlavour($dataProduct$flavour$newproduct->getId(), $versionsRef[$flavour->related]->getId(), $progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository);
  1721.                             $saboresRef[$flavour->index] = $newflavour;
  1722.                             $arrayGeneralParaRenovaciones[$flavour->index] = $newflavour;
  1723.                         }
  1724.                         break;
  1725.                     case "22":
  1726.                     case "23":    
  1727.                         
  1728.                         $versionsRef = array(); // 2 => newversion(4789), 3 => newversion(4790)
  1729.                         foreach ($input_hidden_versions as $version) {
  1730.                             $newversion $this->insertVersion($dataProduct$version$newproduct->getId(), $progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository); // insertVersion = I
  1731.                             $versionsRef[$version->index] = $newversion;
  1732.                             $arrayGeneralParaRenovaciones[$version->index] = $newversion;
  1733.                         }
  1734.                         $newproduct->setHasFlavours(1);
  1735.                         $em->persist($newproduct);
  1736.                         $em->flush();
  1737.                         foreach ($input_hidden_flavours as $flavour) {
  1738.                             $newflavour $this->insertFlavour($dataProduct$flavour$newproduct->getId(), $versionsRef[$flavour->related]->getId(), $progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository);
  1739.                             $saboresRef[$flavour->index] = $newflavour;
  1740.                             $arrayGeneralParaRenovaciones[$flavour->index] = $newflavour;
  1741.                         }
  1742.                         $maintenancesRefs = array(); // 2 => array(4791, 4792, 4793), 3 => array(4794, 4795, 4796)
  1743.                         foreach ($input_hidden_maintenances as $maintenance) {
  1744.                             $newmaintenance $this->insertMaintenances($dataProduct$maintenance$newproduct->getId(), $progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository);
  1745.                             if (array_key_exists($maintenance->related$maintenancesRefs)) {
  1746.                                 array_push($maintenancesRefs[$maintenance->related], $newmaintenance->getId());
  1747.                             }
  1748.                             else {
  1749.                                 $maintenancesRefs[$maintenance->related] = array($newmaintenance->getId());
  1750.                             }
  1751.                             $arrayGeneralParaRenovaciones[$maintenance->index] = $newmaintenance;
  1752.                         }
  1753.                         foreach ($saboresRef as $key => $newFlavour) {
  1754.                             $newFlavour->setMaintenanceSkuIds($maintenancesRefs[$key]);
  1755.                             $em->persist($newFlavour);
  1756.                             $em->flush();
  1757.                         }
  1758.                         break;
  1759.                     default:
  1760.                         break;
  1761.                 }
  1762.                 foreach ($input_hidden_renewals as $renewal) {
  1763.                     $newrenewal $this->insertRenewal($dataProduct$renewal$newproduct->getId(), $progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository);
  1764.                     $arrayGeneralParaRenovaciones[$renewal->related]->setRenovationProduct($newrenewal);
  1765.                     $em->persist($arrayGeneralParaRenovaciones[$renewal->related]);
  1766.                     $em->flush();
  1767.                 }
  1768.                 $session->getFlashBag()->add('success''producto con SKU: "' $dataProduct['sku'] . '" creado.');
  1769.             }
  1770.         }
  1771.         
  1772.         
  1773.         $q =  $progsRepository->createQueryBuilder('vp');                  
  1774.         $progs=$q->leftJoin('vp.vendor''v')
  1775.             ->andWhere('v.unregistrationdate is null')
  1776.             //->andWhere('v.unregistrationdate is null and vp.unregistrationdate is null')
  1777.             ->orderBy('vp.name''asc')    
  1778.             ->getQuery()
  1779.             ->getResult();
  1780.         $units $unitsRepository->findAll();       
  1781.         //$payperiod = $payperiodRepository->findAll();
  1782.         $payperiod $em->createQuery("SELECT pp FROM \App\Entity\Payperiod pp "               
  1783.             "where pp.period <> '' ")
  1784.             ->getResult();
  1785.         return $this->render('product/createproduct.html.twig', [
  1786.             'programms' => $progs
  1787.             'units' => $units
  1788.             'payperiod' => $payperiod
  1789.         ]);
  1790.     }
  1791.     
  1792.     
  1793.     /**
  1794.     * 
  1795.     * @Route("/product/default/checkskus", name="product_checkskus")
  1796.     */
  1797.     public function checkskusAction(Request $request) {
  1798.         
  1799.         $em $this->getDoctrine()->getManager();
  1800.         
  1801.         $response = new Response();
  1802.        
  1803.         $error false;
  1804.         $duplicatedSkus = [];
  1805.         $totalSkus = [];
  1806.                 
  1807.         $skusToCheck json_decode($request->get('skus'));
  1808.         foreach ($skusToCheck as $key => $sku) {
  1809.             $totalSkus[$key] = $sku;
  1810.         }
  1811.         //dubplicados en el formulario
  1812.         $duplicatedSkus = array();
  1813.         foreach (array_count_values($totalSkus) as $val => $c) {
  1814.             if ($c 1) {
  1815.                 $domId array_search($val$totalSkus);
  1816.                 array_push($duplicatedSkus$domId);
  1817.             }
  1818.         }
  1819.         //dubplicados en BD
  1820.         if (!sizeof($duplicatedSkus) > 0) {
  1821.                                     
  1822.             $duplicateds $em->createQuery("SELECT p FROM \App\Entity\Product p "               
  1823.             'where p.sku IN (:skus) ')
  1824.             ->setParameter('skus'$totalSkus)
  1825.             ->getResult();
  1826.                         
  1827.             foreach ($duplicateds as $product) {
  1828.                 $domId array_search($product->getSku(), $totalSkus);
  1829.                 array_push($duplicatedSkus$domId);
  1830.             }
  1831.         }
  1832.         if (sizeof($duplicatedSkus) > 0) {
  1833.             $error true;
  1834.         }
  1835.         
  1836.         $response json_encode(array("error" => $error"duplicated" => $duplicatedSkus));
  1837.               
  1838.         return new Response($response200, array(
  1839.             'Content-Type' => 'application/json'
  1840.         ));        
  1841.     }
  1842.     
  1843.     
  1844.     public function insertProduct($productData$progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository$input_hidden_extrafields$baseprice) {
  1845.         $em $this->getDoctrine()->getManager();
  1846.         $product = new Product();
  1847.  
  1848.         $typeofproduct $em->createQuery("SELECT pt FROM \App\Entity\Producttype pt where pt.name = :typename ")->setParameter('typename'$productData['producttype_name'])->getOneOrNullResult();          
  1849.         $product->setProducttype($typeofproduct);     
  1850.         $product->setVendorProgramm($progsRepository->find($productData['programm']));      
  1851.         $product->setProductline($productlineRepository->find($productData['line']));
  1852.         $product->setLicenseType($licensetypeRepository->find($productData['licensetype'][0]));
  1853.         
  1854.         $product->setDownloadLink(empty($productData['downloadlink']) ? null $productData['downloadlink'] );
  1855.         $product->setConsoleLink(empty($productData['consolelink']) ? null $productData['consolelink'] );
  1856.         $product->setFare($productData['fare'] == 1);
  1857.         $product->setAcceptsMarkup($productData['markup']);
  1858.         $product->setCanSell($productData['function']);
  1859.         $product->setRequiresRenewal($productData['requiresrenewal']);
  1860.         $product->setCanSellAlone($productData['function']);
  1861.         $product->setProductVendorId($productData['vendorid']);
  1862.         $product->setDescriptiveName($productData['name']);
  1863.         $product->setDescriptiveName($productData['name']);
  1864.         $product->setSku($productData['sku']);
  1865.         $product->setName($productData['name']);
  1866.         $product->setPayperiod($payperiodRepository->find($productData['payperiod']));
  1867.         $product->setVolumeMin($productData['volumemin']);
  1868.         $product->setVolumeMax($productData['volumemax']);
  1869.         $product->setDuration($productData['duration']);
  1870.         $product->setProductUnit($unitsRepository->find($productData['unit']));
  1871.         $product->setIsHardware($productData['hardware']);
  1872.         
  1873.         $extra_fields json_decode(json_encode($input_hidden_extrafields), true);
  1874.         /*$licenseType=[];
  1875.         foreach($productData['licensetype'] as $lt)
  1876.         {
  1877.             $licenseType[$lt]=$licensetypeRepository->find($lt)->getName(); 
  1878.         }*/
  1879.         $parameters = [
  1880.             'licenseType' => $productData['licensetype'],///$licenseType,
  1881.         ];
  1882.         if (!empty($extra_fields) && is_array($extra_fields)) {
  1883.             $parameters = [
  1884.                 'extrafields' => $extra_fields
  1885.             ];
  1886.         }
  1887.         if($baseprice!=0){
  1888.             $parameters['baseprice']=($baseprice=='original' 'renewable');
  1889.         }
  1890.         $product->setParameters($parameters);
  1891.         $product->setRegistrationdate(new \DateTime());
  1892.         $em->persist($product);
  1893.         $em->flush();
  1894.         try {
  1895.             $product->setGroupId($product->getId());
  1896.             $em->persist($product);
  1897.             $em->flush();
  1898.         }
  1899.         catch (PropelException $pe) {
  1900.             return false;
  1901.         }
  1902.         return $product;
  1903.     }
  1904.     
  1905.     
  1906.     public function insertVersion($productData$version$baseId$progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository) {
  1907.         $em $this->getDoctrine()->getManager();
  1908.         $product = new Product();
  1909.         $product->setVendorProgramm($progsRepository->find($productData['programm']));      
  1910.         $product->setProductline($productlineRepository->find($productData['line']));
  1911.         $product->setLicenseType($licensetypeRepository->find($productData['licensetype'][0]));
  1912.         $product->setProductUnit($unitsRepository->find($productData['unit']));       
  1913.         $product->setDownloadLink(empty($productData['downloadlink']) ? null $productData['downloadlink'] );
  1914.         $product->setConsoleLink(empty($productData['consolelink']) ? null $productData['consolelink'] );
  1915.         $product->setFare($productData['fare'] == 1);
  1916.         $product->setAcceptsMarkup($productData['markup']);
  1917.         $product->setCanSell($productData['function']);
  1918.         $product->setCanSellAlone($productData['function']);
  1919.         $product->setRequiresRenewal($productData['requiresrenewal']);
  1920.         $product->setDescriptiveName($version->name);
  1921.         $product->setSku($version->sku);
  1922.         $product->setName($version->name);
  1923.         $product->setDescriptiveName($version->name);
  1924.         $product->setPayperiod($payperiodRepository->find($productData['payperiod']));
  1925.         $product->setVolumeMin($productData['volumemin']);
  1926.         $product->setVolumeMax($productData['volumemax']);
  1927.         $product->setDuration($productData['duration']);
  1928.         $product->setRegistrationdate(new \DateTime());
  1929.         $product->setGroupId($baseId);
  1930.         $product->setParentskuids(array($baseId));
  1931.         $product->setIsFlavour(1);
  1932.         $product->setIsHardware($productData['hardware']);
  1933.         $em->persist($product);
  1934.         $em->flush();
  1935.         return $product;
  1936.     }
  1937.     
  1938.     
  1939.     public function insertMaintenances($productData$manintenance$baseId$progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository) {
  1940.         $em $this->getDoctrine()->getManager();
  1941.         $product = new Product();
  1942.         $product->setVendorProgramm($progsRepository->find($productData['programm']));      
  1943.         $product->setProductline($productlineRepository->find($productData['line']));
  1944.         $product->setLicenseType($licensetypeRepository->find($productData['licensetype'][0]));
  1945.         $product->setProductUnit($unitsRepository->find($productData['unit']));       
  1946.         $product->setDownloadLink(empty($productData['downloadlink']) ? null $productData['downloadlink'] );
  1947.         $product->setConsoleLink(empty($productData['consolelink']) ? null $productData['consolelink'] );
  1948.         $product->setFare($productData['fare'] == 1);
  1949.         $product->setAcceptsMarkup($productData['markup']);
  1950.         $product->setCanSell($productData['function']);
  1951.         $product->setRequiresRenewal($productData['requiresrenewal']);
  1952.         $product->setDescriptiveName($manintenance->name);
  1953.         $product->setSku($manintenance->sku);
  1954.         $product->setName($manintenance->name);
  1955.         $product->setDescriptiveName($manintenance->name);
  1956.         $product->setPayperiod($payperiodRepository->find($manintenance->payperiod));
  1957.         $product->setVolumeMin($manintenance->volumemin);
  1958.         $product->setVolumeMax($manintenance->volumemax);
  1959.         $product->setDuration($manintenance->duration);
  1960.         $product->setProductVendorId($manintenance->vendorid);
  1961.         $product->setRegistrationdate(new \DateTime());
  1962.         $product->setGroupId($baseId);
  1963.         $product->setCanSellAlone(0);
  1964.         $product->setIsHardware($productData['hardware']);
  1965.         $em->persist($product);
  1966.         $em->flush();
  1967.         return $product;
  1968.     }
  1969.     
  1970.     
  1971.     public function insertFlavour($productData$flavour$groupId$linkId$progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository) {
  1972.         $em $this->getDoctrine()->getManager();
  1973.         $product = new Product();
  1974.         
  1975.         $product->setVendorProgramm($progsRepository->find($productData['programm']));      
  1976.         $product->setProductline($productlineRepository->find($productData['line']));
  1977.         $product->setLicenseType($licensetypeRepository->find($productData['licensetype'][0]));
  1978.         $product->setProductUnit($unitsRepository->find($productData['unit']));                     
  1979.         $product->setDownloadLink(empty($productData['downloadlink']) ? null $productData['downloadlink'] );
  1980.         $product->setConsoleLink(empty($productData['consolelink']) ? null $productData['consolelink'] );
  1981.         $product->setFare($productData['fare'] == 1);
  1982.         $product->setAcceptsMarkup($productData['markup']);
  1983.         $product->setCanSell($productData['function']);       
  1984.         $product->setCanSellAlone($productData['function']);
  1985.         if($productData['producttype']==26){
  1986.             $product->setCanSellAlone(0);
  1987.             $product->setMaintenanceSkuIds(array($linkId));    
  1988.         }
  1989.         $product->setRequiresRenewal($productData['requiresrenewal']);
  1990.         $product->setProductVendorId($productData['vendorid']);
  1991.                 
  1992.         $product->setDescriptiveName($flavour->name);
  1993.         
  1994.         $product->setSku($flavour->sku);
  1995.         $product->setName($flavour->name);
  1996.         $product->setDescriptiveName($flavour->name);
  1997.         $product->setPayperiod($payperiodRepository->find($flavour->payperiod));
  1998.         $product->setVolumeMin($flavour->volumemin);
  1999.         $product->setVolumeMax($flavour->volumemax);
  2000.         $product->setDuration($flavour->duration);
  2001.         $product->setProductVendorId($flavour->vendorid);
  2002.         $product->setRegistrationdate(new \DateTime());
  2003.         $product->setGroupId($groupId);
  2004.         $product->setParentskuids(array($linkId));
  2005.         $product->setIsFlavour(1);
  2006.         $product->setIsHardware($productData['hardware']);
  2007.         $em->persist($product);
  2008.         $em->flush();
  2009.         return $product;
  2010.     }
  2011.     
  2012.     
  2013.     public function insertRenewal($productData$renewal$groupId$progsRepository$productlineRepository$licensetypeRepository$unitsRepository$payperiodRepository) {
  2014.         $em $this->getDoctrine()->getManager();
  2015.         $product = new Product();
  2016.         $product->setVendorProgramm($progsRepository->find($productData['programm']));      
  2017.         $product->setProductline($productlineRepository->find($productData['line']));
  2018.         $product->setLicenseType($licensetypeRepository->find($productData['licensetype'][0]));
  2019.         $product->setProductUnit($unitsRepository->find($productData['unit']));       
  2020.         $product->setDownloadLink(empty($productData['downloadlink']) ? null $productData['downloadlink'] );
  2021.         $product->setConsoleLink(empty($productData['consolelink']) ? null $productData['consolelink'] );
  2022.         $product->setFare($productData['fare'] == 1);
  2023.         $product->setAcceptsMarkup($productData['markup']);
  2024.         $product->setCanSell($productData['function']);
  2025.         $product->setRequiresRenewal($productData['requiresrenewal']);
  2026.         $product->setProductVendorId($productData['vendorid']);
  2027.         $product->setDescriptiveName($renewal->name);
  2028.         $product->setSku($renewal->sku);
  2029.         $product->setName($renewal->name);
  2030.         $product->setDescriptiveName($renewal->name);
  2031.         $product->setPayperiod($payperiodRepository->find($renewal->payperiod));
  2032.         $product->setVolumeMin($renewal->volumemin);
  2033.         $product->setVolumeMax($renewal->volumemax);
  2034.         $product->setDuration($renewal->duration);
  2035.         $product->setProductVendorId($renewal->vendorid);
  2036.         $product->setRegistrationdate(new \DateTime());
  2037.         $product->setGroupId($groupId);
  2038.         $product->setCanSellAlone(0);
  2039.         $product->setIsHardware($productData['hardware']);
  2040.         $em->persist($product);
  2041.         $em->flush();
  2042.         return $product;
  2043.     }
  2044.          
  2045. }