cqp 5 miesięcy temu
rodzic
commit
b25467beea

+ 13 - 0
app/Http/Controllers/Api/PurchaseOrderSpecialController.php

@@ -71,4 +71,17 @@ class PurchaseOrderSpecialController extends BaseController
             return $this->json_return(201,$data);
         }
     }
+
+    public function purchaseOrderSubmit(Request $request)
+    {
+        $service = new PurchaseOrderSpecialService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->purchaseOrderSubmit($request->all(),$userData);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
 }

+ 4 - 0
app/Model/OrderOperation.php

@@ -42,6 +42,8 @@ class OrderOperation extends Model
     const twenty_six = 26;
     const twenty_seven = 27;
     const twenty_eight = 28;
+    const twenty_nine = 29;
+    const thirty = 30;
 
     public static $type = [
         self::zero => '系统设置变更 ',
@@ -73,5 +75,7 @@ class OrderOperation extends Model
         self::twenty_six => '施工单分配/调配',
         self::twenty_seven => '活动包确认',
         self::twenty_eight => '活动包弃审',
+        self::twenty_nine => '虚拟采购单确认',
+        self::thirty => '虚拟采购单弃审',
     ];
 }

+ 2 - 0
app/Model/PurchaseOrderSpecial.php

@@ -8,11 +8,13 @@ class PurchaseOrderSpecial extends UseScopeBaseModel
     const CREATED_AT = 'crt_time';
     const UPDATED_AT = 'upd_time';
     protected $dateFormat = 'U';
+    const State_minus_one = -1;//驳回
     const STATE_ZERO = 0;//未确认
     const STATE_ONE = 1;//待确认
     const STATE_TWO = 2;//已确认
     const prefix = 'XNCG';
     public static $name = [
+        self::State_minus_one => '驳回',
         self::STATE_ZERO => '未确认',
         self::STATE_ONE => '待确认',
         self::STATE_TWO => '已确认',

+ 54 - 0
app/Service/CheckService.php

@@ -50,6 +50,7 @@ class CheckService extends Service
     const ten  = 10; //收付款确认
     const eve  = 11; //接受派单
     const twl  = 12; //活动包
+    const thi  = 13; //虚拟采购单
 
     //中文对照
     public $map = [
@@ -65,6 +66,7 @@ class CheckService extends Service
         self::ten => '收付款确认',
         self::eve => '接受门店派单',
         self::twl => '活动包',
+        self::thi => '虚拟采购单'
     ];
 
     //入库操作
@@ -97,6 +99,7 @@ class CheckService extends Service
         self::eight => 'waitSales', // 合同安装件 合同确认
         self::ten => 'waitPaymentReceipt', //收付款确认
         self::twl => 'waitSportsBag', //活动包确认
+        self::thi => 'waitPurchaseSpecial', //虚拟采购单
     ];
 
     public static $finished = [
@@ -116,6 +119,7 @@ class CheckService extends Service
         self::eight => 'confirmSales', // 合同 安装件 合同确认
         self::ten => 'confirmPaymentReceipt', // 确认收付款单
         self::twl => 'confirmSportsBag', // 确认活动包
+        self::thi => 'confirmPurchaseSpecial', //虚拟采购单
     ];
 
     //单据库存流水
@@ -147,6 +151,7 @@ class CheckService extends Service
         self::six => 'reject_return_exchange',//退换货
         self::ten => 'reject_payment_receipt',//收付款单
         self::twl => 'reject_sports_bag',//活动包
+        self::thi => 'reject_purchase_special',//虚拟采购单
     ];
 
     //审核通过后 驳回 产生流水
@@ -166,6 +171,7 @@ class CheckService extends Service
         self::three => OrderOperation::fourteen,//采购单入库
         self::ten => OrderOperation::twenty_one,//收付款单
         self::twl => OrderOperation::twenty_one,//收付款单
+        self::thi => OrderOperation::twenty_nine,//虚拟采购单
     ];
 
     //旅程日志 驳回
@@ -177,6 +183,7 @@ class CheckService extends Service
         self::seven => OrderOperation::twenty,//采购单确认弃审
         self::ten => OrderOperation::twenty_two,//收付款单
         self::twl => OrderOperation::twenty_eight,//活动包
+        self::thi => OrderOperation::thirty,//虚拟采购单
     ];
 
     //校验
@@ -261,6 +268,20 @@ class CheckService extends Service
         return [true, $model->toArray()];
     }
 
+    public function waitPurchaseSpecial($data){
+    $model = PurchaseOrderSpecial::where('id',$data['id'])
+        ->where('del_time',0)
+        ->first();
+    if(empty($model)) return [false, '虚拟采购订单不存在或已被删除'];
+    if($model->state > PurchaseOrderSpecial::STATE_ZERO) return [false, '请确认虚拟采购订单状态,操作失败'];
+
+    //待入库
+    PurchaseOrderSpecial::where('del_time',0)->where('id',$data['id'])
+        ->update(['state' => PurchaseOrder::STATE_ONE]);
+
+    return [true, $model->toArray()];
+}
+
     public function waitConstruction($data){
         $model = Construction::where('id',$data['id'])
             ->where('del_time',0)
@@ -768,6 +789,25 @@ class CheckService extends Service
         return [true,''];
     }
 
+    public function confirmPurchaseSpecial($data){
+        $model = PurchaseOrderSpecial::where('order_number',$data['order_number'])
+            ->where('del_time',0)
+            ->first();
+        if(empty($model)) return [false,'虚拟采购订单不存在或已被删除'];
+        if($model->state != PurchaseOrderSpecial::STATE_ONE) return [false,'请确认虚拟采购订单状态,操作失败'];
+
+        if($data['type'] == self::TYPE_ONE){
+            $model->state = PurchaseOrderSpecial::STATE_TWO;
+            $model->save();
+        }else{
+            //驳回
+            $model->state = PurchaseOrderSpecial::State_minus_one;
+            $model->save();
+        }
+
+        return [true, $model->toArray()];
+    }
+
     public function confirmConstruction($data){
         $model = Construction::where('order_number',$data['order_number'])
             ->where('del_time',0)
@@ -1064,6 +1104,20 @@ class CheckService extends Service
         return [true, $model->toArray()];
     }
 
+    public function reject_purchase_special($data){
+        $model = PurchaseOrderSpecial::where('order_number', $data['order_number'])
+            ->where('del_time',0)
+            ->first();
+        if(empty($model)) return [false, '虚拟采购订单不存在或已被删除'];
+        //安装件
+        if($model->state != PurchaseOrderSpecial::STATE_TWO) return [false, '请确认虚拟采购订单状态,操作失败'];
+
+        $model->state = PurchaseOrder::STATE_ZERO;
+        $model->save();
+
+        return [true, $model->toArray()];
+    }
+
     public function reject_purchase_confirm($data){
         $model = PurchaseOrder::where('order_number', $data['order_number'])
             ->where('del_time',0)

+ 11 - 0
app/Service/PaymentReceiptService.php

@@ -949,4 +949,15 @@ class PaymentReceiptService extends Service
         }
         if(! empty($insert)) PaymentReceiptInfo::insert($insert);
     }
+
+    public function checkForEdit($data_order_no = ""){
+        if(empty($data_order_no)) return [false, '校验参数异常'];
+
+        $bool = PaymentReceipt::where('data_order_no', $data_order_no)
+            ->where('del_time',0)
+            ->exists();
+        if(! $bool) return [true, ''];
+
+        return [false, "单号:" . $data_order_no . "已建收付款单,编辑操作有可能改变单据原始总金额导致收付款金额错乱,请先删除收付款单据!"];
+    }
 }

+ 96 - 6
app/Service/PurchaseOrderSpecialService.php

@@ -38,7 +38,9 @@ class PurchaseOrderSpecialService extends Service
             DB::beginTransaction();
             $material_model = PurchaseOrderSpecial::where('order_number',$data['order_number'])->first();
             $material_model->order_number = $data['order_number'];
+            $material_model->purchase_total = $data['purchase_total'] ?? 0;
             $material_model->other_fee = $data['other_fee'] ?? 0;
+            $material_model->discount_fee = $data['discount_fee'] ?? 0;
             $material_model->mark = $data['mark'] ?? '';
             $material_model->save();
 
@@ -131,7 +133,7 @@ class PurchaseOrderSpecialService extends Service
 
         $order = PurchaseOrderSpecial::where('order_number',$data['order_number'])
             ->where('del_time',0)
-            ->select('id','order_number','depart_id','mark','state','crt_id','sales_order_id','supplier','purchase_id','purchase_total','crt_time','storehouse_id','top_depart_id','total','other_fee','type')
+            ->select('id','order_number','depart_id','mark','state','crt_id','sales_order_id','supplier','purchase_id','purchase_total','crt_time','storehouse_id','top_depart_id','total','other_fee','type','discount_fee')
             ->first();
         if(empty($order)) return [false, '虚拟采购单不存在或已被删除'];
         $order = $order->toArray();
@@ -139,7 +141,7 @@ class PurchaseOrderSpecialService extends Service
         $order['storehouse_title'] = Storehouse::where('id',$order['storehouse_id'])->value('title');
         $supplier = Depart::where('id',$order['supplier'])->first();
         $order['supplier_title'] = $supplier->title ?? '';
-        $order['state_title'] = PurchaseOrderSpecial::$name[$order['state']] ?? '';
+//        $order['state_title'] = PurchaseOrderSpecial::$name[$order['state']] ?? '';
         $order['type_title'] = PurchaseOrderSpecial::$type[$order['type']] ?? '';
         $sales_order_number = SalesOrder::where('id',$order['sales_order_id'])->value('order_number');
         $order['sales_order_number'] = $sales_order_number;
@@ -167,6 +169,9 @@ class PurchaseOrderSpecialService extends Service
         $order['crt_name'] = $emp_map[$order['crt_id']] ?? '';
         $order['crt_time'] = $order['crt_time'] ? date("Y-m-d H:i:s",$order['crt_time']): '';
 
+        $state_array = $this->getStateMake([$order]);
+        $order['state_title'] = $this->makeState($order,$state_array);
+
         //退换货信息
         $order['return_exchange'] = (new ReturnExchangeOrderService())->getDifferentAmount($order['sales_order_id']);
         $order['return_exchange_amount'] = 0;
@@ -227,7 +232,7 @@ class PurchaseOrderSpecialService extends Service
      */
     public function getList($data,$user){
         $model = PurchaseOrderSpecial::Clear($user,$data);
-        $model = $model->where('del_time',0)->select('order_number','id','depart_id','top_depart_id','mark','crt_time','state','crt_id','sales_order_id','supplier','purchase_id','purchase_total','storehouse_id','total','other_fee','type')
+        $model = $model->where('del_time',0)->select('order_number','id','depart_id','top_depart_id','mark','crt_time','state','crt_id','sales_order_id','supplier','purchase_id','purchase_total','storehouse_id','total','other_fee','type','discount_fee')
             ->orderby('id', 'desc');
         if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
         if(isset($data['state'])) $model->where('state',$data['state']);
@@ -283,11 +288,15 @@ class PurchaseOrderSpecialService extends Service
         list($for_amount_list, $for_amount_list1) = (new PaymentReceiptService())->getPaymentReceiptDataCountList(array_column($data['data'],'order_number'));
         list($getDifferentAmountALL,$getDifferentAmountALL1) = (new ReturnExchangeOrderService())->getDifferentAmountALLNew(array_column($data['data'],'sales_order_id'));
 
+        //订单状态数据组织
+        $state_array = $this->getStateMake($data['data']);
+
         foreach ($data['data'] as $key => $value){
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']) : '';
             $data['data'][$key]['crt_name'] = $emp_map[$value['crt_id']] ?? '';
             $data['data'][$key]['purchase_name'] = $emp_map[$value['purchase_id']] ?? '';
-            $data['data'][$key]['state_title'] = PurchaseOrderSpecial::$name[$value['state']] ?? '';
+            $data['data'][$key]['state_title'] = $this->makeState($data['data'][$key], $state_array);
+//            $data['data'][$key]['state_title'] = PurchaseOrderSpecial::$name[$value['state']] ?? '';
             $data['data'][$key]['sales_order_number'] = $sales[$value['sales_order_id']] ?? '';
             $data['data'][$key]['supplier_title'] = $supplier[$value['supplier']] ?? '';
             $data['data'][$key]['type_title'] = PurchaseOrderSpecial::$type[$value['type']] ?? "";
@@ -336,7 +345,21 @@ class PurchaseOrderSpecialService extends Service
      */
     public function orderRule(&$data, $user, $is_check = true){
         if(! isset($data['mark']) && ! isset($data['other_fee'])) return [false, '请填写更新的内容'];
-        if(isset($data['other_fee']) && ! is_numeric($data['other_fee'])) return [false, '其他费用请填写正确的数值'];
+        if(isset($data['other_fee'])) {
+            $res = $this->checkNumber($data['other_fee']);
+            if(! $res) return [false, '其他费用请输入不超过两位小数并且大于0的数值'];
+        }
+        $other_fee = $discount_fee = 0;
+        if(isset($data['other_fee'])) {
+            $res = $this->checkNumber($data['other_fee']);
+            if(! $res) return [false, '其他费用请输入不超过两位小数并且大于0的数值'];
+            $other_fee = $data['other_fee'];
+        }
+        if(isset($data['discount_fee'])) {
+            $res = $this->checkNumber($data['discount_fee']);
+            if(! $res) return [false, '优惠金额请输入不超过两位小数并且大于0的数值'];
+            $discount_fee = $data['discount_fee'];
+        }
 
         //所属部门 以及 顶级部门
         if(empty($data['depart_id'])) $data['depart_id'] = $this->getDepart($user);
@@ -350,9 +373,76 @@ class PurchaseOrderSpecialService extends Service
             if($this->isEmpty($data,'order_number')) return [false,'虚拟采购单号不能为空!'];
             $purchase = PurchaseOrderSpecial::where('del_time',0)->where('order_number',$data['order_number'])->first();
             if(empty($purchase)) return [false, '虚拟采购单不存在或已被删除'];
-            if($purchase->state > PurchaseOrderSpecial::STATE_ZERO) return [false,'请确认虚拟采购单单据状态,修改失败'];
+            $purchase = $purchase->toArray();
+            if($purchase['state'] > PurchaseOrderSpecial::STATE_ZERO) return [false,'请确认虚拟采购单单据状态,修改失败'];
+
+//            list($status, $msg) = (new PaymentReceiptService())->checkForEdit($data['order_number']);
+//            if(! $status) return [false, $msg];
+
+            //原来的采购总价
+            $purchase_total = bcadd(bcsub($purchase['purchase_total'], $purchase['other_fee'],2), $purchase['discount_fee'], 2);
+            //现在的采购总价
+            $now_purchase_total = bcsub(bcadd($purchase_total, $other_fee,2), $discount_fee, 2);
+            $data['purchase_total'] = $now_purchase_total;
         }
 
         return [true, ''];
     }
+
+    public function submitOrderRule(&$data, $user){
+        if($this->isEmpty($data,'order_number')) return [false,'虚拟采购订单号不能为空!'];
+        $purchase = PurchaseOrderSpecial::where('del_time',0)->where('order_number',$data['order_number'])->first();
+        if(empty($purchase)) return [false, '虚拟采购订单不存在或已被删除'];
+        $purchase = $purchase->toArray();
+        if($purchase['state'] > PurchaseOrderSpecial::STATE_ZERO) return [false,'请确认虚拟采购订单单据状态,修改失败'];
+
+        return [true, $purchase];
+    }
+
+    public function purchaseOrderSubmit($data,$user){
+        list($status,$msg) = $this->submitOrderRule($data, $user);
+        if(!$status) return [$status,$msg];
+        $order = $msg;
+
+        try {
+            list($status,$msg) = (new CheckService())->checkAll([
+                "id" => $order['id'],
+                "order_number" => $order['order_number'],
+                "opt_case" => CheckService::thi,
+                "menu_id" => $data['menu_id']
+            ],$user);
+            if(! $status) return [false, $msg];
+        }catch (\Throwable $exception){
+            return [false, $exception->getMessage()];
+        }
+
+        return [true,''];
+    }
+
+    public function getStateMake($data){
+        if(empty($data)) return [];
+
+        $order_no = [];
+        foreach ($data as $value){
+            if(! in_array($value['state'], [PurchaseOrderSpecial::State_minus_one,PurchaseOrderSpecial::STATE_ONE])) continue;
+            $order_no[] = $value['order_number'];
+        }
+
+        return (new OaService())->getOaTeamDetailList($order_no);
+    }
+
+    public function makeState($value, $state_array){
+        if(! empty($state_array[$value['order_number']])){
+            $return = $state_array[$value['order_number']];
+            if($value['state'] == PurchaseOrderSpecial::State_minus_one){
+                $state = "驳回:" . $return;
+            }else{
+                $state = "待" . $return . "审核";
+            }
+        }else{
+            $state = PurchaseOrderSpecial::$name[$value['state']] ?? '';
+        }
+
+        return $state;
+    }
 }

+ 2 - 0
config/morequery.php

@@ -19,6 +19,7 @@ return [
         "api/ReturnExchangeOrderEdit" => 35,
         "api/constructionList" => 34,
         "api/getSettingGetDetail2" => 34,
+        "api/purchaseOrderSubmit" => 44,
         "api/purchaseOrderList" => [
             'key' => 'order_type',
             'array' => [
@@ -44,6 +45,7 @@ return [
         "wx/ReturnExchangeOrderEdit" => 35,
         "wx/constructionList" => 34,
         "wx/getSettingGetDetail2" => 34,
+        "wx/purchaseOrderSubmit" => 44,
         "wx/purchaseOrderList" => [
             'key' => 'order_type',
             'array' => [

+ 1 - 0
routes/api.php

@@ -174,6 +174,7 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('purchaseOrderSpecialList', 'Api\PurchaseOrderSpecialController@purchaseOrderList');
     $route->any('purchaseOrderSpecialDetail', 'Api\PurchaseOrderSpecialController@purchaseOrderDetail');
     $route->any('purchaseOrderSpecialEdit', 'Api\PurchaseOrderSpecialController@purchaseOrderEdit');
+    $route->any('purchaseOrderSubmit', 'Api\PurchaseOrderSpecialController@purchaseOrderSubmit');
 
     //发货单
     $route->any('invoiceOrderList', 'Api\InvoiceOrderController@invoiceOrderList');