<?php
class Warehouse_TakeStockController extends Ec_Controller_Action
{
    public function preDispatch()
    {
        $this->tplDirectory = "warehouse/views/take_stock/";
        $this->serviceClass = new Service_TakeStock();
    }

    public function listAction()
    {
        if ($this->_request->isPost()) {
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);

            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $return = array(
                "state" => 0,
                "message" => "No Data"
            );

            $params = $this->_request->getParams();

            $condition = $this->serviceClass->getMatchFields($params);

            $count = $this->serviceClass->getByCondition($condition, 'count(*)');
            $return['total'] = $count;

            if ($count) {
                $showFields = array(
                    'ts_code',
                    'warehouse_id',
                    'user_id',
                    'ts_last_update_user_id',
                    'ts_status',
                    'ts_add_time',
                    'ts_update_time',
                    'ts_id',
                );
                $showFields = $this->serviceClass->getFieldsAlias($showFields);
                $rows = $this->serviceClass->getByCondition($condition, $showFields, $pageSize, $page, array('ts_id desc'));
                $return['kvWarehouse'] = Common_DataCache::getWarehouseSimple();
                $return['kvStatus'] = Service_TakeStockProcess::getStatusKV();
                $return['kvUser'] = Service_User::getKV();
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['message'] = "";
            }
            die(Zend_Json::encode($return));
        }
        $warehouseSimple = Common_DataCache::getWarehouseSimple();
        $this->view->kvWarehouse = $warehouseSimple;
        $this->view->kvWarehouseJson = Zend_Json::encode($warehouseSimple);
        $statusKV = Service_TakeStockProcess::getStatusKV();
        $this->view->kvStatus = $statusKV;
        $this->view->kvStatusJson = Zend_Json::encode($statusKV);
        $this->view->kvUserJson = Zend_Json::encode(Service_User::getKV());
        echo Ec::renderTpl($this->tplDirectory . "take_stock_index.tpl", 'layout');
    }

    public function getByJsonAction()
    {
        $result = array('state' => 0, 'message' => 'Fail', 'data' => array());
        $paramId = $this->_request->getParam('paramId', '');
        if (!empty($paramId) && $rows = $this->serviceClass->getByField($paramId, 'ts_id')) {
            $rows = $this->serviceClass->getVirtualFields($rows);
            $result = array('state' => 1, 'message' => '', 'data' => $rows);
        }
        die(Zend_Json::encode($result));
    }

    public function deleteAction()
    {
        $result = array(
            "state" => 0,
            "message" => "Fail."
        );
        if ($this->_request->isPost()) {
            $paramId = $this->_request->getPost('paramId');
            if (!empty($paramId)) {
                if ($this->serviceClass->delete($paramId)) {
                    $result['state'] = 1;
                    $result['message'] = 'Success.';
                }
            }
        }
        die(Zend_Json::encode($result));
    }
    
    /* public function createAction() {
    	if ($this->_request->isPost()) {
    		$response = array('state'=>0, 'message'=>'');
    		$warehouse_id = intval(trim($this->_request->getParam('warehouse_id')));
    		$user_id = $this->_request->getParam('user_id');
    		$ib_ids = $this->_request->getParam('ib_ids');
    		$is_product = $this->_request->getParam('is_product');
    		$is_quantity = $this->_request->getParam('is_quantity');
    		//$users = $this->_request->getParam('users');
    		if(!$warehouse_id) $response['message'] = '请选择仓库';
    		else if(empty($user_id)) $response['message'] = '请选择盘点人';
    		else if(!is_array($ib_ids) || empty($ib_ids)) $response['message'] = '请选择要盘点的货架';
    		else {
    			$result = Service_TakeStockProcess::createTakeStock($warehouse_id, $user_id, $ib_ids, $is_product, $is_quantity);
    			if($result !== true) $response['message'] = '创建盘点单失败,'.$result;
    			else $response['state'] = 1;
    		}
    		exit(Zend_Json::encode($response));
    	}    	
    	$warehouse_id = intval(trim($this->_request->getParam('wid')));
    	if(empty($warehouse_id)) $warehouse_id = Service_User::getUserWarehouseId();
    	$aWarehouse = Service_Warehouse::getByField($warehouse_id);
    	$this->view->warehouse_code = $aWarehouse['warehouse_code'];
    	$this->view->warehouse_id = $warehouse_id;
    	$this->view->kvUser = Service_User::getKV($warehouse_id, 3);	//3是仓储部
    	$this->view->warehouseArea = Common_DataCache::getWarehouseArea();
    	echo Ec::renderTpl($this->tplDirectory . "take_stock_create.tpl", 'layout');
    } */
    
    public function createAction() {
    	if ($this->_request->isPost()) {
    		$response = array('state'=>0, 'message'=>'');
    		$warehouse_id = intval(trim($this->_request->getParam('warehouse_id')));
    		$user_id = $this->_request->getParam('user_id');
    		$lcodes = $this->_request->getParam('lcodes');
    		$pcodes = $this->_request->getParam('pcodes');
    		$is_product = $this->_request->getParam('is_product');
    		$is_quantity = $this->_request->getParam('is_quantity');
    		//$users = $this->_request->getParam('users');
    		if(!$warehouse_id) $response['message'] = '请选择仓库';
    		else if(empty($user_id)) $response['message'] = '请选择盘点人';
    		else if(!is_array($lcodes) || empty($lcodes)) $response['message'] = '请选择要盘点的货架';
    		else {
    			$result = Service_TakeStockProcess::createTakeStock($warehouse_id, $user_id, $lcodes, $pcodes, $is_product, $is_quantity);
    			if($result !== true) $response['message'] = '创建盘点单失败,'.$result;
    			else $response['state'] = 1;
    		}
    		exit(Zend_Json::encode($response));
    	}
    	$warehouse_id = intval(trim($this->_request->getParam('wid')));
    	if(empty($warehouse_id)) $warehouse_id = Service_User::getUserWarehouseId();
    	$aWarehouse = Service_Warehouse::getByField($warehouse_id);
    	$this->view->warehouse_code = $aWarehouse['warehouse_code'];
    	$this->view->warehouse_id = $warehouse_id;
    	$this->view->kvUser = Service_User::getKV($warehouse_id, 3);	//3是仓储部
    	$this->view->warehouseArea = Common_DataCache::getWarehouseArea();
    	echo Ec::renderTpl($this->tplDirectory . "take_stock_create.tpl", 'layout');
    }
    
    public function selectAction() {
    	$page = $this->_request->getParam('page', 1);
    	$pageSize = $this->_request->getParam('pageSize', 20);
    	
    	$page = $page ? $page : 1;
    	$pageSize = $pageSize ? $pageSize : 20;
    	
    	$return = array(
    			"state" => 0,
    			"message" => "No Data"
    	);
    	
    	$params = $this->_request->getParams();    	

    	$inventoryBatch = new Service_InventoryBatch();
    	$condition = $inventoryBatch->getMatchFields($params);
    	if(!empty($params['customer_code'])) {
    		$condition['customer_code'] = $params['customer_code'];
    	}
    	if(!empty($params['wa_code'])) {
    		$condition['wa_code'] = $params['wa_code'];
    	}
    	$count = $inventoryBatch->getTakeStockLocations($condition, 'count(*)');
    	$return['total'] = $count;
    	
    	if ($count) {
    		$showFields = array(
    				'ib_id',
    				'lc_code',
    				'product_barcode',
    				'warehouse_id',
    				'ib_quantity',
    		);
    		$showFields = $inventoryBatch->getFieldsAlias($showFields);
    		$rows = $inventoryBatch->getTakeStockLocations($condition, $showFields, $pageSize, $page, array('ib_id desc'));
    		$return['data'] = $rows;
    		$return['state'] = 1;
    		$return['warehouse'] = Common_DataCache::getWarehouseSimple();
    		$return['message'] = "";
    	}
    	die(Zend_Json::encode($return));
    }
    
    public function locationsAction() {
    	$return = array(
    			"state" => 0,
    			"message" => "No Data"
    	);
    	$params = $this->_request->getParams();
    	$inventoryBatch = new Service_InventoryBatch();
    	$condition = $inventoryBatch->getMatchFields($params);
    	if(!empty($params['customer_code'])) {
    		$condition['customer_code'] = $params['customer_code'];
    	}
    	if(!empty($params['wa_code'])) {
    		$condition['wa_code'] = $params['wa_code'];
    	}
    	$return['data'] = $inventoryBatch->listTakeStockLocation($condition);
    	$return['state'] = 1;
    	$return['message'] = "";
    	exit(Zend_Json::encode($return));
    }
    
    public function printAction() {
    	$ts_id = intval($this->_request->getParam('ts_id'));
    	if(!$ts_id) exit('error parameter');
    	$aTakeStock = Service_TakeStock::getByField($ts_id);
    	if(empty($aTakeStock)) exit('can not find take stock bill');
    	$this->view->ts_code = $aTakeStock['ts_code'];
    	if($aTakeStock['ts_status']==1) {
    		$this->view->title = '一盘单';
    		$this->view->itemList = Service_TakeStockItem::getList($aTakeStock['ts_code']);
    	} else if($aTakeStock['ts_status']==2) {
    		$this->view->title = '复盘单';
    		$this->view->itemList = Service_TakeStockAssignment::listSecondItem($aTakeStock['ts_code']);
    	}    	
    	echo Ec::renderTpl($this->tplDirectory . "take_stock_print.tpl", 'layout');
    }
    
    public function makeAction() {
    	if ($this->_request->isPost()) {
    		$response = array('state'=>0, 'message'=>'');
    		$ts_code = $this->_request->getParam('ts_code');
    		$tsi_ids = $this->_request->getParam('tsi_ids');
    		$quantitys = $this->_request->getParam('quantitys');
    		if(empty($ts_code)) {
    			$response['message'] = '请输入盘点单号';
    		} else if(!is_array($tsi_ids) || !is_array($quantitys) || count($tsi_ids)==0 || count($tsi_ids)!==count($quantitys)) {
    			$response['message'] = '参数错误';
    		} else {
    			$aTakeStock = Service_TakeStock::getByField($ts_code, 'ts_code');
    			if(empty($aTakeStock)) $response['message'] = '找不到盘点单['.$ts_code.']';
    			else if($aTakeStock['ts_status']>2) $response['message'] = '盘点单不是处于盘点状态';
    			else if($aTakeStock['ts_status']==1){
    				$result = Service_TakeStockProcess::firstTakeStock($aTakeStock, $tsi_ids, $quantitys);
    				if($result === true) $response['state'] = 1;
    				else $response['message'] = $result;
    			} else if($aTakeStock['ts_status']==2) {
    				$result = Service_TakeStockProcess::secondTakeStock($aTakeStock, $tsi_ids, $quantitys);
    				if($result === true) $response['state'] = 1;
    				else $response['message'] = $result;
    			}	
    		}
    		exit(Zend_Json::encode($response));
    	}
    	$ts_id = intval($this->_request->getParam('ts_id'));
    	if(!$ts_id) exit('error parameter');
    	$aTakeStock = Service_TakeStock::getByField($ts_id);
    	if(empty($aTakeStock)) exit('can not find take stock bill');
    	$this->view->ts_code = $aTakeStock['ts_code'];
    	if($aTakeStock['ts_status']==1) {
    		$this->view->title = '一盘';
    		$this->view->itemList = Service_TakeStockItem::getList($aTakeStock['ts_code']);
    	} else {
    		$this->view->title = '复盘';
    		$this->view->itemList = Service_TakeStockAssignment::listSecondItem($aTakeStock['ts_code']);
    	}
    	echo Ec::renderTpl($this->tplDirectory . "take_stock_make.tpl", 'layout');
    }
    
    public function itemsAction() {
    	$page = $this->_request->getParam('page', 1);
    	$pageSize = $this->_request->getParam('pageSize', 20);
    	 
    	$page = $page ? $page : 1;
    	$pageSize = $pageSize ? $pageSize : 20;
    	 
    	$return = array(
    			"state" => 0,
    			"message" => "No Data"
    	);
    	
    	$ts_code = $this->_request->getParam('ts_code');
    	if(empty($ts_code)) die(Zend_Json::encode($return));
    	$takeStockItem = new Service_TakeStockItem();
    	$condition['ts_code'] = $ts_code;
    	$count = $takeStockItem->getByCondition($condition, 'count(*)');
    	$return['total'] = $count;
    	if ($count) {
    		$rows = $takeStockItem->listTakeStockItem($condition, $pageSize, $page);
    		$return['data'] = $rows;
    		$return['state'] = 1;
    		$return['message'] = "";
    	}
    	exit(Zend_Json::encode($return));
    }
    
    public function confirmAction() {
    	$response = array('state'=>0, 'message'=>'');
    	$tsi_id = intval($this->_request->getParam('tsi_id'));
    	if(empty($tsi_id)) exit(Zend_Json::encode(array('state'=>0, 'message'=>'参数错误')));
    	$quantity = $this->_request->getParam('quantity');
    	if($quantity === '') exit(Zend_Json::encode(array('state'=>0, 'message'=>'请输入库存')));
    	if(!preg_match("/^\d+$/", $quantity)) exit(Zend_Json::encode(array('state'=>0, 'message'=>'库存必须是数字')));
    	$reason = $this->_request->getParam('reason');
    	if(empty($reason)) exit(Zend_Json::encode(array('state'=>0, 'message'=>'请输入原因')));
    	$aTakeStockItem = Service_TakeStockItem::getByField($tsi_id);
    	if(empty($aTakeStockItem)) exit(Zend_Json::encode(array('state'=>0, 'message'=>'找不到记录')));
    	$confirmRet = Service_TakeStockProcess::confirm($aTakeStockItem, $quantity, $reason);
    	if($confirmRet !== true) exit(Zend_Json::encode(array('state'=>0, 'message'=>$confirmRet)));
		$completeRet = Service_TakeStockProcess::complete($aTakeStockItem['ts_code']);
		if($completeRet !== true) exit(Zend_Json::encode(array('state'=>0, 'message'=>$completeRet)));
		$response['state'] = 1;
    	exit(Zend_Json::encode($response));
    }
    
}
