SaveController.class.php 4.24 KB
<?php
/**
 * 保存发票信息接口
 * User: liyifei2012it
 * Date: 18/3/5
 * Time: 16:44
 */
namespace Apicp\Controller\Invoice;

use Com\PackageValidate;
use Common\Common\Constant;
use Common\Common\Invoice;

class SaveController extends AbstractController
{
    /**
     * Save
     * @author liyifei
     * @desc 保存发票信息接口
     * @param String invoId 发票ID(修改发票信息时,该参数必传)
     * @param Int isReceipt 是否收货(1=未收货;2=已收货)
     * @param Int invoInvoiceStatus 取消发票申请(6=已取消;不接收其他状态)
     * @param Int invoAmount:true 开票金额(单位:分)
     * @param String invoHeader:true 发票抬头
     * @param Int invoType:true 发票类型(1=增值税普通发票;2=增值税专业发票)
     * @param String invoIdCode:true 纳税识别号
     * @param String invoRegisterAddress:true 公司地址
     * @param String invoRegisterPhone:true 公司电话
     * @param String invoBankName:true 开户银行名称
     * @param String invoAccout:true 银行账号
     * @param String invoReceiver:true 收件人
     * @param String invoReceiverPhone:true 联系电话
     * @param String invoReceiverAddress:true 收件地址
     * @param String invoApplyRemark 申请备注
     */
    public function Index_post()
    {
        // 验证规则
        $rules = [
            'isReceipt' => 'integer|in:1,2',
            'invoInvoiceStatus' => 'integer|in:6',
            'invoAmount' => 'require|integer',
            'invoHeader' => 'require',
            'invoType' => 'require|integer|in:1,2',
            'invoIdCode' => 'require',
            'invoRegisterAddress' => 'require',
            'invoRegisterPhone' => 'require',
            'invoBankName' => 'require',
            'invoAccout' => 'require',
            'invoReceiver' => 'require',
            'invoReceiverPhone' => 'require',
            'invoReceiverAddress' => 'require',
        ];

        // 验证数据
        $validate = new PackageValidate($rules, [], array_keys($rules));
        $postData = $validate->postData;
        $allPostData = I('post.');
        if (isset($allPostData['invoApplyRemark'])) {
            $postData['invoApplyRemark'] = $allPostData['invoApplyRemark'];
        }
        $invoId = I('post.invoId', '', 'trim');

        $invoiceServ = &Invoice::instance();

        // 新增发票
        if (empty($invoId)) {
            // 必须大于最小开票金额
            if ($postData['invoAmount'] < Constant::INVOICE_MIN_AMOUNT) {
                E(L('_ERR_INVOICE_MIN_AMOUNT', ['invoideMinAmount' => Constant::INVOICE_MIN_AMOUNT / 100]));
            }

            // 必须小于最大开票金额(上限为10万)
            $maxAmount = $invoiceServ->fetchEnableAmount();
            if ($postData['invoAmount'] > $maxAmount || $postData['invoAmount'] > Constant::INVOICE_MAX_AMOUNT) {
                E('_ERR_INVOICE_MAX_AMOUNT');
            }

            unset($postData['isReceipt']);
            unset($postData['invoInvoiceStatus']);
            $invoiceServ->applyInvoice($postData);

            // 修改发票
        } else {
            // 发票详情
            $invoice = $invoiceServ->fetchInvoice(['invoId' => $invoId]);

            // 确认收货时,仅修改发票状态即可
            if (isset($postData['isReceipt']) && $postData['isReceipt'] == Constant::IS_RECEIPT_TRUE) {
                if (isset($invoice['invoInvoiceStatus']) && $invoice['invoInvoiceStatus'] == Constant::INVOICE_STATUS_SHIPPED) {
                    $updateData = [
                        'invoId' => $invoId,
                        'invoInvoiceStatus' => Constant::INVOICE_STATUS_COMPLETE,
                    ];
                    $invoiceServ->updateInvoice($updateData);

                } else {
                    E('_ERR_INVOICE_STATUS_ERROR');
                }

            } else {
                // 仅待审核状态才能取消申请
                if (isset($postData['invoInvoiceStatus']) && $invoice['invoInvoiceStatus'] != Constant::INVOICE_STATUS_WATTING) {
                    E('_ERR_INVOICE_STATUS_ERROR');
                }

                $postData['invoId'] = $invoId;
                $invoiceServ->updateInvoice($postData);
            }
        }
    }
}