|
@@ -2,6 +2,7 @@
|
|
|
|
|
|
namespace App\Service;
|
|
|
|
|
|
+use App\Model\BasicType;
|
|
|
use App\Model\Employee;
|
|
|
use App\Model\OrderInventoryStock;
|
|
|
use App\Model\OutBoundOrder;
|
|
@@ -51,6 +52,7 @@ class OutBoundOrderService extends Service
|
|
|
'final_amount' => $value['final_amount'] ?? 0,
|
|
|
'data_id' => $data['data_id'],
|
|
|
'type' => $data['type'],
|
|
|
+ 'number_2' => $value['number_2'] ?? 0,
|
|
|
];
|
|
|
}
|
|
|
OutBoundOrderInfo::insert($sub);
|
|
@@ -127,6 +129,7 @@ class OutBoundOrderService extends Service
|
|
|
'final_amount' => $value['final_amount'] ?? 0,
|
|
|
'data_id' => $data['data_id'],
|
|
|
'type' => $data['type'],
|
|
|
+ 'number_2' => $value['number_2'] ?? 0,
|
|
|
];
|
|
|
}
|
|
|
OutBoundOrderInfo::insert($sub);
|
|
@@ -321,7 +324,11 @@ class OutBoundOrderService extends Service
|
|
|
foreach ($data['product'] as $value){
|
|
|
if(empty($value['product_id'])) return [false, '出库产品不能为空'];
|
|
|
if(empty($value['number'])) return [false, '出库产品数量不能为空'];
|
|
|
- $res = $this->checkNumber($value['number']);
|
|
|
+ if(! empty($value['number_2'])){
|
|
|
+ $res = $this->checkNumber($value['number_2'],1);
|
|
|
+ if(! $res) return [false,'副单位产品数量请输入不超过一位小数并且大于0的数值'];
|
|
|
+ }
|
|
|
+ $res = $this->checkNumber($value['number'],4);
|
|
|
if(! $res) return [false,'请输入正确的产品数量'];
|
|
|
|
|
|
if(! isset($value['price'])) return [false, '出库产品单价不能为空'];
|
|
@@ -329,7 +336,8 @@ class OutBoundOrderService extends Service
|
|
|
|
|
|
$key = $value['product_id'] . ',' .$data['storehouse_id'];
|
|
|
if(isset($product_submit[$key])){
|
|
|
- $product_submit[$key] += $value['number'];
|
|
|
+ $tmp = bcadd($value['number'], $product_submit[$key],4);
|
|
|
+ $product_submit[$key] = $tmp;
|
|
|
}else{
|
|
|
$product_submit[$key] = $value['number'];
|
|
|
}
|
|
@@ -423,10 +431,11 @@ class OutBoundOrderService extends Service
|
|
|
|
|
|
$product = SalesOrderProductInfo::where('del_time',0)
|
|
|
->where('sales_order_id', $data_id)
|
|
|
- ->select('product_id', 'number', 'final_amount','price')
|
|
|
+ ->select('product_id', 'number', 'final_amount','price','number_2')
|
|
|
->get()->toArray();
|
|
|
$product_id = array_column($product,'product_id');
|
|
|
$map = (new ProductService())->getProductDetail($product_id);
|
|
|
+ $basic_price = BasicType::where('type',20)->pluck('title','id')->toArray();
|
|
|
|
|
|
//采购单产品
|
|
|
$service = new PurchaseOrderService();
|
|
@@ -459,22 +468,25 @@ class OutBoundOrderService extends Service
|
|
|
->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','return_number')
|
|
|
+ ->select('product_id', 'number', 'final_amount','return_number','number_2')
|
|
|
->get()->toArray();
|
|
|
foreach ($save as $value){
|
|
|
if(isset($product_map[$value['product_id']])){
|
|
|
- $number = bcadd($value['number'], $product_map[$value['product_id']]['number'],2);
|
|
|
- $return_number = bcadd($value['return_number'], $product_map[$value['product_id']]['return_number'],2);
|
|
|
+ $number = bcadd($value['number'], $product_map[$value['product_id']]['number'],4);
|
|
|
+ $return_number = bcadd($value['return_number'], $product_map[$value['product_id']]['return_number'],4);
|
|
|
+ $number_2 = bcadd($value['number_2'], $product_map[$value['product_id']]['number_2'],4);
|
|
|
$product_map[$value['product_id']]['number'] = $number;
|
|
|
$product_map[$value['product_id']]['return_number'] = $return_number;
|
|
|
+ $product_map[$value['product_id']]['number_2'] = $number_2;
|
|
|
}else{
|
|
|
$product_map[$value['product_id']]['number'] = $value['number'];
|
|
|
$product_map[$value['product_id']]['return_number'] = $value['return_number'];
|
|
|
+ $product_map[$value['product_id']]['number_2'] = $value['number_2'];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//合同退货产品
|
|
|
- $product_map2 = [];
|
|
|
+ $product_map2 = $product_map3 = [];
|
|
|
$return_id = ReturnExchangeOrder::where('del_time',0)
|
|
|
->where('type', ReturnExchangeOrder::Order_type)
|
|
|
->where('model_type', ReturnExchangeOrder::Model_type_one)
|
|
@@ -484,32 +496,52 @@ class OutBoundOrderService extends Service
|
|
|
$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')
|
|
|
+ ->select('product_id', 'number', 'final_amount','number_2')
|
|
|
->get()->toArray();
|
|
|
foreach ($save2 as $value){
|
|
|
if(isset($product_map2[$value['product_id']])){
|
|
|
- $number = bcadd($value['number'], $product_map2[$value['product_id']],2);
|
|
|
+ $number = bcadd($value['number'], $product_map2[$value['product_id']],4);
|
|
|
$product_map2[$value['product_id']] = $number;
|
|
|
}else{
|
|
|
$product_map2[$value['product_id']] = $value['number'];
|
|
|
}
|
|
|
+
|
|
|
+ if(isset($product_map3[$value['product_id']])){
|
|
|
+ $number = bcadd($value['number_2'], $product_map3[$value['product_id']],4);
|
|
|
+ $product_map3[$value['product_id']] = $number;
|
|
|
+ }else{
|
|
|
+ $product_map3[$value['product_id']] = $value['number_2'];
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
foreach ($product as $value){
|
|
|
+ $tmp = $map[$value['product_id']] ?? [];
|
|
|
+
|
|
|
//合同出库产品明细
|
|
|
$p1 = $product_map[$value['product_id']] ?? [];
|
|
|
+ //出库的副单位
|
|
|
+ $p1_number_2 = $p1['number_2'] ?? 0;
|
|
|
//合同出库产品数量
|
|
|
$p1_number = $p1['number'] ?? 0;
|
|
|
//合同出库后退货产品数量
|
|
|
$p1_return_number = $p1['return_number'] ?? 0;
|
|
|
//出库数量 - 退货数量 = 已出数量
|
|
|
- $p_re = bcsub($p1_number,$p1_return_number,2);
|
|
|
+ $p_re = bcsub($p1_number,$p1_return_number,4);
|
|
|
|
|
|
//合同退货产品
|
|
|
$p2 = $product_map2[$value['product_id']] ?? 0;
|
|
|
- $p2_re = bcsub($p2,$p1_return_number,2);
|
|
|
+ $p2_re = bcsub($p2,$p1_return_number,4);
|
|
|
//合同 - 已出 - 退货 = 剩余能出
|
|
|
- $number = bcsub(bcsub($value['number'], $p_re,2), $p2_re,2);
|
|
|
+ $number = bcsub(bcsub($value['number'], $p_re,4), $p2_re,4);
|
|
|
+
|
|
|
+ //合同退货副单位
|
|
|
+ $p3 = $product_map3[$value['product_id']] ?? 0;
|
|
|
+
|
|
|
+ $number_2 = 0;
|
|
|
+ if(! empty($tmp['main_number']) && ! empty($tmp['second_number']) && ! empty($tmp['unit_2'])){
|
|
|
+ $number_2 = bcsub(bcsub($value['number_2'], $p1_number_2,1), $p3,1);
|
|
|
+ if(floatval($number_2) <= 0.0) $number_2 = 0;
|
|
|
+ }
|
|
|
|
|
|
// 1 2 不能出 0 能 0 黄色 1 红色 2灰色
|
|
|
if($p_re > 0) {
|
|
@@ -553,12 +585,11 @@ class OutBoundOrderService extends Service
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
- $tmp = $map[$value['product_id']] ?? [];
|
|
|
-
|
|
|
$return[] = [
|
|
|
'number' => $number, //可出数量
|
|
|
'out_number' => $p_re, //已出库数量
|
|
|
'return_number' => $p2, //已退货数量
|
|
|
+ 'number_2' => $number_2, //可以出的数量对应的副单位
|
|
|
'state' => $state,
|
|
|
'state_title' => $state_title,
|
|
|
'price' => $value['price'],
|
|
@@ -568,6 +599,11 @@ class OutBoundOrderService extends Service
|
|
|
'code' => $tmp['code'] ?? "",
|
|
|
'size' => $tmp['size'] ?? "",
|
|
|
'unit' => $tmp['unit'] ?? "",
|
|
|
+ 'unit_title' => $basic_price[$tmp['unit']] ?? "",
|
|
|
+ 'unit_2' => $tmp['unit'] ?? "",
|
|
|
+ 'unit_2_title' => $basic_price[$tmp['unit_2']] ?? "",
|
|
|
+ 'main_number' => $tmp['main_number'] ?? "",
|
|
|
+ 'second_number' => $tmp['second_number'] ?? "",
|
|
|
'purchase_product' => $return_product[$value['product_id']] ?? [],
|
|
|
];
|
|
|
}
|
|
@@ -609,8 +645,8 @@ class OutBoundOrderService extends Service
|
|
|
->get()->toArray();
|
|
|
foreach ($save as $value){
|
|
|
if(isset($product_map[$value['product_id']])){
|
|
|
- $number = bcadd($value['number'], $product_map[$value['product_id']]['number'],2);
|
|
|
- $return_number = bcadd($value['return_number'], $product_map[$value['product_id']]['return_number'],2);
|
|
|
+ $number = bcadd($value['number'], $product_map[$value['product_id']]['number'],4);
|
|
|
+ $return_number = bcadd($value['return_number'], $product_map[$value['product_id']]['return_number'],4);
|
|
|
$product_map[$value['product_id']]['number'] = $number;
|
|
|
$product_map[$value['product_id']]['return_number'] = $return_number;
|
|
|
}else{
|
|
@@ -634,7 +670,7 @@ class OutBoundOrderService extends Service
|
|
|
->get()->toArray();
|
|
|
foreach ($save2 as $value){
|
|
|
if(isset($product_map2[$value['product_id']])){
|
|
|
- $number = bcadd($value['number'], $product_map2[$value['product_id']],2);
|
|
|
+ $number = bcadd($value['number'], $product_map2[$value['product_id']],4);
|
|
|
$product_map2[$value['product_id']] = $number;
|
|
|
}else{
|
|
|
$product_map2[$value['product_id']] = $value['number'];
|
|
@@ -648,11 +684,11 @@ class OutBoundOrderService extends Service
|
|
|
//合同出库后退货产品数量
|
|
|
$p1_return_number = $p1['return_number'] ?? 0;
|
|
|
//可再出数量
|
|
|
- $p_re = bcsub($p1_number,$p1_return_number,2);
|
|
|
+ $p_re = bcsub($p1_number,$p1_return_number,4);
|
|
|
|
|
|
$p2 = $product_map2[$value['product_id']] ?? 0;
|
|
|
- $p2_re = bcsub($p2,$p1_return_number,2);
|
|
|
- $number = bcsub(bcsub($value['number'], $p_re,2), $p2_re,2);
|
|
|
+ $p2_re = bcsub($p2,$p1_return_number,4);
|
|
|
+ $number = bcsub(bcsub($value['number'], $p_re,4), $p2_re,4);
|
|
|
|
|
|
if($number <= 0) continue;
|
|
|
|
|
@@ -682,7 +718,8 @@ class OutBoundOrderService extends Service
|
|
|
foreach ($sub as $value){
|
|
|
$key = $value['product_id'] . ',' . $value['storehouse_id'];
|
|
|
if(isset($product_save[$key])){
|
|
|
- $product_save[$key] += $value['number'];
|
|
|
+ $tmp = bcadd($value['number'], $product_save[$key],4);
|
|
|
+ $product_save[$key] = $tmp;
|
|
|
}else{
|
|
|
$product_save[$key] = $value['number'];
|
|
|
}
|
|
@@ -710,7 +747,7 @@ class OutBoundOrderService extends Service
|
|
|
foreach ($purchase as $p_v){
|
|
|
//必须校验的内容
|
|
|
if(empty($p_v['number'])) return [false, '订单产品数量不能为空'];
|
|
|
- $res = $this->checkNumber($p_v['number']);
|
|
|
+ $res = $this->checkNumber($p_v['number'],4);
|
|
|
if(! $res) return [false,'请输入正确的订单产品数量'];
|
|
|
if(empty($p_v['product_id'])) return [false, '订单产品ID不能为空'];
|
|
|
if(! isset($p_v['from_order_type']) || ! in_array($p_v['from_order_type'], PurchaseOrderInfoForOutBound::from_type)) return [false, '来源单据类型不存在或不正确'];
|
|
@@ -789,7 +826,7 @@ class OutBoundOrderService extends Service
|
|
|
$total = $value['total'];
|
|
|
$p_tmp = $purchase_count[$product_id] ?? 0;
|
|
|
$i_tmp = $inventory_count[$product_id] ?? 0;
|
|
|
- $count_tmp = bcadd($p_tmp, $i_tmp, 2);
|
|
|
+ $count_tmp = bcadd($p_tmp, $i_tmp, 4);
|
|
|
|
|
|
if(floatval($total) != floatval($count_tmp)) return [false, '出库数量需等于来源单据选择产品数量'];
|
|
|
}
|