input('status');//0:待报价,2:待接单 $procurements=Procurement::query() ->withCount('procurementQuotations') ->with('ownerMaterial.material') ->where('status',$status) ->whereNull('supplier_id') ->get(); $keys = []; foreach ($procurements as $key=>$procurement){ if ($procurement->procurement_quotations_count>0 && $status==0 )$keys[]= $key; if($status==0)$procurement->deadline=Carbon::parse($procurement->deadline)->diffInMilliseconds(Carbon::now()); //待报价倒计时4小时 if($status==2)$procurement->deadline=Carbon::parse($procurement->deadline)->subHours(-24)->diffInMilliseconds(Carbon::now()); //待接单倒计时24小时 } $procurements = $procurements->diffKeys($keys); if (!empty($procurements))return response()->json(['status'=>1,'data'=>$procurements], 200); } public function getQuotationDetailById(Request $request) { $id=$request->input('id'); $procurement=Procurement::query() ->with(['ownerMaterial.material','ownerMaterial.owner']) ->find($id); $procurement->deadline=Carbon::parse($procurement->deadline)->diffInMilliseconds(Carbon::now()); if ($procurement) return response()->json(['status'=>1,'data'=>$procurement], 200); } //报价 public function setOffer(Request $request) { $param=$request->all(['id','offer']); $user= Auth::user(); $procurement=Procurement::query()->with('ownerMaterial.material')->find($param['id']); $material=$procurement->ownerMaterial->material; /** @var ProcurementService $procurementService*/ $procurementService=app(ProcurementService::class); $supplier=$procurementService->screenSupplier($user,$material); $procurementQuotation=ProcurementQuotation::query()->create([ 'procurement_id'=>$param['id'], 'offer'=>$param['offer'], 'operator'=>$user->id, 'supplier_id'=>$supplier->id, 'quoted_at'=>Carbon::now()->toDateTimeString(), 'status'=>1,//2:已报价 ]); $procurement->update(['status'=>1]);//1:已报价 if ($procurementQuotation) return response()->json(['status'=>1,'data'=>$procurementQuotation], 200); } //接单 public function accept(Request $request) { $id=$request->input('id'); $user= Auth::user(); $procurement=Procurement::query()->with('ownerMaterial.material')->find($id); if ($procurement->type==2){ $material=$procurement->ownerMaterial->material; /** @var ProcurementService $procurementService*/ $procurementService=app(ProcurementService::class); $supplier=$procurementService->screenSupplier($user,$material); $procurement->update(['status'=>4,'supplier_id'=>$supplier->id]);//4:生产中 }else{ $procurement->update(['status'=>4]);//4:生产中 } if ($procurement) return response()->json(['status'=>1,'data'=>$procurement], 200); } //生产中的订单 public function getProductionProcurement() { $procurements=Procurement::query() ->with('ownerMaterial.material') ->whereIn('type',[0,2]) ->where('status',4) //4:生产中 ->get(); if ($procurements) return response()->json(['status'=>1,'data'=>$procurements], 200); } //结束生产 public function finishProductionProcurement(Request $request) { $id=$request->input('id'); $procurement=Procurement::query()->find($id)->update(['status'=>5]); if ($procurement) return response()->json(['status'=>1,'data'=>$procurement], 200); } public function getProcurementDeliveries() { $procurementDeliveries=ProcurementDeliverie::query() ->with('procurement.ownerMaterial.material') ->whereIn('status',[0,1])//1:待送货,2:送货中 ->get(); if ($procurementDeliveries) return response()->json(['status'=>1,'data'=>$procurementDeliveries], 200); } public function makeProcurementDelivery(Request $request) { $param=$request->all(['id','deliverAmount']); $procurement=Procurement::query() ->with('procurementDeliveries') ->find($param['id']); $deliveryAmount=$param['deliverAmount']; if (!empty($procurement->procurementDeliveries)){ foreach ($procurement->procurementDeliveries as $delivery){ if (!$delivery->amount)continue; $deliveryAmount=$deliveryAmount+$delivery->amount; } } if ((int)$deliveryAmount>(int)$procurement->quantity) return response()->json(['status'=>0,'message' => '当前送货数量叠加已送货数量大于采购数量','data'=>$deliveryAmount], 401); /** @var $apiUserService UserService */ $apiUserService=app(UserService::class); $user= $apiUserService->getUser($request->header('token')); //生成送货单 $procurementDelivery=new ProcurementDeliverie(); $procurementDelivery['procurement_id']=$param['id']; $procurementDelivery['amount']=$param['deliverAmount']; $procurementDelivery['initiator']=$user->data->id; $procurementDelivery['signer']=$procurement->initiator ?? 0; $procurementDelivery['created_at']=Carbon::now()->toDateTimeString(); $procurementDelivery['updated_at']=Carbon::now()->toDateTimeString(); $procurementDelivery->save(); $procurementDelivery->loadMissing( 'procurement.ownerMaterial.material'); //当前采购单不是打样单生成对账单 if ($procurement->type!=2)ProcurementCheckSheet::query()->create(['procurement_delivery_id'=>$procurementDelivery->id,'account_payable'=>$procurementDelivery->receipt_amount*$procurement->cost_price,'auditor'=>0]); if ($procurementDelivery) return response()->json(['status'=>1,'data'=>$procurementDelivery], 200); } public function getProcurementDeliveryById(Request $request) { $procurementDelivery=ProcurementDeliverie::query() ->with(['procurement.ownerMaterial.material','receiver.userDetail','procurement.ownerMaterial.owner.customer','procurement.supplier',]) ->find($request->input('id')); if ($procurementDelivery) return response()->json(['status'=>1,'data'=>$procurementDelivery], 200); } public function updateProcurementDeliveryAmount(Request $request) { $param=$request->all(['id','delivernum']); $procurementDelivery=ProcurementDeliverie::query()->where('id',$param['id'])->update(['amount'=>$param['delivernum']]); if ($procurementDelivery)return response()->json(['status'=>1,'data'=>$procurementDelivery], 200); } public function getProcurementTotalBill() { $procurementTotalBills=ProcurementTotalBill::query() ->get(); foreach ($procurementTotalBills as $procurementTotalBill){ /** @var ProcurementTotalBill $procurementTotalBill */ $procurementTotalBill->setCurrentMothProcurements(); } if ($procurementTotalBills) return response()->json(['status'=>1,'data'=>$procurementTotalBills], 200); } public function markProcurementTotalBillStatus(Request $request)//供应商提交对账单 { $id=$request->input('id'); $procurementTotalBill=ProcurementTotalBill::query()->find($id)->update(['status'=>1]);//1:已出账 return response()->json(['status'=>1,'data'=>$procurementTotalBill], 200); } //收货员确认收货 public function makeReceipt(Request $request) { $param=$request->all(['id','delivernum']); $procurementDelivery=ProcurementDeliverie::query()->with('procurement')->find($param['id']); $procurementDelivery ->update(['status'=>1,'receipt_amount'=>$param['delivernum'],'created_at'=>Carbon::now()->toDateTimeString(),'signed_at'=>Carbon::now()->toDateString()]); $procurementDelivery->procurement->update(['status'=>6]); if ($procurementDelivery) return response()->json(['status'=>1,'data'=>$procurementDelivery], 200); } public function supplierDeliverConfirm(Request $request) { $procurementDelivery=ProcurementDeliverie::query() ->with(['procurement','procurementCheckSheet'])->find($request->input('id')); $procurementDelivery->update(['status'=>2]);//2:送货完成 $procurementCheckSheet=$procurementDelivery->procurementCheckSheet; if ($procurementDelivery->procurement && $procurementDelivery->procurement->type!=2 && $procurementCheckSheet) $procurementCheckSheet->update(['status'=>1,'account_payable'=>($procurementDelivery->receipt_amount*$procurementDelivery->procurement->cost_price)]); $procurementDelivery->procurement->update(['status'=>7]);//待出账 if ($procurementDelivery) return response()->json(['status'=>1,'data'=>$procurementDelivery], 200); } }