162 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			162 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | ||
|  | 
 | ||
|  | namespace app\api\validate; | ||
|  | 
 | ||
|  | use app\common\basics\Validate; | ||
|  | use app\common\enum\OrderEnum; | ||
|  | use app\common\enum\OrderInvoiceEnum; | ||
|  | use app\common\model\order\Order; | ||
|  | use app\common\model\order\OrderInvoice; | ||
|  | 
 | ||
|  | /** | ||
|  |  * 订单发票验证 | ||
|  |  * Class OrderInvoiceValidate | ||
|  |  * @package app\api\validate | ||
|  |  */ | ||
|  | class OrderInvoiceValidate extends Validate | ||
|  | { | ||
|  | 
 | ||
|  |     protected $rule = [ | ||
|  |         'id' => 'require|checkInvoice', // 发票id
 | ||
|  |         'shop_id' => 'require', // 门店id
 | ||
|  |         'order_id' => 'require|checkOrder', // 订单id
 | ||
|  |         'type' => 'require', // 发票类型
 | ||
|  |         'header_type' => 'require|checkHeaderType',// 抬头类型
 | ||
|  |         'name' => 'require',// 抬头名称
 | ||
|  |         'email' => 'require',// 邮箱
 | ||
|  | 
 | ||
|  |         'duty_number' => 'requireIf:header_type,' . OrderInvoiceEnum::HEADER_TYPE_COMPANY,// 税号 (企业类型必填)
 | ||
|  |         'address' => 'requireIf:type,' . OrderInvoiceEnum::TYPE_SPEC,// 企业地址(专票类型必填)
 | ||
|  |         'mobile' => 'requireIf:type,' . OrderInvoiceEnum::TYPE_SPEC,// 企业电话(专票类型必填)
 | ||
|  |         'bank' => 'requireIf:type,' . OrderInvoiceEnum::TYPE_SPEC,// 快狐银行(专票类型必填)
 | ||
|  |         'bank_account' => 'requireIf:type,' . OrderInvoiceEnum::TYPE_SPEC,// 银行账号(专票类型必填)
 | ||
|  |     ]; | ||
|  | 
 | ||
|  | 
 | ||
|  |     protected $message = [ | ||
|  |         'id.require' => '参数缺失', | ||
|  |         'shop_id.require' => '参数缺失', | ||
|  |         'order_id.require' => '订单参数缺失', | ||
|  |         'type.require' => '请选择发票类型', | ||
|  |         'header_type.require' => '请选择抬头类型', | ||
|  |         'name.require' => '请填写抬头名称', | ||
|  |         'email.require' => '请填写邮箱', | ||
|  | 
 | ||
|  |         'duty_number.requireIf' => '请填写税号', | ||
|  |         'address.requireIf' => '请填写企业地址', | ||
|  |         'mobile.requireIf' => '请填写企业电话', | ||
|  |         'bank.requireIf' => '请填写开户银行', | ||
|  |         'bank_account.requireIf' => '请填写银行账号', | ||
|  |     ]; | ||
|  | 
 | ||
|  |     public function sceneAdd() | ||
|  |     { | ||
|  |         return $this->remove('id', true) | ||
|  |             ->remove('shop_id', true); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function sceneEdit() | ||
|  |     { | ||
|  |         return $this->remove('order_id', true) | ||
|  |             ->remove('shop_id', true) | ||
|  |             ->append('id', 'checkAbleEdit'); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function sceneDetail() | ||
|  |     { | ||
|  |         return $this->only(['id']); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function sceneSetting() | ||
|  |     { | ||
|  |         return $this->only(['shop_id']); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 校验发票 | ||
|  |      * @param $value | ||
|  |      * @param $rule | ||
|  |      * @param $data | ||
|  |      * @return bool|string | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/4/12 12:09 | ||
|  |      */ | ||
|  |     protected function checkInvoice($value, $rule, $data) | ||
|  |     { | ||
|  |         $invoice = OrderInvoice::findOrEmpty($value); | ||
|  |         if ($invoice->isEmpty()) { | ||
|  |             return '发票信息不存在'; | ||
|  |         } | ||
|  |         return true; | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 校验订单是否可添加发票 | ||
|  |      * @param $value | ||
|  |      * @param $rule | ||
|  |      * @param $data | ||
|  |      * @return bool|string | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/4/12 10:01 | ||
|  |      */ | ||
|  |     protected function checkOrder($value, $rule, $data) | ||
|  |     { | ||
|  |         $order = Order::with(['invoice'])->findOrEmpty($value); | ||
|  | 
 | ||
|  |         if ($order->isEmpty()) { | ||
|  |             return '订单不存在'; | ||
|  |         } | ||
|  | 
 | ||
|  |         if ($order['del'] == 1 || $order['order_status'] == OrderEnum::ORDER_STATUS_DOWN) { | ||
|  |             return '此订单已不可申请发票'; | ||
|  |         } | ||
|  | 
 | ||
|  |         if (!empty($order['invoice'])) { | ||
|  |             return '此订单已有发票信息'; | ||
|  |         } | ||
|  | 
 | ||
|  |         return true; | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 校验抬头类型 | ||
|  |      * @param $value | ||
|  |      * @param $rule | ||
|  |      * @param $data | ||
|  |      * @return bool|string | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/4/11 17:17 | ||
|  |      */ | ||
|  |     protected function checkHeaderType($value, $rule, $data) | ||
|  |     { | ||
|  |         if ($value == OrderInvoiceEnum::HEADER_TYPE_PERSONAL && $data['type'] == OrderInvoiceEnum::TYPE_SPEC) { | ||
|  |             return '专用发票抬头类型仅支持企业'; | ||
|  |         } | ||
|  |         return true; | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 校验能否编辑 | ||
|  |      * @param $value | ||
|  |      * @param $rule | ||
|  |      * @param $data | ||
|  |      * @return bool|string | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/4/12 14:56 | ||
|  |      */ | ||
|  |     protected function checkAbleEdit($value, $rule, $data) | ||
|  |     { | ||
|  |         $invoice = OrderInvoice::findOrEmpty($value); | ||
|  |         if ($invoice['status'] == OrderInvoiceEnum::STATUS_YES) { | ||
|  |             return '此发票已开票,无法编辑'; | ||
|  |         } | ||
|  |         return true; | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  | } |