diff --git a/app/Codes/PrefCode.php b/app/Codes/PrefCode.php index caba7c5..7c9ccc8 100644 --- a/app/Codes/PrefCode.php +++ b/app/Codes/PrefCode.php @@ -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, ""); } diff --git a/app/Codes/TaxRate.php b/app/Codes/TaxRate.php new file mode 100644 index 0000000..fae3123 --- /dev/null +++ b/app/Codes/TaxRate.php @@ -0,0 +1,12 @@ +manager->init() ->fill($orderData) + ->setTax(TaxRate::DEFAULT->value, $param->taxAmount) ->create(); if (count($messages) !== 0) { diff --git a/app/Http/Controllers/Web/Custom/HelloTechno/CreateReceiptIssuingOrderParam.php b/app/Http/Controllers/Web/Custom/HelloTechno/CreateReceiptIssuingOrderParam.php index 06f8886..50cba5a 100644 --- a/app/Http/Controllers/Web/Custom/HelloTechno/CreateReceiptIssuingOrderParam.php +++ b/app/Http/Controllers/Web/Custom/HelloTechno/CreateReceiptIssuingOrderParam.php @@ -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(), ]; } diff --git a/app/Logic/ReceiptIssuingOrder/CreateManager.php b/app/Logic/ReceiptIssuingOrder/CreateManager.php index 4427d8e..23eb501 100644 --- a/app/Logic/ReceiptIssuingOrder/CreateManager.php +++ b/app/Logic/ReceiptIssuingOrder/CreateManager.php @@ -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 + */ + 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(); diff --git a/app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php b/app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php index bf4b8ad..7ad3132 100644 --- a/app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php +++ b/app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php @@ -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)), ]; } } diff --git a/app/Models/ReceiptIssuingOrder.php b/app/Models/ReceiptIssuingOrder.php index 32c4dee..4b32a93 100644 --- a/app/Models/ReceiptIssuingOrder.php +++ b/app/Models/ReceiptIssuingOrder.php @@ -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); + } } diff --git a/app/Models/ReceiptIssuingOrderTax.php b/app/Models/ReceiptIssuingOrderTax.php new file mode 100644 index 0000000..2e235c3 --- /dev/null +++ b/app/Models/ReceiptIssuingOrderTax.php @@ -0,0 +1,19 @@ +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]), ]; diff --git a/database/migrations/2023_06_26_141400_create_receipt_issuing_order_taxes_table.php b/database/migrations/2023_06_26_141400_create_receipt_issuing_order_taxes_table.php new file mode 100644 index 0000000..5b51899 --- /dev/null +++ b/database/migrations/2023_06_26_141400_create_receipt_issuing_order_taxes_table.php @@ -0,0 +1,45 @@ +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]); + }; + } +}; diff --git a/resources/views/pdf/receipt_a4.blade.php b/resources/views/pdf/receipt_a4.blade.php index 03907c0..ff97e01 100644 --- a/resources/views/pdf/receipt_a4.blade.php +++ b/resources/views/pdf/receipt_a4.blade.php @@ -36,7 +36,7 @@
- 内消費税 ¥160- + 内消費税 ¥{{ $tax_amount }} -

但し {{ $receipt_purpose }}として

diff --git a/resources/views/pdf/receipt_letter.blade.php b/resources/views/pdf/receipt_letter.blade.php index 62a3cef..45a11da 100644 --- a/resources/views/pdf/receipt_letter.blade.php +++ b/resources/views/pdf/receipt_letter.blade.php @@ -62,7 +62,7 @@
¥{{ $receipt_amount }} - 
-
内消費税 ¥XXX- (10%対象)
+
内消費税 ¥{{ $tax_amount }}- (10%対象)