領収証発行サービス
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
2.9KB

  1. <?php
  2. namespace App\Http\Controllers\Web\Custom\HelloTechno;
  3. use App\Codes\UserRole;
  4. use App\Http\Controllers\Web\IParam;
  5. use App\Http\Controllers\Web\WebController;
  6. use App\Logic\ReceiptIssuingOrder\Custom\HelloTechno\CreateManager;
  7. use App\Models\ReceiptIssuingOrder as Order;
  8. use App\Models\ReceiptIssuingHTParkingCustomOrder as HT;
  9. use App\Util\Custom\HelloTechno\API;
  10. use Exception;
  11. use Illuminate\Http\JsonResponse;
  12. use Illuminate\Http\Request;
  13. use Illuminate\Support\Facades\Auth;
  14. class CreateReceiptIssuingOrderController extends HelloTechnoController
  15. {
  16. public function name(): string
  17. {
  18. return "[HelloTechno専用]領収証発行依頼作成";
  19. }
  20. public function description(): string
  21. {
  22. return "[HelloTechno専用]領収証発行依頼を作成する";
  23. }
  24. public function __construct(
  25. protected CreateReceiptIssuingOrderParam $param,
  26. private CreateManager $manager
  27. ) {
  28. parent::__construct();
  29. $this->roleAllow(UserRole::NORMAL_ADMIN);
  30. }
  31. protected function getParam(): IParam
  32. {
  33. return $this->param;
  34. }
  35. protected function run(Request $request): JsonResponse
  36. {
  37. $param = $this->param;
  38. try {
  39. $this->transaction->beginTransaction();
  40. // 顧客情報取得
  41. $customer = collect(API::getCustomers($param->customerCode))
  42. ->where('customer_code', $param->customerCode)
  43. ->firstOrFail();
  44. // 駐車場情報取得
  45. $parking = collect(API::getParkings($param->customerCode, $param->parkingManagementCode))
  46. ->where('parking_management_code', $param->parkingManagementCode)
  47. ->firstOrFail();
  48. $orderData = [
  49. ...$param->toArray(),
  50. HT::COL_NAME_CUSTOMER_NAME => $customer['name'],
  51. HT::COL_NAME_PARKING_NAME => $parking['name'],
  52. Order::COL_NAME_HANDLER_ID => Auth::id(),
  53. Order::COL_NAME_SUMMARY_KEY1 => $param->customerCode,
  54. Order::COL_NAME_SUMMARY_KEY2 => $param->parkingManagementCode,
  55. Order::COL_NAME_RECEIPT_PURPOSE => "駐車領収証",
  56. Order::COL_NAME_RECEIPT_INVOICE_NO => $customer['invoice_no'],
  57. Order::COL_NAME_RECEIPT_ISSUER => $customer['name'],
  58. Order::COL_NAME_RECEIPT_SHOP_NAME => $parking['name'],
  59. Order::COL_NAME_MEMO => $param->memo,
  60. ];
  61. $messages = $this->manager->init()
  62. ->fill($orderData)
  63. ->create();
  64. if (count($messages) !== 0) {
  65. return $this->failedResponse([], $messages);
  66. }
  67. $this->transaction->commit();
  68. } catch (Exception $e) {
  69. $this->transaction->rollBack();
  70. throw $e;
  71. }
  72. return $this->successResponse();
  73. }
  74. }