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

90 lines
3.3KB

  1. <?php
  2. namespace App\Repositories\Custom\HelloTechno;
  3. use App\Models\HtCustomParkingName;
  4. use App\Models\UseByKeySummary;
  5. use App\Repositories\BaseRepository;
  6. use Illuminate\Database\Query\JoinClause;
  7. use Illuminate\Support\Collection;
  8. use Illuminate\Support\Facades\DB;
  9. class UseSummaryRepository extends BaseRepository
  10. {
  11. const CONDITION_ID = 'id';
  12. const CONDITION_SUMMARY_YYYYMM = 'summary_yyyymm';
  13. const CONDITION_CONTRACT_ID = 'contract_id';
  14. const TABLE_SUMMARY = "summary";
  15. const TABLE_NAME = "name";
  16. /**
  17. * コレクションを取得する
  18. *
  19. * @param array $condition
  20. * @return Collection<UseSummaryRepositoryData>
  21. */
  22. public function get(array $condition): Collection
  23. {
  24. $order = UseByKeySummary::getBuilder(static::TABLE_SUMMARY);
  25. $parkingName = HtCustomParkingName::getBuilder();
  26. $table = $order
  27. ->leftJoinSub($parkingName, static::TABLE_NAME, function (JoinClause $join) {
  28. $join->on(
  29. $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_SUMMARY_KEY1]),
  30. $this->makeColumnName([static::TABLE_NAME, HtCustomParkingName::COL_NAME_CUSTOMER_CODE])
  31. )->on(
  32. $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_SUMMARY_KEY2]),
  33. $this->makeColumnName([static::TABLE_NAME, HtCustomParkingName::COL_NAME_PARKING_MANAGEMENT_CODE])
  34. );
  35. });
  36. // -----検索条件
  37. // 契約ID
  38. $this->where($table, $condition, static::CONDITION_CONTRACT_ID, $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_CONTRACT_ID]));
  39. // 年月
  40. $this->where($table, $condition, static::CONDITION_SUMMARY_YYYYMM, $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_SUMMARY_YYYYMM]));
  41. $table->select($this->columns());
  42. $main = DB::table($table, "main");
  43. // ソート
  44. $this->sort($main, $condition);
  45. $main->orderBy(static::CONDITION_ID);
  46. // リミット
  47. $this->limit($main, $condition);
  48. return ReceiptIssuingOrderRepositoryData::makeList($main->get());
  49. }
  50. private function columns()
  51. {
  52. $summary = static::TABLE_SUMMARY;
  53. $name = static::TABLE_NAME;
  54. $columns = [
  55. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_ID]),
  56. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_YYYYMM]),
  57. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_KEY1]),
  58. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_KEY2]),
  59. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_RECEIPT_ORDER_COUNT]),
  60. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SMS_SEND_COUNT]),
  61. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_IS_FIXED]),
  62. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_UPDATED_AT]),
  63. $this->makeColumnNameForSelect([$name, HtCustomParkingName::COL_NAME_CUSTOMER_NAME]),
  64. $this->makeColumnNameForSelect([$name, HtCustomParkingName::COL_NAME_PARKING_NAME]),
  65. ];
  66. return $columns;
  67. }
  68. }