<?php

class Default_SystemController extends Ec_Controller_DefaultAction {

    public function preDispatch() {
        $this->tplDirectory = "default/views/default/";
        $this->_userAuth = new Zend_Session_Namespace('userAuthorization');

        if (!$this->_userAuth->isLogin) {
            $this->_redirect('/default/index/login');
            exit();
        }
    }

    /*
     * 布局头部
     */

    public function headerAction() {
        $userId = isset($this->_userAuth->userId) ? $this->_userAuth->userId : '-1';
        $this->view->userId = $userId;
        
        $this->view->viewunreadMsg  =   Service_ExceptionUser::getByCondition(array(
            'user_id'   => $userId,
            'eu_status' =>   0
        ),'count(*)'); 
        
        echo $this->view->render($this->tplDirectory . 'header.tpl');
    }

    /*
     * 后台左导航
     */

    public function leftMenuAction() {
        $result = array('state' => 0, 'data' => array());
        $userMenu = isset($this->_userAuth->Acl['menuArr']) ? $this->_userAuth->Acl['menuArr'] : array();
        if ($this->_request->isPost()) {
            if (count($userMenu)) {
                $result = array('state' => 1, 'data' => $userMenu);
            }
            die(Zend_Json::encode($result));
        }
        $this->view->menu = $userMenu;
        echo $this->view->render($this->tplDirectory . 'left_menu.tpl');
    }

    public function homeAction() {       
        echo Ec::renderTpl($this->tplDirectory . "home.tpl", 'layout');
    }

    public function rightGuildAction() {
        echo $this->view->render($this->tplDirectory . "right_guild.tpl");
    }

    /**
     * @查看产品图片
     * @desc WMS 全站使用
     */
    public function viewProductImgAction() {
        $productId = $this->_request->getParam('id', "");
        if ($productId) {
            $productAttach = Service_ProductAttached::getByField($productId, 'product_id');
            if ($productAttach) {
                if ($productAttach['pa_file_type'] == 'link') {
                    header("Location: " . $productAttach ['pa_path']);
                    exit();
                }
                if ($productAttach['pa_file_type'] == 'img') {
                    header("Location: http://develop-oms.ez-wms.com/product-image/view-attach/productId/" . $productId);
                    exit();
                }
            }
        }
        header("Location: /images/base/noimg.jpg");
        exit();
    }

    public function getSearchFilterAction() {
        $result = array('state' => 0, 'message' => 'Fail', 'data' => array());
        $actionId = $this->_request->getParam('quick', '-1');

        $actionId = empty($actionId) ? '-1' : $actionId;
        if (!empty($actionId)) {
            $condition = array(
                "filter_action_id" => $actionId
            );
            $rows = Service_SearchFilter::getByCondition($condition, '*', 50, 1, array('parent_id asc', 'search_sort asc'));
            if (!empty($rows)) {
                $sType = $sFilter = array();
                foreach ($rows as $key => $value) {
                    if ($value['parent_id'] == '0') {
                        $sType[$value['search_sort'] . '_' . $value['sf_id']] = $value;
                        $sFilter[$value['sf_id']] = $value;
                    } elseif (isset($sFilter[$value['parent_id']])) {
                        $sType[$sFilter[$value['parent_id']]['search_sort'] . '_' . $value['parent_id']]['item'][] = $value;
                    }
                }
                ksort($sType);
                $result = array('state' => 1, 'message' => '', 'data' => $sType);
            }
        }
        die(Zend_Json::encode($result));
    }

    /**
     * @desc 获取自定义导航
     */
    public function getSkyeQuiKeyAction() {
        $result = array('state' => 0, 'message' => 'Fail', 'data' => array(), 'userId' => 0);
        $data = Service_UserRightHeaderMap::getSkyeQuiKey();
        if (!empty($data)) {
            $userId = isset($this->_userAuth->userId) ? $this->_userAuth->userId : '0';
            $result = array('state' => 1, 'userId' => $userId, 'data' => $data);
        }
        die(Zend_Json::encode($result));
    }
    
    /**
     * @desc 获取用户权限
     * @desc 设置快捷导航
     */
    public function getSkyeQuiKeyListAction() {
        $result = array('state' => 0, 'message' => '', 'data' => array());
        $userId = isset($this->_userAuth->userId) ? $this->_userAuth->userId : '0';
        $data = Service_User::getUserRightCustomByUserId($userId);
        if (!empty($data)) {
            $result = array('state' => 1, 'data' => $data);
        }
        die(Zend_Json::encode($result));
    }

    public function updateSkyeQuiKeyAction() {
        $result = array('state' => 0, 'message' => '操作失败.', 'data' => array());
        if ($this->_request->isPost()) {
            $actionIdArr = $this->_request->getParam('actionId', array());
            $result = Service_UserRightHeaderMap::updateSkyeQuiKey($actionIdArr);
            if ($result) {
                $result = array('state' => 1);
            }
        }
        die(Zend_Json::encode($result));
    }

    /**
     * @desc 返回运输方式代码
     * @use 打印机设置
     */
    public function setupPrinterAction() {
        $result = array('state' => 1, 'data' => array('A4'));
        if ($this->_request->isPost()) {
            $smArr = Service_ShippingMethod::getShippingMethodSimple();
            $smArr[] = 'A4';
            $smArr[] = 'orderBarcode';
            if (!empty($smArr)) {
                $result = array('state' => 1, 'data' => $smArr);
            }
        }
        die(Zend_Json::encode($result));
    }

    /**
     * @系统数据看板
     */
    public function getBoardAction() {
        $result = array('state' => 0, 'data' => array());
        $type = trim($this->_request->getParam('type', ''));
        $model = trim($this->_request->getParam('model', ''));
        switch ($model . '_' . $type) {
            case 'shipment_0':
                $result['state'] = 1;
                //0:删除;1:草稿;2:确认;3:异常;4:已提交;5:已打印;6:已下架;7:已打包;8:已装袋;9:装袋完成;10:已加挂;11:物流完成;12:物流发货;13:已签收;14:已录单
                $result['data']['name'] = array('日期', '当日总订单量', '等待拣货', '拣货完成', '打包完成', '已出仓库', '拣货缺失', '操作完成率');

                $today = date("Y-m-d", strtotime('now'));
                $yestoday = date("Y-m-d", strtotime('-1 day'));
                $theDayBeforeYesterday = date("Y-m-d", strtotime('-2 day'));
                $dateArr = array(
                    $today => array('TO_DAYS(submit_time)' => 'TO_DAYS(now())'),
                    $yestoday => array('TO_DAYS(NOW())-TO_DAYS(submit_time)' => 1),
                    $theDayBeforeYesterday => array('TO_DAYS(NOW())-TO_DAYS(submit_time)' => 2)
                );
                $serviceOrder = new Service_Orders;
                foreach ($dateArr as $key => $value) {
                    $condition = $value;
                    $condition['order_mode_type'] = 0;
                    $field = "count(*)";
                    $condition['not_customer_code'] =  'E0207';
                    //总数  
                    $condition['not_order_status'] = 0;
                    $count = $serviceOrder->getLeftJoinAllByCondition($condition, $field);
                    unset($condition['not_order_status']);
                    //等待拣货                    
                    $condition['order_status'] = 5;
                    $waitPicking = $serviceOrder->getLeftJoinAllByCondition($condition, $field);

                    //拣货完成
                    $condition['order_status'] = 6;
                    $completePicking = $serviceOrder->getLeftJoinAllByCondition($condition, $field);
                    //打包完成
                    $condition['order_status'] = array(7, 14, 8, 9, 10);
                    $completePack = $serviceOrder->getLeftJoinAllByCondition($condition, $field);
                    //已出仓库
                    $condition['order_status'] = 11;
                    $haveBeenOutOfTheWarehouse = $serviceOrder->getLeftJoinAllByCondition($condition, $field);
                    //拣货缺失
                    $defectPicking = $count - ($waitPicking + $completePicking + $completePack + $haveBeenOutOfTheWarehouse);
                    //完成
                    if ($count != 0)
                        $orderEnd = sprintf("%.2f%%", ($haveBeenOutOfTheWarehouse / $count) * 100);
                    else
                        $orderEnd = '0%';

                    $result['data']['value'][] = array(
                        $key,
                        $count,
                        $waitPicking,
                        $completePicking,
                        $completePack,
                        $haveBeenOutOfTheWarehouse,
                        $defectPicking,
                        $orderEnd
                    );
                }
                break;
            case 'shipment_1':
                $result['state'] = 1;
                $result['data']['name'] = array('日期', '当日总订单量', '收货完成', '已出仓库', '收货缺失', '操作完成率');

                $today = date("Y-m-d", strtotime('now'));
                $yestoday = date("Y-m-d", strtotime('-1 day'));
                $theDayBeforeYesterday = date("Y-m-d", strtotime('-2 day'));
                $dateArr = array(
                    $today => array('TO_DAYS(submit_time)' => 'TO_DAYS(now())'),
                    $yestoday => array('TO_DAYS(NOW())-TO_DAYS(submit_time)' => 1),
                    $theDayBeforeYesterday => array('TO_DAYS(NOW())-TO_DAYS(submit_time)' => 2)
                );
                $serviceOrder = new Service_Orders;
                foreach ($dateArr as $key => $value) {
                    $condition = $value;
                    $condition['order_mode_type'] = 1;
                    $condition['not_customer_code'] =  'E0207';
                    $field = "count(*)";
                    //到货sku
                    $count = $serviceOrder->getLeftJoinAllByCondition($condition, $field);
                    //打包完成
                    $condition['order_status'] = array(7, 14, 8, 9, 10);
                    $completePack = $serviceOrder->getLeftJoinAllByCondition($condition, $field);
                    //已出仓库
                    $condition['order_status'] = 11;
                    $haveBeenOutOfTheWarehouse = $serviceOrder->getLeftJoinAllByCondition($condition, $field);
                    //拣货缺失
//                    $condition['order_status']  =   array(13,11);
                    $lostPicking = $count - $haveBeenOutOfTheWarehouse - $completePack;
                    //操作完成率
                    if ($count != 0)
                        $orderEnd = sprintf("%.2f%%", ($haveBeenOutOfTheWarehouse / $count) * 100);
                    else
                        $orderEnd = '0%';
                    $result['data']['value'][] = array(
                        $key,
                        $count,
                        $completePack,
                        $haveBeenOutOfTheWarehouse,
                        $lostPicking,
                        $orderEnd
                    );
                }
                break;
            case 'picking_0':
                $serviceOrder = new Service_Orders;
                
                $result['state'] = 1;
                $result['data']['name'] = array('', '已完成', '未完成');
                //已完成	 
                $condition  =   array();
                $condition['not_customer_code'] =  'E0207';
                $condition['_string'] = 'TO_DAYS(submit_time) = TO_DAYS(now()) AND order_mode_type = 0 AND '
                        . '((order_status >= 6 AND order_pick_type IN (1,2)) OR (order_status >= 7 AND order_pick_type = 0))';                
                $completePicking = $serviceOrder->getLeftJoinAllByCondition($condition, 'count(*)');
                //未完成
                $condition['_string'] = 'TO_DAYS(submit_time) = TO_DAYS(now()) AND order_mode_type = 0 AND '
                        . '((order_status = 5 AND order_pick_type IN (1,2)) OR (order_status = 5 AND order_pick_type = 0))';
                $waitPicking = $serviceOrder->getLeftJoinAllByCondition($condition, 'count(*)');
                $result['data']['value'][] = array('订单量', $completePicking, $waitPicking);
                //已完成sku数量
                $condition['_string'] = 'TO_DAYS(submit_time) = TO_DAYS(now()) AND order_mode_type = 0 AND '
                        . '((order_status >= 6 AND order_pick_type IN (1,2)) OR (order_status >= 7 AND order_pick_type = 0))';      
                $completePickingOrderId = $serviceOrder->getLeftJoinAllByCondition($condition, 'order_id');
                $skuNumber  =   0;
                $completeOrderIdArray    =   array();
                if($completePickingOrderId){
                    foreach($completePickingOrderId AS $value){
                        $completeSku     =  Service_OrderProduct::getByCondition(array(
                            'order_id'  =>  $value['order_id']
                        ), array('op_quantity'));
                        $completeOrderIdArray[]    =   $value['order_id'];
                        if($completeSku){
                            foreach ($completeSku as  $value) {
                                $skuNumber  +=  $value['op_quantity'];
                            }
                        }
                        
                    }                
                }
                //未完成sku数量
                $condition['_string'] = 'TO_DAYS(submit_time) = TO_DAYS(now()) AND order_mode_type = 0 AND '
                        . '((order_status = 5 AND order_pick_type IN (1,2)) OR (order_status = 5 AND order_pick_type = 0))';
                $waitPickingOrderId = $serviceOrder->getLeftJoinAllByCondition($condition, 'order_id');
                $skuNumberNo  =   0;
                if($waitPickingOrderId){
                    foreach($waitPickingOrderId AS $value){
                        $waitSku  =  Service_OrderProduct::getByCondition(array(
                            'order_id'  =>  $value['order_id']
                        ), array('op_quantity'));   
                        if($waitSku){
                            foreach ($waitSku as  $value) {
                                $skuNumberNo  +=  $value['op_quantity'];
                            }
                        }
                    }                
                }
                $result['data']['value'][] = array('SKU数量', $skuNumber, $skuNumberNo);

                $result['data']['item'][] = array('姓名', '已拣货订单量', '已拣货产品');
                $condition  =   array();
                $condition['up_id'] =   10;
                $users   =   Service_User::getByCondition($condition,array('user_id','user_name'));
                $userData   =   array();
                //完成
                if($completeOrderIdArray){        

                    $condition  =   array();
                    $condition['order_id']  =   $completeOrderIdArray;
                    $pickingDetail    =   Service_PickingDetail::getByCondition($condition);
                    if($pickingDetail){
                        foreach ($pickingDetail as $key=>$value) {
                            $picking    =   Service_Picking::getByField($value['picking_id']);
                            $pickingDetail[$key]['picker_id'] =   $picking['picker_id'];
                        }
                    }
                }
                if($users){
                    foreach($users AS $value){
                        $userData[$value['user_id']]   =   $value;
                        $userData[$value['user_id']]['order'] = 0;
                        $userData[$value['user_id']]['sku']    = 0;
                        if($pickingDetail){
                            foreach ($pickingDetail as $key => $val) {    
                                if($val['picker_id'] != $value['user_id']) continue;

                                if(!(is_array($userData[$val['picker_id']]['orders']) && in_array($val['order_code'], $userData[$val['picker_id']]['orders'])))
                                    $userData[$val['picker_id']]['order']    += 1;  
                                $userData[$val['picker_id']]['sku']    += $val['pd_quantity'];  
                                $userData[$val['picker_id']]['orders'][]  =     $val['order_code'];
                            }
                        }
                    }
                }
               
                
                if($userData){
                    foreach ($userData AS $value){
                        $result['data']['item'][] = array("{$value['user_name']}", "{$value['order']}", "{$value['sku']}");
                    }
                }

                break;
            case 'picking_1':
                $result['state'] = 1;
                $result['data']['name'] = array('', '已完成', '未完成');
                $result['data']['value'][] = array('订单量', 112, 220);
                $result['data']['value'][] = array('SKU数量', 110, 230);

                $result['data']['item'][] = array('姓名', '已包装订单', '已包装SKU', '耗时（小时）');
                $result['data']['item'][] = array('keith', '100', '180', '5');
                $result['data']['item'][] = array('张为', '100', '150', '5');

                $result['data']['elapsedTime'] = "预计全部包装完成时间是 10:00";
                break;
            case 'picking_2':
                $result['state'] = 1;
                $result['data']['name'] = array('', '已完成', '未完成');
                $result['data']['value'][] = array('SKU数量', 120, 210);

                $result['data']['item'][] = array('姓名', '已QC产品', '耗时（小时）');
                $result['data']['item'][] = array('kim', '140', '5');
                $result['data']['item'][] = array('殷剑辉', '130', '5');

                $result['data']['elapsedTime'] = "预计全部QC完成时间是 19:00";
                break;
            default:
                $result = array();
                break;
        }
        die(Zend_Json::encode($result));
    }

}
