Browse Source

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

develop
sosuke.iwabuchi 2 years ago
parent
commit
9584f9b94a
10 changed files with 312 additions and 20 deletions
  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 View File

@@ -1,6 +1,6 @@
<?php <?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\IParam;
use App\Http\Controllers\Web\WebController; use App\Http\Controllers\Web\WebController;

app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadLetterParam.php → app/Http/Controllers/Web/Custom/HelloTechno/DownloadLetterParam.php View File

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


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


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

+ 98
- 0
app/Http/Controllers/Web/Custom/HelloTechno/DownloadLettersController.php View File

@@ -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 View File

@@ -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 View File

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


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


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

public function initByToken(string $token) public function initByToken(string $token)
{ {
parent::initByToken($token); parent::initByToken($token);
@@ -32,11 +41,45 @@ class PDFDownLoadManagerHelloTechno extends PDFDownLoadManager
return $this; 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 [ return [
...parent::getPDFData(),
...$this->customOrder->toArray(),
...$p,
...$c,
]; ];
} }
} }

+ 17
- 11
app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php View File

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


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



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


public function downlaodA4() public function downlaodA4()
{ {
@@ -78,18 +82,20 @@ class PDFDownLoadManager extends ReceiptIssuingOrderManager
return $ret; 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 [ 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 View File

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


class UpdateManager extends ReceiptIssuingOrderManager class UpdateManager extends ReceiptIssuingOrderManager
{ {
use InstanceAble;


public function __construct( public function __construct(
protected ReceiptIssuingOrder $order, protected ReceiptIssuingOrder $order,
@@ -68,10 +70,14 @@ class UpdateManager extends ReceiptIssuingOrderManager
*/ */
public function mailPosted(Carbon $postDate): static 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; return $this;
} }


+ 23
- 0
app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php View File

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


const CONDITION_RECEIPT_NO = 'receipt_no'; const CONDITION_RECEIPT_NO = 'receipt_no';


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

const TABLE_ORDER = "order"; const TABLE_ORDER = "order";
const TABLE_CUSTOM_ORDER = "custom_order"; const TABLE_CUSTOM_ORDER = "custom_order";
const TABLE_HANDLER = "handler"; 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])); $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()); $table->select($this->columns());




+ 103
- 0
resources/views/pdf/receipt_letters.blade.php View File

@@ -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 View File

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


Loading…
Cancel
Save