領収証発行サービス
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.

96 lines
3.1KB

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