Просмотр исходного кода

Bug:设定日期后仍然不能生效
Bug:导入还是会报错, 添满也报500
Bug:出库单SO号不应该同步
+验收必须就卡住利润计算,同时验证是否有成品单
+出库单也要做一键添加所有
+原料单要可以改条码和SKU
+出库单也要可以改名称,条码,SKU

Zhouzhendong 5 лет назад
Родитель
Сommit
6a6bf2a4e8

+ 1 - 5
app/Commodity.php

@@ -74,10 +74,6 @@ class Commodity extends Model
     }
 
     public function newBarcode($barcode){
-        $commodityBarcode=CommodityBarcode::where('commodity_id',$this['id'])->where('code',$barcode)->first();
-        if(!$commodityBarcode){
-            $commodityBarcode=new CommodityBarcode(['commodity_id'=>$this['id'],'code'=>$barcode]);
-            $commodityBarcode->save();
-        }
+        return CommodityBarcode::query()->firstOrCreate(['commodity_id'=>$this['id'],'code'=>$barcode]);
     }
 }

+ 23 - 8
app/Http/Controllers/ProcessController.php

@@ -58,9 +58,10 @@ class ProcessController extends Controller
         $id=$request->input('id');
         $processDailies=ProcessDaily::with(['processDailyParticipants','process'])->orderBy('date','DESC')
             ->where('process_id',$id)->get();
-        $process=Process::find($id);
+        $process=Process::query()->with('automaticSupplementSign')->find($id);
         if (count($processDailies)>0){
-            if ((($process->amount)-($process->completed_amount))<=0 || $process->status=='交接完成')$result=true;
+            if ((($process->amount)-($process->completed_amount))<=0 ||
+                $process->status=='交接完成' || $process->automaticSupplementSign)$result=true;
             else $result=$this->createDeficiencyData($processDailies,$today);
             if ($result){
                 $processDailies=ProcessDaily::with(['processDailyParticipants','process'])
@@ -161,7 +162,6 @@ class ProcessController extends Controller
                 $remain=$remain-($processDailiesArr[$date]->output);
             }
         }
-        $this->log(__METHOD__,"生成加工单每日记录".__FUNCTION__,json_encode($processDailies),Auth::user()['id']);
         return true;
     }
 
@@ -550,13 +550,27 @@ class ProcessController extends Controller
                 if ($processContent['type'])$processContentOne->type='成品单';
                 $processContentOne->save();
                 if (isset($processContent['is_update_commodity_name'])){
-                    Sign::create([
+                    Sign::query()->create([
                         'signable_type'=>'processes_contents',
                         'signable_id'=>$processContentOne->id,
                         'field'=>'commodity_name',
                         'mark'=>$processContent['commodity_name'],
                     ]);
                 }
+                if (isset($processContent['commodity_barcode'])){
+                    CommodityBarcode::query()->firstOrCreate([
+                        'commodity_id'=>$processContent['commodity_id'],
+                        'code'=>$processContent['commodity_barcode']]
+                    );
+                }
+                if (isset($processContent['is_update_commodity_sku'])){
+                    Sign::query()->create([
+                        'signable_type'=>'processes_contents',
+                        'signable_id'=>$processContentOne->id,
+                        'field'=>'commodity_sku',
+                        'mark'=>$processContent['commodity_sku'],
+                    ]);
+                }
             }
         }
         $process->code='P'.date ("Ymd").str_pad($process->id,3,"0",STR_PAD_LEFT);
@@ -796,8 +810,10 @@ class ProcessController extends Controller
     //质量验收
     function checkAndAccept(Request $request){
 
-        $process= Process::find($request->id);
+        $process= Process::query()->with('processDailies')->find($request->id);
         if (!$process)return ['success'=>false];
+        $result=$this->statistic($process);
+        if (!$result['success'])return $result;
         $process->update([
             'status'=>'待交接'
         ]);
@@ -894,7 +910,7 @@ class ProcessController extends Controller
 
     //增加填充标记
     private function createAutomaticSupplement($process_id){
-        Sign::create([
+        Sign::query()->firstOrCreate([
             'signable_type'=>'processes',
             'signable_id'=>$process_id,
             'field'=>'automatic_supplement',
@@ -975,9 +991,8 @@ class ProcessController extends Controller
                 ]);
                 $commodity_barcodes = [$commodityBarCode];
             }else $commodity_barcodes = $commodity->barcodes;
-
             $this->log(__METHOD__,"二次加工单录入导入商品数据时添加商品及条码".__FUNCTION__,
-                json_encode($commodity)." || ".json_encode($commodityBarCode),Auth::user()['id']);
+                json_encode($commodity)." || ".json_encode($commodity_barcodes),Auth::user()['id']);
             $processContent=['bill_type'=>'入库单','commodity_id'=>$commodity->id,'wms_code'=>$wmsCode,'amount'=>$amount,
                 'commodity_name'=>$commodity->name,'commodity_barcodes'=>$commodity_barcodes,'commodity_sku'=>$commodity->sku,
                 'lineNo'=>1,'owner_id'=>$owner->id,'owner_name'=>$owner->name,'addBtnShow'=>false,'type'=>false];

+ 13 - 4
app/ProcessesContent.php

@@ -13,7 +13,8 @@ class ProcessesContent extends Model
     ];
     protected $appends=[
         'commodity_name',
-        'sign_mark',
+        'sign_commodity_name_mark',
+        'sign_commodity_sku_mark',
     ];
 
     public function process(){
@@ -22,17 +23,25 @@ class ProcessesContent extends Model
     public function commodity(){
         return $this->belongsTo('App\Commodity','commodity_id','id');
     }
-    public function sign(){
+    public function signCommodityName(){
         return $this->hasOne('App\Sign','signable_id','id')
             ->where('signable_type','processes_contents')->where('field','commodity_name');
     }
+    public function signCommoditySku(){
+        return $this->hasOne('App\Sign','signable_id','id')
+            ->where('signable_type','processes_contents')->where('field','commodity_sku');
+    }
 
     public function getCommodityNameAttribute()
     {
         return $this['commodity']? $this['commodity']['name']:null;
     }
-    public function getSignMarkAttribute()
+    public function getSignCommodityNameMarkAttribute()
+    {
+        return $this['signCommodityName']? $this['signCommodityName']['mark']:null;
+    }
+    public function getSignCommoditySkuMarkAttribute()
     {
-        return $this['sign']? $this['sign']['mark']:null;
+        return $this['signCommodityName']? $this['signCommoditySku']['mark']:null;
     }
 }

Разница между файлами не показана из-за своего большого размера
+ 308 - 579
public/js/app.js


+ 56 - 31
resources/views/process/create.blade.php

@@ -66,15 +66,15 @@
                                     </span>
                                 </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">商品名</label>
-                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" class="form-control form-control-sm col-8" @input="update_commodity_name(processContents[0])" v-model="processContents[0].commodity_name">
+                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" class="form-control form-control-sm col-8" @change="update_commodity_name(processContents[0])" v-model="processContents[0].commodity_name">
                                 </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">条码</label>
-                                    <ul class="p-0 m-0 ml-2 list-unstyled list-inline" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type && processContents[0].commodity_barcodes && processContents[0].commodity_barcodes.length>0">
-                                        <li v-for="barcode in processContents[0].commodity_barcodes"><small>&nbsp;&nbsp;@{{ barcode.code }}</small></li>
-                                    </ul>
+                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" class="form-control form-control-sm col-8" @change="update_commodity_barcode(processContents[0],$event)" :value="processContents[0].commodity_barcode ? processContents[0].commodity_barcode :
+                                    (processContents[0].commodity_barcodes[0] ? processContents[0].commodity_barcodes[0].code :'')">
                                 </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">SKU</label>
-                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" class="col-8">@{{ processContents[0].commodity_sku }}</b></div>
+                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" class="form-control form-control-sm col-8" @change="update_commodity_sku(processContents[0])" v-model="processContents[0].commodity_sku">
+                                </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">单据类型</label>
                                     <select v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type"
                                             v-model="processContents[0].bill_type"  class="col-8 form-control form-control-sm">
@@ -110,7 +110,9 @@
                                         <span class="ml-2 font-weight-bold">数量:</span>
                                         <span class="font-weight-bold">@{{ processContent.amount }}</span>
                                         <span class="ml-2 text-muted">条码:</span>
-                                        <span class="text-muted"><small v-if="processContent.commodity_barcodes && processContent.commodity_barcodes.length>0"
+                                        <span class="text-muted">
+                                            <small v-if="processContent.commodity_barcode"> @{{ processContent.commodity_barcode }}</small>
+                                            <small v-if="processContent.commodity_barcodes && processContent.commodity_barcodes.length>0 && !processContent.commodity_barcode"
                                                                         v-for="barcode in processContent.commodity_barcodes">@{{ barcode.code }}</small></span>
                                         <button v-if="is_delBtn[processContent.wms_code+'_'+processContent.commodity_id+'_'+false]" @click="deleteProcessContent(processContent.wms_code,processContent.commodity_id,false,processContent.amount)" class="btn btn-sm btn-danger" style="position: absolute;right: 0;bottom: 0">删除</button>
                                     </div>
@@ -129,7 +131,11 @@
                                 <div class="row pt-2 small"><label class="col-3 text-right" >单据号</label>
                                     <b class="col-8" v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type">@{{ processContents[0].wms_code }}</b></div> <!---->
                                 <div class="row pt-2" v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type">
-                                    <span class="col-12 text-center text-muted small">双击选择商品:</span>
+                                    <span class="col-12 text-center text-muted small">双击选择商品:
+                                        <button class="btn btn-sm btn-outline-info ml-1 mt-0" style="transform: scale(0.8)"
+                                                @click="finishedProductAddAll(processContents[0])"
+                                        >添加所有</button>
+                                    </span>
                                     <span class=" col-11 offset-1 input-group" style=" border-radius: 5px; opacity: 1.5; text-align: center;">
                                         <ul onselectstart="return false;" class="list-group tooltipTarget" style="width: 100%; max-height: 130px; overflow-y: scroll;">
                                             <li  v-for="commodity in processContents[0].commodities" :id="commodity.id" :style="{'background-color':processContents[0].commodity_id==commodity.id ? '#9fcdff':''}"
@@ -143,15 +149,14 @@
                                     </span>
                                 </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">商品名</label>
-                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type" class="col-8">@{{ processContents[0].commodity_name }}</b>
+                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type" class="form-control form-control-sm col-8" @change="update_commodity_name(processContents[0])" v-model="processContents[0].commodity_name">
                                 </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">条码</label>
-                                    <ul class="p-0 m-0 ml-2 list-unstyled list-inline" v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type && processContents[0].commodity_barcodes && processContents[0].commodity_barcodes.length>0">
-                                        <li v-for="barcode in processContents[0].commodity_barcodes"><small>&nbsp;&nbsp;@{{ barcode.code }}</small></li>
-                                    </ul>
+                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type" class="form-control form-control-sm col-8" @change="update_commodity_barcode(processContents[0],$event)" :value="processContents[0].commodity_barcodes[0] ? processContents[0].commodity_barcodes[0].code :''">
                                 </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">SKU</label>
-                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type" class="col-8">@{{ processContents[0].commodity_sku }}</b></div>
+                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type" class="form-control form-control-sm col-8" @change="update_commodity_sku(processContents[0])" v-model="processContents[0].commodity_sku">
+                                </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">单据类型</label>
                                     <select v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type"
                                             v-model="processContents[0].bill_type"  class="col-8 form-control form-control-sm">
@@ -521,7 +526,7 @@
                         tempTip.show('提交失败!网络错误:'+err);
                     });
                 },
-                /*//去往新增教程
+                {{--//去往新增教程
                 addTutorial(){
                     window.open("{{url('maintenance/tutorial/create?owner_id=')}}"+this.process.owner_id);
                 },
@@ -530,7 +535,7 @@
                     if (this.processContents.length>=1 && this.processContents[(this.processContents.length)-1].owner_id){
                         this.getTutorial(this.processContents[(this.processContents.length)-1].owner_id);
                     }
-                },*/
+                },--}}
                 //删除按钮的显示
                 update_delBtn(is_type,wms_code,commodity_id,type){
                     if (is_type) this.$set(this.is_delBtn,wms_code+'_'+commodity_id+'_'+type,true);
@@ -539,28 +544,38 @@
                 update_commodity_name(processContent){
                     this.$set(processContent,'is_update_commodity_name',true);
                 },
+                update_commodity_barcode(processContent,e){
+                    this.$set(processContent,'commodity_barcode',e.target.value);
+                },
+                update_commodity_sku(processContent){
+                    this.$set(processContent,'is_update_commodity_sku',true);
+                },
+                //添加动作
+                _add(processContent,commodity,type){
+                    let content={};
+                    content['bill_type'] = processContent.bill_type ;
+                    content['commodity_id'] = commodity.id ;
+                    content['wms_code'] = processContent.wms_code ;
+                    content['amount'] = commodity.amount ;
+                    content['commodity_name'] = commodity.name ;
+                    content['commodity_barcodes'] = commodity.barcodes ;
+                    content['commodity_sku'] = commodity.sku ;
+                    content['lineNo'] = commodity.lineNo ;
+                    content['owner_id'] = commodity.owner_id ;
+                    content['owner_name'] = commodity.owner_name ;
+                    content['addBtnShow'] = false ;
+                    content['type'] = type ;
+                    this.processContents.unshift(content);
+                    this.commodityIds.push(commodity.id+"_"+content['type']);
+                    this.sum += Number(commodity.amount);
+                },
                 //添加所有
                 addAll(processContent){
                     let _this=this;
                     processContent.commodities.forEach(function (commodity) {
                         if (!_this.commodityIds.includes(commodity.id+"_"+false)){
-                            let content={};
-                            content['bill_type'] = processContent.bill_type ;
-                            content['commodity_id'] = commodity.id ;
-                            content['wms_code'] = processContent.wms_code ;
-                            content['amount'] = commodity.amount ;
-                            content['commodity_name'] = commodity.name ;
-                            content['commodity_barcodes'] = commodity.barcodes ;
-                            content['commodity_sku'] = commodity.sku ;
-                            content['lineNo'] = commodity.lineNo ;
-                            content['owner_id'] = commodity.owner_id ;
-                            content['owner_name'] = commodity.owner_name ;
-                            content['addBtnShow'] = false ;
-                            content['type'] = false ;
-                            _this.processContents.unshift(content);
-                            _this.commodityIds.push(commodity.id+"_"+content['type']);
-                            _this.sum += Number(commodity.amount);
-                            if (!_this.commodityIds.includes(commodity.id+"_"+true)){
+                            _this._add(processContent,commodity,false);
+                            if (processContent.bill_type==='入库单' && !_this.commodityIds.includes(commodity.id+"_"+true)){
                                 let contentTemp={};
                                 Object.assign(contentTemp,content);
                                 contentTemp['type'] = true;
@@ -572,6 +587,16 @@
                     });
                     _this.$delete(_this.processContents,(_this.processContents.length)-1);
                 },
+                //成本单添加所有
+                finishedProductAddAll(processContent){
+                    let _this=this;
+                    processContent.commodities.forEach(function (commodity) {
+                        if (!_this.commodityIds.includes(commodity.id + "_" + true)) {
+                            _this._add(processContent, commodity, true);
+                        }
+                    });
+                    _this.$delete(_this.processContents,(_this.processContents.length)-1);
+                },
                 showPasteDataModal(){
                     $("#popover").attr('hidden','hidden');
                     $('#pasteData').modal('show');

+ 3 - 3
resources/views/process/index.blade.php

@@ -307,8 +307,8 @@
                                         <li v-for="barcode in processesContent.commodity.barcodes"><small>@{{ barcode.code }}</small></li>
                                     </ul>
                                 </td>
-                                <td :title="processesContent.sign_mark?processesContent.sign_mark:processesContent.commodity_name" class="text-muted tooltipTarget" :class="processesContent.type=='原料单'?'td-warm':'td-cool'">
-                                    <div style="width: 180px;overflow:hidden" :class="processesContent.bill_type=='原料单'?'td-warm':'td-cool'">@{{ processesContent.sign_mark?processesContent.sign_mark:processesContent.commodity_name }}</div></td>
+                                <td :title="processesContent.sign_commodity_name?processesContent.sign_commodity_name:processesContent.commodity_name" class="text-muted tooltipTarget" :class="processesContent.type=='原料单'?'td-warm':'td-cool'">
+                                    <div style="width: 180px;overflow:hidden" :class="processesContent.bill_type=='原料单'?'td-warm':'td-cool'">@{{ processesContent.sign_commodity_name?processesContent.sign_commodity_name:processesContent.commodity_name }}</div></td>
                             </tr>
                             <tr v-if="processUnfold[processOne.code+processOne.id]">
                                <td colspan="5">
@@ -330,7 +330,7 @@
                                 <span v-if="processesContent.commodity && processesContent.commodity.barcodes.length>0">
                                     @{{ processesContent.commodity.barcodes[0].code }}
                                 </span>&nbsp;&nbsp;
-                                <span :title="processesContent.sign_mark?processesContent.sign_mark:processesContent.commodity_name" class="text-muted tooltipTarget" style="max-width:100px;overflow:hidden;">@{{ processesContent.sign_mark?processesContent.sign_mark:processesContent.commodity_name }}</span>
+                                <span :title="processesContent.sign_commodity_name?processesContent.sign_commodity_name:processesContent.commodity_name" class="text-muted tooltipTarget" style="max-width:100px;overflow:hidden;">@{{ processesContent.sign_commodity_name?processesContent.sign_commodity_name:processesContent.commodity_name }}</span>
                             </div>
                         </div>
                         <div style="overflow: auto;zoom:1;position:absolute;margin-top: -35px;left:calc(50% - 50px);background-color: white" v-if="!processUnfold[processOne.code+processOne.id] && processOne.processesContents.length>1 &&

Некоторые файлы не были показаны из-за большого количества измененных файлов