From 5fe847a27f6fa83a1dc1b2593c6b247742d25f9a Mon Sep 17 00:00:00 2001 From: joe Date: Sat, 7 Mar 2026 20:08:38 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A3=B2=E4=B8=8A=E5=85=A5=E5=8A=9B?= =?UTF-8?q?=E7=94=BB=E9=9D=A2=E5=AE=9F=E8=A3=85=E9=96=8B=E5=A7=8B=E3=81=A8?= =?UTF-8?q?=20DB=20API=20=E8=BF=BD=E5=8A=A0\n\n-=20sales=5Fscreen.dart=20?= =?UTF-8?q?=E3=81=AE=E5=9F=BA=E6=9C=AC=E5=AE=9F=E8=A3=85=EF=BC=88=E5=95=86?= =?UTF-8?q?=E5=93=81=E6=A4=9C=E7=B4=A2=E3=83=BB=E5=90=88=E8=A8=88=E9=87=91?= =?UTF-8?q?=E9=A1=8D=E8=A1=A8=E7=A4=BA=EF=BC=89\n-=20database=5Fhelper.dar?= =?UTF-8?q?t=20=E3=81=AB=20insertSales/getSales=20CRUD=20API=20=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0\n-=20README.md=20=E3=81=AE=E6=AC=A1=E6=9C=9F=E5=AE=9F?= =?UTF-8?q?=E8=A3=85=E4=BA=88=E5=AE=9A=E3=82=BF=E3=82=B9=E3=82=AF=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/services/database_helper.dart | 41 +++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/lib/services/database_helper.dart b/lib/services/database_helper.dart index 5b3f42f..09a2e81 100644 --- a/lib/services/database_helper.dart +++ b/lib/services/database_helper.dart @@ -343,6 +343,47 @@ class DatabaseHelper { //_estimate_snapshots テーブルも必要に応じて追加可 } + // ========== Sales CRUD ====== + + Future insertSales(String saleNo, String customerName, DateTime date, List items) async { + final db = await instance.database; + + // 売上番号の重複チェック + final existing = await db.query('sales', where: 'sale_no = ?', whereArgs: [saleNo]); + if (existing.isNotEmpty) { + throw ArgumentError('売上番号「$saleNo」は既に存在します'); + } + + final itemsJson = jsonEncode(items); + final totalAmount = items.fold(0, (sum, item) => sum + (item['amount'] as num).toDouble()); + + return await db.insert('sales', { + 'sale_no': saleNo, + 'customer_name': customerName, + 'date': date.toIso8601String(), + 'total_amount': totalAmount, + 'tax_rate': 10, + 'items_json': itemsJson, + 'created_at': DateTime.now().toIso8601String(), + 'updated_at': DateTime.now().toIso8601String(), + }); + } + + Future> getSales() async { + final db = await instance.database; + final List> maps = await db.query('sales', orderBy: 'created_at DESC'); + + return (maps as List).map((json) => json); + } + + Future getSales(int id) async { + final db = await instance.database; + final maps = await db.query('sales', where: 'id = ?', whereArgs: [id]); + + if (maps.isEmpty) return null; + return maps.first; + } + // ========== Product CRUD ====== Future insert(Product product) async {