|
- <?php
-
- namespace App\Repositories\Custom\HelloTechno;
-
- use App\Models\HtCustomParkingName;
- use App\Models\UseByKeySummary;
- use App\Repositories\BaseRepository;
- use Illuminate\Database\Query\JoinClause;
- use Illuminate\Support\Collection;
- use Illuminate\Support\Facades\DB;
- use LogicException;
-
- class UseSummaryRepository extends BaseRepository
- {
-
- const CONDITION_ID = 'id';
-
- const CONDITION_SUMMARY_YYYYMM = 'summary_yyyymm';
-
- const CONDITION_CONTRACT_ID = 'contract_id';
-
- const TABLE_SUMMARY = "summary";
- const TABLE_NAME = "name";
-
- private const SELECT_LIST = 'SELECT_LIST';
- private const SELECT_CSV = 'SELECT_CSV';
-
- private string $select = self::SELECT_LIST;
-
- public function forCsv(): static
- {
- $this->select = self::SELECT_CSV;
- return $this;
- }
-
-
- /**
- * コレクションを取得する
- *
- * @param array $condition
- * @return Collection<UseSummaryRepositoryData>
- */
- public function get(array $condition): Collection
- {
- $order = UseByKeySummary::getBuilder(static::TABLE_SUMMARY);
-
- $parkingName = HtCustomParkingName::getBuilder();
-
-
- $table = $order
- ->leftJoinSub($parkingName, static::TABLE_NAME, function (JoinClause $join) {
- $join->on(
- $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_SUMMARY_KEY1]),
- $this->makeColumnName([static::TABLE_NAME, HtCustomParkingName::COL_NAME_CUSTOMER_CODE])
- )->on(
- $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_SUMMARY_KEY2]),
- $this->makeColumnName([static::TABLE_NAME, HtCustomParkingName::COL_NAME_PARKING_MANAGEMENT_CODE])
- );
- });
-
- // -----検索条件
- // 契約ID
- $this->where($table, $condition, static::CONDITION_CONTRACT_ID, $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_CONTRACT_ID]));
- // 年月
- $this->where($table, $condition, static::CONDITION_SUMMARY_YYYYMM, $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_SUMMARY_YYYYMM]));
-
-
- if ($this->select === self::SELECT_LIST) {
- $table->select($this->columns());
- } else if ($this->select === self::SELECT_CSV) {
- $table->select($this->csvColumns());
- } else {
- throw new LogicException("SELECT不正");
- }
-
- $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()
- {
- $summary = static::TABLE_SUMMARY;
- $name = static::TABLE_NAME;
- $columns = [
- $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_ID]),
- $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_YYYYMM]),
- $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_KEY1]),
- $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_KEY2]),
- $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_RECEIPT_ORDER_COUNT]),
- $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SMS_SEND_COUNT]),
- $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_IS_FIXED]),
- $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_UPDATED_AT]),
- $this->makeColumnNameForSelect([$name, HtCustomParkingName::COL_NAME_CUSTOMER_NAME]),
- $this->makeColumnNameForSelect([$name, HtCustomParkingName::COL_NAME_PARKING_NAME]),
- ];
- return $columns;
- }
- private function csvColumns()
- {
- $summary = static::TABLE_SUMMARY;
- $name = static::TABLE_NAME;
- $columns = [
- $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_ID]),
- $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_YYYYMM]),
- $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_KEY1]),
- $this->makeColumnNameForSelect([$name, HtCustomParkingName::COL_NAME_CUSTOMER_NAME]),
- $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_KEY2]),
- $this->makeColumnNameForSelect([$name, HtCustomParkingName::COL_NAME_PARKING_NAME]),
- $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_RECEIPT_ORDER_COUNT]),
- $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SMS_SEND_COUNT]),
- ];
- return $columns;
- }
- }
|