فهرست منبع

订单生成退件时,用“客户订单号”对应退件的“订单号”字段
订单生成退件时,如果有分箱的,就按分箱数生成对应条退件记录,每条的退件单号按相应的分箱号

1. 扫描新增原表中没有的商品时,弹出一个提示: 原表中没有该商品,是否确定新增?
2. 实盘数量允许在电脑上手动修改(input点击编辑,失焦提交)
3. 导入差异和ASN差异都要要显示正负数

Zhouzhendong 5 سال پیش
والد
کامیت
a1fe127adf

+ 29 - 22
app/Http/Controllers/OrderController.php

@@ -86,33 +86,40 @@ class OrderController extends Controller
 
         $commodities = $result['commodities'];
         $rejectedBillItems = [];
+        //分箱号
+        $picktotraceids = json_decode($result['picktotraceids'],true);
         foreach ($result['orders'] as $order){
+            //不存在时将当前快递单号视为分箱号
+            if (!($picktotraceids[$order->orderno] ?? false))$picktotraceids[$order->orderno] = [$order->soreference5];
+            //获取货主与快递方
             $owner = app('ownerService')->firstOrCreate(['name' => $order->customer_descr_c],
                 ['name' => $order->customer_descr_c, 'code' => $order->customer_descr_c]);
             $logistic = app('logisticService')->firstOrCreate(['name' => $order->carriername],
                 ['name' => $order->carriername, 'code' => $order->carriername]);
-            $rejectedBill = $rejectedBillService->create([
-                'id_owner' => $owner->id,
-                'sender' => $order->c_contact,
-                'logistic_number_return' => $order->soreference5,
-                'id_logistic_return' => $logistic->id,
-                'order_number' => $order->orderno,
-                'mobile_sender' => $order->c_tel2,
-                'logistic_number' => '原单退回',//$order->soreference1
-                'remark' => $order->notes,
-                'is_loaded' =>0,
-            ]);
-            LogService::log(__METHOD__,"生成退货单",json_encode($order),Auth::user()['id']);
-            if ($commodities[$order->orderno] ?? false){
-                foreach ($commodities[$order->orderno] as $orderCommodities){
-                    array_push($rejectedBillItems,[
-                        'id_rejected_bill' => $rejectedBill->id,
-                        'barcode_goods' => $orderCommodities['alternate_sku1'],
-                        'name_goods' => $orderCommodities['descr_c'],
-                        'amount' => $orderCommodities['qtyordered'],
-                        'id_quality_label' => 1,
-                        'created_at' => date('Y-m-d H:i:s'),
-                    ]);
+            foreach ($picktotraceids[$order->orderno] as $logistic_number){
+                $rejectedBill = $rejectedBillService->create([
+                    'id_owner' => $owner->id,
+                    'sender' => $order->c_contact,
+                    'logistic_number_return' => $logistic_number,
+                    'id_logistic_return' => $logistic->id,
+                    'order_number' => $order->soreference1,
+                    'mobile_sender' => $order->c_tel2,
+                    'logistic_number' => '原单退回',//$order->soreference1
+                    'remark' => $order->notes,
+                    'is_loaded' =>0,
+                ]);
+                LogService::log(__METHOD__,"生成退货单",json_encode($order),Auth::user()['id']);
+                if ($commodities[$order->orderno] ?? false){
+                    foreach ($commodities[$order->orderno] as $orderCommodities){
+                        array_push($rejectedBillItems,[
+                            'id_rejected_bill' => $rejectedBill->id,
+                            'barcode_goods' => $orderCommodities['alternate_sku1'],
+                            'name_goods' => $orderCommodities['descr_c'],
+                            'amount' => $orderCommodities['qtyordered'],
+                            'id_quality_label' => 1,
+                            'created_at' => date('Y-m-d H:i:s'),
+                        ]);
+                    }
                 }
             }
         }

+ 16 - 3
app/Http/Controllers/StoreCheckingReceiveController.php

@@ -101,8 +101,8 @@ class StoreCheckingReceiveController extends Controller
             if (!$storeCheckingReceiveItem->imported_amount){
                 $params['imported_amount'] = 0;
                 $params['imported_diff_amount'] = $counted_amount;
-            }else $params['imported_diff_amount'] = abs($counted_amount-$storeCheckingReceiveItem->imported_amount);
-            if ($storeCheckingReceiveItem->asn_amount)$params['asn_diff_amount'] = abs($counted_amount-$storeCheckingReceiveItem->asn_amount);
+            }else $params['imported_diff_amount'] = $counted_amount-$storeCheckingReceiveItem->imported_amount;
+            if ($storeCheckingReceiveItem->asn_amount)$params['asn_diff_amount'] = $counted_amount-$storeCheckingReceiveItem->asn_amount;
             if (!$storeCheckingReceiveItem->bin_number && $goods['bin_number'])$params['bin_number'] = $goods['bin_number'];
 
             if (isset($params['imported_diff_amount']) && $params['imported_diff_amount'] > 0)$is_receive_diff = "是";
@@ -271,7 +271,7 @@ class StoreCheckingReceiveController extends Controller
                 continue;
             }
             if ($skus[$item->commodity->sku] ?? false){
-                $asn_diff_amount = abs($skus[$item->commodity->sku] - $item->counted_amount);
+                $asn_diff_amount = $skus[$item->commodity->sku] - $item->counted_amount;
                 $updateItems[] = [
                     'id'=>$item->id,
                     'asn_amount'=>$skus[$item->commodity->sku],
@@ -341,4 +341,17 @@ class StoreCheckingReceiveController extends Controller
         }
         return ['success'=>true, 'data'=>$data];
     }
+
+    //修改实盘数量
+    public function updateCountedAmount(Request $request){
+        if(!Gate::allows('入库管理-盘收一体-盘收-编辑')){ return ['success'=>false, 'data'=>'无权操作!'];  }
+        $id = $request->id ?? null;
+        $counted_amount = $request->counted_amount ?? null;
+        if (!$id || !$counted_amount)return ['success'=>false, 'data'=>'参数传递错误!'];
+        $item = app('storeCheckingReceiveItemService')->find($id);
+        if (!$item)return ['success'=>false, 'data'=>'被盘项不存在'];
+        app('storeCheckingReceiveItemService')->updateFind($item,["counted_amount"=>$counted_amount]);
+        LogService::log(__METHOD__,"盘点修改实盘数",'item:'.json_encode($item)."update:",$counted_amount);
+        return ['success'=>true];
+    }
 }

+ 4 - 0
app/Services/StoreCheckingReceiveItemService.php

@@ -19,6 +19,10 @@ Class StoreCheckingReceiveItemService
         return $item;
     }
 
+    public function find($id){
+        return StoreCheckingReceiveItem::query()->find($id);
+    }
+
     public function create(array $params){
         return StoreCheckingReceiveItem::query()->create($params);
     }

+ 13 - 12
resources/views/order/index/delivering.blade.php

@@ -689,21 +689,22 @@
                     $(e.target).removeClass('is-invalid');
                 },
                 isRejectedBillExist(){
-                    let _this = this;
-                    axios.post('{{url('order/isRejectedBillExist')}}',{data:this.checkData})
-                        .then(function (response) {
-                            if (!response.data.success){
-                                tempTip.confirm(response.data.data+',已存在,是否仍要生成退货单?',function () {
-                                    _this.createRejectedBill();
-                                });
-                                return;
-                            }
-                            _this.createRejectedBill();
-                        }).catch(function (error) {
+                    tempTip.confirm("是否要生成“"+this.checkData+"”的退货单?",()=> {
+                        let _this = this;
+                        axios.post('{{url('order/isRejectedBillExist')}}',{data:this.checkData})
+                            .then(function (response) {
+                                if (!response.data.success){
+                                    tempTip.confirm(response.data.data+',已存在,是否仍要生成退货单?',function () {
+                                        _this.createRejectedBill();
+                                    });
+                                    return;
+                                }
+                                _this.createRejectedBill();
+                            }).catch(function (error) {
                             tempTip.setDuration(3000);
                             tempTip.show('网络错误:'+error);
                         });
-
+                    });
                 },
                 createRejectedBill() {
                     let url = '{{url('order/createRejectedBill')}}';

+ 111 - 7
resources/views/store/checkingReceive/show.blade.php

@@ -58,7 +58,7 @@
                         </div>
                     </div>
                     <div class="col-6">
-                        <div class="card-title" id="amountLabel">手动输入数量:</div>
+                        <div class="card-title" id="amountLabel">输入数量:</div>
                         <div class="input-group mt-n2 mb-2">
                             <input type="number" id="amount" style='height: 40px;font-size: 1.6em;color:blue;font-weight: bolder;padding: 3px;text-align: center' class="form-control" placeholder=""
                                    :disabled="status.amountDisable" v-model="inputting.amount" @focusin="focusOutDocument" @focusout="focusDocument" @keyup="oninputEnter">
@@ -107,7 +107,17 @@
                     </span>
                     </td>
                     <td>@{{ storeCheckingReceiveItem.imported_amount }}</td>
-                    <td>@{{ storeCheckingReceiveItem.counted_amount }}</td>
+                    <td @click="showInput(storeCheckingReceiveItem.id)">
+                        <div class="form-inline">
+                            <input  @blur="delFocus()" :id = "'counted_amount_'+storeCheckingReceiveItem.id" :value="storeCheckingReceiveItem.counted_amount"
+                                    class="form-control form-control-sm" type="text" :disabled="disabledItemId == storeCheckingReceiveItem.id ? false : true">
+                            <button v-if="disabledItemId == storeCheckingReceiveItem.id" type="button" class="btn btn-sm btn-success ml-1"
+                                @click="updateCountedAmount(storeCheckingReceiveItem)">确定</button>
+                            <button v-if="disabledItemId == storeCheckingReceiveItem.id" type="button" class="btn btn-sm btn-danger"
+                                @click="disabledItemId = ''">取消</button>
+                        </div>
+
+                    </td>
                     <td>@{{ storeCheckingReceiveItem.asn_amount }}</td>
                     <td>@{{ storeCheckingReceiveItem.imported_diff_amount }}</td>
                     <td>@{{ storeCheckingReceiveItem.asn_diff_amount }}</td>
@@ -120,11 +130,20 @@
         </div>
         <!-- phone <544 -->
         <div class="d-xl-none">
-            <div v-for="(storeCheckingReceiveItem) in storeCheckingReceiveItems" class="mt-1 border border-1 rounded">
+            <div v-for="(storeCheckingReceiveItem,i) in storeCheckingReceiveItems" class="mt-1 border border-1 rounded"
+                 @click="openAll(storeCheckingReceiveItem.id)">
+                <div class="row">
+                    <div class="col-6">
+                        <label class="text-muted">序号:</label>@{{ i+1 }}
+                    </div>
+                    <div class="col-6">
+                        <span class="pull-right mr-1 text-muted font-weight-bold">···</span>
+                    </div>
+                </div>
                 <div class="row">
                     <div class="col-12 row">
-                        <label class="text-primary col-4 mr-0">商品条码:</label>
-                        <div class="col-8 ml-0">
+                        <label class="text-primary col-3 mr-0">条码:</label>
+                        <div class="col-9 ml-0">
                             <span v-for="commodity_barcode in storeCheckingReceiveItem.commodity_barcodes">
                                 <small>@{{ commodity_barcode.code }}</small><br>
                             </span>
@@ -133,7 +152,7 @@
                 </div>
                 <div class="row">
                     <div class="col-12">
-                        <label class="text-muted">商品名称:</label>@{{ storeCheckingReceiveItem.commodity_name }}
+                        <label class="text-muted">名称:</label>@{{ storeCheckingReceiveItem.commodity_name }}
                     </div>
                 </div>
                 <div class="row">
@@ -144,6 +163,48 @@
                         <label class="text-muted">实盘数:</label>@{{ storeCheckingReceiveItem.counted_amount }}
                     </div>
                 </div>
+                <div v-if="signOpenId == storeCheckingReceiveItem.id">
+                    <div class="row">
+                        <div class="col-6">
+                            <label class="text-muted">导入数:</label>@{{ storeCheckingReceiveItem.imported_amount }}
+                        </div>
+                        <div class="col-6">
+                            <label class="text-muted">ASN数:</label>@{{ storeCheckingReceiveItem.asn_amount }}
+                        </div>
+                    </div>
+                    <div class="row">
+                        <div class="col-6">
+                            <label class="text-muted">导入差异:</label>@{{ storeCheckingReceiveItem.imported_diff_amount }}
+                        </div>
+                        <div class="col-6">
+                            <label class="text-muted">ASN差异:</label>@{{ storeCheckingReceiveItem.asn_amount }}
+                        </div>
+                    </div>
+                    <div class="row">
+                        <div class="col-6">
+                            <label class="text-muted">导入差异:</label>@{{ storeCheckingReceiveItem.imported_amount }}
+                        </div>
+                        <div class="col-6">
+                            <label class="text-muted">ASN差异:</label>@{{ storeCheckingReceiveItem.asn_diff_amount }}
+                        </div>
+                    </div>
+                    <div class="row">
+                        <div class="col-6">
+                            <label class="text-muted">生产日期:</label>@{{ storeCheckingReceiveItem.produced_at }}
+                        </div>
+                        <div class="col-6">
+                            <label class="text-muted">有效日期:</label>@{{ storeCheckingReceiveItem.invalid_at }}
+                        </div>
+                    </div>
+                    <div class="row">
+                        <div class="col-6">
+                            <label class="text-muted">唯一号码:</label>@{{ storeCheckingReceiveItem.unique_code }}
+                        </div>
+                        <div class="col-6">
+                            <label class="text-muted">批次号码:</label>@{{ storeCheckingReceiveItem.batch_code }}
+                        </div>
+                    </div>
+                </div>
             </div>
         </div>
     </div>
@@ -190,6 +251,8 @@
             lastScannedBarcode : '',
             asn : '',
             is_show : {!! $is_show !!},
+            signOpenId : "",
+            disabledItemId : "",
         },
         mounted(){
             $('#container').removeClass('d-none');
@@ -219,6 +282,47 @@
             this.scanListening();
         },
         methods:{
+            //显示该条全部信息
+            openAll(id){
+                if (this.signOpenId === id ) this.signOpenId = "";
+                else this.signOpenId = id;
+            },
+            //获取焦点,取消全局监听
+            showInput(id){
+                if (this.disabledItemId === id)return;
+                this.focusing = "";
+                document.getElementById('counted_amount_'+id).focus();
+                this.disabledItemId = id;
+            },
+            //实盘数量输出框失焦
+            delFocus(){
+                this.focusDocument();
+            },
+            //执行修改
+            updateCountedAmount(item){
+                let counted_amount = document.getElementById('counted_amount_'+item.id).value;
+                if(!counted_amount || parseInt(counted_amount) != counted_amount){
+                    tempTip.setDuration(3000);
+                    tempTip.show('请输入正整数!');
+                    return;
+                }
+                axios.post('{{url('store/checkingReceive/updateCountedAmount')}}',{id : item.id,counted_amount : counted_amount})
+                    .then((res)=>{
+                        if (res.data.success){
+                            item.counted_amount = counted_amount;
+                            this.disabledItemId = "";
+                            tempTip.setDuration(2000);
+                            tempTip.showSuccess("实盘数量成功修改为“"+counted_amount+"”");
+                            return;
+                        }
+                        tempTip.setDuration(3000);
+                        tempTip.show(res.data.data);
+                    })
+                    .catch((err)=>{
+                        tempTip.setDuration(3000);
+                        tempTip.show('网络错误:'+err);
+                    });
+            },
             switchMenu(menuName){
                 this.inputMode = menuName;
                 this.cleanInputs();
@@ -227,7 +331,7 @@
                     $('#amountLabel').text('输入数量:');
                 }else {
                     this.status.amountDisable = true;
-                    $('#amountLabel').text('自动扫入数量:');
+                    $('#amountLabel').text('扫入数量:');
                 }
             },
             scanListening: function () {

+ 1 - 0
routes/web.php

@@ -233,6 +233,7 @@ Route::group(['prefix'=>'store'],function(){
             Route::post('receipt','StoreCheckingReceiveController@receipt');
             Route::get('{id}','StoreCheckingReceiveController@show');
         });
+        Route::post('updateCountedAmount','StoreCheckingReceiveController@updateCountedAmount');
         Route::post('insertItem','StoreCheckingReceiveController@insertItem');
         Route::get('mission','StoreCheckingReceiveController@mission');
     });