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

126 lines
5.0KB

  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. use LogicException;
  10. class UseSummaryRepository extends BaseRepository
  11. {
  12. const CONDITION_ID = 'id';
  13. const CONDITION_SUMMARY_YYYYMM = 'summary_yyyymm';
  14. const CONDITION_CONTRACT_ID = 'contract_id';
  15. const TABLE_SUMMARY = "summary";
  16. const TABLE_NAME = "name";
  17. private const SELECT_LIST = 'SELECT_LIST';
  18. private const SELECT_CSV = 'SELECT_CSV';
  19. private string $select = self::SELECT_LIST;
  20. public function forCsv(): static
  21. {
  22. $this->select = self::SELECT_CSV;
  23. return $this;
  24. }
  25. /**
  26. * コレクションを取得する
  27. *
  28. * @param array $condition
  29. * @return Collection<UseSummaryRepositoryData>
  30. */
  31. public function get(array $condition): Collection
  32. {
  33. $order = UseByKeySummary::getBuilder(static::TABLE_SUMMARY);
  34. $parkingName = HtCustomParkingName::getBuilder();
  35. $table = $order
  36. ->leftJoinSub($parkingName, 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. )->on(
  41. $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_SUMMARY_KEY2]),
  42. $this->makeColumnName([static::TABLE_NAME, HtCustomParkingName::COL_NAME_PARKING_MANAGEMENT_CODE])
  43. );
  44. });
  45. // -----検索条件
  46. // 契約ID
  47. $this->where($table, $condition, static::CONDITION_CONTRACT_ID, $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_CONTRACT_ID]));
  48. // 年月
  49. $this->where($table, $condition, static::CONDITION_SUMMARY_YYYYMM, $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_SUMMARY_YYYYMM]));
  50. if ($this->select === self::SELECT_LIST) {
  51. $table->select($this->columns());
  52. } else if ($this->select === self::SELECT_CSV) {
  53. $table->select($this->csvColumns());
  54. } else {
  55. throw new LogicException("SELECT不正");
  56. }
  57. $main = DB::table($table, "main");
  58. // ソート
  59. $this->sort($main, $condition);
  60. $main->orderBy(static::CONDITION_ID);
  61. // リミット
  62. $this->limit($main, $condition);
  63. return ReceiptIssuingOrderRepositoryData::makeList($main->get());
  64. }
  65. private function columns()
  66. {
  67. $summary = static::TABLE_SUMMARY;
  68. $name = static::TABLE_NAME;
  69. $columns = [
  70. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_ID]),
  71. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_YYYYMM]),
  72. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_KEY1]),
  73. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_KEY2]),
  74. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_RECEIPT_ORDER_COUNT]),
  75. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_MAIL_ORDER_COUNT]),
  76. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SMS_SEND_COUNT]),
  77. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_IS_FIXED]),
  78. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_UPDATED_AT]),
  79. $this->makeColumnNameForSelect([$name, HtCustomParkingName::COL_NAME_CUSTOMER_NAME]),
  80. $this->makeColumnNameForSelect([$name, HtCustomParkingName::COL_NAME_PARKING_NAME]),
  81. ];
  82. return $columns;
  83. }
  84. private function csvColumns()
  85. {
  86. $summary = static::TABLE_SUMMARY;
  87. $name = static::TABLE_NAME;
  88. $columns = [
  89. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_ID]),
  90. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_YYYYMM]),
  91. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_KEY1]),
  92. $this->makeColumnNameForSelect([$name, HtCustomParkingName::COL_NAME_CUSTOMER_NAME]),
  93. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_KEY2]),
  94. $this->makeColumnNameForSelect([$name, HtCustomParkingName::COL_NAME_PARKING_NAME]),
  95. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_RECEIPT_ORDER_COUNT]),
  96. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_MAIL_ORDER_COUNT]),
  97. $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SMS_SEND_COUNT]),
  98. ];
  99. return $columns;
  100. }
  101. }