|
|
@@ -7,6 +7,9 @@ use App\Owner;
|
|
|
use App\Process;
|
|
|
use App\ProcessDaily;
|
|
|
use App\ProcessDailyParticipant;
|
|
|
+use App\ProcessesContent;
|
|
|
+use App\ProcessMethod;
|
|
|
+use App\ProcessStatistic;
|
|
|
use App\Tutorial;
|
|
|
use App\UserDetail;
|
|
|
use App\UserDutyCheck;
|
|
|
@@ -18,6 +21,7 @@ use Illuminate\Support\Facades\DB;
|
|
|
use Illuminate\Support\Facades\Gate;
|
|
|
use Illuminate\Support\Facades\Validator;
|
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
|
+use Ramsey\Uuid\Uuid;
|
|
|
|
|
|
class ProcessController extends Controller
|
|
|
{
|
|
|
@@ -41,7 +45,12 @@ class ProcessController extends Controller
|
|
|
$processes=$processes->where('owner_id',$request->input('owner_id'));
|
|
|
}
|
|
|
if ($request->input('wms_code')){
|
|
|
- $processes=$processes->where('wms_code','like','%'.$request->input('wms_code').'%')->where('created_at','>',$today->format('Y-m-d'));
|
|
|
+ $wms_code=$request->input('wms_code');
|
|
|
+ $date=$today->format('Y-m-d');
|
|
|
+ $processes=$processes->whereHas('processesContents',function (Builder $builder)use ($wms_code,$date){
|
|
|
+ $builder->where('wms_code','like','%'.$wms_code.'%')
|
|
|
+ ->where('created_at','>',$date);
|
|
|
+ });
|
|
|
}
|
|
|
$processes=$processes->paginate($request->input('paginate')??50);
|
|
|
return $processes;
|
|
|
@@ -62,7 +71,7 @@ class ProcessController extends Controller
|
|
|
}
|
|
|
$processes=$this->conditionQuery($request,$processes);
|
|
|
$owners=Owner::select('id','name')->get();
|
|
|
- return view('process.index',['processes'=>$processes,'owners'=>$owners]);
|
|
|
+ return view('process.index',['processes'=>$processes,'owners'=>$owners,'request'=>$request->input()]);
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -87,7 +96,7 @@ class ProcessController extends Controller
|
|
|
$id=$request->input('id');
|
|
|
$processDailies=ProcessDaily::with(['processDailyParticipants','process'])->orderBy('date','DESC')
|
|
|
->where('process_id',$id)->get();
|
|
|
- if ($processDailies){
|
|
|
+ if (count($processDailies)>0){
|
|
|
$result=$this->createDeficiencyData($processDailies,$today);
|
|
|
if ($result){
|
|
|
$processDailies=ProcessDaily::with(['processDailyParticipants','process'])
|
|
|
@@ -137,10 +146,11 @@ class ProcessController extends Controller
|
|
|
$diff=abs(round($processDailyParticipant->hour_count-$hour,2));
|
|
|
$processDailyParticipant->diff=$diff;
|
|
|
}
|
|
|
- //计件工
|
|
|
- if ($processDailyParticipant->unit_price){
|
|
|
+
|
|
|
+ //计件工 保留
|
|
|
+ /*if ($processDailyParticipant->unit_count){
|
|
|
return $processDailyParticipant;
|
|
|
- }
|
|
|
+ }*/
|
|
|
if ($hour&&$hour>8){
|
|
|
$processDailyParticipant->billingHour=8;
|
|
|
return $processDailyParticipant;
|
|
|
@@ -163,7 +173,6 @@ class ProcessController extends Controller
|
|
|
}
|
|
|
//生成二次加工单缺失时间记录及本日记录
|
|
|
public function createDeficiencyData($processDailies,$today){
|
|
|
- if (!$processDailies||!$today)return false;
|
|
|
$processDailiesArr=[];
|
|
|
foreach ($processDailies as $processDaily){
|
|
|
$processDailiesArr[$processDaily->date]=$processDaily;
|
|
|
@@ -203,7 +212,16 @@ class ProcessController extends Controller
|
|
|
//接单
|
|
|
public function receive($id){
|
|
|
if(!Gate::allows('二次加工管理-接单与驳回')){ return redirect(url('/')); }
|
|
|
- $process=Process::select('id','status')->find($id);
|
|
|
+ $process=Process::select('id','status','amount')->find($id);
|
|
|
+ $amount=$process->amount;
|
|
|
+ $today=Carbon::now()->format('Y-m-d');
|
|
|
+ $processDaily=new ProcessDaily([
|
|
|
+ 'process_id'=>$id,
|
|
|
+ 'date'=>$today,
|
|
|
+ 'output'=>0,
|
|
|
+ 'remain'=>$amount,
|
|
|
+ ]);
|
|
|
+ $processDaily->save();
|
|
|
$process->status="待加工";
|
|
|
$process->update();
|
|
|
$this->log(__METHOD__,"接单二次加工单_".__FUNCTION__,json_encode($process),Auth::user()['id']);
|
|
|
@@ -212,12 +230,48 @@ class ProcessController extends Controller
|
|
|
//完成
|
|
|
public function accomplish($id){
|
|
|
if(!Gate::allows('二次加工管理-验收完成')){ return redirect(url('/')); }
|
|
|
- $process=Process::select('id','status')->find($id);
|
|
|
+ $process=Process::with('processDailies')->find($id);
|
|
|
+ if (count($process->processDailies)>0){
|
|
|
+ $completed_amount=0;
|
|
|
+ foreach ($process->processDailies as $processDaily){
|
|
|
+ $completed_amount=$completed_amount+($processDaily->output);
|
|
|
+ }
|
|
|
+ $process->completed_amount=$completed_amount;
|
|
|
+ }
|
|
|
$process->status="已完成";
|
|
|
$process->update();
|
|
|
- $this->log(__METHOD__,"完成二次加工单_".__FUNCTION__,json_encode($process),Auth::user()['id']);
|
|
|
+
|
|
|
+ //统计:
|
|
|
+ $revenue=($process->unit_price)*($process->completed_amount); //收入合计
|
|
|
+ $processDailies=ProcessDaily::with('processDailyParticipants')->where('process_id',$id)->where('output','>',0)->get();
|
|
|
+ $duration_days=count($processDailies); //完成天数
|
|
|
+ $duration_man_hours=0; //总工时
|
|
|
+ $total_cost=0; //合计成本
|
|
|
+ foreach ($processDailies as $processDailyOne){
|
|
|
+ foreach ($processDailyOne->processDailyParticipants as $processDailyParticipant){
|
|
|
+ $processDailyParticipant=$this->countParticipantManHour($processDailyParticipant,$processDailyOne->date);
|
|
|
+ $duration_man_hours=$duration_man_hours+($processDailyParticipant->billingHour);
|
|
|
+ if ($processDailyParticipant->unit_count){
|
|
|
+ $total_cost=$total_cost+(($processDailyParticipant->unit_count)*($processDailyParticipant->unit_price));
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $total_cost=$total_cost+(($processDailyParticipant->billingHour)*($processDailyParticipant->hour_price));
|
|
|
+ }
|
|
|
+ };
|
|
|
+ $gross_profit=$revenue-$total_cost; //毛利润
|
|
|
+ $gross_profit_rate=$gross_profit/$revenue; //毛利率
|
|
|
+ $processStatistic=ProcessStatistic::find($id);
|
|
|
+ $processStatistic->revenue=$revenue;
|
|
|
+ $processStatistic->duration_days=$duration_days;
|
|
|
+ $processStatistic->duration_man_hours=$duration_man_hours;
|
|
|
+ $processStatistic->total_cost=$total_cost;
|
|
|
+ $processStatistic->gross_profit=$gross_profit;
|
|
|
+ $processStatistic->gross_profit_rate=$gross_profit_rate;
|
|
|
+ $processStatistic->update();
|
|
|
+ $this->log(__METHOD__,"完成二次加工单_".__FUNCTION__,json_encode($process)." || ".json_encode($processStatistic),Auth::user()['id']);
|
|
|
return $process;
|
|
|
}
|
|
|
+
|
|
|
//修改当日产量
|
|
|
public function updateDailyOutput(Request $request){
|
|
|
if(!Gate::allows('二次加工管理-登记工时')){ return redirect(url('/')); }
|
|
|
@@ -226,15 +280,64 @@ class ProcessController extends Controller
|
|
|
$id=$request->input('id');
|
|
|
$output=$request->input('output');
|
|
|
$processDaily=ProcessDaily::with('process')->find($id);
|
|
|
- $remain=$this->countRemain($processDaily);
|
|
|
$processDaily->output=$output;
|
|
|
- $processDaily->remain=$remain;
|
|
|
$processDaily->update();
|
|
|
+ $result=$this->countRemains($processDaily);
|
|
|
+ $processDailies=$result['processDailies'];
|
|
|
+ //$remain=$this->countRemain($processDaily);
|
|
|
+ //$processDaily->remain=$remain;
|
|
|
$this->log(__METHOD__,"修改当日产量".__FUNCTION__,json_encode($processDaily),Auth::user()['id']);
|
|
|
- return ['status'=>"success",'data'=>$processDaily];
|
|
|
+ $response=[];
|
|
|
+ $response['status']='success';
|
|
|
+ $response['data']=$processDailies;
|
|
|
+ if (isset($result['process'])){$response['process']=$result['process'];}
|
|
|
+ return $response;
|
|
|
}
|
|
|
+ //每次修改,去查询该单下全部日期,逐个替换,前一天剩余减当天产量为当天剩余,无前天记录去拿单子预期产量
|
|
|
+ public function countRemains($processDaily){
|
|
|
+ if (!$processDaily || !$processDaily->process) return;
|
|
|
+ $processDailies=ProcessDaily::where('process_id',$processDaily->process_id)->orderBy('date')->get();
|
|
|
+ for ($i=0;$i<count($processDailies);$i++){
|
|
|
+ if ($i==0&&$processDailies[$i]->date>=$processDaily->date){
|
|
|
+ $processDailies[$i]->remain=($processDaily->process->amount)-$processDailies[$i]->output;
|
|
|
+ $processDailies[$i]->update();
|
|
|
+ }
|
|
|
+ if ($i>0&&$processDailies[$i]->date>=$processDaily->date){
|
|
|
+ $processDailies[$i]->remain=($processDailies[$i-1]->remain)-$processDailies[$i]->output;
|
|
|
+ $processDailies[$i]->update();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- //计算当日剩余 根据日期
|
|
|
+ //同步二次加工单统计
|
|
|
+ $processDailiesStatistic=$processDailies->where('output'>0);
|
|
|
+ $processStatistic=ProcessStatistic::find($processDaily->process_id);
|
|
|
+ $processStatistic->top_capacity=$processDailiesStatistic->max('output');
|
|
|
+ $processStatistic->bottom_capacity=$processDailiesStatistic->min('output');
|
|
|
+ $processStatistic->average_capactiy=$processDailiesStatistic->avg('output');
|
|
|
+ $processStatistic->update();
|
|
|
+ //修改二次加工单状态
|
|
|
+ $result=[];
|
|
|
+ if (count($processDailies)>0 && ($processDailies[(count($processDailies)-1)]->remain)<=0){
|
|
|
+ $result['process']=$this->changeProcessCheck($processDaily->process_id);
|
|
|
+ }
|
|
|
+ $result['processDailies']=$processDailies;
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+
|
|
|
+ //剩余小于等于0,状态待验收
|
|
|
+ public function changeProcessCheck($process_id){
|
|
|
+ $process=Process::select('id','status')->find($process_id);
|
|
|
+ if ($process->status=="加工中"){
|
|
|
+ $process->ended_at="待验收";
|
|
|
+ $process->update();
|
|
|
+ $processStatistic=ProcessStatistic::find($process_id);
|
|
|
+ $processStatistic->started_at=date('Y-m-d H:i:s');
|
|
|
+ $processStatistic->update();
|
|
|
+ $this->log(__METHOD__,"二次加工单待验收".__FUNCTION__,json_encode($process)." || ".json_encode($processStatistic),Auth::user()['id']);
|
|
|
+ }
|
|
|
+ return $process_id;
|
|
|
+ }
|
|
|
+ /*//计算当日剩余 根据日期
|
|
|
public function countRemain($processDaily){
|
|
|
if (!$processDaily || !$processDaily->process) return;
|
|
|
$processDailies=ProcessDaily::where('process_id',$processDaily->process_id)
|
|
|
@@ -244,7 +347,7 @@ class ProcessController extends Controller
|
|
|
$sum=$sum+($processDaily->output);
|
|
|
}
|
|
|
return ($processDaily->process->amount)-$sum;
|
|
|
- }
|
|
|
+ }*/
|
|
|
//添加参与人
|
|
|
public function shortProcessDailyParticipant(Request $request){
|
|
|
if(!Gate::allows('二次加工管理-登记工时')){ return redirect(url('/')); }
|
|
|
@@ -274,10 +377,23 @@ class ProcessController extends Controller
|
|
|
]);
|
|
|
$processDailyParticipant->save();
|
|
|
$this->log(__METHOD__,"添加新参与人".__FUNCTION__,json_encode($processDailyParticipant),Auth::user()['id']);
|
|
|
- $processDaily=ProcessDaily::select('date')->find($daily_id);
|
|
|
+ $result=[];
|
|
|
+ $processDaily=ProcessDaily::with('process')->select('process_id','date')->find($daily_id);
|
|
|
$date=$processDaily->date;
|
|
|
$processDailyParticipant=$this->countParticipantManHour($processDailyParticipant,$date);
|
|
|
- return ['status'=>"success",'data'=>$processDailyParticipant];
|
|
|
+ if ($processDaily->process && $processDaily->process->status=="待加工"){
|
|
|
+ $process=Process::find($processDaily->process_id);
|
|
|
+ $process->status="加工中";
|
|
|
+ $process->update();
|
|
|
+ $result['process']=$processDaily->process_id;
|
|
|
+ $processStatistic=ProcessStatistic::find($processDaily->process_id);
|
|
|
+ $processStatistic->started_at=date('Y-m-d H:i:s');
|
|
|
+ $processStatistic->update();
|
|
|
+ $this->log(__METHOD__,"二次加工单加工中".__FUNCTION__,json_encode($process)." || ".json_encode($processStatistic),Auth::user()['id']);
|
|
|
+ }
|
|
|
+ $result['status']="success";
|
|
|
+ $result['data']=$processDailyParticipant;
|
|
|
+ return $result;
|
|
|
}
|
|
|
|
|
|
//验证参与人
|
|
|
@@ -311,8 +427,8 @@ class ProcessController extends Controller
|
|
|
if (!$id) return ['status'=>"error",'data'=>"修改失败,ID未传递"];
|
|
|
$errors=$this->validatorProcessDailyParticipant($request)->errors();
|
|
|
if (count($errors)>0)return ['status'=>"error",'data'=>$errors];
|
|
|
- $processDailyParticipant=ProcessDailyParticipant::with('process_daily')->find($id);
|
|
|
- if (!$processDailyParticipant || ! $processDailyParticipant->process_daily) return ['status'=>"error",'data'=>"修改失败,该信息不存在"];
|
|
|
+ $processDailyParticipant=ProcessDailyParticipant::with('processDaily')->find($id);
|
|
|
+ if (!$processDailyParticipant || ! $processDailyParticipant->processDaily) return ['status'=>"error",'data'=>"修改失败,该信息不存在"];
|
|
|
$processDailyParticipant->user_id=$request->input('user_id');
|
|
|
$processDailyParticipant->started_at=$request->input('started_at');
|
|
|
$processDailyParticipant->ended_at=$request->input('ended_at');
|
|
|
@@ -324,7 +440,7 @@ class ProcessController extends Controller
|
|
|
$processDailyParticipant->remark=$request->input('remark');
|
|
|
$processDailyParticipant->update();
|
|
|
$this->log(__METHOD__,"修改参与人".__FUNCTION__,json_encode($processDailyParticipant),Auth::user()['id']);
|
|
|
- $processDailyParticipant=$this->countParticipantManHour($processDailyParticipant,$processDailyParticipant->process_daily->date);
|
|
|
+ $processDailyParticipant=$this->countParticipantManHour($processDailyParticipant,$processDailyParticipant->processDaily->date);
|
|
|
return ['status'=>"success",'data'=>$processDailyParticipant];
|
|
|
}
|
|
|
//参与人审核
|
|
|
@@ -337,13 +453,13 @@ class ProcessController extends Controller
|
|
|
$this->log(__METHOD__,"登记工时参与人审核".__FUNCTION__,json_encode($processDailyParticipant),Auth::user()['id']);
|
|
|
return ['success'=>'true','processDailyParticipant'=>$processDailyParticipant];
|
|
|
}
|
|
|
- //临时工详情
|
|
|
+ /*//临时工详情
|
|
|
public function showUserDetail(Request $request){
|
|
|
$id=$request->input('user_id');
|
|
|
$userDetail=UserDetail::with('user_labor')->find($id);
|
|
|
if (!$userDetail) return ['success'=>'false'];
|
|
|
return ['success'=>'true','userDetail'=>$userDetail];
|
|
|
- }
|
|
|
+ }*/
|
|
|
//获取全部教程
|
|
|
public function getTutorials($id){
|
|
|
$process=Process::with('tutorials')->find($id);
|
|
|
@@ -365,6 +481,7 @@ class ProcessController extends Controller
|
|
|
$tutorial=Tutorial::find($tutorial_id);
|
|
|
if (!$tutorial)return ['success'=>'false','data'=>'未找到相关教程!'];
|
|
|
$tutorial->processes()->syncWithoutDetaching([$process_id]);
|
|
|
+ $this->log(__METHOD__,"添加教程关联".__FUNCTION__,json_encode($process_id),Auth::user()['id']);
|
|
|
return ['success'=>'true','data'=>$tutorial];
|
|
|
}
|
|
|
//删除教程关联
|
|
|
@@ -373,6 +490,7 @@ class ProcessController extends Controller
|
|
|
$tutorial_id=$request->input('tutorial_id');
|
|
|
if (!$process_id || !$tutorial_id) return ['success'=>'false','data'=>'二次加工或教程传递错误!'];
|
|
|
DB::table('process_tutorial')->where('process_id',$process_id)->where('tutorial_id',$tutorial_id)->delete();
|
|
|
+ $this->log(__METHOD__,"删除教程关联".__FUNCTION__,json_encode($process_id),Auth::user()['id']);
|
|
|
return ['success'=>'true'];
|
|
|
}
|
|
|
/**
|
|
|
@@ -382,18 +500,181 @@ class ProcessController extends Controller
|
|
|
*/
|
|
|
public function create()
|
|
|
{
|
|
|
- return view('process/create');
|
|
|
+ $processMethods=ProcessMethod::get();
|
|
|
+ return view('process/create',['processMethods'=>$processMethods]);
|
|
|
+ }
|
|
|
+
|
|
|
+ //货主ID获取教程
|
|
|
+ public function ownerGetTutorials($owner_id){
|
|
|
+ $tutorials=Tutorial::where('owner_id',$owner_id)->get();
|
|
|
+ return $tutorials;
|
|
|
+ }
|
|
|
+
|
|
|
+ //考勤
|
|
|
+ public function createReplenishClock(){
|
|
|
+ return view('process/checking-in/createReplenishClock');
|
|
|
+ }
|
|
|
+ //搜索临时工下打卡信息
|
|
|
+ public function checkUserLabors(Request $request){
|
|
|
+ $full_name=$request->input('full_name');
|
|
|
+ $userDetail=UserDetail::with(['userDutyChecks'=>function ($query){
|
|
|
+ return $query->orderBy('checked_at','DESC')->limit(5);
|
|
|
+ }])->where('full_name',$full_name)->get();
|
|
|
+ return ['success'=>'true','data'=>$userDetail];
|
|
|
+ }
|
|
|
+ //录入补卡
|
|
|
+ public function storeReplenishClock(Request $request){
|
|
|
+ $errors=$this->validatorUserDutyCheck($request)->errors();
|
|
|
+ if (count($errors)>0)return ['success'=>'false','data'=>$errors];
|
|
|
+ $user_id=$request->input('user_id');
|
|
|
+ $checked_at=$request->input('checked_at');
|
|
|
+ $type=$request->input('type');
|
|
|
+ $userDutyCheck=new UserDutyCheck([
|
|
|
+ 'user_id'=>$user_id,
|
|
|
+ 'checked_at'=>$checked_at,
|
|
|
+ 'type'=>$type,
|
|
|
+ 'source'=>'补入',
|
|
|
+ ]);
|
|
|
+ $userDutyCheck->save();
|
|
|
+ $this->log(__METHOD__,"录入补卡".__FUNCTION__,json_encode($userDutyCheck),Auth::user()['id']);
|
|
|
+ return ['success'=>'true','data'=>$userDutyCheck];
|
|
|
+ }
|
|
|
+
|
|
|
+ //去往打卡审核
|
|
|
+ public function clockAudit(){
|
|
|
+ $date=date('Y-m-d');
|
|
|
+ $userDutyChecks=UserDutyCheck::with('userDetail')->where('checked_at','like',$date."%")->get();
|
|
|
+ return view('process/checking-in/clockAudit',['userDutyChecks'=>$userDutyChecks]);
|
|
|
+ }
|
|
|
+ //打卡审核
|
|
|
+ public function storeClockAudit(Request $request){
|
|
|
+ $id=$request->input('id');
|
|
|
+ $type=$request->input('type');
|
|
|
+ $userDutyCheck=UserDutyCheck::find($id);
|
|
|
+ $userDutyCheck->type=$type;
|
|
|
+ $userDutyCheck->verify_user_id=Auth::user()['id'];
|
|
|
+ $userDutyCheck->update();
|
|
|
+ $this->log(__METHOD__,"打卡审核".__FUNCTION__,json_encode($userDutyCheck),Auth::user()['id']);
|
|
|
+ return $userDutyCheck->verify_user_id;
|
|
|
+ }
|
|
|
+ //打卡审核时判断是否异常
|
|
|
+ public function isException(Request $request){
|
|
|
+ $id=$request->input('id');
|
|
|
+ $checked_at=$request->input('checked_at');
|
|
|
+ $type=$request->input('type');
|
|
|
+ $user_id=$request->input('user_id');
|
|
|
+ if (!$id || !$checked_at || !$type || !$user_id)return ['exception'=>'数据异常!','duration_man_hour'=>''];
|
|
|
+ $userDutyCheck=UserDutyCheck::where('user_id',$user_id)->where('checked_at','<',$checked_at)->first();
|
|
|
+ if (!$userDutyCheck)return ['exception'=>'','duration_man_hour'=>''];
|
|
|
+ $dateStart=Carbon::parse($userDutyCheck->checked_at);
|
|
|
+ $dateEnd=Carbon::parse($checked_at);
|
|
|
+ $minute=($dateEnd->diffInMinutes($dateStart));
|
|
|
+ if ($type=="登入"&&$userDutyCheck->type=="登入"&&$minute>30){
|
|
|
+ return ['exception'=>'无出场纪录!','duration_man_hour'=>''];
|
|
|
+ }
|
|
|
+ if ($type=="登出"&&$userDutyCheck->type=="登出"&&$minute>30){
|
|
|
+ return ['exception'=>'无入场纪录!','duration_man_hour'=>''];
|
|
|
+ }
|
|
|
+ if ($type=="登出"&&$userDutyCheck->type=="登入"&&$minute>=720){
|
|
|
+ return ['exception'=>'时间异常!','duration_man_hour'=>''];
|
|
|
+ }
|
|
|
+ if ($type=="登出"&&$userDutyCheck->type=="登入"){
|
|
|
+ return ['exception'=>'','duration_man_hour'=>$minute/60];
|
|
|
+ }
|
|
|
+ return ['exception'=>'','duration_man_hour'=>''];
|
|
|
+ }
|
|
|
+
|
|
|
+ //去往任务审核
|
|
|
+ public function missionAudit(Request $request){
|
|
|
+ $processDailyParticipants=ProcessDailyParticipant::with(['processDaily','user_detail'])
|
|
|
+ ->orderBy('id','DESC');
|
|
|
+ $start_date=$request->input('start_date');
|
|
|
+ $end_date=$request->input('end_date');
|
|
|
+ $full_name=$request->input('full_name');
|
|
|
+ $mobile_phone=$request->input('mobile_phone');
|
|
|
+ if ($start_date) {
|
|
|
+ $processDailyParticipants->whereHas('processDaily',function (Builder $builder)use($start_date){
|
|
|
+ $builder->where('date','>=',$start_date);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if ($end_date) {
|
|
|
+ $processDailyParticipants->whereHas('processDaily',function (Builder $builder)use($end_date){
|
|
|
+ $builder->where('date','<=',$end_date);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if ($full_name){
|
|
|
+ $processDailyParticipants->whereHas('user_detail',function (Builder $builder)use($full_name){
|
|
|
+ $builder->where('full_name',$full_name);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if ($mobile_phone){
|
|
|
+ $processDailyParticipants->whereHas('user_detail',function (Builder $builder)use($mobile_phone){
|
|
|
+ $builder->where('mobile_phone',$mobile_phone);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ $processDailyParticipants=$processDailyParticipants->paginate($request->input('paginate')?$request->input('paginate'):50);
|
|
|
+ foreach ($processDailyParticipants as $processDailyParticipant){
|
|
|
+ if ($processDailyParticipant->processDaily){
|
|
|
+ $processDailyParticipant=$this->countParticipantManHour($processDailyParticipant,$processDailyParticipant->processDaily->date);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return view('process/checking-in/missionAudit',['processDailyParticipants'=>$processDailyParticipants,'request'=>$request->input()]);
|
|
|
+ }
|
|
|
+
|
|
|
+ //任务审核
|
|
|
+ public function storeMissionAudit(Request $request){
|
|
|
+ $id=$request->input('id');
|
|
|
+ if (!$id)return ['error'=>'提交审核失败!'];
|
|
|
+ $processDailyParticipant=ProcessDailyParticipant::find($id);
|
|
|
+ if (!$id)return ['error'=>'未找到对应记录!'];
|
|
|
+ $processDailyParticipant->status='已审核';
|
|
|
+ $processDailyParticipant->update();
|
|
|
+ $this->log(__METHOD__,"任务审核".__FUNCTION__,json_encode($processDailyParticipant),Auth::user()['id']);
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * Store a newly created resource in storage.
|
|
|
- *
|
|
|
- * @param \Illuminate\Http\Request $request
|
|
|
- * @return \Illuminate\Http\Response
|
|
|
- */
|
|
|
public function store(Request $request)
|
|
|
{
|
|
|
- //
|
|
|
+ if(!Gate::allows('二次加工管理-录入')){ return redirect(url('/')); }
|
|
|
+ $errors=$this->validatorProcess($request)->errors();
|
|
|
+ if (count($errors)>0)return ['error'=>$errors,'data'=>"process"];
|
|
|
+ $errors=[];
|
|
|
+ foreach ($request->input('processContents') as $processContent){
|
|
|
+ if ($processContent['addBtnShow'])continue;
|
|
|
+ $error=$this->validatorProcessContent($processContent)->errors();
|
|
|
+ if (count($error)>0)$errors[$processContent['wms_code']]=$error;
|
|
|
+ }
|
|
|
+ if (count($errors)>0)return ['error'=>$errors];
|
|
|
+ $process=new Process([
|
|
|
+ 'code'=>Uuid::uuid1(),
|
|
|
+ 'owner_id'=>$request->input('owner_id'),
|
|
|
+ 'process_method_id'=>$request->input('process_method_id'),
|
|
|
+ 'unit_price'=>$request->input('unit_price'),
|
|
|
+ 'remark'=>$request->input('remark'),
|
|
|
+ 'amount'=>$request->input('amount'),
|
|
|
+ ]);
|
|
|
+ $process->save();
|
|
|
+ $process->code='P'.date ("Ymd").str_pad($process->id,3,"0");
|
|
|
+ $process->update();
|
|
|
+ $processStatistic=new ProcessStatistic([
|
|
|
+ 'process_id'=>$process->id,
|
|
|
+ ]);
|
|
|
+ $processStatistic->save();
|
|
|
+ $this->log(__METHOD__,"录入二次加工单".__FUNCTION__,json_encode($process)." || ".json_encode($processStatistic),Auth::user()['id']);
|
|
|
+ foreach ($request->input('processContents') as $processContent){
|
|
|
+ if ($processContent['addBtnShow'])continue;
|
|
|
+ $processContentOne=new ProcessesContent([
|
|
|
+ 'process_id'=>$process->id,
|
|
|
+ 'bill_type'=>$processContent['bill_type'],
|
|
|
+ 'commodity_id'=>$processContent['commodity_id'],
|
|
|
+ 'wms_code'=>$processContent['wms_code'],
|
|
|
+ 'amount'=>$processContent['amount'],
|
|
|
+ ]);
|
|
|
+ $processContentOne->save();
|
|
|
+ $this->log(__METHOD__,"录入二次加工单内容单".__FUNCTION__,json_encode($processContentOne),Auth::user()['id']);
|
|
|
+ }
|
|
|
+ if ($request->input('tutorials'))$process->tutorials()->sync($request->input('tutorials'));
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -448,41 +729,104 @@ class ProcessController extends Controller
|
|
|
'id'=>'ID',
|
|
|
'code'=>'任务号',
|
|
|
'owner_name'=>'货主',
|
|
|
- 'bill_type'=>'单据类型',
|
|
|
- 'wms_code'=>'单据号',
|
|
|
'process_method_name'=>'加工类型',
|
|
|
'amount'=>'预期数量',
|
|
|
+ 'completed_amount'=>'实际数量',
|
|
|
+ 'status'=>'状态',
|
|
|
'unit_price'=>'单价',
|
|
|
'created_at'=>'提交日期',
|
|
|
+ 'bill_type'=>'单据类型',
|
|
|
+ 'wms_code'=>'单据号',
|
|
|
'commodity_barcode'=>'商品编码',
|
|
|
'commodity_name'=>'商品名称',
|
|
|
- 'completed_amount'=>'实际数量',
|
|
|
- 'status'=>'状态',
|
|
|
+ 'thisAmount'=>'本次数量',
|
|
|
]];
|
|
|
$list=[];
|
|
|
$i=0;
|
|
|
foreach ($processes as $process){
|
|
|
- $w=[
|
|
|
- 'id'=>$process->id,
|
|
|
- 'code'=>$process->code ,
|
|
|
- 'owner_name'=>$process->owner_name ,
|
|
|
- 'bill_type'=>$process->bill_type ,
|
|
|
- 'wms_code'=>$process->wms_code ,
|
|
|
- 'process_method_name'=>$process->process_method_name,
|
|
|
- 'amount'=>$process->amount,
|
|
|
- 'unit_price'=>$process->unit_price,
|
|
|
- 'created_at'=>$process->created_at ,
|
|
|
- 'commodity_barcode'=>$process->commodity_barcode,
|
|
|
- 'commodity_name'=>$process->commodity_name ,
|
|
|
- 'completed_amount'=>$process->completed_amount,
|
|
|
- 'status'=>$process->status,
|
|
|
- ];
|
|
|
- $list[$i]=$w;
|
|
|
- $i++;
|
|
|
+ if (!$process->processesContents){
|
|
|
+ $w=[
|
|
|
+ 'id'=>$process->id,
|
|
|
+ 'code'=>$process->code ,
|
|
|
+ 'owner_name'=>$process->owner_name ,
|
|
|
+ 'process_method_name'=>$process->process_method_name,
|
|
|
+ 'amount'=>$process->amount,
|
|
|
+ 'unit_price'=>$process->unit_price,
|
|
|
+ 'created_at'=>$process->created_at ,
|
|
|
+ 'completed_amount'=>$process->completed_amount,
|
|
|
+ 'status'=>$process->status,
|
|
|
+ ];
|
|
|
+ $list[$i]=$w;
|
|
|
+ $i++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ foreach($process->processesContents as $processesContent){
|
|
|
+ $w=[
|
|
|
+ 'id'=>$process->id,
|
|
|
+ 'code'=>$process->code ,
|
|
|
+ 'owner_name'=>$process->owner_name ,
|
|
|
+ 'bill_type'=>$processesContent->bill_type ,
|
|
|
+ 'wms_code'=>$processesContent->wms_code ,
|
|
|
+ 'process_method_name'=>$process->process_method_name,
|
|
|
+ 'amount'=>$process->amount,
|
|
|
+ 'thisAmount'=>$processesContent->amount,
|
|
|
+ 'unit_price'=>$process->unit_price,
|
|
|
+ 'created_at'=>$process->created_at ,
|
|
|
+ 'commodity_barcode'=>$processesContent->commodity_barcode ,
|
|
|
+ 'commodity_name'=>$processesContent->commodity_name ,
|
|
|
+ 'completed_amount'=>$process->completed_amount,
|
|
|
+ 'status'=>$process->status,
|
|
|
+ ];
|
|
|
+ $list[$i]=$w;
|
|
|
+ $i++;
|
|
|
+ }
|
|
|
}
|
|
|
return Excel::download(new WaybillExport($row,$list),date('YmdHis', time()).'-二次加工单.xls');
|
|
|
}
|
|
|
|
|
|
+ public function validatorProcessContent(array $processContent){
|
|
|
+ $validator=Validator::make($processContent,[
|
|
|
+ 'wms_code'=>['required'],
|
|
|
+ 'owner_id'=>['required','integer'],
|
|
|
+ 'commodity_id'=>['required','integer'],
|
|
|
+ 'bill_type'=>['required'],
|
|
|
+ 'amount'=>['required','min:0','max:999999','integer']
|
|
|
+ ],[
|
|
|
+ 'required'=>':attribute 不应为空',
|
|
|
+ 'min'=>':attribute 不得为0或为负',
|
|
|
+ 'integer'=>':attribute 必须为整数',
|
|
|
+ 'max'=>':attribute 输入值过大',
|
|
|
+ ],[
|
|
|
+ 'owner_id'=>'货主',
|
|
|
+ 'wms_code'=>'单据号',
|
|
|
+ 'commodity_id'=>'商品',
|
|
|
+ 'bill_type'=>'单据类型',
|
|
|
+ 'amount'=>'商品数量',
|
|
|
+ ]);
|
|
|
+ return $validator;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function validatorProcess(Request $request){
|
|
|
+ $validator=Validator::make($request->input(),[
|
|
|
+ 'owner_id'=>['required'],
|
|
|
+ 'process_method_id'=>['required','integer'],
|
|
|
+ 'amount'=>['required','integer'],
|
|
|
+ 'unit_price'=>['required','min:0','max:999999','numeric'],
|
|
|
+ ],[
|
|
|
+ 'required'=>':attribute 不应为空',
|
|
|
+ 'min'=>':attribute 不得为0或为负',
|
|
|
+ 'numeric'=>':attribute 必须为数字',
|
|
|
+ 'max'=>':attribute 输入值过大',
|
|
|
+ 'integer' =>':attribute 必须为整数',
|
|
|
+ ],[
|
|
|
+ 'owner_id'=>'货主',
|
|
|
+ 'process_method_id'=>'加工类型',
|
|
|
+ 'amount'=>'数量',
|
|
|
+ 'unit_price'=>'单价',
|
|
|
+ ]);
|
|
|
+ return $validator;
|
|
|
+ }
|
|
|
+
|
|
|
public function validator(Request $request){
|
|
|
$validator=Validator::make($request->input(),[
|
|
|
'id'=>['required','integer'],
|
|
|
@@ -498,6 +842,17 @@ class ProcessController extends Controller
|
|
|
return $validator;
|
|
|
}
|
|
|
|
|
|
+ public function validatorUserDutyCheck(Request $request){
|
|
|
+ $validator=Validator::make($request->input(),[
|
|
|
+ 'user_id'=>'required',
|
|
|
+ 'checked_at'=>'required|date_format:Y-m-d H:i',
|
|
|
+ 'type'=>'required',
|
|
|
+ ],[
|
|
|
+ 'date_format'=>':attribute 格式错误',
|
|
|
+ ],['checked_at'=>'日期']);
|
|
|
+ return $validator;
|
|
|
+ }
|
|
|
+
|
|
|
//参与人信息校验
|
|
|
public function validatorProcessDailyParticipant(Request $request){
|
|
|
$validator=Validator::make($request->input(),[
|