riceshop は、農場で生産したお米を、特定の顧客(Facebook のフレンドおよびリアルフレンド)に対してオンラインで販売するための WEB システムです。新規顧客の獲得を目的とした一般向け EC ではなく、友人・知人との信頼関係をベースとした柔軟な取引を支援することを狙いとしています。
このシステムは、既存の販売業務における次の課題を解決します。
| 種別 | できること |
|---|---|
| 購入者 | 商品の閲覧・注文、注文履歴/ステータス確認、注文変更・キャンセル、請求書 PDF のダウンロード |
| 管理者 | 農場主 1 名のみ。注文管理・出荷ワークフロー・顧客管理・在庫管理・マスタ管理など全ての管理機能を操作 |
[購入者] [管理者]
│ │
│ ① 商品を選びカートへ │
│ (お届け先ごとに独立したカート) │
│ │
│ ② 注文確定 │
│ (参考送料を含めて確認) ──────▶ ③ ダッシュボードで新規注文を確認
│ │ └ 注文受付
│ │
│ │ ④ 袋詰管理(必要袋数を自動集計)
│ │
│ │ ⑤ 自動引当・パッケージングボードで箱詰め
│ │ └ 梱包確定時に確定送料を自動計算
│ │
│ │ ⑥ 発送管理(ヤマトB2 CSV 出力/伝票番号取込)
│ │
│ ⑦ 注文詳細で配送状況・伝票番号を確認 ◀── 発送
│ │
│ ⑧ 請求書 PDF をダウンロード │ ⑨ 入金管理
ショッピングカートは お届け先ごとに独立しています。購入者は「自宅用」「実家への贈り物用」といった複数の配送グループを同時に保持でき、注文確定時はそれぞれがお届け先ごとの個別の注文として記録されます。
送料は二段階で扱われます。
provisional_shipping_fee) — 注文時にカート内容から梱包をシミュレーションして算出する見込み額。購入者向けに「参考」として提示する。final_shipping_fee) — 管理者が梱包を確定した時点で、実際の箱数に基づき自動計算される最終額。注文の商品内容が変更されると自動的に未確定(NULL)に戻る。請求書は、確定送料が未設定の注文が含まれる場合は「送料(未確定)」「合計(暫定)」と明記され、全送料が確定して初めて最終合計額が表示されます。
在庫は品種ごとに玄米換算で管理します。システムは「総供給量」と「総注文量」を保持し、「現在在庫量」は両者の差分から動的に計算されます。管理者は専用 UI から「総供給量」を調整量(増減)で更新します。在庫を変更する処理はすべて DB トランザクションと排他ロックで保護されます。
| 層 | 採用技術 |
|---|---|
| バックエンド | Django |
| フロントエンド | Bootstrap 5 / JavaScript(動的 UI は API 経由で通信) |
| データベース | MySQL |
| インフラ | Docker コンテナ。本番は traefik(リバースプロキシ)による HTTPS 化を想定 |
機能は責務ごとに分割された Django アプリ群(accounts / products / orders / cart / system_settings / dashboard / mg_orders / mg_customers / mg_masters / mg_workflow)で構成されます。このほか、共通テンプレートタグなどを提供する補助アプリ common も存在します。詳細は アーキテクチャ を参照してください。
元資料: specs/01_要件定義書.md (Ver.4.3), specs/03_基本設計書.md (Ver.5.2)
関連: README, specs棚卸し表, Issue #1