|
@@ -5,6 +5,8 @@ namespace App\Service;
|
|
|
use App\Model\BasicType;
|
|
|
use App\Model\Depart;
|
|
|
use App\Model\Employee;
|
|
|
+use App\Model\PurchaseOrder;
|
|
|
+use App\Model\PurchaseOrderInfo;
|
|
|
use App\Model\ReturnExchangeOrder;
|
|
|
use App\Model\ReturnExchangeOrderProductInfo;
|
|
|
use App\Model\ReturnExchangeOrderRange;
|
|
@@ -22,7 +24,8 @@ class ReturnExchangeOrderService extends Service
|
|
|
try{
|
|
|
DB::beginTransaction();
|
|
|
$material_model = ReturnExchangeOrder::where('order_number',$data['order_number'])->first();
|
|
|
- $material_model->sales_order_id = $data['sales_order_id'];
|
|
|
+ $material_model->data_id = $data['data_id'];
|
|
|
+ $material_model->type = $data['type'];
|
|
|
$material_model->difference_amount = $data['difference_amount'];
|
|
|
$material_model->mark = $data['mark'];
|
|
|
$material_model->storehouse_id = $data['storehouse_id'] ?? 0;
|
|
@@ -125,7 +128,8 @@ class ReturnExchangeOrderService extends Service
|
|
|
$material_model = new ReturnExchangeOrder();
|
|
|
$material_model->model_type = $data['model_type'];
|
|
|
$material_model->order_number = $data['order_number'];
|
|
|
- $material_model->sales_order_id = $data['sales_order_id'];
|
|
|
+ $material_model->data_id = $data['data_id'];
|
|
|
+ $material_model->type = $data['type'];
|
|
|
$material_model->difference_amount = $data['difference_amount'];
|
|
|
$material_model->mark = $data['mark'];
|
|
|
$material_model->depart_id = $data['depart_id'] ?? 0;
|
|
@@ -220,13 +224,19 @@ class ReturnExchangeOrderService extends Service
|
|
|
|
|
|
$order = ReturnExchangeOrder::where('id',$data['id'])
|
|
|
->where('del_time',0)
|
|
|
- ->select('id','order_number','model_type','sales_order_id','difference_amount','crt_id','mark','state','crt_time','storehouse_id','depart_id','top_depart_id')
|
|
|
+ ->select('id','order_number','model_type','data_id','difference_amount','crt_id','mark','state','crt_time','storehouse_id','depart_id','top_depart_id','type')
|
|
|
->first();
|
|
|
if(empty($order)) return [false, '退换货订单不存在或已被删除'];
|
|
|
$order = $order->toArray();
|
|
|
$order['storehouse_title'] = Storehouse::where('id',$order['storehouse_id'])->value('title');
|
|
|
- $sales = SalesOrder::where('id',$order['sales_order_id'])->value('order_number');
|
|
|
- $order['sales_order_number'] = $sales;
|
|
|
+ if($data['type'] == ReturnExchangeOrder::Order_type){
|
|
|
+ $sales = SalesOrder::where('id',$order['data_id'])->value('order_number');
|
|
|
+ $order['data_title'] = $sales;
|
|
|
+ }elseif($data['type'] == ReturnExchangeOrder::Order_type2){
|
|
|
+ $sales = PurchaseOrder::where('id',$order['data_id'])->value('order_number');
|
|
|
+ $order['data_title'] = $sales;
|
|
|
+ }
|
|
|
+
|
|
|
$order['model_type_title'] = ReturnExchangeOrder::$model_type_name[$order['model_type']] ?? "";
|
|
|
$order['state_title'] = ReturnExchangeOrder::$state[$order['state']] ?? '';
|
|
|
|
|
@@ -317,7 +327,7 @@ class ReturnExchangeOrderService extends Service
|
|
|
public function getList($data,$user){
|
|
|
$model = new ReturnExchangeOrder(['userData' => $user,'search' => $data]);
|
|
|
$model = $model->where('del_time',0)
|
|
|
- ->select('id','order_number','sales_order_id','difference_amount','state','crt_time','crt_id','mark','model_type','storehouse_id')
|
|
|
+ ->select('id','order_number','data_id','difference_amount','state','crt_time','crt_id','mark','model_type','storehouse_id','type')
|
|
|
->orderby('id', 'desc');
|
|
|
|
|
|
if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
|
|
@@ -340,7 +350,16 @@ class ReturnExchangeOrderService extends Service
|
|
|
$emp_map = Employee::whereIn('id',$emp_id)
|
|
|
->pluck('emp_name','id')
|
|
|
->toArray();
|
|
|
- $sales = SalesOrder::whereIn('id',array_unique(array_column($data['data'],'sales_order_id')))->pluck('order_number','id')->toArray();
|
|
|
+ $sales = $purchase = [];
|
|
|
+ foreach ($data['data'] as $value){
|
|
|
+ if($value['type'] == ReturnExchangeOrder::Order_type){
|
|
|
+ $sales[] = $value['data_id'];
|
|
|
+ }elseif($value['type'] == ReturnExchangeOrder::Order_type2){
|
|
|
+ $purchase[] = $value['data_id'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $sales = SalesOrder::whereIn('id',$sales)->pluck('order_number','id')->toArray();
|
|
|
+ $purchase = PurchaseOrder::whereIn('id',$purchase)->pluck('order_number','id')->toArray();
|
|
|
$storehouse = Storehouse::whereIn('id',array_unique(array_column($data['data'],'storehouse_id')))
|
|
|
->pluck('title','id')
|
|
|
->toArray();
|
|
@@ -348,7 +367,14 @@ class ReturnExchangeOrderService 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_map[$value['crt_id']] ?? '';
|
|
|
$data['data'][$key]['state_title'] = ReturnExchangeOrder::$state[$value['state']] ?? '';
|
|
|
- $data['data'][$key]['sales_order_number'] = $sales[$value['sales_order_id']] ?? '';
|
|
|
+ $title = "" ;
|
|
|
+ if($value['type'] == ReturnExchangeOrder::Order_type){
|
|
|
+ $title = $sales[$value['data_id']] ?? "";
|
|
|
+ }elseif($value['type'] == ReturnExchangeOrder::Order_type2){
|
|
|
+ $title = $purchase[$value['data_id']] ?? "";
|
|
|
+ }
|
|
|
+ $data['data'][$key]['data_title'] = $title;
|
|
|
+ $data['data'][$key]['type_title'] = ReturnExchangeOrder::$order_type_name[$value['type']] ?? "";
|
|
|
$data['data'][$key]['model_type_title'] = ReturnExchangeOrder::$model_type_name[$value['model_type']] ?? "";
|
|
|
$data['data'][$key]['storehouse_title'] = $storehouse[$value['storehouse_id']] ?? '';
|
|
|
}
|
|
@@ -360,12 +386,19 @@ class ReturnExchangeOrderService extends Service
|
|
|
if($this->isEmpty($data,'model_type')) return [false,'单据类型不能为空!'];
|
|
|
if(! in_array($data['model_type'], ReturnExchangeOrder::$model_type)) return [false,'单据类型不存在'];
|
|
|
if(empty($data['storehouse_id'])) return [false,'请选择仓库'];
|
|
|
- if($this->isEmpty($data,'sales_order_id')) return [false,'合同不能为空!'];
|
|
|
- if(empty($data['sales_order_id'])) return [false,'请选择合同'];
|
|
|
- $sale = SalesOrder::where('del_time',0)->where('id',$data['sales_order_id'])->first();
|
|
|
- if(empty($sale)) return [false,'合同不存在或已被删除'];
|
|
|
- if($sale['sales_order_type'] != SalesOrder::Order_type_one) return [false, '非安装件合同'];
|
|
|
- if($sale['state'] < SalesOrder::State_two) return [false,'合同未施工,不能进行退换货操作'];
|
|
|
+ if(! isset($data['type'])) return [false,'退换单据类型不能为空'];
|
|
|
+ if(empty($data['data_id'])) return [false,'退换单据数据不能为空!'];
|
|
|
+ if($data['type'] == ReturnExchangeOrder::Order_type){
|
|
|
+ $sale = SalesOrder::where('del_time',0)->where('id',$data['data_id'])->first();
|
|
|
+ if(empty($sale)) return [false,'合同不存在或已被删除'];
|
|
|
+ if($sale['sales_order_type'] != SalesOrder::Order_type_one) return [false, '非安装件合同'];
|
|
|
+ if($sale['state'] < SalesOrder::State_two) return [false,'合同未施工,不能进行退换货操作'];
|
|
|
+ }elseif ($data['type'] == ReturnExchangeOrder::Order_type2){
|
|
|
+ $purchase = PurchaseOrder::where('del_time',0)->where('id',$data['data_id'])->first();
|
|
|
+ if(empty($purchase)) return [false,'采购单不存在或已被删除'];
|
|
|
+ if($purchase['state'] < PurchaseOrder::STATE_ONE) return [false,'采购单未确认,不能进行退换货操作'];
|
|
|
+ }
|
|
|
+
|
|
|
//所属部门 以及 顶级部门
|
|
|
if(empty($data['depart_id'])) {
|
|
|
$data['depart_id'] = $this->getDepart($user);
|
|
@@ -386,16 +419,30 @@ class ReturnExchangeOrderService extends Service
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //剩余能退
|
|
|
- $id = $data['id'] ?? 0;
|
|
|
- $s_product = $this->getSaveReturnCompareMessage($id, $data['sales_order_id']);
|
|
|
+ if($data['type'] == ReturnExchangeOrder::Order_type){
|
|
|
+ //剩余能退
|
|
|
+ $id = $data['id'] ?? 0;
|
|
|
+ $s_product = $this->getSaveReturnCompareMessage($id, $data['data_id']);
|
|
|
+
|
|
|
+ //比较
|
|
|
+ foreach ($return_submit_add as $pro => $number){
|
|
|
+ if(! isset($s_product[$pro])) return [false,'退货产品错误,合同中不存在该产品'];
|
|
|
+ $s_number = $s_product[$pro];
|
|
|
+
|
|
|
+ if($number > $s_number) return [false,'退货产品数量不能超过合同产品数据'];
|
|
|
+ }
|
|
|
+ }elseif ($data['type'] == ReturnExchangeOrder::Order_type2){
|
|
|
+ //剩余能退
|
|
|
+ $id = $data['id'] ?? 0;
|
|
|
+ $s_product = $this->getSaveReturnCompareMessage2($id, $data['data_id']);
|
|
|
|
|
|
- //比较
|
|
|
- foreach ($return_submit_add as $pro => $number){
|
|
|
- if(! isset($s_product[$pro])) return [false,'退货产品错误,合同中不存在该产品'];
|
|
|
- $s_number = $s_product[$pro];
|
|
|
+ //比较
|
|
|
+ foreach ($return_submit_add as $pro => $number){
|
|
|
+ if(! isset($s_product[$pro])) return [false,'退货产品错误,采购单中不存在该产品'];
|
|
|
+ $s_number = $s_product[$pro];
|
|
|
|
|
|
- if($number > $s_number) return [false,'退货产品数量不能超过合同产品数据'];
|
|
|
+ if($number > $s_number) return [false,'退货产品数量不能超过合采购单产品数据'];
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//换货
|
|
@@ -464,7 +511,7 @@ class ReturnExchangeOrderService extends Service
|
|
|
|
|
|
public function getSaveReturnCompareMessage($id = 0, $sales_order_id = 0){
|
|
|
$return = ReturnExchangeOrder::where('del_time',0)
|
|
|
- ->where('sales_order_id',$sales_order_id)
|
|
|
+ ->where('data_id',$sales_order_id)
|
|
|
->select('id')->get()->toArray();
|
|
|
$return = array_column($return,'id');
|
|
|
$product_save = [];
|
|
@@ -498,4 +545,41 @@ class ReturnExchangeOrderService extends Service
|
|
|
|
|
|
return $sales_order_product;
|
|
|
}
|
|
|
+
|
|
|
+ public function getSaveReturnCompareMessage2($id = 0, $purchase_id = 0){
|
|
|
+ $return = ReturnExchangeOrder::where('del_time',0)
|
|
|
+ ->where('data_id',$purchase_id)
|
|
|
+ ->select('id')->get()->toArray();
|
|
|
+ $return = array_column($return,'id');
|
|
|
+ $product_save = [];
|
|
|
+ $sub = ReturnExchangeOrderProductInfo::where('return_or_exchange',ReturnExchangeOrderProductInfo::type_one)
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->whereIn('return_exchange_id',$return)
|
|
|
+ ->when(! empty($id), function ($query) use ($id) {
|
|
|
+ return $query->where('return_exchange_id', '<>',$id);
|
|
|
+ })
|
|
|
+ ->get()->toArray();
|
|
|
+ foreach ($sub as $value){
|
|
|
+ if(isset($product_save[$value['product_id']])){
|
|
|
+ $product_save[$value['product_id']] += $value['number'];
|
|
|
+ }else{
|
|
|
+ $product_save[$value['product_id']] = $value['number'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $sales_order_product = [];
|
|
|
+ $sales_product = PurchaseOrderInfo::where('del_time',0)
|
|
|
+ ->where('purchase_order_id',$purchase_id)
|
|
|
+ ->get()->toArray();
|
|
|
+ foreach ($sales_product as $value){
|
|
|
+ $product_save_tmp = $product_save[$value['product_id']] ?? 0;
|
|
|
+ if(isset($sales_order_product[$value['product_id']])){
|
|
|
+ $sales_order_product[$value['product_id']] += $value['number'];
|
|
|
+ }else{
|
|
|
+ $sales_order_product[$value['product_id']] = $value['number'] - $product_save_tmp;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $sales_order_product;
|
|
|
+ }
|
|
|
}
|