|
- <?php
-
- namespace App\Repositories\Custom\HelloTechno;
-
- use App\Models\ReceiptIssuingHTParkingCustomOrder as CustomOrder;
- use App\Models\ReceiptIssuingOrder;
- use App\Models\User;
- use App\Repositories\BaseRepository;
- use Illuminate\Database\Query\JoinClause;
- use Illuminate\Support\Collection;
- use Illuminate\Support\Facades\DB;
-
- class ReceiptIssuingOrderRepository extends BaseRepository
- {
-
- const CONDITION_ID = 'id';
-
- const CONDITION_CUSTOMER_CODE = 'customer_code';
- const CONDITION_PARKING_MANAGEMENT_CODE = 'parking_management_code';
-
- const CONDITION_CUSTOMER_NAME = 'customer_name';
- const CONDITION_PARKING_MANAGEMENT_NAME = 'parking_name';
-
-
- const TABLE_ORDER = "order";
- const TABLE_CUSTOM_ORDER = "custom_order";
- const TABLE_HANDLER = "handler";
-
-
- /**
- * コレクションを取得する
- *
- * @param array $condition
- * @return Collection<ParkingRepositoryData>
- */
- public function get(array $condition): Collection
- {
- $order = ReceiptIssuingOrder::getBuilder(static::TABLE_ORDER);
-
- $table = $order
- ->joinSub(CustomOrder::getBuilder(), static::TABLE_CUSTOM_ORDER, function (JoinClause $join) {
- $join->on(
- $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ID]),
- $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_RECEIPT_ISSUING_ORDER_ID])
- );
- })
- ->leftJoinSub(User::getBuilder(), static::TABLE_HANDLER, function (JoinClause $join) {
- $join->on(
- $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_HANDLER_ID]),
- $this->makeColumnName([static::TABLE_HANDLER, CustomOrder::COL_NAME_ID])
- );
- });
-
- // -----検索条件
-
- // 運営会社
- $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_CODE]));
- $customerName = data_get($condition, static::CONDITION_CUSTOMER_NAME);
- if ($customerName) {
- $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_NAME]), 'like', "%{$customerName}%");
- }
-
- // 駐車場
- $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE]));
- $parkihngName = data_get($condition, static::CONDITION_PARKING_MANAGEMENT_NAME);
- if ($parkihngName) {
- $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_NAME]), 'like', "%{$parkihngName}%");
- }
-
- $table->select($this->columns());
-
- $main = DB::table($table, "main");
-
- // ソート
- $this->sort($main, $condition);
- $main->orderBy(static::CONDITION_ID);
-
- // リミット
- $this->limit($main, $condition);
-
-
- return ReceiptIssuingOrderRepositoryData::makeList($main->get());
- }
-
- private function columns()
- {
- $order = static::TABLE_ORDER;
- $custom = static::TABLE_CUSTOM_ORDER;
- $handler = static::TABLE_HANDLER;
- $columns = [
- $this->makeColumnName([$order, ReceiptIssuingOrder::COL_NAME_ID], 'id'),
- $this->makeColumnName([$order, ReceiptIssuingOrder::COL_NAME_STATUS_NAME], 'status_name'),
- $this->makeColumnName([$order, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME], 'order_datetime'),
- $this->makeColumnName([$custom, CustomOrder::COL_NAME_CUSTOMER_CODE], 'customer_code'),
- $this->makeColumnName([$custom, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE], 'parking_management_code'),
- $this->makeColumnName([$custom, CustomOrder::COL_NAME_CUSTOMER_NAME], 'customer_name'),
- $this->makeColumnName([$custom, CustomOrder::COL_NAME_PARKING_NAME], 'parking_name'),
- $this->makeColumnName([$handler, User::COL_NAME_ID], 'handler_id'),
- $this->makeColumnName([$handler, User::COL_NAME_NAME], 'handler_name'),
-
- ];
-
-
- return $columns;
- }
- }
|