// Version: 1.2 - Customer モデル定義 import '../services/database_helper.dart'; /// 顧客(得意先)情報モデル class Customer { int? id; String customerCode; // データベースでは product_code として保存 String name; String phoneNumber; String email; String address; int? salesPersonId; int taxRate; // デフォルト:8%(標準税率) int discountRate; DateTime createdAt; DateTime updatedAt; Customer({ this.id, required this.customerCode, required this.name, required this.phoneNumber, required this.email, required this.address, this.salesPersonId, this.taxRate = 8, // デフォルト:8% this.discountRate = 0, DateTime? createdAt, DateTime? updatedAt, }) : createdAt = createdAt ?? DateTime.now(), updatedAt = updatedAt ?? DateTime.now(); /// マップから Customer オブジェクトへ変換 factory Customer.fromMap(Map map) { return Customer( id: map['id'] as int?, customerCode: map['customer_code'] as String, // 'product_code' を 'customer_code' として扱う name: map['name'] as String, phoneNumber: map['phone_number'] as String, email: map['email'] as String, address: map['address'] as String, salesPersonId: map['sales_person_id'] as int?, taxRate: map['tax_rate'] as int? ?? 8, discountRate: map['discount_rate'] as int? ?? 0, createdAt: DateTime.parse(map['created_at'] as String), updatedAt: DateTime.parse(map['updated_at'] as String), ); } /// Map に変換 Map toMap() { return { 'id': id, 'customer_code': customerCode, 'name': name, 'phone_number': phoneNumber, 'email': email, 'address': address, 'sales_person_id': salesPersonId, 'tax_rate': taxRate, 'discount_rate': discountRate, 'created_at': createdAt.toIso8601String(), 'updated_at': updatedAt.toIso8601String(), }; } /// カピービルダ Customer copyWith({ int? id, String? customerCode, String? name, String? phoneNumber, String? email, String? address, int? salesPersonId, int? taxRate, int? discountRate, DateTime? createdAt, DateTime? updatedAt, }) { return Customer( id: id ?? this.id, customerCode: customerCode ?? this.customerCode, name: name ?? this.name, phoneNumber: phoneNumber ?? this.phoneNumber, email: email ?? this.email, address: address ?? this.address, salesPersonId: salesPersonId ?? this.salesPersonId, taxRate: taxRate ?? this.taxRate, discountRate: discountRate ?? this.discountRate, createdAt: createdAt ?? this.createdAt, updatedAt: updatedAt ?? this.updatedAt, ); } }