From 2125793ae150237cf086f2f0491a91eb0ec8502c Mon Sep 17 00:00:00 2001 From: "sosuke.iwabuchi" Date: Tue, 20 Jun 2023 20:43:30 +0900 Subject: [PATCH] =?UTF-8?q?=E5=88=A9=E7=94=A8=E5=AE=9F=E7=B8=BECSV?= =?UTF-8?q?=E3=83=80=E3=82=A6=E3=83=B3=E3=83=AD=E3=83=BC=E3=83=89=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HelloTechno/UseSummaryCSVController.php | 78 +++++++++++++++++++ .../Custom/HelloTechno/UseSummaryCSVParam.php | 23 ++++++ app/Repositories/BaseRepositoryData.php | 5 ++ .../HelloTechno/UseSummaryRepository.php | 36 ++++++++- 4 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 app/Http/Controllers/Web/Custom/HelloTechno/UseSummaryCSVController.php create mode 100644 app/Http/Controllers/Web/Custom/HelloTechno/UseSummaryCSVParam.php diff --git a/app/Http/Controllers/Web/Custom/HelloTechno/UseSummaryCSVController.php b/app/Http/Controllers/Web/Custom/HelloTechno/UseSummaryCSVController.php new file mode 100644 index 0000000..c2a8dd3 --- /dev/null +++ b/app/Http/Controllers/Web/Custom/HelloTechno/UseSummaryCSVController.php @@ -0,0 +1,78 @@ +roleAllow(UserRole::NORMAL_ADMIN); + } + + protected function getParam(): IParam + { + return $this->param; + } + + protected function run(Request $request): BinaryFileResponse + { + $param = $this->param; + + $condition = [ + ...$param->toArray(), + Repository::CONDITION_CONTRACT_ID => Auth::user()->contract_id, + Repository::CONDITION_SORT_TARGET => 'customer_code', + ]; + + $list = $this->repository->forCsv()->get($condition); + + // $csv = new CsvFile($this->getHeaderLabel(), CsvFile::ENCODE_SJIS); + $csv = new CsvFile($this->getHeaderLabel()); + foreach ($list as $row) { + $csv->addLine($row->toArray()); + } + return $csv->download($this->getDownloadFileName()); + } + + private function getHeaderLabel(): array + { + $headers = [ + '集計ID', + '集計年月', + '顧客コード', + '顧客名', + '駐車場管理コード', + '領収証発行依頼回数', + 'SMS送信件数', + ]; + + return $headers; + } + + private function getDownloadFileName() + { + + return sprintf("利用実績_%s.csv", $this->param->summaryYyyymm); + } +} diff --git a/app/Http/Controllers/Web/Custom/HelloTechno/UseSummaryCSVParam.php b/app/Http/Controllers/Web/Custom/HelloTechno/UseSummaryCSVParam.php new file mode 100644 index 0000000..0fb1dcc --- /dev/null +++ b/app/Http/Controllers/Web/Custom/HelloTechno/UseSummaryCSVParam.php @@ -0,0 +1,23 @@ + $this->str(), + ], + ); + } +} diff --git a/app/Repositories/BaseRepositoryData.php b/app/Repositories/BaseRepositoryData.php index bd76391..e638fb1 100644 --- a/app/Repositories/BaseRepositoryData.php +++ b/app/Repositories/BaseRepositoryData.php @@ -26,4 +26,9 @@ class BaseRepositoryData extends stdClass } return $ret; } + + public function toArray(): array + { + return json_decode(json_encode($this), true); + } } diff --git a/app/Repositories/Custom/HelloTechno/UseSummaryRepository.php b/app/Repositories/Custom/HelloTechno/UseSummaryRepository.php index 94f6b77..7fe81ea 100644 --- a/app/Repositories/Custom/HelloTechno/UseSummaryRepository.php +++ b/app/Repositories/Custom/HelloTechno/UseSummaryRepository.php @@ -8,6 +8,7 @@ use App\Repositories\BaseRepository; use Illuminate\Database\Query\JoinClause; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; +use LogicException; class UseSummaryRepository extends BaseRepository { @@ -21,6 +22,17 @@ class UseSummaryRepository extends BaseRepository const TABLE_SUMMARY = "summary"; const TABLE_NAME = "name"; + private const SELECT_LIST = 'SELECT_LIST'; + private const SELECT_CSV = 'SELECT_CSV'; + + private string $select = self::SELECT_LIST; + + public function forCsv(): static + { + $this->select = self::SELECT_CSV; + return $this; + } + /** * コレクションを取得する @@ -53,7 +65,13 @@ class UseSummaryRepository extends BaseRepository $this->where($table, $condition, static::CONDITION_SUMMARY_YYYYMM, $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_SUMMARY_YYYYMM])); - $table->select($this->columns()); + if ($this->select === self::SELECT_LIST) { + $table->select($this->columns()); + } else if ($this->select === self::SELECT_CSV) { + $table->select($this->csvColumns()); + } else { + throw new LogicException("SELECT不正"); + } $main = DB::table($table, "main"); @@ -86,4 +104,20 @@ class UseSummaryRepository extends BaseRepository ]; return $columns; } + private function csvColumns() + { + $summary = static::TABLE_SUMMARY; + $name = static::TABLE_NAME; + $columns = [ + $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_ID]), + $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_YYYYMM]), + $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_KEY1]), + $this->makeColumnNameForSelect([$name, HtCustomParkingName::COL_NAME_CUSTOMER_NAME]), + $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SUMMARY_KEY2]), + $this->makeColumnNameForSelect([$name, HtCustomParkingName::COL_NAME_PARKING_NAME]), + $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_RECEIPT_ORDER_COUNT]), + $this->makeColumnNameForSelect([$summary, UseByKeySummary::COL_NAME_SMS_SEND_COUNT]), + ]; + return $columns; + } }