|
@@ -9,6 +9,7 @@ use App\Model\Product;
|
|
|
use App\Model\SalesOrder;
|
|
|
use App\Model\SalesOrderInfo;
|
|
|
use App\Model\SalesOrderProductInfo;
|
|
|
+use App\Model\SalesOrderRange;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
class SalesOrderService extends Service
|
|
@@ -104,13 +105,25 @@ class SalesOrderService extends Service
|
|
|
}
|
|
|
|
|
|
if(! empty($data['product'])){
|
|
|
+ $pro = Product::whereIn('id',array_column($data['product'],'product_id'))
|
|
|
+ ->select('bar_code','code','cost','depart_price','size','title','id','retail_price')
|
|
|
+ ->get()->toArray();
|
|
|
+ $pro = array_column($pro,null,'id');
|
|
|
$insert = [];
|
|
|
foreach ($data['product'] as $value){
|
|
|
+ $tmp = $pro[$value['product_id']] ?? [];
|
|
|
$insert[] = [
|
|
|
'sales_order_id' => $model->id,
|
|
|
'product_id' => $value['product_id'],
|
|
|
- 'price' => $value['retail_price'],
|
|
|
'number' => $value['number'],
|
|
|
+ 'title' => $tmp['title'],
|
|
|
+ 'code' => $tmp['code'] ?? '',
|
|
|
+ 'size' => $tmp['size'] ?? '',
|
|
|
+ 'unit' => $tmp['unit'] ?? 0,
|
|
|
+ 'bar_code' => $tmp['bar_code'] ?? '',
|
|
|
+ 'cost' => $tmp['cost'] ?? 0,
|
|
|
+ 'depart_price' => $tmp['depart_price'] ?? 0,
|
|
|
+ 'retail_price' => $tmp['retail_price'] ?? 0,
|
|
|
'mark' => $value['mark'] ?? '',
|
|
|
'crt_time' => $time,
|
|
|
];
|
|
@@ -212,13 +225,25 @@ class SalesOrderService extends Service
|
|
|
}
|
|
|
|
|
|
if(! empty($data['product'])){
|
|
|
+ $pro = Product::whereIn('id',array_column($data['product'],'product_id'))
|
|
|
+ ->select('bar_code','code','cost','depart_price','size','title','id','retail_price')
|
|
|
+ ->get()->toArray();
|
|
|
+ $pro = array_column($pro,null,'id');
|
|
|
$insert = [];
|
|
|
foreach ($data['product'] as $value){
|
|
|
+ $tmp = $pro[$value['product_id']] ?? [];
|
|
|
$insert[] = [
|
|
|
'sales_order_id' => $model->id,
|
|
|
'product_id' => $value['product_id'],
|
|
|
- 'price' => $value['retail_price'],
|
|
|
'number' => $value['number'],
|
|
|
+ 'title' => $tmp['title'],
|
|
|
+ 'code' => $tmp['code'] ?? '',
|
|
|
+ 'size' => $tmp['size'] ?? '',
|
|
|
+ 'unit' => $tmp['unit'] ?? 0,
|
|
|
+ 'bar_code' => $tmp['bar_code'] ?? '',
|
|
|
+ 'cost' => $tmp['cost'] ?? 0,
|
|
|
+ 'depart_price' => $tmp['depart_price'] ?? 0,
|
|
|
+ 'retail_price' => $tmp['retail_price'] ?? 0,
|
|
|
'mark' => $value['mark'] ?? '',
|
|
|
'crt_time' => $time,
|
|
|
];
|
|
@@ -250,6 +275,9 @@ class SalesOrderService extends Service
|
|
|
SalesOrderProductInfo::where('del_time',0)
|
|
|
->where('sales_order_id',$data['id'])
|
|
|
->update(['del_time' => time()]);
|
|
|
+ SalesOrderRange::where('del_time',0)
|
|
|
+ ->where('sales_order_id',$data['id'])
|
|
|
+ ->update(['del_time' => time()]);
|
|
|
|
|
|
DB::commit();
|
|
|
}catch (\Exception $exception){
|
|
@@ -320,26 +348,9 @@ class SalesOrderService extends Service
|
|
|
|
|
|
$sales_p_info = SalesOrderProductInfo::where('del_time',0)
|
|
|
->where('sales_order_id',$sales['id'])
|
|
|
- ->select('id','sales_order_id','product_id','mark','price','number')
|
|
|
- ->get()->toArray();
|
|
|
- $pro = Product::whereIn('id',array_column($sales_p_info,'product_id'))
|
|
|
- ->select('bar_code','code','cost','depart_price','size','title','id')
|
|
|
->get()->toArray();
|
|
|
- $pro = array_column($pro,null,'id');
|
|
|
foreach ($sales_p_info as $value){
|
|
|
- $p = $pro[$value['product_id']] ?? [];
|
|
|
- $sales['product'][] = [
|
|
|
- 'product_id' => $value['product_id'],
|
|
|
- 'mark' => $value['mark'],
|
|
|
- 'retail_price' => $value['price'],
|
|
|
- 'number' => $value['number'],
|
|
|
- 'bar_code' => $p['bar_code'] ?? '',
|
|
|
- 'code' => $p['code'] ?? '',
|
|
|
- 'cost' => $p['cost'] ?? 0,
|
|
|
- 'depart_price' => $p['depart_price'] ?? 0,
|
|
|
- 'size' => $p['size'] ?? '',
|
|
|
- 'title' => $p['title'] ?? '',
|
|
|
- ];
|
|
|
+ $sales['product'][] = $value;
|
|
|
}
|
|
|
$sales['crt_name'] = $emp_map[$sales['crt_id']] ?? '';
|
|
|
$sales['crt_time'] = $sales['crt_time'] ? date("Y-m-d H:i:s",$sales['crt_time']): '';
|
|
@@ -353,6 +364,26 @@ class SalesOrderService extends Service
|
|
|
->select('title','id','sales_order_type','model_type','order_number','selling_price','vin_no','car_type','order_type','deal_type','customer_id','sign_time','contract_state','crt_id','crt_time','mark','product_total','rate','construction_time','handover_time','expire_time','other_fee','discount_fee','contract_fee','contract_type','pay_way','send_state','logistics_company','logistics_number','car_type','year','mileage','color','original_set','processing','state')
|
|
|
->orderby('id', 'desc');
|
|
|
|
|
|
+ if($user['id'] != Employee::SPECIAL_ADMIN){
|
|
|
+ //单据中选择的签订负责协同人
|
|
|
+ $sales_order_id = SalesOrderInfo::where('del_time',0)
|
|
|
+ ->where('employee_id',$user['id'])
|
|
|
+ ->select('sales_order_id')
|
|
|
+ ->get()->toArray();
|
|
|
+ $sales_order_id = array_unique(array_column($sales_order_id,'sales_order_id'));
|
|
|
+ $model->whereIn('id',$sales_order_id);
|
|
|
+
|
|
|
+ //指派后
|
|
|
+ $user_id = $user['id'];
|
|
|
+ $depart_id = $user['depart_range'];
|
|
|
+ $sales_order_id = SalesOrderRange::where('del_time',0)
|
|
|
+ ->where(function ($query) use($user_id, $depart_id) {
|
|
|
+ $query->where('employee_id',$user_id)
|
|
|
+ ->orWhereIn('depart_id', $depart_id);
|
|
|
+ })->select('sales_order_id')->get()
|
|
|
+ ->toArray();
|
|
|
+ $model->whereIn('id',array_column($sales_order_id,'sales_order_id'));
|
|
|
+ }
|
|
|
if(! empty($data['sales_order_type'])) $model->where('sales_order_type',$data['sales_order_type']);
|
|
|
if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
|
|
|
if(! empty($data['model_type'])) $model->where('model_type',$data['model_type']);
|
|
@@ -369,6 +400,7 @@ class SalesOrderService extends Service
|
|
|
$model->where('crt_time','<=',$end);
|
|
|
}
|
|
|
}
|
|
|
+ if(! empty($data['add_construction'])) $model->where('state','>=',SalesOrder::State_two);
|
|
|
|
|
|
$list = $this->limit($model,'',$data);
|
|
|
$list = $this->fillData($list,$data);
|
|
@@ -475,27 +507,9 @@ class SalesOrderService extends Service
|
|
|
if(! empty($ergs['product'])){
|
|
|
$sales_p_info = SalesOrderProductInfo::where('del_time',0)
|
|
|
->where('sales_order_id',array_column($data['data'],'id'))
|
|
|
- ->select('id','sales_order_id','product_id','mark','price','number')
|
|
|
- ->get()->toArray();
|
|
|
- $pro = Product::whereIn('id',array_column($sales_p_info,'product_id'))
|
|
|
- ->select('bar_code','code','cost','depart_price','size','title','id')
|
|
|
->get()->toArray();
|
|
|
- $pro = array_column($pro,null,'id');
|
|
|
foreach ($sales_p_info as $value){
|
|
|
- $p = $pro[$value['product_id']] ?? [];
|
|
|
- $tmp = [
|
|
|
- 'product_id' => $value['product_id'],
|
|
|
- 'mark' => $value['mark'],
|
|
|
- 'retail_price' => $value['price'],
|
|
|
- 'number' => $value['number'],
|
|
|
- 'bar_code' => $p['bar_code'] ?? '',
|
|
|
- 'code' => $p['code'] ?? '',
|
|
|
- 'cost' => $p['cost'] ?? 0,
|
|
|
- 'depart_price' => $p['depart_price'] ?? 0,
|
|
|
- 'size' => $p['size'] ?? '',
|
|
|
- 'title' => $p['title'] ?? '',
|
|
|
- ];
|
|
|
- $product[$value['sales_order_id']][] = $tmp;
|
|
|
+ $product[$value['sales_order_id']][] = $value;
|
|
|
}
|
|
|
}
|
|
|
foreach ($data['data'] as $key => $value){
|
|
@@ -512,6 +526,7 @@ class SalesOrderService extends Service
|
|
|
$data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
|
|
|
$data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
|
|
|
$data['data'][$key]['product'] = $product[$value['id']] ?? [];
|
|
|
+ $data['data'][$key]['state_name'] = SalesOrder::$state[$value['state']] ?? '';
|
|
|
}
|
|
|
|
|
|
return $data;
|
|
@@ -527,12 +542,119 @@ class SalesOrderService extends Service
|
|
|
return [true, ['order_number' => $order_number]];
|
|
|
}
|
|
|
|
|
|
- public function salesOrderDispatch($data){
|
|
|
-// list($status,$msg)
|
|
|
+ public function salesOrderDispatchSale($data){
|
|
|
+ list($status,$msg) = $this->salesOrderDispatchSaleRule($data);
|
|
|
+ if(! $status) return [false,$msg];
|
|
|
+
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+ SalesOrder::where('del_time',0)->where('id',$msg['id'])->update([
|
|
|
+ 'state' => SalesOrder::State_two
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $time = time();
|
|
|
+ SalesOrderRange::where('del_time',0)->where('sales_order_id',$msg['id'])->update([
|
|
|
+ 'del_time' => $time
|
|
|
+ ]);
|
|
|
+
|
|
|
+ if(! empty($data['depart'])){
|
|
|
+ $insert = [];
|
|
|
+ foreach ($data['depart'] as $value){
|
|
|
+ $insert[] = [
|
|
|
+ 'sales_order_id' => $msg['id'],
|
|
|
+ 'depart_id' => $value,
|
|
|
+ 'type' => SalesOrderRange::type_one,
|
|
|
+ 'crt_time' => $time,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ SalesOrderRange::insert($insert);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(! empty($data['employee'])){
|
|
|
+ $insert = [];
|
|
|
+ foreach ($data['employee'] as $value){
|
|
|
+ $insert[] = [
|
|
|
+ 'sales_order_id' => $msg['id'],
|
|
|
+ 'employee_id' => $value,
|
|
|
+ 'type' => SalesOrderRange::type_two,
|
|
|
+ 'crt_time' => $time,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ SalesOrderRange::insert($insert);
|
|
|
+ }
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Exception $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false,$exception->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true,''];
|
|
|
}
|
|
|
|
|
|
- public function salesOrderDispatchRule($data){
|
|
|
+ public function salesOrderDispatchSaleRule($data){
|
|
|
+ if(empty($data['id'])) return [false,'请选择合同派单'];
|
|
|
+ $sale = SalesOrder::where('del_time',0)
|
|
|
+ ->where('id',$data['id'])
|
|
|
+ ->first();
|
|
|
+ if(empty($sale)) return [false,'合同不存在或已被删除'];
|
|
|
+ if($sale['state'] > SalesOrder::State_one) return [false,'请确认合同状态,操作失败'];
|
|
|
+ $sale = $sale->toArray();
|
|
|
+
|
|
|
+ if(empty($data['depart']) && empty($data['employee'])) return [false, '请指派部门或人员'];
|
|
|
+
|
|
|
+ return [true, $sale];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function salesOrderDispatchCompany($data){
|
|
|
+ list($status,$msg) = $this->salesOrderDispatchCompanyRule($data);
|
|
|
+ if(! $status) return [false,$msg];
|
|
|
+
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+ SalesOrder::where('del_time',0)->where('id',$msg['id'])->update([
|
|
|
+ 'state' => SalesOrder::State_three
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $time = time();
|
|
|
+ SalesOrderRange::where('del_time',0)
|
|
|
+ ->where('sales_order_id',$msg['id'])
|
|
|
+ ->where('type',SalesOrderRange::type_three)
|
|
|
+ ->update(['del_time' => $time]);
|
|
|
+
|
|
|
+ if(! empty($data['depart'])){
|
|
|
+ $insert = [];
|
|
|
+ foreach ($data['depart'] as $value){
|
|
|
+ $insert[] = [
|
|
|
+ 'sales_order_id' => $msg['id'],
|
|
|
+ 'depart_id' => $value,
|
|
|
+ 'type' => SalesOrderRange::type_three,
|
|
|
+ 'crt_time' => $time,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ SalesOrderRange::insert($insert);
|
|
|
+ }
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Exception $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false,$exception->getMessage()];
|
|
|
+ }
|
|
|
|
|
|
return [true,''];
|
|
|
}
|
|
|
+
|
|
|
+ public function salesOrderDispatchCompanyRule($data){
|
|
|
+ if(empty($data['id'])) return [false,'请选择合同派单'];
|
|
|
+ $sale = SalesOrder::where('del_time',0)
|
|
|
+ ->where('id',$data['id'])
|
|
|
+ ->first();
|
|
|
+ if(empty($sale)) return [false,'合同不存在或已被删除'];
|
|
|
+ if($sale['state'] > SalesOrder::State_two) return [false,'请确认合同状态,操作失败'];
|
|
|
+ $sale = $sale->toArray();
|
|
|
+
|
|
|
+ if(empty($data['depart'])) return [false, '请指派总社或分社'];
|
|
|
+
|
|
|
+ return [true, $sale];
|
|
|
+ }
|
|
|
}
|