6 KiB
6 KiB
スマートフォン用 見積納品請求領収書発行システム を制作します
- flutterを使います
- 今は初期段階なので請求書だけを作ります
- 今は初期段階なのでスタンドアロンですが将来的にデータをodooとOnline時に同期する予定です
- 今はデータをローカルのsqliteで管理します
- 顧客データはスマートフォンの住所録から取り込むか貼り付けか手入力します
- 商品データは手入力しsqliteで管理します
- 値引きも商品データとしてsqliteで管理します
プロジェクト計画(スマートフォン用 見積納品請求領収書発行システム)
1. 目的・概要
- Flutterで構築するモバイルアプリ
- 現時点では請求書(領収書)発行機能のみ
- 将来的に Odoo とオンライン同期を実装
- データはローカル SQLite に保存
- 顧客情報は電話帳からインポート/手入力
- 商品・値引き情報は手入力で SQLite に保存
2. 主要機能一覧
| 機能 | 説明 | 優先度 |
|---|---|---|
| 請求書作成 | 顧客選択 → 商品・数量入力 → 合計・税・値引き計算 → PDF/画像生成 | ★★★★★ |
| 顧客管理 | 連絡先インポート、手入力、編集、削除 | ★★★★☆ |
| 商品管理 | 商品名・単価・値引き設定、編集、削除 | ★★★★☆ |
| データ永続化 | SQLite(sqflite)で顧客・商品・請求書履歴保存 | ★★★★★ |
| PDF/画像出力 | printing / pdf パッケージで請求書を生成 |
★★★★☆ |
| 将来の同期 | Odoo REST API 連携(認証・CRUD) | ★★☆☆☆ |
| UI/UX | Material Design、レスポンシブ、アクセシビリティ | ★★★★★ |
3. 技術スタック
- フロントエンド: Flutter 3.x, Dart
- データベース:
sqflite+path_provider - PDF生成:
pdf,printing - 状態管理:
provider(または Riverpod) - テスト:
flutter_test,mockito - CI/CD: GitHub Actions(ビルド・テスト)
4. データモデル(SQLite)
| テーブル | カラム | 型 | 備考 |
|---|---|---|---|
customers |
id | INTEGER PRIMARY KEY AUTOINCREMENT | |
| name | TEXT | ||
| phone | TEXT | ||
| address | TEXT | ||
| TEXT | |||
products |
id | INTEGER PRIMARY KEY AUTOINCREMENT | |
| name | TEXT | ||
| unit_price | REAL | ||
| discount | REAL | 0〜1 の割合 | |
invoices |
id | INTEGER PRIMARY KEY AUTOINCREMENT | |
| customer_id | INTEGER | FK | |
| date | TEXT | ISO8601 | |
| total | REAL | ||
| tax | REAL | ||
| discount_total | REAL | ||
invoice_items |
id | INTEGER PRIMARY KEY AUTOINCREMENT | |
| invoice_id | INTEGER | FK | |
| product_id | INTEGER | FK | |
| quantity | INTEGER | ||
| unit_price | REAL | ||
| discount | REAL |
5. 画面設計(ワイヤーフレーム)
- ホーム
- 「請求書作成」ボタン
- 「顧客一覧」ボタン
- 「商品一覧」ボタン
- 顧客一覧
- 検索バー
- 顧客カード(名前・電話)
- 追加ボタン(連絡先インポート/手入力)
- 商品一覧
- 検索バー
- 商品カード(名前・単価・値引き)
- 追加ボタン
- 請求書作成
- 顧客選択ドロップダウン
- 商品追加リスト(+ボタン)
- 数量入力フィールド
- 合計・税・値引き表示
- 「PDF生成」ボタン
- 請求書プレビュー
- PDF/画像表示
- 共有/保存ボタン
6. 開発フロー
- 環境構築
- Flutter SDK 3.x インストール
pubspec.yamlに必要パッケージ追加
- データベース設計
db_helper.dartでテーブル作成・CRUD実装
- モデルクラス
Customer,Product,Invoice,InvoiceItemを作成
- 状態管理
CustomerProvider,ProductProvider,InvoiceProviderを実装
- UI実装
- 画面ごとに
StatelessWidget/StatefulWidgetを作成 ListView.builderでデータ表示
- 画面ごとに
- PDF生成
pdfパッケージでレイアウト設計printingでプレビュー・保存・共有
- テスト
- 単体テスト(モデル・DB)
- widget テスト(画面遷移・入力)
- ビルド・デプロイ
- Android/iOS 向けビルド
- GitHub Actions で自動テスト・ビルド
7. 将来の Odoo 同期設計(ロードマップ)
- 認証: OAuth2 / API キー
- エンドポイント:
/api/invoices,/api/customers,/api/products - 同期戦略:
- プッシュ: ローカルで作成した請求書を Odoo に POST
- プル: Odoo から顧客・商品データを取得しローカルにマージ
- エラーハンドリング: ネットワーク失敗時はローカルにキュー保存
- UI: 「同期」ボタン、同期ステータス表示
8. 重要ポイント & リスク
- データ整合性: SQLite の外部キー制約を有効化
- パフォーマンス: 大量データ時はページング実装
- セキュリティ: データ暗号化(
sqflite_sqlcipher)検討 - ユーザー体験: 入力補完、バリデーション、エラーメッセージ
9. 次のステップ
pubspec.yamlに必要パッケージを追加db_helper.dartを作成しテーブルを生成- モデルクラスを実装
- 画面構成を決め、最小限の UI を作成
- PDF 生成を試作し、レイアウトを確定
以上が、現在の要件に基づくプロジェクト計画です。
次に進める際は、上記の順序でタスクを分割し、GitHub Issues で管理するとスムーズです。