領収証発行サービス
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

79 行
2.0KB

  1. <?php
  2. namespace App\Http\Controllers\Web\Custom\HelloTechno;
  3. use App\Codes\UserRole;
  4. use App\Files\CsvFile;
  5. use App\Http\Controllers\Web\IParam;
  6. use App\Repositories\Custom\HelloTechno\UseSummaryRepository as Repository;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\Auth;
  9. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  10. class UseSummaryCSVController extends HelloTechnoController
  11. {
  12. public function name(): string
  13. {
  14. return "[HelloTechno専用]利用実績一覧CSV取得";
  15. }
  16. public function description(): string
  17. {
  18. return "[HelloTechno専用]利用実績の一覧CSVを取得する";
  19. }
  20. public function __construct(
  21. protected UseSummaryCSVParam $param,
  22. private Repository $repository
  23. ) {
  24. parent::__construct();
  25. $this->roleAllow(UserRole::NORMAL_ADMIN);
  26. }
  27. protected function getParam(): IParam
  28. {
  29. return $this->param;
  30. }
  31. protected function run(Request $request): BinaryFileResponse
  32. {
  33. $param = $this->param;
  34. $condition = [
  35. ...$param->toArray(),
  36. Repository::CONDITION_CONTRACT_ID => Auth::user()->contract_id,
  37. Repository::CONDITION_SORT_TARGET => 'customer_code',
  38. ];
  39. $list = $this->repository->forCsv()->get($condition);
  40. // $csv = new CsvFile($this->getHeaderLabel(), CsvFile::ENCODE_SJIS);
  41. $csv = new CsvFile($this->getHeaderLabel());
  42. foreach ($list as $row) {
  43. $csv->addLine($row->toArray());
  44. }
  45. return $csv->download($this->getDownloadFileName());
  46. }
  47. private function getHeaderLabel(): array
  48. {
  49. $headers = [
  50. '集計ID',
  51. '集計年月',
  52. '顧客コード',
  53. '顧客名',
  54. '駐車場管理コード',
  55. '領収証発行依頼回数',
  56. 'SMS送信件数',
  57. ];
  58. return $headers;
  59. }
  60. private function getDownloadFileName()
  61. {
  62. return sprintf("利用実績_%s.csv", $this->param->summaryYyyymm);
  63. }
  64. }