<?php

namespace OfficeBrain\Bundle\SupplierComplianceBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use OfficeBrain\Bundle\SupplierComplianceBundle\Entity\SupplierCompliance;
use OfficeBrain\Bundle\SupplierComplianceBundle\Form\SupplierComplianceType;

class SupplierComplianceAdminController extends Controller
{
    protected $form;
    protected $request;
    protected $formData;
    protected $responseArray;
    protected $commonLibraryManager;
    protected $locale;
    
    /**
     *
     * @author Employee Id: 4203
     *
     * Desciption: Define member variables with thier default value
     *
     * @param NULL
     *
     * @return NULL
     *
     * @throws NULL
     *
     */
    public function __construct()
    {
        $this->form = null;
        $this->request = null;
        $this->formData = null;
        $this->responseArray = array();
        $this->commonLibraryManager = null;
        $this->locale = null;
    }
    
    /**
     *
     * @author Employee Id: 4203
     *
     * Desciption: Unset member variables
     *
     * @param NULL
     *
     * @return NULL
     *
     * @throws NULL
     *
     */
    public function __destruct()
    {
        unset($this->user);
        unset($this->form);
        unset($this->formData);
        unset($this->request);
        unset($this->projectSetting);
        unset($this->locale);
        unset($this->responseArray);
        unset($this->configurationRule);
        unset($this->complianceManager);
        unset($this->commonLibraryManager);
        unset($this->page);
        unset($this->recordsPerPage);
    }
    
    /**
     *
     * @author Employee Id: 4203
     *
     * Desciption: Create and initialize various required object and member variables
     *
     * @param NULL
     *
     * @return NULL
     *
     * @throws NULL
     *
     */
    public function initAction()
    {
        $this->request = $this->getRequest();
        $this->projectSetting = $this->request->get('project_setting');
        $this->locale = $this->projectSetting['culture_code'];
        $this->responseArray = array();
        //$this->coreManager = $this->get('office_brain_core_manager');
        //$this->configurationRule = $this->projectSetting['configuration_rule']['transaction']['request_info'];
        $this->complianceManager = $this->get('office_brain_supplier_compliance_manager');
        //$this->commonLibraryManager = $this->get('office_brain_common_library');
        $this->page = $this->request->get('page', '1');
        $this->recordsPerPage = $this->request->get('records_per_page', 10);
    }

    /**
     *
     * @Route("/admin/{_locale}/supplier-compliance-list",
     * name="office_brain_supplier_compliance_bundle_suppliercomplicanceadmin_suppliercompliancelist",
     * options={"expose"=true}
     * )
     * @Template()
     * @Method({"GET"})
     */
    public function supplierComplianceListAction()
    {
        $this->initAction();
        $keywords = $this->request->get('keywords');
        //$this->page = 1;
        //$this->recordsPerPage = 1;
        $this->responseArray['records_per_page'] = $this->recordsPerPage;
        $this->responseArray['page'] = $this->page;
        $this->responseArray['data'] = $this->complianceManager->getComplianceList($keywords, $this->page, $this->recordsPerPage);

        return $this->render('OfficeBrainSupplierComplianceBundle:SupplierCompliance:Admin/list.html.twig',$this->responseArray);
    }

    /**
     *
     * @Route("/admin/{_locale}/delete-supplier-compliance/{id}",
     * name="office_brain_supplier_compliance_bundle_suppliercomplicanceadmin_deletesuppliercompliance",
     * options={"expose"=true}
     * )
     * @Template()
     * @Method({"GET"})
     */
    public function deletesuppliercomplianceAction()
    {
        $this->initAction();
        $id = $this->request->get('id');
        $supplierCompliance = $this->complianceManager->getSupplierComplainceById($id);
        
        if($supplierCompliance!=NULL){
            $this->complianceManager->deleteCompliaceProduct($supplierCompliance);
            $this->addFlash('success_message','Supplier compliance deleted successfully.');
        }else{
            $this->addFlash('error_message','Supplier compliance not found.');
        }
                return $this->redirect($this->generateUrl('office_brain_supplier_compliance_bundle_suppliercomplicanceadmin_suppliercompliancelist'));
    }



    /**
     *
     * @Route("/admin/{_locale}/supplier-compliance-product",
     * name="office_brain_supplier_compliance_bundle_suppliercomplicanceadmin_suppliercomplianceproduct",
     * options={"expose"=true}
     * )
     * @Template()
     * @Method({"post"})
     */
    public function suppliercomplianceproductAction()
    {
        $this->initAction();
        $compliance_id = $this->request->get('compliance_id');
        $product_id = $this->request->get('product_id');
        $supplierCompliance = $this->complianceManager->getSupplierComplainceById($compliance_id);
        $mappedComplaince = $this->complianceManager->getCompliaceProductById($product_id);
        if($mappedComplaince!=NULL){
        $this->complianceManager->saveCompliaceProduct($product_id,$supplierCompliance,$mappedComplaince);
        }else{
        $this->complianceManager->saveCompliaceProduct($product_id,$supplierCompliance,null);
        }
        $response = array('msg' => 'Compliance mapped with product successfully.');
        return new JsonResponse($response);
    }

    /**
     *
     * @Route("/admin/{_locale}/supplier-compliance-add",
     * name="office_brain_supplier_compliance_bundle_suppliercomplicanceadmin_supplierComplianceAdd",
     * options={"expose"=true}
     * )
     * @Method({"GET","POST"})
     */
    public function supplierComplianceAddAction()
    {
        $this->initAction();
        $supplierCompliance = new SupplierCompliance();
        $form = $this->createForm(new SupplierComplianceType(), $supplierCompliance);
        $form->handleRequest($this->request);

        if($this->request->getMethod()=="POST"){
            if($form->isValid()) {
                $formdata = array();
                $path = $this->container->getParameter('base_path').'/images/uploads/supplier-compliance/';
                if ($form->getData()->getLicenseAgrementFile() != "") {
                    $formdata['license_agrement_file']=$this->complianceManager->uploadPdfFile($form->getData()->getLicenseAgrementFile(),$path);
                }
                if ($form->getData()->getGccFile() != "") {
                    $formdata['gcc_file']=$this->complianceManager->uploadPdfFile($form->getData()->getGccFile(),$path);
                }
                if ($form->getData()->getCocFile() != "") {
                    $formdata['coc_file']=$this->complianceManager->uploadPdfFile($form->getData()->getCocFile(),$path);
                }
                if ($form->getData()->getQcaFile() != "") {
                    $formdata['qca_file']=$this->complianceManager->uploadPdfFile($form->getData()->getQcaFile(),$path);
                }


                if ($form->getData()->getFlaFile() != "") {
                    $formdata['fla_file']=$this->complianceManager->uploadPdfFile($form->getData()->getFlaFile(),$path);
                }
                if ($form->getData()->getBackStoryFile() != "") {
                    $formdata['backStory_file']=$this->complianceManager->uploadPdfFile($form->getData()->getBackStoryFile(),$path);
                }
                if ($form->getData()->getClcFile() != "") {
                    $formdata['clc_file']=$this->complianceManager->uploadPdfFile($form->getData()->getClcFile(),$path);
                }

                if ($form->getData()->getAssembledIn() != "") {
                    $formdata['assembled_in']=$this->complianceManager->uploadPdfFile($form->getData()->getAssembledIn(),$path);
                }

                if ($form->getData()->getMadeIn() != "") {
                    $formdata['made_in']=$this->complianceManager->uploadPdfFile($form->getData()->getMadeIn(),$path);
                }

                if ($form->getData()->getDecoratedIn() != "") {
                    $formdata['decorated_in']=$this->complianceManager->uploadPdfFile($form->getData()->getDecoratedIn(),$path);
                }

                if ($form->getData()->getProductCompliance() != "") {
                    $formdata['product_compliance']=$this->complianceManager->uploadPdfFile($form->getData()->getProductCompliance(),$path);
                }

                $this->complianceManager->saveData($form->getData(), $formdata, null);
                $this->addFlash('success_message','Supplier compliance added successfully.');
                return $this->redirect($this->generateUrl('office_brain_supplier_compliance_bundle_suppliercomplicanceadmin_suppliercompliancelist'));
            }
        }
        
        $this->responseArray['form']=$form->createView();
        //return $this->responseArray;
        return $this->render('OfficeBrainSupplierComplianceBundle:SupplierCompliance:Admin/add.html.twig',$this->responseArray);
    }

    /**
     *
     * @Route("/admin/{_locale}/supplier-compliance-edit/{id}",
     * name="office_brain_supplier_compliance_bundle_suppliercomplicanceadmin_supplierComplianceEdit",
     * options={"expose"=true}
     * )
     * @Template()
     *  @Method({"GET","POST"})
     */
    public function supplierComplianceEditAction()
    {
        $this->initAction();
        $id = $this->request->get('id');
        $supplierCompliance = $this->complianceManager->getSupplierComplainceById($id);
        //$supplierCompliance = new SupplierCompliance();
        $form = $this->createForm(new SupplierComplianceType(), $supplierCompliance);
        $form->handleRequest($this->request);
        $url = $this->container->getParameter('web_image.base_url').'uploads/supplier-compliance/';
        if($this->request->getMethod()=="POST"){
            if($form->isValid()) {
                $path = $this->container->getParameter('base_path').'/images/uploads/supplier-compliance/';
                $formdata = array();
                $formdata['license_agrement_file']=$this->request->get('license_agrement_file');
                $formdata['gcc_file']=$this->request->get('gcc_file');
                $formdata['coc_file']=$this->request->get('coc_file');
                $formdata['qca_file']=$this->request->get('qca_file');
                $formdata['fla_file']=$this->request->get('fla_file');
                $formdata['backStory_file']=$this->request->get('backStory_file');
                $formdata['clc_file']=$this->request->get('clc_file');
                $formdata['assembled_in']=$this->request->get('assembled_in');
                $formdata['made_in']=$this->request->get('made_in');
                $formdata['decorated_in']=$this->request->get('decorated_in');
                $formdata['product_compliance']=$this->request->get('product_compliance');
                if ($form->getData()->getLicenseAgrementFile() != "") {
                    $formdata['license_agrement_file']=$this->complianceManager->uploadPdfFile($form->getData()->getLicenseAgrementFile(),$path);
                }
                
                if ($form->getData()->getGccFile() != "") {
                    $formdata['gcc_file']=$this->complianceManager->uploadPdfFile($form->getData()->getGccFile(),$path);
                }
                
                if ($form->getData()->getCocFile() != "") {
                    $formdata['coc_file']=$this->complianceManager->uploadPdfFile($form->getData()->getCocFile(),$path);
                }
                
                if ($form->getData()->getQcaFile() != "") {
                    $formdata['qca_file']=$this->complianceManager->uploadPdfFile($form->getData()->getQcaFile(),$path);
                }

                if ($form->getData()->getFlaFile() != "") {
                    $formdata['fla_file']=$this->complianceManager->uploadPdfFile($form->getData()->getFlaFile(),$path);
                }

                if ($form->getData()->getBackStoryFile() != "") {
                    $formdata['backStory_file']=$this->complianceManager->uploadPdfFile($form->getData()->getBackStoryFile(),$path);
                }
                
                if ($form->getData()->getClcFile() != "") {
                    $formdata['clc_file']=$this->complianceManager->uploadPdfFile($form->getData()->getClcFile(),$path);
                }

                if ($form->getData()->getAssembledIn() != "") {
                    $formdata['assembled_in']=$this->complianceManager->uploadPdfFile($form->getData()->getAssembledIn(),$path);
                }

                if ($form->getData()->getMadeIn() != "") {
                    $formdata['made_in']=$this->complianceManager->uploadPdfFile($form->getData()->getMadeIn(),$path);
                }

                if ($form->getData()->getDecoratedIn() != "") {
                    $formdata['decorated_in']=$this->complianceManager->uploadPdfFile($form->getData()->getDecoratedIn(),$path);
                }

                if ($form->getData()->getProductCompliance() != "") {
                    $formdata['product_compliance']=$this->complianceManager->uploadPdfFile($form->getData()->getProductCompliance(),$path);
                }


                $this->complianceManager->saveData($form->getData(), $formdata, $supplierCompliance);
                $this->addFlash('success_message','Supplier compliance edited successfully.');
                return $this->redirect($this->generateUrl('office_brain_supplier_compliance_bundle_suppliercomplicanceadmin_suppliercompliancelist'));
            }
        }
        
        $this->responseArray['form']=$form->createView();
        $this->responseArray['id'] = $id;
        $this->responseArray['url'] = $url;
        $this->responseArray['supplierCompliance'] = $supplierCompliance;
        return $this->render('OfficeBrainSupplierComplianceBundle:SupplierCompliance:Admin/edit.html.twig',$this->responseArray);
    }
}
