<?php

class Financial_BilServeBillDetailController extends Ec_Controller_Action
{
    public function preDispatch()
    {
        $this->tplDirectory = "financial/views/serve_bill/";
        $this->serviceClass = new Service_BilServeBill();
    }

    /**
     * @desc 帐单明细
     */
    public function listAction()
    {
        $id_code = $this->_request->getParam('id_code', 'random');
        switch (strtolower($id_code)) {
        	//标准模板
            case 'standard':
                $return = array(
                    "state" => 0,
                    "message" => "No Data"
                );
                $paramId = $this->_request->getParam('paramId', '');
                $bilBillDetailStatus = Process_BillConfig::bilBillDetailStatus('auto');
                $bilBillDiffType = Process_BillConfig::bilBillDiffType('auto');
                $billStatusArr = Process_BillConfig::serveBillDifferenceStatus('auto');
                $withdrawSign = Process_BillConfig::withdrawSign('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;

                    $condition['bsbd_compare_sign'] = trim($this->_request->getParam("bsbd_compare_sign", ""));
                    $condition['bsd_diff_type'] = trim($this->_request->getParam("bsd_diff_type", ""));
                    $condition['bsbd_refer_hawb_code'] = trim($this->_request->getParam("bsbd_refer_hawb_code", ""));
                    $condition['bsbd_hawb_code'] = trim($this->_request->getParam("bsbd_hawb_code", ""));
                    $condition['bsd_status'] = trim($this->_request->getParam("bsd_status", ""));
                    $condition['bsd_withdraw_sign'] = trim($this->_request->getParam("bsd_withdraw_sign", ""));
                    $condition['bsb_id'] = $paramId;

                    $count = Service_BilServeBillDetail::getAllByCondition($condition, 'count(*)');

                    $return['total'] = $count;

                    if ($count) {
                        $type = '*,bil_serve_bill_detail.bsbd_id as bill_bsbd_id,(SELECT SUM(bp_amount) as amount FROM bil_payment WHERE bsbdf_id=bil_serve_bill_detail_fee.bsbdf_id) as amount';
                        $rows = Service_BilServeBillDetail::getAllByCondition($condition, $type, $pageSize, $page, array("bil_serve_bill_detail.bsbd_shipment_time"));
                        $return['data'] = $rows;
                        $return['state'] = 1;
                        $return['message'] = "";
                        $return['bilBillDetailStatus'] = $bilBillDetailStatus;
                        $return['bilBillDiffType'] = $bilBillDiffType;
                        $return['billStatusArr'] = $billStatusArr;
                        $return['withdrawSign'] = $withdrawSign;
                    }
                    die(Zend_Json::encode($return));
                }
                $billRow = Service_BilServeBill::getByField($paramId, 'bsb_id');
                $this->view->bilBillDetailStatus = $bilBillDetailStatus;
                $this->view->bilBillDiffType = $bilBillDiffType;
                $this->view->paramId = $paramId;
                $this->view->billStatusArr = $billStatusArr;
                $this->view->withdrawSign = $withdrawSign;
                $this->view->billRow = $billRow;
                echo Ec::renderTpl($this->tplDirectory . "standard.tpl", 'layout');
                break;
			//随机模板
            case 'random':
			/*
			 * @desc 类型说明：此类型涉及到一个Item下有多个服务商费用  多个应付项关系同一个服务商费用
	 	 	 */
            case 'transpeed':
                $return = array(
                    "state" => 0,
                    "message" => "No Data"
                );
                $paramId = $this->_request->getParam('paramId', '');
                $bilBillDetailStatus = Process_BillConfig::bilBillDetailStatus('auto');
                $bilBillDiffType = Process_BillConfig::bilBillDiffType('auto');
                $billStatusArr = Process_BillConfig::serveBillDifferenceStatus('auto');
                $withdrawSign = Process_BillConfig::withdrawSign('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;

                    $condition['bsbd_compare_sign'] = trim($this->_request->getParam("bsbd_compare_sign", ""));
                    $condition['bsd_diff_type'] = trim($this->_request->getParam("bsd_diff_type", ""));
                    $condition['bsbd_refer_hawb_code'] = trim($this->_request->getParam("bsbd_refer_hawb_code", ""));
                    $condition['bsbd_hawb_code'] = trim($this->_request->getParam("bsbd_hawb_code", ""));
                    $condition['bsd_status'] = trim($this->_request->getParam("bsd_status", ""));
                    $condition['bsd_withdraw_sign'] = trim($this->_request->getParam("bsd_withdraw_sign", ""));
                    $condition['bsb_id'] = $paramId;


                    $count = Service_BilServeBillDetail::getRandomByCondition($condition, 'count(*)');

                    $return['total'] = $count;

                    if ($count) {
                        //    $type = '*,';
                        $type = array('*', 'bil_serve_bill_detail.bsbd_id as bill_bsbd_id');
                        $rows = Service_BilServeBillDetail::getRandomByCondition($condition, $type, $pageSize, $page, array("bil_serve_bill_detail.bsbd_shipment_time"));

                        foreach ($rows as $key => $val) {
                            $rows[$key]['bsbd_shipment_time'] = date('Y-m-d', strtotime($val['bsbd_shipment_time']));
                            $rows[$key]['amount'] = Table_BilPayment::getInstance()->getByJoinInnerFeeIdTotal($val['bill_bsbd_id'], 'bsbd_id');
                            $rows[$key]['bsbdf_amount'] = Table_BilServeBillDetailFee::getInstance()->getTotalAmountBy($val['bill_bsbd_id'], 'bsbd_id');
                        }

                        $return['data'] = $rows;
                        $return['state'] = 1;
                        $return['message'] = "";
                        $return['bilBillDetailStatus'] = $bilBillDetailStatus;
                        $return['bilBillDiffType'] = $bilBillDiffType;
                        $return['billStatusArr'] = $billStatusArr;
                        $return['withdrawSign'] = $withdrawSign;
                    }
                    die(Zend_Json::encode($return));
                }
                $billRow = Service_BilServeBill::getByField($paramId, 'bsb_id');
                $this->view->bilBillDetailStatus = $bilBillDetailStatus;
                $this->view->bilBillDiffType = $bilBillDiffType;
                $this->view->paramId = $paramId;
                $this->view->billStatusArr = $billStatusArr;
                $this->view->withdrawSign = $withdrawSign;
                $this->view->billRow = $billRow;
                echo Ec::renderTpl($this->tplDirectory . "transpeed.tpl", 'layout');
                break;
        }
    }


    /**
     * @desc 费用明细
     */
    public function feeDetailAction()
    {
        $return = array(
            "state" => 0,
            "message" => "No Data"
        );
        $paramId = $this->_request->getParam('paramId', '');
        if ($this->_request->isPost()) {
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);

            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $paramId = empty($paramId) ? '--' : $paramId;

            $condition['bsbd_id'] = $paramId;

            $count = Table_BilPayment::getInstance()->getBillFeeDetailByCondition($condition, 'count(*)');
            $return['total'] = $count;

            if ($count) {
                $rows = Table_BilPayment::getInstance()->getBillFeeDetailByCondition($condition, '*', 0);
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['message'] = "";
            }
            die(Zend_Json::encode($return));
        }
        //服务商费用明细
        $paramId = empty($paramId) ? '-1' : $paramId;
        $condition['bsbd_id'] = $paramId;
        $diffRow = Service_BilServeBillDifference::getByField($paramId, 'bsbd_id');
        $this->view->difference = $diffRow;
        $op = 0;
        if ($diffRow['bsd_status'] == '2' && $diffRow['bsd_withdraw_sign'] == 'n') {
            $op = 2;
        } elseif (in_array($diffRow['bsd_status'], array(0, 1)) || $diffRow['bsd_status'] == '2' && $diffRow['bsd_withdraw_sign'] == 'y') {
            $op = 1;
        }

        $bilBillDiffType = Process_BillConfig::bilBillDiffType('auto');
        $bilBillDiffProcessResult = Process_BillConfig::bilBillDiffProcessResult('auto');
        $billDetailAbnormalType = Process_BillConfig::billDetailAbnormalType('auto');


        $diffRow['payment'] = Table_BilPayment::getInstance()->getByJoinInnerFeeIdTotal($paramId,'bsbd_id');
        $diffRow['payment'] = empty($diffRow['payment']) ? 0 : $diffRow['payment'];
        $diffRow['bsd_process_text'] = $bilBillDiffProcessResult[$diffRow['bsd_process']];
        $diffRow['bsd_diff_type_text'] = !isset($bilBillDiffType[$diffRow['bsd_diff_type']])?'无':$bilBillDiffType[$diffRow['bsd_diff_type']];
        $diffRow['bsd_abnormal_type_text'] = $billDetailAbnormalType[$diffRow['bsd_abnormal_type']];

        $diffRow['bsbdf_amount'] = Table_BilServeBillDetailFee::getInstance()->getTotalAmountBy($paramId,'bsbd_id');

        $this->view->data = $diffRow;
        $this->view->op = $op;
        $this->view->BilPayment = Table_BilPayment::getInstance()->getBillFeeDetailByCondition($condition, '*', 0);
        $this->view->billDetailFee = Table_BilServeBillDetailFee::getInstance()->getAllByCondition(array('bsbd_id' => $paramId), '*', 0);
        $this->view->paramId = $paramId;
        $this->view->utCode = Process_BillConfig::utCode('auto');
        echo Ec::renderTpl($this->tplDirectory . "fee_diff_detail.tpl", 'layout');
    }


    /**
     * @desc 获取处理方式
     */
    public function getProcessDataAction()
    {
        $paramId = $this->_request->getParam('paramId', '');
        $opType = $this->_request->getParam('opType', '0');
        $row = Service_BilServeBillDifference::getByField($paramId, 'bsbd_id');
        $bilBillDiffType = Process_BillConfig::bilBillDiffType('auto');
        $bilBillDiffProcessResult = Process_BillConfig::bilBillDiffProcessResult('auto');
        $billDetailAbnormalType = Process_BillConfig::billDetailAbnormalType('auto');


        //我公司计算的金额
        $row['payment'] = Table_BilPayment::getInstance()->getByJoinInnerFeeIdTotal($paramId);
        $row['payment'] = empty($row['payment']) ? 0 : $row['payment'];
        $row['bsd_process_text'] = $bilBillDiffProcessResult[$row['bsd_process']];
        $row['bsd_diff_type_text'] = $bilBillDiffType[$row['bsd_diff_type']];

        $row['bsbdf_amount'] = Table_BilServeBillDetailFee::getInstance()->getTotalAmountBy($paramId,'bsbd_id');
        $row['ft_name_cn'] = '--';
        if (!empty($feeRow['ft_code'])) {
            $ftRow = Service_FeeType::getByField($feeRow['ft_code'], 'ft_code');
            $row['ft_name_cn'] = $ftRow['ft_name_cn'];
        }
        $this->view->diff = $row;
        $this->view->bilBillDiffProcessResult = $bilBillDiffProcessResult;
        $this->view->billDetailAbnormalType = $billDetailAbnormalType;
        $this->view->paramId = $row['bsbd_id'];
        $this->view->opType = $opType;
        echo $this->view->render($this->tplDirectory . 'other_difference.tpl');
    }


    /**
     * @desc 费用明细
     */
    public function feeListAction()
    {
        $return = array(
            "state" => 0,
            "message" => "No Data"
        );
        $paramId = $this->_request->getParam('paramId', '');
        if ($this->_request->isPost()) {
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);

            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $paramId = empty($paramId) ? '--' : $paramId;

            $condition['bsbd_id'] = $paramId;

            $count = Table_BilPayment::getInstance()->getBillFeeDetailByCondition($condition, 'count(*)');
            $return['total'] = $count;

            if ($count) {
                $rows = Table_BilPayment::getInstance()->getBillFeeDetailByCondition($condition, '*', 0);
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['message'] = "";
            }
            die(Zend_Json::encode($return));
        }
        $this->view->paramId = $paramId;
        echo Ec::renderTpl($this->tplDirectory . "fee_list.tpl", 'layout');
    }

    /**
     * 汇总我方金额
     */
    public function getOwnTotalAction(){
    	$return = array(
    			"state" => 0,
    			"message" => "No Data"
    	);
    	if($this->_request->isPost()){
    		$ownTotal = 0;
    		$bsbId = $this->_request->getParam('id', 0);
    		$condition['bsb_id'] = $bsbId;
			$type = '(SELECT SUM(bp_amount) as amount FROM bil_payment WHERE bsbdf_id=bil_serve_bill_detail_fee.bsbdf_id) as amount';
			//查询所有费用统计
			$rows = Service_BilServeBillDetail::getOwnTotalByCondition($condition, $type);
			//账单服务商信息
			$billRow = Service_BilServeBill::getByField($bsbId, 'bsb_id');
			if(!empty($rows) && is_array($rows)){
				foreach ($rows as $totalVal){
					if(!empty($totalVal['amount']) && $totalVal['amount'] > 0){
						$ownTotal += $totalVal['amount'];
					}
				}
				//服务商账单编号
				$return['bsb_code'] = $billRow['bsb_code'];
				//服务商代码			
				$return['sp_code'] = $billRow['sp_code'];
				$return['ownTotal'] = $ownTotal;
				$return['bsbId'] = $bsbId;
				$return['state'] = 1;
				$return['message'] = "汇总成功!";
			}
    	}
    	die(Zend_Json::encode($return));
    }
}