|
@@ -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']):"";
|
|
@@ -108,6 +120,7 @@ class OrderInv extends Base{
|
|
|
Db::rollback();
|
|
|
return error_show(1004,"确认单{$value['sequenceNo']}待开票金额不足");
|
|
|
}
|
|
|
+ if($qrd['is_comon']!=$is_comon) throw new \Exception("确认单{$value['sequenceNo']}类型有误");
|
|
|
$ainv = Db::name("invoice_pool")
|
|
|
->alias("a")
|
|
|
->leftJoin("invoice_good b", "a.invNo=b.invNo and b.is_del=0")
|
|
@@ -212,6 +225,7 @@ class OrderInv extends Base{
|
|
|
"exam_remark"=>$exam_remark, //审核备注
|
|
|
"ainv_fee"=>0,//已核销金额
|
|
|
"winv_fee"=>$invfee,//未核销金额
|
|
|
+ 'is_comon'=> $is_comon ,
|
|
|
"status"=>1,// 带财务审核
|
|
|
"is_del"=>0,
|
|
|
"email"=>$email,
|
|
@@ -2472,7 +2486,7 @@ class OrderInv extends Base{
|
|
|
if($value["inv_total"]==""&& in_array($value['inv_type'],["fully_digitalized_special_electronic", "fully_digitalized_normal_electronic"])){
|
|
|
return error_show(1005,"第".($key+1)."行缺少发票金额数据");
|
|
|
}
|
|
|
- if($value["inv_subtotal"]==""){
|
|
|
+ if($value["inv_subtotal"]=="" && !in_array($value['inv_type'],['fully_digitalized_special_electronic', 'fully_digitalized_normal_electronic'])){
|
|
|
return error_show(1005,"第".($key+1)."行缺少发票税后金额数据");
|
|
|
}
|
|
|
if($value["open_date"]==""){
|
|
@@ -2497,7 +2511,7 @@ class OrderInv extends Base{
|
|
|
// if($value['buyer_bankNo']=="") return error_show(1005,"第".($key+1)."行缺少购买方银行账户数据");
|
|
|
// if($value['tax_fee']=="") return error_show(1005,"第".($key+1)."行缺少发票税额数据");
|
|
|
// }
|
|
|
- !isset($total[$value['invNo']]) ? $total[$value['invNo']]['total']=0:"";
|
|
|
+ !isset($total[$value['invNo']]) ? $total[$value['invNo']]['inv_total']=0:"";
|
|
|
|
|
|
$temp=[];
|
|
|
$temp['invNo'] = $value["invNo"];
|
|
@@ -2538,12 +2552,12 @@ class OrderInv extends Base{
|
|
|
|
|
|
foreach ($total as $key=>$val){
|
|
|
if(!isset($inpool[$key])) throw new Exception("{$key}发票数据不存在或状态有误");
|
|
|
- if(in_array($val['inv_type'],["fully_digitalized_special_electronic", "fully_digitalized_normal_electronic"]) && $inpool[$key]['winv_fee']!=$val['total']){
|
|
|
+ if(in_array($val['inv_type'],["fully_digitalized_special_electronic", "fully_digitalized_normal_electronic"]) && $inpool[$key]['winv_fee']>$val['inv_total']){
|
|
|
throw new Exception("{$key}全电发票面金额小于未开票金额");
|
|
|
}
|
|
|
if($inpool[$key]['inv_type']!= $val['inv_type']) throw new Exception("{$key}发票类型有误");
|
|
|
$update=[
|
|
|
- "status"=>in_array($val['inv_type'],["fully_digitalized_special_electronic", "fully_digitalized_normal_electronic"])?4:3,
|
|
|
+ "status"=>3,
|
|
|
"open_type"=>$inpool[$key]['open_type']??3,
|
|
|
"updatetime"=>date("Y-m-d H:i:s")
|
|
|
];
|
|
@@ -2554,38 +2568,38 @@ class OrderInv extends Base{
|
|
|
}
|
|
|
|
|
|
if($update['status']==4){
|
|
|
- $qrdArr=Db::name("assoc")->where(["viceCode"=>$key,"is_del"=>0])->column("id,orderCode,cancel_fee");
|
|
|
- if(!empty($qrdArr)){
|
|
|
- foreach ($qrdArr as $value){
|
|
|
- $qrdinfo =Db::name("qrd_info")->where(["sequenceNo"=>$value['orderCode']])->find();
|
|
|
- if($qrdinfo==false){
|
|
|
- Db::rollback();
|
|
|
- return error_show(1003,"确认单信息未找到");
|
|
|
- }
|
|
|
- if($qrdinfo['inv_fee']<$value['cancel_fee']){
|
|
|
- Db::rollback();
|
|
|
- return error_show(1003,"确认单信息开票金额不足");
|
|
|
- }
|
|
|
- $update =[
|
|
|
- "ainv_fee"=>$qrdinfo['ainv_fee']+$value['cancel_fee'],
|
|
|
- "inv_fee"=>$qrdinfo['inv_fee']-$value['cancel_fee'],
|
|
|
- "invtime"=>date("Y-m-d H:i:s"),
|
|
|
- "inv_status"=>$qrdinfo['winv_fee']==0 &&($qrdinfo['inv_fee']-$value['cancel_fee'])==0 ? 3 : 2,
|
|
|
- "updatetime"=>date("Y-m-d H:i:s"),
|
|
|
- ];
|
|
|
- $qrdup = Db::name("qrd_info")->where($qrdinfo)->update($update);
|
|
|
- if($qrdup==false){
|
|
|
- Db::rollback();
|
|
|
- return error_show(1003,"确认单信息更新失败");
|
|
|
- }
|
|
|
- $assoc=["status"=>2,"assoc_time"=>date("Y-m-d H:i:s"),"updatetime"=>date("Y-m-d H:i:s")];
|
|
|
- $assocup =Db::name("assoc")->where($value)->update($assoc);
|
|
|
- if($assocup==false){
|
|
|
- Db::rollback();
|
|
|
- return error_show(1003,"确认单关联信息更新失败");
|
|
|
+ $qrdArr=Db::name("assoc")->where(["viceCode"=>$key,"is_del"=>0])->column("id,orderCode,cancel_fee");
|
|
|
+ if(!empty($qrdArr)){
|
|
|
+ foreach ($qrdArr as $value){
|
|
|
+ $qrdinfo =Db::name("qrd_info")->where(["sequenceNo"=>$value['orderCode']])->find();
|
|
|
+ if($qrdinfo==false){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,"确认单信息未找到");
|
|
|
+ }
|
|
|
+ if($qrdinfo['inv_fee']<$value['cancel_fee']){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,"确认单信息开票金额不足");
|
|
|
+ }
|
|
|
+ $update =[
|
|
|
+ "ainv_fee"=>$qrdinfo['ainv_fee']+$value['cancel_fee'],
|
|
|
+ "inv_fee"=>$qrdinfo['inv_fee']-$value['cancel_fee'],
|
|
|
+ "invtime"=>date("Y-m-d H:i:s"),
|
|
|
+ "inv_status"=>$qrdinfo['winv_fee']==0 &&($qrdinfo['inv_fee']-$value['cancel_fee'])==0 ? 3 : 2,
|
|
|
+ "updatetime"=>date("Y-m-d H:i:s"),
|
|
|
+ ];
|
|
|
+ $qrdup = Db::name("qrd_info")->where($qrdinfo)->update($update);
|
|
|
+ if($qrdup==false){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,"确认单信息更新失败");
|
|
|
+ }
|
|
|
+ $assoc=["status"=>2,"assoc_time"=>date("Y-m-d H:i:s"),"updatetime"=>date("Y-m-d H:i:s")];
|
|
|
+ $assocup =Db::name("assoc")->where($value)->update($assoc);
|
|
|
+ if($assocup==false){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,"确认单关联信息更新失败");
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
$val['inv_type'] = $this->kingInvoice[$val['inv_type']];
|
|
|
$list[]=$val;
|
|
@@ -2650,4 +2664,193 @@ class OrderInv extends Base{
|
|
|
$up= $info->save();
|
|
|
return $up? app_show(0,"修改成功"):error_show(1004,"修改失败");
|
|
|
}
|
|
|
+ //万宇数据传递
|
|
|
+ public function importInvByWanyu(){
|
|
|
+ $param =$this->request->only(['data'=>[]],'post');
|
|
|
+ if(empty($param['data']))return error_show(1004,'参数 data 不能为空');
|
|
|
+ $total=[];
|
|
|
+ $list=[];
|
|
|
+ foreach ($param['data'] as $key=>$value){
|
|
|
+
|
|
|
+ if($value['invNo']==''){
|
|
|
+ return error_show(1005,'第'.($key+1).'行缺少发票申请编号数据');
|
|
|
+ }
|
|
|
+ if($value['inv_type']===''){
|
|
|
+ return error_show(1005,'第'.($key+1).'行缺少发票类型数据');
|
|
|
+ }
|
|
|
+ if(!in_array($value['inv_type'],$this->invName)) return error_show(1005,'第'.($key+1).'行发票类型数据有误');
|
|
|
+ if($value['inv_code']=='' && !in_array($value['inv_type'],[ 'fully_digitalized_special_electronic', 'fully_digitalized_normal_electronic'])){
|
|
|
+ return error_show(1005,'第'.($key+1).'行缺少发票代码数据');
|
|
|
+ }
|
|
|
+ if($value['inv_number']==''){
|
|
|
+ return error_show(1005,'第'.($key+1).'行缺少发票号码数据');
|
|
|
+ }
|
|
|
+ if($value['open_date']==''){
|
|
|
+ return error_show(1005,'第'.($key+1).'行缺少发票开票日期数据');
|
|
|
+ }
|
|
|
+ //电子票校验码必传
|
|
|
+ if($value['check_code']=='' && in_array($value['inv_type'],['normal','roll','toll','electronic'])){
|
|
|
+ return error_show(1005,'第'.($key+1).'行缺少发票校验码数据');
|
|
|
+ }
|
|
|
+ if($value['seller_id']=="") return error_show(1005,"第".($key+1)."行缺少销售方纳税识别号数据");
|
|
|
+ if($value['seller_title']=="") return error_show(1005,"第".($key+1)."行缺少销售方名称数据");
|
|
|
+ if($value['seller_addr']=="") return error_show(1005,"第".($key+1)."行缺少销售方地址数据");
|
|
|
+ if($value['seller_mobile']=="") return error_show(1005,"第".($key+1)."行缺少销售方联系方式数据");
|
|
|
+ if($value['seller_bank']=="") return error_show(1005,"第".($key+1)."行缺少销售方银行数据");
|
|
|
+ if($value['seller_bankNo']=="") return error_show(1005,"第".($key+1)."行缺少销售方银行账户数据");
|
|
|
+ if($value['buyer_id']=="") return error_show(1005,"第".($key+1)."行缺少购买方纳税识别号数据");
|
|
|
+ if($value['buyer_title']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['buyer_addr']=="") return error_show(1005,"第".($key+1)."行缺少购买方地址数据");
|
|
|
+ if($value['buyer_mobile']=="") return error_show(1005,"第".($key+1)."行缺少购买方联系方式数据");
|
|
|
+ if($value['buyer_bank']=="") return error_show(1005,"第".($key+1)."行缺少购买方银行数据");
|
|
|
+ if($value['buyer_bankNo']=="") return error_show(1005,"第".($key+1)."行缺少购买方银行账户数据");
|
|
|
+ if($value['buyer_title']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['XMMC']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['GGXH']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['DW']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['SPSL']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['DJ']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['JE']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['SL']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['SE']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['JSHJ']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if(isset($total[$value['invNo']])){
|
|
|
+ $total[$value['invNo']]['inv_subtotal']+= $value['JE'];
|
|
|
+ $total[$value['invNo']]['inv_total']+= $value['JSHJ'];
|
|
|
+ $total[$value['invNo']]['tax_fee']+= $value['SE'];
|
|
|
+ $item_t= json_decode($total[$value['invNo']]['item'],true);
|
|
|
+ $item_t[]=[
|
|
|
+ 'XMMC'=>$value['XMMC'],
|
|
|
+ 'GGXH'=>$value['GGXH'],
|
|
|
+ 'DW'=>$value['DW'],
|
|
|
+ 'SPSL'=>$value['SPSL'],
|
|
|
+ 'DJ'=>$value['DJ'],
|
|
|
+ 'JE'=>$value['JE'],
|
|
|
+ 'SL'=>$value['SL'],
|
|
|
+ 'SE'=>$value['SE'],
|
|
|
+ 'SPBM'=>$value['SPBM'],
|
|
|
+ 'JSHJ'=>$value['JSHJ'],
|
|
|
+ ];
|
|
|
+ $total[$value['invNo']]['item']=json_encode($item_t,JSON_UNESCAPED_UNICODE);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $item=[[ 'XMMC'=>$value['XMMC'],
|
|
|
+ 'GGXH'=>$value['GGXH'],
|
|
|
+ 'DW'=>$value['DW'],
|
|
|
+ 'SPSL'=>$value['SPSL'],
|
|
|
+ 'DJ'=>$value['DJ'],
|
|
|
+ 'JE'=>$value['JE'],
|
|
|
+ 'SL'=>$value['SL'],
|
|
|
+ 'SE'=>$value['SE'],
|
|
|
+ 'SPBM'=>$value['SPBM'],
|
|
|
+ 'JSHJ'=>$value['JSHJ'],
|
|
|
+ ]];
|
|
|
+ $temp=[];
|
|
|
+ $temp['invNo'] = $value['invNo'];
|
|
|
+ $temp['type'] = $value['type'];
|
|
|
+ $temp['inv_type'] =$value['inv_type'];
|
|
|
+ $temp['inv_code'] = $value['inv_code'];
|
|
|
+ $temp['inv_number'] = $value['inv_number'];
|
|
|
+ $temp['inv_subtotal'] = $value['JE'];
|
|
|
+ $temp['inv_total'] = $value['JSHJ'];
|
|
|
+ $temp['check_code'] = $value['check_code']??'';
|
|
|
+ $temp['seller_id'] = $value['seller_id']??'';
|
|
|
+ $temp['seller_title'] = $value['seller_title']??'';
|
|
|
+ $temp['seller_addr'] = $value['seller_addr']??'';
|
|
|
+ $temp['seller_mobile'] = $value['seller_mobile']??'';
|
|
|
+ $temp['seller_bank'] = $value['seller_bank']??'';
|
|
|
+ $temp['seller_bankNo'] = $value['seller_bankNo']??'';
|
|
|
+ $temp['buyer_id'] = $value['buyer_id']??'';
|
|
|
+ $temp['buyer_title'] = $value['buyer_title']??'';
|
|
|
+ $temp['buyer_addr'] = $value['buyer_addr']??'';
|
|
|
+ $temp['buyer_mobile'] = $value['buyer_mobile']??'';
|
|
|
+ $temp['buyer_bank'] = $value['buyer_bank']??'';
|
|
|
+ $temp['buyer_bankNo'] = $value['buyer_bankNo']??'';
|
|
|
+ $temp['tax_fee'] = $value['SE']??'';
|
|
|
+ $temp['remark'] = $value['remark']??'';
|
|
|
+ $temp['item'] =json_encode($item,JSON_UNESCAPED_UNICODE);
|
|
|
+ $temp['pdfstream'] = '';
|
|
|
+ $temp['open_date'] = date('Y-m-d H:i:s',strtotime($value['open_date']));
|
|
|
+ $temp['status'] =1;
|
|
|
+ $temp['is_del'] = 0;
|
|
|
+ $temp['addtime'] = date('Y-m-d H:i:s');
|
|
|
+ $temp['updatetime'] = date('Y-m-d H:i:s');
|
|
|
+ $total[$value['invNo']]=$temp;
|
|
|
+ }
|
|
|
+
|
|
|
+ Db::startTrans();
|
|
|
+ try{
|
|
|
+ $keyarr =array_keys($total);
|
|
|
+ $inpool = Db::name('invoice_pool')->where([['invNo','in',$keyarr],['open_type','in',[0,2,3]],['is_del','=',0],['status','=',2]])->column('winv_fee,invNo,inv_value,inv_type','invNo');
|
|
|
+
|
|
|
+ foreach ($total as $key=>$val){
|
|
|
+ if(!isset($inpool[$key])) throw new Exception("{$key}发票数据不存在或状态有误");
|
|
|
+ if(in_array($val['inv_type'],['fully_digitalized_special_electronic', 'fully_digitalized_normal_electronic']) && $inpool[$key]['winv_fee']!=$val['inv_total']){
|
|
|
+ throw new Exception("{$key}全电发票面金额小于未开票金额");
|
|
|
+ }
|
|
|
+ if($inpool[$key]['inv_type']!= $val['inv_type']) throw new Exception("{$key}发票类型有误");
|
|
|
+ $update=[
|
|
|
+ 'status'=>4,
|
|
|
+ 'open_type'=>$inpool[$key]['open_type']??3,
|
|
|
+ 'updatetime'=>date('Y-m-d H:i:s')
|
|
|
+ ];
|
|
|
+ $up =Db::name('invoice_pool')->where([['invNo','=',$key],['is_del','=',0]])->save($update);
|
|
|
+ if(!$up){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1005,'发票状态更新失败');
|
|
|
+ }
|
|
|
+
|
|
|
+ if($update['status']==4){
|
|
|
+ $qrdArr=Db::name('assoc')->where(['viceCode'=>$key,'is_del'=>0])->column('id,orderCode,cancel_fee');
|
|
|
+ if(!empty($qrdArr)){
|
|
|
+ foreach ($qrdArr as $value){
|
|
|
+ $qrdinfo =Db::name('qrd_info')->where(['sequenceNo'=>$value['orderCode']])->find();
|
|
|
+ if($qrdinfo==false){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,'确认单信息未找到');
|
|
|
+ }
|
|
|
+ if($qrdinfo['inv_fee']<$value['cancel_fee']){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,'确认单信息开票金额不足');
|
|
|
+ }
|
|
|
+ $update =[
|
|
|
+ 'ainv_fee'=>$qrdinfo['ainv_fee']+$value['cancel_fee'],
|
|
|
+ 'inv_fee'=>$qrdinfo['inv_fee']-$value['cancel_fee'],
|
|
|
+ 'invtime'=>date('Y-m-d H:i:s'),
|
|
|
+ 'inv_status'=>$qrdinfo['winv_fee']==0 &&($qrdinfo['inv_fee']-$value['cancel_fee'])==0 ? 3 : 2,
|
|
|
+ 'updatetime'=>date('Y-m-d H:i:s'),
|
|
|
+ ];
|
|
|
+ $qrdup = Db::name('qrd_info')->where($qrdinfo)->update($update);
|
|
|
+ if($qrdup==false){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,'确认单信息更新失败');
|
|
|
+ }
|
|
|
+ $assoc=['status'=>2,'assoc_time'=>date('Y-m-d H:i:s'),'updatetime'=>date('Y-m-d H:i:s')];
|
|
|
+ $assocup =Db::name('assoc')->where($value)->update($assoc);
|
|
|
+ if($assocup==false){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,'确认单关联信息更新失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $val['inv_type'] = $this->kingInvoice[$val['inv_type']];
|
|
|
+ $list[]=$val;
|
|
|
+ }
|
|
|
+
|
|
|
+ $inticket =Db::name('invoice_ticket')->insertAll($list);
|
|
|
+ if(!$inticket){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1005,'发票数据录入失败');
|
|
|
+ }
|
|
|
+ Db::commit();
|
|
|
+ return app_show(0,'发票数据录入成功');
|
|
|
+
|
|
|
+ }catch (\Exception $e){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1008,$e->getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|