<?php
namespace App\Controller\User;
use App\Form\Model\Settings;
use App\Form\Model\SearchIndex;
use App\Form\Slave\SettingsType;
use App\Form\Slave\SearchIndexType;
use App\Service\FilterService;
use App\Service\SessionService;
use App\Service\TicketService;
use App\Service\UtilitiesService;
use App\Service\ValidationService;
use Doctrine\Persistence\ManagerRegistry;
use Knp\Component\Pager\PaginatorInterface;
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\Routing\Annotation\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @Route("/scrivania")
* @Security("is_granted('ROLE_USER') and is_granted('active', user)")
*/
class UserController extends AbstractController
{
private $mr;
private $params;
public function __construct(ManagerRegistry $mr, ParameterBagInterface $params)
{
$this->mr = $mr;
$this->params = $params;
}
public function calculateTicketAlarms($em, $type, $operationGroups, $ticketStatuses, $technicians)
{
$matrixTickets = array();
$matrixTechsTickets = array();
$ticketWithErrors = null;
$ticketSuspensionRequest = null;
$ticketAssigned = null;
$ticketClosedPortal = null;
switch($type){
case 'administration':
case 'agency':
case 'commercial':
case 'warehouse':
foreach($operationGroups as $og){
$arrayTmp1 = array();
$arrayTmp2 = array();
foreach($ticketStatuses as $ts){
$arrayTmp3 = array();
$ticketsCount = sizeof($em->getRepository('App\Entity\Slave\Ticket')->findByStatusAndOperationGroup($ts->getId(), $og->getId()));
array_push($arrayTmp3, $ts->getId(), $ticketsCount);
array_push($arrayTmp2, $arrayTmp3);
}
array_push($arrayTmp1, $og->getId(), $arrayTmp2);
array_push($matrixTickets, $arrayTmp1);
}
foreach($technicians as $t){
$arrayTmp1 = array();
$arrayTmp2 = array();
foreach($operationGroups as $og){
$arrayTmp3 = array();
$ticketsCountAssigned = sizeof($em->getRepository('App\Entity\Slave\Ticket')->findByTechnicianOperationGroupAndStatus($t->getId(), $og->getId(), 'assigned'));
$ticketsCountTakenCharge = sizeof($em->getRepository('App\Entity\Slave\Ticket')->findByTechnicianOperationGroupAndStatus($t->getId(), $og->getId(), 'taken_charge'));
array_push($arrayTmp3, $og->getId(), $ticketsCountAssigned, $ticketsCountTakenCharge);
array_push($arrayTmp2, $arrayTmp3);
}
array_push($arrayTmp1, $t->getId(), $arrayTmp2);
array_push($matrixTechsTickets, $arrayTmp1);
}
$ticketWithErrors = $em->getRepository('App\Entity\Slave\Ticket')->findWithErrors();
$ticketSuspensionRequest = $em->getRepository('App\Entity\Slave\Ticket')->findBySuspensionRequestAndNotManaged();
$ticketClosedPortal = $em->getRepository('App\Entity\Slave\Ticket')->findClosedPortalAndNotPlatform();
$ticketWaitingForMaterial = $em->getRepository('App\Entity\Slave\Ticket')->findWaitingForMaterial();
$interventionsOutcomeTypeCompleted = $em->getRepository('App\Entity\Slave\Intervention')->findOutcomeTypeCompleted();
$interventionWithoutActivities = array();
foreach($interventionsOutcomeTypeCompleted as $int){
if(sizeof($int->getActivities()) == 0)
array_push($interventionWithoutActivities, $int);
}
$interventionsZero = $em->getRepository('App\Entity\Slave\Intervention')->findCompletedOrUavWithoutAmountTechnician();
$interventionTariffOut = array();
foreach($interventionsZero as $int){
$hasTarOut = false;
foreach($int->getExtras() as $ext){
if($ext->isTariffOut())
$hasTarOut = true;
}
if(!$hasTarOut)
array_push($interventionTariffOut, $int);
}
return [$matrixTickets, $matrixTechsTickets, $ticketWithErrors, $ticketSuspensionRequest, $ticketClosedPortal, $ticketWaitingForMaterial, $interventionTariffOut, $interventionWithoutActivities];
break;
case 'technician':
foreach($operationGroups as $og){
$arrayTmp1 = array();
$arrayTmp2 = array();
foreach($ticketStatuses as $ts){
$arrayTmp3 = array();
$ticketsCount = sizeof($em->getRepository('App\Entity\Slave\Ticket')->findByUserStatusAndOperationGroup($this->getUser()->getId(), $ts->getId(), $og->getId()));
array_push($arrayTmp3, $ts->getId(), $ticketsCount);
array_push($arrayTmp2, $arrayTmp3);
}
array_push($arrayTmp1, $og->getId(), $arrayTmp2);
array_push($matrixTickets, $arrayTmp1);
}
$ticketAssigned = $em->getRepository('App\Entity\Slave\Ticket')->findByUserAndStatus($this->getUser()->getId(), 'assigned');
return [$matrixTickets, $ticketAssigned];
break;
default: break;
}
}
public function calculateWarehouseAlarms($em, $type)
{
switch($type){
case 'administration':
case 'agency':
case 'commercial':
case 'warehouse':
$productModels = $em->getRepository('App\Entity\Slave\ProductModel')->findAll();
$headquarterWarehouses = $em->getRepository('App\Entity\Slave\Warehouse')->findBy(array('headquarter' => true));
$warehouseAlarms = array();
foreach($headquarterWarehouses as $w){
$tmp = array();
$warehouseProductsToManage = sizeof($em->getRepository('App\Entity\Slave\Product')->findByWarehouseToManage($w->getId()));
$warehouseTransferIncoming = $em->getRepository('App\Entity\Slave\ProductTransfer')->findIncomingByWarehouseAndNotCompleted($w->getId());
$warehouseTransferOutput = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOutputByWarehouseAndNotCompleted($w->getId());
$warehouseTransferWithoutDdtSigned = $em->getRepository('App\Entity\Slave\ProductTransfer')->findWithoutDdtSignedByWarehouse($w->getId());
$warehouseRequestTechnicians = $em->getRepository('App\Entity\Slave\ProductRequest')->findByWarehouseAndNotCompleted($w->getId());
$warehouseProductStocksRed = array();
$warehouseProductStocksYellow = array();
foreach($productModels as $pm){
if(sizeof($pm->getSuppliers()) > 0){
foreach($pm->getSuppliers() as $jtpms){
$tmpRed = array();
$tmpYellow = array();
$qty = sizeof($em->getRepository('App\Entity\Slave\Product')->countByWarehouseAndModelAndSupplierAndStatus($w->getId(), $pm->getId(), $jtpms->getSupplier()->getId(), 'available'));
if($jtpms->isAlarmStockActive()){
if($qty <= $jtpms->getAlarmStockRed()){
array_push($tmpRed, $qty, $jtpms->getAlarmStockRed(), $pm->getName(), $jtpms->getSupplier()->getName());
array_push($warehouseProductStocksRed, $tmpRed);
}
elseif($qty <= $jtpms->getAlarmStockYellow()){
array_push($tmpYellow, $qty, $jtpms->getAlarmStockYellow(), $jtpms->getAlarmStockRed(), $pm->getName(), $jtpms->getSupplier()->getName());
array_push($warehouseProductStocksYellow, $tmpYellow);
}
}
}
}
}
array_push($tmp, $w->getId(), $w->getNickname(), $warehouseProductsToManage, $warehouseTransferIncoming, $warehouseTransferOutput, $warehouseTransferWithoutDdtSigned, $warehouseRequestTechnicians, $warehouseProductStocksRed, $warehouseProductStocksYellow);
array_push($warehouseAlarms, $tmp);
}
return $warehouseAlarms;
break;
case 'technician':
$warehousesTransfers = array();
foreach($this->getUser()->getWarehouses() as $jtuw){
$transfersIncoming = $em->getRepository('App\Entity\Slave\ProductTransfer')->findIncomingByWarehouseAndNotCompleted($jtuw->getWarehouse()->getId());
$transfersOutput = $em->getRepository('App\Entity\Slave\ProductTransfer')->findOutputByWarehouseAndNotCompleted($jtuw->getWarehouse()->getId());
$transfersWithoutDdtSigned = $em->getRepository('App\Entity\Slave\ProductTransfer')->findWithoutDdtSignedByWarehouse($jtuw->getWarehouse()->getId());
$tmp = array();
array_push($tmp, $jtuw->getWarehouse()->getId(), $jtuw->getWarehouse()->getNickname(), $transfersIncoming, $transfersOutput, $transfersWithoutDdtSigned);
array_push($warehousesTransfers, $tmp);
}
return $warehousesTransfers;
break;
default: break;
}
}
public function calculateProductsAlarms($em)
{
$productModels = $em->getRepository('App\Entity\Slave\ProductModel')->findAll();
$productModelsSuppliers = array();
foreach($productModels as $pm){
if(sizeof($pm->getSuppliers()) == 0)
array_push($productModelsSuppliers, $pm);
}
$doubleProducts = array();
$codesProducerDouble = $em->getRepository('App\Entity\Slave\Product')->findWithSameCodeByType('codeProducer');
$codesSupplierDouble = $em->getRepository('App\Entity\Slave\Product')->findWithSameCodeByType('codeSupplier');
foreach($codesProducerDouble as $cpd){
$tmp = array();
$prs = $em->getRepository('App\Entity\Slave\Product')->findBy(array('codeProducer' => $cpd->getCodeProducer()));
switch(sizeof($prs)){
case 2: $tmp = array($prs[0]->getId(), $prs[0]->getCodeProducer(), $prs[0]->getCodeSupplier(), $prs[1]->getId(), $prs[1]->getCodeProducer(), $prs[1]->getCodeSupplier()); break;
case 3: $tmp = array($prs[0]->getId(), $prs[0]->getCodeProducer(), $prs[0]->getCodeSupplier(), $prs[1]->getId(), $prs[1]->getCodeProducer(), $prs[1]->getCodeSupplier(), $prs[2]->getId(), $prs[2]->getCodeProducer(), $prs[2]->getCodeSupplier()); break;
default: break;
}
if(sizeof($tmp) > 0)
array_push($doubleProducts, $tmp);
}
foreach($codesSupplierDouble as $csd){
$tmp = array();
$prs = $em->getRepository('App\Entity\Slave\Product')->findBy(array('codeSupplier' => $csd->getCodeSupplier()));
switch(sizeof($prs)){
case 2: $tmp = array($prs[0]->getId(), $prs[0]->getCodeProducer(), $prs[0]->getCodeSupplier(), $prs[1]->getId(), $prs[1]->getCodeProducer(), $prs[1]->getCodeSupplier()); break;
case 3: $tmp = array($prs[0]->getId(), $prs[0]->getCodeProducer(), $prs[0]->getCodeSupplier(), $prs[1]->getId(), $prs[1]->getCodeProducer(), $prs[1]->getCodeSupplier(), $prs[2]->getId(), $prs[2]->getCodeProducer(), $prs[2]->getCodeSupplier()); break;
default: break;
}
if(sizeof($tmp) > 0)
array_push($doubleProducts, $tmp);
}
return [$productModelsSuppliers, $doubleProducts];
}
public function searchValues($request, $formFactory, $validator, $em, $session)
{
$results = array();
$type = '';
$like = '';
$value = '';
$subjects = array();
$subjectTicket = array('TermID' => 'termid', 'N° Ticket' => 'n_ticket');
$subjectProduct = array('Matricola produttore' => 'code_producer', 'Matricola fornitore' => 'code_supplier');
$subjectTransfer = array('N° DDT' => 'ddt');
$subjectClient = array('Cliente insegna' => 'client_nickname', 'Cliente telefono' => 'client_phone');
if($this->getUser()->canRead('ticket')) array_push($subjects, $subjectTicket);
if($this->getUser()->canRead('product')) array_push($subjects, $subjectProduct);
if($this->getUser()->canRead('transfer')) array_push($subjects, $subjectTransfer);
if($this->getUser()->canRead('anagraphic_client')) array_push($subjects, $subjectClient);
$searchIndex = new SearchIndex();
$formSearch = $formFactory->createNamed("form_settings", SearchIndexType::class, $searchIndex, array('types' => $subjects));
$formSearch->handleRequest($request);
if($formSearch->isSubmitted()){
$valid = true;
if($valid) $valid = ValidationService::ValidateNotBlank($validator, $formSearch->get('type'));
if($valid) $valid = ValidationService::ValidateNotBlank($validator, $formSearch->get('like'));
if($valid) $valid = ValidationService::ValidateNotBlank($validator, $formSearch->get('value'));
if($valid && $formSearch->isValid()){
$type = $formSearch->get('type')->getData();
$like = $formSearch->get('like')->getData();
$value = $formSearch->get('value')->getData();
switch($like){
case 'like': $value = '%'.$value.'%'; break;
case 'from_left': $value = $value.'%'; break;
case 'from_right': $value = '%'.$value; break;
default: break;
}
switch($type){
case 'termid':
case 'n_ticket':
$results = $em->getRepository('App\Entity\Slave\Ticket')->searchByValue($type, $value);
break;
case 'code_supplier':
case 'code_producer':
$results = $em->getRepository('App\Entity\Slave\Product')->searchByValue($type, $value);
break;
case 'ddt':
$results = $em->getRepository('App\Entity\Slave\ProductTransfer')->searchByValue($type, $value);
break;
case 'client_nickname':
$results = $em->getRepository('App\Entity\Slave\Client')->searchByValue($type, $value);
break;
case 'client_phone':
$results = $em->getRepository('App\Entity\Slave\ClientPhone')->searchByValue($type, $value);
break;
default: break;
}
}
}
return [$formSearch, $results, $type, $like, $value];
}
/**
* @Route("/", name="user_index")
*/
public function userIndex(Request $request, PaginatorInterface $paginator, FormFactoryInterface $formFactory, ValidatorInterface $validator)
{
$em = $this->mr->getManager('slave');
$emMaster = $this->mr->getManager('master');
$session = $request->getSession();
$session->remove('ticketId');
// In base al tipo di account mostro nella home differenti schermate
switch($this->getUser()->getAccountTypology()){
case 'administration': // Amministrazione
case 'agency': // Agenzia
case 'commercial': // Commerciale
case 'warehouse': // Magazzino
$operationGroups = $em->getRepository('App\Entity\Slave\OperationGroup')->findAll();
$ticketStatuses = $em->getRepository('App\Entity\Slave\TicketStatus')->findAll();
$technicians = $em->getRepository('App\Entity\Slave\User')->findTechniciansActive();
[$matrixTickets, $matrixTechsTickets, $ticketWithErrors, $ticketSuspensionRequest, $ticketClosedPortal, $ticketWaitingForMaterial, $interventionTariffOut, $interventionWithoutActivities] = $this->calculateTicketAlarms($em, 'agency', $operationGroups, $ticketStatuses, $technicians);
$interventionExtras = $em->getRepository('App\Entity\Slave\InterventionExtra')->findBy(array('managed' => false));
$ticketReminders = $em->getRepository('App\Entity\Slave\TicketReminder')->findDashboardReminders();
$operationsWithoutTariffs = $em->getRepository('App\Entity\Slave\Operation')->findWithoutTariffs();
$operationsWithoutKeyMappings = $em->getRepository('App\Entity\Slave\Operation')->findWithoutKeyMappings();
$warehouseAlarms = $this->calculateWarehouseAlarms($em, 'agency');
[$productModelsSuppliers, $doubleProducts] = $this->calculateProductsAlarms($em);
[$formSearch, $results, $type, $like, $value] = $this->searchValues($request, $formFactory, $validator, $em, $session);
return $this->render('role/user/index.html.twig', array(
'operationGroups' => $operationGroups,
'technicians' => $technicians,
'ticketStatuses' => $ticketStatuses,
'matrixTickets' => $matrixTickets,
'matrixTechsTickets' => $matrixTechsTickets,
'ticketWithErrors' => $ticketWithErrors,
'ticketSuspensionRequest' => $ticketSuspensionRequest,
'ticketClosedPortal' => $ticketClosedPortal,
'ticketWaitingForMaterial' => $ticketWaitingForMaterial,
'interventionWithoutActivities' => $interventionWithoutActivities,
'interventionTariffOut' => $interventionTariffOut,
'interventionExtras' => $interventionExtras,
'operationsWithoutTariffs' => $operationsWithoutTariffs,
'operationsWithoutKeyMappings' => $operationsWithoutKeyMappings,
'warehouseAlarms' => $warehouseAlarms,
'productModelsSuppliers' => $productModelsSuppliers,
'doubleProducts' => $doubleProducts,
'ticketReminders' => $ticketReminders,
'formSearch' => $formSearch->createView(),
'searchResults' => $results,
'searchType' => $type,
'searchLike' => $like,
'searchValue' => $value
));
break;
case 'technician': // Tecnici
$operationGroups = $em->getRepository('App\Entity\Slave\OperationGroup')->findAll();
$ticketStatuses = $em->getRepository('App\Entity\Slave\TicketStatus')->findWithoutToAssignAndWrong();
[$matrixTickets, $ticketAssigned] = $this->calculateTicketAlarms($em, 'technician', $operationGroups, $ticketStatuses, null);
$ticketReminders = $em->getRepository('App\Entity\Slave\TicketReminder')->findDashboardRemindersByTechnician($this->getUser()->getId());
$warehousesTransfers = $this->calculateWarehouseAlarms($em, 'technician');
return $this->render('role/user/index.html.twig', array(
'operationGroups' => $operationGroups,
'ticketStatuses' => $ticketStatuses,
'matrixTickets' => $matrixTickets,
'ticketAssigned' => $ticketAssigned,
'warehousesTransfers' => $warehousesTransfers,
'ticketReminders' => $ticketReminders
));
break;
case 'administration': // Amministrazione
return $this->render('role/user/index.html.twig');
break;
case 'commercial': // Commerciale
return $this->render('role/user/index.html.twig');
break;
default: break;
}
}
/**
* @Route("/ticket-tab-ricarica/{tab}", name="user_index_ticket_tab_refresh")
*/
public function userIndexTicketTabRefresh(Request $request, $tab)
{
$em = $this->mr->getManager('slave');
switch($tab){
case 'waiting_for_material':
$icon = 'icon-truck-loading';
$text = 'In attesa di materiale ('.sizeof($em->getRepository('App\Entity\Slave\Ticket')->findWaitingForMaterial()).')';
break;
default: break;
}
return $this->render('components/twig/index/tab_label.html.twig', ['icon' => $icon, 'text' => $text]);
}
/**
* @Route("/materiale-mancante-ricarica", name="user_index_ticket_unlock_refresh")
*/
public function userIndexTicketUnlockRefresh(Request $request)
{
$em = $this->mr->getManager('slave');
$ticketWaitingForMaterial = $em->getRepository('App\Entity\Slave\Ticket')->findWaitingForMaterial();
return $this->render('components/twig/index/ticket_waiting.html.twig', ['ticketWaitingForMaterial' => $ticketWaitingForMaterial]);
}
/**
* @Route("/tecnico-ricerca-reindirizza", name="user_search_redirect")
*/
public function userSearchRedirect(Request $request)
{
$em = $this->mr->getManager('slave');
$session = $request->getSession();
$type = $request->request->get('type');
switch($type){
case 'ticket':
$session->set('numberOrTermid', $request->request->get('number'));
return $this->redirectToRoute('user_ticket_list');
break;
case 'product':
$session->set('codeProducer', $request->request->get('codeProducer'));
$session->set('codeSupplier', $request->request->get('codeSupplier'));
return $this->redirectToRoute('user_product_search');
break;
case 'client':
$session->set('clientNickname', $request->request->get('clientNickname'));
$session->set('clientPhone', $request->request->get('clientPhone'));
return $this->redirectToRoute('user_anagraphic_clients');
break;
default: break;
}
}
/**
* @Route("/impostazioni", name="user_settings")
*/
public function userSettings(Request $request, FormFactoryInterface $formFactory, ValidatorInterface $validator)
{
$em = $this->mr->getManager('slave');
$settings = $em->getRepository('App\Entity\Slave\Setting')->findAll();
$settingsModel = new Settings();
$formSettings = $formFactory->createNamed("form_settings", SettingsType::class, $settingsModel);
$formSettings->handleRequest($request);
if($formSettings->isSubmitted()){
$valid = ValidationService::ValidateNotBlank($validator, $formSettings->get('daysStationary'));
if($valid) $valid = ValidationService::ValidateNotBlank($validator, $formSettings->get('ticketTechnicianMinutesTakeCharge'));
if($valid) $valid = ValidationService::ValidateNotBlank($validator, $formSettings->get('ticketSuspensionAgencyEmail'));
if($valid) $valid = ValidationService::ValidateNotBlank($validator, $formSettings->get('ticketUAVAgencyEmail'));
if($valid) $valid = ValidationService::validateMultipleEmailString($validator, $formSettings->get('ticketSuspensionAgencyEmail'), '/\,/');
if($valid) $valid = ValidationService::validateMultipleEmailString($validator, $formSettings->get('ticketUAVAgencyEmail'), '/\,/');
if($valid && $formSettings->isValid()){
foreach($settings as $s){
switch($s->getSlug()){
case 'warehouse_register_stock': $s->setValue($formSettings->get('warehouseRegisterStock')->getData()); break;
case 'warehouse_recover_stock': $s->setValue($formSettings->get('warehouseRecoverStock')->getData()); break;
case 'warehouse_technician_product_conditions':
$first = true;
$stringConditions = '';
foreach($formSettings->get('warehouseTechnicianProductConditions')->getData() as $pc){
if($first) $first = false; else $stringConditions.= ',';
$stringConditions.= $pc->getId();
}
$s->setValue($stringConditions);
break;
case 'use_ddt': $s->setValue($formSettings->get('useDdt')->getData()); break;
case 'ddt_internal_mandatory': $s->setValue($formSettings->get('ddtInternalMandatory')->getData()); break;
case 'days_stationary': $s->setValue($formSettings->get('daysStationary')->getData()); break;
case 'ticket_suspension_agency_email': $s->setValue($formSettings->get('ticketSuspensionAgencyEmail')->getData()); break;
case 'ticket_uav_agency_email': $s->setValue($formSettings->get('ticketUAVAgencyEmail')->getData()); break;
case 'ticket_auto_assign': $s->setValue($formSettings->get('ticketAutoAssign')->getData()); break;
case 'ticket_auto_operation_tariff_amount': $s->setValue($formSettings->get('ticketAutoOperationTariffAmount')->getData()); break;
case 'ticket_backoffice_manage': $s->setValue($formSettings->get('ticketBackofficeManage')->getData()); break;
case 'ticket_technician_send_cancel_email': $s->setValue($formSettings->get('ticketTechnicianSendCancelEmail')->getData()); break;
case 'ticket_technician_minutes_take_charge': $s->setValue($formSettings->get('ticketTechnicianMinutesTakeCharge')->getData()); break;
case 'ticket_suspension_unlock_same_technician': $s->setValue($formSettings->get('ticketSuspensionUnlockSameTechnician')->getData()); break;
case 'ticket_suspension_unlock_by_technician': $s->setValue($formSettings->get('ticketSuspensionUnlockByTechnician')->getData()); break;
case 'product_model_default_stock_active': $s->setValue($formSettings->get('productModelDefaultStockActive')->getData()); break;
case 'product_model_default_stock_yellow': $s->setValue($formSettings->get('productModelDefaultStockYellow')->getData()); break;
case 'product_model_default_stock_red': $s->setValue($formSettings->get('productModelDefaultStockRed')->getData()); break;
case 'use_ddt_number_for_technicians': $s->setValue($formSettings->get('useDdtNumberForTechnicians')->getData()); break;
case 'script_sunday_active': $s->setValue($formSettings->get('scriptSundayActive')->getData()); break;
case 'outcome_completed_default': $s->setValue($formSettings->get('outcomeCompletedDefault')->getData()->getId()); break;
default: break;
}
}
$em->flush();
$this->addFlash('notice_success', "Impostazioni aggiornate");
return $this->redirectToRoute('user_settings');
}
}
return $this->render('role/user/settings.html.twig', array(
'settings' => $settings,
'formSettings' => $formSettings->createView()
));
}
/**
* @Route("/utility", name="user_utility")
*/
public function userUtility(Request $request)
{
return $this->render('role/user/utility.html.twig');
}
/**
* @Route("/utility/esegui-comando", name="user_utility_execute_command")
*/
public function userUtilityExecuteCommand(Request $request)
{
switch($request->request->get('command')){
case 'clear_session':
SessionService::resetUserSession($request->getSession());
$this->addFlash('notice_success', 'Sessione resettata correttamente!');
break;
default: break;
}
return $this->redirectToRoute('user_utility');
}
// POST DI AGGIORNAMENTO
/**
* @Route("/economico-carica-tab", name="user_economic_tab")
*/
public function userEconomicTab(Request $request)
{
$em = $this->mr->getManager('slave');
$emMaster = $this->mr->getManager('master');
$session = $request->getSession();
$company = $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
$month = $request->request->get('month');
$year = $request->request->get('year');
$operationGroupsNotUav = $em->getRepository('App\Entity\Slave\OperationGroup')->findBy(['uav' => 0]);
$operationGroupUav = $em->getRepository('App\Entity\Slave\OperationGroup')->findBy(['uav' => 1]);
// Se UserId = 0 --> Significa che è l'aziendale
if($request->request->get('userId') != 0){
$user = $em->getRepository('App\Entity\Slave\User')->findOneById($request->request->get('userId'));
$allInterventions = $em->getRepository("App\Entity\Slave\Intervention")->findByTechnicianToPayByYearAndMonth($user->getId(), $year, $month);
}
else{
$allInterventions = $em->getRepository("App\Entity\Slave\Intervention")->findToPayByYearAndMonth($year, $month);
}
// Rimuovo gli interventi che hanno una sospensione -> Gestita e non approvata / Non gestita
$interventions = array();
foreach($allInterventions as $int){
$toCalculate = true;
if($int->getSuspension() != null && ($int->getSuspension()->isManaged() == false || $int->getSuspension()->isApproved() == false))
$toCalculate = false;
if($toCalculate)
array_push($interventions, $int);
}
$arrayProvincesIds = array();
$arrayProvinces = array();
foreach($interventions as $int){
if(!in_array($int->getTicket()->getIdProvince(), $arrayProvincesIds)){
array_push($arrayProvincesIds, $int->getTicket()->getIdProvince());
array_push($arrayProvinces, $emMaster->getRepository('App\Entity\Master\Province')->findOneById($int->getTicket()->getIdProvince()));
}
}
$matrixResults = array();
foreach($arrayProvinces as $province){
$arrayRow = array();
array_push($arrayRow, $province->getSign());
$arrayCells = array();
$rowAmount = 0;
$rowCount = 0;
$cellUavAmount = 0;
$cellUavCount = 0;
foreach($operationGroupsNotUav as $og){
$arrayCell = array();
$cellAmount = 0;
$cellCount = 0;
foreach($interventions as $int){
# SE --- gruppo operazione intervento == gruppo operazione ciclo AND id provincia cliente == id provincia ciclo AND provincia ciclo comprende tutti i CAP o se CAP cliente compreso nei CAPS del tecnico
if($int->getTicket()->getOperation()->getGroup()->getId() == $og->getId() && $int->getTicket()->getIdProvince() == $province->getId()){
# SE completato -> aggiungo
if($int->getOutcomeType()->getSlug() == 'completed'){
$cellAmount += $int->calculateTotalTechnicianAmount();
$cellCount++;
}
# SE uav -> aggiungo alla colonna finale
if($int->getOutcomeType()->getSlug() == 'empty'){
$cellUavAmount += $int->calculateTotalTechnicianAmount();
$cellUavCount++;
}
}
}
$rowAmount += $cellAmount;
$rowCount += $cellCount;
array_push($arrayCell, '[<span class="count_'.$year.'_'.$month.'_'.$og->getId().'">'.$cellCount.'</span>] <span class="amount_'.$year.'_'.$month.'_'.$og->getId().'">'.number_format($cellAmount, 2, '.', '').'</span> €', $og->getId(), $og->getValue());
array_push($arrayCells, $arrayCell);
}
$test = null;
foreach($operationGroupUav as $og){
$arrayCell = array();
array_push($arrayCell, '[<span class="count_'.$year.'_'.$month.'_'.$og->getId().'">'.$cellUavCount.'</span>] <span class="amount_'.$year.'_'.$month.'_'.$og->getId().'">'.number_format($cellUavAmount, 2, '.', '').'</span> €', $og->getId(), $og->getValue());
array_push($arrayCells, $arrayCell);
}
$rowAmount += $cellUavAmount;
$rowCount += $cellUavCount;
array_push($arrayRow, $arrayCells, '['.$rowCount.'] '.number_format($rowAmount, 2, '.', '').' €');
array_push($matrixResults, $arrayRow);
}
$response = array("code" => 200, "success" => true, "matrixResults" => $matrixResults);
return new Response(json_encode($response));
}
/**
* @Route("/economico-aggiorna", name="user_economic_update")
*/
public function userEconomicUpdate(Request $request)
{
$em = $this->mr->getManager('slave');
$emMaster = $this->mr->getManager('master');
$session = $request->getSession();
$province = $emMaster->getRepository('App\Entity\Master\Province')->findOneBySign($request->request->get('taProvince'));
$year = $request->request->get('year');
$month = $request->request->get('month');
$operationGroupId = $request->request->get("operationGroupId");
$operationGroup = $em->getRepository('App\Entity\Slave\OperationGroup')->findOneById($operationGroupId);
// Se UserId = 0 --> Significa che è l'aziendale
if($request->request->get('userId') != 0){
$user = $em->getRepository('App\Entity\Slave\User')->findOneById($request->request->get('userId'));
if($operationGroup->isUav())
$allInterventions = $em->getRepository('App\Entity\Slave\Intervention')->findByTechnicianProvinceToPayByYearAndMonthUav($user->getId(), $province->getId(), $year, $month);
else
$allInterventions = $em->getRepository('App\Entity\Slave\Intervention')->findByTechnicianProvinceAndOperationGroupToPayByYearAndMonthNotUav($operationGroupId, $user->getId(), $province->getId(), $year, $month);
}
else{
if($operationGroup->isUav())
$allInterventions = $em->getRepository('App\Entity\Slave\Intervention')->findByProvinceToPayByYearAndMonthUav($province->getId(), $year, $month);
else
$allInterventions = $em->getRepository('App\Entity\Slave\Intervention')->findByProvinceAndOperationGroupToPayByYearAndMonthNotUav($operationGroupId, $province->getId(), $year, $month);
}
// Rimuovo gli interventi che hanno una sospensione -> Gestita e non approvata / Non gestita
$interventions = array();
foreach($allInterventions as $int){
$toCalculate = true;
if($int->getSuspension() != null && ($int->getSuspension()->isManaged() == false || $int->getSuspension()->isApproved() == false))
$toCalculate = false;
if($toCalculate)
array_push($interventions, $int);
}
# Creo JSON
$first = true;
$json = '[';
foreach($interventions as $int){
if($first) $first = false; else $json.= ',';
$tableActivities = '---';
if(sizeof($int->getActivities()) > 0){
$tableActivities = '<table class=\'table table_no_padding b_none m_b_none\'>';
foreach($int->getActivities() as $act){
if($act->getProductWithdraw() != null)
$tableActivities .= '<tr><th>Ritiro: '.$act->getType().'</th></tr><tr><td>'.$act->getProductWithdraw()->toStringShort().'</td></tr>';
else{
if($act->getProducerWithdraw() != null)
$tableActivities .= '<tr><th>Ritiro: </th></tr><tr><td>'.$act->getProducerWithdraw().'</td></tr>';
}
if($act->getProductActual() != null)
$tableActivities .= '<tr><th>Attuale: '.$act->getType().'</th></tr><tr><td>'.$act->getProductActual()->toStringShort().'</td></tr>';
else{
if($act->getProducerActual() != null)
$tableActivities .= '<tr><th>Attuale: </th></tr><tr><td>'.$act->getProducerActual().'</td></tr>';
}
if($act->getProductInstallation() != null)
$tableActivities .= '<tr><th>Installato: '.$act->getType().'</th></tr><tr><td>'.$act->getProductInstallation()->toStringShort().'</td></tr>';
else{
if($act->getProducerInstallation() != null)
$tableActivities .= '<tr><th>Installato: </th></tr><tr><td>'.$act->getProducerInstallation().'</td></tr>';
}
}
$tableActivities.= '</table>';
}
$tableAmounts = '<table class=\'table table_no_padding b_none m_b_none\'><tr><td class=\'td_w_30p txt_a_c\'>'.number_format($int->calculateTechnicianAmount(), 2, '.', '').'</td><td class=\'td_w_30p txt_a_c\'>'.number_format($int->calculateExtraAmount(), 2, '.', '').'</td></tr></table>';
$termid = '';
if($int->getTicket()->getTermid() != null)
$termid = $int->getTicket()->getTermid()->getCode();
$json.= '{
"id":"'.$int->getId().'",
"datetime":"'.$int->getDatetime()->format('d-m-Y H:i').'",
"client":"'.$int->getTicket()->getClient()->__toString().'",
"termid":"'.$termid.'",
"ticket":"'.$int->getTicket()->getNumber().'",
"outcome":"'.$int->getOutcome()->getValue().'",
"activities":"'.$tableActivities.'",
"amounts":"'.$tableAmounts.'"
}';
}
$json .= ']';
return new Response(json_encode(array("code" => 200, "success" => true, "interventions" => $json, "provinceId" => $province->getId())));
}
/**
* @Route("/economico-aziendale-carica-tab", name="user_company_economic_tab")
*/
public function userCompanyEconomicTab(Request $request)
{
$em = $this->mr->getManager('slave');
$emMaster = $this->mr->getManager('master');
$session = $request->getSession();
$company = $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
$month = $request->request->get('month');
$year = $request->request->get('year');
$operationGroupsNotUav = $em->getRepository('App\Entity\Slave\OperationGroup')->findBy(['uav' => 0]);
$operationGroupUav = $em->getRepository('App\Entity\Slave\OperationGroup')->findBy(['uav' => 1]);
$allInterventions = $em->getRepository("App\Entity\Slave\Intervention")->findToPayByYearAndMonth($year, $month);
// Rimuovo gli interventi che hanno una sospensione -> Gestita e non approvata / Non gestita
$interventions = array();
foreach($allInterventions as $int){
$toCalculate = true;
if($int->getSuspension() != null && ($int->getSuspension()->isManaged() == false || $int->getSuspension()->isApproved() == false))
$toCalculate = false;
if($toCalculate)
array_push($interventions, $int);
}
$arrayTechniciansIds = array();
$arrayTechnicians = array();
foreach($interventions as $int){
if(!in_array($int->getTechnician()->getId(), $arrayTechniciansIds)){
array_push($arrayTechniciansIds, $int->getTechnician()->getId());
array_push($arrayTechnicians, $em->getRepository('App\Entity\Slave\User')->findOneById($int->getTechnician()->getId()));
}
}
$matrixResults = array();
foreach($arrayTechnicians as $technician){
$arrayRow = array();
array_push($arrayRow, [$technician->getId(), $technician->getNameShort()]);
$arrayCells = array();
$rowAmount = 0;
$rowCount = 0;
$cellUavAmount = 0;
$cellUavCount = 0;
foreach($operationGroupsNotUav as $og){
$arrayCell = array();
$cellAmount = 0;
$cellCount = 0;
foreach($interventions as $int){
# SE --- gruppo operazione intervento == gruppo operazione ciclo AND id provincia cliente == id provincia ciclo AND tecnico ciclo
if($int->getTicket()->getOperation()->getGroup()->getId() == $og->getId() && $int->getTechnician()->getId() == $technician->getId()){
# SE completato -> aggiungo
if($int->getOutcomeType()->getSlug() == 'completed'){
$cellAmount += $int->calculateTotalTechnicianAmount();
$cellCount++;
}
# SE uav -> aggiungo alla colonna finale
if($int->getOutcomeType()->getSlug() == 'empty'){
$cellUavAmount += $int->calculateTotalTechnicianAmount();
$cellUavCount++;
}
}
}
$rowAmount += $cellAmount;
$rowCount += $cellCount;
array_push($arrayCell, '[<span class="count_c_'.$year.'_'.$month.'_'.$og->getId().'">'.$cellCount.'</span>] <span class="amount_c_'.$year.'_'.$month.'_'.$og->getId().'">'.number_format($cellAmount, 2, '.', '').'</span> €', $og->getId(), $og->getValue());
array_push($arrayCells, $arrayCell);
}
$test = null;
foreach($operationGroupUav as $og){
$arrayCell = array();
array_push($arrayCell, '[<span class="count_c_'.$year.'_'.$month.'_'.$og->getId().'">'.$cellUavCount.'</span>] <span class="amount_c_'.$year.'_'.$month.'_'.$og->getId().'">'.number_format($cellUavAmount, 2, '.', '').'</span> €', $og->getId(), $og->getValue());
array_push($arrayCells, $arrayCell);
}
$rowAmount += $cellUavAmount;
$rowCount += $cellUavCount;
array_push($arrayRow, $arrayCells, '['.$rowCount.'] '.number_format($rowAmount, 2, '.', '').' €');
array_push($matrixResults, $arrayRow);
}
$response = array("code" => 200, "success" => true, "matrixResults" => $matrixResults);
return new Response(json_encode($response));
}
/**
* @Route("/economico-aziendale-aggiorna", name="user_company_economic_update")
*/
public function userCompanyEconomicUpdate(Request $request)
{
$em = $this->mr->getManager('slave');
$emMaster = $this->mr->getManager('master');
$session = $request->getSession();
$user = $em->getRepository('App\Entity\Slave\User')->findOneById($request->request->get('userId'));
$year = $request->request->get('year');
$month = $request->request->get('month');
$operationGroupId = $request->request->get("operationGroupId");
$operationGroup = $em->getRepository('App\Entity\Slave\OperationGroup')->findOneById($operationGroupId);
if($operationGroup->isUav())
$allInterventions = $em->getRepository('App\Entity\Slave\Intervention')->findByTechnicianToPayByYearAndMonthUav($user->getId(), $year, $month);
else
$allInterventions = $em->getRepository('App\Entity\Slave\Intervention')->findByTechnicianAndOperationGroupToPayByYearAndMonthNotUav($operationGroupId, $user->getId(), $year, $month);
// Rimuovo gli interventi che hanno una sospensione -> Gestita e non approvata / Non gestita
$interventions = array();
foreach($allInterventions as $int){
$toCalculate = true;
if($int->getSuspension() != null && ($int->getSuspension()->isManaged() == false || $int->getSuspension()->isApproved() == false))
$toCalculate = false;
if($toCalculate)
array_push($interventions, $int);
}
# Creo JSON
$first = true;
$json = '[';
foreach($interventions as $int){
if($first) $first = false; else $json.= ',';
$tableActivities = '---';
if(sizeof($int->getActivities()) > 0){
$tableActivities = '<table class=\'table table_no_padding b_none m_b_none\'>';
foreach($int->getActivities() as $act){
if($act->getProductWithdraw() != null)
$tableActivities .= '<tr><th>Ritiro: '.$act->getType().'</th></tr><tr><td>'.$act->getProductWithdraw()->toStringShort().'</td></tr>';
else{
if($act->getProducerWithdraw() != null)
$tableActivities .= '<tr><th>Ritiro: </th></tr><tr><td>'.$act->getProducerWithdraw().'</td></tr>';
}
if($act->getProductActual() != null)
$tableActivities .= '<tr><th>Attuale: '.$act->getType().'</th></tr><tr><td>'.$act->getProductActual()->toStringShort().'</td></tr>';
else{
if($act->getProducerActual() != null)
$tableActivities .= '<tr><th>Attuale: </th></tr><tr><td>'.$act->getProducerActual().'</td></tr>';
}
if($act->getProductInstallation() != null)
$tableActivities .= '<tr><th>Installato: '.$act->getType().'</th></tr><tr><td>'.$act->getProductInstallation()->toStringShort().'</td></tr>';
else{
if($act->getProducerInstallation() != null)
$tableActivities .= '<tr><th>Installato: </th></tr><tr><td>'.$act->getProducerInstallation().'</td></tr>';
}
}
$tableActivities.= '</table>';
}
$tableAmounts = '<table class=\'table table_no_padding b_none m_b_none\'><tr><td class=\'td_w_30p txt_a_c\'>'.number_format($int->calculateTechnicianAmount(), 2, '.', '').'</td><td class=\'td_w_30p txt_a_c\'>'.number_format($int->calculateExtraAmount(), 2, '.', '').'</td></tr></table>';
$termid = '';
if($int->getTicket()->getTermid() != null)
$termid = $int->getTicket()->getTermid()->getCode();
$json.= '{
"id":"'.$int->getId().'",
"datetime":"'.$int->getDatetime()->format('d-m-Y H:i').'",
"client":"'.$int->getTicket()->getClient()->__toString().'",
"termid":"'.$termid.'",
"ticket":"'.$int->getTicket()->getNumber().'",
"outcome":"'.$int->getOutcome()->getValue().'",
"activities":"'.$tableActivities.'",
"amounts":"'.$tableAmounts.'"
}';
}
$json .= ']';
return new Response(json_encode(array("code" => 200, "success" => true, "interventions" => $json)));
}
/**
* @Route("/provincia-cap", name="user_province_zips")
*/
public function userProvinceZips(Request $request)
{
$em = $this->mr->getManager('slave');
$emMaster = $this->mr->getManager('master');
$province = $emMaster->getRepository('App\Entity\Master\Province')->findOneById($request->request->get("provinceId"));
$zips = $emMaster->getRepository('App\Entity\Master\Zip')->findAllByProvince($province->getId());
$operationTariffs = $em->getRepository('App\Entity\Slave\OperationTariff')->findByIdProvince($province->getId());
$first = true;
$json = "[";
foreach($zips as $zip){
if($first) $first = false; else $json.= ',';
$enabled = 0;
foreach($operationTariffs as $ot){
// SE TUTTI I CAP DELLA PROVINCIA --> ENABLED = 1
if($ot->isAllZip())
$enabled = 1;
else{
// SE TUTTI IL CAP E TRA QUELLI DELLA TARIFFA --> ENABLED = 1
foreach($ot->getZips() as $otZip)
if($otZip[1] == $zip->getCode())
$enabled = 1;
}
}
$json.= '{"id":'.$zip->getId().', "value":"'.$zip->displayCodeAndCities().'", "enabled":'.$enabled.'}';
}
$json.= "]";
return new Response(json_encode(array("code" => 200, "success" => true, "zips" => $json)));
}
/**
* @Route("/aggiorna-produttore-modelli", name="user_update_producer_models")
*/
public function userUpdateProducerModels(Request $request)
{
$em = $this->mr->getManager('slave');
$producer = $em->getRepository('App\Entity\Slave\Producer')->findOneById($request->request->get("producerId"));
$models = $em->getRepository('App\Entity\Slave\ProductModel')->findByProducerOrdered($producer->getId());
$first = true;
$json = "[";
foreach($models as $model){
if($first) $first = false; else $json.= ',';
$json.= '{"id":'.$model->getId().', "name":"'.$model->getName().'"}';
}
$json.= "]";
return new Response(json_encode(array("code" => 200, "success" => true, "models" => $json)));
}
/**
* @Route("/aggiorna-modello-fornitori", name="user_update_model_suppliers")
*/
public function userUpdateModelSuppliers(Request $request)
{
$em = $this->mr->getManager('slave');
$model = $em->getRepository('App\Entity\Slave\ProductModel')->findOneById($request->request->get("modelId"));
$suppliers = $em->getRepository('App\Entity\Slave\Supplier')->findByModelOrdered($model->getId());
$first = true;
$json = "[";
foreach($suppliers as $supplier){
if($first) $first = false; else $json.= ',';
$json.= '{"id":'.$supplier->getId().', "name":"'.$supplier->getName().'"}';
}
$json.= "]";
return new Response(json_encode(array("code" => 200, "success" => true, "suppliers" => $json)));
}
/**
* @Route("/aggiorna-modelli-sottocategorie", name="user_product_model_update_subcategory")
*/
public function userProductModelUpdateSubcategories(Request $request)
{
$em = $this->mr->getManager('slave');
if($request->request->get('categoryId') != null){
$category = $em->getRepository("App\Entity\Slave\ProductCategory")->findOneById($request->request->get('categoryId'));
$subcategories = $category->getSubcategories();
}
else{
$subcategories = $em->getRepository("App\Entity\Slave\ProductSubcategory")->findAll();
}
$first = true;
$json = '[';
foreach($subcategories as $s){
if($first) $first = false; else $json.= ',';
$json.= '{"id":"'.$s->getId().'", "name":'.json_encode($s->getName()).'}';
}
$json .= ']';
$response = array("code" => 200, "success" => true, "subcategories" => $json, 'isPos' => $category->isPos());
return new Response(json_encode($response));
}
/**
* @Route("/controlla-prodotto-matricole", name="user_check_product_codes")
*/
public function userCheckProductCodes(Request $request)
{
$em = $this->mr->getManager('slave');
$code = $request->request->get("code");
$type = $request->request->get("type");
$msg = null;
$product = null;
switch($type){
case 'producer': $product = $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeProducer' => $code)); break;
case 'supplier': $product = $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeSupplier' => $code)); break;
default: break;
}
$found = false;
if($product != null){
$found = true;
$msg = "Il prodotto risulta già registrato nella piattaforma ecco i dettagli<br>".$product->getDisplayConflict()."<strong>Magazzino</strong>: ".$product->getActualWarehouse().".";
}
return new Response(json_encode(array("code" => 200, "success" => true, "found" => $found, 'msg' => $msg)));
}
/**
* @Route("/aggiorna-codici-interni-modelli", name="user_update_internal_code_models")
*/
public function userUpdateInternalCodeModels(Request $request)
{
$em = $this->mr->getManager('slave');
$models = $em->getRepository('App\Entity\Slave\ProductModel')->findByInternalCodeNullOrEmpty();
foreach($models as $m){
$m->setInternalCode(UtilitiesService::generateModelInternalCode($m->getId()));
}
$em->flush();
$this->addFlash('notice_success', 'Codici aggiornati');
return $this->redirectToRoute('user_index');
}
/**
* @Route("/aggiorna-modelli-consentiti-per-fornitore", name="user_available_product_models_by_supplier_updates")
*/
public function userAvailableProductModelsBySupplierUpdates(Request $request)
{
$em = $this->mr->getManager('slave');
$supplierId = $request->request->get('supplierId');
$values = $em->getRepository('App\Entity\Slave\ProductModel')->findAllowedModelsBySupplier($supplierId);
$first = true;
$json = "[";
foreach($values as $v){
if($first) $first = false; else $json.= ',';
$json.= '{"id":'.$v->getId().', "name":'.json_encode($v->getName()).'}';
}
$json.= "]";
return new Response(json_encode(array("code" => 200, "success" => true, "values" => $json)));
}
/**
* @Route("/aggiorna-valori-modello-fornitore", name="user_product_model_name_by_supplier_updates")
*/
public function userProductModelNameBySupplierUpdates(Request $request)
{
$em = $this->mr->getManager('slave');
$name = $request->request->get('modelName');
$supplierId = $request->request->get('supplierId');
$values = $em->getRepository('App\Entity\Slave\ProductModel')->findByNameOrInternalCodeBySupplier($name, $supplierId);
$first = true;
$json = "[";
foreach($values as $v){
if($first) $first = false; else $json.= ',';
$json.= '{"id":'.$v->getId().', "name":'.json_encode($v->getName()).'}';
}
$json.= "]";
return new Response(json_encode(array("code" => 200, "success" => true, "values" => $json)));
}
/**
* @Route("/aggiorna-valori-modello", name="user_product_model_name_updates")
*/
public function userProductModelNameUpdates(Request $request)
{
$em = $this->mr->getManager('slave');
$name = $request->request->get('modelName');
$values = $em->getRepository('App\Entity\Slave\ProductModel')->findByNameOrInternalCode($name);
$first = true;
$json = "[";
foreach($values as $v){
if($first) $first = false; else $json.= ',';
$json.= '{"id":'.$v->getId().', "name":'.json_encode($v->getName()).'}';
}
$json.= "]";
return new Response(json_encode(array("code" => 200, "success" => true, "values" => $json)));
}
/**
* @Route("/aggiorna-valori-magazzini", name="user_product_warehouse_nickname_updates")
*/
public function userProductWarehouseNicknameUpdates(Request $request)
{
$em = $this->mr->getManager('slave');
$nickname = $request->request->get('nickname');
$termid = $request->request->get('termid');
$values = $em->getRepository('App\Entity\Slave\Warehouse')->findLikeNicknameAndTermid($nickname, $termid);
$first = true;
$json = "[";
foreach($values as $v){
if($first) $first = false; else $json.= ',';
$termids = '';
if($v->getClient() != null)
$termids = $v->getClient()->displayTermids('string');
$json.= '{"id":'.$v->getId().', "nickname":'.json_encode($v->getNickname()).', "termids":'.json_encode($termids).'}';
}
$json.= "]";
return new Response(json_encode(array("code" => 200, "success" => true, "values" => $json)));
}
/**
* @Route("/aggiorna-valori-prodotto", name="user_product_value_updates")
*/
public function userProductValuesUpdate(Request $request)
{
$em = $this->mr->getManager('slave');
$id = $request->request->get('id');
$id2 = $request->request->get('id2');
switch($request->request->get('type')){
case 'subcategories': $values = $em->getRepository('App\Entity\Slave\ProductSubcategory')->findByCategoryOrdered($id); break;
case 'producers': $values = $em->getRepository('App\Entity\Slave\Producer')->findBySubcategoryOrdered($id); break;
case 'models': $values = $em->getRepository('App\Entity\Slave\ProductModel')->findByProducerAndSubcategoryOrdered($id, $id2); break;
case 'suppliers': $values = $em->getRepository('App\Entity\Slave\Supplier')->findByModelOrdered($id); break;
default: break;
}
$first = true;
$json = "[";
foreach($values as $v){
if($first) $first = false; else $json.= ',';
$json.= '{"id":'.$v->getId().', "name":'.json_encode($v->getName()).'}';
}
$json.= "]";
return new Response(json_encode(array("code" => 200, "success" => true, "values" => $json)));
}
/**
* @Route("/aggiorna-rigenerati-fornitori", name="user_product_regenerate_suppliers_update")
*/
public function userProductRegenerateSuppliersUpdate(Request $request)
{
$em = $this->mr->getManager('slave');
$productRegenerated = $em->getRepository('App\Entity\Slave\ProductRegenerated')->findOneById($request->request->get('productRegeneratedId'));
$first = true;
$json = "[";
foreach($productRegenerated->getProduct()->getSuppliers() as $supplier){
if($first) $first = false; else $json.= ',';
$name = $supplier->getName().' ('.$supplier->getAmountRegenerate().' €)';
$json.= '{"id":'.$supplier->getId().', "name":'.json_encode($name).'}';
}
$json.= "]";
return new Response(json_encode(array("code" => 200, "success" => true, "suppliers" => $json, "startDate" => $productRegenerated->getDatetime()->format("d-m-Y"))));
}
/**
* @Route("/aggiorna-ticket-termid", name="user_ticket_termid_search")
*/
public function userTicketTermidSearch(Request $request)
{
$em = $this->mr->getManager('slave');
$termidCode = $request->request->get('termidCode');
$termid = $em->getRepository('App\Entity\Slave\Termid')->findOneBy(array('code' => $termidCode));
$json = '{}';
$found = false;
if($termid != null){
$found = true;
$client = $termid->getClient();
$json = '{"termidId":'.json_encode($termid->getId()).',"clientId":'.json_encode($client->getId()).',"clientCode":'.json_encode($client->getCode()).',"clientName":'.json_encode($client->getName()).',"clientNickname":'.json_encode($client->getNickname()).'}';
}
return new Response(json_encode(array("code" => 200, "success" => true, "found" => $found, "json" => $json)));
}
/**
* @Route("/aggiorna-ticket-fornitore-operazioni", name="user_ticket_supplier_operations")
*/
public function userTicketSupplierOperations(Request $request)
{
$em = $this->mr->getManager('slave');
if($request->request->get('supplierId') != null){
$supplier = $em->getRepository('App\Entity\Slave\Supplier')->findOneById($request->request->get('supplierId'));
$operations = $supplier->getOperations();
}
else{
$operations = $em->getRepository('App\Entity\Slave\Operation')->findAll();
}
$first = true;
$json = '[';
foreach($operations as $operation){
if($first) $first = false; else $json.= ',';
$json.= '{"id":'.json_encode($operation->getId()).', "name":'.json_encode($operation->__toString()).'}';
}
$json.= ']';
return new Response(json_encode(array("code" => 200, "success" => true, "operations" => $json)));
}
//
}