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> 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)).toList(); // } // // Future> 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)).toList(); // } Future> 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)).toList(); } // ---- Portofolio ---- // Future> 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)).toList(); // } // Future> 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)).toList(); // } Future> 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)).toList(); } // ---- Transaksi ---- // Future> 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)).toList(); // } Future> 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)).toList(); } Future 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 = { '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 hapusTransaksi(List ids) async { await client.executeKwd('saat.transaksi', 'unlink', args: [ids]); } }