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

251 lines
13KB

  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 CONDITION_IS_CONFIRMED = 'is_confirmed';
  30. const CONDITION_HAS_MAILORDER = 'has_mailorder';
  31. const TABLE_ORDER = "order";
  32. const TABLE_CUSTOM_ORDER = "custom_order";
  33. const TABLE_HANDLER = "handler";
  34. const TABLE_TAX = "tax";
  35. /**
  36. * コレクションを取得する
  37. *
  38. * @param array $condition
  39. * @return Collection<Data>
  40. */
  41. public function get(array $condition): Collection
  42. {
  43. $order = ReceiptIssuingOrder::getBuilder(static::TABLE_ORDER);
  44. $table = $order
  45. ->joinSub(CustomOrder::getBuilder(), static::TABLE_CUSTOM_ORDER, function (JoinClause $join) {
  46. $join->on(
  47. $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ID]),
  48. $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_RECEIPT_ISSUING_ORDER_ID])
  49. );
  50. })
  51. ->leftJoinSub(User::getBuilder(), static::TABLE_HANDLER, function (JoinClause $join) {
  52. $join->on(
  53. $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_HANDLER_ID]),
  54. $this->makeColumnName([static::TABLE_HANDLER, CustomOrder::COL_NAME_ID])
  55. );
  56. })
  57. ->leftJoinSub(ReceiptIssuingOrderTax::getBuilder(), static::TABLE_TAX, function (JoinClause $join) {
  58. $join->on(
  59. $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ID]),
  60. $this->makeColumnName([static::TABLE_TAX, ReceiptIssuingOrderTax::COL_NAME_RECEIPT_ISSUING_ORDER_ID])
  61. );
  62. });
  63. // -----検索条件
  64. // ID
  65. $this->where($table, $condition, static::CONDITION_ID, $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ID]));
  66. // 契約ID
  67. $this->where($table, $condition, static::CONDITION_CONTRACT_ID, $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_CONTRACT_ID]));
  68. // 電話番号
  69. $phoneNumber = data_get($condition, static::CONDITION_SMS_PHONE_NUMBER);
  70. if ($phoneNumber) {
  71. $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_SMS_PHONE_NUMBER]), 'like', "%{$phoneNumber}%");
  72. }
  73. // 完了確認
  74. $done = data_get($condition, static::CONDITION_DONE);
  75. if ($done !== null) {
  76. $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_DONE]), $done);
  77. }
  78. // ステータス
  79. $status = data_get($condition, static::CONDITION_STATUS);
  80. if ($status) {
  81. $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_NAME]), 'like', "%{$status}%");
  82. }
  83. // 受付日時
  84. $orderDateFrom = data_get($condition, static::CONDITION_ORDER_DATE_FROM);
  85. if ($orderDateFrom instanceof Carbon) {
  86. $orderDateFrom = $orderDateFrom->clone();
  87. $orderDateFrom->setTime(0, 0);
  88. $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME]), '>=', $orderDateFrom);
  89. }
  90. $orderDateTo = data_get($condition, static::CONDITION_ORDER_DATE_TO);
  91. if ($orderDateTo instanceof Carbon) {
  92. $orderDateTo = $orderDateTo->clone();
  93. $orderDateTo->setTime(0, 0)->addDay();
  94. $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME]), '<=', $orderDateTo);
  95. }
  96. // 運営会社
  97. $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_CODE]));
  98. $customerCode = data_get($condition, static::CONDITION_CUSTOMER_CODE);
  99. if ($customerCode) {
  100. $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_CODE]), $customerCode);
  101. }
  102. $customerName = data_get($condition, static::CONDITION_CUSTOMER_NAME);
  103. if ($customerName) {
  104. $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_NAME]), 'like', "%{$customerName}%");
  105. }
  106. // 駐車場
  107. $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE]));
  108. $parkingManagementCode = data_get($condition, static::CONDITION_PARKING_NAME);
  109. if ($parkingManagementCode) {
  110. $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE]), $parkingManagementCode);
  111. }
  112. $parkingName = data_get($condition, static::CONDITION_PARKING_NAME);
  113. if ($parkingName) {
  114. $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_NAME]), 'like', "%{$parkingName}%");
  115. }
  116. // 担当者
  117. $handlerName = data_get($condition, static::CONDITION_HANDLER_NAME);
  118. if ($handlerName) {
  119. $table->where($this->makeColumnName([static::TABLE_HANDLER, User::COL_NAME_NAME]), 'like', "%{$handlerName}%");
  120. }
  121. // 領収証番号
  122. $receiptNo = data_get($condition, static::CONDITION_RECEIPT_NO);
  123. if ($receiptNo) {
  124. $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_RECEIPT_NO]), 'like', "%{$receiptNo}%");
  125. }
  126. // 確定済み
  127. $isConfirmed = data_get($condition, static::CONDITION_IS_CONFIRMED);
  128. if ($isConfirmed !== null) {
  129. if ($isConfirmed === true) {
  130. $table->whereNotNull($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME]));
  131. } else if ($isConfirmed === false) {
  132. $table->whereNull($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME]));
  133. }
  134. }
  135. // 郵送依頼あり
  136. $hasMailOrder = data_get($condition, static::CONDITION_HAS_MAILORDER);
  137. if ($hasMailOrder !== null) {
  138. if ($hasMailOrder === true) {
  139. $table->whereNotNull($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_ORDER_MAIL_DATETIME]));
  140. } else if ($hasMailOrder === false) {
  141. $table->whereNull($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_ORDER_MAIL_DATETIME]));
  142. }
  143. }
  144. $table->select($this->columns());
  145. $main = DB::table($table, "main");
  146. // ソート
  147. $this->sort($main, $condition);
  148. $main->orderByDesc(ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME);
  149. // リミット
  150. $this->limit($main, $condition);
  151. return ReceiptIssuingOrderRepositoryData::makeList($main->get());
  152. }
  153. private function columns()
  154. {
  155. $order = static::TABLE_ORDER;
  156. $custom = static::TABLE_CUSTOM_ORDER;
  157. $handler = static::TABLE_HANDLER;
  158. $tax = static::TABLE_TAX;
  159. $columns = [
  160. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ID]),
  161. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_NAME]),
  162. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME]),
  163. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SUMMARY_KEY1]),
  164. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SUMMARY_KEY2]),
  165. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ACCESS_TOKEN]),
  166. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ACCESS_TOKEN_EXPIRES_AT]),
  167. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_DONE]),
  168. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_SMS_SEND_DATETIME]),
  169. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_FIRST_ACCESS_DATETIME]),
  170. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME]),
  171. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_ORDER_MAIL_DATETIME]),
  172. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_MAIL_DOWNLOAD_DATETIME]),
  173. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_MAIL_POST_DATE]),
  174. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_DOWNLOAD_DATETIME]),
  175. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_EMAIL_SEND_ORDER_DATETIME]),
  176. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_EMAIL_SEND_DATETIME]),
  177. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SMS_PHONE_NUMBER]),
  178. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SMS_SEND_SUCCESS]),
  179. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_NO]),
  180. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_USE_DATE]),
  181. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_SHOP_NAME]),
  182. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_ISSUER]),
  183. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_NAME]),
  184. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_PURPOSE]),
  185. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_INVOICE_NO]),
  186. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_AMOUNT]),
  187. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_EMAIL]),
  188. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_PREF_CODE]),
  189. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ZIP_CODE]),
  190. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ADDRESS1]),
  191. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ADDRESS2]),
  192. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ADDRESS3]),
  193. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_NAME]),
  194. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MEMO]),
  195. $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_UPDATED_AT]),
  196. $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_CUSTOMER_CODE]),
  197. $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE]),
  198. $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_CUSTOMER_NAME]),
  199. $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_PARKING_NAME]),
  200. $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_ADJUST_SEQ_NO]),
  201. $this->makeColumnNameForSelect([$handler, User::COL_NAME_ID], 'handler_id'),
  202. $this->makeColumnNameForSelect([$handler, User::COL_NAME_NAME], 'handler_name'),
  203. $this->makeColumnNameForSelect([$tax, ReceiptIssuingOrderTax::COL_NAME_TAX_RATE]),
  204. $this->makeColumnNameForSelect([$tax, ReceiptIssuingOrderTax::COL_NAME_TAX_AMOUNT]),
  205. ];
  206. return $columns;
  207. }
  208. }