Skip to content

Latest commit

 

History

History
608 lines (529 loc) · 45.7 KB

Orders.md

File metadata and controls

608 lines (529 loc) · 45.7 KB

イベント仕様書:受注管理

要件定義 / 基本設計 / 詳細設計
基本:共通仕様 / 機能一覧 / テーブル一覧 / 画面一覧 / 画面遷移
詳細:テーブル定義書 / 画面定義書 / イベント仕様書(受注管理)

対象イベント:EV-ORD-101 〜 EV-ORD-504

記載の前提

  • 各イベントは「イベント概要/トリガー条件/事前条件/入力/出力/処理内容/検証内容/エラーハンドリング/依存関係」の 9 項目で記述する。
  • 事前条件・検証内容・エラーハンドリングは共通仕様の PRE-* / VAL-* / ERR-* を参照し、個別の内容のみを追記する。
  • 「処理内容」の DB アクセスは、対象テーブルと抽出・更新条件まで記述する。
  • 参照する業務ルール(ORD-T* / OD-T* / PRD-T*)はテーブル定義書を参照。
  • 画面項目 ID・ボタン ID は画面定義書の定義による。

共通の処理

以下は複数のイベントから参照される共通処理。各イベントでは名称で参照する。

名称 処理
受注検索クエリ Orders を主表とし、Customers(CustomerID)・Employees(EmployeeID)・Shippers(ShipVia)を外部結合する。合計金額は Order Details を OrderID で集計した Σ(UnitPrice × (1 - Discount) × Quantity) に Orders.Freight を加えて求める。抽出条件は各イベントで定義する
状況の判定 ShippedDate が NULL かつ RequiredDate が当日より前 → 「納期遅延」。ShippedDate が NULL かつそれ以外 → 「未出荷」。ShippedDate が NULL でなく ShippedDate > RequiredDate → 「納期遅延」。それ以外 → 「出荷済」。RequiredDate が NULL のときは遅延と判定しない(ORD-T7)
金額の再計算 明細ごとに 価格 = 単価 × (1 - 割引率)、明細金額 = 価格 × 数量(小数第 3 位を四捨五入)を求め、小計 = Σ 明細金額、合計 = 小計 + 送料 を算出して画面に反映する。DB アクセスを伴わない
選択肢の構築 顧客は Customers を CompanyName 昇順、担当者は Employees を LastName・FirstName 昇順、配送業者は Shippers を CompanyName 昇順、商品は Products のうち Discontinued が偽のものを ProductName 昇順で取得する
一覧状態の保持 検索条件・現在ページ・並べ替え列・並べ替え方向を画面遷移をまたいで保持し、一覧への復帰時に復元する(画面遷移 F-2)

SC-ORD-01 受注一覧画面

EV-ORD-101 受注一覧のページ読み込み

  • イベント概要:受注一覧画面を初期表示し、検索条件の選択肢を構築したうえで既定条件の一覧を表示する。
  • トリガー条件:SC-ORD-01 が表示されたとき。メニューからの遷移、および他画面からの復帰を含む。
  • 事前条件:PRE-DB
  • 入力
    • 遷移パラメータ:なし
    • 保持された一覧状態(他画面からの復帰時のみ):検索条件・ページ・並べ替え
  • 出力:SC-ORD-01-I01 〜 SC-ORD-01-I08
  • 処理内容
    1. 「選択肢の構築」により、顧客(SC-ORD-01-I01)と担当者(SC-ORD-01-I02)の選択肢を取得する。いずれも先頭に空白の選択肢(=すべて)を置く。
    2. 出荷状況(SC-ORD-01-I05)の選択肢を固定値「すべて」「未出荷」「出荷済」「納期遅延」で構築し、「すべて」を選択する。
    3. 保持された一覧状態がある場合はそれを画面へ復元する。ない場合は検索条件を未指定、並べ替えを「受注日の降順、同日は受注 ID の降順」、ページを 1 とする。
    4. 「受注検索クエリ」を現在の条件で実行し、総件数と当該ページの 20 件を取得する。
    5. 各行の「状況」を「状況の判定」で求め、SC-ORD-01-I06 に設定する。納期遅延の行は強調表示する。
    6. 総件数(SC-ORD-01-I07)とページ情報(SC-ORD-01-I08)を表示する。
    7. 検索結果が 0 件の場合は、一覧を空にして「該当するデータがありません。」を表示する(エラーとしない)。
  • 検証内容:なし
  • エラーハンドリング:ERR-DB
  • 依存関係:FN-ORD-01 / Orders, Order Details, Customers, Employees, Shippers

EV-ORD-102 受注の検索

  • イベント概要:入力された検索条件で受注を絞り込み、1 ページ目を表示する。
  • トリガー条件:SC-ORD-01-B01(検索)が選択されたとき。
  • 事前条件:PRE-DB, PRE-LOADED
  • 入力:SC-ORD-01-I01(顧客)、SC-ORD-01-I02(担当者)、SC-ORD-01-I03(受注日開始)、SC-ORD-01-I04(受注日終了)、SC-ORD-01-I05(出荷状況)
  • 出力:SC-ORD-01-I06, SC-ORD-01-I07, SC-ORD-01-I08
  • 処理内容
    1. 入力値を検証する(検証内容の節)。エラーがある場合は処理を中断する。
    2. 「受注検索クエリ」の抽出条件を次のとおり組み立てる。未指定の条件は抽出条件に加えない。
      • 顧客:Orders.CustomerID = 選択された顧客 ID
      • 担当者:Orders.EmployeeID = 選択された担当者 ID
      • 受注日開始:Orders.OrderDate >= 開始日(当該日を含む)
      • 受注日終了:Orders.OrderDate <= 終了日(当該日を含む)
      • 出荷状況「未出荷」:Orders.ShippedDate が NULL
      • 出荷状況「出荷済」:Orders.ShippedDate が NULL でない
      • 出荷状況「納期遅延」:Orders.RequiredDate が NULL でなく、かつ(ShippedDate が NULL かつ RequiredDate < 当日)または(ShippedDate が NULL でなく ShippedDate > RequiredDate)
    3. 並べ替えは現在の指定を維持する。ページは 1 に戻す。
    4. 総件数と当該ページの 20 件を取得し、EV-ORD-101 の手順 5〜7 と同様に表示する。
    5. 検索条件・ページ・並べ替えを「一覧状態の保持」として保持する。
  • 検証内容
    • VAL-DATE:受注日開始・終了が日付として解釈できること。両方が指定された場合は 開始 <= 終了 であること(違反時「受注日の開始は終了以前を指定してください。」)。
  • エラーハンドリング:ERR-VALIDATION, ERR-DB
  • 依存関係:FN-ORD-01 / EV-ORD-101(選択肢が構築済みであること)

EV-ORD-103 検索条件のクリア

  • イベント概要:検索条件を初期状態へ戻し、絞り込みなしで再検索する。
  • トリガー条件:SC-ORD-01-B02(条件クリア)が選択されたとき。
  • 事前条件:PRE-LOADED
  • 入力:なし
  • 出力:SC-ORD-01-I01 〜 SC-ORD-01-I08
  • 処理内容
    1. SC-ORD-01-I01 〜 SC-ORD-01-I04 を未指定に、SC-ORD-01-I05 を「すべて」に戻す。
    2. 並べ替えを既定(受注日の降順、同日は受注 ID の降順)に戻し、ページを 1 に戻す。
    3. EV-ORD-102 の手順 2 以降を、条件なしの状態で実行する。
  • 検証内容:なし
  • エラーハンドリング:ERR-DB
  • 依存関係:FN-ORD-01 / EV-ORD-102

EV-ORD-104 一覧のページ切替

  • イベント概要:検索条件と並び順を保ったまま、指定されたページを表示する。
  • トリガー条件:SC-ORD-01-B05(先頭・前・次・末尾またはページ番号)が選択されたとき。
  • 事前条件:PRE-LOADED
  • 入力:選択されたページ番号(または移動方向)、保持された検索条件・並べ替え
  • 出力:SC-ORD-01-I06, SC-ORD-01-I08
  • 処理内容
    1. 移動先のページ番号を求める。1 未満または総ページ数を超える場合は処理を行わない(ボタンは非活性のため通常は発生しない)。
    2. 保持された検索条件・並べ替えで「受注検索クエリ」を実行し、当該ページの 20 件を取得する。
    3. 一覧とページ情報を更新する。総件数は再取得した値で更新する。
    4. 保持している一覧状態のページ番号を更新する。
  • 検証内容:なし
  • エラーハンドリング:ERR-DB
  • 依存関係:FN-ORD-01 / EV-ORD-102

EV-ORD-105 一覧の並べ替え

  • イベント概要:指定された列で一覧の並び順を切り替える。
  • トリガー条件:SC-ORD-01-I06 の並べ替え可能な列見出しが選択されたとき。
  • 事前条件:PRE-LOADED
  • 入力:選択された列、保持された検索条件
  • 出力:SC-ORD-01-I06, SC-ORD-01-I08
  • 処理内容
    1. 選択された列が現在の並べ替え列と同じ場合は方向を反転し、異なる場合は当該列の昇順とする。
    2. 「合計金額」「状況」「操作」の列は並べ替えの対象外であり、選択されても処理を行わない。
    3. ページを 1 に戻す。
    4. 保持された検索条件と新しい並べ替えで「受注検索クエリ」を実行し、当該ページの 20 件を取得して一覧を更新する。
    5. 並べ替え列・方向を「一覧状態の保持」に反映する。
  • 検証内容:なし
  • エラーハンドリング:ERR-DB
  • 依存関係:FN-ORD-01 / EV-ORD-102

EV-ORD-106 受注詳細への遷移

  • イベント概要:選択された受注の詳細画面(照会)へ遷移する。
  • トリガー条件:SC-ORD-01-I06 の受注 ID 列が選択されたとき。
  • 事前条件:PRE-LOADED
  • 入力:選択された行の Orders.OrderID
  • 出力:SC-ORD-02 への遷移(遷移パラメータ:受注 ID)
  • 処理内容
    1. 現在の検索条件・ページ・並べ替えを「一覧状態の保持」として保持する。
    2. 受注 ID を遷移パラメータとして SC-ORD-02 へ遷移する。
  • 検証内容:なし
  • エラーハンドリング:遷移先の EV-ORD-201 で ERR-NOTFOUND を扱う
  • 依存関係:FN-ORD-02 / EV-ORD-201

EV-ORD-107 受注新規登録への遷移

  • イベント概要:受注詳細画面を登録モードで開く。
  • トリガー条件:SC-ORD-01-B03(新規登録)が選択されたとき。
  • 事前条件:なし
  • 入力:なし
  • 出力:SC-ORD-03 への遷移(遷移パラメータ:モード=登録)
  • 処理内容
    1. 現在の一覧状態を保持する。
    2. モード=登録として SC-ORD-03 へ遷移する。受注 ID は引き渡さない。
  • 検証内容:なし
  • エラーハンドリング:なし
  • 依存関係:FN-ORD-03 / EV-ORD-301

EV-ORD-108 出荷ステータス更新ダイアログの表示(一覧から)

  • イベント概要:一覧の行から出荷ステータス更新ダイアログを開く。
  • トリガー条件:SC-ORD-01-B04(出荷更新)が選択されたとき。
  • 事前条件:PRE-LOADED
  • 入力:選択された行の Orders.OrderID
  • 出力:SC-ORD-04 の表示(呼び出し元=SC-ORD-01)
  • 処理内容
    1. 受注 ID と呼び出し元を引き渡して SC-ORD-04 を表示し、EV-ORD-401 を実行する。
    2. ダイアログが閉じられた後、EV-ORD-102 と同じ条件で一覧を再検索して表示を更新する(画面遷移 F-5)。
  • 検証内容:なし
  • エラーハンドリング:EV-ORD-401 に委ねる
  • 依存関係:FN-ORD-06 / EV-ORD-401, EV-ORD-102

SC-ORD-02 受注詳細画面(照会)

EV-ORD-201 受注詳細(照会)のページ読み込み

  • イベント概要:指定された受注の受注情報・出荷先情報・明細・金額を取得して表示する。
  • トリガー条件:SC-ORD-02 が表示されたとき。一覧からの遷移、保存後の遷移、ダイアログを閉じた後の再読み込みを含む。
  • 事前条件:PRE-DB, PRE-PARAM(受注 ID)
  • 入力:遷移パラメータ:受注 ID
  • 出力:SC-ORD-02-I01 〜 SC-ORD-02-I20
  • 処理内容
    1. Orders から OrderID = 受注 ID の 1 件を取得する。0 件の場合は ERR-NOTFOUND とする。
    2. Customers(CustomerID)・Employees(EmployeeID)・Shippers(ShipVia)を外部結合し、顧客名・電話番号・住所、担当者名、配送業者名を取得する。いずれも NULL の場合は空を表示する。
    3. Order Details を OrderID で抽出し、Products を ProductID で内部結合して商品名・在庫数・廃番区分を取得する。並び順は商品名の昇順。
    4. 明細ごとに 価格・明細金額 を算出し、小計・合計 を求める(「金額の再計算」)。
    5. 「状況の判定」により SC-ORD-02-I02 を設定する。
    6. 廃番商品(Products.Discontinued が真)の行は商品名に「(廃番)」を付記する。
    7. Orders.RowVersion を画面に保持する(表示はしない)。
    8. Orders.ShippedDate が NULL でない場合、SC-ORD-02-B01(編集)を非活性にする(ORD-T4)。
  • 検証内容:なし
  • エラーハンドリング:ERR-DB, ERR-NOTFOUND
  • 依存関係:FN-ORD-02 / Orders, Order Details, Products, Customers, Employees, Shippers

EV-ORD-202 受注編集への遷移

  • イベント概要:当該受注を編集モードで開く。
  • トリガー条件:SC-ORD-02-B01(編集)が選択されたとき。
  • 事前条件:PRE-LOADED, PRE-EXIST
  • 入力:SC-ORD-02-I01(受注 ID)
  • 出力:SC-ORD-03 への遷移(遷移パラメータ:受注 ID、モード=編集)
  • 処理内容
    1. Orders.ShippedDate が NULL でない場合は遷移せず、「出荷済の受注は編集できません。出荷を取り消してから編集してください。」を表示する(ORD-T4、ERR-BIZ)。ボタンが非活性のため通常は発生しないが、画面表示後に他利用者が出荷を確定した場合に起こり得る。
    2. 受注 ID とモード=編集を引き渡して SC-ORD-03 へ遷移する。
  • 検証内容:なし
  • エラーハンドリング:ERR-BIZ
  • 依存関係:FN-ORD-04 / EV-ORD-301

EV-ORD-203 受注の削除

  • イベント概要:確認のうえ、明細とあわせて受注を削除する。
  • トリガー条件:SC-ORD-02-B02(削除)が選択されたとき。
  • 事前条件:PRE-DB, PRE-LOADED, PRE-EXIST
  • 入力:SC-ORD-02-I01(受注 ID)、画面に保持された Orders.RowVersion
  • 出力:SC-ORD-01 への遷移、完了メッセージ
  • 処理内容
    1. 確認ダイアログ「受注 ID nnn を削除します。よろしいですか?」を表示する。取り消された場合は何もしない。
    2. トランザクションを開始する。
    3. Order Details から OrderID = 受注 ID の行をすべて削除する。
    4. Orders から OrderID = 受注 ID かつ RowVersion = 保持していた値の行を削除する。削除件数が 0 件の場合はロールバックし、Orders に当該 OrderID が存在するかで分岐する。存在すれば ERR-CONFLICT、存在しなければ ERR-NOTFOUND とする。
    5. コミットする。
    6. 「受注 ID nnn を削除しました。」を表示し、保持された一覧状態で SC-ORD-01 へ遷移する。削除により総件数が減るため一覧は再検索する。
  • 検証内容:なし
  • エラーハンドリング:ERR-DB, ERR-CONFLICT, ERR-NOTFOUND
  • 依存関係:FN-ORD-05 / Orders, Order Details / ORD-T8

EV-ORD-204 帳票プレビューへの遷移

  • イベント概要:納品書または請求書のプレビュー画面へ遷移する。
  • トリガー条件:SC-ORD-02-B04(納品書)または SC-ORD-02-B05(請求書)が選択されたとき。
  • 事前条件:PRE-LOADED, PRE-EXIST
  • 入力:SC-ORD-02-I01(受注 ID)、選択されたボタンに対応する帳票種別
  • 出力:SC-ORD-05 への遷移(遷移パラメータ:受注 ID、帳票種別)
  • 処理内容
    1. SC-ORD-02-B04 なら帳票種別=納品書、SC-ORD-02-B05 なら帳票種別=請求書とする。
    2. 受注 ID と帳票種別を引き渡して SC-ORD-05 へ遷移する。
  • 検証内容:なし
  • エラーハンドリング:遷移先の EV-ORD-501 で ERR-NOTFOUND を扱う
  • 依存関係:FN-ORD-07 / EV-ORD-501

EV-ORD-205 出荷ステータス更新ダイアログの表示(詳細から)

  • イベント概要:詳細画面から出荷ステータス更新ダイアログを開く。
  • トリガー条件:SC-ORD-02-B03(出荷更新)が選択されたとき。
  • 事前条件:PRE-LOADED, PRE-EXIST
  • 入力:SC-ORD-02-I01(受注 ID)
  • 出力:SC-ORD-04 の表示(呼び出し元=SC-ORD-02)
  • 処理内容
    1. 受注 ID と呼び出し元を引き渡して SC-ORD-04 を表示し、EV-ORD-401 を実行する。
    2. ダイアログが閉じられた後、EV-ORD-201 を実行して詳細表示を最新化する(保持していた RowVersion も更新される)。
  • 検証内容:なし
  • エラーハンドリング:EV-ORD-401 に委ねる
  • 依存関係:FN-ORD-06 / EV-ORD-401, EV-ORD-201

EV-ORD-206 受注一覧への復帰

  • イベント概要:直前の検索条件・ページ・並び順を保ったまま受注一覧へ戻る。
  • トリガー条件:SC-ORD-02-B06(一覧へ戻る)が選択されたとき。
  • 事前条件:なし
  • 入力:保持された一覧状態
  • 出力:SC-ORD-01 への遷移
  • 処理内容
    1. 保持された一覧状態を引き渡して SC-ORD-01 へ遷移する。
    2. EV-ORD-101 が保持された状態を復元して一覧を再検索する。
  • 検証内容:なし
  • エラーハンドリング:ERR-DB
  • 依存関係:FN-ORD-01 / EV-ORD-101

SC-ORD-03 受注詳細画面(登録・編集)

EV-ORD-301 受注詳細(登録・編集)のページ読み込み

  • イベント概要:モードに応じて、登録用の初期値または既存受注の内容を表示する。
  • トリガー条件:SC-ORD-03 が表示されたとき。
  • 事前条件:PRE-DB, PRE-PARAM(モード、および編集モードでは受注 ID)
  • 入力:遷移パラメータ:モード(登録/編集)、受注 ID(編集モードのみ)
  • 出力:SC-ORD-03-I01 〜 SC-ORD-03-I18
  • 処理内容
    1. 「選択肢の構築」により、顧客・担当者・配送業者・商品の選択肢を取得する。商品は Discontinued が偽のもののみ(OD-T3)。
    2. 登録モードの場合
      1. SC-ORD-03-I01 に「(登録時に採番)」を表示する。
      2. SC-ORD-03-I06(受注日)に当日を、SC-ORD-03-I09(送料)に 0 を設定する。その他の入力項目は未入力とする。
      3. SC-ORD-03-I16(明細入力表)に空行を 1 行表示する。
    3. 編集モードの場合
      1. Orders から OrderID = 受注 ID の 1 件を取得する。0 件の場合は ERR-NOTFOUND とする。
      2. ShippedDate が NULL でない場合は編集させず、ERR-BIZ(「出荷済の受注は編集できません。」)として SC-ORD-02 へ戻す(ORD-T4)。
      3. 取得した値を各入力項目に設定する。Orders.RowVersion を画面に保持する。
      4. Order Details を OrderID で抽出し、Products を内部結合して明細入力表に設定する。並び順は商品名の昇順。各行の RowVersion も保持する。
      5. 明細行の商品が廃番の場合、その行の選択肢にのみ当該商品を追加して選択状態を保つ(OD-T3)。
    4. 顧客が選択されている場合、SC-ORD-03-I03(顧客電話番号)・SC-ORD-03-I04(顧客住所)を表示する。
    5. 「金額の再計算」により SC-ORD-03-I17(小計)・SC-ORD-03-I18(合計)を表示する。
  • 検証内容:なし
  • エラーハンドリング:ERR-DB, ERR-NOTFOUND, ERR-BIZ
  • 依存関係:FN-ORD-03, FN-ORD-04 / Orders, Order Details, Products, Customers, Employees, Shippers

EV-ORD-302 顧客選択の変更

  • イベント概要:選択された顧客の情報を表示し、登録モードでは出荷先の既定値を設定する。
  • トリガー条件:SC-ORD-03-I02(顧客)の選択が変更されたとき。
  • 事前条件:PRE-DB, PRE-LOADED, PRE-MODE
  • 入力:SC-ORD-03-I02(選択された顧客 ID)、現在のモード
  • 出力:SC-ORD-03-I03, SC-ORD-03-I04, SC-ORD-03-I10 〜 SC-ORD-03-I15
  • 処理内容
    1. 選択が空になった場合は SC-ORD-03-I03・SC-ORD-03-I04 を空にして終了する。出荷先情報は変更しない。
    2. Customers から CustomerID = 選択された顧客 ID の 1 件を取得する。0 件の場合は ERR-NOTFOUND とする(他利用者による削除)。
    3. SC-ORD-03-I03 に Phone、SC-ORD-03-I04 に Address + City + Region + PostalCode + Country を連結して表示する。
    4. 登録モードの場合、出荷先情報に既定値を設定する(ORD-T6)。
      • SC-ORD-03-I10 ← CompanyName、SC-ORD-03-I11 ← Address、SC-ORD-03-I12 ← City、SC-ORD-03-I13 ← Region、SC-ORD-03-I14 ← PostalCode、SC-ORD-03-I15 ← Country
      • 利用者が既に出荷先情報を手入力している場合は、確認のうえ上書きする。取り消された場合は上書きしない。
    5. 編集モードの場合、出荷先情報は変更しない(受注時点の値を保持するため)。
  • 検証内容:なし
  • エラーハンドリング:ERR-DB, ERR-NOTFOUND
  • 依存関係:FN-ORD-03, FN-ORD-04 / Customers / ORD-T6

EV-ORD-303 送料の変更

  • イベント概要:送料の変更に応じて合計を再計算する。
  • トリガー条件:SC-ORD-03-I09(送料)の入力が確定したとき。
  • 事前条件:PRE-LOADED
  • 入力:SC-ORD-03-I09, SC-ORD-03-I17(小計)
  • 出力:SC-ORD-03-I18(合計)
  • 処理内容
    1. 送料が数値として解釈できない、または負の場合は当該項目にエラーを表示し、合計の再計算を行わない。
    2. 「金額の再計算」により合計を求めて表示する。DB アクセスは行わない。
  • 検証内容:VAL-NUMERIC(送料は 0 以上)
  • エラーハンドリング:ERR-VALIDATION
  • 依存関係:FN-ORD-03, FN-ORD-04

EV-ORD-304 明細行の追加

  • イベント概要:明細入力表に空行を 1 行追加する。
  • トリガー条件:SC-ORD-03-B01(明細行追加)が選択されたとき。
  • 事前条件:PRE-LOADED
  • 入力:なし
  • 出力:SC-ORD-03-I16
  • 処理内容
    1. 明細入力表の末尾に空行を 1 行追加する。既定値は割引率 0、数量 1、商品・単価は未設定とする。
    2. 既存行の入力値は保持する。
    3. 行数が 2 行以上になったため、各行の SC-ORD-03-B02(行削除)を活性にする。
    4. DB アクセスは行わない。
  • 検証内容:なし
  • エラーハンドリング:なし
  • 依存関係:FN-ORD-03, FN-ORD-04

EV-ORD-305 明細行の削除

  • イベント概要:明細入力表から指定された行を除き、金額を再計算する。
  • トリガー条件:SC-ORD-03-B02(行削除)が選択されたとき。
  • 事前条件:PRE-LOADED
  • 入力:選択された行
  • 出力:SC-ORD-03-I16, SC-ORD-03-I17, SC-ORD-03-I18
  • 処理内容
    1. 明細が 1 行しかない場合は削除せず、「明細は 1 行以上必要です。」を表示する(ORD-T5、ERR-BIZ)。ボタンは非活性のため通常は発生しない。
    2. 該当行を明細入力表から取り除く。編集モードで既存の明細行を取り除いた場合、当該行は保存時に削除対象として扱う(EV-ORD-308)。この時点では DB を更新しない。
    3. 「金額の再計算」により小計・合計を更新する。
    4. 残り 1 行になった場合、SC-ORD-03-B02 を非活性にする。
  • 検証内容:なし
  • エラーハンドリング:ERR-BIZ
  • 依存関係:FN-ORD-03, FN-ORD-04 / EV-ORD-308

EV-ORD-306 明細の商品選択の変更

  • イベント概要:選択された商品の単価・在庫を明細行へ反映し、重複を検査したうえで金額を再計算する。
  • トリガー条件:SC-ORD-03-I16 の商品列の選択が変更されたとき。
  • 事前条件:PRE-DB, PRE-LOADED
  • 入力:変更された行、選択された Products.ProductID
  • 出力:当該行の単価・在庫・価格・明細金額、SC-ORD-03-I17, SC-ORD-03-I18
  • 処理内容
    1. 選択が空になった場合は当該行の単価・在庫・価格・明細金額を空にし、手順 5 へ進む。
    2. 同一の商品が明細入力表の他の行に既に存在する場合、選択を変更前の値へ戻し、「この商品は既に明細に存在します。数量を変更してください。」を表示して終了する(OD-T1、ERR-BIZ)。
    3. Products から ProductID = 選択された商品 ID の 1 件を取得する。0 件の場合は ERR-NOTFOUND とする。
    4. 当該行の単価に Products.UnitPrice を、在庫に Products.UnitsInStock を設定する(OD-T2)。単価は利用者が変更できる。
    5. 「金額の再計算」により当該行の価格・明細金額と、小計・合計を更新する。
    6. 当該行の数量が在庫を超える場合は「在庫数を超えています。」の警告を表示する。入力は妨げない(在庫の引き落としは出荷確定時のため)。
  • 検証内容:VAL-EXISTS(選択された商品が Products に存在すること)
  • エラーハンドリング:ERR-DB, ERR-NOTFOUND, ERR-BIZ
  • 依存関係:FN-ORD-03, FN-ORD-04 / Products / OD-T1, OD-T2

EV-ORD-307 明細の単価・割引率・数量の変更

  • イベント概要:明細行の単価・割引率・数量の変更に応じて、当該行と小計・合計を再計算する。
  • トリガー条件:SC-ORD-03-I16 の単価・割引率・数量のいずれかの入力が確定したとき。
  • 事前条件:PRE-LOADED
  • 入力:変更された行と項目、入力値
  • 出力:当該行の価格・明細金額、SC-ORD-03-I17, SC-ORD-03-I18
  • 処理内容
    1. 入力値を検証する。違反がある場合は当該項目にエラーを表示し、再計算を行わない。
    2. 「金額の再計算」により当該行の価格・明細金額と、小計・合計を更新する。
    3. 数量が当該行の在庫を超える場合は「在庫数を超えています。」の警告を表示する。入力は妨げない。
    4. DB アクセスは行わない。
  • 検証内容
    • VAL-NUMERIC:単価は 0 以上、割引率は 0 以上 1 以下、数量は 1 以上の整数(違反時のメッセージは各項目の制約に対応させる)。
  • エラーハンドリング:ERR-VALIDATION
  • 依存関係:FN-ORD-03, FN-ORD-04 / OD-T4

EV-ORD-308 受注の保存

  • イベント概要:入力内容を検証し、受注と明細を登録または更新する。
  • トリガー条件:SC-ORD-03-B03(保存)が選択されたとき。
  • 事前条件:PRE-DB, PRE-LOADED, PRE-MODE
  • 入力:SC-ORD-03-I02 〜 SC-ORD-03-I16 の入力値、現在のモード、編集モードでは受注 ID と保持された RowVersion、および削除対象として印を付けた既存明細行
  • 出力:SC-ORD-02 への遷移(遷移パラメータ:受注 ID)、完了メッセージ
  • 処理内容
    1. 全項目の検証をまとめて実施する(検証内容の節)。1 件でも違反がある場合は更新を行わず、全エラーを表示して入力値を保持したまま画面に留まる。
    2. トランザクションを開始する。
    3. 登録モードの場合
      1. Orders へ 1 行挿入する。設定する列は CustomerID, EmployeeID, OrderDate, RequiredDate, ShipVia, Freight, ShipName, ShipAddress, ShipCity, ShipRegion, ShipPostalCode, ShipCountry。ShippedDate は NULL とする(出荷は SC-ORD-04 で行う)。OrderID は IDENTITY により採番される。
      2. 採番された OrderID を取得する。
      3. 明細入力表の各行を Order Details へ挿入する。設定する列は OrderID, ProductID, UnitPrice, Quantity, Discount。
    4. 編集モードの場合
      1. Orders を OrderID = 受注 ID かつ RowVersion = 保持していた値の条件で更新する。更新する列は手順 3-1 と同じ(ShippedDate は更新しない)。あわせて SET 句で RowVersion = RowVersion + 1 とする(共通仕様 9.1 の定型文)。
      2. 更新件数が 0 件の場合はロールバックし、Orders に当該 OrderID が存在するかで分岐する。存在すれば ERR-CONFLICT、存在しなければ ERR-NOTFOUND とする。
      3. 明細を行ごとに適用する(全削除・再登録は行わない。OD-T6)。
        • 削除対象として印を付けた行:Order Details から OrderID と ProductID の一致で削除する。
        • 読み込み時に存在し、値が変更された行:OrderID と ProductID の一致で UnitPrice, Quantity, Discount を更新する。あわせて SET 句で RowVersion = RowVersion + 1 とする。
        • 読み込み時に存在しなかった行:Order Details へ挿入する(RowVersion は列に含めない。DEFAULT により 1 で初期化される)。
        • 商品が変更された既存行:変更前の ProductID の行を削除し、変更後の ProductID で挿入する(ProductID は主キーの一部のため更新しない)。
    5. コミットする。
    6. 「受注 ID nnn を保存しました。」を表示し、当該受注 ID を引き渡して SC-ORD-02 へ遷移する。
  • 検証内容
    • VAL-REQUIRED:顧客・担当者・受注日が入力されていること(ORD-T1)。明細の各行で商品・単価・割引率・数量が入力されていること。
    • VAL-DATE:受注日・要求納期が日付として解釈できること。要求納期が指定されている場合は 受注日 <= 要求納期 であること(ORD-T3)。
    • VAL-NUMERIC:送料は 0 以上、明細の単価は 0 以上、割引率は 0 以上 1 以下、数量は 1 以上の整数。
    • VAL-LENGTH:出荷先情報の各項目がテーブル定義書の桁数以内であること。
    • VAL-EXISTS:選択された顧客・担当者・配送業者・商品がそれぞれのマスタに存在すること。
    • VAL-DUP:明細入力表に同一商品の行が 2 行以上ないこと(OD-T1、「同一商品の明細が重複しています。」)。
    • 個別:明細が 1 行以上あること(ORD-T5、ERR-BIZ「明細を 1 行以上入力してください。」)。
    • 個別:明細の商品に廃番商品が含まれないこと。ただし編集モードで読み込み時から存在する行は対象外とする(OD-T3、ERR-BIZ「廃番商品は指定できません。」)。
  • エラーハンドリング:ERR-VALIDATION, ERR-DB, ERR-CONFLICT, ERR-NOTFOUND, ERR-BIZ
  • 依存関係:FN-ORD-03, FN-ORD-04 / Orders, Order Details, Products / EV-ORD-201(遷移先) / ORD-T1, ORD-T3, ORD-T5, OD-T1, OD-T3, OD-T6

EV-ORD-309 受注編集のキャンセル

  • イベント概要:入力内容を保存せずに遷移元へ戻る。
  • トリガー条件:SC-ORD-03-B04(キャンセル)が選択されたとき。
  • 事前条件:PRE-LOADED
  • 入力:現在のモード、受注 ID(編集モードのみ)、変更の有無
  • 出力:SC-ORD-02 または SC-ORD-01 への遷移
  • 処理内容
    1. 未保存の変更がある場合、確認ダイアログ「入力内容は保存されません。よろしいですか?」を表示する(画面遷移 F-3)。取り消された場合は何もしない。
    2. 編集モードの場合は受注 ID を引き渡して SC-ORD-02 へ遷移する。登録モードの場合は保持された一覧状態で SC-ORD-01 へ遷移する。
    3. DB は一切更新しない。
  • 検証内容:なし
  • エラーハンドリング:なし
  • 依存関係:EV-ORD-201, EV-ORD-101

SC-ORD-04 出荷ステータス更新ダイアログ

EV-ORD-401 出荷ダイアログの表示(初期化)

  • イベント概要:対象受注の現在の出荷情報と在庫引落の内訳を表示する。
  • トリガー条件:SC-ORD-04 が表示されたとき(EV-ORD-108、EV-ORD-205、および配送管理の出荷追跡画面から)。
  • 事前条件:PRE-DB, PRE-PARAM(受注 ID、呼び出し元)
  • 入力:遷移パラメータ:受注 ID、呼び出し元画面 ID
  • 出力:SC-ORD-04-I01 〜 SC-ORD-04-I08、ボタンの活性状態
  • 処理内容
    1. Orders から OrderID = 受注 ID の 1 件を取得する。0 件の場合は ERR-NOTFOUND とする。
    2. Customers を外部結合して顧客名を取得し、SC-ORD-04-I02 に表示する。
    3. SC-ORD-04-I01(受注 ID)、SC-ORD-04-I04(要求納期)を表示し、「状況の判定」により SC-ORD-04-I03 を設定する。
    4. 「選択肢の構築」により配送業者(SC-ORD-04-I06)の選択肢を取得する。
    5. 未出荷(ShippedDate が NULL)の場合
      1. SC-ORD-04-I05(出荷日)に当日を設定する。
      2. SC-ORD-04-I06 は Orders.ShipVia が設定されていればそれを、なければ未選択とする。
      3. SC-ORD-04-I07(送料)に Orders.Freight を設定する。
      4. Order Details を OrderID で抽出し Products を内部結合して、商品名・数量・現在庫数を SC-ORD-04-I08(在庫引落の内訳)に表示する。Quantity > UnitsInStock の行を強調表示する。
      5. SC-ORD-04-B01 を「出荷確定」として活性、SC-ORD-04-B02 を非活性にする。
    6. 出荷済(ShippedDate が NULL でない)の場合
      1. SC-ORD-04-I05 に ShippedDate、SC-ORD-04-I06 に ShipVia、SC-ORD-04-I07 に Freight を設定する。
      2. SC-ORD-04-I08 は表示しない(在庫は引落済のため)。
      3. SC-ORD-04-B01 を「出荷情報を更新」として活性、SC-ORD-04-B02(出荷取消)を活性にする。
    7. Orders.RowVersion をダイアログに保持する。
  • 検証内容:なし
  • エラーハンドリング:ERR-DB, ERR-NOTFOUND
  • 依存関係:FN-ORD-06 / Orders, Order Details, Products, Customers, Shippers

EV-ORD-402 出荷の確定・情報更新

  • イベント概要:出荷日・配送業者・送料を更新する。未出荷から確定する場合は在庫を引き落とす。
  • トリガー条件:SC-ORD-04-B01 が選択されたとき。
  • 事前条件:PRE-DB, PRE-LOADED, PRE-EXIST
  • 入力:SC-ORD-04-I05(出荷日)、SC-ORD-04-I06(配送業者)、SC-ORD-04-I07(送料)、受注 ID、保持された RowVersion、表示時点の出荷済/未出荷の別
  • 出力:呼び出し元画面への復帰、完了メッセージ
  • 処理内容
    1. 入力値を検証する。違反がある場合は更新を行わず、全エラーを表示してダイアログに留まる。
    2. トランザクションを開始する。
    3. Orders から OrderID = 受注 ID かつ RowVersion = 保持していた値の行を、更新用に取得する。0 件の場合はロールバックし、Orders に当該 OrderID が存在すれば ERR-CONFLICT、存在しなければ ERR-NOTFOUND とする。
    4. 表示時点が未出荷だった場合(出荷確定)、在庫を引き落とす(OD-T5、PRD-T5)。
      1. Order Details を OrderID で抽出し、Products を ProductID で内部結合して、明細ごとの Quantity と UnitsInStock を取得する。
      2. いずれかの行で Quantity > UnitsInStock の場合はロールバックし、ERR-BIZ(「在庫が不足しています:〈商品名〉」。複数ある場合は全商品名を列挙)とする。
      3. 明細ごとに Products.UnitsInStock を UnitsInStock - Quantity へ更新する(ProductID の一致で更新)。
    5. 表示時点が出荷済だった場合(出荷情報の更新)、在庫は変更しない。
    6. Orders の ShippedDate, ShipVia, Freight を入力値で更新する(OrderID と RowVersion の一致を条件とし、SET 句で RowVersion = RowVersion + 1 とする)。更新件数が 0 件の場合はロールバックし、手順 3 と同じ分岐で扱う。
    7. コミットする。
    8. 「受注 ID nnn の出荷情報を更新しました。」を表示し、ダイアログを閉じる。
    9. 呼び出し元画面を再読み込みする(SC-ORD-01 なら EV-ORD-102、SC-ORD-02 なら EV-ORD-201)。
  • 検証内容
    • VAL-REQUIRED:出荷日・配送業者が入力されていること。
    • VAL-DATE:出荷日が日付として解釈でき、Orders.OrderDate <= 出荷日 であること(ORD-T3、「出荷日は受注日以降を指定してください。」)。
    • VAL-NUMERIC:送料が 0 以上であること。
    • VAL-EXISTS:選択された配送業者が Shippers に存在すること。
  • エラーハンドリング:ERR-VALIDATION, ERR-DB, ERR-CONFLICT, ERR-NOTFOUND, ERR-BIZ
  • 依存関係:FN-ORD-06 / Orders, Order Details, Products, Shippers / OD-T5, PRD-T5, ORD-T3

EV-ORD-403 出荷の取消

  • イベント概要:出荷日を未設定に戻し、引き落とした在庫を戻す。
  • トリガー条件:SC-ORD-04-B02(出荷取消)が選択されたとき。
  • 事前条件:PRE-DB, PRE-LOADED, PRE-EXIST
  • 入力:受注 ID、保持された RowVersion
  • 出力:呼び出し元画面への復帰、完了メッセージ
  • 処理内容
    1. 確認ダイアログ「出荷を取り消し、在庫を戻します。よろしいですか?」を表示する。取り消された場合は何もしない。
    2. トランザクションを開始する。
    3. Orders から OrderID = 受注 ID かつ RowVersion = 保持していた値の行を取得する。0 件の場合はロールバックし、Orders に当該 OrderID が存在すれば ERR-CONFLICT、存在しなければ ERR-NOTFOUND とする。
    4. 取得した行の ShippedDate が NULL の場合はロールバックし、ERR-BIZ(「この受注は出荷されていません。」)とする。
    5. Order Details を OrderID で抽出し、明細ごとに Products.UnitsInStock を UnitsInStock + Quantity へ更新する(OD-T5)。
    6. Orders の ShippedDate を NULL へ更新する(OrderID と RowVersion の一致を条件とし、SET 句で RowVersion = RowVersion + 1 とする)。ShipVia と Freight は変更しない。更新件数が 0 件の場合は手順 3 と同じ分岐で扱う。
    7. コミットする。
    8. 「受注 ID nnn の出荷を取り消しました。」を表示し、ダイアログを閉じる。
    9. 呼び出し元画面を再読み込みする。
  • 検証内容:なし
  • エラーハンドリング:ERR-DB, ERR-CONFLICT, ERR-NOTFOUND, ERR-BIZ
  • 依存関係:FN-ORD-06 / Orders, Order Details, Products / OD-T5

EV-ORD-404 出荷ダイアログを閉じる

  • イベント概要:更新せずにダイアログを閉じる。
  • トリガー条件:SC-ORD-04-B03(閉じる)が選択されたとき。
  • 事前条件:なし
  • 入力:呼び出し元画面 ID
  • 出力:呼び出し元画面への復帰
  • 処理内容
    1. 入力内容を破棄してダイアログを閉じる。DB は更新しない。
    2. 呼び出し元画面を再読み込みする(画面遷移 F-5)。他利用者による更新を反映するため、変更がなくても再読み込みする。
  • 検証内容:なし
  • エラーハンドリング:ERR-DB(再読み込み時)
  • 依存関係:EV-ORD-102, EV-ORD-201

SC-ORD-05 受注帳票プレビュー画面

EV-ORD-501 帳票プレビューのページ読み込み

  • イベント概要:指定された帳票種別で、受注内容を印刷用の体裁で表示する。
  • トリガー条件:SC-ORD-05 が表示されたとき。
  • 事前条件:PRE-DB, PRE-PARAM(受注 ID、帳票種別)
  • 入力:遷移パラメータ:受注 ID、帳票種別(納品書/請求書)
  • 出力:SC-ORD-05-I01 〜 SC-ORD-05-I14
  • 処理内容
    1. Orders から OrderID = 受注 ID の 1 件を取得する。0 件の場合は ERR-NOTFOUND とする。
    2. Employees(EmployeeID)・Shippers(ShipVia)を外部結合し、担当者名・配送業者名を取得する。
    3. Order Details を OrderID で抽出し、Products を内部結合して商品名を取得する。並び順は商品名の昇順。
    4. 明細ごとに 価格・明細金額 を算出し、小計・合計 を求める(「金額の再計算」)。
    5. SC-ORD-05-I01(帳票種別)に遷移パラメータの値を選択し、SC-ORD-05-I02(帳票タイトル)と SC-ORD-05-I03(発行日=当日)を設定する。
    6. SC-ORD-05-I05(宛先)は出荷先情報(ShipName, ShipAddress, ShipCity, ShipRegion, ShipPostalCode, ShipCountry)を連結して表示する。顧客マスタの住所は用いない。
    7. 帳票種別に応じて表示を切り替える。
      • 納品書:SC-ORD-05-I07(出荷日)・SC-ORD-05-I08(配送業者)を表示し、SC-ORD-05-I14(支払期限)を表示しない。
      • 請求書:SC-ORD-05-I14 に発行日の翌月末日を表示し、SC-ORD-05-I07・SC-ORD-05-I08 を表示しない。
    8. 帳票はその場で表示するのみとし、DB への保存・ファイル出力・非同期処理は行わない。
  • 検証内容:なし
  • エラーハンドリング:ERR-DB, ERR-NOTFOUND
  • 依存関係:FN-ORD-07 / Orders, Order Details, Products, Employees, Shippers

EV-ORD-502 帳票種別の切替

  • イベント概要:納品書と請求書の表示を切り替える。
  • トリガー条件:SC-ORD-05-I01(帳票種別)の選択が変更されたとき。
  • 事前条件:PRE-LOADED
  • 入力:SC-ORD-05-I01
  • 出力:SC-ORD-05-I02, SC-ORD-05-I07, SC-ORD-05-I08, SC-ORD-05-I14
  • 処理内容
    1. 帳票タイトルを選択された種別の名称へ変更する。
    2. EV-ORD-501 の手順 7 と同じ規則で、種別に応じた項目の表示・非表示を切り替える。
    3. 受注データは再取得しない(DB アクセスを行わない)。
  • 検証内容:なし
  • エラーハンドリング:なし
  • 依存関係:EV-ORD-501

EV-ORD-503 印刷

  • イベント概要:操作用の要素を除いた状態で帳票を印刷する。
  • トリガー条件:SC-ORD-05-B01(印刷)が選択されたとき。
  • 事前条件:PRE-LOADED
  • 入力:現在の表示内容
  • 出力:印刷(ブラウザの印刷機能)
  • 処理内容
    1. SC-ORD-05-I01(帳票種別)、SC-ORD-05-B01、SC-ORD-05-B02 および画面共通のヘッダ・メニューを印刷対象から除く。
    2. ブラウザの印刷機能を呼び出す。
    3. サーバ側での帳票生成・保存・非同期処理は行わない。
  • 検証内容:なし
  • エラーハンドリング:なし
  • 依存関係:FN-ORD-07

EV-ORD-504 受注詳細への復帰

  • イベント概要:受注詳細画面(照会)へ戻る。
  • トリガー条件:SC-ORD-05-B02(戻る)が選択されたとき。
  • 事前条件:なし
  • 入力:SC-ORD-05-I04(受注 ID)
  • 出力:SC-ORD-02 への遷移
  • 処理内容
    1. 受注 ID を引き渡して SC-ORD-02 へ遷移する。
  • 検証内容:なし
  • エラーハンドリング:遷移先の EV-ORD-201 で扱う
  • 依存関係:EV-ORD-201