feat: profit loss

This commit is contained in:
efrilm
2025-08-17 22:36:46 +07:00
parent beb9ead4da
commit 50b06da627
21 changed files with 4548 additions and 424 deletions
@@ -1,10 +1,14 @@
import 'package:flutter/material.dart';
import 'package:line_icons/line_icons.dart';
import '../../../../common/extension/extension.dart';
import '../../../../common/theme/theme.dart';
import '../../../../domain/analytic/analytic.dart';
class FinanceProfitLoss extends StatelessWidget {
const FinanceProfitLoss({super.key});
final ProfitLossSummary data;
const FinanceProfitLoss({super.key, required this.data});
@override
Widget build(BuildContext context) {
@@ -49,52 +53,77 @@ class FinanceProfitLoss extends StatelessWidget {
),
const SizedBox(height: 20),
// Total Revenue (Penjualan Kotor)
_buildPLItem(
'Penjualan Kotor',
'Rp 25.840.000',
data.totalRevenue.currencyFormatRp,
AppColor.success,
true,
),
_buildPLItem('Diskon & Retur', '- Rp 560.000', AppColor.error, false),
// Discount (Diskon & Retur)
_buildPLItem(
'Diskon & Retur',
'- ${data.totalDiscount.currencyFormatRp}',
AppColor.error,
false,
),
const Divider(height: 24),
// Net Sales (Penjualan Bersih = Total Revenue - Discount)
_buildPLItem(
'Penjualan Bersih',
'Rp 25.280.000',
(data.totalRevenue - data.totalDiscount).currencyFormatRp,
AppColor.textPrimary,
true,
isHeader: true,
),
const SizedBox(height: 12),
// Cost of Goods Sold (HPP)
_buildPLItem(
'HPP (Harga Pokok Penjualan)',
'- Rp 15.120.000',
'- ${data.totalCost.currencyFormatRp}',
AppColor.error,
false,
),
const Divider(height: 24),
// Gross Profit (Laba Kotor)
_buildPLItem(
'Laba Kotor',
'Rp 10.160.000',
data.grossProfit.currencyFormatRp,
AppColor.success,
true,
isHeader: true,
showPercentage: true,
percentage: '${data.grossProfitMargin.toStringAsFixed(1)}%',
),
const SizedBox(height: 12),
// Operational Cost (Biaya Operasional) - calculated as difference
_buildPLItem(
'Biaya Operasional',
'- Rp 2.640.000',
'- ${_calculateOperationalCost().currencyFormatRp}',
AppColor.error,
false,
),
const Divider(height: 24),
// Net Profit (Laba Bersih)
_buildPLItem(
'Laba Bersih',
'Rp 7.520.000',
data.netProfit.currencyFormatRp,
AppColor.primary,
true,
isHeader: true,
showPercentage: true,
percentage: '29.8%',
percentage: '${data.netProfitMargin.round()}%',
),
],
),
@@ -155,4 +184,9 @@ class FinanceProfitLoss extends StatelessWidget {
),
);
}
// Calculate operational cost as the difference between gross profit and net profit
int _calculateOperationalCost() {
return data.grossProfit - data.netProfit - data.totalTax;
}
}