Project management related changes

This commit is contained in:
2026-08-24 22:57:06 +05:30
parent 71b2389221
commit 2a106a8716
67 changed files with 3565 additions and 80 deletions

View File

@@ -11,12 +11,16 @@ import '../domain/invoice.dart';
import '../providers/customers_provider.dart';
import '../domain/customer.dart';
import '../../inventory/providers/products_provider.dart';
import '../../projects/providers/project_mode_provider.dart';
import '../../inventory/domain/product.dart';
import 'add_customer_sheet.dart';
import '../../transactions/providers/providers.dart';
class InvoiceBuilderScreen extends ConsumerStatefulWidget {
const InvoiceBuilderScreen({super.key});
final List<InvoiceItem>? initialItems;
final int? initialCustomerId;
const InvoiceBuilderScreen({super.key, this.initialItems, this.initialCustomerId});
@override
ConsumerState<InvoiceBuilderScreen> createState() => _InvoiceBuilderScreenState();
@@ -27,6 +31,29 @@ class _InvoiceBuilderScreenState extends ConsumerState<InvoiceBuilderScreen> {
Customer? _selectedCustomer;
final List<InvoiceItem> _items = [];
bool _isEmi = false;
@override
void initState() {
super.initState();
if (widget.initialItems != null) {
_items.addAll(widget.initialItems!);
}
}
void _loadInitialCustomer() {
if (widget.initialCustomerId != null && _selectedCustomer == null) {
final customers = ref.read(customersProvider).value;
if (customers != null) {
final cust = customers.where((c) => c.id == widget.initialCustomerId).firstOrNull;
if (cust != null) {
setState(() {
_selectedCustomer = cust;
});
}
}
}
}
String _emiCycle = 'MONTHLY';
final TextEditingController _emiAmountCtrl = TextEditingController();
final TextEditingController _invoiceNumberCtrl = TextEditingController(text: 'INV-${DateTime.now().millisecondsSinceEpoch.toString().substring(7)}');
@@ -104,6 +131,7 @@ class _InvoiceBuilderScreenState extends ConsumerState<InvoiceBuilderScreen> {
}
void _showAddItemDialog() {
final isProjectMode = ref.read(projectModeProvider);
Product? selectedProduct;
final TextEditingController descCtrl = TextEditingController();
final TextEditingController qtyCtrl = TextEditingController(text: '1');
@@ -126,7 +154,7 @@ class _InvoiceBuilderScreenState extends ConsumerState<InvoiceBuilderScreen> {
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Consumer(
if (!isProjectMode) Consumer(
builder: (context, dialogRef, _) {
final productsState = dialogRef.watch(productsProvider);
return productsState.when(
@@ -222,14 +250,16 @@ class _InvoiceBuilderScreenState extends ConsumerState<InvoiceBuilderScreen> {
),
],
),
const SizedBox(height: 12),
Row(
children: [
Expanded(child: PremiumTextField(controller: makingCtrl, labelText: 'Making Chg', keyboardType: TextInputType.number)),
const SizedBox(width: 8),
Expanded(child: PremiumTextField(controller: otherCtrl, labelText: 'Other Chg', keyboardType: TextInputType.number)),
],
),
if (!isProjectMode) ...[
const SizedBox(height: 12),
Row(
children: [
Expanded(child: PremiumTextField(controller: makingCtrl, labelText: 'Making Chg', keyboardType: TextInputType.number)),
const SizedBox(width: 8),
Expanded(child: PremiumTextField(controller: otherCtrl, labelText: 'Other Chg', keyboardType: TextInputType.number)),
],
),
],
],
),
),
@@ -332,6 +362,7 @@ class _InvoiceBuilderScreenState extends ConsumerState<InvoiceBuilderScreen> {
@override
Widget build(BuildContext context) {
_loadInitialCustomer();
final customersState = ref.watch(customersProvider);
final formatCurrency = NumberFormat.currency(symbol: '');