cqp пре 3 месеци
родитељ
комит
1234ebd20c

+ 4 - 0
app/Model/OrderOperation.php

@@ -45,6 +45,8 @@ class OrderOperation extends Model
     const twenty_nine = 29;
     const thirty = 30;
     const thirty_one = 31;
+    const thirty_two = 32;
+    const thirty_three = 33;
 
     public static $type = [
         self::zero => '系统设置变更 ',
@@ -79,5 +81,7 @@ class OrderOperation extends Model
         self::twenty_nine => '虚拟采购单确认',
         self::thirty => '虚拟采购单弃审',
         self::thirty_one => '合同批量门店派单',
+        self::thirty_two => '申请出库',
+        self::thirty_three => '销售单仓库出库',
     ];
 }

+ 1 - 0
app/Model/RoleMenuButton.php

@@ -18,4 +18,5 @@ class RoleMenuButton extends Model
     const special_five = -5;
     const special_six = -6;
     const special_seven = -7;
+    const special_eight = -8;
 }

+ 1 - 0
app/Service/CheckService.php

@@ -190,6 +190,7 @@ class CheckService extends Service
         self::ten => OrderOperation::twenty_one,//收付款单
         self::twl => OrderOperation::twenty_one,//收付款单
         self::thi => OrderOperation::twenty_nine,//虚拟采购单
+        self::sixteen => OrderOperation::thirty_three,//出库单
     ];
 
     //旅程日志 驳回

+ 1 - 0
app/Service/EmployeeService.php

@@ -1369,6 +1369,7 @@ class EmployeeService extends Service
         }
 
         $object = [];
+
         //超级管理员
         if($user['id'] == Employee::SPECIAL_ADMIN){
             foreach ($menu as $value){

+ 92 - 1
app/Service/OutBoundOrderService.php

@@ -354,11 +354,102 @@ class OutBoundOrderService extends Service
 
         // 合同 出库
         $return = [];
-        if($data['type'] == OutBoundOrder::out_type_one) $return = $this->getSalesProduct($data, $user);
+        if($data['type'] == OutBoundOrder::out_type_one) $return = $this->getSalesProductForList($data, $user);
 
         return [true, $return];
     }
 
+    public function getSalesProductForList($data, $user){
+        $return = [];
+        $data_id = $data['data_id'];
+        $out_bound_id = $data['out_bound_id'] ?? 0;
+        $product = SalesOrderProductInfo::where('del_time',0)
+            ->where('sales_order_id', $data_id)
+            ->select('product_id', 'number', 'final_amount','price')
+            ->get()->toArray();
+        $map = (new ProductService())->getProductDetail(array_column($product,'product_id'));
+
+        //合同出库产品
+        $product_map = [];
+        $save = OutBoundOrderInfo::where('del_time',0)
+            ->where('type', $data['type'])
+            ->where('data_id', $data_id)
+            ->when(! empty($out_bound_id), function ($query) use ($out_bound_id) {
+                return $query->where('out_bound_id', '<>', $out_bound_id);
+            })
+            ->select('product_id', 'number', 'final_amount')
+            ->get()->toArray();
+        foreach ($save as $value){
+            if(isset($product_map[$value['product_id']])){
+                $number = bcadd($value['number'], $product_map[$value['product_id']]);
+                $product_map[$value['product_id']] = $number;
+            }else{
+                $product_map[$value['product_id']] = $value['number'];
+            }
+        }
+
+        //合同退货产品
+        $product_map2 = [];
+        $return_id = ReturnExchangeOrder::where('del_time',0)
+            ->where('type', ReturnExchangeOrder::Order_type)
+            ->where('model_type', ReturnExchangeOrder::Model_type_one)
+            ->where('data_id', $data_id)
+            ->select('id')
+            ->get()->toArray();
+        $save2 = ReturnExchangeOrderProductInfo::where('del_time',0)
+            ->whereIn('return_exchange_id', array_column($return_id,'id'))
+            ->where('return_or_exchange',ReturnExchangeOrderProductInfo::type_one)
+            ->select('product_id', 'number', 'final_amount')
+            ->get()->toArray();
+        foreach ($save2 as $value){
+            if(isset($product_map2[$value['product_id']])){
+                $number = bcadd($value['number'], $product_map2[$value['product_id']]);
+                $product_map2[$value['product_id']] = $number;
+            }else{
+                $product_map2[$value['product_id']] = $value['number'];
+            }
+        }
+
+        foreach ($product as $value){
+            //合同出库产品
+            $p1 = $product_map[$value['product_id']] ?? 0;
+            //合同退货产品
+            $p2 = $product_map2[$value['product_id']] ?? 0;
+            $number = bcsub(bcsub($value['number'], $p1), $p2);
+
+            if($p1 > 0) {
+                $state = 2;
+                $state_title = "已出库";
+            }else{
+                if($p2 > 0){
+                    $state_title = "已退货";
+                    $state = 1;
+                }else{
+                    $state_title = "未出库";
+                    $state = 0;
+                }
+            }
+
+            $tmp = $map[$value['product_id']] ?? [];
+            $return[] = [
+                'number' => $number, //可出数量
+                'out_number' => $p1, //已出库数量
+                'return_number' => $p2, //已退货数量
+                'state' => $state,
+                'state_title' => $state_title,
+                'price' => $value['price'],
+                'final_amount' => bcmul($value['price'], $number,2),
+                'product_id' => $value['product_id'],
+                'title' => $tmp['title'] ?? "",
+                'code' => $tmp['code'] ?? "",
+                'size' => $tmp['size'] ?? "",
+                'unit' => $tmp['unit'] ?? "",
+            ];
+        }
+
+        return $return;
+    }
+
     public function getSalesProduct($data, $user){
         $return = [];
         $data_id = $data['data_id'];

+ 11 - 1
app/Service/SalesOrderService.php

@@ -24,6 +24,7 @@ use App\Model\SalesOrderProductInfo;
 use App\Model\SeeRange;
 use App\Model\SportsBag;
 use App\Model\SportsBagProductInfo;
+use App\Model\Storehouse;
 use App\Model\U8Job;
 use App\Model\WxEmployee;
 use App\Service\Weixin\WxSendMessageService;
@@ -584,6 +585,7 @@ class SalesOrderService extends Service
         $sales['take_address'] = $take_address;
         $sales['take_man'] = $take_man;
         $sales['take_phone'] = $take_phone;
+        $sales['storehouse_id'] = Storehouse::where('del_time', 0)->where('top_depart_id', $sales['top_depart_id'])->value('id') ?? 0;
 
         $is_add_construction = 0;
         if($sales['top_depart_id'] == $user['head']['id']){
@@ -823,6 +825,8 @@ class SalesOrderService extends Service
         }else{
             $model = $model->orderby('id', 'desc');
         }
+        if(isset($data['out_state'])) $model->where('out_state', $data['out_state']);
+
         $is_dispatch = -1;
         if(isset($data['is_dispatch'])) {
             if($data['is_dispatch'] == 0){
@@ -2239,7 +2243,7 @@ class SalesOrderService extends Service
         return [true, array_values($return)];
     }
 
-    //销售点击出库
+    //申请出库
     public function salesClickOut($data, $user){
         if(empty($data['id'])) return [false, '合同ID不能为空'];
 
@@ -2256,6 +2260,12 @@ class SalesOrderService extends Service
 
             SalesOrder::where('id',$sales['id'])->update(['out_state' => SalesOrder::out_one]);
 
+            (new OrderOperationService())->add([
+                'order_number' => $data['order_number'],
+                'msg' => OrderOperation::$type[OrderOperation::thirty_two],
+                'type' => OrderOperation::thirty_two
+            ],$user);
+
             DB::commit();
         }catch (\Throwable $exception){
             DB::rollBack();

+ 14 - 0
config/specialButton.php

@@ -51,5 +51,19 @@ return [
 //        "func" => "special_purchase_discount_fee",
 //        "menu_id" => 45,
 //    ],
+    [
+        "id" => \App\Model\RoleMenuButton::special_eight,
+        "title" => "仓库出库权限",
+        "sort" => -8,
+        "func" => "special_operation_out",
+        "menu_id" => 37,
+    ],
+    [
+        "id" => \App\Model\RoleMenuButton::special_eight,
+        "title" => "仓库出库权限",
+        "sort" => -8,
+        "func" => "special_operation_out",
+        "menu_id" => 43,
+    ],
 ];