|
|
@@ -3,21 +3,193 @@
|
|
|
namespace App\Http\Controllers\api\procurement\wechat;
|
|
|
|
|
|
use App\Http\Controllers\Controller;
|
|
|
+use App\Procurement;
|
|
|
+use App\ProcurementCheckSheet;
|
|
|
+use App\ProcurementDeliverie;
|
|
|
use App\ProcurementQuotation;
|
|
|
+use App\ProcurementTotalBill;
|
|
|
+use App\Services\api\UserService;
|
|
|
+use App\Services\ProcurementService;
|
|
|
use Carbon\Carbon;
|
|
|
+use Illuminate\Http\Request;
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
|
|
class ProcurementController extends Controller
|
|
|
{
|
|
|
- public function getQuotation(){
|
|
|
- $now=Carbon::now()->toDateTimeString();
|
|
|
- $procurementQuotations=ProcurementQuotation::query()
|
|
|
+
|
|
|
+ public function getWaitQuotation(Request $request)
|
|
|
+ {
|
|
|
+ $status=$request->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')
|
|
|
- ->where('status',0)
|
|
|
- ->whereNull('offer')
|
|
|
- //->where('created_at','>=',Carbon::parse($now)->subHours(4))
|
|
|
- //->where('created_at','<=',$now)
|
|
|
+ ->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();
|
|
|
- if (!empty($procurementQuotations))return response()->json(['status'=>1,'data'=>$procurementQuotations->toJson()], 200);
|
|
|
+ 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);
|
|
|
}
|
|
|
}
|