# スマートフォン用 見積納品請求領収書発行システム を制作します - 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 | | | | email | 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. 画面設計(ワイヤーフレーム) 1. **ホーム** - 「請求書作成」ボタン - 「顧客一覧」ボタン - 「商品一覧」ボタン 2. **顧客一覧** - 検索バー - 顧客カード(名前・電話) - 追加ボタン(連絡先インポート/手入力) 3. **商品一覧** - 検索バー - 商品カード(名前・単価・値引き) - 追加ボタン 4. **請求書作成** - 顧客選択ドロップダウン - 商品追加リスト(+ボタン) - 数量入力フィールド - 合計・税・値引き表示 - 「PDF生成」ボタン 5. **請求書プレビュー** - PDF/画像表示 - 共有/保存ボタン --- ### 6. 開発フロー 1. **環境構築** - Flutter SDK 3.x インストール - `pubspec.yaml` に必要パッケージ追加 2. **データベース設計** - `db_helper.dart` でテーブル作成・CRUD実装 3. **モデルクラス** - `Customer`, `Product`, `Invoice`, `InvoiceItem` を作成 4. **状態管理** - `CustomerProvider`, `ProductProvider`, `InvoiceProvider` を実装 5. **UI実装** - 画面ごとに `StatelessWidget` / `StatefulWidget` を作成 - `ListView.builder` でデータ表示 6. **PDF生成** - `pdf` パッケージでレイアウト設計 - `printing` でプレビュー・保存・共有 7. **テスト** - 単体テスト(モデル・DB) - widget テスト(画面遷移・入力) 8. **ビルド・デプロイ** - Android/iOS 向けビルド - GitHub Actions で自動テスト・ビルド --- ### 7. 将来の Odoo 同期設計(ロードマップ) - **認証**: OAuth2 / API キー - **エンドポイント**: `/api/invoices`, `/api/customers`, `/api/products` - **同期戦略**: - **プッシュ**: ローカルで作成した請求書を Odoo に POST - **プル**: Odoo から顧客・商品データを取得しローカルにマージ - **エラーハンドリング**: ネットワーク失敗時はローカルにキュー保存 - **UI**: 「同期」ボタン、同期ステータス表示 --- ### 8. 重要ポイント & リスク - **データ整合性**: SQLite の外部キー制約を有効化 - **パフォーマンス**: 大量データ時はページング実装 - **セキュリティ**: データ暗号化(`sqflite_sqlcipher`)検討 - **ユーザー体験**: 入力補完、バリデーション、エラーメッセージ --- ### 9. 次のステップ 1. `pubspec.yaml` に必要パッケージを追加 2. `db_helper.dart` を作成しテーブルを生成 3. モデルクラスを実装 4. 画面構成を決め、最小限の UI を作成 5. PDF 生成を試作し、レイアウトを確定 --- **以上が、現在の要件に基づくプロジェクト計画です。** 次に進める際は、上記の順序でタスクを分割し、GitHub Issues で管理するとスムーズです。