|
@@ -7,6 +7,7 @@ use App\Model\Employee;
|
|
use App\Model\InvoiceOrder;
|
|
use App\Model\InvoiceOrder;
|
|
use App\Model\InvoiceOrderInfo;
|
|
use App\Model\InvoiceOrderInfo;
|
|
use App\Model\SalesOrder;
|
|
use App\Model\SalesOrder;
|
|
|
|
+use App\Model\Storehouse;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -21,7 +22,7 @@ class InvoiceOrderService extends Service
|
|
* @return array
|
|
* @return array
|
|
*/
|
|
*/
|
|
public function edit($data,$user){
|
|
public function edit($data,$user){
|
|
- list($status,$msg) = $this->orderRule($data,false);
|
|
|
|
|
|
+ list($status,$msg) = $this->orderRule($data,$user,false);
|
|
if(!$status) return [$status,$msg];
|
|
if(!$status) return [$status,$msg];
|
|
|
|
|
|
try{
|
|
try{
|
|
@@ -35,8 +36,8 @@ class InvoiceOrderService extends Service
|
|
$material_model->take_phone = $data['take_phone'];
|
|
$material_model->take_phone = $data['take_phone'];
|
|
$material_model->logistics_company = $data['logistics_company'];
|
|
$material_model->logistics_company = $data['logistics_company'];
|
|
$material_model->logistics_number = $data['logistics_number'];
|
|
$material_model->logistics_number = $data['logistics_number'];
|
|
- $material_model->depart_id = $data['depart_id'] ?? 0;
|
|
|
|
$material_model->mark = $data['mark'];
|
|
$material_model->mark = $data['mark'];
|
|
|
|
+ $material_model->storehouse_id = $data['storehouse_id'];
|
|
$material_model->save();
|
|
$material_model->save();
|
|
|
|
|
|
InvoiceOrderInfo::where('order_number',$data['order_number'])
|
|
InvoiceOrderInfo::where('order_number',$data['order_number'])
|
|
@@ -48,7 +49,7 @@ class InvoiceOrderService extends Service
|
|
$sub[] = [
|
|
$sub[] = [
|
|
'invoice_id' => $material_model->id,
|
|
'invoice_id' => $material_model->id,
|
|
'order_number' => $data['order_number'],
|
|
'order_number' => $data['order_number'],
|
|
- 'depart_id' => $data['depart_id'] ?? 0,
|
|
|
|
|
|
+ 'storehouse_id' => $data['storehouse_id'] ?? 0,
|
|
'product_id' => $value['product_id'],
|
|
'product_id' => $value['product_id'],
|
|
'number' => $value['number'],
|
|
'number' => $value['number'],
|
|
'mark' => $value['mark'] ?? '',
|
|
'mark' => $value['mark'] ?? '',
|
|
@@ -81,7 +82,7 @@ class InvoiceOrderService extends Service
|
|
* @return array
|
|
* @return array
|
|
*/
|
|
*/
|
|
public function add($data,$user){
|
|
public function add($data,$user){
|
|
- list($status,$msg) = $this->orderRule($data);
|
|
|
|
|
|
+ list($status,$msg) = $this->orderRule($data, $user);
|
|
if(!$status) return [$status,$msg];
|
|
if(!$status) return [$status,$msg];
|
|
|
|
|
|
try{
|
|
try{
|
|
@@ -97,8 +98,10 @@ class InvoiceOrderService extends Service
|
|
$material_model->logistics_company = $data['logistics_company'];
|
|
$material_model->logistics_company = $data['logistics_company'];
|
|
$material_model->logistics_number = $data['logistics_number'];
|
|
$material_model->logistics_number = $data['logistics_number'];
|
|
$material_model->depart_id = $data['depart_id'] ?? 0;
|
|
$material_model->depart_id = $data['depart_id'] ?? 0;
|
|
|
|
+ $material_model->top_depart_id = $data['top_depart_id'] ?? 0;
|
|
$material_model->mark = $data['mark'];
|
|
$material_model->mark = $data['mark'];
|
|
$material_model->crt_id = $user['id'];
|
|
$material_model->crt_id = $user['id'];
|
|
|
|
+ $material_model->storehouse_id = $data['storehouse_id'];
|
|
$material_model->save();
|
|
$material_model->save();
|
|
|
|
|
|
if(!empty($data['product'])){
|
|
if(!empty($data['product'])){
|
|
@@ -107,7 +110,7 @@ class InvoiceOrderService extends Service
|
|
$sub[] = [
|
|
$sub[] = [
|
|
'invoice_id' => $material_model->id,
|
|
'invoice_id' => $material_model->id,
|
|
'order_number' => $data['order_number'],
|
|
'order_number' => $data['order_number'],
|
|
- 'depart_id' => $data['depart_id'] ?? 0,
|
|
|
|
|
|
+ 'storehouse_id' => $data['storehouse_id'] ?? 0,
|
|
'product_id' => $value['product_id'],
|
|
'product_id' => $value['product_id'],
|
|
'number' => $value['number'],
|
|
'number' => $value['number'],
|
|
'mark' => $value['mark'] ?? '',
|
|
'mark' => $value['mark'] ?? '',
|
|
@@ -121,7 +124,7 @@ class InvoiceOrderService extends Service
|
|
InvoiceOrderInfo::insert($sub);
|
|
InvoiceOrderInfo::insert($sub);
|
|
|
|
|
|
//锁定库存
|
|
//锁定库存
|
|
- ProductInventoryService::changeLockNumber($msg[0]);
|
|
|
|
|
|
+ ProductInventoryService::changeLockNumber($msg[0],[]);
|
|
}
|
|
}
|
|
|
|
|
|
DB::commit();
|
|
DB::commit();
|
|
@@ -147,6 +150,7 @@ class InvoiceOrderService extends Service
|
|
->first();
|
|
->first();
|
|
if(empty($order)) return [false, '发货订单不存在或已被删除'];
|
|
if(empty($order)) return [false, '发货订单不存在或已被删除'];
|
|
$order = $order->toArray();
|
|
$order = $order->toArray();
|
|
|
|
+ $order['storehouse_title'] = Storehouse::where('id',$order['storehouse_id'])->value('title');
|
|
$order['state_title'] = InvoiceOrder::$name[$order['state']] ?? '';
|
|
$order['state_title'] = InvoiceOrder::$name[$order['state']] ?? '';
|
|
$sales = SalesOrder::where('id',$order['sales_order_id'])->value('order_number');
|
|
$sales = SalesOrder::where('id',$order['sales_order_id'])->value('order_number');
|
|
$order['sales_order_number'] = $sales;
|
|
$order['sales_order_number'] = $sales;
|
|
@@ -206,11 +210,11 @@ class InvoiceOrderService extends Service
|
|
* @return array
|
|
* @return array
|
|
*/
|
|
*/
|
|
public function getList($data,$user){
|
|
public function getList($data,$user){
|
|
- $model = InvoiceOrder::where('del_time',0)
|
|
|
|
- ->select('id','order_number','sales_order_id','depart_id','send','send_time','take','take_address','take_phone','logistics_company','logistics_number','crt_id','mark','state','crt_time')
|
|
|
|
|
|
+ $model = new InvoiceOrder(['userData' => $user]);
|
|
|
|
+ $model = $model->where('del_time',0)
|
|
|
|
+ ->select('id','order_number','sales_order_id','depart_id','send','send_time','take','take_address','take_phone','logistics_company','logistics_number','crt_id','mark','state','crt_time','storehouse_id')
|
|
->orderby('id', 'desc');
|
|
->orderby('id', 'desc');
|
|
if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
|
|
if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
|
|
- if(! empty($data['depart_id'])) $model->where('depart_id', $data['depart_id']);
|
|
|
|
if(isset($data['state'])) $model->where('state',$data['state']);
|
|
if(isset($data['state'])) $model->where('state',$data['state']);
|
|
if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
|
|
if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
|
|
$return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
|
|
$return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
|
|
@@ -242,6 +246,9 @@ class InvoiceOrderService extends Service
|
|
->toArray();
|
|
->toArray();
|
|
|
|
|
|
$sales = SalesOrder::whereIn('id',array_unique(array_column($data['data'],'sales_order_id')))->pluck('order_number','id')->toArray();
|
|
$sales = SalesOrder::whereIn('id',array_unique(array_column($data['data'],'sales_order_id')))->pluck('order_number','id')->toArray();
|
|
|
|
+ $storehouse = Storehouse::whereIn('id',array_unique(array_column($data['data'],'storehouse_id')))
|
|
|
|
+ ->pluck('title','id')
|
|
|
|
+ ->toArray();
|
|
foreach ($data['data'] as $key => $value){
|
|
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_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']) : '';
|
|
$data['data'][$key]['depart_name'] = $depart_map[$value['depart_id']] ?? '';
|
|
$data['data'][$key]['depart_name'] = $depart_map[$value['depart_id']] ?? '';
|
|
@@ -249,6 +256,7 @@ class InvoiceOrderService extends Service
|
|
$data['data'][$key]['send_name'] = $emp_map[$value['send']] ?? '';
|
|
$data['data'][$key]['send_name'] = $emp_map[$value['send']] ?? '';
|
|
$data['data'][$key]['state_title'] = InvoiceOrder::$name[$value['state']] ?? '';
|
|
$data['data'][$key]['state_title'] = InvoiceOrder::$name[$value['state']] ?? '';
|
|
$data['data'][$key]['sales_order_number'] = $sales[$value['sales_order_id']] ?? '';
|
|
$data['data'][$key]['sales_order_number'] = $sales[$value['sales_order_id']] ?? '';
|
|
|
|
+ $data['data'][$key]['storehouse_title'] = $storehouse[$value['storehouse_id']] ?? '';
|
|
}
|
|
}
|
|
|
|
|
|
return $data;
|
|
return $data;
|
|
@@ -260,9 +268,10 @@ class InvoiceOrderService extends Service
|
|
* @param $is_check
|
|
* @param $is_check
|
|
* @return array
|
|
* @return array
|
|
*/
|
|
*/
|
|
- public function orderRule(&$data, $is_check = true){
|
|
|
|
|
|
+ public function orderRule(&$data, $user, $is_check = true){
|
|
if($this->isEmpty($data,'send')) return [false,'发货人不能为空!'];
|
|
if($this->isEmpty($data,'send')) return [false,'发货人不能为空!'];
|
|
if($this->isEmpty($data,'product')) return [false,'产品不能为空!'];
|
|
if($this->isEmpty($data,'product')) return [false,'产品不能为空!'];
|
|
|
|
+ if(! empty($data['storehouse_id'])) return [false,'请选择仓库'];
|
|
if(! empty($data['send_time'])) $data['send_time'] = $this->changeDateToDateMin($data['send_time']);
|
|
if(! empty($data['send_time'])) $data['send_time'] = $this->changeDateToDateMin($data['send_time']);
|
|
if(! empty($data['sales_order_id'])) {
|
|
if(! empty($data['sales_order_id'])) {
|
|
$sales = SalesOrder::where('del_time',0)
|
|
$sales = SalesOrder::where('del_time',0)
|
|
@@ -271,23 +280,29 @@ class InvoiceOrderService extends Service
|
|
if(empty($sales)) return [false,'合同不存在或已被删除'];
|
|
if(empty($sales)) return [false,'合同不存在或已被删除'];
|
|
if($sales['sales_order_type'] != SalesOrder::Order_type_two) return [false,'非快递件合同'];
|
|
if($sales['sales_order_type'] != SalesOrder::Order_type_two) return [false,'非快递件合同'];
|
|
}
|
|
}
|
|
- $product_submit = [];
|
|
|
|
|
|
+ $product_submit = $product_id = [];
|
|
foreach ($data['product'] as $value){
|
|
foreach ($data['product'] as $value){
|
|
if(empty($value['number'])) return [false,'产品数量不能为空'];
|
|
if(empty($value['number'])) return [false,'产品数量不能为空'];
|
|
$res = $this->checkNumber($value['number']);
|
|
$res = $this->checkNumber($value['number']);
|
|
- if(! $res) return [false,'请输入正确的产品数量'];
|
|
|
|
|
|
+ if(! $res) return [false,'请输入正确的产品量'];
|
|
|
|
|
|
|
|
+ $key = $value['product_id'] . ',' .$data['storehouse_id'];
|
|
if(isset($product_submit[$value['product_id']])){
|
|
if(isset($product_submit[$value['product_id']])){
|
|
- $product_submit[$value['product_id']] += $value['number'];
|
|
|
|
|
|
+ $product_submit[$key] += $value['number'];
|
|
}else{
|
|
}else{
|
|
- $product_submit[$value['product_id']] = $value['number'];
|
|
|
|
|
|
+ $product_submit[$key] = $value['number'];
|
|
}
|
|
}
|
|
|
|
+ $product_id[] = $value['product_id'];
|
|
}
|
|
}
|
|
$order_number = $data['order_number'] ?? '';
|
|
$order_number = $data['order_number'] ?? '';
|
|
$product_save = $this->getSaveDetail($order_number);
|
|
$product_save = $this->getSaveDetail($order_number);
|
|
- list($status,$msg) = (new ProductInventoryService())->compareStock(array_keys($product_submit), $product_submit, $product_save);
|
|
|
|
|
|
+ list($status,$msg) = (new ProductInventoryService())->compareStock($product_id, $product_submit, $product_save);
|
|
if(! $status) return [false, $msg];
|
|
if(! $status) return [false, $msg];
|
|
|
|
|
|
|
|
+ //所属部门 以及 顶级部门
|
|
|
|
+ if(empty($data['depart_id'])) $data['depart_id'] = $this->getDepart($user);
|
|
|
|
+ $data['top_depart_id'] = $user['depart_map'][$data['depart_id']] ?? 0;
|
|
|
|
+
|
|
if($is_check){
|
|
if($is_check){
|
|
$order_number = (new OrderNoService())->createOrderNumber(InvoiceOrder::prefix);
|
|
$order_number = (new OrderNoService())->createOrderNumber(InvoiceOrder::prefix);
|
|
if(empty($order_number)) return [false,'发货单号生成失败!'];
|
|
if(empty($order_number)) return [false,'发货单号生成失败!'];
|
|
@@ -312,10 +327,11 @@ class InvoiceOrderService extends Service
|
|
->where('del_time',0)
|
|
->where('del_time',0)
|
|
->get()->toArray();
|
|
->get()->toArray();
|
|
foreach ($sub as $value){
|
|
foreach ($sub as $value){
|
|
- if(isset($product_save[$value['product_id']])){
|
|
|
|
- $product_save[$value['product_id']] += $value['number'];
|
|
|
|
|
|
+ $key = $value['product_id'] . ',' . $value['storehouse_id'];
|
|
|
|
+ if(isset($product_save[$key])){
|
|
|
|
+ $product_save[$key] += $value['number'];
|
|
}else{
|
|
}else{
|
|
- $product_save[$value['product_id']] = $value['number'];
|
|
|
|
|
|
+ $product_save[$key] = $value['number'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|