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

107 lines
4.1KB

  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\Collection;
  9. use Illuminate\Support\Facades\DB;
  10. class ReceiptIssuingOrderRepository extends BaseRepository
  11. {
  12. const CONDITION_ID = 'id';
  13. const CONDITION_CUSTOMER_CODE = 'customer_code';
  14. const CONDITION_PARKING_MANAGEMENT_CODE = 'parking_management_code';
  15. const CONDITION_CUSTOMER_NAME = 'customer_name';
  16. const CONDITION_PARKING_MANAGEMENT_NAME = 'parking_name';
  17. const TABLE_ORDER = "order";
  18. const TABLE_CUSTOM_ORDER = "custom_order";
  19. const TABLE_HANDLER = "handler";
  20. /**
  21. * コレクションを取得する
  22. *
  23. * @param array $condition
  24. * @return Collection<ParkingRepositoryData>
  25. */
  26. public function get(array $condition): Collection
  27. {
  28. $order = ReceiptIssuingOrder::getBuilder(static::TABLE_ORDER);
  29. $table = $order
  30. ->joinSub(CustomOrder::getBuilder(), static::TABLE_CUSTOM_ORDER, function (JoinClause $join) {
  31. $join->on(
  32. $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ID]),
  33. $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_RECEIPT_ISSUING_ORDER_ID])
  34. );
  35. })
  36. ->leftJoinSub(User::getBuilder(), static::TABLE_HANDLER, function (JoinClause $join) {
  37. $join->on(
  38. $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_HANDLER_ID]),
  39. $this->makeColumnName([static::TABLE_HANDLER, CustomOrder::COL_NAME_ID])
  40. );
  41. });
  42. // -----検索条件
  43. // 運営会社
  44. $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_CODE]));
  45. $customerName = data_get($condition, static::CONDITION_CUSTOMER_NAME);
  46. if ($customerName) {
  47. $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_NAME]), 'like', "%{$customerName}%");
  48. }
  49. // 駐車場
  50. $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE]));
  51. $parkihngName = data_get($condition, static::CONDITION_PARKING_MANAGEMENT_NAME);
  52. if ($parkihngName) {
  53. $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_NAME]), 'like', "%{$parkihngName}%");
  54. }
  55. $table->select($this->columns());
  56. $main = DB::table($table, "main");
  57. // ソート
  58. $this->sort($main, $condition);
  59. $main->orderBy(static::CONDITION_ID);
  60. // リミット
  61. $this->limit($main, $condition);
  62. return ReceiptIssuingOrderRepositoryData::makeList($main->get());
  63. }
  64. private function columns()
  65. {
  66. $order = static::TABLE_ORDER;
  67. $custom = static::TABLE_CUSTOM_ORDER;
  68. $handler = static::TABLE_HANDLER;
  69. $columns = [
  70. $this->makeColumnName([$order, ReceiptIssuingOrder::COL_NAME_ID], 'id'),
  71. $this->makeColumnName([$order, ReceiptIssuingOrder::COL_NAME_STATUS_NAME], 'status_name'),
  72. $this->makeColumnName([$order, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME], 'order_datetime'),
  73. $this->makeColumnName([$custom, CustomOrder::COL_NAME_CUSTOMER_CODE], 'customer_code'),
  74. $this->makeColumnName([$custom, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE], 'parking_management_code'),
  75. $this->makeColumnName([$custom, CustomOrder::COL_NAME_CUSTOMER_NAME], 'customer_name'),
  76. $this->makeColumnName([$custom, CustomOrder::COL_NAME_PARKING_NAME], 'parking_name'),
  77. $this->makeColumnName([$handler, User::COL_NAME_ID], 'handler_id'),
  78. $this->makeColumnName([$handler, User::COL_NAME_NAME], 'handler_name'),
  79. ];
  80. return $columns;
  81. }
  82. }