ReceivingTaskController.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\DeliveryAppointmentCar;
  4. use App\Filters\ReceivingTaskFilters;
  5. use App\Http\Requests\Api\ReceivingTaskRequest;
  6. use App\ReceivingTask;
  7. use App\Services\OwnerService;
  8. use App\Services\ReceivingTaskService;
  9. use App\Warehouse;
  10. use Illuminate\Support\Facades\Gate;
  11. use Illuminate\Support\Facades\Request;
  12. class ReceivingTaskController extends Controller
  13. {
  14. /**
  15. * @var ReceivingTaskService $service
  16. * @var OwnerService $ownerService
  17. */
  18. private $service;
  19. private $ownerService;
  20. public function __construct()
  21. {
  22. $this->service = app(ReceivingTaskService::class);
  23. $this->ownerService = app(OwnerService::class);
  24. }
  25. public function index(Request $request,ReceivingTaskFilters $filter)
  26. {
  27. if (Gate::denies('入库管理-开单入库-查询')) {
  28. return redirect('/');
  29. }
  30. $receivingTasks = ReceivingTask::query()->with(['items','owner','wareHouse','file','deliveryAppointmentCar'])->filter($filter)->orderByDesc('created_at')->paginate(50);
  31. $owners = $this->ownerService->getQuery()->select('id','name')->get();
  32. $warehouses = Warehouse::query()->get();
  33. return view("store.receivingTasks.index",compact('receivingTasks','owners','warehouses'));
  34. }
  35. public function create()
  36. {
  37. if (Gate::denies('入库管理-开单入库-创建')) {
  38. return redirect('/');
  39. }
  40. $wareHouse = Warehouse::query()->get();
  41. $owners = $this->ownerService->getQuery()->select("id","code","name")->get();
  42. return view("store.receivingTasks.create",compact('wareHouse','owners'));
  43. }
  44. public function storeApi(ReceivingTaskRequest $request): array
  45. {
  46. if(Gate::denies('入库管理-开单入库-创建')){
  47. return ['success' => false,'message' => '没有对应权限'];
  48. }
  49. $appointment_number = $request->input('appointment_number',null);
  50. $delivery_appointment_car = DeliveryAppointmentCar::query()->with('deliveryAppointment')->where('appointment_number',$appointment_number)->first();
  51. if (!$delivery_appointment_car){
  52. return ['success' => false,'errors' =>['appointment_number' => ['对应预约号未找到']]];
  53. }
  54. if (!$delivery_appointment_car->deliveryAppointment){
  55. return ['success' => false,'errors' =>['appointment_number' => ['对应预约号未找到']]];
  56. }
  57. if ($delivery_appointment_car->deliveryAppointment->owner_id != $request->input('owner_id')){
  58. return ['success' => false,'errors' =>['appointment_number' => ['预约号与货主未对应']]];
  59. }
  60. if (ReceivingTask::query()->where('delivery_appointment_car_id',$delivery_appointment_car->id)->exists()){
  61. return ['success' => false, 'errors' =>['appointment_number' => ['预约号已有对应的任务']]];
  62. }
  63. try {
  64. $receiving_task = $this->service->createReceivingTask($delivery_appointment_car, $request->all());
  65. if (!$receiving_task->id) return ['success' => false, 'message' => '生成入库单任务失败,请重新尝试'];
  66. $receiving_task->loadMissing(['wareHouse','owner','deliveryAppointmentCar']);
  67. return ['success' => true, 'data' => $receiving_task];
  68. } catch (\Exception $e) {
  69. return ['success' => false, 'message' => '生成入库单任务失败,请重新尝试'];
  70. }
  71. }
  72. }