wugg vor 8 Monaten
Ursprung
Commit
10376c3d5a

+ 185 - 0
app/admin/controller/ComonOrder.php

@@ -483,4 +483,189 @@ class ComonOrder extends Base
         $this->success("开票申请创建成功");
     }
     
+        /**
+	 * 对账单开票申请
+	 */
+    public function invAddT(){
+        $param=$this->request->only(['payNo'=>'','orderArr'=>[],'invtype'=>'','email'=>'','remark'=>'',
+        'exam_remark'=>''],'post','trim');
+        $valid =Validate::rule([
+        	'payNo|对账单编号'=>'require',
+        	'orderArr|订单数据'=>'require|array',
+        	'invtype|开票类型'=>['require','in'=>$this->invName],
+        	'email|邮箱'=>'email',
+        	]);
+        if($valid->check($param)==false) $this->error($valid->getError());
+        $valide = Validate::rule([
+        	'sequenceNo|销售订单号'=>'require',
+        	'num|商品开票数量'=>'require|float|gt:0',
+        	'inv_fee|商品开票金额'=>'require|float|gt:0',
+        	]);
+        
+        $qrdinfo = QrdInfo::whereIn('sequenceNo',array_column($param['orderArr'],'sequenceNo'))
+        ->column('id,sequenceNo,customerNo,customerName,companyNo,companyName,goodNo,goodNum,thNum,inv_fee,winv_fee,
+        status,goodUnit,goodName,thirdCat,totalPrice,tax,platform_type','sequenceNo');
+        if(empty($qrdinfo))$this->error('订单信息不存在');
+        $goodInfo= \app\admin\model\Good::whereIn('spuCode',array_unique(array_column($qrdinfo,'goodNo')))
+        ->column('inv_good_name,inv_cat_name,inv_cat_code,inv_tax,is_discount,addTax,inv_tag,status','spuCode');
+        if(empty($goodInfo))$this->error('商品类目信息不存在');
+        $assoc=[];
+        $invoiceGood=[];
+        $invNo=makeNo('INV');
+        $invfee=array_sum(array_column($param['orderArr'],'inv_fee'));
+        $companyArr = array_unique(array_column($qrdinfo,'companyName','companyNo'));
+        $customerArr = array_unique(array_column($qrdinfo,'customerName','customerNo'));
+        if(count($companyArr)>1)$this->error('订单业务公司不一致');
+        if(count($customerArr)>1)$this->error('订单客户公司不一致');
+        $company = CompanyInfo::whereIn('companyNo',array_keys($companyArr))->findOrEmpty();
+        if($company->isEmpty())$this->error('订单业务公司开票信息未找到');
+         $customer = CompanyInfo::whereIn('companyNo',array_keys($customerArr))->findOrEmpty();
+        if($customer->isEmpty())$this->error('订单客户公司开票信息未找到');
+        if (in_array($param['invtype'] ,
+        		   [
+        			   'fully_digitalized_special_electronic' ,
+        			   'fully_digitalized_normal_electronic'
+        		   ]
+        	   )) {
+        		   //全电发票限制金额
+        		   if ($invfee > 10000000) {
+        		   	$this->error('开票面额不能超过一千万元');
+        		   }
+        	   }
+        	   else {//全电发票
+        		   if ($company['denomination'] != '' && $invfee > intval($company['denomination']) * 10000) {
+        			   $this->error( "开票面额不能超过{$company['denomination']}万元");
+        		   }
+        	   }
+        $platform = array_column($qrdinfo,'platform_type');
+        if(count(array_unique($platform))!=1){
+        	$this->error('订单平台类型不一致');
+//            return error_show(1004,'订单平台类型不一致');
+        }
+        foreach ($param['orderArr'] as $i=>$item){
+        	if($valide->check($item)==false) $this->error($valide->getError());
+        	if(!isset($qrdinfo[$item['sequenceNo']]))$this->error("订单 {$item['sequenceNo']} 信息不存在");
+        	if($qrdinfo[$item['sequenceNo']]['status']==2)$this->error("订单 {$item['sequenceNo']} 不参与对账");
+        	if($qrdinfo[$item['sequenceNo']]['winv_fee']<$item['inv_fee'])$this->error("订单 {$item['sequenceNo']} 待开票金额不足");
+        	$total = InvoicePool::alias('a')->leftJoin('invoice_good b', 'a.invNo=b.invNo and b.is_del=0')
+                     ->where(['a.status' => [0, 1, 2, 3, 4], 'b.orderCode' => $item['sequenceNo']])
+                     ->sum('b.goodNum');
+        	if($total+$item['num']>($qrdinfo[$item['sequenceNo']]['goodNum']-$qrdinfo[$item['sequenceNo']]['thNum']))$this->error("订单 {$item['sequenceNo']} 待开票数量不足");
+        	if(!isset($goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]))$this->error("订单 {$item['sequenceNo']} 商品类目信息不存在");
+        	if($goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['status']!=2)$this->error("订单 {$item['sequenceNo']} 未确认开票类目信息");
+        	$num = \app\admin\model\Assoc::alias('a')
+            ->leftJoin('invoice_good b', 'a.viceCode=b.invNo AND b.orderCode=a.orderCode')
+            ->where(['a.status' => [1, 2], 'a.is_del' => 0, 'a.type' => 1, 'a.orderCode' => $item['sequenceNo']])
+            ->sum('b.goodNum');
+        	if($num+$item['num']>($qrdinfo[$item['sequenceNo']]['goodNum']-$qrdinfo[$item['sequenceNo']]['thNum']))$this->error("订单 {$item['sequenceNo']} 待开票数量不足");
+        	$assoc[]=[
+        		       'assocNo'=>substr(makeNo('AS'),0,-4).str_pad(strval($i+1),4,'0',STR_PAD_LEFT),
+                       'apply_id'=>$this->uid,
+                       'apply_name'=>$this->uname,
+                       'type'=>1,
+                       'orderCode'=>$item['sequenceNo'],
+                       'customerNo'=>$qrdinfo[$item['sequenceNo']]['customerNo'],
+                       'viceCode'=>$invNo,
+                       'order_total'=>$qrdinfo[$item['sequenceNo']]['totalPrice'],
+                       'vice_total'=>$invfee,
+                       'cancel_fee'=>$item['inv_fee'],
+                       'status'=>1,
+                       'addtime'=>date('Y-m-d H:i:s'),
+                       'updatetime'=>date('Y-m-d H:i:s')
+                       ];
+        	$invoiceGood[]=[
+                       'invNo'=>$invNo,
+                        'orderCode'=>$item['sequenceNo'],
+                        'goodNo'=>$qrdinfo[$item['sequenceNo']]['goodNo'],
+                        'goodName'=>$goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_good_name']??$qrdinfo[$item['sequenceNo']]['goodName'] ,
+                        'catName'=>$goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_cat_name']??$qrdinfo[$item['sequenceNo']]['thirdCat'],
+                        'catNo'=>$goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_cat_code'],
+                        'goodPrice'=>round($item['inv_fee']/$item['num'],8),
+                        'unitName'=>$qrdinfo[$item['sequenceNo']]['goodUnit'],
+                        'goodNum'=>$item['num'],
+                        'specInfo'=>$item['sequenceNo'],
+                        'totalPrice'=>$item['inv_fee'],
+                        'totalTax'=>$item['inv_fee'],
+                        'tax'=>$goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_tax']??$qrdinfo[$item['sequenceNo']]['tax'],
+                        'is_discount'=>$goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['is_discount'],
+                        'addTax'=>$goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['addTax'],
+                        'inv_tag'=>$goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_tag'],
+                        'taxPrice'=>round($item['inv_fee']*($goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_tax']??$qrdinfo[$item['sequenceNo']]['tax']),2),
+                        'addtime'=>date('Y-m-d H:i:s'),
+                        'updatetime'=>date('Y-m-d H:i:s')
+                    ];
+        	$qrdinfo[$item['sequenceNo']]['inv_fee'] = $qrdinfo[$item['sequenceNo']]['inv_fee']+$item['inv_fee'];
+        	$qrdinfo[$item['sequenceNo']]['winv_fee'] = $qrdinfo[$item['sequenceNo']]['winv_fee']-$item['inv_fee'];
+        	$qrdinfo[$item['sequenceNo']]['inv_status'] = 2;
+        	$qrdinfo[$item['sequenceNo']]['status'] = 1;
+        }
+         $inv=[
+            'invNo'=>$invNo,
+            'inv_value'=>$invfee,
+            'inv_out'=> array_keys($companyArr)[0],
+            'inv_company'=> $company['invoice_title']??'',
+            'apply_id'=>$this->uid,
+            'is_comon'=>1,
+            'apply_name'=>$this->uname,
+            'inv_type'=>$param['invtype'],//发票类型  专用 普通 电子专用 电子普通 全电子票
+            'open_type'=>0, //开票类型 金税开票 金税线下 纯线下
+            'platform_type'=>$platform[0]??0, //开票类型 金税开票 金税线下 纯线下
+            'is_ticket'=>$company['out_ticket'], //是否支持金税开票
+            'company_type'=> $customer['company_type']??'01', //类型01 企业,02 机关事业单位,03 个人, 04 其他
+            'remark'=>$param['remark'], //申请备注
+            'exam_remark'=>$param['exam_remark'], //审核备注
+            'ainv_fee'=>0,//已核销金额
+            'winv_fee'=>$invfee,//未核销金额
+            'status'=>1,// 带财务审核
+            'is_del'=>0,
+            'email'=>$param['email'],
+            'addtime'=>date('Y-m-d H:i:s'),
+            'updatetime'=>date('Y-m-d H:i:s')
+        ];
+        $invinfo=[
+               'buyer_title'=>$customer['invoice_title'],
+               'buyer_code'=>$customer['company_license'],
+               'buyer_addr'=>$customer['company_address'],
+               'buyer_mobile'=>$customer['mobile'],
+               'buyer_bank'=>$customer['bank_name'],
+               'buyer_bankNo'=>$customer['bankNo'],
+               'seller_title'=>$company['invoice_title'],
+               'seller_code'=>$company['company_license'],
+               'seller_addr'=>$company['company_address'],
+               'seller_mobile'=>$company['mobile'],
+               'seller_bank'=>$company['bank_name'],
+               'seller_bankNo'=>$company['bankNo'],
+               'invNo'=>$invNo,
+               'voider'=>$company['voider'],
+               'payee'=>$company['payee'],
+               'drawer'=>$company['drawer'],
+               'reviewer'=>$company['reviewer'],
+               'ownerPlace'=>$company['ownerPlace'],
+               'addtime'=>date('Y-m-d H:i:s')
+            ];
+        $this->model->startTrans();
+        try{
+            $assocSa=(new \app\admin\model\Assoc)->saveAll($assoc);
+            if($assocSa->isEmpty()) throw new Exception('开票关联数据生成失败');
+            $goodInv = (new \app\admin\model\InvoiceGood)->saveAll($invoiceGood);
+        	if($goodInv->isEmpty()) throw new Exception('开票商品明细数据生成失败');
+        	$qrdSave = (new \app\admin\model\QrdInfo)->saveAll($qrdinfo);
+        	if($qrdSave->isEmpty()) throw new Exception('销售单信息更新失败');
+        	$invoice = InvoicePool::create($inv);
+        	if($invoice->isEmpty()) throw new Exception('开票信息创建失败');
+        	$invoiceinf = InvoicePoolInfo::create($invinfo);
+        	if($invoiceinf->isEmpty()) throw new Exception('开票信息创建失败');
+        	$payIn = InvoicePay::create(['invNo'=>$invNo,'payNo'=>$param['payNo']]);
+        	if($payIn->isEmpty()) throw new Exception('开票信息创建失败');
+        	$report =ReportCode::where(['qrdNo'=>array_column($param['orderArr'],'sequenceNo')])->select();
+        	if($report->isEmpty()==false)$report->update(['invNo'=>Db::raw("CONCAT(invNo,',','{$invNo}')")]);
+        	$this->model->commit();
+        	
+        }catch (\Exception $exception){
+        	$this->model->rollback();
+        	$this->error($exception->getMessage());
+        }
+        $this->success('开票申请创建成功');
+    }
+    
 }

+ 20 - 9
app/admin/controller/OrderInv.php

@@ -28,18 +28,30 @@ class OrderInv extends Base{
      * 新建销售单开票申请
      */
    public function create(){
-	        $companyType = isset($this->post['companyType'])&&$this->post['companyType']!=='' ? trim($this->post['companyType']):"";
-	        if ($companyType==''){
-	              return error_show(1004,"参数 companyType 不能为空");
-	        }
-        	$buy_id = isset($this->post['buy_id'])&&$this->post['buy_id']!=='' ? intval($this->post['buy_id']):"";
+   	    $is_comon = isset($this->post['is_comon'])&&$this->post['is_comon']!=='' ? trim($this->post['is_comon']):'0';
+   	    if($is_comon==0){
+   	    	$buy_id = isset($this->post['buy_id'])&&$this->post['buy_id']!=='' ? intval($this->post['buy_id']):'';
 	       if($buy_id==''){
-	           return error_show(1004,"参数 buy_id 不能为空");
+	           return error_show(1004,'参数 buy_id 不能为空');
 	       }
-           $buyinfo =Db::name("customer_invoice")->where(['id'=>$buy_id,"is_del"=>0])->find();
+           $buyinfo =Db::name('customer_invoice')->where(['id'=>$buy_id,'is_del'=>0])->find();
            if($buyinfo==false){
-                 return error_show(1004,"购买方发票信息未找到");
+                 return error_show(1004,'购买方发票信息未找到');
            }
+   	    }else{
+   	    	        $buy_id = isset($this->post['buyNo'])&&$this->post['buyNo']!=='' ? trim($this->post['buyNo']):'';
+   	    		       if($buy_id==''){
+   	    		           return error_show(1004,'参数 buyNo不能为空');
+   	    		       }
+   	    	           $buyinfo =Db::name('company_info')
+   	    	           ->field("invoice_title,company_license invoice_code,company_address invoice_addr,
+   	    	          mobile invoice_mobile,bank_name invoice_bank,bankNo invoice_bankNo")
+   	    	           ->where(['companyNo'=>$buy_id,'is_del'=>0])->find();
+   	    	           if($buyinfo==false){
+   	    	                 return error_show(1004,'购买方发票信息未找到');
+   	    	           }
+   	    }
+        
 
 		if($this->level==1){
 			$companyNo = isset($this->post['companyNo'])&&$this->post['companyNo']!=='' ? trim($this->post['companyNo']):"";
@@ -62,7 +74,6 @@ class OrderInv extends Base{
         if(!in_array($invtype,$this->invName)) return error_show(1004,"发票类型有误");
 
         $email = isset($this->post['email'])&&$this->post['email']!=='' ? trim($this->post['email']):"";
-         $is_comon = isset($this->post['is_comon'])&&$this->post['is_comon']!=='' ? trim($this->post['is_comon']):'0';
         $remark = isset($this->post['remark'])&&$this->post['remark']!=='' ? trim($this->post['remark']):"";
         $exam_remark = isset($this->post['exam_remark'])&&$this->post['exam_remark']!=='' ? trim($this->post['exam_remark']):"";
         $orderArr = isset($this->post['orderArr'])&&!empty($this->post['orderArr']) ? $this->post['orderArr']:[];

+ 6 - 6
app/admin/controller/Payment.php

@@ -583,9 +583,9 @@ class Payment extends Base
                      }
                 }
                Db::commit();
-//                if(($status==3 || $status==4)&&$data['is_comon']==1){
-//                	event("comonOrder",["payNo"=>$payNo,"type"=>"check"]);
-//                }
+                if(($status==3 || $status==4)&&$data['is_comon']==1){
+                	event("comonOrder",["payNo"=>$payNo,"type"=>"check"]);
+                }
                return app_show(0,"状态更新成功");
             }
             Db::rollback();
@@ -807,9 +807,9 @@ class Payment extends Base
                 }
 
                 Db::commit();
-//                if($payinfo['is_comon']==1 && $status==4){
-//                	event("comonOrder",["payNo"=>$payinfo['payNo'],"pay_fee"=>$payment['pay_fee'],"type"=>"pay"]);
-//                }
+                if($payinfo['is_comon']==1 && $status==4){
+                	event("comonOrder",["payNo"=>$payinfo['payNo'],"pay_fee"=>$payment['pay_fee'],"type"=>"pay"]);
+                }
                 return app_show(0,"状态修改成功");
             }else{
                 Db::rollback();

+ 1 - 1
app/admin/controller/TagGood.php

@@ -56,7 +56,7 @@ class TagGood extends Base{
         $size = isset($this->post['size'])&&$this->post['size']!=''?intval($this->post['size']):15;
         $type = isset($this->post['type'])&&$this->post['type']!=''?intval($this->post['type']):'';
         $status = isset($this->post['status'])&&$this->post['status']!==''?intval($this->post['status']):'';
-        if($this->post['relaComNo']!=""){
+        if(isset($this->post['relaComNo']) && $this->post['relaComNo']!=""){
         	$companyNo = isset($this->post['relaComNo'])&& $this->post['relaComNo']!="" ? trim($this->post['relaComNo']) :"";
         }else{
         	 $companyNo = isset($this->post['companyNo'])&& $this->post['companyNo']!="" ? trim($this->post['companyNo']) :"";