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

198 lines
10.0KB

  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\Carbon;
  9. use Illuminate\Support\Collection;
  10. use Illuminate\Support\Facades\DB;
  11. class ReceiptIssuingOrderRepository extends BaseRepository
  12. {
  13. const CONDITION_ID = 'id';
  14. const CONDITION_CONTRACT_ID = 'contract_id';
  15. const CONDITION_CUSTOMER_CODE = 'customer_code';
  16. const CONDITION_PARKING_MANAGEMENT_CODE = 'parking_management_code';
  17. const CONDITION_CUSTOMER_NAME = 'customer_name';
  18. const CONDITION_PARKING_NAME = 'parking_name';
  19. const CONDITION_ADJSUT_SEQ_NO = 'adjust_seq_no';
  20. const CONDITION_DONE = 'done';
  21. const CONDITION_STATUS = 'status';
  22. const CONDITION_SMS_PHONE_NUMBER = 'sms_phone_number';
  23. const CONDITION_HANDLER_NAME = 'handler_name';
  24. const CONDITION_ORDER_DATE_FROM = 'order_date_from';
  25. const CONDITION_ORDER_DATE_TO = 'order_date_to';
  26. const TABLE_ORDER = "order";
  27. const TABLE_CUSTOM_ORDER = "custom_order";
  28. const TABLE_HANDLER = "handler";
  29. /**
  30. * コレクションを取得する
  31. *
  32. * @param array $condition
  33. * @return Collection<ParkingRepositoryData>
  34. */
  35. public function get(array $condition): Collection
  36. {
  37. $order = ReceiptIssuingOrder::getBuilder(static::TABLE_ORDER);
  38. $table = $order
  39. ->joinSub(CustomOrder::getBuilder(), static::TABLE_CUSTOM_ORDER, function (JoinClause $join) {
  40. $join->on(
  41. $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ID]),
  42. $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_RECEIPT_ISSUING_ORDER_ID])
  43. );
  44. })
  45. ->leftJoinSub(User::getBuilder(), static::TABLE_HANDLER, function (JoinClause $join) {
  46. $join->on(
  47. $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_HANDLER_ID]),
  48. $this->makeColumnName([static::TABLE_HANDLER, CustomOrder::COL_NAME_ID])
  49. );
  50. });
  51. // -----検索条件
  52. // ID
  53. $this->where($table, $condition, static::CONDITION_ID, $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ID]));
  54. // 契約ID
  55. $this->where($table, $condition, static::CONDITION_CONTRACT_ID, $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_CONTRACT_ID]));
  56. // 電話番号
  57. $phoneNumber = data_get($condition, static::CONDITION_SMS_PHONE_NUMBER);
  58. if ($phoneNumber) {
  59. $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_SMS_PHONE_NUMBER]), 'like', "%{$phoneNumber}%");
  60. }
  61. // 完了確認
  62. $done = data_get($condition, static::CONDITION_DONE);
  63. if ($done !== null) {
  64. $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_DONE]), $done);
  65. }
  66. // ステータス
  67. $status = data_get($condition, static::CONDITION_STATUS);
  68. if ($status) {
  69. $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_NAME]), 'like', "%{$status}%");
  70. }
  71. // 受付日時
  72. $orderDateFrom = data_get($condition, static::CONDITION_ORDER_DATE_FROM);
  73. if ($orderDateFrom instanceof Carbon) {
  74. $orderDateFrom->setTime(0, 0);
  75. $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME]), '>=', $orderDateFrom);
  76. }
  77. $orderDateTo = data_get($condition, static::CONDITION_ORDER_DATE_TO);
  78. if ($orderDateTo instanceof Carbon) {
  79. $orderDateTo->setTime(0, 0)->addDay();
  80. $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME]), '<=', $orderDateTo);
  81. }
  82. // 運営会社
  83. $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_CODE]));
  84. $customerName = data_get($condition, static::CONDITION_CUSTOMER_NAME);
  85. if ($customerName) {
  86. $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_NAME]), 'like', "%{$customerName}%");
  87. }
  88. // 駐車場
  89. $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE]));
  90. $parkihngName = data_get($condition, static::CONDITION_PARKING_NAME);
  91. if ($parkihngName) {
  92. $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_NAME]), 'like', "%{$parkihngName}%");
  93. }
  94. // 担当者
  95. $handlerName = data_get($condition, static::CONDITION_HANDLER_NAME);
  96. if ($handlerName) {
  97. $table->where($this->makeColumnName([static::TABLE_HANDLER, User::COL_NAME_NAME]), 'like', "%{$handlerName}%");
  98. }
  99. $table->select($this->columns());
  100. $main = DB::table($table, "main");
  101. // ソート
  102. $this->sort($main, $condition);
  103. $main->orderBy(static::CONDITION_ID);
  104. // リミット
  105. $this->limit($main, $condition);
  106. return ReceiptIssuingOrderRepositoryData::makeList($main->get());
  107. }
  108. private function columns()
  109. {
  110. $order = static::TABLE_ORDER;
  111. $custom = static::TABLE_CUSTOM_ORDER;
  112. $handler = static::TABLE_HANDLER;
  113. $columns = [
  114. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ID], 'id'),
  115. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_NAME], 'status_name'),
  116. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME], 'order_datetime'),
  117. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SUMMARY_KEY1]),
  118. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SUMMARY_KEY2]),
  119. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ACCESS_TOKEN]),
  120. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ACCESS_TOKEN_EXPIRES_AT]),
  121. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_DONE]),
  122. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_SMS_SEND_DATETIME]),
  123. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_FIRST_ACCESS_DATETIME]),
  124. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME]),
  125. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_ORDER_MAIL_DATETIME]),
  126. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_MAIL_DOWNLOAD_DATETIME]),
  127. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_MAIL_POST_DATE]),
  128. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_DOWNLOAD_DATETIME]),
  129. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_EMAIL_SEND_ORDER_DATETIME]),
  130. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_EMAIL_SEND_DATETIME]),
  131. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SMS_PHONE_NUMBER]),
  132. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SMS_SEND_SUCCESS]),
  133. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_NO]),
  134. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_USE_DATE]),
  135. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_SHOP_NAME]),
  136. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_ISSUER]),
  137. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_NAME]),
  138. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_PURPOSE]),
  139. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_INVOICE_NO]),
  140. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_AMOUNT]),
  141. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_EMAIL]),
  142. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_PREF_CODE]),
  143. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ZIP_CODE]),
  144. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ADDRESS1]),
  145. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ADDRESS2]),
  146. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ADDRESS3]),
  147. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_NAME]),
  148. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MEMO]),
  149. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_UPDATED_AT]),
  150. $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_CUSTOMER_CODE], 'customer_code'),
  151. $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE], 'parking_management_code'),
  152. $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_CUSTOMER_NAME], 'customer_name'),
  153. $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_PARKING_NAME], 'parking_name'),
  154. $this->makeColumnNameForSelect([$handler, User::COL_NAME_ID], 'handler_id'),
  155. $this->makeColumnNameForSelect([$handler, User::COL_NAME_NAME], 'handler_name'),
  156. ];
  157. return $columns;
  158. }
  159. }