<?php
namespace Scabal\FrontBundle\Controller;
use Scabal\BackBundle\Transformer\Dashboard\TransformDbObjectToJsonSapFormat;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RedirectResponse;
class FrontController extends Controller {
private $ifArrayIndexExist = null;
private $index = 0;
//var jacketInArray = ['01','02','03','04','05','16'];
private $jacketInArray = array('01','02','03','04','05','1','2','3','4','5','16');
private $trouserInArray = array('02','03','04','05','20','2','3','4','5');
//private $coatInArray = ['16','54'];
private $coatInArray = array('54');
private $shirtInArray = array('91');
private $waistCoatInArray = array('03','04','09','3','4','9','16');
public function getJacketInArray($garment_set){
if(in_array($garment_set, $this->jacketInArray)){
return true;
}else{
return false;
}
}
public function getTrouserInArray($garment_set){
if(in_array($garment_set, $this->trouserInArray)){
return true;
}else{
return false;
}
}
public function getCoatInArray($garment_set){
if(in_array($garment_set, $this->coatInArray)){
return true;
}else{
return false;
}
}
public function getWaistCoatInArray($garment_set){
if(in_array($garment_set, $this->waistCoatInArray)){
return true;
}else{
return false;
}
}
public function getShirtInArray($garment_set){
if(in_array($garment_set, $this->shirtInArray)){
return true;
}else{
return false;
}
}
public function loginAction(Request $request) {
$results = array();
$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizers = array(new ObjectNormalizer());
$serializer = new Serializer($normalizers, $encoders);
$cookies = $request->cookies;
if($request->getSession()->isStarted() && $cookies->get('myFavorite') != null){
$jsonContent = $serializer->serialize('active', 'json');
$cookieAlreadyLogged = new Cookie('alreadyconnected', $jsonContent,0,'/',null, false, false);
$language = $request->getLocale();
switch ($language) {
case 'fr':
$message = array('message' => ' VOUS ETES DEJA CONNECTE', 'class' => 'notif-erreur', 'title' => 'ATTENTION !');
break;
case 'en':
$message = array('message' => ' YOU ARE ALREADY LOGGED', 'class' => 'notif-erreur', 'title' => 'WARNING !');
break;
case 'de':
$message = array('message' => ' SIE SIND BEREITS ANGESCHLOSSEN', 'class' => 'notif-erreur', 'title' => 'AUFMERKSAMKEIT !');
break;
case 'nl':
$message = array('message' => ' U BENT AL VERBONDEN', 'class' => 'notif-erreur', 'title' => 'AANDACHT !');
break;
default:
$message = array('message' => ' YOU ARE ALREADY LOGGED', 'class' => 'notif-erreur', 'title' => 'WARNING !');
break;
}
$request->getSession()->getFlashBag()->set('notice', array (
'class' => $message['class'],
'title' => $message['title'],
'message' => $message['message']
));
}else{
$jsonContent = $serializer->serialize('notactive', 'json');
$cookieAlreadyLogged = new Cookie('alreadyconnected', $jsonContent,0,'/',null, false, false);
}
try {
$repository = $this->getDoctrine()->getManager()->getRepository('Scabal\BackBundle\Entity\Maintenance');
$lightbox = $repository->findByIsActive('1');
if(isset($lightbox) & empty($lightbox)){
$jsonContent = $serializer->serialize('notactive', 'json');
$cookieMaintenance = new Cookie('maintenancewebsite', $jsonContent,0,'/',null, false, false);
}else{
if(isset($lightbox)){
$jsonEncode = $serializer->serialize($lightbox, 'json');
$this->ifArrayIndexExist = json_decode($jsonEncode);
if(array_key_exists($this->index, (array)$this->ifArrayIndexExist)){
$results = (array)$this->ifArrayIndexExist[0];
$timeStampStartDate = isset($results['startAt']->timestamp) ? $results['startAt']->timestamp : null;
$timeStampEndDate = isset($results['finishAt']->timestamp) ? $results['finishAt']->timestamp : null;
unset($results['id']);
unset($results['isActive']);
unset($results['createAt']);
unset($results['startAt']);
unset($results['finishAt']);
unset($results['reference']);
}else{
$results = (array)$this->ifArrayIndexExist;
$timeStampStartDate = 0;
}
if(time() >= $timeStampStartDate && time() <= $timeStampEndDate){
$v1 = (array)$lightbox[0]->getStartAt();
$v2 = (array)$lightbox[0]->getFinishAt();
$datetime1 = new \DateTime($v1['date']);
$datetime2 = new \DateTime($v2['date']);
$since_start = $datetime1->diff($datetime2);
$minutes = $since_start->days * 24 * 60;
$minutes += $since_start->h * 60;
$minutes += $since_start->i;
$time = $minutes * 60 * 1000;
$jsonContent = $serializer->serialize('active', 'json');
$cookieMaintenance = new Cookie('maintenancewebsite', $jsonContent, $timeStampStartDate + $time,'/',null, false, false);
}else{
$jsonContent = $serializer->serialize('notactive', 'json');
$cookieMaintenance = new Cookie('maintenancewebsite', $jsonContent,0,'/',null, false, false);
}
}
}
} catch (Exception $e) {
//todo
}
$authenticationUtils = $this->get('security.authentication_utils');
$response = $this->render('ScabalFrontBundle:Front:login.html.twig', array(
'last_username' => $authenticationUtils->getLastUsername(),
'error' => $authenticationUtils->getLastAuthenticationError(),
'results' => $results,
'csrf_token' => false
));
$response->headers->setCookie($cookieMaintenance);
$response->headers->setCookie($cookieAlreadyLogged);
return $response;
}
public function logoutAction(Request $request) {
$this->get('security.token_storage')->setToken(null);
$request->getSession()->invalidate();
return $this->redirect($this->generateUrl('login'));
}
public function logoutbrandAction(Request $request) {
$session = $request->getSession()->get('bypass');
$url = null;
if(count($session) > 0){
if(count($session->getUrl()) > 0){
$url = $session->getUrl();
$request->getSession()->invalidate();
$cookies = $request->cookies->all();
if(count($cookies) > 0){
$response = new RedirectResponse($url);
foreach ($cookies as $key => $value){
$response->headers->clearCookie($key);
}
return $response;
}
}
}
return null;
}
public function orderAction() {
return $this->render ( 'ScabalFrontBundle:Front:order.html.twig', array() );
// ...
}
public function orderv2Action() {
return $this->render ( 'ScabalFrontBundle:Front:orderv2.html.twig', array() );
// ...
}
public function orderv3Action() {
return $this->render ( 'ScabalFrontBundle:Front:orderv3.html.twig', array() );
// ...
}
public function dashboardAction() {
return $this->render ( 'ScabalFrontBundle:Front:dashboard.html.twig', array());
// ...
}
public function clientsAction() {
return $this->render ( 'ScabalFrontBundle:Front:clients.html.twig', array () );
// ...
}
public function faqAction() {
return $this->render ( 'ScabalFrontBundle:Front:faq.html.twig', array () );
// ...
}
public function settingsAction() {
return $this->render ( 'ScabalFrontBundle:Front:settings.html.twig', array () );
// ...
}
public function deliveryAction() {
return $this->render ( 'ScabalFrontBundle:Front:delivery.html.twig', array () );
// ...
}
public function resetAction() {
return $this->render ( 'ScabalFrontBundle:Front:reset.html.twig', array () );
// ...
}
public function brandAction(Request $request) {
$response = $this->render('ScabalFrontBundle:Front:brand.html.twig', array ());
$response->headers->removeCookie('myFavorite');
$response->headers->removeCookie('alreadyconnected');
$response->headers->clearCookie('REMEMBERME');
return $response;
}
public function viewerAction(Request $request,$order,$type) {
/**
* Retrieve user
**/
$user = array(
"name" => $this->get('security.token_storage')->getToken()->getUser()->getName(),
"kunnr" => $this->get('security.token_storage')->getToken()->getUser()->getKunnr()
);
$jacket = false;
$trouser = false;
$waistcoat = false;
$coat = false;
$shirt = false;
$query = 'id_order='.$order.'&order_type='.$type;
$currentUrl = $request->getUri ();
if (strstr ( $currentUrl, 'localhost' )) {
$urlItems = $this->container->getParameter ( 'api_get_order_item_details' );
} else {
$urlItems = $this->container->getParameter ( 'api_dashboard_get_item_details').$query;
}
$responseItems = $this->get("http")->getDataToWebServiceUtf8( $urlItems );
$responseItems = json_decode($responseItems);
/*
TEMPORARY FIX 27-01-2023
Same problem as in the resume, SAP sends numbers wrong
ex: 1,00- insteadof -1,00
*/
foreach ($responseItems->MEASURES as &$measure){
if (substr($measure->measure_value, -1) == '-'){
$measure->measure_value = substr($measure->measure_value, 0, -1);
$measure->measure_value = "-".$measure->measure_value;
}
}
$garment_set = $responseItems->MAIN_DATA[0]->garment_set;
$jacket = $this->getJacketInArray($garment_set);
$trouser = $this->getTrouserInArray($garment_set);
$waistcoat = $this->getWaistCoatInArray($garment_set);
$coat = $this->getCoatInArray($garment_set);
$shirt = $this->getShirtInArray($garment_set);
if($responseItems->MAIN_DATA[0]->price_tot > 0 && !$this->getUser()->getShouldHidePrice()){
$data = json_decode($request->cookies->get('myFavorite'));
$price_visibility = $data->price_visibility;
$customer = $data->idClient;
$queryMargins = 'id_customer='.$customer;
if (strstr ( $currentUrl, 'localhost' )) {
$urlMargins = $this->container->getParameter ( 'api_dashboard_get_margins_demo' );
} else {
$urlMargins = $this->container->getParameter ( 'api_dashboard_get_margins').$queryMargins;
}
$responseMargins = $this->get("http")->getDataToWebServiceUtf8( $urlMargins );
$responseMargins = json_decode($responseMargins);
$prodtype = $responseItems->MAIN_DATA[0]->prodtype;
$branding = $responseItems->MAIN_DATA[0]->branding;
$zusage = $responseItems->MAIN_DATA[0]->zusage;
$marge_factor = null;
$extra_charge = null;
$dataMargins = (array)$responseMargins->MARGINS;
switch ($price_visibility) {
case 'P':
foreach ($dataMargins as $dataMargin) {
$dataMargin = (array)$dataMargin;
if($dataMargin['permission'] == $prodtype && $dataMargin['branding'] == $branding && $dataMargin['zusage'] == $zusage){
$marge_factor = $dataMargin['marge_factor'];
$extra_charge = $dataMargin['extra_charge'];
}
}
$responseItems->MAIN_DATA[0]->price_tot = (($responseItems->MAIN_DATA[0]->price_tot * $marge_factor) + $extra_charge);
$price = true;
break;
case 'S':
foreach ($dataMargins as $dataMargin) {
$dataMargin = (array)$dataMargin;
if($dataMargin['permission'] == $prodtype && $dataMargin['branding'] == $branding && $dataMargin['zusage'] == $zusage){
$marge_factor = $dataMargin['marge_factor'];
$extra_charge = $dataMargin['extra_charge'];
}
}
$responseItems->MAIN_DATA[0]->price_tot = ($responseItems->MAIN_DATA[0]->price_tot + $extra_charge);
$price = true;
break;
default:
$price = false;
break;
}
}else{
$price = false;
}
if(property_exists($responseItems, 'PDF_INFO')){
if($responseItems->PDF_INFO->zdate > 0){
$now = new \DateTime($responseItems->PDF_INFO->zdate);
$responseItems->PDF_INFO->zdate = $now->format('d/m/Y');
}else if($responseItems->MAIN_DATA[0]->order_type == 'DRAFT'){
$now = new \DateTime();
$responseItems->PDF_INFO->zdate = $now->format('d/m/Y');
}
}else{
$responseItems->PDF_INFO = new \stdClass();
if($responseItems->MAIN_DATA[0]->order_type == 'DRAFT'){
$now = new \DateTime();
$responseItems->PDF_INFO->zdate = $now->format('d/m/Y');
}else{
$responseItems->PDF_INFO->zdate = 0;
}
$responseItems->PDF_INFO->bunch_id = '';
$responseItems->PDF_INFO->bunch_name = '';
}
$html = $this->renderView('ScabalFrontBundle:Front:viewer.html.twig', array(
'MAINDATA' => $responseItems->MAIN_DATA,
'MEASURES' => $responseItems->MEASURES,
'OPTIONS' => $responseItems->OPTIONS,
'SIZESQUANTITY' => $responseItems->SIZES_QUANTITY,
'INITIALS' => $responseItems->INITIALS,
'order' => $order,
'type' => $type,
'PRICE' => $price,
'BASEDIR' => $this->getParameter('base_dir'),
'USER' => $user,
'INFO' => $responseItems->PDF_INFO,
'JACKET' => $jacket,
'TROUSER' => $trouser,
'WAISTCOAT' => $waistcoat,
'COAT' => $coat,
'SHIRT' => $shirt,
));
$snappy = $this->get('knp_snappy.pdf');
$snappy->setTimeout(300);
$snappy->setOption('footer-center', 'Page [page]/[toPage]');
$filename = $order.'_'.$type.'_'.date('m-d-Y');
return new Response(
$snappy->getOutputFromHtml($html, array(
'images' => true,
'enable-javascript' => true,
'enable-external-links' => true,
'enable-internal-links' => true
)),
200,
array(
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="'.$filename.'".pdf"'
)
);
}
public function viewerwebAction(Request $request,$order,$type) {
/**
* Retrieve user
**/
$user = array(
"name" => $this->get('security.token_storage')->getToken()->getUser()->getName(),
"kunnr" => $this->get('security.token_storage')->getToken()->getUser()->getKunnr()
);
$jacket = false;
$trouser = false;
$waistcoat = false;
$coat = false;
$shirt = false;
$em = $this->getDoctrine()->getManager();
$repository = $em->getRepository('ScabalBackBundle:Dashboard\Drafts\Drafts');
$result = $repository->scabalFindByIdDraftAndTypeProduct($order);
$dbTransformer = new TransformDbObjectToJsonSapFormat();
$response = $dbTransformer->scabalTransformItemDetailsDraftData($result);
$responseItems = json_decode($response);
$garment_set = $responseItems->maindata->garment_set;
$jacket = $this->getJacketInArray($garment_set);
$trouser = $this->getTrouserInArray($garment_set);
$waistcoat = $this->getWaistCoatInArray($garment_set);
$coat = $this->getCoatInArray($garment_set);
$shirt = $this->getShirtInArray($garment_set);
$price = false;
$responseItems->PDF_INFO = new \stdClass();
if($type == 'draft'){
$now = new \DateTime();
$responseItems->PDF_INFO->zdate = $now->format('d/m/Y');
}else{
$responseItems->PDF_INFO->zdate = 0;
}
$responseItems->PDF_INFO->bunch_id = '';
$responseItems->PDF_INFO->bunch_name = '';
if(!property_exists($responseItems,'maindata')){
$responseItems->maindata = array();
}
if(!property_exists($responseItems,'measures')){
$responseItems->measures = array();
}
if(!property_exists($responseItems,'options')){
$responseItems->options = array();
}
if(!property_exists($responseItems,'sizes_quantity')){
$responseItems->sizes_quantity = array();
}
if(!property_exists($responseItems,'initials')){
$responseItems->initials = array();
}
$html = $this->renderView('ScabalFrontBundle:Front:viewerweb.html.twig', array(
'MAINDATA' => $responseItems->maindata,
'MEASURES' => $responseItems->measures,
'OPTIONS' => $responseItems->options,
'SIZESQUANTITY' => $responseItems->sizes_quantity,
'INITIALS' => $responseItems->initials,
'ORDER' => $order,
'TYPE' => $type,
'PRICE' => $price,
'BASEDIR' => $this->getParameter('base_dir'),
'USER' => $user,
'INFO' => $responseItems->PDF_INFO,
'JACKET' => $jacket,
'TROUSER' => $trouser,
'WAISTCOAT' => $waistcoat,
'COAT' => $coat,
'SHIRT' => $shirt,
));
$snappy = $this->get('knp_snappy.pdf');
$snappy->setTimeout(300);
$snappy->setOption('footer-center', 'Page [page]/[toPage]');
$filename = $order.'_'.$type.'_'.date('m-d-Y');
return new Response(
$snappy->getOutputFromHtml($html, array(
'images' => true,
'enable-javascript' => true,
'enable-external-links' => true,
'enable-internal-links' => true
)),
200,
array(
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="'.$filename.'".pdf"'
)
);
}
public function garmentReturnAction() {
return $this->render ( 'ScabalFrontBundle:Front:garmentReturn.html.twig', array() );
// ...
}
}