Ver código fonte

消費税対応

develop
sosuke.iwabuchi 2 anos atrás
pai
commit
ce43d5463a
13 arquivos alterados com 146 adições e 4 exclusões
  1. +2
    -1
      app/Codes/PrefCode.php
  2. +12
    -0
      app/Codes/TaxRate.php
  3. +2
    -0
      app/Http/Controllers/Web/Custom/HelloTechno/CreateReceiptIssuingOrderController.php
  4. +3
    -0
      app/Http/Controllers/Web/Custom/HelloTechno/CreateReceiptIssuingOrderParam.php
  5. +28
    -0
      app/Logic/ReceiptIssuingOrder/CreateManager.php
  6. +4
    -0
      app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php
  7. +6
    -0
      app/Models/ReceiptIssuingOrder.php
  8. +19
    -0
      app/Models/ReceiptIssuingOrderTax.php
  9. +12
    -0
      app/Models/ReceiptIssuingOrderTaxHistory.php
  10. +11
    -1
      app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php
  11. +45
    -0
      database/migrations/2023_06_26_141400_create_receipt_issuing_order_taxes_table.php
  12. +1
    -1
      resources/views/pdf/receipt_a4.blade.php
  13. +1
    -1
      resources/views/pdf/receipt_letter.blade.php

+ 2
- 1
app/Codes/PrefCode.php Ver arquivo

@@ -121,8 +121,9 @@ enum PrefCode: string
return $ret;
}

static public function getName(PrefCode $code)
static public function getName(?PrefCode $code)
{
if ($code === null) return "";
$dic = self::getDictionary();
return data_get($dic, $code->value, "");
}


+ 12
- 0
app/Codes/TaxRate.php Ver arquivo

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

namespace App\Codes;

/**
* 消費税率
*/
enum TaxRate: int
{
case DEFAULT = 10;
case REDUCED = 8;
}

+ 2
- 0
app/Http/Controllers/Web/Custom/HelloTechno/CreateReceiptIssuingOrderController.php Ver arquivo

@@ -2,6 +2,7 @@

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

use App\Codes\TaxRate;
use App\Codes\UserRole;
use App\Http\Controllers\Web\IParam;
use App\Http\Controllers\Web\WebController;
@@ -73,6 +74,7 @@ class CreateReceiptIssuingOrderController extends HelloTechnoController

$messages = $this->manager->init()
->fill($orderData)
->setTax(TaxRate::DEFAULT->value, $param->taxAmount)
->create();

if (count($messages) !== 0) {


+ 3
- 0
app/Http/Controllers/Web/Custom/HelloTechno/CreateReceiptIssuingOrderParam.php Ver arquivo

@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Web\Custom\HelloTechno;
use App\Http\Controllers\Web\BaseParam;
use App\Models\ReceiptIssuingOrder;
use App\Models\ReceiptIssuingHTParkingCustomOrder as HT;
use App\Models\ReceiptIssuingOrderTax;
use App\Rules\PhoneNumber;
use Carbon\Carbon;

@@ -16,6 +17,7 @@ use Carbon\Carbon;
* @property int $receiptAmount
* @property ?string $memo
* @property string $smsPhoneNumber
* @property int $taxAmount
*/

class CreateReceiptIssuingOrderParam extends BaseParam
@@ -30,6 +32,7 @@ class CreateReceiptIssuingOrderParam extends BaseParam
ReceiptIssuingOrder::COL_NAME_RECEIPT_AMOUNT => $this->numeric(['min:0', 'max:999999']),
ReceiptIssuingOrder::COL_NAME_MEMO => $this->text(true),
ReceiptIssuingOrder::COL_NAME_SMS_PHONE_NUMBER => $this->str([new PhoneNumber()]),
ReceiptIssuingOrderTax::COL_NAME_TAX_AMOUNT => $this->numeric(),

];
}


+ 28
- 0
app/Logic/ReceiptIssuingOrder/CreateManager.php Ver arquivo

@@ -7,7 +7,9 @@ use App\Codes\SMSSendPurpose;
use App\Events\ReceiptIssuingOrder\CreatedEvent;
use App\Logic\SMS\SMSManager;
use App\Models\ReceiptIssuingOrder;
use App\Models\ReceiptIssuingOrderTax;
use App\Util\DateUtil;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Str;
use LogicException;
@@ -15,11 +17,17 @@ use LogicException;
class CreateManager extends ReceiptIssuingOrderManager
{

/**
* @var Collection<ReceiptIssuingOrderTax>
*/
protected Collection $taxes;

public function __construct(
protected ReceiptIssuingOrder $order,
protected SMSManager $smsManager
) {
parent::__construct($order);
$this->taxes = new Collection();
}

public function init()
@@ -42,6 +50,18 @@ class CreateManager extends ReceiptIssuingOrderManager
return $this;
}

public function setTax(int $rate, int $amount): static
{

$tax = new ReceiptIssuingOrderTax();
$tax->tax_rate = $rate;
$tax->tax_amount = $amount;

$this->taxes->push($tax);

return $this;
}

public function create(): array
{
$order = $this->order;
@@ -65,6 +85,14 @@ class CreateManager extends ReceiptIssuingOrderManager
$this->save();


// 消費税保存
foreach ($this->taxes as $tax) {
$tax->setContract($order->contract_id)
->setReceiptIssuingOrder($this->order->id)
->save();
}


// SMS配信
$smsSendOrder = $this->smsManager::makeSMSSendOrder($order, SMSSendPurpose::SEND_RECEIPT_ISSUING_ORDER_FORM, $this->makeSMSContents());
$smsSendOrder->send();


+ 4
- 0
app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php Ver arquivo

@@ -6,6 +6,7 @@ use App\Codes\PrefCode;
use App\Events\ReceiptIssuingOrder\DownloadedEvent;
use App\Exceptions\AppCommonException;
use App\Models\ReceiptIssuingOrder;
use App\Models\ReceiptIssuingOrderTax;
use App\Util\DateUtil;
use PDF;

@@ -59,12 +60,15 @@ class PDFDownLoadManager extends ReceiptIssuingOrderManager
protected function getPDFData()
{
$o = $this->order;
$tax = $o->receiptIssuingOrderTaxes->firstOrFail();
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)),
];
}
}

+ 6
- 0
app/Models/ReceiptIssuingOrder.php Ver arquivo

@@ -4,6 +4,7 @@ namespace App\Models;

use App\Codes\PrefCode;
use App\Models\Feature\ContractFeature;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOne;

class ReceiptIssuingOrder extends AppModel
@@ -73,4 +74,9 @@ class ReceiptIssuingOrder extends AppModel
{
return $this->hasOne(ReceiptIssuingHTParkingCustomOrder::class);
}

public function receiptIssuingOrderTaxes(): HasMany
{
return $this->hasMany(ReceiptIssuingOrderTax::class);
}
}

+ 19
- 0
app/Models/ReceiptIssuingOrderTax.php Ver arquivo

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

namespace App\Models;

use App\Models\Feature\ContractFeature;
use App\Models\Feature\ReceiptIssuingOrderFeature;

class ReceiptIssuingOrderTax extends AppModel
{
use ContractFeature, ReceiptIssuingOrderFeature;

const COL_NAME_TAX_RATE = "tax_rate";
const COL_NAME_TAX_AMOUNT = "tax_amount";

public function getModelName(): string
{
return "領収証発行依頼_消費税";
}
}

+ 12
- 0
app/Models/ReceiptIssuingOrderTaxHistory.php Ver arquivo

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

namespace App\Models;


class ReceiptIssuingOrderTaxHistory extends HistoryModel
{
public function getModelName(): string
{
return "領収証発行依頼_消費税履歴";
}
}

+ 11
- 1
app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php Ver arquivo

@@ -4,6 +4,7 @@ namespace App\Repositories\Custom\HelloTechno;

use App\Models\ReceiptIssuingHTParkingCustomOrder as CustomOrder;
use App\Models\ReceiptIssuingOrder;
use App\Models\ReceiptIssuingOrderTax;
use App\Models\User;
use App\Repositories\BaseRepository;
use Illuminate\Database\Query\JoinClause;
@@ -40,6 +41,7 @@ class ReceiptIssuingOrderRepository extends BaseRepository
const TABLE_ORDER = "order";
const TABLE_CUSTOM_ORDER = "custom_order";
const TABLE_HANDLER = "handler";
const TABLE_TAX = "tax";


/**
@@ -65,6 +67,12 @@ class ReceiptIssuingOrderRepository extends BaseRepository
$this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_HANDLER_ID]),
$this->makeColumnName([static::TABLE_HANDLER, CustomOrder::COL_NAME_ID])
);
})
->leftJoinSub(ReceiptIssuingOrderTax::getBuilder(), static::TABLE_TAX, function (JoinClause $join) {
$join->on(
$this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ID]),
$this->makeColumnName([static::TABLE_TAX, ReceiptIssuingOrderTax::COL_NAME_RECEIPT_ISSUING_ORDER_ID])
);
});

// -----検索条件
@@ -150,6 +158,7 @@ class ReceiptIssuingOrderRepository extends BaseRepository
$order = static::TABLE_ORDER;
$custom = static::TABLE_CUSTOM_ORDER;
$handler = static::TABLE_HANDLER;
$tax = static::TABLE_TAX;
$columns = [
$this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ID], 'id'),
$this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_NAME], 'status_name'),
@@ -194,7 +203,8 @@ class ReceiptIssuingOrderRepository extends BaseRepository
$this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_ADJUST_SEQ_NO]),
$this->makeColumnNameForSelect([$handler, User::COL_NAME_ID], 'handler_id'),
$this->makeColumnNameForSelect([$handler, User::COL_NAME_NAME], 'handler_name'),

$this->makeColumnNameForSelect([$tax, ReceiptIssuingOrderTax::COL_NAME_TAX_RATE]),
$this->makeColumnNameForSelect([$tax, ReceiptIssuingOrderTax::COL_NAME_TAX_AMOUNT]),
];




+ 45
- 0
database/migrations/2023_06_26_141400_create_receipt_issuing_order_taxes_table.php Ver arquivo

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

use App\Models\ColumnName;
use App\Util\MigrationHelper;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{

MigrationHelper::createTable('receipt_issuing_order_taxes', $this->schema());
MigrationHelper::createTable('receipt_issuing_order_tax_histories', $this->schema(true));
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('receipt_issuing_order_taxes');
Schema::dropIfExists('receipt_issuing_order_tax_histories');
}

private function schema(bool $forHistory = false)
{

return function (Blueprint $table, MigrationHelper $helper) use ($forHistory) {
$helper->baseColumn()
->contractId()
->receiptIssuingOrderId();

$table->unsignedInteger("tax_rate")->default(0)->comment("消費税率");
$table->unsignedInteger("tax_amount")->default(0)->comment("消費税");

$helper->index(1, [ColumnName::CONTRACT_ID]);
$helper->index(2, [ColumnName::RECEIPT_ISSUING_ORDER_ID]);
};
}
};

+ 1
- 1
resources/views/pdf/receipt_a4.blade.php Ver arquivo

@@ -36,7 +36,7 @@
</div>
</section>
<section class="amount_sub">
内消費税 ¥160-
内消費税 ¥{{ $tax_amount }} -
</section>
<section class="description">
<P>但し {{ $receipt_purpose }}として</P>


+ 1
- 1
resources/views/pdf/receipt_letter.blade.php Ver arquivo

@@ -62,7 +62,7 @@
<div class="pt1 tc f5 b underline item ml10">
¥{{ $receipt_amount }} -&nbsp;
</div>
<div class="item ml3 f3"> 内消費税 ¥XXX- (10%対象)</div>
<div class="item ml3 f3"> 内消費税 ¥{{ $tax_amount }}- (10%対象)</div>
</div>
</div>
<div class="pt3 f35 ">


Carregando…
Cancelar
Salvar