<?php if(!defined('BASEPATH')) exit('No direct script access allowed');

require APPPATH . '/libraries/BaseController.php';

/**
 * Class : purchaseorder (PurchaseorderController)
 * User Class to control all user related operations.
 * @author : VenbaMail Mali
 * @version : 1.1
 * @since : 15 Feb 2016
 */
class emergencypurchaseorder extends BaseController
{
    /**
     * This is default constructor of the class
     */
    public function __construct()
    {
        parent::__construct();
        $this->load->model('purchaseorder_model');

        $this->load->library('session');
        $this->load->library('form_validation');
        $this->load->model('requistion_model');
        $this->isLoggedIn();
    }

    /**
     * This function used to load the first screen of the user
     */
    public function index()
    {
        $this->global['pageTitle'] = 'Siddharth : AddPO';

        $this->loadViews("addPO", $this->global, NULL , NULL);
    }

    function requisition()
    {
        $data['DeptList'] = $this->purchaseorder_model->getDepartmentListForAllReq();

        $data['stList'] = $this->purchaseorder_model->getStatusListforAllReq();

        $data['ReqList'] =  $this->purchaseorder_model->getRequistionListbySearch();
        $this->global['pageTitle'] = 'Siddharth : Create PO from Requisition List';

        $this->loadViews("createPOfromRequistion", $this->global,  $data,Null);
    }

    function CreateEmergencyPO()
    {
        $this->global['pageTitle'] = 'Siddharth : Create Emergency Purchase Order';
        $data['RequestType'] = $this->requistion_model->getConfigValue('C004');
        $data['Suplist'] = $this->purchaseorder_model->getSupplierName();
        $data['DeptList'] = $this->purchaseorder_model->getDepartmentAllList();
        $data['CompanyDetails'] =  $this->purchaseorder_model->getCompanyInformation();
        $data['MaxPODate'] =  $this->purchaseorder_model->getLastCreatedPODate();
        $data['TaxType'] = $this->purchaseorder_model->getConfigValue('C006'); 
			$data['FreightType'] = $this->purchaseorder_model->getConfigValue('C018'); 

        $this->loadViews("alterpurchaseorder", $this->global, $data,  Null);

    }
    /**
     * this function used for get all material code  using request type
     */
    function getMaterialCode(){
        $reqType =  $this->input->post('input');
        $materialList = $this->requistion_model->GetMaterialCode($reqType);
        echo json_encode($materialList);

    }

    /*This function is used for get cost center list using department code*/
    function getCostCenterName(){
        $CostList='';
        $DeptCode =  $this->input->post('id');
        $CostList = $this->requistion_model->GetCostCenterByDept($DeptCode);
        // print_r($CostList);
        echo json_encode($CostList);

    }

    //This used to Create Service Purchase Order
    function addNewServicePurchaseOrder()
    {
    
    	
        $POdt =$this->input->post('PODate');
        $PODate =  $this->getDateformat($POdt);
        $SupplierID = $this->input->post('drpSupplier');
        $DeliveryAddr = $this->input->post('DeliveryAddr');
        $dt = $this->input->post('Deliverydt');
        $CostCenterName = $this->input->post('CostCenterName');
        $DeliveryOption = $this->input->post('DateRange');
        if($DeliveryOption==1){
         $Deliverydt = '';
        $DeliverySchedule = $this->input->post('Scheduleby');
        }
         else{
         $Deliverydt = $this->getDateformat($dt);
        $DeliverySchedule = '';
        }
       
        
        $POType = $this->input->post('POType');
       
        $SpcialInstruction = $this->input->post('TextSpcialInstruction');
        $TotalOrderValueSummary = $this->input->post('TextTotalOrderValueSummaryService');

        $POStatus = $this->input->post('TextStatus');
        $CreateBy = $this->session->userdata ('userId');
        $RequestedBy = $this->session->userdata ('EmpID');

       $ReqStatus =  REQITEM_Emergency_PO_CREATED;
     
        $RowCount =  $this->input->post('TextRowCount');

        $DeletedRow =  $this->input->post('TextDeletedRowCount');

        $comma_separated = explode(':', $DeletedRow);

        $dt = new DateTime('now', new DateTimeZone('Asia/Kolkata'));

        $createddt =  $dt->format('Y-m-d H:i:s');
        //create T_Requestion_Master
       	$Request = array('ReqType'=>$POType, 'Requestedby'=>$RequestedBy,'CostCenterCode'=>$CostCenterName,'Status'=>$ReqStatus,'Comments'=>$SpcialInstruction,'ReqDate'=>$createddt,'CreatedDate'=>$createddt,'CreatedBy'=>$CreateBy);
			
					$Req  = $this->requistion_model->addRequistion($Request);
			
					$RegNo='';
					 if(count($Req)>0)
        {
            $RegNo =  $Req[0]['ReqNo'];
        }
      
       
        // PO Master
        $POList = array('SupplierID'=>$SupplierID, 'TotalOrderValue'=>$TotalOrderValueSummary,'PODate'=>$PODate,'Status'=>$POStatus,'DeliverySchedule'=>$DeliverySchedule,'DeliveryOption'=>$DeliveryOption,'ServiceDescription'=>$SpcialInstruction,'CreatedBy'=>$CreateBy,'DeliveryAddress'=>$DeliveryAddr,'DeliveryDate'=>$Deliverydt,'CreatedDate'=>$createddt );

        $POMaster  = $this->purchaseorder_model->addPOMaster($POList);
        $PONO = '';
        if(count($POMaster)>0)
        {
            $PONO =  $POMaster[0]['PONO'];
        }
        
        $RegDetailsStatus=REQITEM_POCREATED;

        // PO Line Items
        $LineItemStatus = REQITEM_NEW;

        for ($i = 1; $i <= $RowCount; $i++)
        {
        	
            $MaterialCode = $this->input->post('materialCode'.$i);
            $Quantity = $this->input->post('quantity'.$i);
            $Reqnumber = $this->input->post('Reqnumber'.$i);
            $itemRate = $this->input->post('itemRate'.$i);
            $ServiceTax = $this->input->post('ServiceTax'.$i);
            $EduCess = $this->input->post('EduCess'.$i);
            $SecHighTax = $this->input->post('SecHighTax'.$i);
            $KrishiTax = $this->input->post('KrishiTax'.$i);
            $SwachhTax = $this->input->post('SwachhTax'.$i);
            $CostCenter	= $this->input->post('costCode'.$i);

            $TotalOrderValue = $this->input->post('TotalOrderValue'.$i);
            $SkipInsert = "False";
            if( count($comma_separated) > 0)
            {
                for($j = 1; $j < count($comma_separated); $j++)
                {
                    $deletedRow = 	$comma_separated[$j];

                    if($deletedRow == $i  )
                    {
                        $SkipInsert = "True";
                        break;
                    }

                }
            }
            if($SkipInsert == "False")
            {
            
            	//add requistion details
            	$ReqDetails = array('ReqNo'=>$RegNo, 'MaterialCode'=>$MaterialCode,'Quantity'=>$Quantity,'Status'=>$RegDetailsStatus,'UpdatedBy'=>$CreateBy,'UpdatedOn'=>$createddt);
								
      					
								$ReqDetQuery = $this->requistion_model->addRequistionDetails($ReqDetails);
								
							
							
                $POLineItemList = array('PONO'=>$PONO, 'ReqNo'=>$RegNo,'MaterialCode'=>$MaterialCode,'Quantity'=>$Quantity,'Rate'=>$itemRate,'Status'=>$LineItemStatus,'CreatedBy'=>$CreateBy,'CreatedDate'=>$createddt,'CostCenterCode'=>$CostCenter);
                $POLineItem = $this->purchaseorder_model->addPOLineItem($POLineItemList);
                $LineItemNo = '';
                if(count($POLineItem)>0)
                {
                    $LineItemNo =  $POLineItem[0]['LineItemNo'];
                }


                if(trim($POType) == SERVICE )
                {
                  // echo 'Success';

                    $ServiceTaxList = array('LineItemNo'=>$LineItemNo, 'ServiceTax'=>$ServiceTax,'EducessTax'=>$EduCess,'SecHigherEducessTax'=>$SecHighTax,'KrishiKalyantax'=>$KrishiTax,'SwachhBharattax'=>$SwachhTax,'TotalValue'=>$TotalOrderValue, 'CreatedBy'=>$CreateBy,'CreatedDate'=>$createddt);
                      
                    $ServiceTax = $this->purchaseorder_model->addServiceTax($ServiceTaxList);

                }
            }
            else {

            }

        }

        if($POStatus == REQ_DRAFT)
					{
					  echo 'Emergency Service Purchase Order Saved Successfully!The PO NO Is: '.$PONO;
					 
					}
					else
					{
						echo 'Emergency Service Purchase Order Created Successfully!The PO NO Is: '.$PONO;
					
					}
       

    }
    
    
     
   //This used to Create Revenue Emergency Purchase Order
	function addNewRevenuePurchaseOrder()
	{
		
				$POdt =$this->input->post('PODate');
				$PODate =  $this->getDateformat($POdt);
                $SupplierID = $this->input->post('drpSupplier');  
				$DeliveryAddr = $this->input->post('DeliveryAddr');
				$dt = $this->input->post('Deliverydt');
				 $DeliveryOption = $this->input->post('DateRange');
        if($DeliveryOption==1){
         $Deliverydt = '';
        $DeliverySchedule = $this->input->post('Scheduleby');
        }
         else{
         $Deliverydt = $this->getDateformat($dt);
        $DeliverySchedule = '';
        }
		$CostCenterName = $this->input->post('CostCenterName');
				$POType = $this->input->post('POType');
				$PoRange = $this->input->post('txtPoRange');
				
				$SpcialInstruction = $this->input->post('TextSpcialInstruction');
				$TotalOrderValueSummary = $this->input->post('txtTotalOrderValueSummary');
			    $POStatus = $this->input->post('TextStatus');

                $CreateBy = $this->session->userdata ( 'userId' );
				$RowCount =  $this->input->post('TextRowCount'); 
				$DeletedRow =  $this->input->post('TextDeletedRowCount'); 
				  $RequestedBy = $this->session->userdata ('EmpID');
       $ReqStatus =  REQITEM_Emergency_PO_CREATED;
     
				
				$comma_separated = explode(':', $DeletedRow);	
				
				$dt = new DateTime('now', new DateTimeZone('Asia/Kolkata'));				
				$createddt =  $dt->format('Y-m-d H:i:s');
				
				//add requistion 
				 	$Request = array('ReqType'=>$POType, 'Requestedby'=>$RequestedBy,'CostCenterCode'=>$CostCenterName,'Status'=>$ReqStatus,'Comments'=>$SpcialInstruction,'ReqDate'=>$createddt,'CreatedDate'=>$createddt,'CreatedBy'=>$CreateBy);
			
					$Req  = $this->requistion_model->addRequistion($Request);
			
					$RegNo='';
					 if(count($Req)>0)
        {
            $RegNo =  $Req[0]['ReqNo'];
        }
				// PO Master
				$POList = array('SupplierID'=>$SupplierID, 'TotalOrderValue'=>$TotalOrderValueSummary,'PODate'=>$PODate,'Status'=>$POStatus,'DeliverySchedule'=>$DeliverySchedule,'DeliveryOption'=>$DeliveryOption,'PORange'=>$PoRange,'ServiceDescription'=>$SpcialInstruction,'CreatedBy'=>$CreateBy,'DeliveryAddress'=>$DeliveryAddr,'DeliveryDate'=>$Deliverydt,'CreatedDate'=>$createddt );
					
					$POMaster  = $this->purchaseorder_model->addPOMaster($POList);
					
					 $PONO = '';
					if(count($POMaster)>0)
					{
					 $PONO =  $POMaster[0]['PONO'];
					}
					
					// PO Line Items
					 $RegDetailsStatus=REQITEM_POCREATED;
					$LineItemStatus = REQITEM_NEW;
					
						for ($i = 1; $i <= $RowCount; $i++)
							{	
							
								$MaterialCode = $this->input->post('materialCode'.$i);
								$Quantity = $this->input->post('quantity'.$i); 
								$Reqnumber = $this->input->post('Reqnumber'.$i);
								$itemRate = $this->input->post('itemRate'.$i);

								$DiscountType = $this->input->post('DisType'.$i);
								$DiscountValue = $this->input->post('DisVal'.$i); 
								$AfterDiscount = $this->input->post('AfterDisVal'.$i);
								$PackagingOption = $this->input->post('PackOption'.$i);
								$PackagingType = $this->input->post('PackType'.$i);
								$PackagingValue = $this->input->post('PackVal'.$i); 
								$AfterPackagingValue = $this->input->post('AfterPackVal'.$i);
								$ExciseOption = $this->input->post('ExciseOption'.$i);
								$ExciseValue = $this->input->post('ExciseVal'.$i);
								$AfterExciseValue = $this->input->post('AfterExciseVal'.$i); 
								$VatOption = $this->input->post('VatOption'.$i);
								$VatValue = $this->input->post('VatVal'.$i);
								$AfterVatValue = $this->input->post('AfterVatVal'.$i);
								$CSTOption = $this->input->post('CSTOption'.$i); 
								$CSTValue = $this->input->post('CSTVal'.$i);
								$AfterCSTValue = $this->input->post('AfterCSTVal'.$i);
								$GSTValue = $this->input->post('GSTVal'.$i);
								$AfterGSTValue = $this->input->post('AfterGSTVal'.$i); 
								$OtherTaxValue = $this->input->post('OtherTaxVal'.$i);
								$AfterOtherTaxValue = $this->input->post('AfterOtherTaxVal'.$i);
								$FreightType = $this->input->post('FreightType'.$i);
								$FreightValue = $this->input->post('FreightVal'.$i); 
								$AfterFreightValue = $this->input->post('AfterFreightVal'.$i);
								$InsuranceValue = $this->input->post('Insval'.$i);
								$TotalOrderValue = $this->input->post('TotalOrderValue'.$i);							
								$CostCenter	= $this->input->post('costCode'.$i);
								
								$SkipInsert = "False";				 
								if( count($comma_separated) > 0)
								{
								   for($j = 1; $j < count($comma_separated); $j++)
								   {	
									  $deletedRow = 	$comma_separated[$j]	;
									
									  if($deletedRow == $i  )
									  {
										  $SkipInsert = "True";
										  break;
									  }						 
									  
									}
								 }
								 if($SkipInsert == "False")
									{
	//add requistion details
            	$ReqDetails = array('ReqNo'=>$RegNo, 'MaterialCode'=>$MaterialCode,'Quantity'=>$Quantity,'Status'=>$RegDetailsStatus,'UpdatedBy'=>$CreateBy,'UpdatedOn'=>$createddt);
								
      				
								$ReqDetQuery = $this->requistion_model->addRequistionDetails($ReqDetails);										
										
										$POLineItemList = array('PONO'=>$PONO, 'ReqNo'=>$RegNo,'MaterialCode'=>$MaterialCode,'Quantity'=>$Quantity,'Rate'=>$itemRate,'Status'=>$LineItemStatus,'CreatedBy'=>$CreateBy,'CreatedDate'=>$createddt,'CostCenterCode'=>$CostCenter);
							
										$POLineItem = $this->purchaseorder_model->addPOLineItem($POLineItemList);
							
										$LineItemNo = '';
										if(count($POLineItem)>0)
										{
											$LineItemNo =  $POLineItem[0]['LineItemNo'];
										}
										//echo $LineItemNo; 
										
										if(trim($POType) == REVENUE )
										{
										//	echo 'Success';
										$RevenueTaxList = array('LineItemNo'=>$LineItemNo, 'DiscountType'=>$DiscountType,'DiscountValue'=>$DiscountValue,'AfterDiscount'=>$AfterDiscount,'PackagingType'=>$PackagingType,'PackagingValue'=>$PackagingValue,'PackagingCalulatedOn'=>$PackagingOption,'AfterPackagingValue'=>$AfterPackagingValue,'FreightType'=>$FreightType, 'FreightValue'=>$FreightValue,'AfterFreightValue'=>$AfterFreightValue,'ExciseDuty'=>$ExciseValue,'ExciseDutyCalulatedOn'=>$ExciseOption,'AfterExciseDuty'=>$AfterExciseValue,'Vat'=>$VatValue,'AfterVAT'=>$AfterVatValue,'VatCalulatedOn'=>$VatOption, 'CST'=>$CSTValue,'AfterCST'=>$AfterCSTValue,'CSTCalulatedOn'=>$CSTOption,'GST'=>$GSTValue,'AfterGST'=>$AfterGSTValue,'OtherTaxes'=>$OtherTaxValue,'AfterOtherTaxes'=>$AfterOtherTaxValue,'Insurance'=>$InsuranceValue,'TotalValue'=>$TotalOrderValue, 'CreatedBy'=>$CreateBy,'CreatedDate'=>$createddt);
										
										$RevenueList = $this->purchaseorder_model->addRevenueTax($RevenueTaxList);
										//echo 'Revenue tax Success';
										}
								}
								
							}							
					echo 'Purchase Order Created Successfully! PO Number Is: '.$PONO ;
					
	}


    /**
     * This function is used to load the purchaseorder list
     */
    function PurchaseOrderList()
    {

        $this->load->library('pagination');

        $count = $this->purchaseorder_model->purchaseorderListingCount('');

        $returns = $this->paginationCompress ( "purchaseorderListing/", $count, 5 );

        //$this->purchaseorder_model->UpdateRequistItemStatus();
        $this->purchaseorder_model->UpdateRequistionStatus();
        $data['POData'] =  $this->purchaseorder_model->purchaseorderListing();

        $this->global['pageTitle'] = 'Siddharth : Purchase Orders';

        $this->loadViews("POlist", $this->global, $data, NULL);

    }
    function  Req_validate($selectValue)
    {
        //echo 'select_validate  method called';
        // 'none' is the first option and the text says something like "-Choose one-"
        if(strlen($selectValue) == 0)
        {
            $this->form_validation->set_message('Req_validate', 'Please Select Requisition Number to Create PO.');
            return false;
        }
        else // user picked something
        {
            return true;
        }
    }

    /**
     * This function used to show the Purchase Order Screen
     */

    function CreatePurchaseOrder()
    {


        $this->load->library('form_validation');

        $this->form_validation->set_rules('txtReqNo', 'txtReqNo', 'callback_Req_validate');

        if($this->form_validation->run() == FALSE)
        {
            $this->requisition();
            //echo 'Validate method called';
        }
        else
        {

            $this->global['pageTitle'] = 'Siddharth : Purchase order form';
            $data['TaxType'] = $this->purchaseorder_model->getConfigValue('C006');
            $data['FreightType'] = $this->purchaseorder_model->getConfigValue('C018');
            $data['Suplist'] = $this->purchaseorder_model->getSupplierName();
            $SelectedReq = json_decode($this->input->post('txtReqNo'));
            $Req = $SelectedReq->Req;
            $data['ReqList'] = $Req ;
            $ReqArray = array();
            $ReqType = '';
            $result = array();

            foreach ($Req as $SID):
                $ReqArray[] 	=  $SID->ReqNo  ;
                $result[] = $this->purchaseorder_model->getRawPOMaterialList($SID->ReqNo);
                $ReqType =  $SID->ReqType;
                //echo $SID->ReqNo;

            endforeach;
            //print_r ($result);
            $dt = new DateTime('now', new DateTimeZone('Asia/Kolkata'));
            $Year =  $dt->format('Y');
            $data['CostList'] = $this->purchaseorder_model->getCostCenterbyRequist('',$Year,$ReqType);
            $data['MaterialList'] = $result; //$this->purchaseorder_model->getRawMaterialList($ReqType,$ReqArray);
            //print_r ($data['MaterialList']);
            $data['RequistionDetails'] = $this->purchaseorder_model->getRequistDetails($ReqArray);
            $data['CompanyDetails'] =  $this->purchaseorder_model->getCompanyInformation();
            $data['MaxPODate'] =  $this->purchaseorder_model->getLastCreatedPODate();

            $ViewName = '';
            if($ReqType  == REVENUE)
            {
                $ViewName = 'Purchaseorder';
            }
            else if($ReqType  == SERVICE)
            {
                $ViewName = 'servicePurchaseorder';
            }
            $this->loadViews($ViewName, $this->global,$data, NULL);
        }
    }

    function CreatePOPrint()
    {
        $PONO =  $_GET['PONO'];
        $ReqType =  $_GET['ReqType'];

        if($ReqType == SERVICE)
        {
            $this ->servicepoprint($PONO);

        }
        else if($ReqType == REVENUE)
        {
            $this ->revenuepoprint($PONO);

        }
    }
    //To View/Update Purchase Order
    function EditPurchaseOrder()
    {
        $PONO =  $_GET['PONO'];
        $ReqType =  $_GET['ReqType'];
        $dt = new DateTime('now', new DateTimeZone('Asia/Kolkata'));
        $Year =  $dt->format('Y');
        $data['CostList'] = $this->purchaseorder_model->getCostCenterbyRequist('',$Year,$ReqType);
        $Req = $this->purchaseorder_model->getRequistionNoFromPO($PONO);
        $data['ReqList'] = $Req ;
        $result = array();
        $ReqArray = array();
        foreach ($Req as $SID):
            $ReqArray[] 	=  $SID->ReqNo  ;
            $result[] = $this->purchaseorder_model->getRawPOMaterialList($SID->ReqNo);
        endforeach;
        $data['MaterialList'] = $result;//$this->purchaseorder_model->getRawMaterialList($ReqType,$ReqArray);
        $data['Suplist'] = $this->purchaseorder_model->getSupplierName();
        $data['RequistionDetails'] = $this->purchaseorder_model->getRequistDetails($ReqArray);
        $data['POMaster'] = $this->purchaseorder_model->GetServicePurchaseOrder($PONO);
        $data['MaxPODate'] =  $this->purchaseorder_model->getLastCreatedPODate();
        $data['TaxType'] = $this->purchaseorder_model->getConfigValue('C006');
        $data['FreightType'] = $this->purchaseorder_model->getConfigValue('C018');
        if($ReqType == SERVICE)
        {

            $data['POItem'] = $this->purchaseorder_model->GetServicePurchaseOrderDetails($PONO);
            $this->global['pageTitle'] = 'Siddharth : Edit Service Purchase order form';
            $this->loadViews("EditservicePurchaseorder", $this->global,  $data, NULL);
        }
        else if($ReqType == REVENUE)
        {

            $data['POItem'] = $this->purchaseorder_model->GetRevenuePurchaseOrderDetails($PONO);
            $this->global['pageTitle'] = 'Siddharth : Edit Revenue Purchase order form';
            $this->loadViews("editRevenuepurchaseorder", $this->global,  $data, NULL);
        }

    }

    // To get the Material value based on the MaterialCode
    function getDetailsforReq()
    {


        $SearchFilter= $this->input->post('id');
        // $reqDate= $this->input->post('ReqDate');
        $DeptCode =  $SearchFilter[0];
        $MatType =  $SearchFilter[1];
        $ReqNo = $SearchFilter[2];
        // $ReqDetai = $this->purchaseorder_model->getRequistDetails( $EmpID );

        $CostList = $this->requistion_model->GetCostCenterByDept( $DeptCode);

        $HTML = "<option value='-1'>Select Cost center</option>";
        $BudAmount = "";
        if(count($CostList) > 0)
        {
            for ($j = 0; $j < count($CostList); $j++)
            {
                $Code = $CostList[$j]['CostCenterCode'];
                $Name = $CostList[$j]['CostCenterName'];
                $HTML .="<option value='".$Code."'>".$Code."-".$Name."</option>";
            }
        }
        $MaterialDetails = $this->purchaseorder_model->getRawMaterialListForPO($MatType,$ReqNo);

        $HTML1 = "<option value='-1'>Select Material Type</option>";

        if(count($MaterialDetails) > 0)
        {
            for ($j = 0; $j < count($MaterialDetails); $j++)
            {
                $Code = $MaterialDetails[$j]['MaterialCode'];
                $Name = $MaterialDetails[$j]['MaterialName'];
                $HTML1 .="<option value='".$Code."'>".$Code."-".$Name."</option>";

            }

        }
        // print_r($HTML1);

        die(json_encode(array('MatDetail' =>$HTML1,'Cost'=> $HTML)));
    }
    /* This method to get the status based on the Department selection in th
    */
    function getStatusByDepartment()
    {
        $DepId =  $this->input->post('id');

        $data = $this->purchaseorder_model->getStatusByDepartment($DepId);

        $HTML = "<option value='0'>Select Requistion Status</option>";
        if(count($data) > 0)
        {
            for ($j = 0; $j < count($data); $j++)
            {
                $Code = $data[$j]['StatusCode'];
                $Name = $data[$j]['StatusName'];
                $HTML .="<option value='".$Code."'>".$Code."-".$Name."</option>";
            }
        }
        //echo $HTML;
        die(json_encode(array('depStaus' => $HTML)));
    }

    // To get the available Budget Amount
    function AvilBudgetAmount()
    {
        $SearchFilter= $this->input->post('id');
        // $reqDate= $this->input->post('ReqDate');
        $CostCode =  $SearchFilter[0];
        $ReqType =  $SearchFilter[1];
        print_r($SearchFilter);
        $CostCode=  $this->input->post('id');
        $dt = new DateTime('now', new DateTimeZone('Asia/Kolkata'));

        $Year =  $dt->format('Y');
        $this->load->model('purchaseorder_model');
        $result = $this->purchaseorder_model->GetAvailableBudgetAmount($CostCode,$Year,$ReqType);
        //print_r($result);
        $AvilBudAmt = '';
        if(count($result)>0)
        {
            $AvilBudAmt = $result[0]['BudgetAmount'] -  $result[0]['Totalvalue'];
        }

        //  echo 'Test';
        print_r($AvilBudAmt);
        //die(json_encode(array('Cost' => $AvilBudAmt)));
    }


    function getDateformat($Val)
    {
        $date = new DateTime($Val,new DateTimeZone('Asia/Kolkata'));
        //  print_r($date);
        $retDate = $date->format('Y-m-d H:i:s');
        return $retDate;
    }
    /* Method to get the Requistion list based on the search filter*/

    function SearchListofRequistion()
    {
        $SearchFilter= $this->input->post('id');
        // $reqDate= $this->input->post('ReqDate');
        $DEPCode =  $SearchFilter[0];
        $Status =  $SearchFilter[1];
        $rng =   $SearchFilter[2];
        // $ToDate =  $SearchFilter[3];
        $FromDate ='';
        $ToDate = '';
        // echo $rng;
        $Dt =  explode("-",$rng);
        //  print_r( $Dt);
        if(count( $Dt)>1)
        {
            $FDate = $Dt[0];
            $TDate = $Dt[1];
            $FromDate =  $this->getDateformat($FDate);
            $ToDate =  $this->getDateformat($TDate);
        }
        //echo $FromDate;
        // print_r($Dt);
        $result =  $this->purchaseorder_model->getRequistionListbySearch($DEPCode,$Status,$FromDate,$ToDate);


        $HTML="";
        for ($i = 0; $i < count($result); $i++)
        {
            $SNo = $i + 1;
            $ReqNo = $result[$i]['ReqNo'];
            $ReqType = $result[$i]['ReqType'];
            $Reqedby = $result[$i]['FirstName'];
            $ReqDate = $result[$i]['ReqDate'];
            $Status = $result[$i]['StatusName'];
            $Department = $result[$i]['DepartmentName'];
            $Designation = $result[$i]['Designation'];

            $HTML.="<tr  id='".$i."'>
							<td align='left'><input type='checkbox' name='chk'".$i." id='chk'".$i."/></td>
							<td align='left'><a data-toggle='modal' data-target='#myModal'><u>". $ReqNo."</u></a></td>
							   
							<td align='left'>".$ReqType."</td>
							
							<td align='left'>".$Reqedby."</td>	
							<td align='left'>".$ReqDate."</td>	
							<td align='left'>".$Status."</td>	
							<td align='left'>".$Department."</td>	
							<td align='left'>".$Designation."</td>							
							</tr>";
        }
        //print_r( $HTML);
        die(json_encode(array('ReqList' =>$HTML)));
    }


    /* To View the request details*/
    function ListPORequistion()
    {
        $ReqNo= $this->input->post('id');
        $result =  $this->requistion_model->getRequistItemList($ReqNo);
        $ReqList = $this->requistion_model->getRequistDetails($ReqNo);
        $DepNo = $ReqList[0]['DEPCode'];
        $CostList = $this->requistion_model->GetCostCenterByDept($DepNo);
        $HTML="";
        for ($i = 0; $i < count($result); $i++)
        {
            $SNo = $i + 1;
            $MaterialCode = $result[$i]['MaterialCode'];
            $MaterialName = $result[$i]['MaterialName'];
            $UOM = $result[$i]['UOM'];
            $Quantity = $result[$i]['Quantity'];
            $HTML.="<tr  id='".$i."'>
							<td align='left'>".$SNo."</td>
							<td align='left'>". $MaterialCode."</td>
													                      
							<td align='left'>".$MaterialName."</td>
							
							<td align='left'>".$UOM."</td>	
							<td align='left'>".$Quantity."</td>								
							</tr>";

            //$index =  $index + 1;

        }

        $CostCenter = "<option value='-1'>Select Cost center</option>";
        if(count($CostList) > 0)
        {
            for ($j = 0; $j < count($CostList); $j++)
            {
                $Code = $CostList[$j]['CostCenterCode'];
                $Name = $CostList[$j]['CostCenterName'];
                $CostCenter .="<option value='".$Code."'>".$Code."-".$Name."</option>";
            }
        }
        //echo $HTML;
        //echo $CostCenter;
        die(json_encode(array('Items' =>$HTML,'Requist'=>$ReqList,'Cost'=>$CostCenter)));
    }

    //This used to Create Revenue Purchase Order
    function addNewPurchaseOrder()
    {
        $POdt =$this->input->post('PODate');
        $PODate =  $this->getDateformat($POdt);
        $SupplierID = $this->input->post('drpSupplier');
        $DeliveryAddr = $this->input->post('DeliveryAddr');
        $dt = $this->input->post('Deliverydt');
        $Deliverydt = $this->getDateformat($dt);
        $POType = $this->input->post('POType');
        $PoRange = $this->input->post('txtPoRange');

        $SpcialInstruction = $this->input->post('txtSpcialInstruction');
        $TotalOrderValueSummary = $this->input->post('txtTotalOrderValueSummary');
        $POStatus = $this->input->post('txtStatus');

        $CreateBy = $this->session->userdata ( 'userId' );
        $RowCount =  $this->input->post('txtRowCount');
        $DeletedRow =  $this->input->post('txtDeletedRow');

        $comma_separated = explode(':', $DeletedRow);

        $dt = new DateTime('now', new DateTimeZone('Asia/Kolkata'));
        $createddt =  $dt->format('Y-m-d H:i:s');
        // PO Master
        $POList = array('SupplierID'=>$SupplierID, 'TotalOrderValue'=>$TotalOrderValueSummary,'PODate'=>$PODate,'Status'=>$POStatus,'PORange'=>$PoRange,'ServiceDescription'=>$SpcialInstruction,'CreatedBy'=>$CreateBy,'DeliveryAddress'=>$DeliveryAddr,'DeliveryDate'=>$Deliverydt,'CreatedDate'=>$createddt );

        $POMaster  = $this->purchaseorder_model->addPOMaster($POList);

        $PONO = '';
        if(count($POMaster)>0)
        {
            $PONO =  $POMaster[0]['PONO'];
        }
        //echo $PONO;
        //echo $POType;
        // PO Line Items
        $LineItemStatus = REQITEM_NEW;
        //echo ' test:'.REVENUE;
        //echo $RowCount;
        for ($i = 1; $i <= $RowCount; $i++)
        {

            $MaterialCode = $this->input->post('materialCode'.$i);
            $Quantity = $this->input->post('quantity'.$i);
            $Reqnumber = $this->input->post('Reqnumber'.$i);
            $itemRate = $this->input->post('itemRate'.$i);

            $DiscountType = $this->input->post('DisType'.$i);
            $DiscountValue = $this->input->post('DisVal'.$i);
            $AfterDiscount = $this->input->post('AfterDisVal'.$i);
            $PackagingOption = $this->input->post('PackOption'.$i);
            $PackagingType = $this->input->post('PackType'.$i);
            $PackagingValue = $this->input->post('PackVal'.$i);
            $AfterPackagingValue = $this->input->post('AfterPackVal'.$i);
            $ExciseOption = $this->input->post('ExciseOption'.$i);
            $ExciseValue = $this->input->post('ExciseVal'.$i);
            $AfterExciseValue = $this->input->post('AfterExciseVal'.$i);
            $VatOption = $this->input->post('VatOption'.$i);
            $VatValue = $this->input->post('VatVal'.$i);
            $AfterVatValue = $this->input->post('AfterVatVal'.$i);
            $CSTOption = $this->input->post('CSTOption'.$i);
            $CSTValue = $this->input->post('CSTVal'.$i);
            $AfterCSTValue = $this->input->post('AfterCSTVal'.$i);
            $GSTValue = $this->input->post('GSTVal'.$i);
            $AfterGSTValue = $this->input->post('AfterGSTVal'.$i);
            $OtherTaxValue = $this->input->post('OtherTaxVal'.$i);
            $AfterOtherTaxValue = $this->input->post('AfterOtherTaxVal'.$i);
            $FreightType = $this->input->post('FreightType'.$i);
            $FreightValue = $this->input->post('FreightVal'.$i);
            $AfterFreightValue = $this->input->post('AfterFreightVal'.$i);
            $InsuranceValue = $this->input->post('Insval'.$i);
            $TotalOrderValue = $this->input->post('TotalOrderValue'.$i);
            $CostCenter	= $this->input->post('costCode'.$i);

            $SkipInsert = "False";
            if( count($comma_separated) > 0)
            {
                for($j = 1; $j < count($comma_separated); $j++)
                {
                    $deletedRow = 	$comma_separated[$j]	;

                    if($deletedRow == $i  )
                    {
                        $SkipInsert = "True";
                        break;
                    }

                }
            }
            if($SkipInsert == "False")
            {
                $POLineItemList = array('PONO'=>$PONO, 'ReqNo'=>$Reqnumber,'MaterialCode'=>$MaterialCode,'Quantity'=>$Quantity,'Rate'=>$itemRate,'Status'=>$LineItemStatus,'CreatedBy'=>$CreateBy,'CreatedDate'=>$createddt,'CostCenterCode'=>$CostCenter);

                $POLineItem = $this->purchaseorder_model->addPOLineItem($POLineItemList);

                $LineItemNo = '';
                if(count($POLineItem)>0)
                {
                    $LineItemNo =  $POLineItem[0]['LineItemNo'];
                }
                //echo $LineItemNo;

                if(trim($POType) == REVENUE )
                {
                    //	echo 'Success';
                    $RevenueTaxList = array('LineItemNo'=>$LineItemNo, 'DiscountType'=>$DiscountType,'DiscountValue'=>$DiscountValue,'AfterDiscount'=>$AfterDiscount,'PackagingType'=>$PackagingType,'PackagingValue'=>$PackagingValue,'PackagingCalulatedOn'=>$PackagingOption,'AfterPackagingValue'=>$AfterPackagingValue,'FreightType'=>$FreightType, 'FreightValue'=>$FreightValue,'AfterFreightValue'=>$AfterFreightValue,'ExciseDuty'=>$ExciseValue,'ExciseDutyCalulatedOn'=>$ExciseOption,'AfterExciseDuty'=>$AfterExciseValue,'Vat'=>$VatValue,'AfterVAT'=>$AfterVatValue,'VatCalulatedOn'=>$VatOption, 'CST'=>$CSTValue,'AfterCST'=>$AfterCSTValue,'CSTCalulatedOn'=>$CSTOption,'GST'=>$GSTValue,'AfterGST'=>$AfterGSTValue,'OtherTaxes'=>$OtherTaxValue,'AfterOtherTaxes'=>$AfterOtherTaxValue,'Insurance'=>$InsuranceValue,'TotalValue'=>$TotalOrderValue, 'CreatedBy'=>$CreateBy,'CreatedDate'=>$createddt);

                    $RevenueList = $this->purchaseorder_model->addRevenueTax($RevenueTaxList);
                    //echo 'Revenue tax Success';
                }
            }

        }
        echo 'Purchase Order Created Successfully! PO Number Is: '.$PONO ;

    }
    //This used to Edit the Revenue Purchase Order
    function EditRevenuePurchaseOrder()
    {
        $PONO =$this->input->post('txtPONO');
        $POdt =$this->input->post('PODate');
        $PODate =  $this->getDateformat($POdt);
        $SupplierID = $this->input->post('drpSupplier');
        $DeliveryAddr = $this->input->post('txtDeliveryAddress');
        $dt = $this->input->post('Deliverydt');
        $Deliverydt = $this->getDateformat($dt);
        $POType = $this->input->post('POType');
        $PoRange = $this->input->post('txtPoRange');

        $SpcialInstruction = $this->input->post('SpcialInstruction');
        $TotalOrderValueSummary = $this->input->post('txtTotalOrderValueSummary');
        $POStatus = $this->input->post('txtStatus');

        $updatedBy = $this->session->userdata ( 'userId' );
        $RowCount =  $this->input->post('txtRowCount');
        $DeletedRow =  $this->input->post('txtDeletedRow');

        $comma_separated = explode(':', $DeletedRow);
        $dt = new DateTime('now', new DateTimeZone('Asia/Kolkata'));
        $updateddt =  $dt->format('Y-m-d H:i:s');
        // PO Master
        // PO Master
        $POList = array('SupplierID'=>$SupplierID, 'TotalOrderValue'=>$TotalOrderValueSummary,'PODate'=>$PODate,'Status'=>$POStatus,'ServiceDescription'=>$SpcialInstruction,'UpdateBY'=>$updatedBy,'DeliveryAddress'=>$DeliveryAddr,'DeliveryDate'=>$Deliverydt,'UpdatedOn'=>$updateddt );

        $POMaster  = $this->purchaseorder_model->updatePOMaster($PONO,$POList);

        $LineItemStatus = REQITEM_NEW;



        //echo $RowCount;
        for ($i = 1; $i <= $RowCount; $i++)
        {

            $MaterialCode = $this->input->post('materialCode'.$i);
            $Quantity = $this->input->post('quantity'.$i);
            $Reqnumber = $this->input->post('Reqnumber'.$i);
            $itemRate = $this->input->post('itemRate'.$i);

            $DiscountType = $this->input->post('DisType'.$i);
            $DiscountValue = $this->input->post('DisVal'.$i);
            $AfterDiscount = $this->input->post('AfterDisVal'.$i);
            $PackagingOption = $this->input->post('PackOption'.$i);
            $PackagingType = $this->input->post('PackType'.$i);
            $PackagingValue = $this->input->post('PackVal'.$i);
            $AfterPackagingValue = $this->input->post('AfterPackVal'.$i);
            $ExciseOption = $this->input->post('ExciseOption'.$i);
            $ExciseValue = $this->input->post('ExciseVal'.$i);
            $AfterExciseValue = $this->input->post('AfterExciseVal'.$i);
            $VatOption = $this->input->post('VatOption'.$i);
            $VatValue = $this->input->post('VatVal'.$i);
            $AfterVatValue = $this->input->post('AfterVatVal'.$i);
            $CSTOption = $this->input->post('CSTOption'.$i);
            $CSTValue = $this->input->post('CSTVal'.$i);
            $AfterCSTValue = $this->input->post('AfterCSTVal'.$i);
            $GSTValue = $this->input->post('GSTVal'.$i);
            $AfterGSTValue = $this->input->post('AfterGSTVal'.$i);
            $OtherTaxValue = $this->input->post('OtherTaxVal'.$i);
            $AfterOtherTaxValue = $this->input->post('AfterOtherTaxVal'.$i);
            $FreightType = $this->input->post('FreightType'.$i);
            $FreightValue = $this->input->post('FreightVal'.$i);
            $AfterFreightValue = $this->input->post('AfterFreightVal'.$i);
            $InsuranceValue = $this->input->post('Insval'.$i);
            $TotalOrderValue = $this->input->post('TotalOrderValue'.$i);
            $POLineItemNo = $this->input->post('LineItemNo'.$i);
            $CostCenter	= $this->input->post('costCode'.$i);
            $LineItemNo = '';


            $SkipInsert = "False";
            if( count($comma_separated) > 0)
            {
                for($j = 1; $j < count($comma_separated); $j++)
                {
                    $deletedRow = 	$comma_separated[$j]	;

                    if($deletedRow == $i  )
                    {
                        $SkipInsert = "True";
                        break;
                    }

                }
            }
            if($SkipInsert == "False")
            {
                if(strlen($POLineItemNo) == 0)
                {
                    $POLineItemList = array('PONO'=>$PONO, 'ReqNo'=>$Reqnumber,'MaterialCode'=>$MaterialCode,'Quantity'=>$Quantity,'Rate'=>$itemRate,'Status'=>$LineItemStatus,'CreatedBy'=>$updatedBy,'CreatedDate'=>$updateddt,'CostCenterCode'=>$CostCenter);
                    $POLineItem = $this->purchaseorder_model->addPOLineItem($POLineItemList);
                    if(count($POLineItem)>0)
                    {
                        $LineItemNo =  $POLineItem[0]['LineItemNo'];
                    }

                }
                else
                {
                    $LineItemNo = $POLineItemNo;

                    $POLineItemList = array('PONO'=>$PONO, 'ReqNo'=>$Reqnumber,'MaterialCode'=>$MaterialCode,'Quantity'=>$Quantity,'Rate'=>$itemRate,'Status'=>$LineItemStatus,'UpdateBY'=>$updatedBy,'UpdatedOn'=>$updateddt,'CostCenterCode'=>$CostCenter);
                    $POLineItem = $this->purchaseorder_model->updatePOLineItem($PONO,$POLineItemNo,$POLineItemList);

                }
                $isExists = $this->purchaseorder_model->LineItemExistsinRevenueTax($LineItemNo);
                if(count($isExists) == 0)
                {
                    $RevenueTaxList = array('LineItemNo'=>$LineItemNo, 'DiscountType'=>$DiscountType,'DiscountValue'=>$DiscountValue,'AfterDiscount'=>$AfterDiscount,'PackagingType'=>$PackagingType,'PackagingValue'=>$PackagingValue,'PackagingCalulatedOn'=>$PackagingOption,'AfterPackagingValue'=>$AfterPackagingValue,'FreightType'=>$FreightType, 'FreightValue'=>$FreightValue,'AfterFreightValue'=>$AfterFreightValue,'ExciseDuty'=>$ExciseValue,'ExciseDutyCalulatedOn'=>$ExciseOption,'AfterExciseDuty'=>$AfterExciseValue,'Vat'=>$VatValue,'AfterVAT'=>$AfterVatValue,'VatCalulatedOn'=>$VatOption, 'CST'=>$CSTValue,'AfterCST'=>$AfterCSTValue,'CSTCalulatedOn'=>$CSTOption,'GST'=>$GSTValue,'AfterGST'=>$AfterGSTValue,'OtherTaxes'=>$OtherTaxValue,'AfterOtherTaxes'=>$AfterOtherTaxValue,'Insurance'=>$InsuranceValue,'TotalValue'=>$TotalOrderValue, 'CreatedBy'=>$updatedBy,'CreatedDate'=>$updateddt);

                    $RevenueList = $this->purchaseorder_model->addRevenueTax($RevenueTaxList);

                }
                else
                {
                    $RevenueTaxList = array('DiscountType'=>$DiscountType,'DiscountValue'=>$DiscountValue,'AfterDiscount'=>$AfterDiscount,'PackagingType'=>$PackagingType,'PackagingValue'=>$PackagingValue,'PackagingCalulatedOn'=>$PackagingOption,'AfterPackagingValue'=>$AfterPackagingValue,'FreightType'=>$FreightType, 'FreightValue'=>$FreightValue,'AfterFreightValue'=>$AfterFreightValue,'ExciseDuty'=>$ExciseValue,'ExciseDutyCalulatedOn'=>$ExciseOption,'AfterExciseDuty'=>$AfterExciseValue,'Vat'=>$VatValue,'AfterVAT'=>$AfterVatValue,'VatCalulatedOn'=>$VatOption, 'CST'=>$CSTValue,'AfterCST'=>$AfterCSTValue,'CSTCalulatedOn'=>$CSTOption,'GST'=>$GSTValue,'AfterGST'=>$AfterGSTValue,'OtherTaxes'=>$OtherTaxValue,'AfterOtherTaxes'=>$AfterOtherTaxValue,'Insurance'=>$InsuranceValue,'TotalValue'=>$TotalOrderValue, 'UpdateBY'=>$updatedBy,'UpdatedOn'=>$updateddt);

                    $this->purchaseorder_model->updateRevenueTax($LineItemNo,$RevenueTaxList);

                }
            }

        }

        echo 'Purchase Order Updated Successfully! PO Number Is: '.$PONO ;
    }
    function pageNotFound()
    {
        $this->global['pageTitle'] = 'CodeInsect : 404 - Page Not Found';

        $this->loadViews("404", $this->global, NULL, NULL);
    }

    public function revenuepoprint($PONO)
    {
        // Load all views as normal


        //$PONO =   $_GET['PO'];

        $data['CompanyDetails'] =  $this->purchaseorder_model->getCompanyInformation();
        $data['POItem'] = $this->purchaseorder_model->GetRevenuePurchaseOrderDetailsForPDF($PONO);


        // Add header to pdf
        //$this->load->view('includes/pdfheader');

        // Load the pdf page with multiviews
        $this->load->View("revenuepopdf", $data);

        // Add header to pdf
        //$this->load->view('includes/pdffooter');

        // Get output html
        $php = $this->output->get_output();

        // Load library
        $this->load->library('dompdf_gen');

        // Convert to PDF
        $this->dompdf->load_html($php);
        $this->dompdf->render();
        $data['Attachment'] = FALSE;
        $this->dompdf->stream("RevenuePOReport.pdf",$data,$php);

    }
    public function servicepoprint($PONO)
    {

        //	$this->load->view('includes/pdfheader');

        // Load the pdf page with multiviews
        $data['CompanyDetails'] =  $this->purchaseorder_model->getCompanyInformation();
        $data['POItem'] = $this->purchaseorder_model->GetServicePurchaseOrderDetailsForPrint($PONO);

        $this->load->View("servicepopdf", $data);

        // Add header to pdf
        //$this->load->view('includes/pdffooter');

        // Get output html
        $php = $this->output->get_output();

        // Load library
        $this->load->library('dompdf_gen');

        // Convert to PDF
        $this->dompdf->load_html($php);
        $this->dompdf->render();
        $data['Attachment'] = FALSE;
        $this->dompdf->stream("ServicePOReport.pdf",$data,$php);

    }
    /**
     * This function used to load the Delete the Requistion Items
     */
    function DeletePODetails()
    {

        $ReqList=  $this->input->post('id');
        $LineItemNo = '';
        $ReqNo ='';
        $MaterialCode = '';
        $POType = '';
        if(count($ReqList) > 0)
        {
            $LineItemNo = $ReqList[0];
            $ReqNo =  $ReqList[1];
            $MaterialCode =  $ReqList[2];
            $POType = $ReqList[3];
        }
        // print_r($ReqList);


        If($POType == REVENUE)
        {
            $this->purchaseorder_model->DeletePORevenueTax($LineItemNo);
        }
        else If($POType == SERVICE)
        {
            $this->purchaseorder_model->DeletePOServiceTax($LineItemNo);
        }
        $this->purchaseorder_model->DeletePOLineItem($LineItemNo , $ReqNo,$MaterialCode);
        echo "Successfully Deleted the Line item".$LineItemNo;

    }
}

?>
