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

93 lines
3.0KB

  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($param->customerCode, $param->parkingManagementCode))
  47. ->where('parking_management_code', $param->parkingManagementCode)
  48. ->firstOrFail();
  49. $orderData = [
  50. ...$param->toArray(),
  51. HT::COL_NAME_CUSTOMER_NAME => $customer['name'],
  52. HT::COL_NAME_PARKING_NAME => $parking['name'],
  53. Order::COL_NAME_HANDLER_ID => Auth::id(),
  54. Order::COL_NAME_SUMMARY_KEY1 => $param->customerCode,
  55. Order::COL_NAME_SUMMARY_KEY2 => $param->parkingManagementCode,
  56. Order::COL_NAME_RECEIPT_PURPOSE => "駐車領収証",
  57. Order::COL_NAME_RECEIPT_INVOICE_NO => $customer['invoice_no'],
  58. Order::COL_NAME_RECEIPT_ISSUER => $customer['name'],
  59. Order::COL_NAME_RECEIPT_SHOP_NAME => $parking['name'],
  60. Order::COL_NAME_MEMO => $param->memo,
  61. ];
  62. $messages = $this->manager->init()
  63. ->fill($orderData)
  64. ->setTax(TaxRate::DEFAULT->value, $param->taxAmount)
  65. ->create();
  66. if (count($messages) !== 0) {
  67. return $this->failedResponse([], $messages);
  68. }
  69. $this->transaction->commit();
  70. } catch (Exception $e) {
  71. $this->transaction->rollBack();
  72. throw $e;
  73. }
  74. return $this->successResponse();
  75. }
  76. }