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

77 lines
2.2KB

  1. <?php
  2. namespace App\Repositories;
  3. use App\Models\Contract;
  4. use App\Models\ReceiptIssuingHTParkingCustomOrder as CustomOrder;
  5. use App\Models\ReceiptIssuingOrder;
  6. use App\Models\User;
  7. use App\Repositories\BaseRepository;
  8. use Illuminate\Database\Query\JoinClause;
  9. use Illuminate\Support\Carbon;
  10. use Illuminate\Support\Collection;
  11. use Illuminate\Support\Facades\DB;
  12. class ContractRepository extends BaseRepository
  13. {
  14. const CONDITION_ID = 'id';
  15. const CONDITION_NAME = 'name';
  16. const TABLE_CONTRACT = "contract";
  17. /**
  18. * コレクションを取得する
  19. *
  20. * @param array $condition
  21. * @return Collection<ContractRepositoryData>
  22. */
  23. public function get(array $condition): Collection
  24. {
  25. $table = Contract::getBuilder(static::TABLE_CONTRACT);
  26. // -----検索条件
  27. // ID
  28. $this->where($table, $condition, static::CONDITION_ID, $this->makeColumnName([static::TABLE_CONTRACT, Contract::COL_NAME_ID]));
  29. // 名前
  30. $name = data_get($condition, static::CONDITION_NAME);
  31. if ($name) {
  32. $table->where($this->makeColumnName([static::TABLE_CONTRACT, Contract::COL_NAME_NAME]), 'like', "%{$name}%");
  33. }
  34. $table->select($this->columns());
  35. $main = DB::table($table, "main");
  36. // ソート
  37. $this->sort($main, $condition);
  38. $main->orderBy($this->makeColumnName([Contract::CREATED_AT]));
  39. // リミット
  40. $this->limit($main, $condition);
  41. return ContractRepositoryData::makeList($main->get());
  42. }
  43. private function columns()
  44. {
  45. $contract = static::TABLE_CONTRACT;
  46. $columns = [
  47. $this->makeColumnNameForSelect([$contract, Contract::COL_NAME_ID]),
  48. $this->makeColumnNameForSelect([$contract, Contract::COL_NAME_NAME]),
  49. $this->makeColumnNameForSelect([$contract, Contract::COL_NAME_CUSTOM]),
  50. $this->makeColumnNameForSelect([$contract, Contract::COL_NAME_CONTRACT_CODE]),
  51. $this->makeColumnNameForSelect([$contract, Contract::COL_NAME_UPDATED_AT]),
  52. $this->makeColumnNameForSelect([$contract, Contract::COL_NAME_CREATED_AT]),
  53. ];
  54. return $columns;
  55. }
  56. }