請求管理合計_API


概要

請求情報の集計結果を返却する API です。

パラメータでセットされた条件に該当する請求情報の

集計結果を計算して返却します。

日付は請求確定日で算出します。


エンドポイント

メソッド URI Headers
GET /api/claim/total/{year}/{month}?search={search} Default

リクエストパラメーター

パラメーター名 内容 特記
year int 年 / 必ず月とセット / 未来はない
month int 月 / 必ず年とセット / 未来はない
search string 監理団体名/請求種類/状態/金額  空白区切り で LIKE 検索 null の場合あり
/api/claim/total/2021/1?search=〇〇

レスポンス

パラメーター名 内容 特記
total_claim_count int 総請求件数 quary が空の時は総合計
total_claim_amaount int 総請求金額 quary が空の時は総合計
settled_claim_count int 決済済み件数 quary が空の時は総合計
settled_claim_amount int 決済済み金額 quary が空の時は総合計
unsettled_claim_count int 未決済件数 quary が空の時は総合計
settled_claim_amount int 未決済金額 quary が空の時は総合計
{
    "result"   : true,
    "errors"   : "",
    "data"     :    {
        'total_claim_count'          : 100,
        'total_claim_amaount'        : 1000000,
        'settled_claim_count'        : 70,
        'settled_claim_amount'       : 700000,
        'unsettled_claim_count'      : 30,
        'settled_claim_amount'       : 300000,
    },
}

{primary} 何もなければ空配列で返却
失敗ではなく、成功として返却。


{danger} 失敗時は200以外のエラーコードが返却されます。共通ルールのレスポンスをチェック。


データ取得

データ取得SQL

  • $request->get('search')が複数あった場合、[$keyword1, $keyword2...]と、配列にし、検索対象カラムでループします。
  • デリミタ(区切り文字)は半角スペースと全角スペースを対象とします。
  • payment_typeのEnumの文字列の値の配列と$keywordが一致するものを$paymentTypeとして取得します。
  • statusのEnumの文字列の値の配列と$keywordが一致するものを$statusとして取得。
  • パラメータにして指定した年月で取得データを絞り込みます。
  • $keywordのうち、半角数値のキーワードがあればその値でtotal_amountを検索します。

未入金の総件数と総請求額を取得

  • 上記の条件に加え、請求状態statusが「1:未入金」のレコードのみに絞って未入金の総件数と総請求額を計算して取得します。
SELECT
    count(*) as `count`
  , sum(`organization_payments`.`amount`) as `total`
FROM
    `organization_payments`
LEFT JOIN
    `organizations`
ON
    `organization_payments`.`organization_id` = `organizations`.`id`
WHERE
    (
        `organizations`.`name` LIKE "%{$keyword1}%"
    OR  `organizations`.`name` LIKE "%{$keyword2}%"
    OR ...

    OR  `organization_payments`.`payment_type` IN ($paymentType1, $paymentType2, ...)
    OR  `organization_payments`.`status`       IN ($status1, $status2, ...)
    OR  `organization_payments`.`total_amount` IN ($amount1, $amount2, ...)
    )
AND `organization_payments`.`deleted_at` IS NULL
AND  `organization_payments`.`payment_year` LIKE "%{$request->get('year')}%"
AND  `organization_payments`.`payment_month` LIKE "%{$request->get('month')}%"
AND `status` = 1 // 監理団体 請求データの請求状態が「1:未入金」
AND `organization_payments`.`deleted_at` IS NULL


入金済の総件数と請求金額を取得

  • 上記の条件に加え、請求状態statusが「2:入金済み」のレコードのみに絞って入金済みの総件数と総請求額を計算して取得します。
SELECT
    count(*) as `count`
  , sum(`organization_payments`.`amount`) as `total`
FROM
    `organization_payments`
LEFT JOIN
    `organizations`
ON
    `organization_payments`.`organization_id` = `organizations`.`id`
WHERE
    (
        `organizations`.`name` LIKE "%{$keyword1}%"
    OR  `organizations`.`name` LIKE "%{$keyword2}%"
    OR ...

    OR  `organization_payments`.`payment_type` IN ($paymentType1, $paymentType2, ...)
    OR  `organization_payments`.`status`       IN ($status1, $status2, ...)
    OR  `organization_payments`.`total_amount` IN ($amount1, $amount2, ...)
    )
AND `organization_payments`.`deleted_at` IS NULL
AND  `organization_payments`.`payment_year` LIKE "%{$request->get('year')}%"
AND  `organization_payments`.`payment_month` LIKE "%{$request->get('month')}%"
AND `status` = 2 // 監理団体 請求データの請求状態が「2:入金済み」
AND `organization_payments`.`deleted_at` IS NULL


総件数と総請求額を取得

上記の方法で取得した未入金と入金済みの総件数と総請求額を合算します。

  • 総件数 = 「未入金の総件数」+「入金済みの総件数」
  • 総請求額 = 「未入金の総請求額」+「入金済みの総請求額」

{warning} name, payment_type, status, amountでの絞り込みは、GETパラメータsearchが渡されたときのみ必要になります。


バリデーション

{primary} バリデーションはありません。

RUN