import 'package:bbm_tracking/model/bensin_m.dart'; import 'package:bbm_tracking/model/kendaraan_m.dart'; import 'package:bbm_tracking/model/photo_m.dart'; import 'package:bbm_tracking/model/status_m.dart'; import 'package:bbm_tracking/model/transaksiPerMonth_m.dart'; import 'package:bbm_tracking/model/transaksi_m.dart'; import 'package:flutter/material.dart'; import 'dart:async'; import 'package:flutter/widgets.dart'; import 'package:intl/intl.dart'; import 'package:path/path.dart'; // import 'package:sqflite/sqflite.dart'; import 'package:flutter/foundation.dart'; import 'package:sqflite/sqflite.dart' as sql; import 'package:sqflite/sqlite_api.dart'; class DatabasesMain { Future createTablesBensin(sql.Database database) async { await database.execute("""CREATE TABLE bensin( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, value TEXT, text TEXT, perusahaan TEXT, harga INTEGER ) """); } Future createTablesTransaksi(sql.Database database) async { await database.execute("""CREATE TABLE transaksi( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, kendaraanId TEXT, bensinId TEXT, kodeTransaksi TEXT, tanggalTransaksi DATETIME, waktuTransaksi DATETIME, lokasiPertamina TEXT, totalLiter TEXT, hargaPerLiter INTEGER, totalBayar INTEGER, odometer TEXT, catatan TEXT, latitude TEXT, longitude TEXT, status INTEGER ) """); } Future createTablesKendaraan(sql.Database database) async { await database.execute("""CREATE TABLE kendaraan( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, bahanBakar TEXT, jenisKendaraan TEXT, namaKendaraan TEXT, nomorPlat TEXT, cc INTEGER, odometer TEXT, kepemilikan TEXT, status INTEGER ) """); } Future createTablesFirstIn(sql.Database database) async { await database.execute("""CREATE TABLE firstIn( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, status INTEGER ) """); } Future createTableMapPhotoTransaction(sql.Database database) async { await database.execute("""CREATE TABLE photo( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, transaksi_id TEXT, linkPhoto TEXT, namePhoto TEXT )"""); } Future dbs() async { return sql.openDatabase( join(await sql.getDatabasesPath(), 'bbmtracking1.db'), version: 1, onCreate: (sql.Database database, int version) async { await createTablesBensin(database); await createTablesTransaksi(database); await createTablesKendaraan(database); await createTablesFirstIn(database); await createTableMapPhotoTransaction(database); }, ); } //kendaraan Future> getStatusIn() async { final db = await dbs(); final List> maps = await db.query('firstIn'); return List.generate(maps.length, (index) { return StatusModel( id: maps[index]['id'], status: maps[index]['status'], ); }); } Future insertDataStatus() async { final db = await dbs(); await db.rawInsert("INSERT INTO firstIn(status) VALUES(1)"); } //bensin Future> getAllBensin() async { final db = await dbs(); final List> maps = await db.query('bensin'); return List.generate(maps.length, (index) { return BensinModel( id: maps[index]['id'], value: maps[index]['value'], text: maps[index]['text'], perusahaan: maps[index]['perusahaan'], harga: maps[index]['harga'], ); }); } //kendaraan Future> getAllKendaraan() async { final db = await dbs(); final List> maps = await db.query('kendaraan'); return List.generate(maps.length, (index) { return KendaraanModel( id: maps[index]['id'], jenisKendaraan: maps[index]['jenisKendaraan'], namaKendaraan: maps[index]['namaKendaraan'], nomorPlat: maps[index]['nomorPlat'], bahanBakar: maps[index]['bahanBakar'], cc: maps[index]['cc'], odometer: maps[index]['odometer'], kepemilikan: maps[index]['kepemilikan'], status: maps[index]['status'], ); }); } Future insertDataKendaraan(KendaraanModel kendaraan) async { final db = await dbs(); await db.rawInsert( "INSERT INTO kendaraan(bahanBakar,jenisKendaraan,namaKendaraan,nomorPlat,cc,odometer,kepemilikan,status) VALUES('${kendaraan.bahanBakar}','${kendaraan.jenisKendaraan}','${kendaraan.namaKendaraan}','${kendaraan.nomorPlat}','${kendaraan.cc}','${kendaraan.odometer}','${kendaraan.kepemilikan}','${kendaraan.status}')"); } Future updateDataKendaraan(KendaraanModel kendaraan) async { final db = await dbs(); db.rawUpdate( "UPDATE kendaraan SET bahanBakar=?, jenisKendaraan = ?, namaKendaraan = ?, nomorPlat = ?, cc = ?, odometer = ?, kepemilikan = ? WHERE id = ?", [ kendaraan.bahanBakar, kendaraan.jenisKendaraan, kendaraan.namaKendaraan, kendaraan.nomorPlat, kendaraan.cc, kendaraan.odometer, kendaraan.kepemilikan, kendaraan.id, ], ); } Future deleteDataKendaraan(int id) async { final db = await dbs(); await db.rawDelete("DELETE FROM kendaraan WHERE id = ${id}"); } Future updateStatusAktifKendaraan(int id, int status) async { final db = await dbs(); await db.rawUpdate("UPDATE kendaraan SET status = 0"); await db .rawUpdate("UPDATE kendaraan SET status = ${status} WHERE id = ${id}"); } // transaksi Future> getAllTransaksiStatusSuccessfull() async { final db = await dbs(); final List> maps = await db.query('transaksi', where: "status = 1"); return List.generate(maps.length, (index) { return TransaksiModel( id: maps[index]['id'], kendaraanId: maps[index]['kendaraanId'], bensinId: maps[index]['bensinId'], kodeTransaksi: maps[index]['kodeTransaksi'], tanggalTransaksi: maps[index]['tanggalTransaksi'] != null ? DateTime.parse(maps[index]['tanggalTransaksi']) : DateTime.now(), waktuTransaksi: maps[index]['waktuTransaksi'] != null ? DateTime.parse(maps[index]['waktuTransaksi']) : DateTime.now(), lokasiPertamina: maps[index]['lokasiPertamina'] != null ? maps[index]['lokasiPertamina'] : "-", totalLiter: maps[index]['totalLiter'] != null ? maps[index]['totalLiter'] : "0", hargaPerLiter: maps[index]['hargaPerLiter'] != null ? maps[index]['hargaPerLiter'] : 0, totalBayar: maps[index]['totalBayar'] != null ? maps[index]['totalBayar'] : 0, odometer: maps[index]['odometer'] != null ? maps[index]['odometer'] : "0", catatan: maps[index]['catatan'] != null ? maps[index]['catatan'] : "-", lat: maps[index]['latitude'] != null ? maps[index]['latitude'] : "0", lang: maps[index]['longitude'] != null ? maps[index]['longitude'] : "0", status: maps[index]['status'], ); }); } Future> getAllPhoto(param) async { final db = await dbs(); final List> maps = await db.query('photo', where: "transaksi_id = '${param}'"); return List.generate(maps.length, (index) { return PhotoModel( id: maps[index]['id'], transaksi_id: maps[index]['transaksi_id'], linkPhoto: maps[index]['linkPhoto'], namePhoto: maps[index]['namePhoto'], ); }); } Future> getAllTransaksiStatusSuccessfullThisMonth(String datetime) async { final db = await dbs(); final List> maps = await db.rawQuery( "SELECT kendaraanId, SUM(totalLiter) as totalLiter, SUM(totalBayar) as totalBayar, tanggalTransaksi FROM transaksi WHERE (strftime('%m', tanggalTransaksi) = strftime('%m', '${datetime}')) AND status = 1 GROUP BY tanggalTransaksi ORDER BY tanggalTransaksi ASC"); return List.generate(maps.length, (index) { return TransaksiPerMonthModel( kendaraanId: maps[index]['kendaraanId'], totalLiter: maps[index]['totalLiter'] != null ? maps[index]['totalLiter'] : 0, totalBayar: maps[index]['totalBayar'] != null ? maps[index]['totalBayar'] : 0, tanggalTransaksi: maps[index]['tanggalTransaksi'] != null ? DateTime.parse(maps[index]['tanggalTransaksi']) : DateTime.now(), ); }); } Future> getAllTransaksiStatusDraft() async { final db = await dbs(); final List> maps = await db.query('transaksi', where: "status = 0"); return List.generate(maps.length, (index) { return TransaksiModel( id: maps[index]['id'], kendaraanId: maps[index]['kendaraanId'], bensinId: maps[index]['bensinId'], kodeTransaksi: maps[index]['kodeTransaksi'], tanggalTransaksi: maps[index]['tanggalTransaksi'] != null ? DateTime.parse(maps[index]['tanggalTransaksi']) : DateTime.now(), waktuTransaksi: maps[index]['waktuTransaksi'] != null ? DateTime.parse(maps[index]['waktuTransaksi']) : DateTime.now(), lokasiPertamina: maps[index]['lokasiPertamina'] != null ? maps[index]['lokasiPertamina'] : "-", totalLiter: maps[index]['totalLiter'] != null ? maps[index]['totalLiter'] : "0", hargaPerLiter: maps[index]['hargaPerLiter'] != null ? maps[index]['hargaPerLiter'] : 0, totalBayar: maps[index]['totalBayar'] != null ? maps[index]['totalBayar'] : 0, odometer: maps[index]['odometer'] != null ? maps[index]['odometer'] : "0", catatan: maps[index]['catatan'] != null ? maps[index]['catatan'] : "-", lat: maps[index]['latitude'] != null ? maps[index]['latitude'] : "0", lang: maps[index]['longitude'] != null ? maps[index]['longitude'] : "0", status: maps[index]['status'], ); }); } Future insertDataTransaksi(TransaksiModel model) async { final db = await dbs(); final DateFormat formatter = DateFormat('yyyy-MM-dd'); final String formatted = formatter.format(model.tanggalTransaksi); final qry = "INSERT INTO transaksi(kendaraanId,bensinId,kodeTransaksi,tanggalTransaksi,waktuTransaksi,lokasiPertamina,totalLiter,HargaPerliter,totalBayar,odometer,catatan,latitude,longitude,status) " + "VALUES('${model.kendaraanId}','${model.bensinId}','${model.kodeTransaksi}','${model.tanggalTransaksi.toString()}','${model.waktuTransaksi.toString()}','${model.lokasiPertamina}','${model.totalLiter}','${model.hargaPerLiter}','${model.totalBayar}','${model.odometer}','${model.catatan}','${model.lat}','${model.lang}','${model.status}')"; await db.rawInsert(qry); // print(qry); } // photo Future insertDataPhoto(PhotoModel model) async { final db = await dbs(); await db.rawInsert( "INSERT INTO photo(transaksi_id,linkPhoto,namePhoto) VALUES('${model.transaksi_id}','${model.linkPhoto}','${model.namePhoto}')"); } }