|
- <?php
-
- namespace App\Http\Controllers\Web\Custom\HelloTechno;
-
- use App\Codes\UserRole;
- use App\Features\LoginUser;
- use App\Files\CsvFile;
- use App\Http\Controllers\Web\IParam;
- use App\Models\ReceiptIssuingOrder;
- use App\Repositories\Custom\HelloTechno\ReceiptIssuingOrderRepository;
- use App\Repositories\Custom\HelloTechno\ReceiptIssuingOrderRepositoryData as RDATA;
- use App\Repositories\Custom\HelloTechno\UseSummaryRepository;
- use App\Util\DateUtil;
- use Illuminate\Http\Request;
- use Illuminate\Support\Str;
- use Symfony\Component\HttpFoundation\BinaryFileResponse;
-
- class UseSummaryCSVController extends HelloTechnoController
- {
-
- use LoginUser;
-
- public function name(): string
- {
- return "[HelloTechno専用]利用実績一覧CSV取得";
- }
-
- public function description(): string
- {
- return "[HelloTechno専用]利用実績の一覧CSVを取得する";
- }
-
- public function __construct(
- protected UseSummaryCSVParam $param,
- private ReceiptIssuingOrderRepository $receiptIssuingOrderRepository,
- private UseSummaryRepository $useSummaryRepository,
- ) {
- parent::__construct();
- $this->roleAllow(UserRole::NORMAL_ADMIN);
- }
-
- protected function getParam(): IParam
- {
- return $this->param;
- }
-
- protected function run(Request $request): BinaryFileResponse
- {
- $param = $this->param;
-
- // データ取得
- $condition = [
- UseSummaryRepository::CONDITION_CONTRACT_ID => $this->loginUser()->getCurrentContractId(),
- UseSummaryRepository::CONDITION_SORT_TARGET => 'customer_code',
- ReceiptIssuingOrderRepository::CONDITION_ORDER_DATE_FROM => $param->dateFrom,
- ReceiptIssuingOrderRepository::CONDITION_ORDER_DATE_TO => $param->dateTo,
- UseSummaryRepository::CONDITION_ORDER_DATE_FROM => $param->dateFrom,
- UseSummaryRepository::CONDITION_ORDER_DATE_TO => $param->dateTo,
- UseSummaryRepository::CONDITION_CUSTOMER_CODE => $param->customerCode,
-
- ];
- $receiptIssuingOrderList = $this->receiptIssuingOrderRepository->get([
- ...$condition,
- UseSummaryRepository::CONDITION_SORT_TARGET => ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME,
- UseSummaryRepository::CONDITION_SORT_ORDER => UseSummaryRepository::ORDER_ASC,
- ]);
- $summaryList = $this->useSummaryRepository->get($condition);
-
- // CSVファイル作成
- // 領収証発行依頼データ
- $csv = new CsvFile($this->getReceiptIssuingOrdersLabel(), CsvFile::ENCODE_SJIS);
- $sortDef = array_keys($this->getReceiptIssuingOrdersLabel());
- foreach ($receiptIssuingOrderList as $row) {
- $csv->addLine($row->toArray(), $sortDef);
- }
-
-
- // 集計データ
- $csv->addLine([]);
- $csv->addLine($this->getSummaryHeaderLabels());
- $sortDef = array_keys($this->getSummaryHeaderLabels());
- $customerName = "xx";
- foreach ($summaryList as $row) {
- $csv->addLine($row->toArray(), $sortDef);
- $customerName = $row->customer_name;
- }
- return $csv->download($this->getDownloadFileName($customerName));
- }
- private function getReceiptIssuingOrdersLabel(): array
- {
- return [
- RDATA::COL_NAME_ORDER_DATETIME => '受付時刻',
- RDATA::COL_NAME_STATUS_NAME => 'ステータス',
- RDATA::COL_NAME_PARKING_NAME => '駐車場名',
- RDATA::COL_NAME_RECEIPT_USE_DATE => '利用日',
- RDATA::COL_NAME_ADJUST_SEQ_NO => '精算連番',
- RDATA::COL_NAME_RECEIPT_AMOUNT => '金額',
- RDATA::COL_NAME_RECEIPT_NAME => '宛名',
- RDATA::COL_NAME_STATUS_DONE => '完了',
- RDATA::COL_NAME_RECEIPT_NO => '領収証番号',
-
- // アクション日付
- RDATA::COL_NAME_SMS_PHONE_NUMBER => 'SMS送信先',
- RDATA::COL_NAME_STATUS_SMS_SEND_DATETIME => 'SMS送信日時',
- RDATA::COL_NAME_STATUS_FIRST_ACCESS_DATETIME => '初回アクセス日時',
- RDATA::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME => '領収証確定日時',
- RDATA::COL_NAME_STATUS_ORDER_MAIL_DATETIME => '郵送依頼日時',
- RDATA::COL_NAME_STATUS_MAIL_POST_DATE => '投函日',
- RDATA::COL_NAME_STATUS_RECEIPT_DOWNLOAD_DATETIME => '領収証ダウンロード日時',
- RDATA::COL_NAME_STATUS_RECEIPT_EMAIL_SEND_ORDER_DATETIME => 'EMAIL送信依頼日時',
- RDATA::COL_NAME_STATUS_RECEIPT_EMAIL_SEND_DATETIME => 'EMAIL送信日時',
-
- // 郵送先
- RDATA::COL_NAME_MAIL_ZIP_CODE => '郵便番号',
- RDATA::COL_NAME_MAIL_ADDRESS1 => '住所1',
- RDATA::COL_NAME_MAIL_ADDRESS2 => '住所2',
- RDATA::COL_NAME_MAIL_ADDRESS3 => '住所3',
- RDATA::COL_NAME_MAIL_NAME => '郵送宛名',
-
-
- ];
- }
-
- private function getSummaryHeaderLabels(): array
- {
- return [
- 'date_from' => '開始年月日',
- 'date_to' => '終了年月日',
- 'customer_name' => '顧客名',
- 'receipt_order_count' => '領収証発行依頼件数',
- 'mail_order_count' => '郵送依頼件数',
- 'sms_send_count' => 'SMS送信件数',
- ];
- }
-
- private function getDownloadFileName(string $customerName)
- {
-
- $customerName = Str::of($customerName)->remove(" ")->remove(" ")->toString();
- $param = $this->param;
- return sprintf(
- "利用実績_%s_%s_%s_%s.csv",
- $customerName,
- $param->dateFrom->format('Ymd'),
- $param->dateTo->format('Ymd'),
- DateUtil::now()->format('YmdHis')
- );
- }
- }
|