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

214 lines
11KB

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