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

73 lines
2.0KB

  1. <?php
  2. namespace App\Repositories;
  3. use App\Models\Contract;
  4. use App\Models\ReceiptIssuingOrder;
  5. use App\Models\UseByKeySummary;
  6. use App\Util\SelectQueryUtil;
  7. use Illuminate\Database\Query\Builder;
  8. use Illuminate\Database\Query\JoinClause;
  9. use Illuminate\Support\Collection;
  10. class UseSummaryByContractRepository extends UseSummaryRepository
  11. {
  12. const CONDITION_CONTRACT_NAME = 'contract_name';
  13. private const TABLE_CONTRACT = 'contract';
  14. /**
  15. * コレクションを取得する
  16. *
  17. * @param array $condition
  18. * @return Collection<UseSummaryByContractRepositoryData>
  19. */
  20. public function get(array $condition): Collection
  21. {
  22. return UseSummaryByContractRepositoryData::makeList($this->builder($condition)->get());
  23. }
  24. protected function builder(array $condition): Builder
  25. {
  26. $builder = parent::builder($condition);
  27. // 契約名解決
  28. $builder
  29. ->leftJoinSub(Contract::getBuilder(), static::TABLE_CONTRACT, function (JoinClause $join) {
  30. $join->on(
  31. $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_CONTRACT_ID]),
  32. $this->makeColumnName([static::TABLE_CONTRACT, Contract::COL_NAME_ID])
  33. );
  34. });
  35. $contractName = data_get($condition, self::CONDITION_CONTRACT_NAME);
  36. if ($contractName) {
  37. $builder->where($this->makeColumnName([self::TABLE_CONTRACT, Contract::COL_NAME_NAME]), 'like', '%' . $contractName . '%');
  38. }
  39. return $builder;
  40. }
  41. protected function columns()
  42. {
  43. $contract = self::TABLE_CONTRACT;
  44. $columns = [
  45. ...parent::columns(),
  46. SelectQueryUtil::select([$contract, Contract::COL_NAME_ID])->as("contract_id")->build(),
  47. SelectQueryUtil::select([$contract, Contract::COL_NAME_NAME])->as("contract_name")->build(),
  48. ];
  49. return $columns;
  50. }
  51. protected function groupByColumn(): string
  52. {
  53. return ReceiptIssuingOrder::COL_NAME_CONTRACT_ID;
  54. }
  55. }