領収証発行サービス
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

215 行
11KB

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