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

204 lines
10KB

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