133 lines
4.2 KiB
Dart
133 lines
4.2 KiB
Dart
import '../api/odoo_client.dart';
|
|
import '../models/portfolio.dart';
|
|
import '../models/saham_transaksi.dart';
|
|
|
|
/// Layanan domain utk model Odoo saat_invest.
|
|
class StockService {
|
|
StockService(this.client);
|
|
|
|
final OdooClient client;
|
|
|
|
// ---- Saham ----
|
|
// Future<List<Saham>> listSahamOld() async {
|
|
// final res = await client.executeKwd(
|
|
// 'saat.saham',
|
|
// 'search_read',
|
|
// args: [
|
|
// "saat.saham",
|
|
// "search_read",
|
|
// [[]],
|
|
// {'fields': ['name', 'perusahaan', 'sector'], "limit": 100, "offset": 0, "order": "name asc"},
|
|
// ],
|
|
// );
|
|
// return (res as List).map((e) => Saham.fromOdoo(e as Map<String, dynamic>)).toList();
|
|
// }
|
|
//
|
|
// Future<List<Saham>> listSaham() async {
|
|
// final res = await client.executeKwdWithArgs(
|
|
// 'saat.saham',
|
|
// 'search_read',
|
|
// fields: [
|
|
// {'fields': ['name', 'perusahaan', 'sector'],}
|
|
// ]
|
|
// );
|
|
// return (res as List).map((e) => Saham.fromOdoo(e as Map<String, dynamic>)).toList();
|
|
// }
|
|
|
|
Future<List<Saham>> listSaham() async {
|
|
final fields = ['name', 'perusahaan', 'sector'];
|
|
final res = await client.executeSearchReadPayload("saat.saham", fields);
|
|
return (res as List).map((e) => Saham.fromOdoo(e as Map<String, dynamic>)).toList();
|
|
}
|
|
|
|
// ---- Portofolio ----
|
|
// Future<List<Portfolio>> listPortofolio() async {
|
|
// final res = await client.executeKwd(
|
|
// 'saat.portofolio',
|
|
// 'search_read',
|
|
// args: [
|
|
// [],
|
|
// {
|
|
// 'fields': [
|
|
// 'saham_id', 'sisa_lembar', 'avg_cost', 'harga_sekarang',
|
|
// 'nilai_sekarang', 'realized_pl', 'unrealized_pl',
|
|
// ]
|
|
// },
|
|
// ],
|
|
// );
|
|
// return (res as List).map((e) => Portfolio.fromOdoo(e as Map<String, dynamic>)).toList();
|
|
// }
|
|
|
|
// Future<List<Portfolio>> listPortofolio() async {
|
|
// final res = await client.executeKwdWithArgs(
|
|
// 'saat.portofolio',
|
|
// 'search_read',
|
|
// fields: [
|
|
// {
|
|
// "fields": ["saham_id", "sisa_lembar", "avg_cost", "harga_sekarang",
|
|
// "nilai_sekarang", "realized_pl", "unrealized_pl"],
|
|
// "limit": 20,
|
|
// "offset": 0
|
|
// }
|
|
// ],
|
|
// );
|
|
// return (res as List).map((e) => Portfolio.fromOdoo(e as Map<String, dynamic>)).toList();
|
|
// }
|
|
|
|
Future<List<Portfolio>> listPortofolio() async {
|
|
final fields = [
|
|
'saham_id', 'sisa_lembar', 'avg_cost', 'harga_sekarang',
|
|
'nilai_sekarang', 'realized_pl', 'unrealized_pl',
|
|
];
|
|
final res = await client.executeSearchReadPayload("saat.portofolio", fields);
|
|
return (res as List).map((e) => Portfolio.fromOdoo(e as Map<String, dynamic>)).toList();
|
|
}
|
|
|
|
// ---- Transaksi ----
|
|
// Future<List<Transaksi>> listTransaksi() async {
|
|
// final res = await client.executeKwdWithArgs(
|
|
// 'saat.transaksi',
|
|
// 'search_read',
|
|
// fields: [
|
|
// {
|
|
// 'fields': [
|
|
// 'tanggal', 'tipe', 'saham_id', 'volume', 'harga', 'fee', 'total'
|
|
// ],
|
|
// 'order': 'tanggal desc, id desc',
|
|
// },
|
|
// ],
|
|
// );
|
|
// return (res as List).map((e) => Transaksi.fromOdoo(e as Map<String, dynamic>)).toList();
|
|
// }
|
|
|
|
Future<List<Transaksi>> listTransaksi() async {
|
|
final fields = ['tanggal', 'tipe', 'saham_id', 'volume', 'harga', 'fee', 'total'];
|
|
final res = await client.executeSearchReadPayload("saat.transaksi", fields);
|
|
return (res as List).map((e) => Transaksi.fromOdoo(e as Map<String, dynamic>)).toList();
|
|
}
|
|
|
|
Future<int> addTransaksi({
|
|
required int sahamId,
|
|
required String tipe, // buy | sell
|
|
required int volume,
|
|
required double harga,
|
|
required double fee,
|
|
String? tanggal, // 'YYYY-MM-DD'
|
|
}) async {
|
|
final vals = <String, dynamic>{
|
|
'saham_id': sahamId,
|
|
'tipe': tipe,
|
|
'volume': volume,
|
|
'harga': harga,
|
|
'fee': fee,
|
|
if (tanggal != null) 'tanggal': tanggal,
|
|
};
|
|
final res = await client.executeKwd('saat.transaksi', 'create', args: [vals]);
|
|
return (res as num).toInt();
|
|
}
|
|
|
|
Future<void> hapusTransaksi(List<int> ids) async {
|
|
await client.executeKwd('saat.transaksi', 'unlink', args: [ids]);
|
|
}
|
|
}
|