Files
saat-app/flutter/lib/models/portfolio.dart
Alex Ardhian 5ab72678a3 Gabung app Android Flutter 'Saat Invest' ke repo saat-app (folder flutter/)
Satu repo untuk backend Odoo (addon saat_invest) + app Android.
- flutter/ berisi project Flutter (lib/, android/, pubspec, test)
- Login Odoo JSON-RPC, tab Portofolio+Equity, tab Transaksi, catat jual/beli otomatis sync
- Build .gitignore nested dipakai sehingga artefak build/.dart_tool tak ter-track
Sejarah: gabung flat (satu sejarah backend+app).
2026-09-02 14:48:32 +07:00

42 lines
1.3 KiB
Dart

/// Model Portofolio: ringkasan posisi per saham dari Odoo saat.portofolio.
class Portfolio {
final int id;
final String sahamTicker;
final int sisaLembar;
final double avgCost;
final double hargaSekarang;
final double nilaiSekarang;
final double realizedPl;
final double unrealizedPl;
Portfolio({
required this.id,
required this.sahamTicker,
required this.sisaLembar,
required this.avgCost,
required this.hargaSekarang,
required this.nilaiSekarang,
required this.realizedPl,
required this.unrealizedPl,
});
factory Portfolio.fromOdoo(Map<String, dynamic> m) {
// saham_id adalah tuple/list [id, ticker] dalam search_read
String ticker = '';
final sahamId = m['saham_id'];
if (sahamId is List && sahamId.isNotEmpty) {
ticker = sahamId.length > 1 ? sahamId[1].toString() : '${sahamId[0]}';
}
return Portfolio(
id: (m['id'] as num).toInt(),
sahamTicker: ticker,
sisaLembar: (m['sisa_lembar'] as num?)?.toInt() ?? 0,
avgCost: (m['avg_cost'] as num?)?.toDouble() ?? 0,
hargaSekarang: (m['harga_sekarang'] as num?)?.toDouble() ?? 0,
nilaiSekarang: (m['nilai_sekarang'] as num?)?.toDouble() ?? 0,
realizedPl: (m['realized_pl'] as num?)?.toDouble() ?? 0,
unrealizedPl: (m['unrealized_pl'] as num?)?.toDouble() ?? 0,
);
}
}