<?php
class Warehouse_InventoryRecordController extends Ec_Controller_Action
{
    public function preDispatch()
    {
        $this->tplDirectory = "warehouse/views/inventory/";
        $this->serviceClass = new Service_InventoryBatch();
    }

    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();
            Common_Common::trim_blank($params);

            $condition = $this->serviceClass->getMatchFields($params);

            if ($params['product_sku'] != "") {
                $condition['product_sku'] = $params['product_sku'];
            }

            if ($params['goods_id'] != "") {
                $condition['goods_id'] = $params['goods_id'];
            }

            if ($params['record_number'] != "") {
                $condition['hs_serial_no'] = trim($params['record_number']);
            }

            $count = $this->serviceClass->getRecordSearchByCondition($condition, 'count(*)');
            $return['total'] = $count;

            if ($count) {
                $showFields = array(
                    'ib_id',
                    'product_id',
                    'product_barcode',
                    'customer_code',
                    'receiving_code',
                    'ib_quantity',
                    'hs_serial_no',
                    'batch_goods_id'
                );
                $showFields = $this->serviceClass->getFieldsAlias($showFields);
                $rows = $this->serviceClass->getRecordSearchByCondition($condition, $showFields, $pageSize, $page);

                $return['data'] = $this->checkData($rows);
                $return['state'] = 1;
                $return['currentPage'] = intval($page);
                $return['message'] = "";
            }
            die(Zend_Json::encode($return));
        }

        echo Ec::renderTpl($this->tplDirectory . "inventory-record-list.tpl", 'layout');
    }

    public function exportProductAction() {
        set_time_limit(0);
        ini_set('memory_limit', '1024M');
        $file   = 'record-' . date('YmdHis');
        /*header('Content-Type: application/vnd.ms-excel;charset=gbk');
        header("Content-Disposition: attachment;filename={$file}");
        header('Cache-Control: max-age=0');*/
        require_once("PHPExcel.php");
        require_once("PHPExcel/Reader/Excel2007.php");
        require_once("PHPExcel/Reader/Excel5.php");
        require_once ('PHPExcel/IOFactory.php');

        $objExcel = new PHPExcel();
        $objProps = $objExcel->getProperties();
        $objProps->setCreator('EC');
        $objProps->setTitle('Template');
        $objExcel->setActiveSheetIndex(0);

        $objActSheet = $objExcel->getActiveSheet();

        $objActSheet->getColumnDimension('A')->setWidth(25);
        $objActSheet->getColumnDimension('B')->setWidth(20);
        $objActSheet->getColumnDimension('C')->setWidth(20);
        $objActSheet->getColumnDimension('D')->setWidth(25);
        $objActSheet->getColumnDimension('E')->setWidth(25);
        $objActSheet->getColumnDimension('F')->setWidth(25);
        $objActSheet->getColumnDimension('G')->setWidth(10);
        $objActSheet->getColumnDimension('H')->setWidth(10);
        $objActSheet->getColumnDimension('I')->setWidth(10);

        $objActSheet->setCellValue('A1','客户代码');
        $objActSheet->setCellValue('B1','产品SKU');
        $objActSheet->setCellValue('C1','料件号');
        $objActSheet->setCellValue('D1','产品名称');
        $objActSheet->setCellValue('E1','备案序号');
        $objActSheet->setCellValue("F1",'批次料件号');
        $objActSheet->setCellValue('G1','可用库存');
        $objActSheet->setCellValue('H1','冻结库存');
        $objActSheet->setCellValue('I1','已出货');


        //$exportData[0] = array('客户代码','产品SKU','备案序号','批次料件号','可用','冻结','不可用');

        $params = $this->getRequest()->getParams();
        if($params['type'] == '1'){
            $productSku    = isset($params['E1'])  ? trim($params['E1'])  : '';
            $goodsId  = isset($params['E2'])  ? trim($params['E2'])  : '';
            $hsSerialNo  = isset($params['E3'])  ? trim($params['E3'])  : '';


            $condition     = array(
                'product_type' => '0', // 只能导出普通产品
            );

            if ($productSku != "") {
                $condition['product_sku'] = $productSku;
            }

            if ($goodsId != "") {
                $condition['goods_id'] = $goodsId;
            }

            if ($hsSerialNo != "") {
                $condition['hs_serial_no'] = $hsSerialNo;
            }
        }else{
            if (!empty($params['ib_ids'])) {
                $condition['ib_ids'] = explode('|', $params['ib_ids']);
            }else{
                //echo Common_Export::exportCsvForNotKey($exportData);
                die("无数据");
            }
        }


        $count = $this->serviceClass->getRecordSearchByCondition($condition, 'count(*)');
        if(!$count){
            //echo Common_Export::exportCsvForNotKey($exportData);
            die("无数据");
        }

        $index = 2;
        $showFields = array(
            'ib_id',
            'product_id',
            'product_barcode',
            'customer_code',
            'receiving_code',
            'ib_quantity',
            'hs_serial_no',
            'batch_goods_id'
        );
        $showFields = $this->serviceClass->getFieldsAlias($showFields);
        $rows = $this->serviceClass->getRecordSearchByCondition($condition, $showFields);

        $dataRes = $this->checkData($rows);
        foreach ($dataRes as $key => $value) {
            $objActSheet->setCellValue('A'.$index,$value['customer_code']);
            $objActSheet->setCellValueExplicit('B'.$index,$value['product_sku'],PHPExcel_Cell_DataType::TYPE_STRING);
            $objActSheet->setCellValue('C'.$index,$value['goods_id']);
            $objActSheet->setCellValue('D'.$index,$value['product_title']);
            $objActSheet->setCellValue('E'.$index, $value['record_number']);
            $objActSheet->setCellValue("F".$index,$value['batch_goods_id']);
            $objActSheet->setCellValue('G'.$index,$value['quantity']);
            $objActSheet->setCellValue('H'.$index,$value['reserved']);
            $objActSheet->setCellValue('I'.$index,$value['shipped']);

            $index++;
        }


        header('Pragma:public');
        header('Content-Type:application/x-msexecl;name="' . $file . '.xls');
        header("Content-Disposition:inline;filename=" . $file . '.xls');
        $objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
        $objWriter->save('php://output');

    }

    public function checkData($dataArr = []){
        if(empty($dataArr)){
            return [];
        }

        $dataRes = [];

        $tempArr = $dataArr;

        foreach ($dataArr as $key=> &$row){
            if(ucwords(substr($row['E9'],0,3)) == 'SWO' && !empty($row['ibs_hsn'])){
                $quantity = $row['ibs_quantity'];
                $ib_ids = [$row['E0']];
                foreach ($tempArr as $k=> $item){
                    if (ucwords(substr($item['swo_code'],0,3)) != 'SWO') continue;
                    if($row['ibs_id'] != $item['ibs_id'] && $row['pid'] == $item['pid'] && $row['ibs_hsn'] == $item['ibs_hsn'] && $row['ibs_bgi'] == $item['ibs_bgi']){
                        $ib_ids[] = $item['E0'];
                        $quantity += $item['ibs_quantity'];
                        $found_key = array_search($item['ibs_id'], array_column($tempArr, 'ibs_id'));
                        unset($dataArr[$found_key]);
                    }
                }
                $row['E0'] = implode('|', $ib_ids);
                $row['quantity'] = $quantity;
                $row['record_number'] = strval($row['ibs_hsn']);
                $row['batch_goods_id'] = strval($row['ibs_bgi']);
                $row['reserved'] = intval($row['pi_reserved']);
                $row['shipped'] = intval($row['pi_shipped']);
                $row['customer_code'] = strval($row['customer_code']);
            }else{
                $dataRes[$key] = $row;
                $dataRes[$key]['quantity'] = intval($row['E14']);
                $dataRes[$key]['record_number'] = strval($row['E19']);
                $dataRes[$key]['batch_goods_id'] = strval($row['E20']);
                $dataRes[$key]['reserved'] = intval($row['pi_reserved']);
                $dataRes[$key]['shipped'] = intval($row['pi_shipped']);
                $dataRes[$key]['customer_code'] = strval($row['customer_code']);
            }
        }

        foreach ($dataArr as $k=> &$res){
            foreach ($dataRes as $key=> $data){
                if($res['E2'] == $data['pid'] && $res['E19'] == $data['ibs_hsn'] && $res['E20'] == $data['ibs_bgi']){
                    $res['E0'] = $res['E0'].'|'.$data['E0'];
                    $res['quantity'] = intval($res['quantity']) + intval($data['quantity']);
                    unset($dataArr[$k]);
                }
            }
            if(!isset($res['quantity'])){
                unset($dataArr[$k]);
            }
        }

        return array_merge($dataRes, $dataArr);
    }
}
