<?php

namespace backend\modules\tradingpartner\controllers;

use Yii;
use backend\modules\tradingpartner\models\TradingPartner;
use backend\modules\tradingpartner\models\TradingpartnerSearch;
use backend\modules\tradingpartner\models\TradingCarrier;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use backend\modules\activitylog\models\ActivityLog;
use backend\modules\tradingpartner\models\TradingpartnerSearchDel;
use common\models\getCommonFunctions;
use backend\modules\itemmaster\models\Itemmaster;
use backend\modules\salesorder\models\Salesorder;
use backend\modules\fulfillment\models\Fulfillment;
use backend\modules\invoice\models\Invoice;
use backend\modules\tradingpartner\models\TradingPartnerXmlMap;
use backend\modules\customer\models\Customer;

/**
 * TradingpartnerController implements the CRUD actions for tradingpartner model.
 */
class TradingpartnerController extends Controller
{
    public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete' => ['post'],
                ],
            ],
            'access' => [
                        'class' => \yii\filters\AccessControl::className(),
                        'rules' => [
                            // allow authenticated users
                            [
                                'allow' => true,
                                'roles' => ['@'],
                                'matchCallback' => function ($rule, $action) {
                                 $action =Yii::$app->controller->action->id;
                                    $flg = getCommonFunctions::isAccessible('RM_Trading_Partner',$action);
                                    return $flg;
                                }

                            ],
                            // everything else is denied
                        ],
                    ],
        ];
    }

    /**
     * Lists all tradingpartner models.
     * @return mixed
     */
    public function actionIndex()
    {
        $searchModel = new TradingpartnerSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

    /**
     * Displays a single tradingpartner model.
     * @param integer $id
     * @return mixed
     */
    public function actionView($id)
    {
		$tab = isset($_REQUEST['tab'])?$_REQUEST['tab']:'';
        $tab2 = isset($_REQUEST['tab2'])?$_REQUEST['tab2']:'';
		
        $activityModel = new ActivityLog(); 
        $logDetails = $activityModel->find()->where(['item_master_id'=>$id,'type'=>'tradingpartner'])->orderby('id DESC')->all();
		$carrierArr = TradingCarrier::find()->where(['is_delete'=>'0', 'trading_partner_id' => $id])->all();
        $SOmodel = new Salesorder();
        $FULmodel = new Fulfillment();
        $INVmodel = new Invoice();

        $sql = "SELECT  trading_partner_inventory_item_id,trading_partner_id_pk,item_master_id,inventory_qty,added_date,is_delete,is_active,inventory_overide FROM trading_partner_inventory_item WHERE is_delete = 0 AND trading_partner_id_pk = $id"; 
        $inventoryItemArr = Yii::$app->db->createCommand($sql)->queryAll();

        $sql1 = "SELECT trading_partner_pricing_item_id,trading_partner_id_pk,item_master_id,start_date,end_date,price_override,override_price_level,added_date,is_delete,is_active,item_rate FROM trading_partner_pricing_item WHERE is_delete = 0 AND trading_partner_id_pk = $id"; 
        $pricingItemArr = Yii::$app->db->createCommand($sql1)->queryAll();

        $tpitemDetails = "SELECT trading_partner_tp_item_details_id, trading_partner_id_pk, item_master_id, Vendor_Item, Buyer_Item, Override_Quantity, Quantity_Override, added_date, is_delete, is_active FROM trading_partner_tp_item_details WHERE is_delete = 0 AND trading_partner_id_pk = $id"; 
        $tpitemDetailsArr = Yii::$app->db->createCommand($tpitemDetails)->queryAll();

        $tpSoXmlMapSql = "SELECT tp_xml_map_id, trading_partner_id_fk, xml_map_type, xml_module, xml_tag,om_mapping_field,hard_code_values,sort_order, added_date FROM trading_partner_xml_map WHERE xml_map_type = 'SO_MAP' AND trading_partner_id_fk = $id ORDER BY sort_order ASC"; 
        $tpSoXmlMapArr = Yii::$app->db->createCommand($tpSoXmlMapSql)->queryAll();

        $tpFulXmlMapSql = "SELECT tp_xml_map_id, trading_partner_id_fk, xml_map_type,xml_module, xml_tag,om_mapping_field,hard_code_values,sort_order, added_date FROM trading_partner_xml_map WHERE xml_map_type = 'FULFILLMENT_MAP' AND trading_partner_id_fk = $id ORDER BY sort_order ASC"; 
        $tpFulXmlMapArr = Yii::$app->db->createCommand($tpFulXmlMapSql)->queryAll();

        $tpInvXmlMapSql = "SELECT tp_xml_map_id, trading_partner_id_fk, xml_map_type,xml_module, xml_tag,om_mapping_field,hard_code_values,sort_order, added_date FROM trading_partner_xml_map WHERE xml_map_type = 'INVOICE_MAP' AND trading_partner_id_fk = $id ORDER BY sort_order ASC"; 
        $tpInvXmlMapArr = Yii::$app->db->createCommand($tpInvXmlMapSql)->queryAll();
		
        return $this->render('view', [
            'model' => $this->findModel($id),
            'logDetails' => $logDetails,
			'carrierArr' => $carrierArr,
			'tab' => $tab,
            'tab2' => $tab2,
            'inventoryItemArr'=> $inventoryItemArr,
            'tpitemDetailsArr'=> $tpitemDetailsArr,
            'pricingItemArr' => $pricingItemArr,
            'SOmodel' => $SOmodel,
            'FULmodel' => $FULmodel,
            'INVmodel' => $INVmodel,
            'tpSoXmlMapArr' => $tpSoXmlMapArr,
            'tpFulXmlMapArr' => $tpFulXmlMapArr,
            'tpInvXmlMapArr' => $tpInvXmlMapArr
        ]);
    }


	public function actionAdd_carrier($tp_id)
    {
        $model = $this->findModel($tp_id);
		$parent_tp_id = isset($_REQUEST['tp_id'])?intval($_REQUEST['tp_id']):0; 

        if (isset($_POST['carrier_name']) && isset($_POST['carrier_method']))
		{
			$carrier = Yii::$app->db->createCommand()
                            ->insert('trading_carrier', [
                                     'trading_partner_id' => $parent_tp_id,
                                     'carrier_name' => $_POST['carrier_name'],
                                     'carrier_method' => $_POST['carrier_method'],
									 'incoming_scac' => $_POST['incoming_scac'],
									 'outgoing_scac' => $_POST['outgoing_scac'],
                                     'added_date' => date("Y-m-d H:i:s"),
									 'is_delete' => '0'])
                            ->execute();
			$session = Yii::$app->session;
			$session->set('successAddDeleteCarrier', 'Carrier added successfully.');
		}else{
            
            $carrierStr = '';
            $sql = "SELECT carrier_name FROM trading_carrier WHERE trading_partner_id = ".$parent_tp_id;
            $carrierArr = Yii::$app->db->createCommand($sql)->queryAll();
            if(is_array($carrierArr) > 0 && count($carrierArr) > 0){
              foreach ($carrierArr as $k1 => $v1) {
                  $carrierStr .= $v1['carrier_name'].", ";
              }
              $carrierStr = rtrim($carrierStr,", "); 
            }
            if(strlen($carrierStr) < 0){
               $carrierStr = "0" ;
            }

            $carrierMethodStr = '';
            $sql1 = "SELECT carrier_method FROM trading_carrier WHERE trading_partner_id = ".$parent_tp_id;
            $carrierMethodArr = Yii::$app->db->createCommand($sql1)->queryAll();
            if(is_array($carrierMethodArr) > 0 && count($carrierMethodArr) > 0){
              foreach ($carrierMethodArr as $k2 => $v2) {
                  $carrierMethodStr .= $v2['carrier_method'].", ";
              }
              $carrierMethodStr = rtrim($carrierMethodStr,", "); 
            }
            if(strlen($carrierMethodStr) < 0){
               $carrierMethodStr = "0" ;
            }

			return $this->renderPartial('_add_carrier', [
				'model' => $model,
				'parent_tp_id'=>$_REQUEST['tp_id'],
                'carrierStr'=>$carrierStr,
                'carrierMethodStr'=>$carrierMethodStr
			]);
		}
    }

    /**
     * Creates a new tradingpartner model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     * @return mixed
     */
    public function actionCreate()
    {
        $model = new TradingPartner();
      //  $model->is_email = 0;
        if ($model->load(Yii::$app->request->post())) {
            if($model->validate()){
                // $count = TradingPartner::find()->count();
                // $model->Trading_Partner_ID = 'T'.($count+1);
                $model->added_date = date("Y-m-d H:i:s"); 
                $model->Trading_Partner_Create_Date = date("Y-m-d H:i:s"); 
                $model->is_delete = 0;
               // $model->Vendor_ID = trim($_POST['Vendor_ID']) != ''?$_POST['Vendor_ID']:0;
                $model->Sales_Rep_Number = trim($_POST['Sales_Rep_Number']) != ''?$_POST['Sales_Rep_Number']:0;
                $model->save();

                $lastInsertID = Yii::$app->db->getLastInsertID();
                $command = Yii::$app->db->createCommand()
                            ->update('trading_partner', ['Trading_Partner_ID' => 'TP'.($lastInsertID)], 'trading_partner_id_pk='.$lastInsertID)
                            ->execute(); 

                $activityModel = new ActivityLog();
                $message = Yii::$app->user->identity->firstname.' Added Trading Partner '.$model->Trading_Partner_Name;
                $activityModel->logUserItemActivity(Yii::$app->user->id,'tradingpartner','Add',$message,$model->trading_partner_id_pk);

                return $this->redirect(['view', 'id' => $model->trading_partner_id_pk]);
            }else{
                return $this->render('create', [
                    'model' => $model,
                ]);
            }
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }

    /**
     * Updates an existing tradingpartner model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id
     * @return mixed
     */
    public function actionUpdate($id)
    {
        $model = $this->findModel($id);

        if ($model->load(Yii::$app->request->post())) {
            if($model->validate()){
                //$model->Vendor_ID = trim($_POST['Vendor_ID']) != ''?$_POST['Vendor_ID']:0;
                $model->Sales_Rep_Number = trim($_POST['Sales_Rep_Number']) != ''?$_POST['Sales_Rep_Number']:0;
                $model->save();

                $activityModel = new ActivityLog();
                $message = Yii::$app->user->identity->firstname.' Updated Trading Partner '.$model->Trading_Partner_Name;
                $activityModel->logUserItemActivity(Yii::$app->user->id,'tradingpartner','Add',$message,$model->trading_partner_id_pk);

                return $this->redirect(['view', 'id' => $model->trading_partner_id_pk]);
            }else{
                 return $this->render('update', [
                'model' => $model,
            ]);
            }
        } else {
            return $this->render('update', [
                'model' => $model,
            ]);
        }
    }

    /**
     * Deletes an existing tradingpartner model.
     * If deletion is successful, the browser will be redirected to the 'index' page.
     * @param integer $id
     * @return mixed
     */
    public function actionDelete($id)
    {
        //$this->findModel($id)->delete();

        $model = $this->findModel($id);
        $command = Yii::$app->db->createCommand()
                            ->update('trading_partner', ['is_delete' => '1'], 'trading_partner_id_pk ='.$id)
                            ->execute();
        $session = Yii::$app->session;
        $session->set('successDeleteRestore', 'Record deleted successfully.'); 

        $activityModel = new ActivityLog();
        $message = Yii::$app->user->identity->firstname.' Deleted Trading Partner '.$model->Trading_Partner_ID;
        $activityModel->logUserItemActivity(Yii::$app->user->id,'tradingpartner','Delete',$message,$model->trading_partner_id_pk);

        return $this->redirect(['index']);
    }

    public function actionRestore($id)
    {
        $model = $this->findModel($id);
        if(strlen(trim($id)) > 0){
            $command = Yii::$app->db->createCommand()
                            ->update('trading_partner', ['is_delete' => '0'], 'trading_partner_id_pk ='.$id)
                            ->execute();                 
            $session = Yii::$app->session;
            $session->set('successDeleteRestore', 'Record restored successfully.');

        $activityModel = new ActivityLog();
        $message = Yii::$app->user->identity->firstname.' Restored Trading Partner '.$model->Trading_Partner_ID;
        $activityModel->logUserItemActivity(Yii::$app->user->id,'vendor','Restore',$message,$model->trading_partner_id_pk);
        }  
        return $this->redirect(['index']);
    }

    public function actionDeletedlist()
    {
        $TradingpartnerSearchDel = new TradingpartnerSearchDel();
        $dataProviderDel = $TradingpartnerSearchDel->search(Yii::$app->request->queryParams);
        return $this->render('deletedlist', [
            'searchModel' => $TradingpartnerSearchDel,
            'dataProvider' => $dataProviderDel,
        ]);
    }

    /**
     * Finds the tradingpartner model based on its primary key value.
     * If the model is not found, a 404 HTTP exception will be thrown.
     * @param integer $id
     * @return tradingpartner the loaded model
     * @throws NotFoundHttpException if the model cannot be found
     */
    protected function findModel($id)
    {
        if (($model = tradingpartner::findOne($id)) !== null) {
            return $model;
        } else {
            throw new NotFoundHttpException('The requested page does not exist.');
        }
    }

    //bulk action
    public function actionBulkactions()
    {
        $model = new TradingPartner();
        if(isset($_POST['tAction']) && $_POST['tAction']!='')
        {
            $ids = '';
            if(isset($_POST['keylist']) && is_array($_POST['keylist']) && count($_POST['keylist'])>0)
            {
                $ids = implode(",",$_POST['keylist']);
            }
            switch($_POST['tAction'])
            {
                case 'Delete':                  
                //$model->deleteAll(['and','1=1', 'id in ('.$ids.')']);
                $model->updateAll(array('is_delete'=>1), 'trading_partner_id_pk in ('.$ids.')');
                break;
                case 'Active':                  
                $model->updateAll(array('is_active'=>1), 'trading_partner_id_pk in ('.$ids.')');
                break;
                case 'Inactive':                    
                $model->updateAll(array('is_active'=>0), 'trading_partner_id_pk in ('.$ids.')');
                break;
                default: break;
            }
        }
    }

    public function actionLists($id)
    {
    
        $count = \backend\modules\state\models\State::find()
                ->where(['state.country_id_fk' => $id, 'state.is_delete' => '0','is_active' => 1])
                ->orderby('state_name ASC')
                ->count();
     
        $states = \backend\modules\state\models\state::find()
                ->where(['state.country_id_fk' => $id, 'state.is_delete' => '0','is_active' => 1])
                ->orderby('state_name ASC')
                ->all();
            
    
        echo "<option>---- Select One ----</option>";
        if($count>0){
            
            foreach($states as $k=>$v){
                echo "<option value='".$v->state_id."'>".$v->state_name."</option>";
            }
        }
    }

    public function actionCompanyname($id)
    {
        if($id){
            echo getCommonFunctions::getFieldNameValue("sales_representative","Sales_Rep_Company","Sales_Representative_Fields_ID",$id);
        }
    }

    public function actionDelete_carrier(){ //delete_bulk_carrier
        $str = "ERR";
       $trading_partner_id_pk = isset($_REQUEST['trading_partner_id_pk'])?intval($_REQUEST['trading_partner_id_pk']):0;

       $carrier_id = isset($_REQUEST['carrier_id'])?intval($_REQUEST['carrier_id']):0;

        $carrier_name = isset($_REQUEST['carrier_name'])?intval($_REQUEST['carrier_name']):0;

        if($trading_partner_id_pk > 0 && $carrier_name > 0 && $carrier_id > 0){
            $command = Yii::$app->db->createCommand()
                        ->delete('trading_carrier', ['carrier_id' => $carrier_id])
                        ->execute();

            $activityModel = new ActivityLog();
            $carr_name = getCommonFunctions::getFieldNameValue("list_values","name","id",$carrier_name);
            $message = Yii::$app->user->identity->firstname.' Deleted Carrier '.$carr_name;
            $activityModel->logUserItemActivity(Yii::$app->user->id,'tradingpartner','delete',$message,$trading_partner_id_pk);
            return $str = "OK";
        }
    }

    public function actionDelete_bulk_carrier(){
        if(isset($_REQUEST['trading_partner_id_pk']) > 0 && isset($_REQUEST['carrierArr']) > 0){
            $trading_partner_id_pk = isset($_REQUEST['trading_partner_id_pk']) != ''?$_REQUEST['trading_partner_id_pk']:0;
            $carrierStr = implode(',',$_REQUEST['carrierArr']);
            if(strlen($carrierStr) < 0){
                $carrierStr = 0;
            }
            $command = Yii::$app->db->createCommand('DELETE FROM trading_carrier WHERE trading_partner_id = '.$trading_partner_id_pk.' AND carrier_name IN ('.$carrierStr.')')->execute();

            if($command > 0){
                $strFinal = '';
                $sql = "SELECT name FROM list_values WHERE id IN (".$carrierStr.")"; 
                $carrierNameArr = Yii::$app->db->createCommand($sql)->queryAll();
                if(is_array($carrierNameArr) && sizeof($carrierNameArr) > 0){
                    $strName = '';
                    foreach ($carrierNameArr as $key => $value) {
                        $strName .= $value['name'].',';
                    }
                    $strFinal = rtrim($strName,", ");
                }
                
                $activityModel = new ActivityLog();
                $message = Yii::$app->user->identity->firstname.' Deleted Carrier(s) "'.$strFinal.'"';
                $activityModel->logUserItemActivity(Yii::$app->user->id,'tradingpartner','delete',$message,$trading_partner_id_pk);
                return "OK";
            }
        }
    } 


    public function actionAdd_inventory_item()
    {
        if(isset($_REQUEST['inventory_qty']) && isset($_REQUEST['select_item']) && isset($_REQUEST['trading_partner_id_pk'])){
            $item_master_id = isset($_REQUEST['select_item'])?intval($_REQUEST['select_item']):0;
            $trading_partner_id_pk = isset($_REQUEST['tp_id'])?intval($_REQUEST['tp_id']):0;
            $subItems = Yii::$app->db->createCommand()
                ->insert('trading_partner_inventory_item', [
                         'trading_partner_id_pk' => $_REQUEST['trading_partner_id_pk'],
                         'item_master_id' => $_REQUEST['select_item'],
                         'inventory_qty' => $_REQUEST['inventory_qty'],
                         'is_delete' => 0,
                         'is_active' => 1,
                         'inventory_overide' => $_REQUEST['inventory_overide'],
                         'added_date' => date("Y-m-d H:i:s"),
                         ])
                ->execute();
                $itemInfo = Itemmaster::find()->where(['item_master_id' => $item_master_id])->one();
                $activityModel = new ActivityLog(); 
                $message = Yii::$app->user->identity->firstname.' Added Item "'.$itemInfo->Item_Number.'"';
                $activityModel->logUserItemActivity(Yii::$app->user->id,'tradingpartner','Item ',$message,$trading_partner_id_pk);
                echo "OK";
            
        }else{
            $tp_id = isset($_REQUEST['tp_id'])?intval($_REQUEST['tp_id']):0;
            return $this->renderPartial('_add_inventory_item', [
                'tp_id' => $tp_id
            ]);
        }
        
    }

    // function for the autocomplete event of item # in popup for inventory tab
    function actionGetitemhash(){
        $arr = array();
        $str = '';
            $searchText = isset($_REQUEST['itemNum'])?$_REQUEST['itemNum']:'';
            $trading_partner_id_pk = isset($_REQUEST['trading_partner_id_pk'])?$_REQUEST['trading_partner_id_pk']:'';
            if($searchText != ''){ 

                 $query = "SELECT item_master_id FROM trading_partner_inventory_item WHERE trading_partner_id_pk = ".$trading_partner_id_pk;
                $itemArr = Yii::$app->db->createCommand($query)->queryAll();

                if(count($itemArr) > 0 && is_array($itemArr)){
                    $str = '';
                    foreach ($itemArr as $key => $val) {
                        $str .= $val['item_master_id'].", ";
                    }
                    $str = rtrim($str,', ');
                }

                $sql = "SELECT item_master_id,Item_Number FROM item_master WHERE (Item_Number LIKE '".$searchText."%' AND item_master_id NOT IN ('".$str."')) AND is_delete = 0 AND is_active = 1";
                $result = Yii::$app->db->createCommand($sql)->queryAll();
                $i = 1;
                foreach ($result as $value) {
                    $arr[$i]['value'] = $value['item_master_id'];
                    $arr[$i]['label'] = $value['Item_Number'];
                    $i++;
            }
        }
        return json_encode($arr);
    }

    function actionDelete_items_from_inventory() {
        $trading_partner_inventory_item_id = trim($_REQUEST['trading_partner_inventory_item_id']) != ''?$_REQUEST['trading_partner_inventory_item_id']:0; 
        $trading_partner_id_pk = trim($_REQUEST['trading_partner_id_pk']) != ''?$_REQUEST['trading_partner_id_pk']:0;
        $item_master_id = trim($_REQUEST['item_master_id']) != ''?$_REQUEST['item_master_id']:0;
        if($trading_partner_inventory_item_id > 0 && $item_master_id > 0){
            $command = Yii::$app->db->createCommand()
                        ->delete('trading_partner_inventory_item', ['trading_partner_inventory_item_id' => $trading_partner_inventory_item_id,'item_master_id'=>$item_master_id])
                        ->execute();
            if($command > 0){
                $itemInfo = Itemmaster::find()->where(['item_master_id' => $item_master_id])->one();
                $activityModel = new ActivityLog();
                $message = Yii::$app->user->identity->firstname.' Deleted Item(s) "'.$itemInfo->Item_Number.'"';
                $activityModel->logUserItemActivity(Yii::$app->user->id,'salesorder','Item(s)',$message,$trading_partner_id_pk);
                return "OK";
            }
        }
    }

    function actionDelete_bulk_items_from_inventory(){
        $trading_partner_id_pk = trim($_REQUEST['trading_partner_id_pk']) != ''?$_REQUEST['trading_partner_id_pk']:0;
        if($trading_partner_id_pk > 0 && count($_REQUEST['itemArr'] > 0)){
            $itemStr = implode(',',$_REQUEST['itemArr']);
            if(strlen($itemStr) < 0){
                $itemStr = 0;
            }
            $command = Yii::$app->db->createCommand('DELETE FROM trading_partner_inventory_item WHERE trading_partner_id_pk = '.$trading_partner_id_pk.' AND item_master_id IN ('.$itemStr.')')
                                    ->execute();
            if($command > 0){
                $strFinal = '';
                $sql = "SELECT Item_Number FROM item_master WHERE item_master_id IN (".$itemStr.")"; 
                $itemNumArr = Yii::$app->db->createCommand($sql)->queryAll();
                if(is_array($itemNumArr) && sizeof($itemNumArr) > 0){
                    $strName = '';
                    foreach ($itemNumArr as $key => $value) {
                        $strName .= $value['Item_Number'].',';
                    }
                    $strFinal = rtrim($strName,", ");
                }
                
                $activityModel = new ActivityLog();
                $message = Yii::$app->user->identity->firstname.' Deleted Item(s) "'.$strFinal.'"';
                $activityModel->logUserItemActivity(Yii::$app->user->id,'tradingpartner','Item(s)',$message,$trading_partner_id_pk);
                return "OK";
            }
        }
    }


     // function for the autocomplete event of item # in popup for privcing tab
    function actionGetitemhashforpricing(){
        $arr = array();
         $str = 0;
            $searchText = isset($_REQUEST['itemNum'])?$_REQUEST['itemNum']:'';
            $trading_partner_id_pk = isset($_REQUEST['trading_partner_id_pk'])?$_REQUEST['trading_partner_id_pk']:'';
            if($searchText != ''){

                /* $query = "SELECT item_master_id FROM trading_partner_pricing_item WHERE trading_partner_id_pk = ".$trading_partner_id_pk;
                $itemArr = Yii::$app->db->createCommand($query)->queryAll();

                if(count($itemArr) > 0 && is_array($itemArr)){
                    foreach ($itemArr as $key => $val) {
                        $str .= $val['item_master_id'].", ";
                    }
                    $str = rtrim($str,', ');
                    if(strlen($str) == 0){
                       $str  = 0; 
                    }
                    
                // AND item_master_id NOT IN (".$str.")) 
                this code is commented because now we allow multiple item# in pricing overide tab.

                } */

                $sql = "SELECT item_master_id,Item_Number FROM item_master WHERE (Item_Number LIKE '".$searchText."%') AND is_delete = 0 AND is_active = 1";
                $result = Yii::$app->db->createCommand($sql)->queryAll();
                $i = 1;
                foreach ($result as $value) {
                    $arr[$i]['value'] = $value['item_master_id'];
                    $arr[$i]['label'] = $value['Item_Number'];
                    $i++;
            }
        }
        return json_encode($arr);
    }

    public function actionAdd_pricing_item()
    {
        if(isset($_REQUEST['start_date']) && isset($_REQUEST['end_date']) && isset($_REQUEST['override_price_level']) && isset($_REQUEST['select_item']) && isset($_REQUEST['trading_partner_id_pk'])){
            $item_master_id = isset($_REQUEST['select_item'])?intval($_REQUEST['select_item']):0;
            $trading_partner_id_pk = isset($_REQUEST['tp_id'])?intval($_REQUEST['tp_id']):0;
            $subItems = Yii::$app->db->createCommand()
                ->insert('trading_partner_pricing_item', [
                         'trading_partner_id_pk' => $_REQUEST['trading_partner_id_pk'],
                         'item_master_id' => $_REQUEST['select_item'], 
                         'start_date' => date('Y-m-d: H:i:s',strtotime($_REQUEST['start_date'])),
                         'end_date' => date('Y-m-d H:i:s',strtotime($_REQUEST['end_date'])),
                         'price_override' => $_REQUEST['price_overide'],
                         'item_rate' => $_REQUEST['item_rate'],
                         'override_price_level' => $_REQUEST['override_price_level'],
                         'is_delete' => 0,
                         'is_active' => 1,
                         'added_date' => date("Y-m-d H:i:s"),
                         ])
                ->execute();
                $itemInfo = Itemmaster::find()->where(['item_master_id' => $item_master_id])->one();
                $activityModel = new ActivityLog(); 
                $message = Yii::$app->user->identity->firstname.' Added Item "'.$itemInfo->Item_Number.'"';
                $activityModel->logUserItemActivity(Yii::$app->user->id,'tradingpartner','Item ',$message,$trading_partner_id_pk);
                echo "OK";
            
        }else{
            $tp_id = isset($_REQUEST['tp_id'])?intval($_REQUEST['tp_id']):0;
            return $this->renderPartial('_add_pricing_item', [
                'tp_id' => $tp_id
            ]);
        }
        
    }

    function actionDelete_items_from_pricing() { 
        $trading_partner_pricing_item_id = trim($_REQUEST['trading_partner_pricing_item_id']) != ''?$_REQUEST['trading_partner_pricing_item_id']:0; 
        $trading_partner_id_pk = trim($_REQUEST['trading_partner_id_pk']) != ''?$_REQUEST['trading_partner_id_pk']:0;
        $item_master_id = trim($_REQUEST['item_master_id']) != ''?$_REQUEST['item_master_id']:0;
        if($trading_partner_pricing_item_id > 0 && $item_master_id > 0){
            $command = Yii::$app->db->createCommand()
                        ->delete('trading_partner_pricing_item', ['trading_partner_pricing_item_id' => $trading_partner_pricing_item_id,'item_master_id'=>$item_master_id])
                        ->execute();
            if($command > 0){
                $itemInfo = Itemmaster::find()->where(['item_master_id' => $item_master_id])->one();
                $activityModel = new ActivityLog();
                $message = Yii::$app->user->identity->firstname.' Deleted Item(s) "'.$itemInfo->Item_Number.'"';
                $activityModel->logUserItemActivity(Yii::$app->user->id,'salesorder','Item(s)',$message,$trading_partner_id_pk);
                return "OK";
            }
        }
    }

    function actionDelete_bulk_items_from_pricing(){
        $trading_partner_id_pk = trim($_REQUEST['trading_partner_id_pk']) != ''?$_REQUEST['trading_partner_id_pk']:0;
        if($trading_partner_id_pk > 0 && count($_REQUEST['itemArr'] > 0)){
            $itemStr = implode(',',$_REQUEST['itemArr']);
            if(strlen($itemStr) < 0){
                $itemStr = 0;
            }
            $command = Yii::$app->db->createCommand('DELETE FROM trading_partner_pricing_item WHERE trading_partner_id_pk = '.$trading_partner_id_pk.' AND item_master_id IN ('.$itemStr.')')->execute();

            if($command > 0){
                $strFinal = '';
                $sql = "SELECT Item_Number FROM item_master WHERE item_master_id IN (".$itemStr.")"; 
                $itemNumArr = Yii::$app->db->createCommand($sql)->queryAll();
                if(is_array($itemNumArr) && sizeof($itemNumArr) > 0){
                    $strName = '';
                    foreach ($itemNumArr as $key => $value) {
                        $strName .= $value['Item_Number'].',';
                    }
                    $strFinal = rtrim($strName,", ");
                }
                
                $activityModel = new ActivityLog();
                $message = Yii::$app->user->identity->firstname.' Deleted Item(s) "'.$strFinal.'"';
                $activityModel->logUserItemActivity(Yii::$app->user->id,'tradingpartner','Item(s)',$message,$trading_partner_id_pk);
                return "OK";
            }
        }
    }

    function actionGetpricinglevelanditemrate(){

        $trading_partner_id_pk = trim($_REQUEST['trading_partner_id_pk']) != ''?$_REQUEST['trading_partner_id_pk']:0;
        $item_master_id = trim($_REQUEST['item_master_id']) != ''?$_REQUEST['item_master_id']:0;
        if($trading_partner_id_pk > 0 &&  $item_master_id > 0){
            $price = 0;
            $model = $this->findModel($trading_partner_id_pk);
            if($model->Pricing_Level > 0){
                $sql = 'SELECT price FROM pricing_master WHERE item_master_id = '.$item_master_id.' AND pricing_level_id = '.$model->Pricing_Level;
                $result = Yii::$app->db->createCommand($sql)->queryOne();
                if($result['price'] != ''){
                    $price = $result['price'];
                }else{
                    $item_masterModel = Itemmaster::find()->where(['item_master_id' => $item_master_id])->one();
                    if($item_masterModel->Unit_Cost > 0){
                        $price = $item_masterModel->Unit_Cost;
                    }else{
                        $price = 0;
                    }
                }   

            }else{
                $model->Pricing_Level = 0;
            }
            echo '<input type="hidden" name="price_level_id_of_tp" id="price_level_id_of_tp" value="'.$model->Pricing_Level.'" />
                <div class="form-group col-sm-12">
                    <label class="control-label col-sm-3">Price Level</label>
                    <div class="col-sm-8">
                        <input type="text" readonly="true" class="form-control" name="price_level" id="price_level" value="'.getCommonFunctions::getFieldNameValue("list_values","name","id",$model->Pricing_Level).'" >
                    </div>
                </div>
                <div class="form-group col-sm-12">
                    <label class="control-label col-sm-3">Item Rate</label>
                    <div class="col-sm-8">
                        <input type="text" readonly="true" class="form-control" name="item_rate_in_pricing" id="item_rate_in_pricing" value="'.$price.'" >
                    </div>
                </div>';
        }
    }

    function actionGet_vendor_number_and_name(){
        $arr = array();
            $searchText = isset($_REQUEST['Vendor_Num'])?$_REQUEST['Vendor_Num']:'';
            if($searchText != ''){ 
                $sql = "SELECT vendor_id,Vendor_Number,Vendor_Name FROM vendor WHERE (Vendor_Number LIKE '".$searchText."%' OR Vendor_Name LIKE '".$searchText."%') AND is_delete = 0 AND is_active = 1";
                $result = Yii::$app->db->createCommand($sql)->queryAll();
                $i = 1;
                foreach ($result as $value) {
                    $arr[$i]['value'] = $value['vendor_id'];
                    $arr[$i]['label'] = $value['Vendor_Number'].':'.$value['Vendor_Name'];
                    $i++;
            }
        }
        return json_encode($arr);
    }

    function actionGet_sales_rep_number_and_name(){
        $arr = array();
            $searchText = isset($_REQUEST['Sales_Num'])?$_REQUEST['Sales_Num']:'';
            if($searchText != ''){ 
                $sql = "SELECT Sales_Representative_Fields_ID,Sales_Rep_Number, Sales_Rep_Company FROM sales_representative WHERE (Sales_Rep_Number LIKE '".$searchText."%' OR Sales_Rep_Company LIKE '".$searchText."%') AND is_delete = 0 AND is_active = 1";
                $result = Yii::$app->db->createCommand($sql)->queryAll();
                $i = 1;
                foreach ($result as $value) {
                    $arr[$i]['value'] = $value['Sales_Representative_Fields_ID'];
                    $arr[$i]['label'] = $value['Sales_Rep_Number'].':'.$value['Sales_Rep_Company'];
                    $i++;
            }
    }
         return json_encode($arr);
    } //pricing_date_unique


    /***********************************************/
    public function actionAdd_tp_item_details()
    {
        if(isset($_REQUEST['Vendor_Item']) && isset($_REQUEST['Buyer_Item']) && isset($_REQUEST['trading_partner_id_pk']) && isset($_REQUEST['select_item']))
        {
            $item_master_id = isset($_REQUEST['select_item'])?intval($_REQUEST['select_item']):0;
            $Buyer_Item = isset($_REQUEST['Buyer_Item'])?($_REQUEST['Buyer_Item']):'';
            $Vendor_Item = isset($_REQUEST['Vendor_Item'])?($_REQUEST['Vendor_Item']):'';
            $trading_partner_id_pk = isset($_REQUEST['tp_id'])?intval($_REQUEST['tp_id']):0;

            $subItems = Yii::$app->db->createCommand()
                ->insert('trading_partner_tp_item_details', [
                         'trading_partner_id_pk' => $_REQUEST['trading_partner_id_pk'],
                         'item_master_id' => $_REQUEST['select_item'],
                         'Override_Quantity' => $_REQUEST['Override_Quantity'],
                         'Vendor_Item' => $_REQUEST['Vendor_Item'],
                         'Buyer_Item' => $_REQUEST['Buyer_Item'],
                         'is_delete' => 0,
                         'is_active' => 1,
                         'Quantity_Override' => $_REQUEST['Quantity_Override'],
                         'added_date' => date("Y-m-d H:i:s"),
                         ])->execute();

                $itemInfo = Itemmaster::find()->where(['item_master_id' => $item_master_id])->one();
                $activityModel = new ActivityLog(); 
                $message = Yii::$app->user->identity->firstname.' Added Item "'.$itemInfo->Item_Number.'"';
                $activityModel->logUserItemActivity(Yii::$app->user->id,'tradingpartner','Add TP Item Details',$message,$trading_partner_id_pk);
                echo "OK";
        }
        else
        {
            $tp_id = isset($_REQUEST['tp_id'])?intval($_REQUEST['tp_id']):0;
            return $this->renderPartial('_add_tp_item_details', [
                'tp_id' => $tp_id
            ]);
        }
    }
     /***********************************************/
    function actionDelete_tp_item_details() 
    {
        $trading_partner_tp_item_details_id = trim($_REQUEST['trading_partner_tp_item_details_id']) != ''?$_REQUEST['trading_partner_tp_item_details_id']:0; 
        $trading_partner_id_pk = trim($_REQUEST['trading_partner_id_pk']) != ''?$_REQUEST['trading_partner_id_pk']:0;
        $item_master_id = trim($_REQUEST['item_master_id']) != ''?$_REQUEST['item_master_id']:0;

        if($trading_partner_tp_item_details_id > 0 && $trading_partner_id_pk > 0)
        {
            $command = Yii::$app->db->createCommand()
                        ->delete('trading_partner_tp_item_details', ['trading_partner_tp_item_details_id' => $trading_partner_tp_item_details_id,'item_master_id'=>$item_master_id])
                        ->execute();
            if($command > 0)
            {
                $itemInfo = Itemmaster::find()->where(['item_master_id' => $item_master_id])->one();
                $activityModel = new ActivityLog();
                $message = Yii::$app->user->identity->firstname.' Deleted Item(s) "'.$itemInfo->Item_Number.'"';
                $activityModel->logUserItemActivity(Yii::$app->user->id,'tradingpartner','Delete TP Item Details',$message,$trading_partner_id_pk);
                return "OK";
            }
        }
    }
     /***********************************************/
    function actionDelete_bulk_tp_item_details()
    {
        $trading_partner_id_pk = trim($_REQUEST['trading_partner_id_pk']) != ''?$_REQUEST['trading_partner_id_pk']:0;

        if($trading_partner_id_pk > 0 && count($_REQUEST['itemArr'] > 0))
        {
            $itemStr = implode(',',$_REQUEST['itemArr']);
            if(strlen($itemStr) < 0)
            {
                $itemStr = 0;
            }

            $command = Yii::$app->db->createCommand('DELETE FROM trading_partner_tp_item_details WHERE trading_partner_id_pk = '.$trading_partner_id_pk.' AND item_master_id IN ('.$itemStr.')')
                                    ->execute();

            if($command > 0)
            {
                $strFinal = '';
                $sql = "SELECT Item_Number FROM item_master WHERE item_master_id IN (".$itemStr.")"; 
                $itemNumArr = Yii::$app->db->createCommand($sql)->queryAll();
                if(is_array($itemNumArr) && sizeof($itemNumArr) > 0){
                    $strName = '';
                    foreach ($itemNumArr as $key => $value) {
                        $strName .= $value['Item_Number'].',';
                    }
                    $strFinal = rtrim($strName,", ");
                }
                
                $activityModel = new ActivityLog();
                $message = Yii::$app->user->identity->firstname.' Deleted Item(s) "'.$strFinal.'"';
                $activityModel->logUserItemActivity(Yii::$app->user->id,'tradingpartner','Bulk Delete TP Item Details',$message,$trading_partner_id_pk);
                return "OK";
            }
        }
    }
     /***********************************************/
    // XML Mapping Function starts here
    public function actionAdd_tp_xmlmap_details()
    {
        $xmlmapObj = new TradingPartnerXmlMap();
        $tp_id = isset($_REQUEST['tp_id'])?intval($_REQUEST['tp_id']):0;
        $xml_map_type = isset($_REQUEST['xml_map_type'])?$_REQUEST['xml_map_type']:'';
        $xml_tag = isset($_REQUEST['xml_tag'])?($_REQUEST['xml_tag']):'';
        $om_mapping_field = isset($_REQUEST['om_mapping_field'])?($_REQUEST['om_mapping_field']):'';
        $groupName = isset($_REQUEST['groupName'])?($_REQUEST['groupName']):'';
        $hard_code_values = isset($_REQUEST['hard_code_values'])?($_REQUEST['hard_code_values']):'';

        $SalesOrderAttributes = array(
                            array("db_key"=>"Bill_to_Address_1","db_value"=>"Bill To Address 1","db_grp"=>"Customer"),
                            array("db_key"=>"Bill_to_Address_2","db_value"=>"Bill To Address 2","db_grp"=>"Customer"),
                            array("db_key"=>"Bill_to_City","db_value"=>"Bill To  City","db_grp"=>"Customer"),
                            array("db_key"=>"Bill_to_Country","db_value"=>"Bill To  Country","db_grp"=>"Customer"),
                            array("db_key"=>"Bill_to_Customer_Company","db_value"=>"Bill To Customer Company","db_grp"=>"Customer"),
                            array("db_key"=>"Bill_to_Customer_Name","db_value"=>"Bill To Customer Name","db_grp"=>"Customer"),
                            array("db_key"=>"Bill_to_Email","db_value"=>"Bill To  Email","db_grp"=>"Customer"),
                            array("db_key"=>"Bill_to_Phone","db_value"=>"Bill To  Phone","db_grp"=>"Customer"),
                            array("db_key"=>"Bill_to_Postal_Code","db_value"=>"Bill To  Postal  Code","db_grp"=>"Customer"),
                            array("db_key"=>"Bill_to_State","db_value"=>"Bill To  State","db_grp"=>"Customer"),
                            array("db_key"=>"Buyer_Item_Qualifier","db_value"=>"Buyer Item Qualifier","db_grp"=>"SO Items"),
                            array("db_key"=>"Commited_Qty","db_value"=>"Commited  Qty","db_grp"=>"SO Items"),
                            array("db_key"=>"Customer_Number","db_value"=>"Customer  Number","db_grp"=>"Customer"),
                            array("db_key"=>"Customer_Order","db_value"=>"Customer Order #","db_grp"=>"Sales Order"),
                            array("db_key"=>"customerid","db_value"=>"Customer ID","db_grp"=>"Customer"),
                            array("db_key"=>"EDI_ID","db_value"=>"EDI ID","db_grp"=>"Sales Order"),
                            array("db_key"=>"Fulfilled_Qty","db_value"=>"Fulfilled Qty","db_grp"=>"SO Items"),
                            array("db_key"=>"Internal_Control","db_value"=>"Internal Control #","db_grp"=>"Sales Order"),
                            array("db_key"=>"Internal_Vendor","db_value"=>"Internal Vendor #","db_grp"=>"Sales Order"),
                            array("db_key"=>"Invoiced_Qty","db_value"=>"Invoiced  Qty","db_grp"=>"SO Items"),
                            array("db_key"=>"Item_Rate","db_value"=>"Item  Rate","db_grp"=>"SO Items"),
                            array("db_key"=>"Item_Number","db_value"=>"Item #","db_grp"=>"SO Items"),
                            array("db_key"=>"OM_Create_Date","db_value"=>"OM Create Date","db_grp"=>"Sales Order"),
                            array("db_key"=>"Order_Channel","db_value"=>"Order  Channel","db_grp"=>"Sales Order"),
                            array("db_key"=>"Order_Status","db_value"=>"Order  Status","db_grp"=>"Sales Order"),
                            array("db_key"=>"Other_TP_Number","db_value"=>"Other  TP #","db_grp"=>"Sales Order"),
                            array("db_key"=>"Pricing_Tier","db_value"=>"Pricing  Tier","db_grp"=>"SO Items"),
                            array("db_key"=>"Promised_Delivery_Date","db_value"=>"Promised Delivery Date","db_grp"=>"Sales Order"),
                            array("db_key"=>"Requested_Ship_Date","db_value"=>"Requested Ship Date","db_grp"=>"Sales Order"),
                            array("db_key"=>"Sales_Order_Qty","db_value"=>"Sales  Order  Qty","db_grp"=>"SO Items"),
                            array("db_key"=>"Sales_Rep_Comission_Amount","db_value"=>"Sales  Rep  Comission  Amount","db_grp"=>"Sales Order"),
                            array("db_key"=>"Sales_Rep_Number","db_value"=>"Sales Rep #","db_grp"=>"Sales Order"),
                            array("db_key"=>"Ship_Carrier","db_value"=>"Ship  Carrier","db_grp"=>"Sales Order"),
                            array("db_key"=>"Ship_From_Location","db_value"=>"Ship  From  Location","db_grp"=>"Sales Order"),
                            array("db_key"=>"Ship_Method","db_value"=>"Ship  Method","db_grp"=>"Sales Order"),
                            array("db_key"=>"Ship_Date","db_value"=>"Ship  Date","db_grp"=>"Sales Order"),
                            array("db_key"=>"Ship_Window_Remaining","db_value"=>"Ship  Window  Remaining","db_grp"=>"Sales Order"),
                            array("db_key"=>"Ship_to_Address_1","db_value"=>"Ship To  Address 1","db_grp"=>"Customer"),
                            array("db_key"=>"Ship_to_Address_2","db_value"=>"Ship To  Address 2","db_grp"=>"Customer"),
                            array("db_key"=>"Ship_to_City","db_value"=>"Ship To  City","db_grp"=>"Customer"),
                            array("db_key"=>"Ship_to_Country","db_value"=>"Ship To  Country","db_grp"=>"Customer"),
                            array("db_key"=>"Ship_to_Customer_Company","db_value"=>"Ship To  Customer  Company","db_grp"=>"Customer"),
                            array("db_key"=>"Ship_to_Customer_Name","db_value"=>"Ship To Customer Name","db_grp"=>"Customer"),
                            array("db_key"=>"Ship_to_Email","db_value"=>"Ship To  Email","db_grp"=>"Customer"),
                            array("db_key"=>"Ship_to_Phone","db_value"=>"Ship To  Phone","db_grp"=>"Customer"),
                            array("db_key"=>"Ship_to_Postal_Code","db_value"=>"Ship To  Postal  Code","db_grp"=>"Customer"),
                            array("db_key"=>"Ship_to_State","db_value"=>"Ship To  State","db_grp"=>"Customer"),
                            array("db_key"=>"TP_Create_Date","db_value"=>"TP Create Date","db_grp"=>"Sales Order"),
                            array("db_key"=>"TP_PO_Number","db_value"=>"TP PO #","db_grp"=>"Sales Order"),
                            array("db_key"=>"Vendor_Item_Qualifier","db_value"=>"Vendor Item Qualifier","db_grp"=>"SO Items"),
                            array("db_key"=>"TP_Item_Rate","db_value" => "TP Item Rate","db_grp"=>"SO Items"),
                            array("db_key"=>"Buyer_Item_Number","db_value" => "Buyer Item #","db_grp"=>"SO Items"),
                            array("db_key"=>"Incoming_scac","db_value" => "Incoming SCAC","db_grp"=>"Sales Order"),
                        );

        switch($xml_map_type)
        {
            case 'SO_MAP':
                    $SOAttributes = $SalesOrderAttributes;
                    //asort($SOAttributes);
                    usort($SOAttributes, function ($elem1, $elem2) {
                         return strcmp($elem1['db_value'], $elem2['db_value']);
                    });
                    break;
            case 'FULFILLMENT_MAP':
                    
                    $SOAttributes1 = array(
                        array("db_key"=>"Fulfillment_Create_Date","db_value" =>"Fulfillment Create Date","db_grp"=>"Fulfillment"),
                        array("db_key"=>"Fulfillment_Status","db_value" =>"Fulfillment Status","db_grp"=>"Fulfillment"),
                        array("db_key"=>"Fulfillment_Number","db_value" =>"Fulfillment #","db_grp"=>"Fulfillment"),
                        array("db_key"=>"fulfilment_time","db_value" =>"Fulfillment Finalize Date","db_grp"=>"Fulfillment"),
                        array("db_key"=>"Outgoing_SCAC","db_value" =>"Outgoing SCAC","db_grp"=>"Fulfillment"),
                        array("db_key"=>"Tracking_Number","db_value" =>"Tracking #","db_grp"=>"Fulfillment"),
                        array("db_key"=>"trading_partner_name","db_value" =>"Trading Partner Name","db_grp"=>"Fulfillment"),
                        array("db_key"=>"Shipment_L","db_value" => "Shipment L","db_grp"=>"Fulfillment"),
                        array("db_key"=>"Shipment_W","db_value" => "Shipment W","db_grp"=>"Fulfillment"),
                        array("db_key"=>"Shipment_H","db_value" => "Shipment H","db_grp"=>"Fulfillment"),
                        array("db_key"=>"Shipment_Weight","db_value" => "Shipment Weight","db_grp"=>"Fulfillment"),
                        array("db_key"=>"Shipment_Cost","db_value" => "Shipment Cost","db_grp"=>"Fulfillment")
                        );

                    $SOAttributes = array_merge($SOAttributes1,$SalesOrderAttributes);
                    //asort($SOAttributes);
                    usort($SOAttributes, function ($elem1, $elem2) {
                         return strcmp($elem1['db_value'], $elem2['db_value']);
                    });
                    break;
            case 'INVOICE_MAP':
                $invAttributes = array( 
                    array("db_key"=>"Customer_Bill_To_Address_1","db_value"=>"Customer Bill To Address 1", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Bill_To_Address_2","db_value"=>"Customer Bill To Address 2", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Bill_To_City","db_value"=>"Customer Bill To City", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Bill_To_Company","db_value"=>"Customer Bill To Company", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Bill_To_Country","db_value"=>"Customer Bill To Country", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Bill_To_Email","db_value"=>"Customer Bill To Email", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Bill_To_Name","db_value"=>"Customer Bill To Name", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Bill_To_Phone","db_value"=>"Customer Bill To Phone", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Bill_To_Postal_Code","db_value"=>"Customer Bill To Postal Code", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Number","db_value"=>"Customer Number", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Ship_To_Address_1","db_value"=>"Customer Ship To Address 1", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Ship_To_Address_2","db_value"=>"Customer Ship To Address 2", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Ship_To_City","db_value"=>"Customer Ship To City", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Ship_To_Company","db_value"=>"Customer Ship To Company", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Ship_To_Country","db_value"=>"Customer Ship To Country", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Ship_To_Email","db_value"=>"Customer Ship To Email", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Ship_To_Name","db_value"=>"Customer Ship To Name", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Ship_To_Phone_Number","db_value"=>"Customer Ship To Phone Number", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Ship_To_Postal_Code","db_value"=>"Customer Ship To Postal Code", "db_grp"=>"Invoice"),
                    array("db_key"=>"Customer_Ship_To_State","db_value"=>"Customer Ship To State", "db_grp"=>"Invoice"),
                    array("db_key"=>"customer_id","db_value"=>"Customer ID", "db_grp"=>"Invoice"),
                    array("db_key"=>"Invoice_Create_Date","db_value"=>"Invoice Create Date", "db_grp"=>"Invoice"),
                    array("db_key"=>"Invoice_Status","db_value"=>"Invoice Status", "db_grp"=>"Invoice"),
                    array("db_key"=>"invoice_id","db_value"=>"Invoice ID", "db_grp"=>"Invoice"),
                    array("db_key"=>"Order_Type","db_value"=>"Order Type", "db_grp"=>"Invoice"),
                    array("db_key"=>"Other_TP_Number","db_value"=>"Other TP Number", "db_grp"=>"Invoice"),
                    array("db_key"=>"Outgoing_SCAC","db_value"=>"Outgoing SCAC", "db_grp"=>"Invoice"),
                    array("db_key"=>"Ship_Carrier","db_value"=>"Ship Carrier", "db_grp"=>"Invoice"),
                    array("db_key"=>"Ship_Method","db_value"=>"Ship Method", "db_grp"=>"Invoice"),
                    array("db_key"=>"SO_Order_ID","db_value"=>"SO Order ID", "db_grp"=>"Invoice"),
                    array("db_key"=>"SO_Order_Number","db_value"=>"SO Order Number", "db_grp"=>"Invoice"),
                    array("db_key"=>"TP_PO_Number","db_value"=>"TP PO #", "db_grp"=>"Invoice"),
                    array("db_key"=>"Terms","db_value"=>"Terms", "db_grp"=>"Invoice"),
                    array("db_key"=>"TP_Bill_To_Address_1","db_value"=>"TP Bill To Address 1", "db_grp"=>"Invoice"),
                    array("db_key"=>"TP_Bill_To_Address_2","db_value"=>"TP Bill To Address 2", "db_grp"=>"Invoice"),
                    array("db_key"=>"TP_Bill_To_City","db_value"=>"TP Bill To City", "db_grp"=>"Invoice"),
                    array("db_key"=>"TP_Bill_To_Company","db_value"=>"TP Bill To Company", "db_grp"=>"Invoice"),
                    array("db_key"=>"TP_Bill_To_Country","db_value"=>"TP Bill To Country", "db_grp"=>"Invoice"),
                    array("db_key"=>"TP_Bill_To_Email","db_value"=>"TP Bill To Email", "db_grp"=>"Invoice"),
                    array("db_key"=>"TP_Bill_To_Name","db_value"=>"TP Bill To Name", "db_grp"=>"Invoice"),
                    array("db_key"=>"TP_Bill_To_Phone","db_value"=>"TP Bill To Phone", "db_grp"=>"Invoice"),
                    array("db_key"=>"TP_Bill_To_Postal_Code","db_value"=>"TP Bill To Postal Code", "db_grp"=>"Invoice"),
                    array("db_key"=>"Tracking_Number","db_value"=>"Tracking Number", "db_grp"=>"Invoice"),
                    array("db_key"=>"Trading_Partner_ID","db_value"=>"Trading Partner ID", "db_grp"=>"Invoice"),
                    array("db_key"=>"Trading_Partner_Name","db_value"=>"Trading Partner Name", "db_grp"=>"Invoice"),
                    array("db_key"=>"trading_partner_id_pk","db_value"=>"Trading Partner ID PK", "db_grp"=>"Invoice"));
                    //$SOmodel = new Invoice();
                    //$SOAttributes = $SOmodel->attributeLabels();
                    //asort($SOAttributes);
                    $SOAttributes = $invAttributes;
                    usort($SOAttributes, function ($elem1, $elem2) {
                         return strcmp($elem1['db_value'], $elem2['db_value']);
                    });
                    break;
            default:
                    $SOAttributes = $SalesOrderAttributes;
                    asort($SOAttributes);
                    break;
        }

        if($xml_tag!='' && ($om_mapping_field!='' || $hard_code_values!='')) 
        {
            if($tp_id>0 && $xml_map_type!='')
            {
                $subItems = Yii::$app->db->createCommand()
                    ->insert('trading_partner_xml_map', [
                             'trading_partner_id_fk' => $tp_id,
                             'xml_map_type' => $xml_map_type,
                             'xml_tag' => $xml_tag,
                             'om_mapping_field' => $om_mapping_field,
                             'xml_module'=>$groupName,
                             'hard_code_values'=>$hard_code_values,
                             'added_date' => date("Y-m-d H:i:s"),
                             ])->execute();

                $activityModel = new ActivityLog(); 
                $message = Yii::$app->user->identity->firstname.' Added XML Mapping for SO Field "'.$om_mapping_field.'"';
                $activityModel->logUserItemActivity(Yii::$app->user->id,'tradingpartner','Add TP XML Mapping Details',$message,$tp_id);
                echo "OK";
            }
        }else{
            return $this->renderPartial('_add_tp_xmlmap_details', [
                'tp_id' => $tp_id,
                'SOAttributes' => $SOAttributes,
                'xmlmapObj' => $xmlmapObj,
                'xml_map_type' => $xml_map_type
            ]);
        }
    }// XML Mapping Function ends here
     /***********************************************/
    function actionDelete_bulk_so_xmlmap_items(){
        $trading_partner_id_pk = trim($_REQUEST['trading_partner_id_pk']) != ''?$_REQUEST['trading_partner_id_pk']:0;
        if($trading_partner_id_pk > 0 && count($_REQUEST['itemArr'] > 0)){
            $itemStr = implode(',',$_REQUEST['itemArr']);
            if(strlen($itemStr) < 0){
                $itemStr = 0;
            }
            $command = Yii::$app->db->createCommand('DELETE FROM trading_partner_xml_map WHERE trading_partner_id_fk = '.$trading_partner_id_pk.' AND tp_xml_map_id IN ('.$itemStr.')')->execute();

            if($command > 0){
                
                $activityModel = new ActivityLog();
                $message = Yii::$app->user->identity->firstname.' Deleted SO Map Field(s) "';
                $activityModel->logUserItemActivity(Yii::$app->user->id,'tradingpartner','So Map Field(s)',$message,$trading_partner_id_pk);
                return "OK";
            }
        }
    }
    /***********************************************/
    function actionSave_sortorder_so_xmlmap_items(){
        $trading_partner_id_pk = trim($_REQUEST['trading_partner_id_pk']) != ''?$_REQUEST['trading_partner_id_pk']:0;
        $xml_map_type = isset($_REQUEST['xml_map_type'])?$_REQUEST['xml_map_type']:'';
        $str_sorting = isset($_REQUEST['str_sorting'])?$_REQUEST['str_sorting']:'';
        if($str_sorting)
        {
            $str_sorting = rtrim($str_sorting,"||");
            $ItemsArr = explode("||",$str_sorting);
            if(is_array($ItemsArr) && count($ItemsArr)>0)
            {
                foreach ($ItemsArr as $key => $value) {
                    $srtOrd = explode("=>", $value);
                    $command = Yii::$app->db->createCommand('UPDATE trading_partner_xml_map SET sort_order="'.$srtOrd[1].'" WHERE trading_partner_id_fk = '.$trading_partner_id_pk.' AND tp_xml_map_id ="'.$srtOrd[0].'"')->execute();
                }
                return "OK";
            }
        }
    }
    /***********************************************/

}
