日割り計算


{success} アカウント停止の監理団体の当月費用支払い用請求データの請求料金の日割り計算を行います。


概要

毎日0時にアカウント停止の監理団体の当月費用支払い用請求データの請求料金の日割り計算を行います。

毎月1日のみ、この日割り計算バッチは実行しません。※1日は日割りではなく満額請求になるため日割り計算の必要がありません。

条件

日割り計算対象の請求データorganization_paymentsの対象レコード抽出条件は下記になります。

毎月1日は当月費用支払い額満額になるので、日次バッチは実行しません。

organization_paymentsテーブル

物理名 論理名 条件値 備考
payment_year 支払年 今年
payment_month 支払月 今月
payment_type 支払方法 10 : アカウント停止
status 請求状態 1 : 未入金
closed 請求データクローズフラグ 0
deleted_at 削除日時 null
SELECT *
  FROM organization_payments
 WHERE payment_year  = {today()->year}   -- 当年月のY
   AND payment_month = {today()->month}  -- 当年月のn
   AND payment_type = 10                 -- 請求種類が「10:アカウント停止」
   AND status = 1                        -- 1:未入金
   AND closed = 0                        -- 請求クローズフラグがfalse
   AND deleted_at is null

毎月1日にこの日次バッチを使用しないようにする制御はApp\Console\Commands\DailyBatchクラスのhandle()メソッド内で下記のように対応しております。

/**
 * Execute the console command.
 *
 * @return int
 */
public function handle()
{
    /* 月初は日次バッチの処理は行いません。 */
    if (today()->day == 1) {
        return;
    }

    // 日割り計算ジョブ
    CalcDailyRate::dispatch();
}

更新内容

organization_payments

物理名 論理名 更新値 備考
subtotal_amount 請求 小計 基本料金単価 x (残日数 / 今月の日数)を小数点以下切り捨て 税抜金額を計算して取得します。
tax 請求 消費税 税抜金額 x 0.1を小数点以下切り捨て 税抜金額より消費税10%で計算します。
total_amount 請求 合計 小計 + 消費税 小計と消費税の合計値。
is_annual_payment この請求データで基本料金年払いをするか? false 年払いの仕様があった時の名残。現在、当月費用発生するのは月払いのみなのでfalse固定。
payment_details 請求明細 (※)jsonなので、ここに書くと分かりにくいので表枠外に記述しています。 請求明細の値をjsonで登録します。
billing_period_from 請求対象期間 開始 今月1日の年月日
billing_period_until 請求対象期間 終了 今月の月末の年月日
total_amount_init 請求 合計 初期値 - App\Models\Eloquents\OrganizationPaymentクラスのsetPaymentAmountProperties()メソッドにはtotal_amount_initの値セットする記述ありますが、日割り計算のときはここのif文配下は通りません。

(※)請求明細payment_detailsに登録する明細の内容

[
    {
        "amount"     : 9800,                // 金額
        "quantity"   : 1,                   // 数量
        "item_name"  : "基本料金(月払い)",     // 品目
        "unit_price" : 9800                 // 単価
    },
    {
        "amount"     : 2000,            // 金額
        "quantity"   : 200,             // 数量
        "item_name"  : "従量課金額",      // 品目
        "unit_price" : 10               // 単価
    }
]

対象クラスファイル

App\Console\Kernelの設定値

$schedule->command('dailybatch:daily')->daily();

日次バッチ

日割り計算ジョブApp\Jobs\CalcDailyRateを実行します。

App\Console\Commands\DailyBatch

日割り計算ジョブ

条件に該当する請求データorganization_paymentsレコードの請求金額関連のカラムを更新します。

App\Jobs\CalcDailyRate