<?php 
 
namespace AppBundle\Controller; 
 
use mysql_xdevapi\Exception; 
use \Pimcore\Controller\FrontendController; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\Routing\Annotation\Route; 
use \Pimcore\Model\DataObject; 
use AppBundle\Service\UtilService; 
use AppBundle\Service\VehicleService; 
use Pimcore\Model\DataObject\Data\BlockElement; 
use Pimcore\Model\Element\Service; 
use Pimcore\Log\ApplicationLogger; 
 
 
class VehicleController extends FrontendController 
{ 
    /** 
     * @Route("/api/getvehicleinfo", methods={"POST","HEAD"}) 
     */ 
    public function getVehicleInfoAction(Request $request) 
    { 
 
        $requestArr = json_decode($request->getContent(),true); 
        $lcdvCode = $requestArr['lcdv16']; 
 
        $vechiles = DataObject\Vehicle::getByLcdv16($lcdvCode); 
        $vechileArr = []; 
        if($vechiles->getCount() > 0){ 
            $vechilesData = $vechiles->load(); 
            foreach ($vechilesData as $vehicle){ 
                $tmpArr = []; 
                $tmpArr['id'] = $vehicle->getId(); 
                $tmpArr['lcdv16'] = $vehicle->getLcdv16(); 
                $tmpArr['startDate'] = $vehicle->getStartDate()->toDateString('Y-m-d'); 
                $tmpArr['endDate'] = $vehicle->getEndDate()->toDateString('Y-m-d'); 
                $additionalInfoData = $vehicle->getAdditonalInfoData()->getItems(); 
                $tmpArr['additionalLcdvInfo'] = []; 
                foreach($additionalInfoData as $additionalInfo){ 
                    $tmpAdditionalInfo = []; 
                    $charRelData = $additionalInfo->getCharacteristics(); 
                    $tmpAdditionalInfo['characteristicsValue'] = $additionalInfo->getCharacteristicsValue(); 
                    $tmpAdditionalInfo['charValDesc'] = $additionalInfo->getCharValDesc(); 
                    $tmpAdditionalInfo['identifier'] = $additionalInfo->getIdentifier(); 
                    $tmpAdditionalInfo['dependent'] = $additionalInfo->getDependent(); 
                    $tmpAdditionalInfo['characteristics'] = $charRelData->getCharacteristics(); 
                    $tmpAdditionalInfo['characteristicsDescription'] = $charRelData->getCharacteristicsDesc(); 
                    array_push($tmpArr['additionalLcdvInfo'],$tmpAdditionalInfo); 
                } 
                array_push($vechileArr,$tmpArr); 
            } 
            $response = new Response(); 
            $response->setContent(json_encode(array('success' => 'true', 'errors' => [], 'data' => $vechileArr))); 
            $response->setStatusCode(200); 
            $response->headers->set('Content-Type', 'application/json'); 
            return $response; 
            //return $response; 
        }else{ 
            $response = new Response(); 
            $response->setContent(json_encode(array('success' => 'false', 'errors' => ['Vehicle information not available'], 'data' => []))); 
            $response->setStatusCode(404); 
            $response->headers->set('Content-Type', 'application/json'); 
            return $response; 
            //return $response; 
        } 
 
 
    } 
 
    /** 
     * @Route("/api/testconnection", methods={"GET","HEAD"}) 
     */ 
    public function testConnectionAction(Request $request) 
    { 
        $response = new Response(); 
        $response->setContent(json_encode(array('success' => 'true', 'message' => 'connection successfull'))); 
        $response->setStatusCode(200); 
        $response->headers->set('Content-Type', 'application/json'); 
        return $response; 
    } 
 
    public function viewVehicleAction(Request $request) 
    { 
        $vechiles = new DataObject\Vehicle\Listing(); 
 
        //$this->view->vehicles = $vechiles->getObjects(); 
        $vehicleArr = []; 
        $vehicleData = $vechiles->getObjects(); 
        foreach ($vehicleData as $vehicle){ 
            $tmpData['id'] = $vehicle->getId(); 
            $tmpData['lcdv16'] = $vehicle->getLcdv16(); 
            $tmpData['startDate'] = $vehicle->getStartDate()->toDateString('Y-m-d'); 
            $tmpData['endDate'] = $vehicle->getEndDate()->toDateString('Y-m-d'); 
            $tmpData['lcdv16Info'] = []; 
            $lcdvData = $vehicle->getLcdv16Data()->getItems(); 
            foreach($lcdvData as $lcdv){ 
                $tmpLcdv16Info = []; 
                $charRelData = $lcdv->getCharacteristics(); 
                $tmpLcdv16Info['characteristicsValue'] = $lcdv->getCharacteristicsValue(); 
                $tmpLcdv16Info['charValDesc'] = $lcdv->getCharValDesc(); 
                $tmpLcdv16Info['identifier'] = $lcdv->getIdentifier(); 
                $tmpLcdv16Info['dependent'] = $lcdv->getDependent(); 
                $tmpLcdv16Info['characteristics'] = $charRelData->getCharacteristics(); 
                $tmpLcdv16Info['characteristicsDescription'] = $charRelData->getCharacteristicsDesc(); 
                array_push($tmpData['lcdv16Info'],$tmpLcdv16Info); 
            } 
            $additionalInfoData = $vehicle->getAdditonalInfoData()->getItems(); 
            $tmpData['additionalLcdvInfo'] = []; 
            foreach($additionalInfoData as $additionalInfo){ 
                $tmpAdditionalInfo = []; 
                $charRelData = $additionalInfo->getCharacteristics(); 
                $tmpAdditionalInfo['characteristicsValue'] = $additionalInfo->getCharacteristicsValue(); 
                $tmpAdditionalInfo['charValDesc'] = $additionalInfo->getCharValDesc(); 
                $tmpAdditionalInfo['identifier'] = $additionalInfo->getIdentifier(); 
                $tmpAdditionalInfo['dependent'] = $additionalInfo->getDependent(); 
                $tmpAdditionalInfo['characteristics'] = $charRelData->getCharacteristics(); 
                $tmpAdditionalInfo['characteristicsDescription'] = $charRelData->getCharacteristicsDesc(); 
                array_push($tmpData['additionalLcdvInfo'],$tmpAdditionalInfo); 
            } 
            //Exterior Colors 
            $exteriorColorData = $vehicle->getExteriorColorCombinations(); 
            $exteriorColorArr = []; 
            foreach($exteriorColorData as $exteriorColor){ 
                $exteriorColorArr[] = array("code"=>$exteriorColor[0],"name"=>$exteriorColor[1]); 
            } 
            $tmpData['exteriorColors'] = $exteriorColorArr; 
            //Interior Colors 
            $interiorColorData = $vehicle->getInteriorColorCombo(); 
            $interiorColorArr = []; 
            foreach($interiorColorData as $interiorColor){ 
                $interiorColorArr[] = array("code"=>$interiorColor[0],"name"=>$interiorColor[1]); 
            } 
            $tmpData['interiorColors'] = $interiorColorArr; 
            array_push($vehicleArr, $tmpData); 
 
        } 
        $this->view->vehicles = $vehicleArr; 
    } 
 
    /** 
     * @Route("/api/receivevehicleprice", methods={"POST","HEAD"}) 
     */ 
    public function receiveVehiclePriceAction(Request $request) 
    { 
        $vehiclePriceData = json_decode( $request->getContent(), true); 
        if(count($vehiclePriceData) > 0 && count($vehiclePriceData['priceMasterItems']) > 0){ 
            try{ 
                $date = new \Carbon\Carbon(); 
                $utilService = new UtilService(); 
                $storedId = []; 
                foreach($vehiclePriceData['priceMasterItems'] as $price){ 
                    $priceCheck = DataObject\VehiclePrice::getByMaterial($price['MATERIAL']); 
                    if($priceCheck->getCount() > 0){ 
                        $newObject = $priceCheck->load()[0]; 
                    }else { 
                        $newObject = new DataObject\VehiclePrice(); 
                        $newObject->setKey(\Pimcore\Model\Element\Service::getValidKey($price['MATERIAL'] . '-' . $price['VALID_BEG'], 'object')); 
                        $folderId = $utilService->createFolderPath('VehiclePrices'); 
                        $newObject->setParentId($folderId); 
                    } 
 
                    $newObject->setCondType($price['COND_TYP']); 
                    $newObject->setSaleOrg($price['SALE_ORG']); 
                    $newObject->setDistCha($price['DIST_CHA']); 
                    $regionObj = DataObject\Region::getByCode($price['REGION']); 
                    $newObject->setRegion($regionObj->getObjects()[0]); 
                    $countryObj = DataObject\Country::getByCtr($price['COUNTRY']); 
                    $newObject->setCountry($countryObj->getObjects()[0]); 
                    $newObject->setCity($price['CITY']); 
                    $newObject->setMaterial($price['MATERIAL']); 
                    $newObject->setVariant($price['VARIANT']); 
                    $date= new \DateTime($price['VALID_END']); 
                    $newObject->setValidEnd($date); 
                    $startDate= new \DateTime($price['VALID_BEG']); 
                    $newObject->setValidStart($startDate); 
                    $newObject->setAmount(floatval($price['AMOUNT'])); 
                    $currencyObj = DataObject\Currency::getByCrcy($price['CURRENCY']); 
                    $newObject->setCurrency($currencyObj->getObjects()[0]); 
                    $newObject->setPublished(true); 
                    $newObject->save(); 
                    array_push($storedId,$newObject->getId()); 
 
                } 
                $response = new Response(); 
                $response->setContent(json_encode(array('id'=>$storedId, 'errors' => [], 'success' => 'true'))); 
                $response->setStatusCode(201); 
                $response->headers->set('Content-Type', 'application/json'); 
                return $response; 
            }catch (\Exception $e){ 
                $response = new Response(); 
                $response->setContent(json_encode(array('success' => 'false', 'errors' => [$e->getMessage()]))); 
                $response->setStatusCode(500); 
                $response->headers->set('Content-Type', 'application/json'); 
                return $response; 
            } 
        }else{ 
            $response = new Response(); 
            $response->setContent(json_encode(array('success' => 'false', 'errors' => ['Unexpected Request Format']))); 
            $response->setStatusCode(400); 
            $response->headers->set('Content-Type', 'application/json'); 
            return $response; 
        } 
 
    } 
 
 
    /** 
     * @Route("/api/receivevehiclemasterlcdv24", methods={"POST","HEAD"}) 
     */ 
    public function receiveVehicleMasterLcdv24(Request $request, ApplicationLogger $logger){ 
        $utilService = new UtilService(); 
        $isNew = true; 
        \Pimcore\Log\Simple::log('vehiclesMasterLCDV24', $request->getContent() . PHP_EOL); 
        $logger->info('LCDV24 Data Received',['data'=>$request->getContent()]); 
        $vehiclesMasterData = json_decode( $request->getContent()); 
        if(!empty($vehiclesMasterData) && count($vehiclesMasterData->DATA) > 0 && count($vehiclesMasterData->DATA[0]->item) > 0){ 
            $lcdv24Arr = $vehiclesMasterData->DATA[0]->item; 
            foreach($lcdv24Arr as $lcdv24Item){ 
                $vehicleMasterCheck = DataObject\VehicleLcdv24::getByLcdv24($lcdv24Item->LCDV24); 
                if($vehicleMasterCheck->getCount() > 0){ 
                    $newObject = $vehicleMasterCheck->load()[0]; 
                    $isNew = false; 
                }else{ 
                    $newObject = new DataObject\VehicleLcdv24(); 
                    $newObject->setKey(\Pimcore\Model\Element\Service::getValidKey($lcdv24Item->LCDV24, 'object')); 
 
                    $folderId = $utilService->createFolderPath('LCDV24'); 
 
                    $newObject->setParentId($folderId); 
                } 
                $startDateData = str_split($lcdv24Item->START_Date,4); 
                $startYear =  $startDateData[0]; 
                $startMonthData = str_split($startDateData[1],2); 
 
                $date = new \DateTime($startMonthData[1].'.'.$startMonthData[0].'.'.$startYear); 
                $newObject->setStartDate($date); 
 
                $endDateData = str_split($lcdv24Item->END_Date,4); 
                $endYear =  $endDateData[0]; 
                $endMonthData = str_split($endDateData[1],2); 
 
                $dateEnd = new \DateTime($endMonthData[1].'.'.$endMonthData[0].'.'.$endYear); 
                $newObject->setEndDate($dateEnd); 
 
                $newObject->setLcdv24($lcdv24Item->LCDV24); 
                $newObject->setPublished(true); 
                $newObject->save(); 
            } 
 
 
            exit; 
        } 
 
 
 
    } 
    /** 
     * @Route("/api/receivevehiclemasterinfo", methods={"POST","HEAD"}) 
     */ 
    public function receiveVehicleMasterInfoAction(Request $request, ApplicationLogger $logger) 
    { 
 
        \Pimcore\Log\Simple::log('vehiclesMasterData', $request->getContent() . PHP_EOL); 
        $logger->info('Vehicle Data Received',['data'=>$request->getContent()]); 
        //$logger-> 
        $vehiclesMasterData = json_decode( $request->getContent()); 
        $vehiclesMasterData = $vehiclesMasterData[0]->vehicle; 
        $isNew = true; 
        $utilService = new UtilService(); 
        $storedId = []; 
        // if(count($vehiclesMasterData) > 0){ 
        if(!empty($vehiclesMasterData)){ 
            $storedId = []; 
            foreach($vehiclesMasterData as $vehicleMasterArr){ 
                try{ 
 
 
                   // $vehicleMasterArr = $vehiclesMasterData['vehicle']; 
 
                    $lcdv           = $vehicleMasterArr->LCDV; 
                    $startDate      = $vehicleMasterArr->START; 
                    $endDate        = $vehicleMasterArr->END; 
                    $attributesData     = $vehicleMasterArr->ATTRIBUTES->item; 
                    $validityDate       = $attributesData->VALIDITYSTART; 
                    $validityEndDate    = $attributesData->VALIDITYEND; 
                    $coupletData        = $attributesData->COUPLET->item; 
 
 
                    $vehicleMasterCheck = DataObject\VehicleMaster::getByLcdv($lcdv); 
                    $vehicleMasterCheck->setUnpublished(true); 
                    if($vehicleMasterCheck->getCount() > 0){ 
                        $newObject = $vehicleMasterCheck->load()[0]; 
                        $isNew = false; 
                    }else{ 
                        $newObject = new DataObject\VehicleMaster(); 
                        $newObject->setKey(\Pimcore\Model\Element\Service::getValidKey($lcdv, 'object')); 
 
                        $folderId = $utilService->createFolderPath('Vehicle Master'); 
 
                        $newObject->setParentId($folderId); 
                    } 
 
                    $newObject->setLcdv($lcdv); 
 
 
                    $date = new \DateTime($startDate); 
                    $newObject->setStartDate($date); 
 
                    $dateEnd = new \DateTime($endDate); 
                    $newObject->setEndDate($dateEnd); 
 
                    $vDate = new \DateTime($validityDate); 
                    $newObject->setValidityStart($vDate); 
 
                    $vDateEnd= new \DateTime($validityEndDate); 
                    $newObject->setValidityEnd($vDateEnd); 
 
 
                    foreach ((array)$coupletData as $key => $coupletTypes) { 
                        $items = new DataObject\Fieldcollection(); 
 
                        $exteriorColorType = []; 
                        $exteriorColor = []; 
                        $interiorColorType = []; 
                        $interiorColor = []; 
                        $descriptiveOptions = []; 
                        $personalOptions = []; 
                        foreach ($coupletTypes->items as  $valueBasic) { 
 
                            $character  = $valueBasic->CHARACTER; 
                            $charDesc   = $valueBasic->CHAR_DESC; 
                            $value      = $valueBasic->VALUES; 
                            $valDesc    = $valueBasic->VAL_DESC; 
 
 
                            $charaCheck = DataObject\VehicleCharacteristics::getByCharacteristics($character); 
                            if ($charaCheck->getCount() > 0) { 
                                $newChars = $charaCheck->load()[0]; 
                            } else { 
                                $newChars = new DataObject\VehicleCharacteristics(); 
                                $newChars->setKey(\Pimcore\Model\Element\Service::getValidKey($character, 'object')); 
                                $charsFolderId = $utilService->createFolderPath('Characteristics'); 
                                $newChars->setParentId($charsFolderId); 
                                $newChars->setCharacteristics($character); 
                                $newChars->setCharacteristicsDesc($charDesc); 
                                $newChars->setPublished(true); 
                                $newChars->save(); 
                            } 
 
                            $item = new DataObject\Fieldcollection\Data\VehicleMasterCharacteristics(); 
                            $item->setCharacteristics($newChars); 
                            $item->setVmValues($value); 
                            $item->setVmValDesc($valDesc); 
                            if(!empty($valueBasic->Parent)){ 
                                $data = [ 
                                    "condition" => new BlockElement('condition', 'textarea', json_encode($valueBasic->Parent)) 
                                ]; 
                                $item->setDependency([$data]); 
                            } 
                            $items->add($item); 
                        } 
                        if($key == 'Basic'){ 
                            $newObject->setBasicInformation($items); 
                        } 
                        if($key == 'Descriptive'){ 
                            $newObject->setDescriptiveInformation($items); 
                        } 
                        if($key == 'Personalization'){ 
                            $newObject->setPersonalInformation($items); 
                        } 
 
                    } 
 
                    $newObject->setPublished(false); 
                    $newObject->save(); 
                    array_push($storedId,$newObject->getId()); 
 
 
                }catch (\Exception $e){ 
                    $response = new Response(); 
                    $response->setContent(json_encode(array('success' => 'false', 'errors' => [$e->getMessage()]))); 
                    $response->setStatusCode(500); 
                    $response->headers->set('Content-Type', 'application/json'); 
                    return $response; 
                } 
 
            } 
            $response = new Response(); 
            $response->setContent(json_encode(array('id'=>$storedId, 'errors' => [], 'success' => 'true'))); 
            $response->setStatusCode(201); 
            $response->headers->set('Content-Type', 'application/json'); 
            return $response; 
 
 
        }else{ 
            $response = new Response(); 
            $response->setContent(json_encode(array('success' => 'false', 'errors' => ['Unexpected Request Format']))); 
            $response->setStatusCode(400); 
            $response->headers->set('Content-Type', 'application/json'); 
            return $response; 
        } 
    } 
 
    /** 
     * @Route("/api/vehiclepriceinfo", methods={"POST","HEAD"}) 
     */ 
    public function vehiclePriceInfoAction(Request $request) 
    { 
        $vehiclesData = json_decode( $request->getContent(), true); 
        $lcdv16 = $vehiclesData['lcdv16']; 
        $region = $vehiclesData['region']; 
 
        try{ 
            if(!empty($lcdv16) && !empty($region)){ 
                $state = 0; 
                $regionObj = DataObject\Region::getByCode($region,1); 
                if(!empty($regionObj)){ 
                    $regionID = $regionObj->getID(); 
                }else{ 
                    $state = 1; 
                } 
 
 
                $lcdv16Obj = DataObject\VehicleMaster::getByLcdv($lcdv16,1); 
                if(!empty($lcdv16Obj)){ 
                    $lcdv16ID = $lcdv16Obj->getID(); 
                }else{ 
                    $state = 1; 
                } 
 
                if($state == 0){ 
                    $vehiclePI = []; 
                    $vehiclePriceAttributeObj = new DataObject\VehiclePriceAttribute\Listing(); 
                    $vehiclePriceAttributeObj->setCondition("lcdv16__id = :lcdv",["lcdv"=>$lcdv16ID]); 
                    $vehiclePriceAttributeObj->addConditionParam("customerRegion__id = :regid", ["regid"=>$regionID], "AND"); 
                    //$vehiclePriceAttributeObj->addConditionParam('validStart >= :date AND validEnd <= :date',['date'=>time()],"AND"); 
                    $vehiclePriceAttributeData = $vehiclePriceAttributeObj->load(); 
 
                    if($vehiclePriceAttributeData){ 
                        foreach ($vehiclePriceAttributeData as $key => $vpaValue) { 
                            $vehiclePI['vehiclePriceAttribute'][$key]['codeType'] = $vpaValue->getCondType(); 
                            $vehiclePI['vehiclePriceAttribute'][$key]['saleOrg'] = $vpaValue->getSaleOrg(); 
                            $vehiclePI['vehiclePriceAttribute'][$key]['distCha'] = $vpaValue->getDistCha(); 
 
                            if($vpaValue->getPlantRegion()){ 
                                $plantRegionObj = $vpaValue->getPlantRegion(); 
                                $vehiclePI['vehiclePriceAttribute'][$key]['plantRegion']['code'] = $plantRegionObj->getCode(); 
                                $vehiclePI['vehiclePriceAttribute'][$key]['plantRegion']['name'] = $plantRegionObj->getName(); 
                            }else{ 
                                $vehiclePI['vehiclePriceAttribute']['plantRegion'] = ''; 
                            } 
 
                            if($vpaValue->getCountry()){ 
                                $countryObj = $vpaValue->getCountry(); 
                                $vehiclePI['vehiclePriceAttribute'][$key]['country']['code'] = $countryObj->getCtr(); 
                                $vehiclePI['vehiclePriceAttribute'][$key]['country']['name'] = $countryObj->getName(); 
                            }else{ 
                                $vehiclePI['vehiclePriceAttribute'][$key]['country'] = ''; 
                            } 
 
                            $vehiclePI['vehiclePriceAttribute'][$key]['City'] = $vpaValue->getCity(); 
                            $vehiclePI['vehiclePriceAttribute'][$key]['MainAttr'] = $vpaValue->getMainAttr(); 
 
                            if($vpaValue->getValidStart()){ 
                                $vehiclePI['vehiclePriceAttribute'][$key]['ValidStart'] = $vpaValue->getValidStart()->toDateString('Y-m-d'); 
                            }else{ 
                                $vehiclePI['vehiclePriceAttribute'][$key]['ValidStart'] = ''; 
                            } 
 
                            if($vpaValue->getValidEnd()){ 
                                $vehiclePI['vehiclePriceAttribute'][$key]['ValidEnd'] = $vpaValue->getValidEnd()->toDateString('Y-m-d'); 
                            }else{ 
                                $vehiclePI['vehiclePriceAttribute'][$key]['ValidEnd'] = ''; 
                            } 
 
 
                            if($vpaValue->getCurrency()){ 
                                $currencyObj = $vpaValue->getCurrency(); 
                                $vehiclePI['vehiclePriceAttribute'][$key]['Currency']['code'] = $currencyObj->getCrcy(); 
                                $vehiclePI['vehiclePriceAttribute'][$key]['Currency']['currency'] = $currencyObj->getCurrency(); 
                            }else{ 
                                $vehiclePI['vehiclePriceAttribute'][$key]['Currency'] = ''; 
                            } 
 
                            if($vpaValue){ 
                                $vehiclePI['vehiclePriceAttribute'][$key]['amount'] = $vpaValue->getAmount(); 
                            }else{ 
                                $vehiclePI['vehiclePriceAttribute'][$key]['amount'] = 'NuLL'; 
                            } 
                            $vehiclePI['vehiclePriceAttribute'][$key]['exgstprice'] = $vpaValue->getExGSTPrice(); 
                        } 
                    }else{ 
                        $vehiclePI['vehiclePriceAttribute'] = 'NULL'; 
                    } 
 
                    $vehiclePriceOptionsObj = new DataObject\VehiclePriceOptions\Listing(); 
                    $vehiclePriceOptionsObj->setCondition("lcdv16__id = :lcdv",["lcdv"=>$lcdv16ID]); 
                    $vehiclePriceOptionsObj->addConditionParam("custRegion__id = :regid", ["regid"=>$regionID], "AND"); 
                    //$vehiclePriceOptionsObj->addConditionParam('validStart >= :date AND validEnd <= :date',['date'=>time()],"AND"); 
                    $vehiclePriceOptionsData = $vehiclePriceOptionsObj->load(); 
 
                    if($vehiclePriceOptionsData){ 
                        foreach ($vehiclePriceOptionsData as $key => $vpovalue) { 
                            $vehiclePI['vehiclePriceOptions'][$key]['codeType'] = $vpovalue->getCondType(); 
                            $vehiclePI['vehiclePriceOptions'][$key]['saleOrg'] = $vpovalue->getSaleOrg(); 
                            $vehiclePI['vehiclePriceOptions'][$key]['distCha'] = $vpovalue->getDistCha(); 
 
                            if($vpovalue->getPlantRegion()){ 
                                $plantRegionObj = $vpovalue->getPlantRegion(); 
                                $vehiclePI['vehiclePriceOptions'][$key]['plantRegion']['code'] = $plantRegionObj->getCode(); 
                                $vehiclePI['vehiclePriceOptions'][$key]['plantRegion']['name'] = $plantRegionObj->getName(); 
                            }else{ 
                                $vehiclePI['vehiclePriceOptions'][$key]['plantRegion'] = ''; 
                            } 
 
                            if($vpovalue->getCountry()){ 
                                $countryObj = $vpovalue->getCountry(); 
                                $vehiclePI['vehiclePriceOptions'][$key]['country']['code'] = $countryObj->getCtr(); 
                                $vehiclePI['vehiclePriceOptions'][$key]['country']['name'] = $countryObj->getName(); 
                            }else{ 
                                $vehiclePI['vehiclePriceOptions'][$key]['country'] = ''; 
                            } 
 
                            $vehiclePI['vehiclePriceOptions'][$key]['City'] = $vpovalue->getCity(); 
                            $vehiclePI['vehiclePriceOptions'][$key]['MainAttr'] = $vpovalue->getMainAttr(); 
 
                            if($vpovalue->getValidStart()){ 
                                $vehiclePI['vehiclePriceOptions'][$key]['ValidStart'] = $vpovalue->getValidStart()->toDateString('Y-m-d'); 
                            }else{ 
                                $vehiclePI['vehiclePriceOptions'][$key]['ValidStart'] = ''; 
                            } 
 
                            if($vpovalue->getValidEnd()){ 
                                $vehiclePI['vehiclePriceOptions'][$key]['ValidEnd'] = $vpovalue->getValidEnd()->toDateString('Y-m-d'); 
                            }else{ 
                                $vehiclePI['vehiclePriceOptions'][$key]['ValidEnd'] = ''; 
                            } 
 
 
                            if($vpovalue->getCurrency()){ 
                                $currencyObj = $vpovalue->getCurrency(); 
                                $vehiclePI['vehiclePriceOptions'][$key]['Currency']['code'] = $currencyObj->getCrcy(); 
                                $vehiclePI['vehiclePriceOptions'][$key]['Currency']['currency'] = $currencyObj->getCurrency(); 
                            }else{ 
                                $vehiclePI['vehiclePriceOptions'][$key]['Currency'] = ''; 
                            } 
 
                            if($vpovalue){ 
                                $vehiclePI['vehiclePriceOptions'][$key]['amount'] = $vpovalue->getAmount(); 
                            }else{ 
                                $vehiclePI['vehiclePriceOptions'][$key]['amount'] = 'NULL'; 
                            } 
                            $vehiclePI['vehiclePriceOptions'][$key]['exgstprice'] = $vpovalue->getExGSTPrice(); 
                        } 
                    }else{ 
                        $vehiclePI['vehiclePriceOptions'] = 'NULL'; 
                    } 
 
                    $vehiclePriceObj = new DataObject\VehiclePrice\Listing(); 
                    $vehiclePriceObj->setCondition("lcdv16__id = :lcdv",["lcdv"=>$lcdv16ID]); 
                    $vehiclePriceObj->addConditionParam("customerRegion__id = :regid", ["regid"=>$regionID], "AND"); 
                    //$vehiclePriceObj->addConditionParam('validStart >= :date AND validEnd <= :date',['date'=>time()],"AND"); 
                    $vehiclePriceData = $vehiclePriceObj->load(); 
                    if($vehiclePriceData){ 
                        $vehiclePI['vehiclePrice']['codeType'] = $vehiclePriceData[0]->getCondType(); 
                        $vehiclePI['vehiclePrice']['saleOrg'] = $vehiclePriceData[0]->getSaleOrg(); 
                        $vehiclePI['vehiclePrice']['distCha'] = $vehiclePriceData[0]->getDistCha(); 
 
                        if($vehiclePriceData[0]->getPlantRegion()){ 
                            $plantRegionObj = $vehiclePriceData[0]->getPlantRegion(); 
                            $vehiclePI['vehiclePrice']['plantRegion']['code'] = $plantRegionObj->getCode(); 
                            $vehiclePI['vehiclePrice']['plantRegion']['name'] = $plantRegionObj->getName(); 
                        }else{ 
                            $vehiclePI['vehiclePrice']['plantRegion'] = ''; 
                        } 
 
                        if($vehiclePriceData[0]->getCoutnry()){ 
                            $countryObj = $vehiclePriceData[0]->getCoutnry(); 
                            $vehiclePI['vehiclePrice']['country']['code'] = $countryObj->getCtr(); 
                            $vehiclePI['vehiclePrice']['country']['name'] = $countryObj->getName(); 
                        }else{ 
                            $vehiclePI['vehiclePrice']['country'] = ''; 
                        } 
 
                        $vehiclePI['vehiclePrice']['City'] = $vehiclePriceData[0]->getCity(); 
                        if($vehiclePriceData[0]->getValidStart()){ 
                            $vehiclePI['vehiclePrice']['ValidStart'] = $vehiclePriceData[0]->getValidStart()->toDateString('Y-m-d'); 
                        }else{ 
                            $vehiclePI['vehiclePrice']['ValidStart'] = ''; 
                        } 
                        if($vehiclePriceData[0]->getValidEnd()){ 
                            $vehiclePI['vehiclePrice']['ValidEnd'] = $vehiclePriceData[0]->getValidEnd()->toDateString('Y-m-d'); 
                        }else{ 
                            $vehiclePI['vehiclePrice']['ValidEnd'] = ''; 
                        } 
 
 
                        if($vehiclePriceData[0]->getCurrency()){ 
                            $currencyObj = $vehiclePriceData[0]->getCurrency(); 
                            $vehiclePI['vehiclePrice']['Currency']['code'] = $currencyObj->getCrcy(); 
                            $vehiclePI['vehiclePrice']['Currency']['currency'] = $currencyObj->getCurrency(); 
                        }else{ 
                            $vehiclePI['vehiclePrice']['Currency'] = ''; 
                        } 
                        $vehiclePI['vehiclePrice']['amount'] = $vehiclePriceData[0]->getAmount(); 
                        $vehiclePI['vehiclePrice']['exgstprice'] = $vehiclePriceData[0]->getExGSTPrice(); 
                    }else{ 
                        $vehiclePI['vehiclePrice'] = "NULL"; 
                    } 
 
                    $vehicleTaxObj = new DataObject\Tax\Listing(); 
                    $vehicleTaxObj->setCondition('lcdv16__id = ?', $lcdv16ID); 
                    $vehicleTaxObj->addConditionParam("custRegion__id = ?",$regionID,'AND'); 
                    $vehicleTaxData = $vehicleTaxObj->load(); 
                    if($vehicleTaxData){ 
                        foreach($vehicleTaxData as $key=>$taxData){ 
                            $vehiclePI['vehicleTax'][$key]['taxType'] = $taxData->getTaxType(); 
                            $vehiclePI['vehicleTax'][$key]['hsnCode'] = $taxData->getHsnCode(); 
                            $vehiclePI['vehicleTax'][$key]['percentage'] = $taxData->getPercentage(); 
                            $vehiclePI['vehicleTax'][$key]['validStart'] = $taxData->getValidStart()->toDateString('Y-m-d'); 
                            $vehiclePI['vehicleTax'][$key]['validEnd'] = $taxData->getValidEnd()->toDateString('Y-m-d'); 
                            $vehiclePI['vehicleTax'][$key]['plantRegion'] = $taxData->getPlantRegion()->getCode(); 
                            $vehiclePI['vehicleTax'][$key]['customerRegion'] = $taxData->getCustRegion()->getCode(); 
                        } 
 
                    }else{ 
                        $vehiclePI['vehicleTax'] = []; 
                    } 
 
                    $tmpResponse = $vehiclePI; 
                }else{ 
                    $tmpResponse = 'LCDV or Region not available.'; 
                } 
 
            }else{ 
                $tmpResponse = 'Invalid Perameters.'; 
            } 
            $response = new Response(); 
            $response->setContent(json_encode($tmpResponse)); 
            $response->setStatusCode(201); 
            $response->headers->set('Content-Type', 'application/json'); 
            return $response; 
        }catch (\Exception $e){ 
            $response = new Response(); 
            $response->setContent(json_encode(array('success' => 'false', 'errors' => [$e->getMessage()]))); 
            $response->setStatusCode(500); 
            $response->headers->set('Content-Type', 'application/json'); 
            return $response; 
        } 
    } 
 
    /** 
     * @Route("/api/regionlist", methods={"POST","HEAD"}) 
     */ 
    public function regionListAction(Request $request) 
    { 
        $regionObj = new DataObject\Region\Listing(); 
        $regionData = $regionObj->load(); 
        try{ 
            $regionDataArr = []; 
            foreach ($regionData as $value) { 
                $regionData = []; 
                $regionData['code']   = $value->getCode(); 
                $regionData['name']  = $value->getName(); 
                $countryData= $value->getCountry(); 
 
                $country = []; 
                if($countryData){ 
                    $country['code'] = $countryData->getCtr(); 
                    $country['name'] = $countryData->getName(); 
                } 
                $regionData['country'] = $country; 
                array_push($regionDataArr, $regionData); 
            } 
 
            $regionDataJSON = json_encode($regionDataArr); 
 
            $response = new Response(); 
            $response->setContent($regionDataJSON); 
            $response->setStatusCode(201); 
            $response->headers->set('Content-Type', 'application/json'); 
            return $response; 
        }catch (\Exception $e){ 
            $response = new Response(); 
            $response->setContent(json_encode(array('success' => 'false', 'errors' => [$e->getMessage()]))); 
            $response->setStatusCode(500); 
            $response->headers->set('Content-Type', 'application/json'); 
            return $response; 
        } 
    } 
 
 
    /** 
     * @Route("/api/minbookingamount", methods={"POST","HEAD"}) 
     */ 
    public function minBookingAmountAction(Request $request) 
    { 
        $vehiclesLcdv = json_decode( $request->getContent(), true); 
        $lcdv16 = $vehiclesLcdv['lcdv16']; 
        try{ 
            if($lcdv16){ 
                $vehicleMasterCheck = DataObject\VehicleMaster::getByLcdv($lcdv16,1); 
                if(!empty($vehicleMasterCheck)){ 
                    $vehicleId = $vehicleMasterCheck->getId(); 
 
                    $minBookingAmountObj = new DataObject\minBookingAmount\Listing(); 
                    $minBookingAmountObj->setCondition("vehicle__id = '$vehicleId'"); 
                    $minBookingAmountData = $minBookingAmountObj->load(); 
 
                    $minBookingAmount = []; 
                    $preAmount = $minBookingAmountData[0]->getPreBookingAmount(); 
 
                    if($preAmount){ 
                        $preAmountVal = $preAmount->getValue(); 
                        $preAmountUnit = $preAmount->getUnit()->getLongname(); 
                        $preBookingAmount = $preAmountVal.' '.$preAmountUnit; 
                    }else{ 
                        $preBookingAmount = 'NULL'; 
                    } 
 
                    $bookingAmount = $minBookingAmountData[0]->getBookingAmount(); 
                    if($bookingAmount){ 
                        $bookingAmountVal = $bookingAmount->getValue(); 
                        $bookingAmountUnit = $bookingAmount->getUnit()->getLongname(); 
                        $bookingAmount = $bookingAmountVal.' '.$bookingAmountUnit; 
                    }else{ 
                        $bookingAmount = 'NULL'; 
                    } 
 
                    array_push($minBookingAmount, ['preBookingAmount' => $preBookingAmount, 'bookingAmount' => $bookingAmount]); 
                    $tmpResponse = $minBookingAmount; 
 
                }else{ 
                    $tmpResponse = 'Vehicle not found.'; 
                } 
            }else{ 
                $tmpResponse = "Invalid perameters."; 
            } 
            $response = new Response(); 
            $response->setContent(json_encode($tmpResponse)); 
            $response->setStatusCode(201); 
            $response->headers->set('Content-Type', 'application/json'); 
            return $response; 
         }catch (\Exception $e){ 
            $response = new Response(); 
            $response->setContent(json_encode(array('success' => 'false', 'errors' => [$e->getMessage()]))); 
            $response->setStatusCode(500); 
            $response->headers->set('Content-Type', 'application/json'); 
            return $response; 
        } 
    } 
 
 
 
 
 
}