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

71 lines
2.3KB

  1. <?php
  2. namespace App\Repositories\Custom\HelloTechno;
  3. use App\Models\HtCustomParkingName;
  4. use App\Models\UseByKeySummary;
  5. use App\Repositories\UseSummaryRepository as BaseRepository;
  6. use App\Util\SelectQueryUtil;
  7. use Illuminate\Database\Query\Builder;
  8. use Illuminate\Database\Query\JoinClause;
  9. use Illuminate\Support\Collection;
  10. use Illuminate\Support\Facades\DB;
  11. class UseSummaryRepository extends BaseRepository
  12. {
  13. // 必須検索項目
  14. const CONDITION_CUSTOMER_CODE = 'customer_code';
  15. private const TABLE_NAME = "name";
  16. /**
  17. * コレクションを取得する
  18. *
  19. * @param array $condition
  20. * @return Collection<int, UseSummaryRepositoryData>
  21. */
  22. public function get(array $condition): Collection
  23. {
  24. return UseSummaryRepositoryData::makeList($this->builder($condition)->get());
  25. }
  26. protected function builder(array $condition): Builder
  27. {
  28. $builder = parent::builder($condition);
  29. // 顧客名解決
  30. $name = HtCustomParkingName::getBuilder()->select([
  31. HtCustomParkingName::COL_NAME_CUSTOMER_CODE,
  32. HtCustomParkingName::COL_NAME_CUSTOMER_NAME,
  33. DB::raw('RANK() OVER(PARTITION BY customer_code ORDER BY updated_at DESC) as rank')
  34. ]);
  35. $builder
  36. ->leftJoinSub($name, static::TABLE_NAME, function (JoinClause $join) {
  37. $join->on(
  38. $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_SUMMARY_KEY1]),
  39. $this->makeColumnName([static::TABLE_NAME, HtCustomParkingName::COL_NAME_CUSTOMER_CODE])
  40. )->where($this->makeColumnName([static::TABLE_NAME, 'rank']), 1);
  41. });
  42. $customerCode = data_get($condition, self::CONDITION_CUSTOMER_CODE);
  43. if ($customerCode) {
  44. $builder->where($this->makeColumnName([static::TABLE_NAME, HtCustomParkingName::COL_NAME_CUSTOMER_CODE]), $customerCode);
  45. }
  46. return $builder;
  47. }
  48. protected function columns()
  49. {
  50. $name = self::TABLE_NAME;
  51. $columns = [
  52. ...parent::columns(),
  53. SelectQueryUtil::select([$name, HtCustomParkingName::COL_NAME_CUSTOMER_CODE])->build(),
  54. SelectQueryUtil::select([$name, HtCustomParkingName::COL_NAME_CUSTOMER_NAME])->build(),
  55. ];
  56. return $columns;
  57. }
  58. }