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

142 lines
7.7KB

  1. <?php
  2. namespace App\Repositories\Custom\HelloTechno;
  3. use App\Models\ReceiptIssuingHTParkingCustomOrder as CustomOrder;
  4. use App\Models\ReceiptIssuingOrder;
  5. use App\Models\User;
  6. use App\Repositories\BaseRepository;
  7. use Illuminate\Database\Query\JoinClause;
  8. use Illuminate\Support\Collection;
  9. use Illuminate\Support\Facades\DB;
  10. class ReceiptIssuingOrderRepository extends BaseRepository
  11. {
  12. const CONDITION_ID = 'id';
  13. const CONDITION_CUSTOMER_CODE = 'customer_code';
  14. const CONDITION_PARKING_MANAGEMENT_CODE = 'parking_management_code';
  15. const CONDITION_CUSTOMER_NAME = 'customer_name';
  16. const CONDITION_PARKING_MANAGEMENT_NAME = 'parking_name';
  17. const TABLE_ORDER = "order";
  18. const TABLE_CUSTOM_ORDER = "custom_order";
  19. const TABLE_HANDLER = "handler";
  20. /**
  21. * コレクションを取得する
  22. *
  23. * @param array $condition
  24. * @return Collection<ParkingRepositoryData>
  25. */
  26. public function get(array $condition): Collection
  27. {
  28. $order = ReceiptIssuingOrder::getBuilder(static::TABLE_ORDER);
  29. $table = $order
  30. ->joinSub(CustomOrder::getBuilder(), static::TABLE_CUSTOM_ORDER, function (JoinClause $join) {
  31. $join->on(
  32. $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ID]),
  33. $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_RECEIPT_ISSUING_ORDER_ID])
  34. );
  35. })
  36. ->leftJoinSub(User::getBuilder(), static::TABLE_HANDLER, function (JoinClause $join) {
  37. $join->on(
  38. $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_HANDLER_ID]),
  39. $this->makeColumnName([static::TABLE_HANDLER, CustomOrder::COL_NAME_ID])
  40. );
  41. });
  42. // -----検索条件
  43. // ID
  44. $this->where($table, $condition, static::CONDITION_ID, $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ID]));
  45. // 運営会社
  46. $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_CODE]));
  47. $customerName = data_get($condition, static::CONDITION_CUSTOMER_NAME);
  48. if ($customerName) {
  49. $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_NAME]), 'like', "%{$customerName}%");
  50. }
  51. // 駐車場
  52. $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE]));
  53. $parkihngName = data_get($condition, static::CONDITION_PARKING_MANAGEMENT_NAME);
  54. if ($parkihngName) {
  55. $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_NAME]), 'like', "%{$parkihngName}%");
  56. }
  57. $table->select($this->columns());
  58. $main = DB::table($table, "main");
  59. // ソート
  60. $this->sort($main, $condition);
  61. $main->orderBy(static::CONDITION_ID);
  62. // リミット
  63. $this->limit($main, $condition);
  64. return ReceiptIssuingOrderRepositoryData::makeList($main->get());
  65. }
  66. private function columns()
  67. {
  68. $order = static::TABLE_ORDER;
  69. $custom = static::TABLE_CUSTOM_ORDER;
  70. $handler = static::TABLE_HANDLER;
  71. $columns = [
  72. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ID], 'id'),
  73. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_NAME], 'status_name'),
  74. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME], 'order_datetime'),
  75. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SUMMARY_KEY1]),
  76. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SUMMARY_KEY2]),
  77. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ACCESS_TOKEN]),
  78. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ACCESS_TOKEN_EXPIRES_AT]),
  79. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_DONE]),
  80. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_SMS_SEND_DATETIME]),
  81. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_FIRST_ACCESS_DATETIME]),
  82. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME]),
  83. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_ORDER_MAIL_DATETIME]),
  84. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_MAIL_DOWNLOAD_DATETIME]),
  85. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_MAIL_POST_DATE]),
  86. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_DOWNLOAD_DATETIME]),
  87. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_EMAIL_SEND_ORDER_DATETIME]),
  88. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_EMAIL_SEND_DATETIME]),
  89. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SMS_PHONE_NUMBER]),
  90. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SMS_SEND_SUCCESS]),
  91. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_NO]),
  92. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_USE_DATE]),
  93. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_SHOP_NAME]),
  94. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_ISSUER]),
  95. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_NAME]),
  96. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_PURPOSE]),
  97. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_INVOICE_NO]),
  98. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_AMOUNT]),
  99. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_EMAIL]),
  100. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_PREF_CODE]),
  101. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ZIP_CODE]),
  102. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ADDRESS1]),
  103. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ADDRESS2]),
  104. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ADDRESS3]),
  105. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_NAME]),
  106. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MEMO]),
  107. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_UPDATED_AT]),
  108. $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_CUSTOMER_CODE], 'customer_code'),
  109. $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE], 'parking_management_code'),
  110. $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_CUSTOMER_NAME], 'customer_name'),
  111. $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_PARKING_NAME], 'parking_name'),
  112. $this->makeColumnNameForSelect([$handler, User::COL_NAME_ID], 'handler_id'),
  113. $this->makeColumnNameForSelect([$handler, User::COL_NAME_NAME], 'handler_name'),
  114. ];
  115. return $columns;
  116. }
  117. }