cqpCow 1 년 전
부모
커밋
b66f959e55

+ 9 - 6
app/Model/PurchaseOrder.php

@@ -18,14 +18,17 @@ class PurchaseOrder extends UseScopeBaseModel
         self::STATE_TWO => '已入库',
     ];
 
-    const Order_type_one = 1;//普通采购
-    const Order_type_two = 2;//代发采购
-    const Order_type_three = 3;//采购施工(安装费)
+    const Order_type_one = 1;//总社采购
+    const Order_type_two = 2;//分社外采
+    const Order_type_three = 3;//分社要货 不要合同
+    const Order_type_four = 4;//分社订货 要合同
+    const Order_type_five = 5;
 
     public static $order_type = [
-        self::Order_type_one => '普通采购',
-        self::Order_type_two => '代发采购',
-        self::Order_type_three => '采购施工(安装费)'
+        self::Order_type_one => '总社采购',
+        self::Order_type_two => '分社外采',
+        self::Order_type_three => '分社要货',
+        self::Order_type_four => '分社订货',
     ];
 
     const range_function = 'purchaseRange';

+ 25 - 5
app/Service/CheckService.php

@@ -216,19 +216,37 @@ class CheckService extends Service
         $model->discount_fee = $order['discount_fee'];
         $model->contract_fee = $order['purchase_total'];
         $model->save();
+        $sales_order_id = $model->id;
 
         //产品字典
-        $map = (new ProductService())->getProductDetail(array_column($product,'product_id'));
+        $product_map = (new ProductService())->getProductDetail(array_column($product,'product_id'));
+
+        //获取产品采购使用金额
+        $map = (new ProductService())->getProductPrice(array_column($product,'product_id'),1);
+        //获取部门目前使用的分社价
+        $basic_type_id = Depart::where('id',$order['top_depart_id'])->value('basic_type_id');
+        //产品对应的分社价
+        $new_map = [];
+        foreach ($map as $product_id => $value){
+            foreach ($value as $v){
+                if($v['basic_type_id'] == $basic_type_id && ! empty($v['price'])) $new_map[$product_id] = $v['price'];
+            }
+        }
 
         $insert = [];
+        $product_total = 0;
         foreach ($product as $value){
-            $tmp = $map[$value['product_id']] ?? [];
+            $tmp = $product_map[$value['product_id']] ?? [];
+            $fs_price = $new_map[$value['product_id']] ?? 0;
+            //有分社价就是分社价格 没有就是零售
+            $price = $fs_price ? $fs_price : $tmp['retail_price'];
+            $product_total += $price * $value['number'];
             $insert[] = [
-                'sales_order_id' => $model->id,
+                'sales_order_id' => $sales_order_id,
                 'product_id' => $value['product_id'],
                 'number' => $value['number'],
-                'basic_type_id' => $value['basic_type_id'],
-                'price' => $value['price'],
+                'basic_type_id' => $basic_type_id,
+                'price' => $price,
                 'cost' => $tmp['cost'] ?? 0,
                 'retail_price' => $tmp['retail_price'] ?? 0,
             ];
@@ -236,6 +254,8 @@ class CheckService extends Service
         $bool = SalesOrderProductInfo::insert($insert);
         if(! $bool) return [false,'合同生成失败!'];
 
+        //反写产品总计
+        SalesOrder::where('id',$sales_order_id)->update(['product_total' => $product_total]);
         return [true,''];
     }
 

+ 24 - 4
app/Service/EmployeeService.php

@@ -548,6 +548,7 @@ class EmployeeService extends Service
                 $model->code = $value['code'];
                 $model->is_main = $value['is_main'];
                 $model->basic_type_id = $value['basic_type_id'] ?? 0;
+                $model->rate = $value['rate'] ?? 0;
                 $model->save();
                 $depart_id = $model->id;
                 if(empty($depart_id)) {
@@ -663,13 +664,20 @@ class EmployeeService extends Service
      */
     public function departList($data,$user){
         $model = Depart::where('del_time',0)
-            ->select('title','id','code','parent_id','is_main','basic_type_id')
+            ->select('title','id','code','parent_id','is_main','basic_type_id','rate')
             ->orderby('code', 'asc');
 
-        if($user['id'] != Employee::SPECIAL_ADMIN && ! $user['is_all_depart'] && empty($data['get_top'])){
-            $depart_id = $this->getDepartIdList($user);
-            $model->whereIn('id',$depart_id);
+        if(! empty($data['get_top']) && $data['get_top'] == 1){
+            //指派销售
+            $depart_id = $this->getDepartIdListOfMySales($user);
+            $model->whereIn('id', $depart_id);
+        }else{
+            if($user['id'] != Employee::SPECIAL_ADMIN && ! $user['is_all_depart'] && empty($data['get_top'])){
+                $depart_id = $this->getDepartIdList($user);
+                $model->whereIn('id',$depart_id);
+            }
         }
+
         if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
         if(! empty($data['code'])) $model->where('code', 'LIKE', '%'.$data['code'].'%');
 
@@ -716,6 +724,18 @@ class EmployeeService extends Service
         return array_unique($result);
     }
 
+    //获取指派销售时的部门
+    public function getDepartIdListOfMySales($user){
+        $top = $user['depart_top'][0] ?? [];
+        $top = $top['depart_id'] ?? 0;
+        $list = Depart::where('del_time',0)->select('id','parent_id')->get()->toArray();
+        // 查找所有子级id
+        $childIds = $this->findChildIds($top, $list);
+        $result = array_merge($childIds, [$top]);
+
+        return $result;
+    }
+
     /**
      * 部门参数规则
      * @param $data

+ 8 - 1
app/Service/PurchaseOrderService.php

@@ -318,6 +318,13 @@ class PurchaseOrderService extends Service
                 $model->where('crt_time','<=',$end);
             }
         }
+        if(! empty($data['order_type'])) {
+            if($data['order_type'] != PurchaseOrder::Order_type_five){
+                $model->whereIn('order_type',[PurchaseOrder::Order_type_two,PurchaseOrder::Order_type_three,PurchaseOrder::Order_type_four]);
+            }else{
+                $model->where('order_type',$data['order_type']);
+            }
+        }
 
         $list = $this->limit($model,'',$data);
         $list = $this->fillListData($list,$data,$user);
@@ -414,7 +421,7 @@ class PurchaseOrderService extends Service
      */
     public function orderRule(&$data, $user, $is_check = true){
         if(empty($data['order_type'])) return [false,'采购订单类型不能为空'];
-        if($data['order_type'] == PurchaseOrder::Order_type_two && empty($data['sales_order_id'])) return [false, PurchaseOrder::$order_type[PurchaseOrder::Order_type_two] . '必须选择合同'];
+        if($data['order_type'] == PurchaseOrder::Order_type_four && empty($data['sales_order_id'])) return [false, PurchaseOrder::$order_type[PurchaseOrder::Order_type_four] . '必须选择合同'];
         if($this->isEmpty($data,'product')) return [false,'产品不能为空'];
         if(empty($data['storehouse_id'])) return [false,'请选择仓库'];
         if(! empty($data['other_fee'])){

+ 2 - 12
app/Service/RangeService.php

@@ -348,18 +348,9 @@ class RangeService extends Service
         return $return_id;
     }
 
-    //产品可见部门
-    public static function productSeeRange($product_id){
+    //产品可见部门
+    public static function productNotSeeRange($product_id){
         $return = [];
-        $product = Product::whereIn('id',$product_id)
-            ->select('id','top_depart_id','depart_id')
-            ->get()->toArray();
-        foreach ($product as $value){
-            $return[$value['id']][] = $value['depart_id'];
-            $return[$value['id']][] = $value['top_depart_id'];
-            $return[$value['id']] = array_unique($return[$value['id']]);
-        }
-
         $result = SeeRange::where('del_time',0)
             ->where('data_type', SeeRange::type_four)
             ->whereIn('data_id',$product_id)
@@ -368,7 +359,6 @@ class RangeService extends Service
             ->get()->toArray();
         foreach ($result as $value){
             $return[$value['product_id']][] = $value['depart_id'];
-            $return[$value['product_id']] = array_unique($return[$value['product_id']]);
         }
 
         return $return;

+ 17 - 8
app/Service/SalesOrderService.php

@@ -522,6 +522,15 @@ class SalesOrderService extends Service
             $model->where('state','<',SalesOrder::State_five);
         }
         if(! empty($data['sales_order_id'])) $model->where('id',$data['sales_order_id']);
+        if(! empty($data['order_list'])){
+            if($data['order_list'] == 1){
+                //订单合同 安装件合同 状态未指派总社分社的 或者 快递件合同
+                $model->where('state', '<=', 1);
+            }elseif($data['order_list'] == 2){
+                //派单合同 安装件合同 状态已指派总社分社的
+                $model->where('state', '>=', 2);
+            }
+        }
 
         $list = $this->limit($model,'',$data);
         $list = $this->fillData($list,$data);
@@ -884,14 +893,14 @@ class SalesOrderService extends Service
 
         if(empty($data['dispatch_depart_two'])) return [false, '请指派总社或分社'];
         $product = array_unique(array_column($product,'product_id'));
-        $return = RangeService::productSeeRange($product);
-        if(empty($return)) return [false,'产品对于该总社或分社可见范围不能为空'];
-        $map = Product::whereIn('id',$product)->pluck('title','id')->toArray();
-
-        foreach ($data['dispatch_depart_two'] as $value){
-            foreach ($return as $key => $values){
-                $tmp = $map[$key] ?? "";
-                if(! in_array($value, $values)) return [false,'产品'. $tmp .'对于该总社或分社可见范围不能为空'];
+        $return = RangeService::productNotSeeRange($product);
+        if(! empty($return)){
+            $map = Product::whereIn('id',$product)->pluck('title','id')->toArray();
+            foreach ($data['dispatch_depart_two'] as $value){
+                foreach ($return as $key => $values){
+                    $tmp = $map[$key] ?? "";
+                    if(in_array($value, $values)) return [false,'产品'. $tmp .'对于该总社或分社不可见'];
+                }
             }
         }
 

+ 9 - 3
app/Service/StorehouseService.php

@@ -82,21 +82,27 @@ class StorehouseService extends Service
     public function storehouseList($data, $user){
         $model = Storehouse::TopClear($user,$data);
         $model = $model->where('del_time',0)
-            ->select('id','title')
+            ->select('id','title','depart_id')
             ->orderBy('id','asc');
 
         if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
 
         $list = $this->limit($model,'',$data);
-        $list = $this->fillData($list);
+        $list = $this->fillData($list, $user);
 
         return [true,$list];
     }
 
-    public function fillData($data){
+    public function fillData($data, $user){
         if(empty($data['data'])) return $data;
 
+        //总社id
+        $top_depart_id = $user['head'] ?? [];
+        $top_depart_id = $top_depart_id['id'] ?? 0;
         foreach ($data['data'] as $key => $value){
+            $is_top = 0;
+            if($value['depart_id'] == $top_depart_id) $is_top = 1;
+            $data['data'][$key]['is_top'] = $is_top;
         }
 
         return $data;