Release Notes: v0.1.11

← バージョン一覧に戻る

v0.1.11 Release Notes

リリース日: 2025年11月16日

✨ 新機能

📊 在庫数推移表の大幅強化

在庫状況ページ(/organizations/{id}/inventory-status)の在庫数推移表に、複数の重要な機能を追加しました。

トランザクション単位の在庫数計算

同日に複数のトランザクション(入庫・出庫・注文)がある場合でも、各トランザクション時点での正確な在庫数を表示できるようになりました。

実装内容:

  • トランザクションを3段階でソート:適用日 → 種類優先度(注文 > 入庫 > 出庫)→ created_at
  • 各トランザクション時点での在庫数を個別に計算
  • 注文は在庫変動なし(前の列と同じ値を保持)

効果:

  • 同日の入庫・出庫の順序が明確化
  • トランザクションごとの在庫変化が追跡可能
  • より詳細な在庫管理が実現

同日複数履歴の複数列展開表示

同じ日に複数の履歴がある場合、その日付を複数列に展開して表示するようになりました。

変更前: 同日に入庫と出庫があっても、1つの列にまとめて表示 変更後: 入庫列と出庫列を個別に表示(左から右へ時系列順)

効果:

  • 同日の全てのトランザクションが視覚的に確認可能
  • タブ表示で各トランザクションの種類が明確
  • データの完全性が向上

視覚的強調機能

トランザクションによる在庫変動を色分けで明確に表示するようになりました。

スタイル:

  • 在庫増加(入庫): 薄い緑の背景(#e8f5e9)+ 太字
  • 在庫減少(出庫): 薄いオレンジの背景(#fff3e0)+ 太字
  • 変動なし: グレーのテキスト(#aaa)+ 通常ウェイト

対象:

  • 各資材の在庫数
  • 未発送件数累計
  • 発送件数累計

効果:

  • トランザクションによる変動が一目で把握可能
  • 変動していない値は控えめに表示され、情報の優先度が明確化
  • 入庫と出庫の区別が直感的に理解可能

発送件数累計の追加

在庫数推移の表に「発送件数累計」の行を新規追加しました。

表示順序:

├─ 資材A在庫数
├─ 資材B在庫数
├─ ...
├─ 未発送件数累計
└─ 発送件数累計 ← NEW

計算ロジック:

  • トランザクション単位の発送件数(transactionShippedTotal
  • 日毎の発送件数(dailyShippedTotal
  • 各トランザクション時点および各日付時点での反映済み件数を集計

効果:

  • 注文に対する発送進捗が一目で把握可能
  • 発送件数 + 未発送件数 = 総注文数 で整合性確認が容易
  • 出庫トランザクションによる発送増加を緑背景で視覚的に確認

📧 納品連絡テンプレート機能

納品連絡用のメールテンプレート機能を追加しました。

基本機能

新しいテンプレートタイプ: EmailTemplateDeliveryNotification

テンプレート変数:

  • SubmittedAt: フォーム送信日時
  • SubmittedByEmail: フォーム送信者メールアドレス
  • OrganizationName: 対象組織(学校)名
  • AppliedDate: 納品予定日
  • DeliveryMethod: 納品方法
  • SupplementaryInfo: 補足情報
  • MaterialSummary: 納品明細
  • AppURL: アプリケーションURL

宛先指定機能

メールの送信先を柔軟に設定できるようになりました。

宛先タイプ:

  • admin_only: 管理者のみ(デフォルト)
  • all_users: 全ユーザー
  • organization_users: 組織ユーザーのみ

除外宛先: 特定のメールアドレスを除外可能(カンマ区切り)

効果:

  • 組織ごとに適切な宛先を設定可能
  • 不要な通知を防止
  • より柔軟な通知運用

即時送信機能

メールキューに登録後、即座に送信する機能を追加しました。

設定: immediate_send フラグで制御(デフォルト: false)

効果:

  • 重要な通知を遅延なく送信
  • 緊急性に応じた柔軟な運用

納品情報モーダル

トランザクション行をクリックすると、納品情報をモーダルで表示します。

表示内容:

  • ご納品方法
  • 補足情報

効果:

  • 納品詳細を素早く確認可能
  • UI/UXの向上

📝 メール管理機能の拡張

在庫アラートメールの即時送信

在庫アラートメールにも即時送信機能を追加しました。

効果:

  • 在庫不足を即座に通知
  • タイムリーな在庫管理

🔧 改善

🎯 未発送件数計算の精度向上

同日に注文と出庫がある場合の未発送件数表示を修正しました。

問題:

  • GetReflectionStatusForTitle は日単位の計算用で、時刻を無視
  • 同日の注文と出庫を区別できず、注文列の未発送件数が0と表示される

解決策:

  • トランザクション時点での正確な未発送件数を計算する専用ロジックを実装
  • 注文列: 注文時刻 - 1ナノ秒までの反映をカウント(同時刻の出庫は除外)
  • 出庫列: 出庫時刻までの反映をカウント(その出庫を含む)

効果:

  • 同日の注文と出庫でも正確な未発送件数を表示
  • トランザクションの順序を考慮した正確な計算

🔄 同日複数出庫の未発送件数計算

同日に複数の反映出庫がある場合、各出庫列で未発送件数が順次減少するように修正しました。

問題:

  • 複数の出庫が同じ時刻にある場合、全て同じ未発送件数を表示

解決策:

  • トランザクションの順序マップ(txIndexMap)を作成
  • 各出庫列で、その出庫までの反映を順序的にカウント
  • MaterialTransactionSetID を使用して反映とトランザクションを紐付け

効果:

  • 同日の複数出庫でも、各列で未発送件数が正確に減少
  • 進捗が明確に可視化

🕐 同日異なる時刻トランザクションの表示順序

同日に異なる時刻のトランザクションがある場合、時刻順(時系列順)で表示するように修正しました。

問題:

  • 従来は型優先度(in > out)でソート
  • 例:6/12に出庫(09:00)と入庫(23:59)がある場合、入庫が先に表示され時系列が逆転

解決策:

  • ソートロジックを変更:
    1. まず適用日時(時刻含む)で比較 → 時刻が異なれば時刻順
    2. 同時刻の場合のみ型優先度で判定(order > in > out)
    3. 型も同じ場合は created_at で判定

効果:

  • 在庫計算順序と表示順序が一致し、直感的な表示
  • 時系列が正しく表現される

💡 ビジネスロジックの明確化

在庫計算ロジックのビジネスルールをコメントで明記しました。

追加した注釈:

  • getStockAsOfDateadmin.go):

    • 「出庫可能在庫」を計算
    • 入庫当日は出庫不可のルール
    • 入庫は翌日から有効
  • transactionStockByMaterialmaterial.go):

    • 「在庫数推移の表示」専用
    • 各トランザクション時点での在庫数を即座に反映
    • 表示用とビジネスロジック用の違いを明記

効果:

  • 開発者の理解が容易に
  • 保守性の向上
  • 意図しない変更の防止

📱 UI/UXの改善

テーブル横スクロール

トランザクションテーブルが横スクロール可能になりました。

変更内容:

  • テーブル幅を max-content に設定
  • white-space: nowrap でテキストの折り返しを防止

効果:

  • ページ幅が狭い場合でも、全ての列を閲覧可能
  • テキストの折り返しがなく、データが読みやすい

セルパディングの調整

在庫数推移表とトランザクションテーブルのパディングを最適化しました。

調整内容:

  • 在庫数推移表のセルパディング: 6px → 2px(縦方向)
  • トランザクションテーブルのセルパディング: 12px → 6px(縦方向)
  • ヘッダーセクションのマージン・パディングを削減

効果:

  • より多くの情報を一画面に表示
  • コンパクトで見やすいレイアウト

レイアウトの最適化

ページ全体のレイアウトをフレックスボックスに変更しました。

変更内容:

  • 在庫数推移セクションとトランザクションセクションの高さ配分を最適化
  • スクロール処理の改善
  • 各セクションの余白とパディングを調整

効果:

  • より効率的な画面活用
  • スムーズなスクロール体験
  • 一貫性のある UI

🎨 スタイル改善

ナビゲーションバー

ナビバーのパディングを調整し、より洗練されたデザインに。

フィルター機能

在庫状況ページにマルチセレクトフィルタを追加:

  • 区分フィルタ(入庫・出庫・注文)
  • 組織名フィルタ
  • 納品方法フィルタ

効果:

  • 柔軟な絞り込みが可能
  • 大量データの中から必要な情報を素早く発見

バッジとタグ

  • 配送方法バッジの追加
  • クリック可能なバッジで詳細表示

🐛 バグ修正

発送日選択ロジックの修正

在庫反映ページの発送日選択ロジックを修正しました。

効果:

  • より正確な発送日の自動設定
  • ユーザーの入力負担を軽減

sessionStorage復元時の不整合修正

発送日変更時に反映数を自動補正する機能を追加しました。

効果:

  • データの整合性を維持
  • 予期しない動作を防止

ソートロジックの改善

同日履歴のソート整合性を改善しました。

変更内容:

  • created_at 条件を追加
  • 種類優先順位によるソートを実装

効果:

  • 表示順序が一貫性を持つ
  • 予測可能な動作

🔧 技術的改善

バックエンド

在庫計算の高度化

  • トランザクション単位の在庫数計算機能
  • トランザクション単位の未発送件数計算
  • トランザクション単位の発送件数計算
  • 高度なソートロジック(3段階ソート)

メール送信機能の拡張

  • 新しいテンプレートタイプの追加
  • 宛先指定機能
  • 除外宛先機能
  • 即時送信機能
  • 共通関数による宛先ユーザー取得ロジックの整理

データ構造の最適化

  • トランザクション順序マップ(txIndexMap
  • トランザクション単位のデータマップ
    • transactionStockByMaterial
    • transactionUnreflectedTotal
    • transactionShippedTotal

フロントエンド

Alpine.jsの機能拡張

  • 新しいデータプロパティ:

    • transactionStockByMaterial
    • transactionUnreflectedTotal
    • transactionShippedTotal
    • dailyShippedTotal
    • highlightedDatesMap
    • expandedColumns
  • 新しいメソッド:

    • getDailyStock() - トランザクション単位/日毎の在庫数取得
    • getDailyUnreflected() - 未発送件数取得
    • getDailyShipped() - 発送件数取得
    • getStockChangeType() - 在庫変動タイプ判定
    • getUnreflectedChangeType() - 未発送件数変動タイプ判定
    • getShippedChangeType() - 発送件数変動タイプ判定
    • updateHighlightedDatesMap() - 日付マップ更新
    • buildExpandedColumns() - 展開列配列構築

テンプレートの改善

  • 複数列展開表示のHTML構造
  • 視覚的強調のクラス適用
  • モーダル表示機能
  • フィルター UI
  • レスポンシブデザインの改善

CSSの最適化

  • 視覚的強調のスタイル定義
  • テーブル横スクロールのスタイル
  • パディング・マージンの最適化
  • フレックスボックスレイアウト
  • レスポンシブデザイン

パフォーマンス

クライアント側

  • トランザクション単位のデータをJSON化してサーバーから一括取得
  • クライアント側での計算を最小化
  • DOM操作の効率化

サーバー側

  • 不要なデバッグログの削除
  • データベースクエリの最適化
  • 計算ロジックの効率化

📝 使用上の注意

在庫数推移表について

  • 同日に多数のトランザクションがある場合、列数が増加します
  • ブラウザのパフォーマンスに影響する可能性があります
  • 横スクロールで全ての列を閲覧してください

メールテンプレートについて

  • 宛先設定を慎重に行ってください
  • 即時送信機能は重要な通知にのみ使用することを推奨します
  • 除外宛先は正確なメールアドレスを入力してください

ビジネスロジックの理解

  • 在庫数推移の表示と出庫可能在庫の計算は異なるロジックです
  • 入庫当日は出庫できないルールは反映ページで適用されます
  • 表示用の在庫数は履歴の正確性を重視しています

🔄 移行ガイド

データベース変更

このバージョンでは、既存のデータベーススキーマへの追加はありますが、破壊的な変更はありません。

新しいフィールド(既存のマイグレーションに含まれている):

  • email_templates.recipients
  • email_templates.excluded_recipients
  • email_templates.immediate_send

API変更

既存のAPIとの互換性は維持されています。新しいJSONフィールドが追加されましたが、既存のフィールドは変更されていません。

フロントエンド変更

  • ブラウザキャッシュをクリアして最新のJavaScriptとCSSを読み込んでください
  • 既存の機能は全て動作します

推奨事項

  • 在庫数推移表の新しい視覚的強調機能を活用してください
  • 発送件数累計で注文の進捗を確認してください
  • 納品連絡テンプレートの宛先設定を確認してください

📄 変更ファイル

バックエンド

  • internal/handlers/material.go - 在庫計算ロジックの大幅強化
  • internal/handlers/admin.go - ビジネスルールの注釈追加
  • internal/models/email_template.go - 納品連絡テンプレート追加
  • internal/services/email_service.go - 宛先取得ロジックの整理

フロントエンドテンプレート

  • web/templates/inventory_status.gohtml - 在庫数推移表の大幅改善
  • web/templates/admin_delivery_notification_email_queues.gohtml - 納品連絡メール管理画面
  • web/templates/email_template_admin.gohtml - メールテンプレート管理画面の更新
  • 各種CSSバージョンの更新

ドキュメント

  • docs/release-notes/v0.1.11.md (このファイル)

🎯 対象ユーザー

  • システム管理者: より詳細な在庫管理が可能に、柔軟なメール通知設定
  • 入力担当者: 視覚的に改善された在庫数推移表で作業効率が向上
  • 組織ユーザー: 発送進捗が明確に表示され、納品情報を素早く確認可能
  • 全ユーザー: より直感的で使いやすいUI/UX

🔗 関連プルリクエスト

  • #47 - Add cumulative shipped count to inventory transition table

互換性: v0.1.10からの移行において、データベーススキーマへの追加はありますが、破壊的な変更はありません。既存のAPIとの互換性は維持されており、全ての既存機能は引き続き動作します。このバージョンでは、在庫数推移表の表示機能が大幅に強化され、より詳細で正確な在庫管理が可能になりました。