<?php

class Financial_ImportDataController extends Ec_Controller_Action
{

    public function preDispatch()
    {
        $this->tplDirectory = "financial/views/import_data/";
        $this->serviceClass = new Service_ImportData();
    }

    public function listAction()
    {

        $status = Process_ImportDataProcess::status('auto');
        $importCode = Process_BillConfig::importCode('auto');
        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"
            );

            $condition['id_status'] = $this->_request->getParam('id_status', '');
            $condition['id_reference_no'] = $this->_request->getParam('id_reference_no', '');
            $condition['id_code'] = $this->_request->getParam('id_code', '');

            $count = $this->serviceClass->getAllByCondition($condition, 'count(*)');
            $return['total'] = $count;

            if ($count) {
                $showFields = array(
                    'id_code',
                    'id_name',
                    'id_reference_no',
                    'id_start_time',
                    'id_end_time',
                    'id_status',
                    'payer_code',
                    'sm_code',
                    'id_note',
                    'id_creator_id',
                    'id_finish_id',
                    'id_add_time',
                    'id_finish_time',
                    'id_id'
                );
                $rows = $this->serviceClass->getAllByCondition($condition, $showFields, $pageSize, $page, array(
                    'id_id desc'
                ));
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['status'] = $status;
                $return['message'] = "";
            }
            die(Zend_Json::encode($return));
        }
        unset($importCode['standard']);
        $this->view->status = $status;
        $this->view->importCode = $importCode;
        $this->view->spArr = Service_ServiceProvider::getByCondition(array(), '*', 0, 0, array('sp_code'));
        $this->view->smArr = Service_ShippingMethod::getByCondition(array(), '*', 0, 0, array('sm_code'));
        echo Ec::renderTpl($this->tplDirectory . "import_data_index.tpl", 'layout');
    }

    /**
     * @desc 获取明细信息
     */
    public function detailAction()
    {
        $paramId = $this->_request->getParam('paramId', '0');
        $code = $this->_request->getParam('code', '');
        $return = array(
            "state" => 0,
            "message" => "No Data"
        );
        $columnMap = Process_ImportDataProcess::columnMap($code);
        if ($this->_request->isPost()) {

            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);
            $condition['id_id'] = $this->_request->getParam('id_id', '0');
            if (empty($condition['id_id'])) {
                die(Zend_Json::encode($return));
            }
            $idRow = Service_ImportData::getByField($condition['id_id'], 'id_id');
            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $count = Table_ImportDataDetailFormat::getInstance()->getGroupByCondition($condition, 'count(*)');

            $return['total'] = $count;

            if ($count) {
                $columnMap = Process_ImportDataProcess::columnMap($idRow['id_code']);
                $columnMapKey = array_flip($columnMap);
                $rows = Table_ImportDataDetailFormat::getInstance()->getGroupByCondition($condition, array('id_id', 'iddf_rowno',''), $pageSize, $page, array("id_id"));
                $data = array();
                foreach ($rows as $key => $row) {
                    $list = Service_ImportDataDetailFormat::getByCondition(array('id_id' => $row['id_id'], 'iddf_rowno' => $row['iddf_rowno']), '*', 0, 0, array('iddf_rowno asc'));
                    foreach ($list as $ro) {
                        if (isset($columnMapKey[$ro['iddf_code']])) {
                            $data[$key][$ro['iddf_code']] = $ro['iddf_value'];
                        }
                    }
                }
                $newData=array();
                foreach($data as $key =>$val){
                    $newData[$val['date'].'_'.$key]=$val;
                }
                unset($data,$rows);
                sort($newData);
                $return['data'] = $newData;
                $return['state'] = 1;
                $return['column'] = $columnMapKey;
                $return['message'] = "";
            }
            die(Zend_Json::encode($return));
        }
        $idRow = Service_ImportData::getByField($paramId, 'id_id');
        if (empty($idRow)) {
            die("no data");
        }
        $this->view->data = $idRow;
        $this->view->columnMap = $columnMap;
        echo Ec::renderTpl($this->tplDirectory . "view_detail.tpl", 'layout');
    }


    /**
     * @desc 数据匹配
     */
    public function dataDiffAction()
    {
        $paramId = $this->_request->getParam('paramId', '0');
        $code = $this->_request->getParam('code', '');
        $return = array(
            "state" => 0,
            "message" => "No Data"
        );
        $columnMap = Process_ImportDataProcess::columnMap($code);
        if ($this->_request->isPost()) {

            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);
            $condition['id_id'] = $this->_request->getParam('id_id', '0');
            if (empty($condition['id_id'])) {
                die(Zend_Json::encode($return));
            }
            $idRow = Service_ImportData::getByField($condition['id_id'], 'id_id');
            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $count = Table_ImportDataDetailFormat::getInstance()->getGroupByCondition($condition, 'count(*)');

            $return['total'] = $count;

            if ($count) {
                $columnMap = Process_ImportDataProcess::columnMap($idRow['id_code']);
                $columnMapKey = array_flip($columnMap);
                $rows = Table_ImportDataDetailFormat::getInstance()->getGroupByCondition($condition, array('id_id', 'iddf_rowno'), $pageSize, $page, array("id_id"));
                $data = array();
                foreach ($rows as $key => $row) {
                    $list = Service_ImportDataDetailFormat::getByCondition(array('id_id' => $row['id_id'], 'iddf_rowno' => $row['iddf_rowno']), '*', 0, 0, array('iddf_rowno asc'));
                    foreach ($list as $ro) {
                        if (isset($columnMapKey[$ro['iddf_code']])) {
                            $data[$key][$ro['iddf_code']] = $ro['iddf_value'];
                        }
                    }
                }
                $newData=array();
                foreach($data as $key =>$val){
                    $newData[$val['date'].'_'.$key]=$val;
                }
                unset($data,$rows);
                sort($newData);
                $return['data'] = $newData;
                $return['state'] = 1;
                $return['column'] = $columnMapKey;
                $return['message'] = "";
            }
            die(Zend_Json::encode($return));
        }

        $idRow = Service_ImportData::getByField($paramId, 'id_id');
        $spArr = Service_ServiceProvider::getByField($idRow['payer_code'], 'sp_code');
        $bank = Service_ServiceBankAccount::getByCondition(array('sp_id' => $spArr['sp_id']), '*', 0);
        if (empty($idRow)) {
            die("no data");
        }
        $this->view->data = $idRow;
        $this->view->spRow = $spArr;
        $this->view->bank = $bank;
        $this->view->columnMap = $columnMap;
        $this->view->totalAmount = Table_ImportDataDetailFormat::getInstance()->getTotal($paramId, 'amount');
        echo Ec::renderTpl($this->tplDirectory . "diff_detail.tpl", 'layout');
    }


    public function deleteAction()
    {
        $result = array(
            "state" => 0,
            "message" => "Fail."
        );
        if ($this->_request->isPost()) {
            $paramId = $this->_request->getPost('paramId');
            if (!empty($paramId)) {
                $idRow = Service_ImportData::getByField($paramId, 'id_id');
                if (!empty($idRow)) {
                    $this->serviceClass->delete($paramId);
                    Service_ImportDataDetailFormat::delete($idRow['id_id'], 'id_id');
                    Service_ImportDataDetail::delete($idRow['id_id'], 'id_id');
                    $result['state'] = 1;
                    $result['message'] = '操作成功';
                }
            }
        }
        die(Zend_Json::encode($result));
    }

    public function swfuploadAction()
    {
        $return = array(
            'ask' => 0,
            'message' => ''
        );
        if ($this->_request->isPost()) {
            $params = $this->getRequest()->getParams();
            $FILE = $_FILES['Filedata'];
            $return = Process_ImportDataProcess::save($params, $FILE, 0);
            //file_put_contents(APPLICATION_PATH . '/../data/log/___________.txt', print_r($FILE, true) . "\n" . print_r($params, true) . "\n" . print_r($return, true));
        }

        echo Zend_Json::encode($return);
        exit();
    }


    /**
     * @desc 查看全部未出帐应付费用
     */
    public function paymentListAAAction()
    {
        $return = array(
            "state" => 0,
            "message" => "No Data"
        );
        if ($this->_request->isPost()) {
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);

            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $condition['dateTo'] = trim($this->_request->getParam("dateTo", ""));

            if (isset($condition['dateTo']) && !empty($condition['dateTo'])) {
                $condition['dateTo'] = date("Y-m-d 23:59:59", strtotime($condition['dateTo']));
            }

            $count = Table_BilPayment::getInstance()->getPaymentCondition($condition, 'count(*)');

            $return['total'] = $count;

            if ($count) {
                $rows = Table_BilPayment::getInstance()->getPaymentCondition($condition, '*', $pageSize, $page);
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['message'] = "";
                $return['rpType'] = Process_BillConfig::rpType('auto');
            }
        }
        die(Zend_Json::encode($return));
    }

    public function paymentListAction()
    {
        $paramId = $this->_request->getParam('paramId', '0');
        $code = $this->_request->getParam('code', '');
        $return = array(
            "state" => 0,
            "message" => "No Data"
        );
        if ($this->_request->isPost()) {
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);

            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;
            $condition['dateFrom'] = trim($this->_request->getParam("dateFrom", ""));
            $condition['dateTo'] = trim($this->_request->getParam("dateTo", ""));
            $condition['sp_code'] = trim($this->_request->getParam("sp_code", ""));
            $condition['sm_code'] = trim($this->_request->getParam("sm_code", ""));
            $condition['ft_code'] = trim($this->_request->getParam("ft_code", ""));
            $condition['ds_code'] = 'vf';

            if (isset($condition['dateTo']) && !empty($condition['dateTo'])) {
                $condition['dateTo'] = date("Y-m-d 23:59:59", strtotime($condition['dateTo']));
            }
            if (isset($condition['dateFrom']) && !empty($condition['dateFrom'])) {
                $condition['dateFrom'] = date("Y-m-d 23:59:59", strtotime($condition['dateFrom']));
            }
            $condition['bp_status'] = 2;
            $condition['id_id_is_null'] = 1;
            $count = Table_BilPayment::getInstance()->getPaymentCondition($condition, 'count(*)');

            $return['total'] = $count;

            if ($count) {
                $rows = Table_BilPayment::getInstance()->getPaymentCondition($condition, '*', $pageSize, $page, array('bp_chargeable_time'));
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['message'] = "";
                $return['rpType'] = Process_BillConfig::rpType('auto');
            }
            die(Zend_Json::encode($return));
        }
        $idRow = Service_ImportData::getByField($paramId, 'id_id');
        $this->view->paramId = $paramId;
        $this->view->importData = $idRow;
        $this->view->feeType = Service_FeeType::getByCondition(array(), array("ft_code", "ft_name_cn"));
        echo Ec::renderTpl($this->tplDirectory . "fee_detail.tpl", 'layout');
    }

    /**
     * @desc 查看已被选择的费用
     */
    public function feeListAction()
    {
        $paramId = $this->_request->getParam('paramId', '0'); //模板ID
        $return = array(
            "state" => 0,
            "message" => "No Data"
        );
        if ($this->_request->isPost()) {
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);

            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $condition['dateTo'] = trim($this->_request->getParam("dateTo", ""));


            if (isset($condition['dateTo']) && !empty($condition['dateTo'])) {
                $condition['dateTo'] = date("Y-m-d 23:59:59", strtotime($condition['dateTo']));
            }
            $condition['id_id'] = $paramId;

            $count = Table_BilPayment::getInstance()->getPaymentCondition($condition, 'count(*)');

            $return['total'] = $count;

            if ($count) {
                $rows = Table_BilPayment::getInstance()->getPaymentCondition($condition, '*', $pageSize, $page, array('bp_chargeable_time'));
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['message'] = "";
                $return['rpType'] = Process_BillConfig::rpType('auto');
            }
            die(Zend_Json::encode($return));
        }
        $this->view->paramId = $paramId;
        echo Ec::renderTpl($this->tplDirectory . "fee_list.tpl", 'layout');
    }

    /**
     * @desc 保存费用
     */
    public function saveAction()
    {
        $result = array(
            "state" => 0,
            "message" => "Fail."
        );
        if ($this->_request->isPost()) {
            $bp_ids = $this->_request->getPost('bp_ids', array());
            $id_id = $this->_request->getParam('id_id', '');
            $db = Common_Common::getAdapter();
            $db->beginTransaction();
            try{
                if (!empty($bp_ids) && is_array($bp_ids) && !empty($id_id)) {
                    $imRow=Service_ImportData::getByField($id_id,'id_id');
                    if($imRow['id_status']=='2'){
                        $result = array(
                            "state" => 0,
                            "message" => "操作失败,此数据已生成帐单"
                        );
                        die(Zend_Json::encode($result));
                    }
                    $rows = Common_DataCache::getImportData($id_id,0);

                    foreach ($bp_ids as $bpId) {
                        $bilPayment = Service_BilPayment::getByField($bpId);
                        if(!Service_ImportData::importCheckData($rows,$bilPayment)){
                            $feeType =  Service_FeeType::getByField($bilPayment['ft_code'],'ft_code');
                            $fee_name = $feeType['ft_name_cn'];
                            throw new Exception($fee_name.'不在该账单之中');
                        }
                        $arr = array(
                            'id_id' => $id_id,
                            'bp_id' => $bpId,
                            'idd_add_time' => date('Y-m-d H:i:s'),
                        );
                        if (Service_ImportDataDetail::getByCondition(array('id_id' => $id_id, 'bp_id' => $bpId), 'count(*)')){
                            continue;
                        }
                        Service_ImportDataDetail::add($arr);
                    }
                    $result = array(
                        "state" => 1,
                        "message" => "操作成功"
                    );
                    //$db->rollBack();
                    $db->commit();
                }
            }catch (Exception $e){
                $db->rollBack();
                $result['state'] = 0;
                $result['message'] = $e->getMessage();
            }
        }
        die(Zend_Json::encode($result));
    }


    /**
     * @desc 获取已选择的应付金额
     */
    public function getBillDataAction()
    {
        $result = array(
            "state" => 0,
            "message" => "Fail.",
            "amount" => 0
        );
        if ($this->_request->isPost()) {
            $id_id = $this->_request->getParam('paramId', '');
            if (!empty($id_id)) {
                $total = Table_ImportDataDetail::getInstance()->getTotal($id_id);
                if (empty($total)) {
                    $result['message'] = "未选择应付费用";
                } else {
                    $result = array(
                        "state" => 1,
                        "message" => "操作成功",
                        "amount" => $total
                    );
                }
            }
        }
        die(Zend_Json::encode($result));
    }

    /**
     * @desc 取消绑定
     */
    public function clearFeeAction()
    {
        $result = array(
            "state" => 0,
            "message" => "Fail."
        );
        if ($this->_request->isPost()) {
            $bp_ids = $this->_request->getPost('bp_ids', array());
            $id_id = $this->_request->getParam('id_id', '');
            if (!empty($bp_ids) && is_array($bp_ids) && !empty($id_id)) {
                foreach ($bp_ids as $bpId) {
                    Table_ImportDataDetail::getInstance()->deleteById($id_id, $bpId);
                }
                $result = array(
                    "state" => 1,
                    "message" => "操作成功"
                );
            }
        }
        die(Zend_Json::encode($result));
    }

    /**
     * @desc 生成对帐单
     */
    public function createBillAction()
    {
        $result = array(
            "state" => 0,
            "message" => "Fail."
        );
        if ($this->_request->isPost()) {
            $id_id = $this->_request->getParam('id_id', '');
            $params = $this->_request->getParams();
            $param = array(
                'bsb_bank_account' => $params['bsb_bank_account'],
                'currency_rate' => $params['currency_rate'],
                'id_id' => $id_id,
                'bsb_amount' => $params['bsb_amount'],
                'currency_code' => $params['currency_code'],
                'note' => $params['note'],
            );
            $obj = new Process_ServeBill();
            $result = $obj->createBillTransaction($param);
        }
        die(Zend_Json::encode($result));
    }

}