<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Service\TrafficTracker;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\HttpFoundation\Request;
use App\Entity\Partner;
use App\Entity\Productbywholesaler;
use App\Entity\Vendorpartnerlevel;
use App\Entity\Vendors;
use App\Entity\Vendorprogramms;
use App\Entity\Productunit;
use App\Entity\Customer;
use App\Entity\Product;
use App\Entity\Usercart;
use App\Entity\User;
use App\Entity\Agreements;
use App\Entity\Productimages;
use App\Entity\Businessoportinities;
use App\Service\HeaderData;
use App\Service\Translation;
use App\Service\ServiceNotification;
use App\Entity\Productsbusinessoportinities;
use App\Form\Product\EditProduct;
use App\Form\Import\ProductsImport;
use App\Service\RegisterEvent;
use App\Service\ExtensionFileService;
use App\Service\SanitizeService;
use DateTime;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Serializer;
use App\Entity\Payperiod;
use Psr\Log\LoggerInterface;
use App\Service\PriceCalculatorService;
use App\Service\JsonSearchService;
class ProductController extends AbstractController {
private $priceCalculatorService;
public function __construct(PriceCalculatorService $priceCalculatorService)
{
$this->priceCalculatorService = $priceCalculatorService;
}
/**
*
* @Route("/product/default/index/{vendorId}/{status}", name="product_index")
*/
public function index(Request $request, TranslatorInterface $translator, TrafficTracker $trafficTracker, $vendorId = 0, $status = 1) {
$trafficTracker->registerTraffic();
$pbwRepository = $this->getDoctrine()->getRepository(Productbywholesaler::class);
$productRepository = $this->getDoctrine()->getRepository(Product::class);
$userRepository = $this->getDoctrine()->getRepository(user::class);
$user = $this->getUser();
$vendors = array();
$userKaty = false;
$miniVendor = false;
$idWholesaler = null;
if ($user->getWholesaler() == null && $user->getPartner() == null && $user->getCustomer() == null && $user->getVendor() == null) {
$userKaty = true;
$data = $productRepository->createQueryBuilder('p')->getQuery()->execute();
foreach($data as $p){
$vendors[$p->getProductline()->getVendor()->getId()]=$p->getProductline()->getVendor()->getName();
}
asort($vendors);
}
elseif($user->getWholesaler()){
$idWholesaler = $user->getWholesaler()->getId();
}
$statusArray=array(1 => $translator->trans('app.General.All'), 2 => $translator->trans('app.General.Active'), 3 => $translator->trans('app.General.Inactive'));
return $this->render('/product/index.html.twig', array(
'userKaty' => $userKaty==false ? 0 : 1,
'vendors' => $vendors,
'vendorId' => $vendorId,
'idWholesaler' => $idWholesaler==false ? 0 : $idWholesaler,
'miniVendor' => $userRepository->isMinivendor($user)==false ? 0 : 1,
'pbwRepository' => $pbwRepository,
'statusArray' => $statusArray,
'status' => $status
));
}
/**
* @Route("/server/processing", name="server_processing")
*/
public function serverProcessing(Request $request, TranslatorInterface $translator, Translation $translation)
{
$entityManager = $this->getDoctrine()->getManager();
$pbwRepository = $this->getDoctrine()->getRepository(Productbywholesaler::class);
$user = $this->getUser();
$locale = $request->getLocale();
$wholesaler = $user->getWholesaler() ? $user->getWholesaler()->getId() : null;
$vendor = $user->getVendor() ? $user->getVendor()->getId() : $_GET['vendorId'];
$status = $_GET['status'];
$columnNames=array();
$flavoursGroupIds = null;
$statusFilter = "";
if($user->getWholesaler())
{
if($status==2){ $statusFilter = " AND pbw.unregistrationdate is null"; }
if($status==3){ $statusFilter = " AND pbw.unregistrationdate is not null"; }
}
else{
if($status==2){ $statusFilter = " AND p.unregistrationdate is null"; }
if($status==3){ $statusFilter = " AND p.unregistrationdate is not null"; }
}
if($user->getWholesaler())
{
//BUSCAMOS primero por sku en los flavours de Productbywholesaler
if (!empty($_GET['search']['value'])) {
$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)';
$flavoursGroupIds = $entityManager
->createQuery($flavours)
->setParameter('wholesaler', $wholesaler)
->setParameter('sku', '%'.$_GET['search']['value'].'%')
->setParameter('name', $_GET['search']['value'])
->getResult();
}
}
else{
//BUSCAMOS primero por sku en los flavours de Product
if (!empty($_GET['search']['value'])) {
$flavours = 'SELECT DISTINCT p.groupid FROM App\Entity\Product p JOIN p.productLine pl JOIN pl.vendor v where ';
if ($vendor!=0) {
$flavours .= 'v.id = :vendor and ';
}
$flavours .= 'p.productType is null and (p.sku like :sku OR p.name like :name)';
$flavoursGroupIds = $entityManager->createQuery($flavours);
if ($vendor!=0) {
$flavoursGroupIds = $flavoursGroupIds->setParameter('vendor', $vendor);
}
$flavoursGroupIds = $flavoursGroupIds
->setParameter('sku', '%'.$_GET['search']['value'].'%')
->setParameter('name', $_GET['search']['value'])
->getResult();
}
}
if($user->getWholesaler())
{
$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;
$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;
}
else
{
$dql = 'SELECT p FROM App\Entity\Product p JOIN p.productLine pl JOIN pl.vendor v where ';
if($vendor!=0){$dql .= 'pl.vendor = :vendor and ';}
$dql .= 'p.productType is not null'.$statusFilter;
$dqlCountFiltered = 'SELECT count(p) FROM App\Entity\Product p JOIN p.productLine pl JOIN pl.vendor v where ';
if($vendor!=0){$dqlCountFiltered .= 'pl.vendor = :vendor and ';}
$dqlCountFiltered .= 'p.productType is not null'.$statusFilter;
}
$sqlFilter = '';
if($user->getWholesaler())
{
if (!empty($_GET['search']['value'])) {
$strMainSearch = $_GET['search']['value'];
$sqlFilter .= " (v.name LIKE '%".$strMainSearch."%' OR "
."pl.name LIKE '%".$strMainSearch."%' OR "
."p.name LIKE '%".$strMainSearch."%' OR ("
."p.sku LIKE '%".$strMainSearch."%' OR p.id IN (:flavoursGroupIds)) OR "
."p.duration LIKE '%".$strMainSearch."%' OR "
."pp.period LIKE '%".$strMainSearch."%' OR "
."pbw.price LIKE '%".$strMainSearch."%')";
}
$columnNames=[
'0' => '',
'1' => 'pl.vendor.name',
'2' => 'pl.name',
'3' => 'p.name',
'4' => 'p.sku',
'5' => 'p.duration',
'6' => 'pbw.price',
'7' => '',
'8' => ''
];
}
else{
if (!empty($_GET['search']['value'])) {
$strMainSearch = $_GET['search']['value'];
$sqlFilter .= " (v.name LIKE '%".$strMainSearch."%' OR "
."pl.name LIKE '%".$strMainSearch."%' OR "
."p.name LIKE '%".$strMainSearch."%' OR "
."p.sku LIKE '%".$strMainSearch."%' OR p.id IN (:flavoursGroupIds) OR "
."p.duration LIKE '%".$strMainSearch."%') ";
}
$columnNames=[
'0' => '',
'1' => 'pl.vendor.name',
'2' => 'pl.name',
'3' => 'p.name',
'4' => 'p.sku',
'5' => 'p.duration',
'6' => '',
'7' => ''
];
}
if (!empty($sqlFilter)) {
$dql .= ' AND'.$sqlFilter;
$dqlCountFiltered .= ' AND'.$sqlFilter;
}
if (!empty($_GET['order']['0']['column']!=1)) {
$dql .= ' ORDER BY '.$columnNames[$_GET["order"][0]["column"]].' '.$_GET["order"][0]["dir"];
}
else{
$dql .= ' ORDER BY v.name ASC';
}
if($user->getWholesaler())
{
$items = $entityManager
->createQuery($dql)
->setParameter('wholesaler', $wholesaler)
->setFirstResult($_GET['start']);
if ($_GET['length']!=-1) {
$items=$items->setMaxResults($_GET['length']);
}
if (!empty($sqlFilter)) {
$items=$items->setParameter('flavoursGroupIds', $flavoursGroupIds);
}
}
else
{
$items = $entityManager
->createQuery($dql)
->setFirstResult($_GET['start']);
if ($_GET['length']!=-1) {
$items=$items->setMaxResults($_GET['length']);
}
if ($vendor!=0) {
$items=$items->setParameter('vendor', $vendor);
}
if (!empty($sqlFilter)) {
$items=$items->setParameter('flavoursGroupIds', $flavoursGroupIds);
}
}
$items = $items->getResult();
$data = [];
if($user->getWholesaler())
{
//with WHOLESALER PROFILE we work with PRODUCTBYWHOLESALER entity
foreach ($items as $key => $value) {
$url = $this->generateUrl('product_editproduct', array('id' => $value->getId()));
$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>";
$circle = ($value->getProduct()->getProductType()->getId()!=1 || !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>" : "" ;
$currency = $user->getWholesaler()->getCurrency()->getIso();
$currencyFormat = new \NumberFormatter($request->getLocale(), \NumberFormatter::CURRENCY);
$data[] = [
'DT_RowId' => $value->getId(),
$circle,
$value->getProduct()->getProductline()->getVendor()->getName(),
$value->getProduct()->getProductline()->getName(),
"<span title='".$value->getProduct()->getName()."'><a href='".$url."' >".$value->getProduct()->getName()."</a></span>",
$value->getProduct()->getSku(),
$value->getProduct()->getDuration(),
$currencyFormat->formatCurrency(round($pbwRepository->getPrice($value), 2), $currency),
$translation->getTranslationBy($value->getProduct()->getPayperiod(), $locale, 'period'),
$status,
];
}
$recordsTotal = $entityManager
->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')
->setParameter('wholesaler', $wholesaler)
->getSingleScalarResult();
$recordsFiltered = $entityManager
->createQuery($dqlCountFiltered)
->setParameter('wholesaler', $wholesaler);
if (!empty($sqlFilter)) {
$recordsFiltered=$recordsFiltered->setParameter('flavoursGroupIds', $flavoursGroupIds);
}
$recordsFiltered = $recordsFiltered->getSingleScalarResult();
}
else
{
//with MINIVENDORS and KATY PROFILES we work with PRODUCT entity
foreach ($items as $key => $value) {
$url = $this->generateUrl('product_editproduct', array('id' => $value->getId()));
$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>";
$circle = ($value->getProductType()->getId()!=1 || !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>" : "" ;
$data[] = [
'DT_RowId' => $value->getId(),
$circle,
$value->getProductline()->getVendor()->getName(),
$value->getProductline()->getName(),
"<span title='".$value->getName()."'><a href='".$url."' >".$value->getName()."</a></span>",
$value->getSku(),
$value->getDuration(),
$translation->getTranslationBy($value->getPayperiod(), $locale, 'period'),
$status,
];
}
$queryRecordsTotal='';
if ($vendor!=0) {
$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';
}
else{
$queryRecordsTotal='SELECT count(p) FROM App\Entity\Product p JOIN p.productLine pl where p.productType is not null';
}
$recordsTotal = $entityManager->createQuery($queryRecordsTotal);
if ($vendor!=0) {
$recordsTotal=$recordsTotal->setParameter('vendor', $vendor);
}
$recordsTotal = $recordsTotal->getSingleScalarResult();
$recordsFiltered = $entityManager
->createQuery($dqlCountFiltered);
if ($vendor!=0) {
$recordsFiltered=$recordsFiltered->setParameter('vendor', $vendor);
}
if (!empty($sqlFilter)) {
$recordsFiltered=$recordsFiltered->setParameter('flavoursGroupIds', $flavoursGroupIds);
}
$recordsFiltered = $recordsFiltered->getSingleScalarResult();
}
return $this->json([
'recordsTotal' => $recordsTotal,
'recordsFiltered' => $recordsFiltered,
'data' => $data,
'dql' => $dql,
'groupIds' => $flavoursGroupIds,
'dqlCountFiltered' => $dqlCountFiltered,
]);
}
/**
* @Route("/product/default/exportproducts", name="product_export")
*/
public function exportProducts(Request $request, TrafficTracker $trafficTracker, TranslatorInterface $translator) {
$trafficId = $trafficTracker->registerTraffic();
$user = $this->getUser();
$entityManager = $this->getDoctrine()->getManager();
$pbwRepository = $this->getDoctrine()->getRepository(Productbywholesaler::class);
$entityIds = $request->request->get('entityIds');
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->SetCellValue('A1', $translator->trans('app.General.Vendor'));
$sheet->SetCellValue('B1', $translator->trans('app.General.ProductLine'));
$sheet->SetCellValue('C1', $translator->trans('app.General.Name'));
$sheet->SetCellValue('D1', $translator->trans('app.General.SKU'));
$sheet->SetCellValue('E1', $translator->trans('app.General.Duration'));
if ($user->getWholesaler()) {
$sheet->SetCellValue('F1', $translator->trans('app.General.Price'));
$sheet->SetCellValue('G1', $translator->trans('app.LicenseManager.PaymentPeriod'));
$sheet->SetCellValue('H1', $translator->trans('app.General.Status'));
}
else{
$sheet->SetCellValue('F1', $translator->trans('app.LicenseManager.PaymentPeriod'));
$sheet->SetCellValue('G1', $translator->trans('app.General.Status'));
}
if ($user->getWholesaler()) {
$groupIds = $entityManager
->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)')
->setParameter('wholesaler', $user->getWholesaler())
->setParameter('pbwIds', $entityIds)
->getResult();
$pbws = $entityManager
->createQuery('SELECT pbw FROM App\Entity\Productbywholesaler pbw JOIN pbw.product p where p.groupid IN (:groupIds) and pbw.wholesaler = :wholesaler')
->setParameter('wholesaler', $user->getWholesaler())
->setParameter('groupIds', $groupIds)
->getResult();
$pos = 2;
foreach ($pbws as $pbw) {
$sheet->SetCellValue('A' . $pos, $pbw->getProduct()->getProductline()->getVendor()->getName());
$sheet->SetCellValue('B' . $pos, $pbw->getProduct()->getProductline()->getName());
$sheet->SetCellValue('C' . $pos, $pbw->getProduct()->getName());
$sheet->SetCellValue('D' . $pos, $pbw->getProduct()->getSku());
$sheet->SetCellValue('E' . $pos, $pbw->getProduct()->getDuration());
$currency = $user->getWholesaler()->getCurrency()->getIso();
$currencyFormat = new \NumberFormatter($request->getLocale(), \NumberFormatter::CURRENCY);
$sheet->SetCellValue('F' . $pos, $currencyFormat->formatCurrency(round($pbwRepository->getPrice($pbw), 2), $currency));
$sheet->SetCellValue('G' . $pos, $pbw->getProduct()->getPayperiod()->getPeriod());
$sheet->SetCellValue('H' . $pos, !is_null($pbw->getUnregistrationdate()) ? $translator->trans('app.General.Inactive') : $translator->trans('app.General.Active'));
$pos++;
}
}
else{
$products = $entityManager
->createQuery('SELECT p FROM App\Entity\Product p where p.groupid IN (:groupIds)')
->setParameter('groupIds', $entityIds)
->getResult();
$pos = 2;
foreach ($products as $p) {
$sheet->SetCellValue('A' . $pos, $p->getProductline()->getVendor()->getName());
$sheet->SetCellValue('B' . $pos, $p->getProductline()->getName());
$sheet->SetCellValue('C' . $pos, $p->getName());
$sheet->SetCellValue('D' . $pos, $p->getSku());
$sheet->SetCellValue('E' . $pos, $p->getDuration());
$sheet->SetCellValue('F' . $pos, $p->getPayperiod()->getPeriod());
$sheet->SetCellValue('G' . $pos, $p->getDuration());
$pos++;
}
}
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$fileName = 'orders_' . date('Y-m-d') . '.xlsx';
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="' . urlencode($fileName) . '"');
header('Cache-Control: max-age=0');
ob_start();
$writer->save('php://output');
$xlsData = ob_get_contents();
ob_end_clean();
$response = array('op' => 'ok', 'file' => "data:application/vnd.ms-excel;base64," . base64_encode($xlsData));
die(json_encode($response));
}
/**
*
* @Route("/product/default/editproduct/{id}", name="product_editproduct", requirements={"id"="\d+"})
*/
public function editproduct(Request $request, TrafficTracker $trafficTracker, TranslatorInterface $translator, Translation $translation, RegisterEvent $registerEvent, SanitizeService $sanitizeService, JsonSearchService $jsonSearchService, $id = 0, ExtensionFileService $extensionFileService) {
$trafficTracker->registerTraffic();
$entityManager = $this->getDoctrine()->getManager();
$productRepository = $this->getDoctrine()->getRepository(Product::class);
$pbwRepository = $this->getDoctrine()->getRepository(Productbywholesaler::class);
$userRepository = $this->getDoctrine()->getRepository(User::class);
$licensetypeRepository = $this->getDoctrine()->getRepository(\App\Entity\Licensetype::class);
$locale = $request->getLocale();
$session = $this->get('session');
$productQ = $productRepository->find($id);
$user = $this->getUser();
$currency = array();
$control = false;
$userKaty = null;
$isBasePrice = false;
if ($user->getWholesaler()) {
$product = $entityManager->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw "
. 'where pbw.wholesaler = :idWholesaler and pbw.id = :id ')
->setParameter('idWholesaler', $this->getUser()->getWholesaler()->getId())
->setParameter('id', $id)
->getOneOrNullResult();
if (!is_null($product)) { $isBasePrice = $productRepository->isBasePriceProduct($product->getProduct()); }
}
else if ($user->getVendor()) {
if (!$productQ) {
return $this->redirectToRoute('product_index');
}
$product = $entityManager->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw "
. 'where pbw.product = :product ')
->setParameter('product', $productQ)
->getResult();
$isBasePrice = $productRepository->isBasePriceProduct($productQ);
}
else if ($user->getPartner() == null && $user->getCustomer() == null) {
$userKaty = true;
$product = $productRepository->find($id);
}
if (!$product) { return $this->redirectToRoute('product_index'); }
$productImages = array();
$productCover = array();
$productBwImages = array();
$cont = array();
if ($this->getUser()->getWholesaler()) {
if ($product->getUnregistrationdate() != null) {
$active = false;
}
else {
$active = true;
}
$data = array(
'precio' => $pbwRepository->getPrice($product, false) ? $pbwRepository->getPrice($product, false) : 0,
'active' => $active,
'description' => $product->getDescription(),
'saleTerms' => $product->getSaleTerms(),
'requirements' => $product->getRequirements(),
//'stock' => 0,
//'allowOverage' => true,
//'overage' => 0,
'isHardware' => $product->getProduct()->getIsHardware(),
'isBasePrice' => $isBasePrice,
'basePrice' => $product->getBasePrice(),
'isMain' => $product->getProduct()->getId()==$product->getProduct()->getGroupid() ? true : false
);
}
else if ($this->getUser()->getVendor()) {
foreach ($product as $p) {
if ($p->getUnregistrationdate() != null) {
$active = false;
}
else {
$active = true;
}
$data[$p->getId()] = array(
'id' => $p->getId(),
'country' => $p->getWholesaler()->getCountry()->getAlpha3Code(),
'precio' => $pbwRepository->getPrice($p, false) ? $pbwRepository->getPrice($p, false) : 0,
'active' => $active,
'description' => $p->getDescription(),
'saleTerms' => $p->getSaleTerms(),
'requirements' => $p->getRequirements(),
);
}
}
else if ($userKaty) {
if ($product->getUnregistrationdate() != null) {
$active = false;
}
else {
$active = true;
}
$data = array(
'active' => $active,
);
}
$form = $this->createForm(EditProduct::class, null, array(
'translator' => $translator,
'productQ' => $productQ,
'data' => $data,
'user' => $user,
'userKaty' => $userKaty,
));
$form->handleRequest($request);
// If cancelled
if ($form->getClickedButton() && 'cancel' === $form->getClickedButton()->getName()) {
$this->get('session')->getFlashBag()->add('warning', $translator->trans('app.General.SystemMessages.NoChanges'));
return $this->redirectToRoute('product_index');
}
if ($userKaty || $user->getVendor() && $productQ->getIsFlavour() == 0 && $productQ->getCanSellAlone() == 1) {
//Delete coverImage
if ($form->isSubmitted() && $form->isValid() && $form->get('deletecoverImage')->isClicked()) {
$post = $form->getData();
$selectedimages = $post['selecteditemsCover'];
$selectedimagesarray = explode(',', $selectedimages);
$this->deleteImages($translator, $id, $selectedimagesarray, $session, $extensionFileService);
return $this->redirectToRoute('product_editproduct', array('id' => $id));
}
}
if ($userKaty || $user->getWholesaler() || $user->getVendor() && $productQ->getIsFlavour() == 0 && $productQ->getCanSellAlone() == 1) {
//Delete images
if ($form->isSubmitted() && $form->isValid() && $form->get('deleteImages')->isClicked()) {
$post = $form->getData();
$selectedimages = $post['selecteditems'];
$selectedimagesarray = explode(',', $selectedimages);
$this->deleteImages($translator, $id, $selectedimagesarray, $session, $extensionFileService);
return $this->redirectToRoute('product_editproduct', array('id' => $id));
}
if ($user->getVendor()) {
foreach ($product as $p) {
if ($form->isSubmitted() && $form->isValid() && $form->get('deletepbwImages_' . $p->getId())->isClicked()) {
$post = $form->getData();
$selectedimages = $post['selecteditemsPbwImages_' . $p->getId()];
$selectedimagesarray = explode(',', $selectedimages);
$this->deleteImages($translator, $id, $selectedimagesarray, $session, $extensionFileService);
$control = true;
}
}
if ($control == true) {
return $this->redirectToRoute('product_editproduct', array('id' => $id));
}
}
}
if ($form->isSubmitted() and $form->isValid()) {
$post = $form->getData();
if ($user->getWholesaler()) {
if ($post['active']) {
$prd = $productRepository->find($product->getProduct());
if ($prd->getId() == $prd->getGroupId()) {
$prdGroup = $entityManager->createQuery('SELECT p FROM App\Entity\Product p '
. 'where p.groupid = :groupId ')
->setParameters(array('groupId' => $prd->getGroupId()))
->getResult();
$pbwToActive = $pbwRepository->createQueryBuilder('pbw')
->andWhere('pbw.wholesaler = :idWholesaler and pbw.product IN (:products)')
->setParameters(array('idWholesaler'=> $user->getWholesaler(), 'products'=> $prdGroup))
->getQuery()
->getResult();
foreach ($pbwToActive as $pbw) {
$pbw->setUnregistrationdate(null);
$entityManager->persist($pbw);
$entityManager->flush();
}
}
else {
$product->setUnregistrationdate(null);
}
}
else if(!$product->getUnregistrationdate() && $post['active'] == false){
$prd = $productRepository->find($product->getProduct());
if ($prd->getId() == $prd->getGroupId()) {
$prdGroup = $entityManager->createQuery('SELECT p FROM App\Entity\Product p '
. 'where p.groupid = :groupId ')
->setParameters(array('groupId' => $prd->getGroupId()))
->getResult();
$pbwToDelete = $pbwRepository->createQueryBuilder('pbw')
->andWhere('pbw.wholesaler = :idWholesaler and pbw.product IN (:products)')
->setParameters(array('idWholesaler'=> $user->getWholesaler(), 'products'=> $prdGroup))
->getQuery()
->getResult();
foreach ($pbwToDelete as $pbw) {
$pbw->setUnregistrationdate(new \DateTime());
$entityManager->persist($pbw);
$entityManager->flush();
}
}
else {
$product->setUnregistrationdate(new \DateTime());
}
}
if($sanitizeService->getSanitize($form->get('description')->getData())){
$product->setDescription($form['description']->getData());
}else{
$product->setDescription('');
}
if($sanitizeService->getSanitize($form->get('requirements')->getData())){
$product->setRequirements($form['requirements']->getData());
}else{
$product->setRequirements('');
}
if($sanitizeService->getSanitize($form->get('saleTerms')->getData())){
$product->setSaleTerms($form['saleTerms']->getData());
}else{
$product->setSaleTerms('');
}
$product->setPrice($post['Price']);
if($isBasePrice){$product->setBasePrice($post['BasePrice']);}
$entityManager->persist($product);
$entityManager->flush();
}
if ($user->getVendor()) {
foreach ($product as $p) {
$p->setPrice($post['Price_' . $p->getId()]);
if ($user->getWholesaler() || $user->getVendor() && $productQ->getIsFlavour() == 0 && $productQ->getCanSellAlone() == 1) {
$p->setDescription($post['description_' . $p->getId()]);
$p->setSaleTerms($post['saleTerms_' . $p->getId()]);
$p->setRequirements($post['requirements_' . $p->getId()]);
}
$entityManager->persist($p);
$entityManager->flush();
}
}
//Save the images in the product If there is an attachment
if (!empty($post['attachment_'])) {
$postType = "attachment_";
$this->addImages($id, $product, $post['attachment_'], $userKaty, $postType, $translator, $registerEvent, $session);
}
foreach ($product as $p) {
if (!empty($post['pbwImages_' . $p->getId()])) {
$postType = "attachmentpbw_";
$this->addImages($id, $p, $post['pbwImages_' . $p->getId()], $userKaty, $postType, $translator, $registerEvent, $session);
}
}
if (!empty($post['coverImage_'])) {
$imageCover = $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '
. 'where pi.product = :product and pi.iscoverimage = 1 ')
->setParameters(array('product' => $productQ))
->getResult();
if (sizeof($imageCover) != 0) {
$this->get('session')->getFlashBag()->add('danger', $translator->trans('app.General.SystemMessages.LimitExceeded'));
return $this->redirectToRoute('product_editproduct', array('id' => $id));
}
$postType = "coverImage_";
$this->addImages($id, $product, $post['coverImage_'], $userKaty, $postType, $translator, $registerEvent, $session);
}
if ($session->getFlashBag()->keys() == null)
{
if ($form->getClickedButton() && 'save' === $form->getClickedButton()->getName()) {
$session->getFlashBag()->add('success', $translator->trans('app.General.SystemMessages.ChangesSaved'));
return $this->redirectToRoute('product_index');
}
if ($user->getVendor()) {
foreach ($product as $p) {
if ($form->isSubmitted() && $form->isValid() && $form->get('save_view_' . $p->getId())->isClicked()) {
if ($p->getUnregistrationdate()) {
$session->getFlashBag()->add('success', $translator->trans('app.General.SystemMessages.ChangesSaved'));
}
else {
return $this->redirectToRoute('catalog_view', array('id' => $p->getId()));
}
}
}
}
if (!$user->getVendor() && $form->getClickedButton() && 'save_view' === $form->getClickedButton()->getName()) {
if ($product->getUnregistrationdate()) {
$session->getFlashBag()->add('success', $translator->trans('app.General.SystemMessages.ChangesSaved'));
return $this->redirectToRoute('product_index');
}
else {
return $this->redirectToRoute('catalog_view', array('id' => $id));
}
}
}
else {
foreach ($session->getFlashBag()->all()['danger'] as $a) {
$session->getFlashBag()->add('danger', $a);
}
return $this->redirectToRoute('product_editproduct', array('id' => $id));
}
}
if ($this->getUser()->getWholesaler()) {
$images = $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '
. 'where pi.productByWholesaler = :pbw and pi.iscoverimage = 0 ')
->setParameters(array('pbw' => $product))
->getResult();
}
else if ($user->getVendor()) {
$images = $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '
. 'where pi.product = :product and pi.iscoverimage = 0 and pi.productByWholesaler is null ')
->setParameters(array('product' => $productQ))
->getResult();
foreach ($product as $pId) {
$IdW[] = $pId->getId();
}
$imagespbw = $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '
. 'where pi.productByWholesaler IN (:pbw) and pi.iscoverimage = 0 ')
->setParameters(array('pbw' => $IdW))
->getResult();
if (!empty($imagespbw)) {
for ($pos = 0; $pos < sizeof($imagespbw); $pos++) {
$productBwImages[] = [
'id' => $imagespbw[$pos]->getId(),
'pbwId' => $imagespbw[$pos]->getProductByWholesaler()->getId(),
'path' => '/uploads/images/productImages/' . $imagespbw[$pos]->getImageName(),
'default' => $imagespbw[$pos]->getIsDefaultImage(),
'cover' => $imagespbw[$pos]->getIsCoverImage()
];
}
for ($pos = 0; $pos < sizeof($imagespbw); $pos++) {
$cont[$imagespbw[$pos]->getProductByWholesaler()->getId()] = [];
}
}
$imageCover = $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '
. 'where pi.product = :product and pi.iscoverimage = 1 ')
->setParameters(array('product' => $productQ))
->setMaxResults(1)
->getOneOrNullResult();
}
else if ($userKaty) {
$productQ = $product;
$images = $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '
. 'where pi.product = :product and pi.productByWholesaler is null and pi.iscoverimage = 0 ')
->setParameters(array('product' => $productQ))
->getResult();
$imageCover = $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '
. 'where pi.product = :product and pi.iscoverimage = 1 ')
->setParameters(array('product' => $productQ))
->setMaxResults(1)
->getOneOrNullResult();
}
if (!empty($images)) {
for ($pos = 0; $pos < sizeof($images); $pos++) {
$productImages[] = [
'id' => $images[$pos]->getId(),
'path' => '/uploads/images/productImages/' . $images[$pos]->getImageName(),
'default' => $images[$pos]->getIsDefaultImage(),
'cover' => $images[$pos]->getIsCoverImage()
];
}
}
if (!empty($imageCover)) {
$productCover = [
'id' => $imageCover->getId(),
'path' => '/uploads/images/productImages/' . $imageCover->getImageName(),
'default' => $imageCover->getIsDefaultImage(),
'cover' => $imageCover->getIsCoverImage()
];
}
if ($this->getUser()->getWholesaler()) {
$productQ = $product->getProduct();
}
if ($this->getUser()->getVendor()) {
foreach ($product as $item) {
$agreement = $entityManager->createQuery('SELECT a FROM App\Entity\Agreements a '
. 'where a.programm = :programm and a.wholesaler = :wholesaler ')
->setParameters(array('programm' => $productQ->getVendorProgramm()->getId(), 'wholesaler'=>$item->getWholesaler()->getId()))
->setMaxResults(1)
->getOneOrNullResult();
$currency[$item->getWholesaler()->getId()] = ( ($agreement) ? $agreement->getEntryCurrency()->getIso() : $item->getWholesaler()->getCurrency()->getIso());
}
}
$licenseTypeIds=$jsonSearchService->searchKeyInArray($productRepository->getParentSkuIds($productQ)->getParameters(), 'licenseType');
$licenseTypes=[];
if($licenseTypeIds){
foreach($licenseTypeIds[0] as $value){
$lt = $licensetypeRepository->find((int)$value);
$licenseTypes[$lt->getId()] = $translation->getTranslationBy($lt, $locale, 'name');
}
}
return $this->render('/product/editproduct.html.twig', array(
'cont' => $cont,
'currency' => $currency,
'productByWh' => $product,
'product' => $productQ,
'payperiod' => $productQ->getPayPeriod(),
'licensetype' => $licenseTypes,
'productImages' => $productImages,
'productCover' => $productCover,
'productBwImages' => $productBwImages,
'userKaty' => $userKaty,
'form' => $form->createView(),
'userRepository' => $userRepository,
'isBasePrice' => $isBasePrice,
));
}
public function addImages($id, $product, $post, $userKaty, $postType, $translator, $registerEvent, $session) {
$entityManager = $this->getDoctrine()->getManager();
$productRepository = $this->getDoctrine()->getRepository(Product::class);
$user = $this->getUser();
$numImg = 0;
foreach ($post as $img) {
$productImg = new Productimages();
// Get extension
$extension = $img->guessExtension();
// Get size
$size = $img->getSize();
$valid_extensions = array('jpeg', 'jpg', 'png', 'gif');
if (in_array($extension, $valid_extensions)) {
//Check file size '1MB'
if ($size < 1000000) {
$image = getimagesize($img);
$maximum = array(
'width' => '500',
'height' => '600'
);
$image_width = $image[0];
$image_height = $image[1];
if ($image_width > $maximum['width'] || $image_height > $maximum['height']) {
$session->getFlashBag()->add('danger', $translator->trans('app.General.Guidelines.Max500px'));
return $this->redirectToRoute('product_editproduct', ['id' => $id]);
}
else {
// Get extension
$filename = uniqid() . '.' . $extension;
$productImg->setImagename($filename);
// Try to save file
$img->move($this->getParameter('private_folder').'/images/productImages/', $filename);
$productImg->setRegistrationdate(new \DateTime());
if ($postType == "attachment_") {
if ($user->getWholesaler()) {
$productImg->setProductByWholesaler($product);
}
else if ($userKaty or $user->getVendor()) {
$productQ = $productRepository->find($id);
if ($user->getVendor()) {
$product = $productQ;
}
$productImg->setProduct($product);
}
if ($numImg == 0) {
$images = $entityManager->createQuery('SELECT pi FROM App\Entity\Productimages pi '
. 'where pi.product = :productId and pi.isdefaultimage = 1')
->setParameters(array('productId' => $id))
->getResult();
if (sizeof($images)) {
$productImg->setisDefaultImage(1);
}
}
}
if ($postType == "coverImage_") {
$productQ = $productRepository->find($id);
if ($user->getVendor()) {
$product = $productQ;
}
$productImg->setProduct($product);
$productImg->setIsCoverImage(1);
}
if ($postType == "attachmentpbw_") {
$productImg->setProductByWholesaler($product);
}
$entityManager->persist($productImg);
$entityManager->flush();
$registerEvent->addModifiedBy($productImg, $this->getUser()->getId());
$numImg++;
}
}
else {
$session->getFlashBag()->add('danger', $translator->trans('app.General.Guidelines.ImageSize'));
return $this->redirectToRoute('product_editproduct', array('id' => $id));
}
}
else {
$session->getFlashBag()->add('danger', $translator->trans('app.General.Guidelines.ImageFormat'));
return $this->redirectToRoute('product_editproduct', array('id' => $id));
}
}
}
private function deleteImages($translator, $productId, $imagesId, $session, $extensionFileService) {
$mistakes = false;
$entityManager = $this->getDoctrine()->getManager();
$imageRepository = $this->getDoctrine()->getRepository(Productimages::class);
foreach ($imagesId as $id) {
$imageToDelete = $imageRepository->find($id);
if ($imageToDelete != null) {
$image_path = $this->getParameter('private_folder').'/images/productImages/' . $imageToDelete->getImagename();
$imageName = $imageToDelete->getImagename();
$sanitize = $extensionFileService->getSanitize('img', $imageName);
if($sanitize){
if (file_exists($image_path)) {
unlink($image_path);
}
$entityManager->remove($imageToDelete);
$entityManager->flush();
}
else {
$mistakes = true;
}
}
else {
$mistakes = true;
}
}
if (!$imagesId){
$session->getFlashBag()->add('danger', $translator->trans('app.General.SystemMessages.NoChanges'));
}
if ($mistakes){
$session->getFlashBag()->add('danger', $translator->trans('app.General.SystemMessages.NoChanges'));
}
else{
$session->getFlashBag()->add('success', $translator->trans('app.General.SystemMessages.Deleted'));
}
}
private function searchProductsToDownload($pais=0) {
$em = $this->getDoctrine()->getManager();
$userRepository = $this->getDoctrine()->getRepository(User::class);
$user = $userRepository->find($this->getUser()->getId());
if ($pais) {
$wholesaler = $em->createQuery('SELECT w FROM App\Entity\Wholesaler w '
. 'where w.country = :country ')
->setParameters(array('country' => $pais))
->setMaxResults(1)
->getOneOrNullResult();
}
else {
$wholesaler = $user->getWholesaler();
}
$productByWholesaler= $em->createQuery('SELECT pbw FROM App\Entity\Productbywholesaler pbw '
. ' JOIN pbw.product p '
. ' JOIN p.productLine pl'
. ' JOIN pl.vendor v '
. 'where pbw.wholesaler = :wholesaler and v.isminivendor = 0'
. 'and p.unregistrationdate is null')
->setParameters(array('wholesaler' => $wholesaler))
->getResult();
if($userRepository->isMiniVendor($user)){
$productByWholesaler= $em->createQuery('SELECT pbw FROM App\Entity\Productbywholesaler pbw '
. ' JOIN pbw.product p '
. ' JOIN p.productLine pl '
. ' JOIN pl.vendor v '
. 'where pbw.wholesaler = :wholesaler and v.id = :vendor '
. 'and p.unregistrationdate is null')
->setParameters(array('wholesaler' => $wholesaler->getId(), 'vendor'=>$this->getUser()->getVendor()->getId()))
->getResult();
}
return $productByWholesaler;
}
/**
*
* @Route("/product/default/editbackofficeproduct/{groupid}", name="edit_backoffice_product", requirements={"groupid"="\d+"}))
*/
public function editpbw(Request $request, $groupid, $edit = null) {
$em = $this->getDoctrine()->getManager();
$payPeriodRepository = $this->getDoctrine()->getRepository(\App\Entity\Payperiod::class);
$productRepository = $this->getDoctrine()->getRepository(\App\Entity\Product::class);
$productUnitRepository = $this->getDoctrine()->getRepository(\App\Entity\Productunit::class);
$plRepository = $this->getDoctrine()->getRepository(\App\Entity\Productline::class);
$vpRepository = $this->getDoctrine()->getRepository(\App\Entity\Vendorprogramms::class);
$edit = $request->get('edit');
$updates = json_decode($request->get('updates'));
if ($edit) {
foreach ($updates as $key => $toedit) {
$product = $productRepository->find($key);
$product->setName($toedit->name);
$product->setDescriptiveName($toedit->descriptivename);
$product->setDuration($toedit->duration);
$product->setPayperiod($payPeriodRepository->find($toedit->payperiod));
$product->setVolumeMin($toedit->volmin);
$product->setVolumeMax($toedit->volmax);
$product->setProductUnit($productUnitRepository->find($toedit->unitid));
$product->setProductline($plRepository->find($toedit->plid));
$product->setProductVendorId($toedit->productVendorId);
$product->setIsVolumeEditable($toedit->volumeEditable);
$product->setDownloadLink($toedit->downloadLink);
$product->setConsoleLink($toedit->consoleLink);
$product->setFare($toedit->fare == 0 ? 0 : 1);
if($product->getProducttype()){
$product->setCanSellAlone($request->get('catalog'));
}
$product->setCanSell($request->get('catalog'));
$product->setAcceptsMarkup($toedit->markup);
$product->setQuantityActive($toedit->quantityActive);
$product->setAddons(explode (",", $toedit->addons));
$product->setOrderPriority($toedit->orderPriority);
$product->setRequiresRenewal($request->get('requiresRenewal'));
$product->setVendorProgramm($vpRepository->find($request->get('programm')));
$product->setIsHardware($toedit->isHardware == 0 ? 0 : 1);
$product->setParameters(json_decode($toedit->parameters, true));
$product->setRenovationProduct($productRepository->find($toedit->defaultRenewal));
if($toedit->limitRenewalMonths!=""){
$product->setLimitRenewalMonths($toedit->limitRenewalMonths);
}
try {
$product->setSku($toedit->sku);
$em->persist($product);
$em->flush();
}
catch (\Exception $e) {
$this->get('session')->getFlashBag()->add('danger', 'Duplicated Sku: '.$toedit->sku);
return $this->redirectToRoute('edit_backoffice_product', ['groupid' => $groupid]);
}
}
}
$products= $em->createQuery('SELECT p FROM App\Entity\Product p '
. 'where p.groupid = :group')
->setParameter('group', $groupid)
->getResult();
$arrayProductLines = array();
if ($groupid) {
$vendorProgramm= $em->createQuery('SELECT vp FROM App\Entity\Vendorprogramms vp '
. 'where vp.id = :vpId')
->setParameter('vpId', $products[0]->getVendorProgramm()->getId())
->setMaxResults(1)
->getOneOrNullResult();
$productLines= $em->createQuery('SELECT pl FROM App\Entity\Productline pl '
. 'where pl.vendor = :vendorId ORDER BY pl.name asc')
->setParameter('vendorId', $vendorProgramm->getVendor()->getId())
->getResult();
$payperiods= $em->createQuery('SELECT pl FROM App\Entity\Productline pl '
. 'where pl.vendor = :vendorId')
->setParameter('vendorId', $vendorProgramm->getVendor()->getId())
->getResult();
$programms= $em->createQuery('SELECT p FROM App\Entity\Vendorprogramms p')->getResult();
foreach ($productLines as $pl) {
array_push($arrayProductLines, array("id" => $pl->getId(), "name" => $pl->getName(), "vname" => $pl->getVendor()->getName()));
}
}
return $this->render('backoffice/editbackofficeproduct.html.twig', [
'data' => $products,
'groupid' => $groupid,
'productlines' => $arrayProductLines,
'payperiods'=> $payPeriodRepository->findAll(),
'programms' => $programms
]);
}
/**
*
* @Route("/product/default/getproductsgroup", name="product_getproductsgroup")
*/
public function getproductsgroup(Request $request, TranslatorInterface $translator) {
$em = $this->getDoctrine()->getManager();
$arrayProducts = array();
$groupid = $request->get('id');
$products = $em->createQuery("SELECT p FROM \App\Entity\Product p "
. 'where p.groupid = :group and p.id <> :group')
->setParameter('group', $groupid)
->getResult();
foreach ($products as $product) {
$url = $this->generateUrl('product_editproduct', array('id' => $product->getId()));
$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>";
$arrayProducts[$product->getId()] = array(
$product->getId(),
$product->getProductline()->getName(),
$product->getName(), $product->getSku(),
$product->getGroupid(),
$product->getDuration(),
$product->getPayperiod()->getPeriod(),
$product->getVolumemin(),
$product->getVolumemax(),
$product->getVendorProgramm()->getId(),
$product->getFare(),
$product->getCanSell(),
$product->getAcceptsMarkup(),
"<span title='".$product->getName()."'><a href='".$url."' >".$product->getName()."</a></span>",
$status,
);
}
$response = json_encode($arrayProducts);
return new Response($response, 200, array(
'Content-Type' => 'application/json'
));
}
/**
*
* @Route("/product/default/getallproductsgroup", name="product_getallproductsgroup")
*/
public function getallproductsgroup(Request $request, TranslatorInterface $translator) {
$em = $this->getDoctrine()->getManager();
$arrayProducts = array();
$groupid = $request->get('id');
$products = $em->createQuery("SELECT p FROM \App\Entity\Product p "
. 'where p.groupid = :group')
->setParameter('group', $groupid)
->getResult();
foreach ($products as $product) {
$url = $this->generateUrl('product_editproduct', array('id' => $product->getId()));
$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>";
$arrayProducts[$product->getId()] = array(
$product->getId(),
$product->getProductline()->getName(),
$product->getName(), $product->getSku(),
$product->getGroupid(),
$product->getDuration(),
$product->getPayperiod()->getPeriod(),
$product->getVolumemin(),
$product->getVolumemax(),
$product->getVendorProgramm()->getId(),
$product->getFare(),
$product->getCanSell(),
$product->getAcceptsMarkup(),
"<a href='".$url."' >".$product->getName()."</a>",
$status,
);
}
$response = json_encode($arrayProducts);
return new Response($response, 200, array(
'Content-Type' => 'application/json'
));
}
/**
*
* @Route("/product/default/getpbwsbygroup", name="product_getpbwsbygroup")
*/
public function getpbwsbygroup(Request $request, TranslatorInterface $translator) {
$em = $this->getDoctrine()->getManager();
$wholesalerRepository = $this->getDoctrine()->getRepository(\App\Entity\Wholesaler::class);
$pbwRepository = $this->getDoctrine()->getRepository(Productbywholesaler::class);
$arrayPbws = array();
$groupid = $request->get('id');
$wholesalerid = $request->get('wholesaler');
$pbws = $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "
. 'where p.groupid = :group and p.id <> :group and pbw.wholesaler = :wholesaler')
->setParameter('group', $groupid)
->setParameter('wholesaler', $wholesalerid)
->getResult();
foreach ($pbws as $pbw) {
$url = $this->generateUrl('product_editproduct', array('id' => $pbw->getId()));
$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>";
$currency = $wholesalerRepository->find($wholesalerid)->getCurrency()->getIso();
$currencyFormat = new \NumberFormatter($request->getLocale(), \NumberFormatter::CURRENCY);
$arrayPbws[$pbw->getId()] = array(
$pbw->getId(),
$pbw->getProduct()->getProductline()->getVendor()->getName(),
$pbw->getProduct()->getProductline()->getName(),
"<span title='".$pbw->getProduct()->getName()."'><a href='".$url."' >".$pbw->getProduct()->getName()."</a></span>",
$pbw->getProduct()->getSku(),
$pbw->getProduct()->getDuration(),
$currencyFormat->formatCurrency(round($pbwRepository->getPrice($pbw), 2), $currency),
$pbw->getProduct()->getPayperiod()->getPeriod(),
$status,
);
}
$response = json_encode($arrayPbws);
return new Response($response, 200, array(
'Content-Type' => 'application/json'
));
}
/**
*
* @Route("/product/default/editpbwsbyprogramm", name="product_editpbwsbyprogramm")
*/
public function editpbwsbyprogramm(Request $request, $programmId = 0, $wholesalerId = 0, $productLineId = 0) {
$search = $request->get('search');
$edit = $request->get('edit');
$products = array();
$productsToAsign = array();
$pbwsArray = array();
$arrayProgramms = array();
$arrayProductLines = array();
$em = $this->getDoctrine()->getManager();
$wholesalerRepository = $this->getDoctrine()->getRepository(\App\Entity\Wholesaler::class);
$wholesalers = $wholesalerRepository->findAll();
if ($search) {
$programmId = $request->get('programm');
$wholesalerId = $request->get('wholesaler');
$productLineId = $request->get('productline');
$products = $em->createQuery("SELECT p FROM \App\Entity\Product p "
. 'where p.vendorProgramm = :programm and p.productLine = :productline '
. 'and p.isflavour = 0 and p.unregistrationdate is null and p.productType is not null and p.groupid is not null')
->setParameter('programm', $programmId)
->setParameter('productline', $productLineId)
->getResult();
$pbws = $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "
. 'where pbw.wholesaler = :wholesaler and pbw.unregistrationdate is null '
. 'and p.vendorProgramm = :programm and p.productLine = :productline '
. 'and p.isflavour = 0 and p.unregistrationdate is null and p.productType is not null and p.groupid is not null')
->setParameter('programm', $programmId)
->setParameter('productline', $productLineId)
->setParameter('wholesaler', $wholesalerId)
->getResult();
$pbwsArray = array();
foreach ($pbws as $pbw) {
array_push($pbwsArray, $pbw->getProduct()->getId());
}
$arrayProgramms = $this->getarrayprogrammsbywholesaler($wholesalerId);
$arrayProductLines = $this->getarrayplsbyprogramm($programmId);
}
if ($edit) {
$toactive = json_decode($request->get('toactive'));
$todisable = json_decode($request->get('todisable'));
$wholesalerId = json_decode($request->get('wholesaler'));
$programmId = $request->get('programm');
$productLineId = $request->get('productline');
foreach ($toactive as $newasignation) {
$products = $em->createQuery("SELECT p FROM \App\Entity\Product p "
. 'where p.groupid = :groupid ')
->setParameter('groupid', $newasignation)
->getResult();
$pbwsAlreadyAsigned = $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "
. 'where pbw.wholesaler = :wholesaler '
. 'and p.groupid = :groupid')
->setParameter('groupid', $newasignation)
->setParameter('wholesaler', $wholesalerId)
->getResult();
if (sizeof($pbwsAlreadyAsigned) == 0) {
foreach ($products as $p) {
$newPBW = new Productbywholesaler();
$newPBW->setProduct($p);
$newPBW->setWholesaler($wholesalerRepository->find($wholesalerId));
$em->persist($newPBW);
$em->flush();
}
}
else {
foreach ($pbwsAlreadyAsigned as $pbw) {
$pbw->setUnregistrationdate(null);
$em->persist($pbw);
$em->flush();
}
}
}
foreach ($todisable as $toUnregistrate) { //id's - por cada wholesaler en el selector
$products = $em->createQuery("SELECT p FROM \App\Entity\Product p "
. 'where p.groupid = :groupid ')
->setParameter('groupid', $toUnregistrate)
->getResult();
$pbwsBase = $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw "
. 'where pbw.wholesaler = :wholesaler and pbw.product = :product')
->setParameter('wholesaler', $wholesalerId)
->setParameter('product', $toUnregistrate)
->setMaxResults(1)
->getResult();
$pbwsToUnregistrate = $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "
. 'where pbw.wholesaler = :wholesaler '
. 'and p.groupid = :groupid')
->setParameter('groupid', $toUnregistrate)
->setParameter('wholesaler', $wholesalerId)
->getResult();
foreach ($pbwsToUnregistrate as $pbw) {
$pbw->setUnregistrationdate(new \DateTime());
$em->persist($pbw);
$em->flush();
}
}
$arrayProgramms = $this->getarrayprogrammsbywholesaler($wholesalerId);
$arrayProductLines = $this->getarrayplsbyprogramm($programmId);
$products = $em->createQuery("SELECT p FROM \App\Entity\Product p "
. 'where p.vendorProgramm = :programm and p.productLine = :productline '
. 'and p.isflavour = 0 and p.unregistrationdate is null and p.productType is not null and p.groupid is not null')
->setParameter('programm', $programmId)
->setParameter('productline', $productLineId)
->getResult();
$pbws = $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "
. 'where pbw.wholesaler = :wholesaler and pbw.unregistrationdate is null '
. 'and p.vendorProgramm = :programm and p.productLine = :productline '
. 'and p.isflavour = 0 and p.unregistrationdate is null and p.productType is not null and p.groupid is not null')
->setParameter('programm', $programmId)
->setParameter('productline', $productLineId)
->setParameter('wholesaler', $wholesalerId)
->getResult();
$pbwsArray = array();
foreach ($pbws as $pbw) {
array_push($pbwsArray, $pbw->getProduct()->getId());
}
}
return $this->render('product/editpbwsbyprogramm.html.twig', [
'programmId' => $programmId,
'wholesalers' => $wholesalers,
'wholesalerId' => $wholesalerId,
'productLineId' => $productLineId,
'products' => $products,
'pbwsArray' => $pbwsArray,
'arrayProgramms' => $arrayProgramms,
'arrayProductLines' => $arrayProductLines
]);
}
/**
*
* @Route("/product/default/editpbwskusbyprogramm/{id}/{idWholesaler}", name="product_editpbwskusbyprogramm")
*/
public function editpbwskusbyprogramm(Request $request, $id, $idWholesaler) {
$edit = $request->get('edit');
$products = array();
$productsToAsign = array();
$pbwsArray = array();
$arrayProgramms = array();
$arrayProductLines = array();
$em = $this->getDoctrine()->getManager();
$wholesalerRepository = $this->getDoctrine()->getRepository(\App\Entity\Wholesaler::class);
$wholesalers = $wholesalerRepository->findAll();
$products = $em->createQuery("SELECT p FROM \App\Entity\Product p "
. 'where p.groupid = :id and p.unregistrationdate is null')
->setParameter('id', $id)
->getResult();
$pbws = $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "
. 'where pbw.wholesaler = :wholesaler and p.groupid = :id and pbw.unregistrationdate is null and p.unregistrationdate is null')
->setParameter('wholesaler', $idWholesaler)
->setParameter('id', $id)
->getResult();
$pbwsArray = array();
foreach ($pbws as $pbw) {
array_push($pbwsArray, $pbw->getProduct()->getId());
}
if ($edit) {
$toactive = json_decode($request->get('toactive'));
$todisable = json_decode($request->get('todisable'));
$wholesalerId = json_decode($request->get('wholesaler'));
foreach ($toactive as $newasignation) {
$products = $em->createQuery("SELECT p FROM \App\Entity\Product p "
. 'where p.id = :id ')
->setParameter('id', $newasignation)
->getResult();
$pbwsAlreadyAsigned = $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "
. 'where pbw.wholesaler = :wholesaler '
. 'and p.id = :id')
->setParameter('id', $newasignation)
->setParameter('wholesaler', $wholesalerId)
->getResult();
if (sizeof($pbwsAlreadyAsigned) == 0) {
foreach ($products as $p) {
$newPBW = new Productbywholesaler();
$newPBW->setProduct($p);
$newPBW->setWholesaler($wholesalerRepository->find($wholesalerId));
$em->persist($newPBW);
$em->flush();
}
}
else {
foreach ($pbwsAlreadyAsigned as $pbw) {
$pbw->setUnregistrationdate(null);
$em->persist($pbw);
$em->flush();
}
}
}
$errorIds = array();
foreach ($todisable as $toUnregistrate) { //id's - por cada wholesaler en el selector
$products = $em->createQuery("SELECT p FROM \App\Entity\Product p "
. 'where p.id = :id ')
->setParameter('id', $toUnregistrate)
->getResult();
$pbwsBase = $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw "
. 'where pbw.wholesaler = :wholesaler and pbw.product = :product')
->setParameter('wholesaler', $wholesalerId)
->setParameter('product', $toUnregistrate)
->setMaxResults(1)
->getResult();
$pbwsToUnregistrate = $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "
. 'where pbw.wholesaler = :wholesaler '
. 'and p.id = :id')
->setParameter('id', $toUnregistrate)
->setParameter('wholesaler', $wholesalerId)
->getResult();
foreach ($pbwsToUnregistrate as $pbw) {
$pbw->setUnregistrationdate(new \DateTime());
$em->persist($pbw);
$em->flush();
}
}
$products = $em->createQuery("SELECT p FROM \App\Entity\Product p "
. 'where p.groupid = :id and p.unregistrationdate is null')
->setParameter('id', $id)
->getResult();
$pbws = $em->createQuery("SELECT pbw FROM \App\Entity\Productbywholesaler pbw JOIN pbw.product p "
. 'where pbw.wholesaler = :wholesaler and p.groupid = :id and pbw.unregistrationdate is null and p.unregistrationdate is null')
->setParameter('wholesaler', $idWholesaler)
->setParameter('id', $id)
->getResult();
$pbwsArray = array();
foreach ($pbws as $pbw) {
array_push($pbwsArray, $pbw->getProduct()->getId());
}
if (!empty($errorIds)) {
$str = implode(", ", $errorIds);
$this->get('session')->getFlashBag()->add('danger', 'Productos no desasignados por estar en Portada: ' . $str);
}
return $this->redirectToRoute('product_editpbwskusbyprogramm', ['id' => $id, 'idWholesaler' => $idWholesaler]);
}
return $this->render('product/editpbwskusbyprogramm.html.twig', [
'id' => $id,
'wholesalers' => $wholesalers,
'idWholesaler' => $idWholesaler,
'products' => $products,
'pbwsArray' => $pbwsArray
]);
}
/**
*
* @Route("/product/default/getprogrammsbywholesaler", name="getprogrammsbywholesaler")
*/
public function getprogrammsbywholesaler(Request $request) {
$em = $this->getDoctrine()->getManager();
$wholesalerId = $request->get('id');
$arrayProgramms = array();
$arrayProgramms = $this->getarrayprogrammsbywholesaler($wholesalerId);
$response = json_encode($arrayProgramms);
return new Response($response, 200, array(
'Content-Type' => 'application/json'
));
}
public function getarrayprogrammsbywholesaler($id) {
$em = $this->getDoctrine()->getManager();
$arrayProgramms = array();
$agreements = $em->createQuery("SELECT a FROM \App\Entity\Agreements a "
. 'where a.wholesaler = :wholesaler ')
->setParameter('wholesaler', $id)
->getResult();
foreach ($agreements as $a) {
$prog = $em->createQuery("SELECT vp FROM \App\Entity\VendorProgramms vp "
. 'where vp.id = :id ')
->setParameter('id', $a->getProgramm()->getId())
->getOneOrNullResult();
if (!empty($prog)) {
array_push($arrayProgramms, array("id" => $prog->getId(), "name" => $prog->getName(), "vname" => $prog->getVendor()->getName()));
}
}
return $arrayProgramms;
}
/**
*
* @Route("/product/default/getplsbyprogramm", name="getplsbyprogramm")
*/
public function getplsbyprogramm(Request $request) {
$em = $this->getDoctrine()->getManager();
$arrayProductLines = array();
$programmId = $request->get('id');
$arrayProductLines = $this->getarrayplsbyprogramm($programmId);
$response = json_encode($arrayProductLines);
return new Response($response, 200, array(
'Content-Type' => 'application/json'
));
}
public function getarrayplsbyprogramm($id) {
$em = $this->getDoctrine()->getManager();
$vendorProgramm = $em->createQuery("SELECT vp FROM \App\Entity\VendorProgramms vp "
. 'where vp.id = :id ')
->setParameter('id', $id)
->getOneOrNullResult();
$arrayProductLines = array();
$productLines = $em->createQuery("SELECT pl FROM \App\Entity\Productline pl "
. 'where pl.vendor = :vendor AND pl.unregistrationdate is null ORDER BY pl.name asc')
->setParameter('vendor', $vendorProgramm->getVendor()->getId())
->setParameter('vendor', $vendorProgramm->getVendor()->getId())
->getResult();
foreach ($productLines as $pl) {
array_push($arrayProductLines, array("id" => $pl->getId(), "name" => $pl->getName(), "vname" => $pl->getVendor()->getName()));
}
return $arrayProductLines;
}
/**
*
* @Route("/product/default/createproduct", name="product_createproduct")
*/
public function createproduct(Request $request) {
$dataProduct = array();
$session = $this->get('session');
$em = $this->getDoctrine()->getManager();
$progsRepository = $this->getDoctrine()->getRepository(\App\Entity\Vendorprogramms::class);
$unitsRepository = $this->getDoctrine()->getRepository(\App\Entity\Productunit::class);
$payperiodRepository = $this->getDoctrine()->getRepository(\App\Entity\Payperiod::class);
$productlineRepository = $this->getDoctrine()->getRepository(\App\Entity\Productline::class);
$licensetypeRepository = $this->getDoctrine()->getRepository(\App\Entity\Licensetype::class);
$dataProduct['producttype'] = $request->get('producttype');
$dataProduct['producttype_name'] = $request->get('producttype_name');
$dataProduct['programm'] = $request->get('programm');
$dataProduct['line'] = $request->get('line');
$dataProduct['licensetype'] = $request->request->get('licensetype', []);
$dataProduct['downloadlink'] = $request->get('downloadlink');
$dataProduct['consolelink'] = $request->get('consolelink');
$dataProduct['fare'] = $request->get('fare');
$dataProduct['markup'] = $request->get('markup');
$dataProduct['function'] = $request->get('function');
$dataProduct['vendorid'] = $request->get('vendorid');
$dataProduct['hardware'] = $request->get('hardware');
$version = $request->get('version');
$flavour = $request->get('flavour');
$manintenance = $request->get('maintenance');
$renewal = $request->get('renewal');
$renewal = $request->get('extrafiels');//revisar utilidad de este bloque
$extrafiels = $request->get('extrafiels');
$baseprice = $request->get('baseprice');
$dataProduct['sku'] = $request->get('sku');
$dataProduct['name'] = $request->get('name');
$dataProduct['payperiod'] = $request->get('payperiod');
$dataProduct['volumemin'] = $request->get('volumemin');
$dataProduct['volumemax'] = $request->get('volumemax');
$dataProduct['duration'] = $request->get('duration');
$dataProduct['unit'] = $request->get('unit');
$dataProduct['requiresrenewal'] = $request->get('requiresrenewal');
$input_hidden_versions = json_decode($request->get('input_hidden_versions'));
$input_hidden_flavours = json_decode($request->get('input_hidden_flavours'));
$input_hidden_maintenances = json_decode($request->get('input_hidden_maintenances'));
$input_hidden_renewals = json_decode($request->get('input_hidden_renewals'));
$input_hidden_extrafields = json_decode($request->get('input_hidden_extrafields'));
if ($dataProduct['producttype']) {
$arrayGeneralParaRenovaciones = array(); // index => objecto, index => objeto
$newproduct = $this->insertProduct($dataProduct, $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository, $input_hidden_extrafields, $baseprice);
if (!$newproduct) {
$session->getFlashBag()->add('danger', "SKU " . $dataProduct['sku'] . " duplicado.");
}
else {
$arrayGeneralParaRenovaciones['1'] = $newproduct;
switch ($dataProduct['producttype']) {
case "3":
$maintenances = array();
foreach ($input_hidden_maintenances as $maintenance) {
$newmaintenance = $this->insertMaintenances($dataProduct, $maintenance, $newproduct->getId(), $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository);
array_push($maintenances, $newmaintenance->getId());
$arrayGeneralParaRenovaciones[$maintenance->index] = $newmaintenance;
}
$newproduct->setMaintenanceSkuIds($maintenances);
$em->persist($newproduct);
$em->flush();
break;
//<option value="4" >flavoured_list_type</option>
//<option value="5" >flavoured_type</option>
//<option value="6" >flavoured_duration</option>
//<option value="10">flavoured_volumelist_duration</option>
//<option value="15">flavoured_duration_volumeinput</option>
//<option value="7" >flavoured_version</option>
//<option value="13">flavoured_version_volume_input</option>
//<option value="24">flavoured_volumeinput_duration_payperiod</option>
case "4":
case "5":
case "6":
case "10":
case "15":
case "7": // version=sabor
case "13": // version=sabor
case "24":
case "26":
foreach ($input_hidden_flavours as $flavour) {
$newflavour = $this->insertFlavour($dataProduct, $flavour, $newproduct->getId(), $newproduct->getId(), $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository);
$arrayGeneralParaRenovaciones[$flavour->index] = $newflavour;
}
$newproduct->setHasFlavours(1);
$em->persist($newproduct);
$em->flush();
break;
//<option value="8" >flavour_list_with_maintenance</option>
//<option value="9" >flavour_with_maintenance</option>
//<option value="12">flavoured_version_maintenance</option>
case "8":
case "9":
case "12": // version=sabor
$saboresRef = array(); // 2 => newFlavour(4789), 3 => newFlavour(4790)
foreach ($input_hidden_flavours as $flavour) {
$newflavour = $this->insertFlavour($dataProduct, $flavour, $newproduct->getId(), $newproduct->getId(), $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository);
$saboresRef[$flavour->index] = $newflavour;
$arrayGeneralParaRenovaciones[$flavour->index] = $newflavour;
}
$newproduct->setHasFlavours(1);
$em->persist($newproduct);
$em->flush();
$maintenancesRefs = array(); // 2 => array(4791, 4792, 4793), 3 => array(4794, 4795, 4796)
foreach ($input_hidden_maintenances as $maintenance) {
$newmaintenance = $this->insertMaintenances($dataProduct, $maintenance, $newproduct->getId(), $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository);
if (array_key_exists($maintenance->related, $maintenancesRefs)) {
array_push($maintenancesRefs[$maintenance->related], $newmaintenance->getId());
}
else {
$maintenancesRefs[$maintenance->related] = array($newmaintenance->getId());
}
$arrayGeneralParaRenovaciones[$maintenance->index] = $newmaintenance;
}
foreach ($saboresRef as $key => $newFlavour) {
$newFlavour->setMaintenanceSkuIds($maintenancesRefs[$key]);
$em->persist($newFlavour);
$em->flush();
}
break;
//<option value="11" style="background-color: #f59c1a8a;">flavoured_version_with_volume</option>
//<option value="14" style="background-color: #f59c1a8a;">flavoured_version_volumeninput_rango</option>
//<option value="16" style="background-color: #f59c1a8a;">flavoured_version_volumeinput_duration</option>
case "11":
case "14":
case "16":
case "20":
case "21":
case "25":
$versionsRef = array(); // 2 => newversion(4789), 3 => newversion(4790)
foreach ($input_hidden_versions as $version) {
$newversion = $this->insertVersion($dataProduct, $version, $newproduct->getId(), $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository); // insertVersion = I
$versionsRef[$version->index] = $newversion;
$arrayGeneralParaRenovaciones[$version->index] = $newversion;
}
$newproduct->setHasFlavours(1);
$em->persist($newproduct);
$em->flush();
foreach ($input_hidden_flavours as $flavour) {
$newflavour = $this->insertFlavour($dataProduct, $flavour, $newproduct->getId(), $versionsRef[$flavour->related]->getId(), $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository);
$saboresRef[$flavour->index] = $newflavour;
$arrayGeneralParaRenovaciones[$flavour->index] = $newflavour;
}
break;
case "22":
case "23":
$versionsRef = array(); // 2 => newversion(4789), 3 => newversion(4790)
foreach ($input_hidden_versions as $version) {
$newversion = $this->insertVersion($dataProduct, $version, $newproduct->getId(), $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository); // insertVersion = I
$versionsRef[$version->index] = $newversion;
$arrayGeneralParaRenovaciones[$version->index] = $newversion;
}
$newproduct->setHasFlavours(1);
$em->persist($newproduct);
$em->flush();
foreach ($input_hidden_flavours as $flavour) {
$newflavour = $this->insertFlavour($dataProduct, $flavour, $newproduct->getId(), $versionsRef[$flavour->related]->getId(), $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository);
$saboresRef[$flavour->index] = $newflavour;
$arrayGeneralParaRenovaciones[$flavour->index] = $newflavour;
}
$maintenancesRefs = array(); // 2 => array(4791, 4792, 4793), 3 => array(4794, 4795, 4796)
foreach ($input_hidden_maintenances as $maintenance) {
$newmaintenance = $this->insertMaintenances($dataProduct, $maintenance, $newproduct->getId(), $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository);
if (array_key_exists($maintenance->related, $maintenancesRefs)) {
array_push($maintenancesRefs[$maintenance->related], $newmaintenance->getId());
}
else {
$maintenancesRefs[$maintenance->related] = array($newmaintenance->getId());
}
$arrayGeneralParaRenovaciones[$maintenance->index] = $newmaintenance;
}
foreach ($saboresRef as $key => $newFlavour) {
$newFlavour->setMaintenanceSkuIds($maintenancesRefs[$key]);
$em->persist($newFlavour);
$em->flush();
}
break;
default:
break;
}
foreach ($input_hidden_renewals as $renewal) {
$newrenewal = $this->insertRenewal($dataProduct, $renewal, $newproduct->getId(), $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository);
$arrayGeneralParaRenovaciones[$renewal->related]->setRenovationProduct($newrenewal);
$em->persist($arrayGeneralParaRenovaciones[$renewal->related]);
$em->flush();
}
$session->getFlashBag()->add('success', 'producto con SKU: "' . $dataProduct['sku'] . '" creado.');
}
}
$q = $progsRepository->createQueryBuilder('vp');
$progs=$q->leftJoin('vp.vendor', 'v')
->andWhere('v.unregistrationdate is null')
//->andWhere('v.unregistrationdate is null and vp.unregistrationdate is null')
->orderBy('vp.name', 'asc')
->getQuery()
->getResult();
$units = $unitsRepository->findAll();
//$payperiod = $payperiodRepository->findAll();
$payperiod = $em->createQuery("SELECT pp FROM \App\Entity\Payperiod pp "
. "where pp.period <> '' ")
->getResult();
return $this->render('product/createproduct.html.twig', [
'programms' => $progs,
'units' => $units,
'payperiod' => $payperiod
]);
}
/**
*
* @Route("/product/default/checkskus", name="product_checkskus")
*/
public function checkskusAction(Request $request) {
$em = $this->getDoctrine()->getManager();
$response = new Response();
$error = false;
$duplicatedSkus = [];
$totalSkus = [];
$skusToCheck = json_decode($request->get('skus'));
foreach ($skusToCheck as $key => $sku) {
$totalSkus[$key] = $sku;
}
//dubplicados en el formulario
$duplicatedSkus = array();
foreach (array_count_values($totalSkus) as $val => $c) {
if ($c > 1) {
$domId = array_search($val, $totalSkus);
array_push($duplicatedSkus, $domId);
}
}
//dubplicados en BD
if (!sizeof($duplicatedSkus) > 0) {
$duplicateds = $em->createQuery("SELECT p FROM \App\Entity\Product p "
. 'where p.sku IN (:skus) ')
->setParameter('skus', $totalSkus)
->getResult();
foreach ($duplicateds as $product) {
$domId = array_search($product->getSku(), $totalSkus);
array_push($duplicatedSkus, $domId);
}
}
if (sizeof($duplicatedSkus) > 0) {
$error = true;
}
$response = json_encode(array("error" => $error, "duplicated" => $duplicatedSkus));
return new Response($response, 200, array(
'Content-Type' => 'application/json'
));
}
public function insertProduct($productData, $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository, $input_hidden_extrafields, $baseprice) {
$em = $this->getDoctrine()->getManager();
$product = new Product();
$typeofproduct = $em->createQuery("SELECT pt FROM \App\Entity\Producttype pt where pt.name = :typename ")->setParameter('typename', $productData['producttype_name'])->getOneOrNullResult();
$product->setProducttype($typeofproduct);
$product->setVendorProgramm($progsRepository->find($productData['programm']));
$product->setProductline($productlineRepository->find($productData['line']));
$product->setLicenseType($licensetypeRepository->find($productData['licensetype'][0]));
$product->setDownloadLink(empty($productData['downloadlink']) ? null : $productData['downloadlink'] );
$product->setConsoleLink(empty($productData['consolelink']) ? null : $productData['consolelink'] );
$product->setFare($productData['fare'] == 0 ? 0 : 1);
$product->setAcceptsMarkup($productData['markup']);
$product->setCanSell($productData['function']);
$product->setRequiresRenewal($productData['requiresrenewal']);
$product->setCanSellAlone($productData['function']);
$product->setProductVendorId($productData['vendorid']);
$product->setDescriptiveName($productData['name']);
$product->setDescriptiveName($productData['name']);
$product->setSku($productData['sku']);
$product->setName($productData['name']);
$product->setPayperiod($payperiodRepository->find($productData['payperiod']));
$product->setVolumeMin($productData['volumemin']);
$product->setVolumeMax($productData['volumemax']);
$product->setDuration($productData['duration']);
$product->setProductUnit($unitsRepository->find($productData['unit']));
$product->setIsHardware($productData['hardware']);
$extra_fields = json_decode(json_encode($input_hidden_extrafields), true);
/*$licenseType=[];
foreach($productData['licensetype'] as $lt)
{
$licenseType[$lt]=$licensetypeRepository->find($lt)->getName();
}*/
$parameters = [
'licenseType' => $productData['licensetype'],///$licenseType,
];
if (!empty($extra_fields) && is_array($extra_fields)) {
$parameters = [
'extrafields' => $extra_fields
];
}
if($baseprice!=0){
$parameters['baseprice']=($baseprice==1 ? 'original' : 'renewable');
}
$product->setParameters($parameters);
$product->setRegistrationdate(new \DateTime());
$em->persist($product);
$em->flush();
try {
$product->setGroupId($product->getId());
$em->persist($product);
$em->flush();
}
catch (PropelException $pe) {
return false;
}
return $product;
}
public function insertVersion($productData, $version, $baseId, $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository) {
$em = $this->getDoctrine()->getManager();
$product = new Product();
$product->setVendorProgramm($progsRepository->find($productData['programm']));
$product->setProductline($productlineRepository->find($productData['line']));
$product->setLicenseType($licensetypeRepository->find($productData['licensetype'][0]));
$product->setProductUnit($unitsRepository->find($productData['unit']));
$product->setDownloadLink(empty($productData['downloadlink']) ? null : $productData['downloadlink'] );
$product->setConsoleLink(empty($productData['consolelink']) ? null : $productData['consolelink'] );
$product->setFare($productData['fare'] == 0 ? 0 : 1);
$product->setAcceptsMarkup($productData['markup']);
$product->setCanSell($productData['function']);
$product->setCanSellAlone($productData['function']);
$product->setRequiresRenewal($productData['requiresrenewal']);
$product->setDescriptiveName($version->name);
$product->setSku($version->sku);
$product->setName($version->name);
$product->setDescriptiveName($version->name);
$product->setPayperiod($payperiodRepository->find($productData['payperiod']));
$product->setVolumeMin($productData['volumemin']);
$product->setVolumeMax($productData['volumemax']);
$product->setDuration($productData['duration']);
$product->setRegistrationdate(new \DateTime());
$product->setGroupId($baseId);
$product->setParentskuids(array($baseId));
$product->setIsFlavour(1);
$product->setIsHardware($productData['hardware']);
$em->persist($product);
$em->flush();
return $product;
}
public function insertMaintenances($productData, $manintenance, $baseId, $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository) {
$em = $this->getDoctrine()->getManager();
$product = new Product();
$product->setVendorProgramm($progsRepository->find($productData['programm']));
$product->setProductline($productlineRepository->find($productData['line']));
$product->setLicenseType($licensetypeRepository->find($productData['licensetype'][0]));
$product->setProductUnit($unitsRepository->find($productData['unit']));
$product->setDownloadLink(empty($productData['downloadlink']) ? null : $productData['downloadlink'] );
$product->setConsoleLink(empty($productData['consolelink']) ? null : $productData['consolelink'] );
$product->setFare($productData['fare'] == 0 ? 0 : 1);
$product->setAcceptsMarkup($productData['markup']);
$product->setCanSell($productData['function']);
$product->setRequiresRenewal($productData['requiresrenewal']);
$product->setDescriptiveName($manintenance->name);
$product->setSku($manintenance->sku);
$product->setName($manintenance->name);
$product->setDescriptiveName($manintenance->name);
$product->setPayperiod($payperiodRepository->find($manintenance->payperiod));
$product->setVolumeMin($manintenance->volumemin);
$product->setVolumeMax($manintenance->volumemax);
$product->setDuration($manintenance->duration);
$product->setProductVendorId($manintenance->vendorid);
$product->setRegistrationdate(new \DateTime());
$product->setGroupId($baseId);
$product->setCanSellAlone(0);
$product->setIsHardware($productData['hardware']);
$em->persist($product);
$em->flush();
return $product;
}
public function insertFlavour($productData, $flavour, $groupId, $linkId, $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository) {
$em = $this->getDoctrine()->getManager();
$product = new Product();
$product->setVendorProgramm($progsRepository->find($productData['programm']));
$product->setProductline($productlineRepository->find($productData['line']));
$product->setLicenseType($licensetypeRepository->find($productData['licensetype'][0]));
$product->setProductUnit($unitsRepository->find($productData['unit']));
$product->setDownloadLink(empty($productData['downloadlink']) ? null : $productData['downloadlink'] );
$product->setConsoleLink(empty($productData['consolelink']) ? null : $productData['consolelink'] );
$product->setFare($productData['fare'] == 0 ? 0 : 1);
$product->setAcceptsMarkup($productData['markup']);
$product->setCanSell($productData['function']);
$product->setCanSellAlone($productData['function']);
if($productData['producttype']==26){
$product->setCanSellAlone(0);
$product->setMaintenanceSkuIds(array($linkId));
}
$product->setRequiresRenewal($productData['requiresrenewal']);
$product->setProductVendorId($productData['vendorid']);
$product->setDescriptiveName($flavour->name);
$product->setSku($flavour->sku);
$product->setName($flavour->name);
$product->setDescriptiveName($flavour->name);
$product->setPayperiod($payperiodRepository->find($flavour->payperiod));
$product->setVolumeMin($flavour->volumemin);
$product->setVolumeMax($flavour->volumemax);
$product->setDuration($flavour->duration);
$product->setProductVendorId($flavour->vendorid);
$product->setRegistrationdate(new \DateTime());
$product->setGroupId($groupId);
$product->setParentskuids(array($linkId));
$product->setIsFlavour(1);
$product->setIsHardware($productData['hardware']);
$em->persist($product);
$em->flush();
return $product;
}
public function insertRenewal($productData, $renewal, $groupId, $progsRepository, $productlineRepository, $licensetypeRepository, $unitsRepository, $payperiodRepository) {
$em = $this->getDoctrine()->getManager();
$product = new Product();
$product->setVendorProgramm($progsRepository->find($productData['programm']));
$product->setProductline($productlineRepository->find($productData['line']));
$product->setLicenseType($licensetypeRepository->find($productData['licensetype'][0]));
$product->setProductUnit($unitsRepository->find($productData['unit']));
$product->setDownloadLink(empty($productData['downloadlink']) ? null : $productData['downloadlink'] );
$product->setConsoleLink(empty($productData['consolelink']) ? null : $productData['consolelink'] );
$product->setFare($productData['fare'] == 0 ? 0 : 1);
$product->setAcceptsMarkup($productData['markup']);
$product->setCanSell($productData['function']);
$product->setRequiresRenewal($productData['requiresrenewal']);
$product->setProductVendorId($productData['vendorid']);
$product->setDescriptiveName($renewal->name);
$product->setSku($renewal->sku);
$product->setName($renewal->name);
$product->setDescriptiveName($renewal->name);
$product->setPayperiod($payperiodRepository->find($renewal->payperiod));
$product->setVolumeMin($renewal->volumemin);
$product->setVolumeMax($renewal->volumemax);
$product->setDuration($renewal->duration);
$product->setProductVendorId($renewal->vendorid);
$product->setRegistrationdate(new \DateTime());
$product->setGroupId($groupId);
$product->setCanSellAlone(0);
$product->setIsHardware($productData['hardware']);
$em->persist($product);
$em->flush();
return $product;
}
}