<?php
namespace App\Controller\User;
use Doctrine\Persistence\ManagerRegistry;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Spipu\Html2Pdf\Html2Pdf;
use Knp\Component\Pager\PaginatorInterface;
use App\Entity\Slave\JoinTableUserWarehouse;
use App\Entity\Slave\JoinTableProductProductTransfer;
use App\Entity\Slave\ProductTransfer;
use App\Entity\Slave\Product;
use App\Entity\Slave\ProductRequest;
use App\Entity\Slave\Warehouse;
use App\Form\Model\DdtPrint;
use App\Form\Model\ProductRegister;
use App\Form\Model\ProductRecover;
use App\Form\Model\ImportInventory;
use App\Form\Slave\ImportInventoryType;
use App\Form\Slave\DdtPrintType;
use App\Form\Slave\ProductType;
use App\Form\Slave\ProductTransferEditType;
use App\Form\Slave\ProductTransferDdtType;
use App\Form\Slave\ProductTransferDownloadType;
use App\Form\Slave\ProductTransferReceiveType;
use App\Form\Slave\ProductTransferSendType;
use App\Form\Slave\ProductTransferSendProductsType;
use App\Form\Slave\ProductRegisterType;
use App\Form\Slave\ProductRecoverType;
use App\Form\Slave\ProductRequestType;
use App\Form\Slave\WarehouseType;
use App\Service\FilterService;
use App\Service\FormValidatorService;
use App\Service\ProductService;
use App\Service\MediaService;
use App\Service\ValidationService;
/**
* @Route("/scrivania/magazzini")
* @Security("is_granted('ROLE_USER') and is_granted('active', user)")
*/
class UserWarehouseController extends AbstractController
{
private $mr;
private $params;
public function __construct(ManagerRegistry $mr, ParameterBagInterface $params)
{
$this->mr = $mr;
$this->params = $params;
}
public function createDdtProductsArray($products)
{
$first = true;
$total = 0;
$qty = 0;
$arrayRows = array();
$arraySupplierCodes = array();
$arrayProducerCodes = array();
foreach($products as $product){
if($first){
$first = false;
$oldModel = $product->getModel();
}
if($product->getModel()->getId() == $oldModel->getId()){
$qty++;
if($product->getCodeSupplier()) array_push($arraySupplierCodes, $product->getCodeSupplier()); else array_push($arraySupplierCodes, 'N/D');
if($product->getCodeProducer()) array_push($arrayProducerCodes, $product->getCodeProducer()); else array_push($arrayProducerCodes, 'N/D');
}
else{
$arrayTmp = array();
array_push($arrayTmp, $qty, $oldModel->getSku(), '('.$oldModel->getProducer()->getName().') - '.$oldModel->getName(), $arraySupplierCodes, $arrayProducerCodes);
array_push($arrayRows, $arrayTmp);
$qty = 1;
$oldModel = $product->getModel();
$arraySupplierCodes = array();
$arrayProducerCodes = array();
if($product->getCodeSupplier()) array_push($arraySupplierCodes, $product->getCodeSupplier()); else array_push($arraySupplierCodes, 'N/D');
if($product->getCodeProducer()) array_push($arrayProducerCodes, $product->getCodeProducer()); else array_push($arrayProducerCodes, 'N/D');
}
$total++;
if(sizeof($products) == $total){
$arrayTmp = array();
array_push($arrayTmp, $qty, $product->getModel()->getSku(), '('.$product->getModel()->getProducer()->getName().') - '.$product->getModel()->getName(), $arraySupplierCodes, $arrayProducerCodes);
array_push($arrayRows, $arrayTmp);
}
}
return [$arrayRows, $total];
}
public function searchDDTSender($em, $transfer)
{
$supplier = null;
$sender = null;
$warehouseHeadquarter = null;
switch($transfer->getType()){
case 'destination': $supplier = $transfer->getSupplier(); break;
case 'technician':
if($transfer->getUserFrom() != null)
$sender = $transfer->getUserFrom();
else
$warehouseHeadquarter = $transfer->getWarehouseFrom();
break;
case 'main': $sender = $transfer->getUserFrom(); break;
default: break;
}
return [$supplier, $sender, $warehouseHeadquarter];
}
public function searchDDTDestination($em, $transfer)
{
$destination = null;
$receiver = null;
$warehouseHeadquarter = null;
switch($transfer->getType()){
case 'destination': $destination = $transfer->getWarehouseTo()->getDestination(); break;
case 'technician': $receiver = $transfer->getUserTo(); break;
case 'main': $warehouseHeadquarter = $transfer->getWarehouseTo(); break;
default: break;
}
return [$destination, $receiver, $warehouseHeadquarter];
}
public function downloadSetByType($em, $transfer)
{
$status = null;
$toManage = null;
$toManagePriority = 2;
switch($transfer->getType()){
case 'main':
$status = $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'not_available'));
$toManage = true;
$toManagePriority = 1;
break;
case 'technician':
$status = $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'available'));
$toManage = false;
break;
case 'destination':
$status = $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'not_available'));
$toManage = false;
break;
default: break;
}
return [$status, $toManage, $toManagePriority];
}
public function registerReceiveProducts($em, $warehouse, $status, $form, $codeProducer, $codeSupplier, $arrayProducerCodes, $arraySupplierCodes, $countProductsUpdated, $countProductsNew, $countProductsDouble, $productsUpdatedMats, $productsDoubleMats)
{
$product = null;
if($product == null && $codeProducer != null) $product = $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeProducer' => $codeProducer));
if($product == null && $codeSupplier != null) $product = $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeSupplier' => $codeSupplier));
if($product != null){
if(!in_array($codeProducer, $arrayProducerCodes) && !in_array($codeSupplier, $arraySupplierCodes)){
$product = ProductService::updateProduct($em, $product, $form->get('model')->getData(), $codeProducer, $codeSupplier, $form->get('suppliers')->getData(), $status, $form->get('condition')->getData());
$countProductsUpdated++;
$productsUpdatedMats.="<br>".$codeProducer.";".$codeSupplier;
}
else{
$countProductsDouble++;
$productsDoubleMats.="<br>".$codeProducer.";".$codeSupplier;
}
}
else{
$product = ProductService::createProduct($em, $form->get('model')->getData(), $codeProducer, $codeSupplier, $form->get('suppliers')->getData(), $status, $form->get('condition')->getData());
$countProductsNew++;
}
$product->setActualWarehouse($warehouse);
$product->setDateLastTransfer(new \Datetime());
if($codeProducer != null && $codeProducer != '') array_push($arrayProducerCodes, $codeProducer);
if($codeSupplier != null && $codeSupplier != '') array_push($arraySupplierCodes, $codeSupplier);
return [$product, $arrayProducerCodes, $arraySupplierCodes, $countProductsUpdated, $countProductsNew, $countProductsDouble, $productsUpdatedMats, $productsDoubleMats];
}
/**
* @Route("/lista", name="user_warehouse_list")
*/
public function userWarehouseList(Request $request, ValidatorInterface $validator, PaginatorInterface $paginator, FormFactoryInterface $formFactory)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$filters = FilterService::nicknameFilter($request);
$canSeeAll = false;
foreach($this->getUser()->getAccountType()->getPermissions() as $jtatp){
if($jtatp->getPermission()->getSlug() == 'warehouse' && $jtatp->getRw() == 'RW'){
$canSeeAll = true;
}
}
if($canSeeAll){
$warehousesActiveQuery = $em->getRepository("App\Entity\Slave\Warehouse")->queryNotClientsAndDestinationFiltered($filters, true);
$warehousesNotActiveQuery = $em->getRepository("App\Entity\Slave\Warehouse")->queryNotClientsAndDestinationFiltered($filters, false);
}
else{
$warehousesActiveQuery = $em->getRepository("App\Entity\Slave\Warehouse")->queryByActiveAndUserFiltered($filters, true, $this->getUser()->getId());
$warehousesNotActiveQuery = $em->getRepository("App\Entity\Slave\Warehouse")->queryByActiveAndUserFiltered($filters, false, $this->getUser()->getId());
}
$warehousesActive = $paginator->paginate($warehousesActiveQuery, $request->getSession()->get($request->get("_route")."_page"), 15);
$warehousesNotActive = $paginator->paginate($warehousesNotActiveQuery, $request->getSession()->get($request->get("_route")."_page"), 15);
$countActive = sizeof($warehousesActiveQuery->getResult());
$countNotActive = sizeof($warehousesNotActiveQuery->getResult());
$warehouse = new Warehouse();
$form = $formFactory->createNamed("form_warehouse_new", WarehouseType::class, $warehouse);
$form->handleRequest($request);
$editId = 0;
if($form->isSubmitted()){
$valid = ValidationService::validateNotDuplicate($validator, $form->get("nickname"), $em, "App\Entity\Slave\Warehouse", ['id' => 0]);
if($form->isValid()){
$em->persist($warehouse);
$em->flush();
$jtuw = new JoinTableUserWarehouse();
$jtuw->setUser($this->getUser());
$jtuw->setWarehouse($warehouse);
$jtuw->setPermission("RW");
$em->persist($jtuw);
$em->flush();
if($this->getUser()->getAccountTypology() != 'agency'){
$userAgency = $em->getRepository('App\Entity\Slave\User')->findMainAccountAgency();
$jtuw = new JoinTableUserWarehouse();
$jtuw->setUser($userAgency);
$jtuw->setWarehouse($warehouse);
$jtuw->setPermission("RW");
$em->persist($jtuw);
$em->flush();
}
$this->addFlash('notice_success', "Valore inserito");
return $this->redirectToRoute('user_warehouse_list');
}
else
$session->set('openNewModal', true);
}
return $this->render('role/user/warehouse/list.html.twig',[
"filters" => $filters,
'warehousesActive' => $warehousesActive,
'warehousesNotActive' => $warehousesNotActive,
'countActive' => $countActive,
'countNotActive' => $countNotActive,
"form" => $form->createView()
]);
}
/**
* @Route("/cambia-stato", name="user_warehouse_change_status")
* @Security("is_granted('edit', 'warehouse')")
*/
public function userUsersStaffChangeStatus(Request $request)
{
$em = $this->mr->getManager('slave');
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($request->request->get("warehouseChangeId"));
$warehouse->setactive(!$warehouse->isActive());
$em->flush();
$this->addFlash('notice_success', "Stato aggiornato");
return $this->redirectToRoute('user_warehouse_list');
}
/**
* @Route("/elimina", name="user_warehouse_delete")
* @Security("is_granted('edit', 'warehouse')")
*/
public function userWarehouseDelete(Request $request)
{
$em = $this->mr->getManager('slave');
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($request->request->get("warehouseDelId"));
foreach($warehouse->getUsers() as $jt)
$em->remove($jt);
$em->remove($warehouse);
$em->flush();
$this->addFlash('notice_success', "Magazzino eliminato");
return $this->redirectToRoute('user_warehouse_list');
}
/**
* @Route("/{warehouseId}/scheda", name="user_warehouse_sheet")
* @Security("is_granted('view', 'warehouse') || is_granted('warehouse_view', warehouseId)")
*/
public function userWarehouseSheet($warehouseId, Request $request, ValidatorInterface $validator, PaginatorInterface $paginator, FormFactoryInterface $formFactory, FileSystem $fs)
{
$em = $this->mr->getManager('slave');
$emMaster = $this->mr->getManager('master');
$session = $request->getSession();
$company = $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
$productModels = $em->getRepository('App\Entity\Slave\ProductModel')->findAll();
$uploadDir = $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
$settingRegisterStock = $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'warehouse_register_stock'));
$settingRecoverStock = $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'warehouse_recover_stock'));
$settingDdtMandatory = $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'ddt_internal_mandatory'));
$settingWarehouseProductConditions = $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'warehouse_technician_product_conditions'));
$suppliers = $em->getRepository('App\Entity\Slave\Supplier')->findAllOrdered();
// DATI MAGAZZINO
$formEdit = $formFactory->createNamed("form_warehouse_edit", WarehouseType::class, $warehouse);
$formEdit->handleRequest($request);
if($formEdit->isSubmitted()){
$valid = ValidationService::validateNotBlank($validator, $formEdit->get("nickname"));
if($valid && $formEdit->isValid()){
$em->flush();
$this->addFlash('notice_success', "Magazzino aggiornato");
return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouse->getId()));
}
else{
$session->set('openEditModal', true);
}
}
$filters = FilterService::userWarehouseSheetFilter($request);
// STOCK
$toManageProductsQuery = $em->getRepository("App\Entity\Slave\Product")->findByWarehouseFiltered(true, $warehouse->getId(), 'to_manage', $filters, 0);
$toManageProducts = $paginator->paginate($toManageProductsQuery, $request->getSession()->get($request->get("_route")."_page_0"), 100, array('pageParameterName' => 'page_0'));
$toManageProductsCount = sizeof($em->getRepository("App\Entity\Slave\Product")->findByWarehouseFiltered(false, $warehouse->getId(), 'to_manage', $filters, 0));
$availableProductsQuery = $em->getRepository("App\Entity\Slave\Product")->findByWarehouseFiltered(true, $warehouse->getId(), 'available', $filters, 1);
$availableProducts = $paginator->paginate($availableProductsQuery, $request->getSession()->get($request->get("_route")."_page_1"), 100, array('pageParameterName' => 'page_1'));
$availableProductsCount = sizeof($em->getRepository("App\Entity\Slave\Product")->findByWarehouseFiltered(false, $warehouse->getId(), 'available', $filters, 1));
$notAvailableProductsQuery = $em->getRepository("App\Entity\Slave\Product")->findByWarehouseFiltered(true, $warehouse->getId(), 'not_available', $filters, 1);
$notAvailableProducts = $paginator->paginate($notAvailableProductsQuery, $request->getSession()->get($request->get("_route")."_page_1"), 100, array('pageParameterName' => 'page_1'));
$notAvailableProductsCount = sizeof($em->getRepository("App\Entity\Slave\Product")->findByWarehouseFiltered(false, $warehouse->getId(), 'not_available', $filters, 1));
$transferProductsQuery = $em->getRepository("App\Entity\Slave\Product")->findByWarehouseFiltered(true, $warehouse->getId(), 'transfer', $filters, 1);
$transferProducts = $paginator->paginate($transferProductsQuery, $request->getSession()->get($request->get("_route")."_page_1"), 100, array('pageParameterName' => 'page_1'));
$transferProductsCount = sizeof($em->getRepository("App\Entity\Slave\Product")->findByWarehouseFiltered(false, $warehouse->getId(), 'transfer', $filters, 1));
// INVENTORY
if($session->get('inventorySupplierId') != null) $session->remove('inventorySupplierId');
if($session->get('inventoryStatusId') != null) $session->remove('inventoryStatusId');
if($session->get('inventoryResults') != null) $session->remove('inventoryResults');
$importInventory = new ImportInventory();
$formInventory = $formFactory->createNamed("form_import_inventory", ImportInventoryType::class, $importInventory);
$formInventory->handleRequest($request);
if($formInventory->isSubmitted()){
$valid = true;
if($valid) $valid = ValidationService::validateNotBlank($validator, $formInventory->get('supplier'));
if($valid) $valid = ValidationService::validateNotBlank($validator, $formInventory->get('status'));
if($valid) $valid = ValidationService::validateFile($validator, $formInventory->get('file'), true, $formInventory->get('file')->getData(), '10', array('csv', 'txt'));
if($valid && $formInventory->isValid()){
$row = 0;
$productsIdsFound = array();
$results = array();
if(($handle = fopen($formInventory->get('file')->getData(), "r")) !== FALSE) {
while(($data = fgetcsv($handle, 2000, ',')) !== FALSE) {
$data = array_map("utf8_encode", $data);
if($row > 0){
$found = false;
$color = 'bg_r_l';
$errorMsg = '';
$prod = null;
$prodCodeProducer = null;
$prodCodeSupplier = null;
$prodModel = null;
$prodWarehouse = null;
$priority = 5;
$trimmedCode = rtrim(ltrim($data[0], " ")," ");
foreach($warehouse->getProducts() as $p){
if($trimmedCode == $p->getCodeProducer()){
$found = true;
$prod = $p;
break;
}
if(!$found && $trimmedCode == $p->getCodeSupplier()){
$found = true;
$prod = $p;
break;
}
}
if($found){
// PRODOTTO TROVATO NEL MAGAZZINO
// CONTROLLO FORNITORE
$suppliersIds = array();
foreach($prod->getSuppliers() as $supplier)
array_push($suppliersIds, $supplier->getId());
if(!in_array($formInventory->get('supplier')->getData()->getId(), $suppliersIds)){
$color = 'bg_r_m';
$errorMsg = 'Prodotto presente --- Fornitore non corretto';
$priority = 3;
}
// CONTROLLO STATO
if($prod->getStatus()->getId() != $formInventory->get('status')->getData()->getId()){
$color = 'bg_r_l_m';
$errorMsg = 'Prodotto presente --- Stato non corretto';
$priority = 4;
}
}
else{
// PRODOTTO NON TROVATO --- CERCO TRA TUTTI I PRODOTTI
if($prod == null) $prod = $em->getRepository('App\Entity\Slave\Product')->findOneByCodeProducer($trimmedCode);
if($prod == null) $prod = $em->getRepository('App\Entity\Slave\Product')->findOneByCodeSupplier($trimmedCode);
if($prod != null){
// MAGAZZINO SBAGLIATO
$color = 'bg_r_m_h';
$errorMsg = 'Prodotto non presente --- Presente in un altro magazzino';
$priority = 2;
}
else{
// PRODOTTO NON IN PIATTAFORMA
$color = 'bg_r_b';
$errorMsg = 'Prodotto non presente in piattaforma';
$priority = 0;
$prodCodeProducer = $trimmedCode;
}
}
$prodLastTransfer = '';
if($prod != null){
if($prod->getCodeProducer() != null) $prodCodeProducer = $prod->getCodeProducer(); else $prodCodeProducer = '---';
if($prod->getCodeSupplier() != null) $prodCodeSupplier = $prod->getCodeSupplier(); else $prodCodeSupplier = '---';
$prodModel = $prod->getModel()->__toString();
$prodWarehouse = $prod->getActualWarehouse()->__toString();
if($prod->getLastTransfer() != null){
$transfer = $prod->getLastTransfer();
$prodLastTransfer = 'Magazzino partenza: '.$transfer->getWarehouseFrom().' --- Magazzino destinazione: '.$transfer->getWarehouseTo();
if($transfer->getDatetimeCompletion() != null)
$prodLastTransfer .= ' --- Data completamento: '.$transfer->getDatetimeCompletion()->format('d-m-Y H:i');
}
array_push($productsIdsFound, $prod->getId());
}
if($trimmedCode != '' && $trimmedCode != ' '){
$arrayTmp = array();
array_push($arrayTmp, $priority, $color, $prodModel, $prodCodeProducer, $prodCodeSupplier, $prodWarehouse, $errorMsg, $prodLastTransfer);
array_push($results, $arrayTmp);
}
}
$row++;
}
fclose($handle);
}
// RECUPERO PRODOTTI NEL MAGAZZINO E NON NEL FILE
$color = 'bg_r_h';
$errorMsg = 'Prodotto non presente nel file';
$priority = 1;
$productsInWarehouseAndNotInFile = $em->getRepository('App\Entity\Slave\Product')->findByWarehouseSupplierStatusAndNotInIds($warehouseId, $formInventory->get('supplier')->getData()->getId(), $formInventory->get('status')->getData()->getId(), $productsIdsFound);
foreach($productsInWarehouseAndNotInFile as $p){
$arrayTmp = array();
$prodCodeProducer = '';
$prodCodeSupplier = '';
$prodModel = '';
$prodWarehouse = '';
if($p->getCodeProducer() != null) $prodCodeProducer = $p->getCodeProducer(); else $prodCodeProducer = '---';
if($p->getCodeSupplier() != null) $prodCodeSupplier = $p->getCodeSupplier(); else $prodCodeSupplier = '---';
$prodModel = $p->getModel()->__toString();
$prodWarehouse = $p->getActualWarehouse()->__toString();
$prodLastTransfer = '';
if($p->getLastTransfer() != null){
$transfer = $p->getLastTransfer();
$prodLastTransfer = 'Magazzino partenza: '.$transfer->getWarehouseFrom().' --- Magazzino destinazione: '.$transfer->getWarehouseTo();
if($transfer->getDatetimeCompletion() != null)
$prodLastTransfer .= ' --- Data completamento: '.$transfer->getDatetimeCompletion()->format('d-m-Y H:i');
}
array_push($arrayTmp, $priority, $color, $prodModel, rtrim(ltrim($prodCodeProducer)), rtrim(ltrim($prodCodeSupplier)), $prodWarehouse, $errorMsg, $prodLastTransfer);
array_push($results, $arrayTmp);
}
$session->set('inventorySupplierId', $formInventory->get('supplier')->getData()->getId());
$session->set('inventoryStatusId', $formInventory->get('status')->getData()->getId());
$session->set('inventoryResults', $results);
return $this->redirectToRoute('user_warehouse_stock_inventory', array('warehouseId' => $warehouse->getId()));
}
else{
$session->set('openStockInventoryModal', true);
}
}
// TRANSFER
$incomingTransfersQuery = $em->getRepository("App\Entity\Slave\ProductTransfer")->findByWarehouseTypeAndPhaseNotCompletedFiltered(true, $warehouse->getId(), 'to', $filters);
$incomingTransfers = $paginator->paginate($incomingTransfersQuery, $request->getSession()->get($request->get("_route")."_page_2"), 100, array('pageParameterName' => 'page_2'));
$incomingTransfersCount = sizeof($em->getRepository("App\Entity\Slave\ProductTransfer")->findByWarehouseTypeAndPhaseNotCompletedFiltered(false, $warehouse->getId(), 'to', $filters));
$outputTransfersQuery = $em->getRepository("App\Entity\Slave\ProductTransfer")->findByWarehouseTypeAndPhaseNotCompletedFiltered(true, $warehouse->getId(), 'from', $filters);
$outputTransfers = $paginator->paginate($outputTransfersQuery, $request->getSession()->get($request->get("_route")."_page_2"), 100, array('pageParameterName' => 'page_2'));
$outputTransfersCount = sizeof($em->getRepository("App\Entity\Slave\ProductTransfer")->findByWarehouseTypeAndPhaseNotCompletedFiltered(false, $warehouse->getId(), 'from', $filters));
$transferReceive = new ProductTransfer();
$formReceive = $formFactory->createNamed("form_transfer_receive", ProductTransferReceiveType::class, $transferReceive);
$formReceive->handleRequest($request);
if($formReceive->isSubmitted()){
$valid = true;
if($formReceive->get('ddtMandatory')->getData()){
$valid = ValidationService::validateFile($validator, $formReceive->get('ddtPath'), false, $formReceive->get('file')->getData(), '10', array('pdf', 'jpg', 'jpeg', 'png'));
}
if($valid && $formReceive->isValid()){
$warehouseFrom = $formReceive->get('warehouse')->getData();
$transferReceive->setDatetimeCreation(new \Datetime());
$transferReceive->setPhase('inserted');
$transferReceive->setWarehouseFrom($warehouseFrom);
$transferReceive->setWarehouseTo($warehouse);
if($formReceive->get('file')->getData() != null){
if($formReceive->get('file')->getData()->guessExtension() == 'pdf')
MediaService::uploadDocument($formReceive->get('file')->getData(), $uploadDir, $transferReceive, 'signedDdt');
else
MediaService::uploadImage($fs, $formReceive->get('file')->getData(), null, $uploadDir, $transferReceive, 'signedDdt', 100, 1000, 200, false);
}
$transferReceive->setType('destination');
$em->persist($transferReceive);
$em->flush();
$session->set('transferId', $transferReceive->getId());
return $this->redirectToRoute('user_warehouse_transfer_receive', array('warehouseId' => $warehouse->getId(), 'transferId' => $transferReceive->getId()));
}
else{
$session->set('openTransferReceiveModal', true);
}
}
$transferSend = new ProductTransfer();
$formSend = $formFactory->createNamed("form_transfer_send", ProductTransferSendType::class, $transferSend, array('warehouseId' => $warehouse->getId()));
$formSend->handleRequest($request);
if($formSend->isSubmitted()){
$valid = true;
switch($formSend->get('type')->getData()){
case 'destination':
if($valid)
$valid = ValidationService::ValidateNotBlank($validator, $formSend->get('supplier'));
break;
case 'main':
if($valid && $warehouse->isHeadquarter() == 0 && $this->getUser()->getAccountTypology() != 'technician')
$valid = ValidationService::ValidateNotBlank($validator, $formSend->get('userFrom'));
break;
case 'technician':
if($valid)
$valid = ValidationService::ValidateNotBlank($validator, $formSend->get('userTo'));
if($valid && $warehouse->isHeadquarter() == 0){
$valid = ValidationService::ValidateNotBlank($validator, $formSend->get('userFrom'));
}
default: break;
}
if($warehouse->getId() == $formSend->get('warehouse')->getData()->getId()){
$valid = false;
$formSend->get('warehouse')->addError(new FormError("Il magazzino di destinazione non può essere lo stesso del magazzino di invio."));
}
if($valid && $formSend->isValid()){
$warehouseTo = $formSend->get('warehouse')->getData();
$transferSend->setDatetimeCreation(new \Datetime());
$transferSend->setPhase('inserted');
$transferSend->setWarehouseFrom($warehouse);
$transferSend->setWarehouseTo($warehouseTo);
switch($formSend->get('type')->getData()){
case 'main':
if($warehouse->isHeadquarter() == 0 && $this->getUser()->getAccountTypology() != 'technician')
$transferSend->setUserFrom($formSend->get('userFrom')->getData());
else
$transferSend->setUserFrom($this->getUser());
break;
case 'technician':
$transferSend->setUserTo($formSend->get('userTo')->getData());
if($warehouse->isHeadquarter() == 0){
$transferSend->setUserFrom($this->getUser());
}
break;
default: break;
}
$em->persist($transferSend);
$em->flush();
if($formSend->get('productRequestId')->getData() != null)
$session->set('productRequestId', $formSend->get('productRequestId')->getData());
$session->set('transferId', $transferSend->getId());
$session->set('transferStocksIds', $formSend->get('sendStocksIds')->getData());
$session->set('action_edit', false);
return $this->redirectToRoute('user_warehouse_transfer_send', array('warehouseId' => $warehouse->getId(), 'transferId' => $transferSend->getId()));
}
else{
$session->set('openTransferSendModal', true);
}
}
$productConditions = array();
$conditions = $em->getRepository('App\Entity\Slave\ProductCondition')->findAll();
$insertedProductRequests = null;
$takeChargeProductRequests = null;
$completedProductRequests = null;
switch($this->getUser()->getAccountTypology()){
case 'administration':
case 'agency':
case 'commercial':
case 'warehouse':
foreach($conditions as $condition)
array_push($productConditions, $condition);
break;
case 'technician':
$conditionsIds = explode(',', $settingWarehouseProductConditions->getValue());
foreach($conditionsIds as $conditionId){
$condition = $em->getRepository('App\Entity\Slave\ProductCondition')->findOneById($conditionId);
array_push($productConditions, $condition);
}
break;
default: break;
}
if($warehouse->isHeadquarter()){
$insertedProductRequestsQuery = $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseHeadquarterAndPhaseFiltered(true, $warehouse->getId(), 'inserted', $filters);
$insertedProductRequests = $paginator->paginate($insertedProductRequestsQuery, $request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
$insertedProductRequestsCount = sizeof($em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseHeadquarterAndPhaseFiltered(false, $warehouse->getId(), 'inserted', $filters));
$takeChargeProductRequestsQuery = $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseHeadquarterAndPhaseFiltered(true, $warehouse->getId(), 'take_charge', $filters);
$takeChargeProductRequests = $paginator->paginate($takeChargeProductRequestsQuery, $request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
$takeChargeProductRequestsCount = sizeof($em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseHeadquarterAndPhaseFiltered(false, $warehouse->getId(), 'take_charge', $filters));
$completedProductRequestsQuery = $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseHeadquarterAndPhaseFiltered(true, $warehouse->getId(), 'completed', $filters);
$completedProductRequests = $paginator->paginate($completedProductRequestsQuery, $request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
$completedProductRequestsCount = sizeof($em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseHeadquarterAndPhaseFiltered(false, $warehouse->getId(), 'completed', $filters));
}
else{
$insertedProductRequestsQuery = $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseAndPhaseFiltered(true, $warehouse->getId(), 'inserted', $filters);
$insertedProductRequests = $paginator->paginate($insertedProductRequestsQuery, $request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
$insertedProductRequestsCount = sizeof($em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseAndPhaseFiltered(false, $warehouse->getId(), 'inserted', $filters));
$takeChargeProductRequestsQuery = $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseAndPhaseFiltered(true, $warehouse->getId(), 'take_charge', $filters);
$takeChargeProductRequests = $paginator->paginate($takeChargeProductRequestsQuery, $request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
$takeChargeProductRequestsCount = sizeof($em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseAndPhaseFiltered(false, $warehouse->getId(), 'take_charge', $filters));
$completedProductRequestsQuery = $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseAndPhaseFiltered(true, $warehouse->getId(), 'completed', $filters);
$completedProductRequests = $paginator->paginate($completedProductRequestsQuery, $request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
$completedProductRequestsCount = sizeof($em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseAndPhaseFiltered(false, $warehouse->getId(), 'completed', $filters));
}
return $this->render('role/user/warehouse/sheet.html.twig', array(
'company' => $company,
'settingRegisterStock' => $settingRegisterStock,
'settingRecoverStock' => $settingRecoverStock,
'settingDdtMandatory' => $settingDdtMandatory,
'warehouse' => $warehouse,
'productConditions' => $productConditions,
'suppliers' => $suppliers,
'productModels' => $productModels,
'toManageProducts' => $toManageProducts,
'availableProducts' => $availableProducts,
'notAvailableProducts' => $notAvailableProducts,
'transferProducts' => $transferProducts,
'filters' => $filters,
'toManageProductsCount' => $toManageProductsCount,
'availableProductsCount' => $availableProductsCount,
'notAvailableProductsCount' => $notAvailableProductsCount,
'transferProductsCount' => $transferProductsCount,
'incomingTransfers' => $incomingTransfers,
'incomingTransfersCount' => $incomingTransfersCount,
'outputTransfers' => $outputTransfers,
'outputTransfersCount' => $outputTransfersCount,
'insertedProductRequests' => $insertedProductRequests,
'insertedProductRequestsCount' => $insertedProductRequestsCount,
'takeChargeProductRequests' => $takeChargeProductRequests,
'takeChargeProductRequestsCount' => $takeChargeProductRequestsCount,
'completedProductRequests' => $completedProductRequests,
'completedProductRequestsCount' => $completedProductRequestsCount,
"formEdit" => $formEdit->createView(),
'formInventory' => $formInventory->createView(),
'formReceive' => $formReceive->createView(),
'formSend' => $formSend->createView()
));
}
// SCORTE
/**
* @Route("/{warehouseId}/scheda/scorte/selezione-multipla-azione", name="user_warehouse_stock_multiple_select_action")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseStockMultipleSelectAction($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$productIds = explode(',', $request->request->get('ids'));
switch($request->request->get('action')){
case 'managed':
$session->set('user_warehouse_stock_multiple_selection_tab', 'to_manage');
foreach($productIds as $id){
$product = $em->getRepository('App\Entity\Slave\Product')->findOneById($id);
$oldStatus = $product->getStatus();
$product->setToManage(false);
$product->setToManagePriority(0);
$newStatus = ProductService::getStatusByCondition($em, $product->getCondition());
if($oldStatus->getId() != $newStatus->getId()){
ProductService::createProductLog($em, $product, $this->getUser(), 'status', $newStatus->getValue(), null, $oldStatus->getId());
$product->setStatus($newStatus);
}
}
$this->addFlash('notice_success', 'Scorte gestite!');
break;
case 'supplier':
$session->set('user_warehouse_stock_multiple_selection_tab', 'to_manage');
$allSuppliers = $em->getRepository('App\Entity\Slave\Supplier')->findAll();
$selectedSuppliers = array();
foreach($allSuppliers as $s){
if($request->request->get('supplier_'.$s->getId()) == 'on')
array_push($selectedSuppliers, $s);
}
foreach($productIds as $id){
$product = $em->getRepository('App\Entity\Slave\Product')->findOneById($id);
foreach($selectedSuppliers as $s){
if(!$product->hasSupplier($s))
$product->addSupplier($s);
}
}
$this->addFlash('notice_success', 'Fornitori dei prodotti aggiornati!');
break;
case 'condition':
$session->set('user_warehouse_stock_multiple_selection_tab', $request->request->get('tab'));
$productCondition = $em->getRepository('App\Entity\Slave\ProductCondition')->findOneById($request->request->get('productCondition'));
foreach($productIds as $id){
$product = $em->getRepository('App\Entity\Slave\Product')->findOneById($id);
ProductService::productChangeCondition($em, $this->getUser(), $product, $productCondition);
$product->setToManage(false);
$product->setToManagePriority(2);
}
$this->addFlash('notice_success', 'Condizione scorte aggiornata!');
break;
default: break;
}
$em->flush();
return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouseId));
}
/**
* @Route("/{warehouseId}/scheda/scorte/registra", name="user_warehouse_stocks_register")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseStocksRegister($warehouseId, Request $request, ValidatorInterface $validator, FormFactoryInterface $formFactory)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
$register = new ProductRegister();
$form = $formFactory->createNamed("form_register", ProductRegisterType::class, $register);
$form->handleRequest($request);
if($form->isSubmitted()){
[$valid, $methodRegister, $errorMsg] = FormValidatorService::validateProductRegister($em, $validator, $form);
if($valid && $form->isValid()){
$arrayProducerCodes = array();
$arraySupplierCodes = array();
$countProductsUpdated = 0;
$countProductsNew = 0;
$countProductsDouble = 0;
$productsUpdatedMats = "";
$productsDoubleMats = "";
$status = ProductService::getStatusByCondition($em, $form->get('condition')->getData());
if($methodRegister == 'gun'){
// IMPORTAZIONE TRAMITE SPARO
foreach($form->get('products')->getData() as $prod){
if(!($prod->getCodeProducer() == null && $prod->getCodeSupplier() == null)){
[$product, $arrayProducerCodes, $arraySupplierCodes, $countProductsUpdated, $countProductsNew, $countProductsDouble, $productsUpdatedMats, $productsDoubleMats] = $this->registerReceiveProducts($em, $warehouse, $status, $form, $prod->getCodeProducer(), $prod->getCodeSupplier(), $arrayProducerCodes, $arraySupplierCodes, $countProductsUpdated, $countProductsNew, $countProductsDouble, $productsUpdatedMats, $productsDoubleMats);
}
}
}
else{
// IMPORTAZIONE TRAMITE FILE
$result = ProductService::checkProducts($form->get('file')->getData(), $form->get('separator')->getData());
if($result['error'] != null){
$this->addFlash('notice_danger', $result['msg']);
return $this->redirect($request->server->get('HTTP_REFERER'));
}
else{
$row = 0;
if(($handle = fopen($form->get('file')->getData(), "r")) !== FALSE) {
while(($data = fgetcsv($handle, 1000, $form->get('separator')->getData())) !== FALSE) {
$data = array_map("utf8_encode", $data);
if($row > 0){
if(!($data[0] == null && $data[1] == null)){
[$product, $arrayProducerCodes, $arraySupplierCodes, $countProductsUpdated, $countProductsNew, $countProductsDouble, $productsUpdatedMats, $productsDoubleMats] = $this->registerReceiveProducts($em, $warehouse, $status, $form, $data[0], $data[1], $arrayProducerCodes, $arraySupplierCodes, $countProductsUpdated, $countProductsNew, $countProductsDouble, $productsUpdatedMats, $productsDoubleMats);
}
}
$row++;
}
fclose($handle);
}
}
}
$em->flush();
$this->addFlash('notice_success', '<br>Prodotti nuovi inseriti: '.$countProductsNew.'<br>Prodotti aggiornati: '.$countProductsUpdated.$productsUpdatedMats.'<br>Prodotti doppi ignorati: '.$countProductsDouble.$productsDoubleMats);
if($request->request->get('submit_action') == 'list')
return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouse->getId()));
elseif($request->request->get('submit_action') == 'add')
return $this->redirectToRoute('user_warehouse_stocks_register', array('warehouseId' => $warehouse->getId()));
}
else{
if($errorMsg != ''){
$this->addFlash('notice_danger', $errorMsg);
}
}
}
return $this->render('role/user/warehouse/stocks_register.html.twig', array(
"form" => $form->createView(),
'warehouse' => $warehouse
));
}
/**
* @Route("/{warehouseId}/scheda/scorte/rientra", name="user_warehouse_stocks_recover")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseStocksRecover($warehouseId, Request $request, ValidatorInterface $validator, FormFactoryInterface $formFactory)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
$productsIdsToRecover = array();
$countMoved = 0;
$error = "";
$recover = new ProductRecover();
$form = $formFactory->createNamed("form_recover", ProductRecoverType::class, $recover);
$form->handleRequest($request);
if($form->isSubmitted()){
if($form->get('gunOrImport')->getData())
$methodRegister = 'import';
else
$methodRegister = 'gun';
$valid = true;
if($methodRegister == 'gun'){
// IMPORTAZIONE TRAMITE SPARO
if(sizeof($form->get('products')->getData()) <= 0){
$valid = false;
$form->get('products')->addError(new FormError('Inserire almeno una matricola prodotto!'));
}
}
else{
// IMPORTAZIONE TRAMITE FILE
$valid = ValidationService::validateFile($validator, $form->get('filePath'), true, $form->get('file')->getData(), '10', array('csv', 'txt'));
}
if($valid && $form->isValid()){
if($methodRegister == 'gun'){
foreach($form->get('products')->getData() as $prod){
$product = $em->getRepository('App\Entity\Slave\Product')->findOneById($prod->getId());
if($product != null)
array_push($productsIdsToRecover, $product->getId());
}
}
else{
$row = 0;
if(($handle = fopen($form->get('file')->getData(), "r")) !== FALSE) {
while(($data = fgetcsv($handle, 1000, $form->get('separator')->getData())) !== FALSE) {
$data = array_map("utf8_encode", $data);
if($row > 0){
if(!($data[0] == null && $data[1] == null)){
$product = null;
if($product == null && $data[0] != null) $product = $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeProducer' => $data[0]));
if($product == null && $data[1] != null) $product = $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeSupplier' => $data[1]));
if($product != null){
if($product->getStatus()->getSlug() == 'transfer'){
$error.= '<br>Errore alla riga '.($row + 1).' -> Impossibile spostare il prodotto '.$product->getCodeProducer().' poiché in fase "In trasferimento"';
}
if($product->getStatus()->getSlug() == 'in_use'){
$error.= '<br>Errore alla riga '.($row + 1).' -> Impossibile spostare il prodotto '.$product->getCodeProducer().' poiché uso da un cliente';
}
if($product->getCondition()->getSlug() == 'historic'){
$error = '<br>Errore alla riga '.($row + 1).' -> Impossibile spostare il prodotto '.$product->getCodeProducer().' poiché in una destinazione esterna';
}
array_push($productsIdsToRecover, $product->getId());
}
else{
if($data[0] != null)
$code = $data[0];
else
$code = $data[1];
$error.= '<br>Errore alla riga '.($row + 1).' -> Non è stato trovato alcun prodotto con codice '.$code;
}
}
}
$row++;
}
fclose($handle);
if($error != ""){
$this->addFlash('notice_warning', "Errori rilevati:".$error);
return $this->redirectToRoute('user_warehouse_stocks_recover', array('warehouseId' => $warehouse->getId()));
}
}
}
// Scorro l'array di ProductIds e li rientro
$statusNotAvailable = $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(['slug' => 'not_available']);
foreach($productsIdsToRecover as $ptrId){
$ptr = $em->getRepository('App\Entity\Slave\Product')->findOneById($ptrId);
$oldStatusId = $ptr->getStatus()->getId();
if($statusNotAvailable->getId() != $oldStatusId){
ProductService::createProductLog($em, $ptr, $this->getUser(), 'status', $statusNotAvailable->getValue(), null, $oldStatusId);
$ptr->setStatus($statusNotAvailable);
}
if($ptr->getActualWarehouse()->getId() != $warehouse->getId()){
ProductService::createProductTransferLog($em, $ptr, null, $this->getUser(), $warehouse, new \Datetime(), 'forced');
$ptr->setActualWarehouse($warehouse);
}
$ptr->setDateLastTransfer(new \Datetime());
$ptr->setToManage(true);
$ptr->setToManagePriority(2);
$countMoved++;
}
$em->flush();
$this->addFlash('notice_success', '<br>Prodotti spostati: '.$countMoved);
return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouse->getId()));
}
}
return $this->render('role/user/warehouse/stocks_recover.html.twig', array(
"form" => $form->createView(),
'warehouse' => $warehouse
));
}
/**
* @Route("/{warehouseId}/scheda/scorte/rientra-cerca", name="user_warehouse_stocks_recover_search")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseStocksRecoverSearch($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
$productCode = $request->request->get('productCode');
$codeType = $request->request->get('codeType');
$product = null;
$error = 'Il prodotto con il codice "'.$productCode.'" non è stato trovato!';
$found = false;
$product = false;
if($productCode != null){
switch($codeType){
case 'producer': $product = $em->getRepository("App\Entity\Slave\Product")->findOneBy(['codeProducer' => $productCode]); break;
case 'supplier': $product = $em->getRepository("App\Entity\Slave\Product")->findOneBy(['codeSupplier' => $productCode]); break;
default: break;
}
}
if($product != null){
if($product->getStatus()->getSlug() == 'transfer'){
$error = 'Impossibile spostare un prodotto in fase "In trasferimento"';
return new Response(json_encode(array("code" => 200, "success" => true, "found" => $found, "error" => $error)));
}
if($product->getStatus()->getSlug() == 'in_use'){
$error = 'Impossibile spostare un prodotto in uso da un cliente';
return new Response(json_encode(array("code" => 200, "success" => true, "found" => $found, "error" => $error)));
}
if($product->getCondition()->getSlug() == 'historic'){
$error = 'Impossibile spostare un prodotto in una destinazione esterna';
return new Response(json_encode(array("code" => 200, "success" => true, "found" => $found, "error" => $error)));
}
$found = true;
$json = '{
"id":"'.$product->getId().'",
"codeProducer":"'.$product->getCodeProducer().'",
"codeSupplier":"'.$product->getCodeSupplier().'",
"model":"'.$product->getModel()->getName().'",
"condition":"'.$product->displayCondition('string-short').'",
"suppliers":"'.$product->displayStringSuppliers().'",
"warehouseNickname":"'.$product->getActualWarehouse()->__toString().'"}';
return new Response(json_encode(array("code" => 200, "success" => true, "found" => $found, 'product' => $json)));
}
return new Response(json_encode(array("code" => 200, "success" => true, "found" => $found, "error" => $error)));
}
/**
* @Route("/{warehouseId}/scheda/scorte/rientra-sposta-prodotto", name="user_warehouse_stocks_recover_move_product")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseStocksRecoverMoveProduct($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$product = $em->getRepository('App\Entity\Slave\Product')->findOneById($request->request->get('productId'));
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
ProductService::createProductTransferLog($em, $product, null, $this->getUser(), $warehouse, new \Datetime(), 'manual');
$product->setActualWarehouse($warehouse);
$product->setDateLastTransfer(new \Datetime);
$em->flush();
return new Response(json_encode(array("code" => 200, "success" => true)));
}
/**
* @Route("/{warehouseId}/scheda/scorte/inventario", name="user_warehouse_stock_inventory")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseStockInventory($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
$supplier = $em->getRepository("App\Entity\Slave\Supplier")->findOneById($session->get('inventorySupplierId'));
$status = $em->getRepository("App\Entity\Slave\ProductStatus")->findOneById($session->get('inventoryStatusId'));
return $this->render('role/user/warehouse/inventory.html.twig', array(
'warehouse' => $warehouse,
'supplier' => $supplier,
'status' => $status,
'results' => $session->get('inventoryResults')
));
}
/**
* @Route("/{warehouseId}/scheda/scorte/inventario-esporta", name="user_warehouse_stock_inventory_export")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseStockInventoryExport($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$results = $session->get('inventoryResults');
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
$supplier = $em->getRepository("App\Entity\Slave\Supplier")->findOneById($session->get('inventorySupplierId'));
$status = $em->getRepository("App\Entity\Slave\ProductStatus")->findOneById($session->get('inventoryStatusId'));
$response = new StreamedResponse();
$response->setCallback(function() use($results, $warehouse, $supplier, $status) {
$handle = fopen('php://output', 'w+');
fputcsv($handle, array('Magazzino',$warehouse->getNickname(),'','',''), ";", '"', "\\");
fputcsv($handle, array('Fornitore',$supplier->getName(),'','',''), ";", '"', "\\");
fputcsv($handle, array('Stato',$status->getValue(),'','',''), ";", '"', "\\");
fputcsv($handle, array('Modello', 'Matricola produttore','Matricola fornitore','Magazzino attuale','Errore', 'Ultimo trasferimento'), ";", '"', "\\");
foreach($results as $r){
fputcsv($handle, array($r[2], $r[3], $r[4], $r[5], $r[6], $r[7]), ";", '"', "\\");
}
fclose($handle);
});
$response->setStatusCode(200);
$dispositionHeader = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $warehouse->getNickname().' - Inventario.csv');
$response->headers->set('Content-Type', 'text/csv; charset=ISO-8859-15');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
//
// TRASFERIMENTI
/**
* @Route("/{warehouseId}/scheda/trasferimento/{transferId}/riprendi", name="user_warehouse_transfer_resume")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferSelect(Request $request, $warehouseId, $transferId)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
if($transfer->getWarehouseTo()->getId() == $warehouse->getId()){
return $this->redirectToRoute('user_warehouse_transfer_receive', array('warehouseId' => $warehouseId, 'transferId' => $transferId));
}
elseif($transfer->getWarehouseFrom()->getId() == $warehouse->getId()){
$session->set('action_edit', true);
return $this->redirectToRoute('user_warehouse_transfer_send', array('warehouseId' => $warehouseId, 'transferId' => $transferId));
}
}
/**
* @Route("/{warehouseId}/scheda/trasferimento/elimina", name="user_warehouse_transfer_delete")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferDelete($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$transfer = $em->getRepository("App\Entity\Slave\ProductTransfer")->findOneById($request->request->get("transferDelId"));
foreach($transfer->getProducts() as $jtppt){
$status = ProductService::getStatusByCondition($em, $jtppt->getProduct()->getCondition());
ProductService::createProductLog($em, $jtppt->getProduct(), $this->getUser(), 'status', $status->getValue(), null, $jtppt->getProduct()->getStatus()->getId());
$jtppt->getProduct()->setStatus($status);
$em->remove($jtppt);
}
$em->remove($transfer);
$em->flush();
$this->addFlash('notice_success', "Trasferimento eliminato");
return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouseId));
}
/**
* @Route("/{warehouseId}/scheda/trasferimento-aggiorna-magazzini", name="user_warehouse_transfer_update_warehouses")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferUpdateWarehouses($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$type = $request->request->get("type");
switch($type){
case 'technician': $warehouses = $em->getRepository('App\Entity\Slave\Warehouse')->findWarehousesTechnicians($warehouseId); break;
case 'destination': $warehouses = $em->getRepository('App\Entity\Slave\Warehouse')->findWarehousesDestinations(); break;
case 'main': $warehouses = $em->getRepository('App\Entity\Slave\Warehouse')->findHeadquarterWarehouses(); break;
default: break;
}
$first = true;
$json = "[";
foreach($warehouses as $w){
if($first) $first = false; else $json.= ',';
$json.= '{"id":'.$w->getId().', "nickname":"'.$w->getNickname().'"}';
}
$json.= "]";
return new Response(json_encode(array("code" => 200, "success" => true, "warehouses" => $json)));
}
/**
* @Route("/{warehouseId}/scheda/trasferimento-aggiorna-magazzini-tecnico", name="user_warehouse_transfer_update_technician_warehouses")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferUpdateTechnicianWarehouses($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$technicianId = $request->request->get("technicianId");
$technician = $em->getRepository('App\Entity\Slave\User')->findOneById($technicianId);
$first = true;
$json = "[";
foreach($technician->getWarehouses() as $jt){
if($jt->getPermission() == "RW"){
if($first) $first = false; else $json.= ',';
$json.= '{"id":'.$jt->getWarehouse()->getId().', "nickname":"'.$jt->getWarehouse()->getNickname().'"}';
}
}
$json.= "]";
return new Response(json_encode(array("code" => 200, "success" => true, "warehouses" => $json)));
}
/**
* @Route("/{warehouseId}/scheda/trasferimento/{transferId}/scheda", name="user_warehouse_transfer_sheet")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId) || is_granted('transfer_edit', transferId)")
*/
public function userWarehouseTransferSheet($warehouseId, $transferId, Request $request, ValidatorInterface $validator, FormFactoryInterface $formFactory, FileSystem $fs)
{
$em = $this->mr->getManager('slave');
$emMaster = $this->mr->getManager('master');
$session = $request->getSession();
$transferInternalDdtActive = $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt'))->getValue();
$warehouse = $em->getRepository('App\Entity\Slave\Warehouse')->findOneById($warehouseId);
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
$transferType = $transfer->getType();
$company = $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
$uploadDir = $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
$session->remove('productRequestId');
// RESETTO VARIABILI STAMPA
$session->remove('ddtHeader');
$session->remove('port');
$session->remove('ddtCausal');
$session->remove('appearance');
$session->remove('numberGoods');
$session->remove('weight');
$session->remove('transport');
$session->remove('courier');
$session->remove('courierId');
$session->remove('notes');
$uploadDir = $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
// EDIT TRANSFER DATA
$formEdit = $formFactory->createNamed("form_transfer_edit", ProductTransferEditType::class, $transfer);
$formEdit->handleRequest($request);
if($formEdit->isSubmitted()){
$valid = true;
// Da destinazione a sede centrale
if($transfer->getType() == 'destination' && $transfer->getWarehouseTo()->getId() == $warehouse->getId() && $formEdit->get('ddtMandatory')->getData()){
if($valid) $valid = ValidationService::validateNotBlank($validator, $formEdit->get('ddt'));
if($valid && $formEdit->get('file')->getData() != null) $valid = ValidationService::validateFile($validator, $formEdit->get('signedDdtPath'), true, $formEdit->get('file')->getData(), '10', array('pdf', 'jpg', 'jpeg', 'png'));
}
if($valid && $formEdit->isValid()){
// Da destinazione a sede centrale
if($transfer->getType() == 'destination' && $transfer->getWarehouseTo()->getId() == $warehouse->getId()){
$transfer->setDdtMandatory($formEdit->get('ddtMandatory')->getData());
if($formEdit->get('ddtMandatory')->getData()){
$transfer->setDdt($formEdit->get('ddt')->getData());
if($formEdit->get('file')->getData() != null)
MediaService::uploadDocument($formEdit->get('file')->getData(), $uploadDir, $transfer, 'signedDdt');
}
}
if($transfer->getType() == 'technician'){
$transfer->setDdtMandatory($formEdit->get('ddtMandatory')->getData());
if($transfer->getPhase() == 'inserted' || $transfer->getPhase() == 'inserted_editable'){
$transfer->setUserTo($formEdit->get('userTo')->getData());
$transfer->setWarehouseTo($formEdit->get('warehouse')->getData());
}
}
$em->flush();
return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId, 'transferId' => $transferId));
}
else{
$session->set('openEditModal', true);
}
}
// UPLOAD DDT
$formDdt = $formFactory->createNamed("form_transfer_ddt", ProductTransferDdtType::class, $transfer);
$formDdt->handleRequest($request);
if($formDdt->isSubmitted()){
$valid = ValidationService::validateFile($validator, $formDdt->get('ddtPath'), true, $formDdt->get('file')->getData(), '10',array('pdf', 'jpg', 'jpeg', 'png'));
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
if($valid && $formDdt->isValid()){
if($formDdt->get('file')->getData() != null){
if($formDdt->get('file')->getData()->guessExtension() == 'pdf')
MediaService::uploadDocument($formDdt->get('file')->getData(), $uploadDir, $transfer, 'signedDdt');
else
MediaService::uploadImage($fs, $formDdt->get('file')->getData(), null, $uploadDir, $transfer, 'signedDdt', 100, 1000, 200, false);
}
$transfer->setPhaseDdt('completed');
$conditionHistoric = $em->getRepository('App\Entity\Slave\ProductCondition')->findOneBySlug('historic');
$statusNotAvailable = $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBySlug('not_available');
foreach($transfer->getProducts() as $jtppt){
$product = $jtppt->getProduct();
ProductService::createProductTransferLog($em, $product, $jtppt->getTransfer(), $this->getUser(), null, new \Datetime(), 'scan');
ProductService::moveProductTransfer($em, $jtppt, $this->getUser(), $statusNotAvailable);
ProductService::createProductLog($em, $product, $this->getUser(), 'condition', $conditionHistoric->getValue(), null, $product->getCondition()->getId());
$product->setCondition($conditionHistoric);
}
$transfer->setPhase('completed');
$transfer->setDatetimeCompletion(new \Datetime());
$this->addFlash('notice_success', "Consegna registrata!");
$em->flush();
return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId, 'transferId' => $transferId));
}
}
// CHANGE UPLOADED DDT
$formChangeDdt = $formFactory->createNamed("form_transfer_change_ddt", ProductTransferDdtType::class, $transfer);
$formChangeDdt->handleRequest($request);
if($formChangeDdt->isSubmitted()){
$valid = ValidationService::validateFile($validator, $formChangeDdt->get('ddtPath'), true, $formChangeDdt->get('file')->getData(), '10',array('pdf', 'jpg', 'jpeg', 'png'));
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
if($valid && $formChangeDdt->isValid()){
if($formChangeDdt->get('file')->getData() != null){
MediaService::removeDocument($fs, $transfer->getSignedDdtPath(), $uploadDir);
if($formChangeDdt->get('file')->getData()->guessExtension() == 'pdf')
MediaService::uploadDocument($formChangeDdt->get('file')->getData(), $uploadDir, $transfer, 'signedDdt');
else
MediaService::uploadImage($fs, $formChangeDdt->get('file')->getData(), null, $uploadDir, $transfer, 'signedDdt', 100, 1000, 200, false);
}
$transfer->setPhaseDdt('completed');
$em->flush();
$this->addFlash('notice_success', "DDT caricato!");
return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId, 'transferId' => $transferId));
}
}
return $this->render('role/user/warehouse/transfer/sheet.html.twig', array(
'company' => $company,
'warehouse' => $warehouse,
'transfer' => $transfer,
'transferType' => $transferType,
'transferInternalDdtActive' => $transferInternalDdtActive,
'formEdit' => $formEdit->createView(),
'formDdt' => $formDdt->createView(),
'formChangeDdt' => $formChangeDdt->createView()
));
}
// RICEVI
/**
* @Route("/{warehouseId}/scheda/trasferimento/{transferId}/ricevi", name="user_warehouse_transfer_receive")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferReceive($warehouseId, $transferId, Request $request, ValidatorInterface $validator, FormFactoryInterface $formFactory)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
$transferType = $transfer->getType();
$register = new ProductRegister();
$form = $formFactory->createNamed("form_transfer_receive", ProductRegisterType::class, $register);
$form->handleRequest($request);
if($form->isSubmitted()){
[$valid, $methodRegister, $errorMsg] = FormValidatorService::validateProductReceive($em, $validator, $form, $transferType);
if($valid && $form->isValid()){
$arrayProducerCodes = array();
$arraySupplierCodes = array();
$countProductsUpdated = 0;
$countProductsNew = 0;
$countProductsDouble = 0;
$productsUpdatedMats = "";
$productsDoubleMats = "";
$status = $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'transfer'));
$transfer->setPhase('product_insert');
if($methodRegister == 'gun'){
// IMPORTAZIONE TRAMITE SPARO
foreach($form->get('products')->getData() as $prod){
if(!($prod->getCodeProducer() == null && $prod->getCodeSupplier() == null)){
[$product, $arrayProducerCodes, $arraySupplierCodes, $countProductsUpdated, $countProductsNew, $countProductsDouble, $productsUpdatedMats, $productsDoubleMats] = $this->registerReceiveProducts($em, $warehouse, $status, $form, $prod->getCodeProducer(), $prod->getCodeSupplier(), $arrayProducerCodes, $arraySupplierCodes, $countProductsUpdated, $countProductsNew, $countProductsDouble, $productsUpdatedMats, $productsDoubleMats);
ProductService::createJtProductTransfer($em, $product, $transfer, new \Datetime());
}
}
}
else{
// IMPORTAZIONE TRAMITE FILE
$result = ProductService::checkProducts($form->get('file')->getData(), $form->get('separator')->getData());
if($result['error'] != null){
$this->addFlash('notice_danger', $result['msg']);
return $this->redirect($request->server->get('HTTP_REFERER'));
}
else{
$row = 0;
if(($handle = fopen($form->get('file')->getData(), "r")) !== FALSE) {
while(($data = fgetcsv($handle, 1000, $form->get('separator')->getData())) !== FALSE) {
$data = array_map("utf8_encode", $data);
if($row > 0){
if(!($data[0] == null && $data[1] == null)){
[$product, $arrayProducerCodes, $arraySupplierCodes, $countProductsUpdated, $countProductsNew, $countProductsDouble, $productsUpdatedMats, $productsDoubleMats] = $this->registerReceiveProducts($em, $warehouse, $status, $form, $data[0], $data[1], $arrayProducerCodes, $arraySupplierCodes, $countProductsUpdated, $countProductsNew, $countProductsDouble, $productsUpdatedMats, $productsDoubleMats);
ProductService::createJtProductTransfer($em, $product, $transfer, new \Datetime());
}
}
$row++;
}
fclose($handle);
}
}
}
$em->flush();
if($request->request->get('submit_action') == 'add_products')
return $this->redirectToRoute('user_warehouse_transfer_receive', array('warehouseId' => $warehouse->getId(), 'transferId' => $transfer->getId()));
else{
foreach($transfer->getProducts() as $jtppt){
$status = $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'available'));
ProductService::moveProductTransfer($em, $jtppt, $this->getUser(), $status);
ProductService::createProductTransferLog($em, $jtppt->getProduct(), $transfer, $this->getUser(), null, new \Datetime(), 'scan');
}
$transfer->setPhase('completed');
$transfer->setDatetimeCompletion(new \Datetime());
$em->flush();
$this->addFlash('notice_success', '<br>Prodotti nuovi inseriti: '.$countProductsNew.'<br>Prodotti aggiornati: '.$countProductsUpdated.$productsUpdatedMats.'<br>Prodotti doppi ignorati: '.$countProductsDouble.$productsDoubleMats);
return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId, 'transferId' => $transfer->getId()));
}
}
else{
if($errorMsg != ''){
$this->addFlash('notice_danger', $errorMsg);
}
}
}
return $this->render('role/user/warehouse/transfer/receive.html.twig', array(
'transfer' => $transfer,
'transferType' => $transferType,
'warehouse' => $warehouse,
"form" => $form->createView()
));
}
/**
* @Route("/{warehouseId}/scheda/trasferimento/{transferId}/ricevi-concludi", name="user_warehouse_transfer_receive_complete")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferReceiveComplete($warehouseId, $transferId, Request $request)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
$status = $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'available'));
foreach($transfer->getProducts() as $jtppt){
ProductService::moveProductTransfer($em, $jtppt, $this->getUser(), $status);
ProductService::createProductTransferLog($em, $jtppt->getProduct(), $transfer, $this->getUser(), null, new \Datetime(), 'scan');
}
$transfer->setPhase('completed');
$transfer->setDatetimeCompletion(new \Datetime());
$em->flush();
$this->addFlash('notice_success', 'Prodotti inseriti a magazzino');
return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId, 'transferId' => $transfer->getId()));
}
/**
* @Route("/{warehouseId}/scheda/trasferimento/{transferId}/scarica-materiale", name="user_warehouse_transfer_download")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferDownload($warehouseId, $transferId, Request $request, ValidatorInterface $validator, FormFactoryInterface $formFactory, FileSystem $fs)
{
$em = $this->mr->getManager('slave');
$emMaster = $this->mr->getManager('master');
$session = $request->getSession();
$transferInternalDdtActive = $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt'))->getValue();
$company = $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
$uploadDir = $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
// SCARICA MATERIALE
$form = $formFactory->createNamed("form_transfer_download", ProductTransferDownloadType::class, $transfer, array('transferId' => $transfer->getId()));
$form->handleRequest($request);
if($form->isSubmitted()){
$file = $form->get('file')->getData();
$valid = true;
if($transferInternalDdtActive && $transfer->isDdtMandatory()){
$valid = ValidationService::validateFile($validator, $form->get('ddtPath'), true, $file, 10, array('pdf', 'jpg', 'jpeg', 'png'));
}
if($valid && $form->isValid()){
if($transferInternalDdtActive){
if($file != null){
if($file->guessExtension() == 'pdf')
MediaService::uploadDocument($file, $uploadDir, $transfer, 'signedDdt');
else
MediaService::uploadImage($fs, $file, null, $uploadDir, $transfer, 'signedDdt', 100, 1000, 200, false);
$transfer->setPhaseDdt('completed');
}
else{
$transfer->setPhaseDdt('signed_missing');
}
}
$transfer->setPhase('completed');
$transfer->setDatetimeCompletion(new \Datetime());
[$status, $toManage, $toManagePriority] = $this->downloadSetByType($em, $transfer);
if($request->request->get('jtpptGunIds') != null){
$gunIds = explode(',', $request->request->get('jtpptGunIds'));
for($i = 0; $i < sizeof($gunIds); $i++){
$jtppt = $em->getRepository('App\Entity\Slave\JoinTableProductProductTransfer')->findOneById($gunIds[$i]);
ProductService::moveProductTransfer($em, $jtppt, $this->getUser(), $status);
ProductService::createProductTransferLog($em, $jtppt->getProduct(), $transfer, $this->getUser(), null, new \Datetime(), 'scan');
$jtppt->setDownloadType('scan');
$jtppt->getProduct()->setToManage($toManage);
$jtppt->getProduct()->setToManagePriority($toManagePriority);
}
}
if($request->request->get('jtpptManualIds') != null){
$manualIds = explode(',', $request->request->get('jtpptManualIds'));
for($i = 0; $i < sizeof($manualIds); $i++){
$jtppt = $em->getRepository('App\Entity\Slave\JoinTableProductProductTransfer')->findOneById($manualIds[$i]);
ProductService::moveProductTransfer($em, $jtppt, $this->getUser(), $status);
ProductService::createProductTransferLog($em, $jtppt->getProduct(), $transfer, $this->getUser(), null, new \Datetime(), 'manual');
$jtppt->setDownloadType('manual');
$jtppt->getProduct()->setToManage($toManage);
$jtppt->getProduct()->setToManagePriority($toManagePriority);
}
}
$em->flush();
// I PRODOTTI NON SCARICATI LI RIMETTO NELLO STATO PRECEDENTE
foreach($transfer->getProducts() as $jtppt){
if(!$jtppt->isTransferOk()){
$status = $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'not_available'));
ProductService::createProductLog($em, $jtppt->getProduct(), $this->getUser(), 'status', $status->getValue(), null, $jtppt->getProduct()->getStatus()->getId());
$jtppt->getProduct()->setStatus($status);
if($transfer->getWarehouseFrom()->isHeadquarter()){
$jtppt->getProduct()->setToManage(true);
$jtppt->getProduct()->setToManagePriority('5');
}
}
}
$em->flush();
$this->addFlash('notice_success', 'Trasferimento scaricato correttamente!');
return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId, 'transferId' => $transfer->getId()));
}
else{
$session->set('openModalTransferComplete', true);
$session->set('jtpptGunIds', $request->request->get('jtpptGunIds'));
$session->set('jtpptManualIds', $request->request->get('jtpptManualIds'));
}
}
return $this->render('role/user/warehouse/transfer/download.html.twig', array(
'company' => $company,
'transfer' => $transfer,
'transferInternalDdtActive' => $transferInternalDdtActive,
"form" => $form->createView()
));
}
/**
* @Route("/{warehouseId}/scheda/trasferimento/scarica-materiale/parziale", name="user_warehouse_transfer_download_partial")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferDownloadPartial($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
[$status, $toManage, $toManagePriority] = $this->downloadSetByType($em, $transfer);
if($request->request->get('jtpptGunIds') != null){
$gunIds = explode(',', $request->request->get('jtpptGunIds'));
for($i = 0; $i < sizeof($gunIds); $i++){
$jtppt = $em->getRepository('App\Entity\Slave\JoinTableProductProductTransfer')->findOneById($gunIds[$i]);
ProductService::moveProductTransfer($em, $jtppt, $this->getUser(), $status);
ProductService::createProductTransferLog($em, $jtppt->getProduct(), $transfer, $this->getUser(), null, new \Datetime(), 'scan');
$jtppt->setDownloadType('scan');
$jtppt->getProduct()->setToManage($toManage);
$jtppt->getProduct()->setToManagePriority($toManagePriority);
}
}
if($request->request->get('jtpptManualIds') != null){
$manualIds = explode(',', $request->request->get('jtpptManualIds'));
for($i = 0; $i < sizeof($manualIds); $i++){
$jtppt = $em->getRepository('App\Entity\Slave\JoinTableProductProductTransfer')->findOneById($manualIds[$i]);
ProductService::moveProductTransfer($em, $jtppt, $this->getUser(), $status);
ProductService::createProductTransferLog($em, $jtppt->getProduct(), $transfer, $this->getUser(), null, new \Datetime(), 'manual');
$jtppt->setDownloadType('manual');
$jtppt->getProduct()->setToManage($toManage);
$jtppt->getProduct()->setToManagePriority($toManagePriority);
}
}
$em->flush();
$this->addFlash('notice_success', 'Trasferimento parziale effettuato!');
return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId, 'transferId' => $transfer->getId()));
}
/**
* @Route("/{warehouseId}/scheda/trasferimento/scarica-materiale/cerca", name="user_warehouse_transfer_download_search")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferDownloadSearch($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
$productCode = $request->request->get('productCode');
$jtpptId = null;
$found = false;
foreach($transfer->getProducts() as $jtppt){
if($productCode == $jtppt->getProduct()->getCodeProducer() || $productCode == $jtppt->getProduct()->getCodeSupplier()){
$jtpptId = $jtppt->getId();
$found = true;
break;
}
}
return new Response(json_encode(array("code" => 200, "success" => true, "found" => $found, 'jtpptId' => $jtpptId)));
}
//
// INVIA
/**
* @Route("/{warehouseId}/scheda/trasferimento/{transferId}/invia", name="user_warehouse_transfer_send")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferSend($warehouseId, $transferId, Request $request, ValidatorInterface $validator, FormFactoryInterface $formFactory)
{
$em = $this->mr->getManager('slave');
$emMaster = $this->mr->getManager('master');
$session = $request->getSession();
$company = $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
$transferInternalDdtActive = $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt'))->getValue();
$form = $formFactory->createNamed("form_transfer_send", ProductTransferSendProductsType::class, $transfer);
$form->handleRequest($request);
if($form->isSubmitted()){
[$valid, $methodRegister, $errorMsg, $arrayProducts] = FormValidatorService::validateProductSend($em, $validator, $form, $warehouse);
// Se magazzino principale e verso destinazione esterna -> Controllo se prodotti hanno il fornitore inserito
if($valid && $warehouse->isHeadquarter() && $transfer->getType() == 'destination'){
foreach($arrayProducts as $p){
$suppliersIds = [];
foreach($p->getSuppliers() as $sup){
array_push($suppliersIds, $sup->getId());
}
if(!in_array($transfer->getSupplier()->getId(), $suppliersIds)){
$valid = false;
$errorMsg = 'Il prodotto '.$p.' non ha il fornitore inserito '.$transfer->getSupplier();
$form->get('file')->addError(new FormError('Il prodotto '.$p.' non ha il fornitore inserito '.$transfer->getSupplier()));
break;
}
}
}
if($valid && $form->isValid()){
// Se i controlli sono andati a buon fine -> inserisco le JoinTableProductTransfer per le righe non vuote
$status = $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'transfer'));
foreach($arrayProducts as $product){
ProductService::createProductLog($em, $product, $this->getUser(), 'status', $status->getValue(), null, $product->getStatus()->getId());
$product->setStatus($status);
ProductService::createJtProductTransfer($em, $product, $transfer, new \Datetime());
}
if($transferInternalDdtActive || $transfer->getType() == 'destination'){
$transfer->setPhase('inserted_editable');
$transfer->setPhaseDdt('create');
}
else{
$transfer->setPhase('waiting_receiver');
}
$em->flush();
$session->remove('transferStocksIds');
if($request->request->get('submit_action') == 'ddt')
return $this->redirectToRoute('user_warehouse_transfer_create_ddt', array('warehouseId' => $warehouseId, 'transferId' => $transfer->getId()));
else
return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouse->getId(), 'transferId' => $transfer->getId()));
}
else{
$this->addFlash('notice_danger', $errorMsg);
return $this->redirect($request->server->get('HTTP_REFERER'));
}
}
return $this->render('role/user/warehouse/transfer/send.html.twig', array(
'company' => $company,
'transfer' => $transfer,
'warehouse' => $warehouse,
'transferInternalDdtActive' => $transferInternalDdtActive,
'actionEdit' => $session->get('action_edit'),
"form" => $form->createView()
));
}
/**
* @Route("/{warehouseId}/scheda/trasferimento/{transferId}/crea-ddt", name="user_warehouse_transfer_create_ddt")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferCreateDdt($warehouseId, $transferId, Request $request, ValidatorInterface $validator, FormFactoryInterface $formFactory)
{
$em = $this->mr->getManager('slave');
$emMaster = $this->mr->getManager('master');
$session = $request->getSession();
$company = $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
$useCounterForTechnicians = $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt_number_for_technicians'))->getValue();
$ddtHeaders = $em->getRepository('App\Entity\Slave\DdtHeader')->findAll();
$products = $em->getRepository('App\Entity\Slave\Product')->findByTransferOrderedByModel($transfer->getId());
[$arrayRows, $total] = $this->createDdtProductsArray($products);
[$senderSupplierSlave, $senderTechnician, $senderWarehouseHeadquarter] = $this->searchDDTSender($em, $transfer);
[$destinationExternal, $destinationTechnician, $destinationWarehouseHeadquarter] = $this->searchDDTDestination($em, $transfer);
$senderSupplier = null;
if($senderSupplierSlave != null)
$senderSupplier = $emMaster->getRepository('App\Entity\Master\Supplier')->findOneById($senderSupplierSlave->getIdSupplier());
$ddtPrint = new DdtPrint();
$form = $formFactory->createNamed("form_ddt_print", DdtPrintType::class, $ddtPrint);
$form->handleRequest($request);
if($form->isSubmitted()){
$valid = true;
if($valid && $this->getUser()->getAccountTypology() != 'technician') $valid = ValidationService::validateNotBlank($validator, $form->get('ddtHeader'));
if($valid) $valid = ValidationService::validateNotBlank($validator, $form->get('port'));
if($valid) $valid = ValidationService::validateNotBlank($validator, $form->get('ddtCausal'));
if($valid) $valid = ValidationService::validateNotBlank($validator, $form->get('appearance'));
if($valid) $valid = ValidationService::validateNotBlank($validator, $form->get('numberGoods'));
if($valid) $valid = ValidationService::validateNotBlank($validator, $form->get('weight'));
if($valid) $valid = ValidationService::validateNotBlank($validator, $form->get('transport'));
if($valid) $valid = ValidationService::validateNotBlank($validator, $form->get('courier'));
if($valid) $valid = ValidationService::validateNotBlank($validator, $form->get('total'));
if($valid && $form->isValid()){
if(!$useCounterForTechnicians && $transfer->getUserFrom() != null && $transfer->getUserFrom()->getAccountTypology() == "technician")
$transfer->setDdt($form->get('ddtTechnicianNumber')->getData());
$transfer->setDdtHeader($form->get('ddtHeader')->getData());
$em->flush();
$session->set('port', $form->get('port')->getData());
$session->set('ddtCausal', $form->get('ddtCausal')->getData()->getId());
$session->set('appearance', $form->get('appearance')->getData());
$session->set('numberGoods', $form->get('numberGoods')->getData());
$session->set('weight', $form->get('weight')->getData());
$session->set('transport', $form->get('transport')->getData());
$session->set('courier', $form->get('courier')->getData());
$session->set('courierId', $form->get('courier')->getData()->getId());
$session->set('total', $form->get('total')->getData());
$session->set('notes', $form->get('notes')->getData());
return $this->redirectToRoute('user_warehouse_transfer_send_ddt', array('warehouseId' => $warehouseId, 'transferId' => $transfer->getId()));
}
}
return $this->render('role/user/warehouse/transfer/ddt.html.twig', array(
'company' => $company,
'transfer' => $transfer,
'senderSupplier' => $senderSupplier,
'senderTechnician' => $senderTechnician,
'senderWarehouseHeadquarter' => $senderWarehouseHeadquarter,
'destinationExternal' => $destinationExternal,
'destinationTechnician' => $destinationTechnician,
'destinationWarehouseHeadquarter' => $destinationWarehouseHeadquarter,
'useCounterForTechnicians' => $useCounterForTechnicians,
'arrayRows' => $arrayRows,
'total' => $total,
'ddtHeaders' => $ddtHeaders,
"form" => $form->createView()
));
}
/**
* @Route("/{warehouseId}/scheda/trasferimento/{transferId}/invia-ddt", name="user_warehouse_transfer_send_ddt")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferSendDdt($warehouseId, $transferId, Request $request, ValidatorInterface $validator, FormFactoryInterface $formFactory, FileSystem $fs)
{
$em = $this->mr->getManager('slave');
$emMaster = $this->mr->getManager('master');
$session = $request->getSession();
$company = $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
$useCounterForTechnicians = $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt_number_for_technicians'))->getValue();
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
$oldDDt = $transfer->getDdtPath();
$ddtCausal = $em->getRepository('App\Entity\Slave\DdtCausal')->findOneById($session->get('ddtCausal'));
$ddtHeader = $transfer->getDdtHeader();
$products = $em->getRepository('App\Entity\Slave\Product')->findByTransferOrderedByModel($transfer->getId());
$uploadDir = $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
[$arrayRows, $total] = $this->createDdtProductsArray($products);
[$senderSupplierSlave, $senderTechnician, $senderWarehouseHeadquarter] = $this->searchDDTSender($em, $transfer);
[$destinationExternal, $destinationTechnician, $destinationWarehouseHeadquarter] = $this->searchDDTDestination($em, $transfer);
$senderSupplier = null;
if($senderSupplierSlave != null)
$senderSupplier = $emMaster->getRepository('App\Entity\Master\Supplier')->findOneById($senderSupplierSlave->getIdSupplier());
$html2pdf = new Html2Pdf('P', 'A4', 'it', true, 'UTF-8', array(5, 5, 5, 5), false);
$html2pdf->writeHTML($this->renderView('role/user/print/ddt.html.twig', array(
'company' => $company,
'transfer' => $transfer,
'senderSupplier' => $senderSupplier,
'senderTechnician' => $senderTechnician,
'senderWarehouseHeadquarter' => $senderWarehouseHeadquarter,
'destinationExternal' => $destinationExternal,
'destinationTechnician' => $destinationTechnician,
'destinationWarehouseHeadquarter' => $destinationWarehouseHeadquarter,
'useCounterForTechnicians' => $useCounterForTechnicians,
'arrayRows' => $arrayRows,
'total' => $session->get('total'),
'port' => $session->get('port'),
'ddtCausal' => $ddtCausal,
'appearance' => $session->get('appearance'),
'numberGoods' => $session->get('numberGoods'),
'weight' => $session->get('weight'),
'transport' => $session->get('transport'),
'courier' => $session->get('courier'),
'notes' => $session->get('notes')
)));
ob_end_clean();
$fileName = md5(uniqid()).'.pdf';
$html2pdf->Output($uploadDir.$fileName, 'F');
$transfer->setDdtPath($fileName);
$transfer->setPhase('waiting_receiver');
$transfer->setPhaseDdt('prepared');
if($useCounterForTechnicians || ($transfer->getUserFrom() == null || $transfer->getUserFrom()->getAccountTypology() != "technician")){
if($transfer->getType() == "destination" && !$ddtHeader->isUseOneCounter()){
if($transfer->getDdt() == null){
$transfer->setDdt($ddtHeader->getExternalNumber());
$ddtHeader->setExternalNumber(intval($ddtHeader->getExternalNumber() + 1));
}
}
else{
if($transfer->getDdt() == null){
$transfer->setDdt($ddtHeader->getInternalNumber());
$ddtHeader->setInternalNumber(intval($ddtHeader->getInternalNumber() + 1));
}
}
}
$em->flush();
MediaService::removeDocument($fs, $oldDDt, $uploadDir);
$this->addFlash('notice_success', 'Trasferimento completato!');
return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId, 'transferId' => $transfer->getId()));
}
/**
* @Route("/{warehouseId}/scheda/trasferimento/invia-cerca", name="user_warehouse_transfer_send_search")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferSendSearch($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
$productCode = $request->request->get('productCode');
$codeType = $request->request->get('codeType');
$product = null;
$error = 'Il prodotto con il codice "'.$productCode.'" non è stato trovato!';
$found = false;
foreach($transfer->getWarehouseFrom()->getProducts() as $pr){
// CERCO TRA I PRODOTTI DEL MAGAZZINO DI PARTENZA
if($codeType == 'producer' && $productCode != null){
if($pr->getCodeProducer() == $productCode){
$error = $pr->canBeTransferredStatus($transfer);
$found = true;
if($error == "ok")
$product = $pr;
break;
}
}
elseif($codeType == 'supplier' && $pr->getCodeSupplier() != null){
if($pr->getCodeSupplier() == $productCode){
$error = $pr->canBeTransferredStatus($transfer);
$found = true;
if($error == "ok")
$product = $pr;
break;
}
}
}
if($found){
if($error == "ok"){
$json = '{
"id":"'.$product->getId().'",
"model":"'.$product->getModel()->getName().'",
"producer":"'.$product->getModel()->getProducer()->getName().'",
"condition":"'.$product->displayCondition('string-short').'",
"codeProducer":"'.$product->getCodeProducer().'",
"codeSupplier":"'.$product->getCodeSupplier().'"
}';
return new Response(json_encode(array("code" => 200, "success" => true, "found" => $found, "error" => $error, 'product' => $json)));
}
}
else{
if($productCode != null){
switch($codeType){
case 'producer': $product = $em->getRepository("App\Entity\Slave\Product")->findOneBy(['codeProducer' => $productCode]); break;
case 'supplier': $product = $em->getRepository("App\Entity\Slave\Product")->findOneBy(['codeSupplier' => $productCode]); break;
default: break;
}
}
if($product != null)
$error = 'Il prodotto non è in questo magazzino! Si trova nel "'.$product->getActualWarehouse()->getNickname().'"';
}
return new Response(json_encode(array("code" => 200, "success" => true, "found" => $found, "error" => $error, 'product' => null)));
}
/**
* @Route("/{warehouseId}/scheda/trasferimento/invia-preselezionati", name="user_warehouse_transfer_send_preselected")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferSendPreselected($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$product = $em->getRepository('App\Entity\Slave\Product')->findOneById($request->request->get('productId'));
$json = '{
"id":"'.$product->getId().'",
"model":'.json_encode($product->getModel()->getName()).',
"producer":'.json_encode($product->getModel()->getProducer()->getName()).',
"condition":"'.$product->displayCondition('string-short').'",
"codeProducer":"'.$product->getCodeProducer().'",
"codeSupplier":"'.$product->getCodeSupplier().'"
}';
return new Response(json_encode(array("code" => 200, "success" => true, 'product' => $json)));
}
/**
* @Route("/{warehouseId}/scheda/trasferimento/invia-sposta-prodotto", name="user_warehouse_transfer_send_move_product")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferSendMoveProduct($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$product = $em->getRepository('App\Entity\Slave\Product')->findOneById($request->request->get('productId'));
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
ProductService::createProductTransferLog($em, $product, null, $this->getUser(), $warehouse, new \Datetime(), 'manual');
$product->setActualWarehouse($warehouse);
$product->setDateLastTransfer(new \Datetime);
$em->flush();
return new Response(json_encode(array("code" => 200, "success" => true)));
}
/**
* @Route("/{warehouseId}/scheda/trasferimento/invia-elimina-prodotto-trasferimento", name="user_warehouse_transfer_send_delete_product")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferSendDeleteProduct($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$transferInternalDdtActive = $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt'))->getValue();
$jtppt = $em->getRepository('App\Entity\Slave\JoinTableProductProductTransfer')->findOneById($request->request->get('jtpptId'));
$transferId = $jtppt->getTransfer()->getId();
$product = $jtppt->getProduct();
$status = ProductService::getStatusByCondition($em, $product->getCondition());
ProductService::createProductLog($em, $product, $this->getUser(), 'status', $status->getValue(), null, $product->getStatus()->getId());
$product->setStatus($status);
$em->remove($jtppt);
$em->flush();
// RESETTO LO FASE TRANSFER A CREA DDT --- SE PRESENTE
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
if($transferInternalDdtActive || $transfer->getType() == 'destination'){
$transfer->setPhase('inserted_editable');
$transfer->setPhaseDdt('create');
}
else{
if(sizeof($transfer->getProducts()) > 0){
$transfer->setPhase('waiting_receiver');
}
else
$transfer->setPhase('inserted');
}
$em->flush();
return new Response(json_encode(array("code" => 200, "success" => true)));
}
/**
* @Route("/{warehouseId}/scheda/trasferimento/invia-a-destinazione", name="user_warehouse_transfer_send_destination")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferSendDestination($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
$transfer->setPhase('to_download');
$transfer->setDatetimeSend(new \Datetime());
$em->flush();
$this->addFlash('notice_success', 'Trasferimento inviato correttamente!');
return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId, 'transferId' => $transfer->getId()));
}
/**
* @Route("/{warehouseId}/scheda/trasferimento/{transferId}/torna-a-modifica-dati", name="user_warehouse_transfer_back_edit_data")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferBackEditData($warehouseId, $transferId, Request $request, FileSystem $fs)
{
$em = $this->mr->getManager('slave');
$emMaster = $this->mr->getManager('master');
$session = $request->getSession();
$company = $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
$uploadDir = $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
$oldDDt = $transfer->getDDtPath();
$transfer->setPhase('inserted_editable');
$transfer->setPhaseDdt('create');
$transfer->setDdtPath(null);
MediaService::removeDocument($fs, $oldDDt, $uploadDir);
$em->flush();
$this->addFlash('notice_success', 'Trasferimento riportato alla fase precedente!');
return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId, 'transferId' => $transfer->getId()));
}
//
//
// RICHIESTE TECNICI
/**
* @Route("/{warehouseId}/scheda/tecnico-richiedi-scorte/nuova", name="user_warehouse_product_request_new")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseProductRequestNew($warehouseId, Request $request, ValidatorInterface $validator, FormFactoryInterface $formFactory)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$warehouse = $em->getRepository('App\Entity\Slave\Warehouse')->findOneById($warehouseId);
$technician = $this->getUser();
$headquarterWarehouses = $em->getRepository('App\Entity\Slave\Warehouse')->findBy(array('headquarter' => true));
$productRequest = new ProductRequest();
$form = $formFactory->createNamed("form_product_request", ProductRequestType::class, $productRequest);
$form->handleRequest($request);
if($form->isSubmitted()){
$valid = true;
if($valid) $valid = ValidationService::validateNotBlank($validator, $form->get('warehouseHeadquarter'));
if($valid) $valid = ValidationService::validateNotBlank($validator, $form->get('supplier'));
if($valid) $valid = ValidationService::validateNotBlank($validator, $form->get('model'));
if($valid) $valid = ValidationService::validateNotBlank($validator, $form->get('qty'));
if($valid && $form->isValid()){
$model = $em->getRepository('App\Entity\Slave\ProductModel')->findOneById($form->get('model')->getData());
$supplier = $em->getRepository('App\Entity\Slave\Supplier')->findOneById($form->get('supplier')->getData());
$qty = $form->get('qty')->getData();
$json = '{
"categoryId":"'.$model->getSubcategory()->getCategory()->getId().'",
"categoryName":"'.$model->getSubcategory()->getCategory()->getName().'",
"subcategoryId":"'.$model->getSubcategory()->getId().'",
"subcategoryName":"'.$model->getSubcategory()->getName().'",
"producerId":"'.$model->getProducer()->getId().'",
"producerName":"'.$model->getProducer()->getName().'",
"supplierName":"'.$supplier->getName().'",
"modelId":"'.$model->getId().'",
"modelName":"'.$model->getName().'",
"qty":"'.$qty.'"
}';
$productRequest->setTechnician($technician);
$productRequest->setWarehouse($warehouse);
$productRequest->setPhase('inserted');
$productRequest->setDatetime(new \Datetime());
$productRequest->setDetails($json);
$em->persist($productRequest);
$em->flush();
if($request->request->get('action') == 'add'){
$this->addFlash('notice_success', 'Richiesta aggiunta!');
return $this->redirectToRoute('user_warehouse_product_request_new', array('warehouseId' => $warehouse->getId()));
}
else{
$this->addFlash('notice_success', 'Richiesta inoltrata al magazzino centrale!');
return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouse->getId()));
}
}
}
return $this->render('role/user/warehouse/product_request.html.twig', array(
'warehouse' => $warehouse,
'headquarterWarehouses' => $headquarterWarehouses,
"form" => $form->createView()
));
}
/**
* @Route("/{warehouseId}/scheda/richiesta-tecnico/elimina", name="user_warehouse_product_request_delete")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseProductRequestDelete($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$productRequest = $em->getRepository('App\Entity\Slave\ProductRequest')->findOneById($request->request->get('productRequestId'));
$em->remove($productRequest);
$em->flush();
$this->addFlash('notice_success', 'Richiesta eliminata!');
return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouseId));
}
/**
* @Route("/{warehouseId}/scheda/richiesta-tecnico/prendi-in-carico", name="user_warehouse_product_request_take_charge")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseProductRequestTakeCharge($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$productRequest = $em->getRepository('App\Entity\Slave\ProductRequest')->findOneById($request->request->get('productRequestId'));
$productRequest->setPhase('take_charge');
$em->flush();
$this->addFlash('notice_success', 'Richiesta presa in carico!');
return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouseId));
}
/**
* @Route("/{warehouseId}/scheda/richiesta-tecnico/dichiara-gestita", name="user_warehouse_product_request_managed")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseProductRequestManaged($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$productRequest = $em->getRepository('App\Entity\Slave\ProductRequest')->findOneById($request->request->get('productRequestId'));
$productRequest->setPhase('completed');
$em->flush();
$this->addFlash('notice_success', 'Richiesta gestita!');
return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouseId));
}
//
// ESPORTAZIONI
/**
* @Route("/{warehouseId}/scorte/esporta-csv", name="user_warehouse_stocks_export_csv")
* @Security("is_granted('view', 'warehouse') || is_granted('warehouse_view', warehouseId)")
*/
public function userWarehouseStocksExportCsv($warehouseId, Request $request)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
$products = $em->getRepository('App\Entity\Slave\Product')->findByWarehouseOrdered($warehouse->getId());
$response = new StreamedResponse();
$response->setCallback(function() use($products) {
$handle = fopen('php://output', 'w+');
fputcsv($handle, array('Stato','Modello','Matricola produttore','Matricola fornitore','Condizione', 'Fornitori'), ";", '"', "\\");
foreach($products as $p){
$status = null;
$model = null;
$codeProducer = '';
$codeSupplier = '';
$condition = null;
$suppliers = '';
if($p->getStatus() != null) $status = $p->getStatus()->getValue();
if($p->getModel() != null) $model = $p->getModel()->getName().' - '.$p->getModel()->getSubcategory()->getName().' - '.$p->getModel()->getSubcategory()->getCategory()->getName();
if($p->getCodeProducer() != null) $codeProducer = $p->getCodeProducer();
if($p->getCodeSupplier() != null) $codeSupplier = $p->getCodeSupplier();
if($p->getCondition() != null) $condition = $p->getCondition()->getValue();
if(sizeof($p->getSuppliers()) > 0){
$suppliers = "";
$first = true;
foreach($p->getSuppliers() as $s){
if($first) $first = false; else $suppliers.= ', ';
$suppliers.= $s->getName();
}
}
fputcsv($handle, array($status, $model, $codeProducer, $codeSupplier, $condition, $suppliers), ";", '"', "\\");
}
fclose($handle);
});
$response->setStatusCode(200);
$dispositionHeader = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'Magazzino '.$warehouse->getNickname().' - Scorte.csv');
$response->headers->set('Content-Type', 'text/csv; charset=ISO-8859-15');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
/**
* @Route("/{warehouseId}/scorte/esporta-csv-filtrate/{status}", name="user_warehouse_stocks_export_csv_filtered")
* @Security("is_granted('view', 'warehouse') || is_granted('warehouse_view', warehouseId)")
*/
public function userWarehouseStocksExportCsvFiltered($warehouseId, $status, Request $request)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
$filters = $session->get('user_warehouse_sheet_filters');
$products = $em->getRepository('App\Entity\Slave\Product')->findByWarehouseFiltered(false, $warehouse->getId(), $status, $filters, 1);
$response = new StreamedResponse();
$response->setCallback(function() use($products) {
$handle = fopen('php://output', 'w+');
fputcsv($handle, array('Stato','Modello','Matricola produttore','Matricola fornitore','Condizione', 'Fornitori'), ";", '"', "\\");
foreach($products as $p){
$status = null;
$model = null;
$codeProducer = '';
$codeSupplier = '';
$condition = null;
$suppliers = '';
if($p->getStatus() != null) $status = $p->getStatus()->getValue();
if($p->getModel() != null) $model = $p->getModel()->getName().' - '.$p->getModel()->getSubcategory()->getName().' - '.$p->getModel()->getSubcategory()->getCategory()->getName();
if($p->getCodeProducer() != null) $codeProducer = $p->getCodeProducer();
if($p->getCodeSupplier() != null) $codeSupplier = $p->getCodeSupplier();
if($p->getCondition() != null) $condition = $p->getCondition()->getValue();
if(sizeof($p->getSuppliers()) > 0){
$suppliers = "";
$first = true;
foreach($p->getSuppliers() as $s){
if($first) $first = false; else $suppliers.= ', ';
$suppliers.= $s->getName();
}
}
fputcsv($handle, array($status, $model, $codeProducer, $codeSupplier, $condition, $suppliers), ";", '"', "\\");
}
fclose($handle);
});
$response->setStatusCode(200);
$dispositionHeader = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'Magazzino '.$warehouse->getNickname().' - Scorte filtrate.csv');
$response->headers->set('Content-Type', 'text/csv; charset=ISO-8859-15');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
/**
* @Route("/{warehouseId}/scorte/esporta-csv-per-invio/{status}", name="user_warehouse_stocks_export_csv_for_send")
* @Security("is_granted('view', 'warehouse') || is_granted('warehouse_view', warehouseId)")
*/
public function userWarehouseStocksExportCsvForSend($warehouseId, $status, Request $request)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
$filters = $session->get('user_warehouse_sheet_filters');
$products = $em->getRepository('App\Entity\Slave\Product')->findByWarehouseFiltered(false, $warehouse->getId(), $status, $filters, 1);
$response = new StreamedResponse();
$response->setCallback(function() use($products) {
$handle = fopen('php://output', 'w+');
fputcsv($handle, array('Matricola produttore','Matricola fornitore'), ";", '"', "\\");
foreach($products as $p){
$codeProducer = '';
$codeSupplier = '';
if($p->getCodeProducer() != null) $codeProducer = $p->getCodeProducer();
if($p->getCodeSupplier() != null) $codeSupplier = $p->getCodeSupplier();
fputcsv($handle, array($codeProducer, $codeSupplier), ";", '"', "\\");
}
fclose($handle);
});
$response->setStatusCode(200);
$dispositionHeader = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'Magazzino '.$warehouse->getNickname().' - Scorte per invio.csv');
$response->headers->set('Content-Type', 'text/csv; charset=ISO-8859-15');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
/**
* @Route("/{warehouseId}/scheda/trasferimento/{transferId}/scheda/esporta-csv", name="user_warehouse_transfer_sheet_export")
* @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
*/
public function userWarehouseTransferSheetExport($warehouseId, $transferId, Request $request)
{
$em = $this->mr->getManager('slave');
$emMaster = $this->mr->getManager('master');
$session = $request->getSession();
$warehouse = $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
$transfer = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
$jtppts = $transfer->getProducts();
$response = new StreamedResponse();
$response->setCallback(function() use($jtppts) {
$handle = fopen('php://output', 'w+');
fputcsv($handle, array("Modello", "Matricola produttore",'Matricola fornitore'), ";", '"', "\\");
foreach($jtppts as $jtppt){
$productModel = $jtppt->getProduct()->getModel()->getName();
$codeProducer = '';
$codeSupplier = '';
if($jtppt->getProduct()->getCodeProducer() != null) $codeProducer = $jtppt->getProduct()->getCodeProducer();
if($jtppt->getProduct()->getCodeSupplier() != null) $codeSupplier = $jtppt->getProduct()->getCodeSupplier();
fputcsv($handle, array($productModel, $codeProducer, $codeSupplier), ";", '"', "\\");
}
fclose($handle);
});
$response->setStatusCode(200);
$dispositionHeader = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'Matricole trasferimento.csv');
$response->headers->set('Content-Type', 'text/csv; charset=ISO-8859-15');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
//
}