소스 검색

はがき一括ダウンロード対応

develop
sosuke.iwabuchi 2 년 전
부모
커밋
9584f9b94a
10개의 변경된 파일312개의 추가작업 그리고 20개의 파일을 삭제
  1. +1
    -1
      app/Http/Controllers/Web/Custom/HelloTechno/DownloadLetterController.php
  2. +1
    -1
      app/Http/Controllers/Web/Custom/HelloTechno/DownloadLetterParam.php
  3. +98
    -0
      app/Http/Controllers/Web/Custom/HelloTechno/DownloadLettersController.php
  4. +12
    -0
      app/Http/Controllers/Web/Custom/HelloTechno/DownloadLettersParam.php
  5. +46
    -3
      app/Logic/ReceiptIssuingOrder/Custom/HelloTechno/PDFDownLoadManagerHelloTechno.php
  6. +17
    -11
      app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php
  7. +9
    -3
      app/Logic/ReceiptIssuingOrder/UpdateManager.php
  8. +23
    -0
      app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php
  9. +103
    -0
      resources/views/pdf/receipt_letters.blade.php
  10. +2
    -1
      routes/web.php

app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadLetterController.php → app/Http/Controllers/Web/Custom/HelloTechno/DownloadLetterController.php 파일 보기

@@ -1,6 +1,6 @@
<?php

namespace App\Http\Controllers\Web\ReceiptIssuingOrder;
namespace App\Http\Controllers\Web\Custom\HelloTechno;

use App\Http\Controllers\Web\IParam;
use App\Http\Controllers\Web\WebController;

app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadLetterParam.php → app/Http/Controllers/Web/Custom/HelloTechno/DownloadLetterParam.php 파일 보기

@@ -1,6 +1,6 @@
<?php

namespace App\Http\Controllers\Web\ReceiptIssuingOrder;
namespace App\Http\Controllers\Web\Custom\HelloTechno;

use App\Http\Controllers\Web\BaseParam;
use App\Models\ReceiptIssuingOrder;

+ 98
- 0
app/Http/Controllers/Web/Custom/HelloTechno/DownloadLettersController.php 파일 보기

@@ -0,0 +1,98 @@
<?php

namespace App\Http\Controllers\Web\Custom\HelloTechno;

use App\Codes\UserRole;
use App\Exceptions\AppCommonException;
use App\Features\LoginUser;
use App\Http\Controllers\Web\IParam;
use App\Http\Controllers\Web\WebController;
use App\Logic\ReceiptIssuingOrder\Custom\HelloTechno\PDFDownLoadManagerHelloTechno;
use App\Logic\ReceiptIssuingOrder\UpdateManager;
use App\Models\ColumnName;
use App\Models\ReceiptIssuingOrder;
use App\Repositories\Custom\HelloTechno\ReceiptIssuingOrderRepository;
use App\Util\DateUtil;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Arr;

class DownloadLettersController extends HelloTechnoController
{

use LoginUser;

public function name(): string
{
return "領収証PDFダウンロード(複数)";
}

public function description(): string
{
return "領収証PDFダウンロードする(複数)";
}

public function __construct(
protected DownloadLettersParam $param,
private ReceiptIssuingOrderRepository $repository,
private PDFDownLoadManagerHelloTechno $manager
) {
parent::__construct();
$this->roleAllow(UserRole::NORMAL_ADMIN);
}

protected function getParam(): IParam
{
return $this->param;
}

protected function run(Request $request): Response
{
$param = $this->param;

$a = $param->toArray();
try {
$this->transaction->beginTransaction();

$targets = $this->repository->get(
[
...$param->toArray(),
ReceiptIssuingOrderRepository::CONDITION_CONTRACT_ID => $this->loginUser()->getCurrentContractId(),
ReceiptIssuingOrderRepository::CONDITION_IS_CONFIRMED => true,
ReceiptIssuingOrderRepository::CONDITION_HAS_MAILORDER => true,
]
);
$models = ReceiptIssuingOrder::findMany(Arr::pluck($targets, ReceiptIssuingOrder::COL_NAME_ID));

$documents = $this->manager->initForDownloadLetters()->downlaodLetters($models);

$this->updatePostDate($models);

$this->transaction->commit();
} catch (Exception $e) {
$this->transaction->rollBack();
throw $e;
}


return $documents;
}

private function updatePostDate(Collection $models)
{

foreach ($models as $order) {

$manager = UpdateManager::instance();

$messages = $manager->initById($order->id)
->mailPosted(DateUtil::now())
->update();

if (count($messages) !== 0) {
throw new AppCommonException(Arr::first($messages));
}
}
}
}

+ 12
- 0
app/Http/Controllers/Web/Custom/HelloTechno/DownloadLettersParam.php 파일 보기

@@ -0,0 +1,12 @@
<?php

namespace App\Http\Controllers\Web\Custom\HelloTechno;

use App\Models\ReceiptIssuingOrder;

/**
* @property string $id
*/
class DownloadLettersParam extends ReceiptIssuingsOrdersParam
{
}

+ 46
- 3
app/Logic/ReceiptIssuingOrder/Custom/HelloTechno/PDFDownLoadManagerHelloTechno.php 파일 보기

@@ -5,6 +5,9 @@ namespace App\Logic\ReceiptIssuingOrder\Custom\HelloTechno;;
use App\Logic\ReceiptIssuingOrder\PDFDownLoadManager;
use App\Models\ReceiptIssuingHTParkingCustomOrder;
use App\Models\ReceiptIssuingOrder;
use App\Util\DateUtil;
use Illuminate\Database\Eloquent\Collection;
use PDF;

class PDFDownLoadManagerHelloTechno extends PDFDownLoadManager
{
@@ -16,6 +19,12 @@ class PDFDownLoadManagerHelloTechno extends PDFDownLoadManager
parent::__construct($order);
}

public function initForDownloadLetters()
{
$this->initialized = true;
return $this;
}

public function initByToken(string $token)
{
parent::initByToken($token);
@@ -32,11 +41,45 @@ class PDFDownLoadManagerHelloTechno extends PDFDownLoadManager
return $this;
}

protected function getPDFData()
/**
* @param Collection<int, ReceiptIssuingOrder> $list
*/
public function downlaodLetters(Collection $list)
{

$data = [];
foreach ($list as $ele) {
$data[] = $this->getPDFData($ele);
}

$pdf = PDF::loadView('pdf/receipt_letters', [
'orders' => $data
]);
// はがきサイズを指定
$ret = $pdf->setOption('page-height', 148)
->setOption('page-width', 100)
->setOption('encoding', 'utf-8')
->inline();




return $ret;
}

protected function getPDFData(?ReceiptIssuingOrder $order = null)
{

$p = parent::getPDFData($order);
if ($order !== null) {
$c = ReceiptIssuingHTParkingCustomOrder::whereReceiptIssuingOrderId($order->id)->firstOrFail()->toArray();
} else {
$c = $this->customOrder->toArray();
}

return [
...parent::getPDFData(),
...$this->customOrder->toArray(),
...$p,
...$c,
];
}
}

+ 17
- 11
app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php 파일 보기

@@ -11,6 +11,7 @@ use App\Models\ReceiptIssuingOrder;
use App\Models\ReceiptIssuingOrderTax;
use App\Util\DateUtil;
use Barryvdh\Snappy\PdfWrapper;
use Illuminate\Database\Eloquent\Collection;
use PDF;

class PDFDownLoadManager extends ReceiptIssuingOrderManager
@@ -22,7 +23,10 @@ class PDFDownLoadManager extends ReceiptIssuingOrderManager
parent::__construct($order);
}


public function initForDownloadLetters()
{
$this->initialized = true;
}

public function downlaodA4()
{
@@ -78,18 +82,20 @@ class PDFDownLoadManager extends ReceiptIssuingOrderManager
return $ret;
}

protected function getPDFData()
protected function getPDFData(?ReceiptIssuingOrder $order = null)
{
$o = $this->order;
$tax = $o->receiptIssuingOrderTaxes->firstOrFail();
if ($order === null) {
$order = $this->order;
}
$tax = $order->receiptIssuingOrderTaxes->first() ?? new ReceiptIssuingOrderTax();
return [
...$this->order->toArray(),
ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME => $o->status_receipt_confirm_datetime->format('Y/m/d'),
ReceiptIssuingOrder::COL_NAME_RECEIPT_USE_DATE => $o->receipt_use_date->format('Y/m/d'),
ReceiptIssuingOrder::COL_NAME_RECEIPT_AMOUNT => number_format($o->receipt_amount),
'pref_name' => PrefCode::getName($o->mail_pref_code),
ReceiptIssuingOrderTax::COL_NAME_TAX_RATE => data_get($tax, ReceiptIssuingOrderTax::COL_NAME_TAX_RATE, 0),
ReceiptIssuingOrderTax::COL_NAME_TAX_AMOUNT => number_format(data_get($tax, ReceiptIssuingOrderTax::COL_NAME_TAX_AMOUNT, 0)),
...$order->toArray(),
ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME => $order->status_receipt_confirm_datetime->format('Y/m/d'),
ReceiptIssuingOrder::COL_NAME_RECEIPT_USE_DATE => $order->receipt_use_date->format('Y/m/d'),
ReceiptIssuingOrder::COL_NAME_RECEIPT_AMOUNT => number_format($order->receipt_amount),
'pref_name' => PrefCode::getName($order->mail_pref_code),
ReceiptIssuingOrderTax::COL_NAME_TAX_RATE => data_get($tax, ReceiptIssuingOrderTax::COL_NAME_TAX_RATE, 0) ?? 0,
ReceiptIssuingOrderTax::COL_NAME_TAX_AMOUNT => number_format(data_get($tax, ReceiptIssuingOrderTax::COL_NAME_TAX_AMOUNT, 0)) ?? 0,
];
}
}

+ 9
- 3
app/Logic/ReceiptIssuingOrder/UpdateManager.php 파일 보기

@@ -9,6 +9,7 @@ use App\Events\ReceiptIssuingOrder\EmailOrderEvent;
use App\Events\ReceiptIssuingOrder\MailOrderEvent;
use App\Events\ReceiptIssuingOrder\MailPostedEvent;
use App\Exceptions\AppCommonException;
use App\Features\InstanceAble;
use App\Files\PDF\Receipt\A4Receipt;
use App\Jobs\ReceiptIssuingOrder\PollEmailSendStatus;
use App\Logic\EmailManager;
@@ -21,6 +22,7 @@ use LogicException;

class UpdateManager extends ReceiptIssuingOrderManager
{
use InstanceAble;

public function __construct(
protected ReceiptIssuingOrder $order,
@@ -68,10 +70,14 @@ class UpdateManager extends ReceiptIssuingOrderManager
*/
public function mailPosted(Carbon $postDate): static
{
$this->order->status_mail_post_date = $postDate;

// イベント登録
MailPostedEvent::dispatch($this->order);
if ($this->order->status_mail_post_date === null) {
// ステータス更新
$this->order->status_mail_post_date = $postDate;

// イベント登録
MailPostedEvent::dispatch($this->order);
}

return $this;
}


+ 23
- 0
app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php 파일 보기

@@ -39,6 +39,9 @@ class ReceiptIssuingOrderRepository extends BaseRepository

const CONDITION_RECEIPT_NO = 'receipt_no';

const CONDITION_IS_CONFIRMED = 'is_confirmed';
const CONDITION_HAS_MAILORDER = 'has_mailorder';

const TABLE_ORDER = "order";
const TABLE_CUSTOM_ORDER = "custom_order";
const TABLE_HANDLER = "handler";
@@ -138,6 +141,26 @@ class ReceiptIssuingOrderRepository extends BaseRepository
// 領収証番号
$this->where($table, $condition, static::CONDITION_RECEIPT_NO, $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_RECEIPT_NO]));

// 確定済み
$isConfirmed = data_get($condition, static::CONDITION_IS_CONFIRMED);
if ($isConfirmed !== null) {
if ($isConfirmed === true) {
$table->whereNotNull($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME]));
} else if ($isConfirmed === false) {
$table->whereNull($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME]));
}
}

// 郵送依頼あり
$hasMailOrder = data_get($condition, static::CONDITION_HAS_MAILORDER);
if ($hasMailOrder !== null) {
if ($hasMailOrder === true) {
$table->whereNotNull($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_ORDER_MAIL_DATETIME]));
} else if ($hasMailOrder === false) {
$table->whereNull($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_ORDER_MAIL_DATETIME]));
}
}


$table->select($this->columns());



+ 103
- 0
resources/views/pdf/receipt_letters.blade.php 파일 보기

@@ -0,0 +1,103 @@
<!DOCTYPE html>
<html lang="ja">

<head>
<meta charset="utf-8">
<title>領収証</title>
<style>

</style>
<link rel="stylesheet" href="{{ resource_path('css/receipt_common.css') }}">
<link rel="stylesheet" href="{{ resource_path('css/receipt_letter.css') }}">
</head>

<body>

@foreach($orders as $order)
<section class="page">
<div class="section-address">
<div class="address-field">

<div class="zipcode">〒{{ sprintf("%s-%s", substr($order['mail_zip_code'], 0, 3), substr($order['mail_zip_code'], 3) ) }}</div>
<div class="address">
{{ $order['pref_name'] }}
</div>
@if($order['mail_address1'])
<div class="address">
{{ $order['mail_address1'] }}
</div>
@endif
@if($order['mail_address2'])
<div class="address">
{{ $order['mail_address2'] }}
</div>
@endif
@if($order['mail_address3'])
<div class="address">
{{ $order['mail_address3'] }}
</div>
@endif
<div class="name">
{{ $order['mail_name'] }} 様
</div>
</div>
</div>
<hr />
<div class="section-receipt">
<div class="container header">
<div class="item " style="width:13mm">
<h2></h2>
</div>
<div class="item tc" style="width:40mm">
<h2>領収証</h2>
</div>
<div class="item" style="width:40mm">
<div style="font-size: 3.5mm;">
<div>発行日 {{ $order['status_receipt_confirm_datetime'] }}</div>
<div>No {{ $order['receipt_no'] }}</div>
</div>
</div>
</div>
<div class="name tc pt10 underline">{{ $order['receipt_name'] }} 様</div>
<div class="pt5 f35">利用日 {{ $order['receipt_use_date'] }}</div>
<div class="container mt5">

<div class="pt1 tc f5 b underline item ml10">
¥{{ $order['receipt_amount'] }} -&nbsp;
</div>
<div class="item ml3 f3"> 内消費税 ¥{{ $order['tax_amount'] }}- (10%対象)</div>
</div>
</div>
<div class="pt3 f35 ">
但し、{{ $order['parking_name'] }}
</div>
<div class="f35 ">
{{ $order['receipt_purpose'] }}として
</div>
<div class="pt1 f35 ">上記正に領収いたしました。</div>
<div class="pt2 f35 ">運営会社 {{ $order['customer_name'] }}</div>
<div class="pt1 f35 ">インボイス登録番号 {{ $order['receipt_invoice_no'] }}</div>
<div class="pt3 f35 ">発行元及び返送先</div>
<div class="pt1 container f35">
<div class="item vt">〒550-0014</div>
<div class="item">
<div>
大阪府大阪市西区北堀江2-2-25
</div>
<div>
久慈ビル南館5階
</div>
<div class="pt3 f5 b">ハローテクノ株式会社</div>
<div class="container">

<div class="item f3" style="padding-right: 10mm;">TEL:06-7638-6575</div>
<div class="item f3">FAX:06-6536-5600</div>
</div>
</div>
</div>
</section>
@endforeach

</body>

</html>

+ 2
- 1
routes/web.php 파일 보기

@@ -21,7 +21,8 @@ RouteHelper::post('/receiptIssuingOrder/create', App\Http\Controllers\Web\Receip

// 領収証ダウンロード
RouteHelper::get('/receipt/download', App\Http\Controllers\Web\ReceiptIssuingOrder\DownloadController::class);
RouteHelper::get('/receipt-letter/download', App\Http\Controllers\Web\ReceiptIssuingOrder\DownloadLetterController::class);
RouteHelper::get('/custom/hello-techno/receipt-letter/download', App\Http\Controllers\Web\Custom\HelloTechno\DownloadLetterController::class);
RouteHelper::get('/custom/hello-techno/receipt-letters/download', App\Http\Controllers\Web\Custom\HelloTechno\DownloadLettersController::class);

// CSVダウンロード
RouteHelper::get('/custom/hello-techno/use-summary/csv', App\Http\Controllers\Web\Custom\HelloTechno\UseSummaryCSVController::class);


Loading…
취소
저장