You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
260 lines
8.4 KiB
260 lines
8.4 KiB
1 year ago
|
import 'dart:convert';
|
||
|
|
||
|
import 'package:connectivity_plus/connectivity_plus.dart';
|
||
|
import 'package:siopas/models/transfer_peti_model.dart';
|
||
|
import 'package:internet_connection_checker/internet_connection_checker.dart';
|
||
|
import 'package:intl/intl.dart';
|
||
|
import '../../../connection/connection.dart';
|
||
|
import '../../../migrations/databasehelper.dart';
|
||
|
import '../../../models/asset_status_model.dart';
|
||
|
import 'package:http/http.dart' as http;
|
||
|
|
||
|
class SyncronizationGlobalData {
|
||
|
Future<int> addData(AssetStatusModel assetStatusModel) async {
|
||
|
final dbClient = await conn.db;
|
||
|
late int result;
|
||
|
try {
|
||
|
result = await dbClient!.insert(
|
||
|
SqfliteDatabaseHelper.peminjamanTable, assetStatusModel.toJson());
|
||
|
} catch (e) {
|
||
|
print('Error adding data to local SQLite: $e');
|
||
|
result = 0; // Handle the error appropriately
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
Future<List> fetchData() async {
|
||
|
var dbclient = await conn.db;
|
||
|
List assetStatusList = [];
|
||
|
try {
|
||
|
List<Map<String, dynamic>> maps = await dbclient!
|
||
|
.query(SqfliteDatabaseHelper.peminjamanTable, orderBy: 'id DESC');
|
||
|
for (var item in maps) {
|
||
|
assetStatusList.add(item);
|
||
|
}
|
||
|
} catch (e) {
|
||
|
print(e.toString());
|
||
|
}
|
||
|
return assetStatusList;
|
||
|
}
|
||
|
|
||
|
static Future<bool> isInternet() async {
|
||
|
var connectivityResult = await (Connectivity().checkConnectivity());
|
||
|
if (connectivityResult == ConnectivityResult.mobile) {
|
||
|
if (await InternetConnectionChecker().hasConnection) {
|
||
|
print("Mobile data detected & internet connection confirmed.");
|
||
|
return true;
|
||
|
} else {
|
||
|
print('No internet :( Reason:');
|
||
|
return false;
|
||
|
}
|
||
|
} else if (connectivityResult == ConnectivityResult.wifi) {
|
||
|
if (await InternetConnectionChecker().hasConnection) {
|
||
|
print("wifi data detected & internet connection confirmed.");
|
||
|
return true;
|
||
|
} else {
|
||
|
print('No internet :( Reason:');
|
||
|
return false;
|
||
|
}
|
||
|
} else {
|
||
|
print(
|
||
|
"Neither mobile data or WIFI detected, not internet connection found.");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
final conn = SqfliteDatabaseHelper.instance;
|
||
|
|
||
|
Future<List<AssetStatusModel>> fetchAllPeminjamanInfo() async {
|
||
|
final dbClient = await conn.db;
|
||
|
List<AssetStatusModel> peminjamanList = [];
|
||
|
try {
|
||
|
final maps = await dbClient!.query(SqfliteDatabaseHelper.peminjamanTable);
|
||
|
for (var item in maps) {
|
||
|
peminjamanList.add(AssetStatusModel.fromJson(item));
|
||
|
}
|
||
|
} catch (e) {
|
||
|
print(e.toString());
|
||
|
}
|
||
|
return peminjamanList;
|
||
|
}
|
||
|
|
||
|
Future<List<AssetStatusModel>> fetchAllPengembalianInfo() async {
|
||
|
final dbClient = await conn.db;
|
||
|
List<AssetStatusModel> pengembalianList = [];
|
||
|
try {
|
||
|
final maps =
|
||
|
await dbClient!.query(SqfliteDatabaseHelper.pengembalianTable);
|
||
|
for (var item in maps) {
|
||
|
pengembalianList.add(AssetStatusModel.fromJson(item));
|
||
|
}
|
||
|
} catch (e) {
|
||
|
print(e.toString());
|
||
|
}
|
||
|
return pengembalianList;
|
||
|
}
|
||
|
|
||
|
Future<List<TransferPetiModel>> fetchAllTransferInfo() async {
|
||
|
final dbClient = await conn.db;
|
||
|
List<TransferPetiModel> transferList = [];
|
||
|
try {
|
||
|
final maps =
|
||
|
await dbClient!.query(SqfliteDatabaseHelper.transferPetiTable);
|
||
|
for (var item in maps) {
|
||
|
transferList.add(TransferPetiModel.fromJson(item));
|
||
|
}
|
||
|
} catch (e) {
|
||
|
print(e.toString());
|
||
|
}
|
||
|
return transferList;
|
||
|
}
|
||
|
|
||
|
Future<void> deleteAllPeminjamanData() async {
|
||
|
var dbClient = await conn.db;
|
||
|
await dbClient!.delete(SqfliteDatabaseHelper.peminjamanTable);
|
||
|
}
|
||
|
|
||
|
Future<void> deleteAllPengembalianData() async {
|
||
|
var dbClient = await conn.db;
|
||
|
await dbClient!.delete(SqfliteDatabaseHelper.pengembalianTable);
|
||
|
}
|
||
|
|
||
|
Future<void> deleteAllTransferData() async {
|
||
|
var dbClient = await conn.db;
|
||
|
await dbClient!.delete(SqfliteDatabaseHelper.transferPetiTable);
|
||
|
}
|
||
|
|
||
|
Future saveToMysqlWith(List<AssetStatusModel> assetStatusesLocalList) async {
|
||
|
for (var i = 0; i < assetStatusesLocalList.length; i++) {
|
||
|
DateTime? parseDateTime(String? dateTimeString) {
|
||
|
if (dateTimeString == null || dateTimeString.isEmpty) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
return DateTime.parse(dateTimeString);
|
||
|
} catch (e) {
|
||
|
print('Error parsing DateTime: $e');
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Format tanggal sesuai kebutuhan
|
||
|
String formattedCreatedAt = assetStatusesLocalList[i].created_at != null
|
||
|
? DateFormat('yyyy-MM-dd HH:mm:ss.SSS')
|
||
|
.format(assetStatusesLocalList[i].created_at!)
|
||
|
: DateFormat('yyyy-MM-dd HH:mm:ss.SSS').format(DateTime.now());
|
||
|
|
||
|
Map<String, dynamic> data = {
|
||
|
"mobile_id": assetStatusesLocalList[i].mobile_id.toString(),
|
||
|
"peti_id": assetStatusesLocalList[i].peti_id.toString(),
|
||
|
"exit_at": assetStatusesLocalList[i].exit_at.toString(),
|
||
|
"est_pengembalian":
|
||
|
assetStatusesLocalList[i].est_pengembalian.toString(),
|
||
|
"exit_pic": assetStatusesLocalList[i].exit_pic.toString(),
|
||
|
"exit_warehouse": assetStatusesLocalList[i].exit_warehouse.toString(),
|
||
|
// "status": assetStatusesLocalList[i].status.toString(),
|
||
|
"created_by": assetStatusesLocalList[i].created_by.toString(),
|
||
|
"created_at": formattedCreatedAt,
|
||
|
};
|
||
|
|
||
|
final response = await http.post(
|
||
|
Uri.parse(await getBaseUrl() + '/asset-status/store'),
|
||
|
body: data,
|
||
|
);
|
||
|
|
||
|
if (response.statusCode == 200) {
|
||
|
// print("Data uploaded successfully for index $i:");
|
||
|
// print("Response body: ${response.body}");
|
||
|
print("Saving Data saveToMysqlWith");
|
||
|
} else {
|
||
|
print(
|
||
|
"Failed to upload data for index $i. Status code: ${response.statusCode}");
|
||
|
print("Response body: ${response.body}");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return true; // Pengunggahan berhasil
|
||
|
}
|
||
|
|
||
|
Future<List> fetchAllCustomerInfo() async {
|
||
|
final dbClient = await conn.db;
|
||
|
List contactList = [];
|
||
|
try {
|
||
|
final maps = await dbClient!.query(SqfliteDatabaseHelper.peminjamanTable);
|
||
|
for (var item in maps) {
|
||
|
contactList.add(item);
|
||
|
}
|
||
|
} catch (e) {
|
||
|
print(e.toString());
|
||
|
}
|
||
|
return contactList;
|
||
|
}
|
||
|
|
||
|
Future saveToMysql(List assetStatusesLocalList) async {
|
||
|
DateTime? parseDateTime(String? dateTimeString) {
|
||
|
if (dateTimeString == null || dateTimeString.isEmpty) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
return DateTime.parse(dateTimeString);
|
||
|
} catch (e) {
|
||
|
print('Error parsing DateTime: $e');
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for (var i = 0; i < assetStatusesLocalList.length; i++) {
|
||
|
// Format tanggal sesuai kebutuhan
|
||
|
String formattedCreatedAt =
|
||
|
assetStatusesLocalList[i]['created_at'] != null
|
||
|
? DateFormat('yyyy-MM-dd HH:mm:ss.SSS')
|
||
|
.format(assetStatusesLocalList[i]['created_at'])
|
||
|
: DateFormat('yyyy-MM-dd HH:mm:ss.SSS').format(DateTime.now());
|
||
|
|
||
|
Map<String, dynamic> data = {
|
||
|
"mobile_id": assetStatusesLocalList[i]['mobile_id'].toString(),
|
||
|
"peti_id": assetStatusesLocalList[i]['peti_id'].toString(),
|
||
|
"exit_at": assetStatusesLocalList[i]['exit_at'].toString(),
|
||
|
"est_pengembalian":
|
||
|
assetStatusesLocalList[i]['est_pengembalian'].toString(),
|
||
|
"exit_pic": assetStatusesLocalList[i]['exit_pic'].toString(),
|
||
|
"exit_warehouse":
|
||
|
assetStatusesLocalList[i]['exit_warehouse'].toString(),
|
||
|
"status": assetStatusesLocalList[i]['status'].toString(),
|
||
|
"created_by": assetStatusesLocalList[i]['created_by'].toString(),
|
||
|
"created_at": formattedCreatedAt,
|
||
|
};
|
||
|
|
||
|
final response = await http.post(
|
||
|
Uri.parse(await getBaseUrl() + '/asset-status/store'),
|
||
|
body: data);
|
||
|
if (response.statusCode == 200) {
|
||
|
print(response.body);
|
||
|
print("Saving Data saveToMysql");
|
||
|
} else {
|
||
|
print(response.statusCode);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Future<List<AssetStatusModel>> fetchFromApi() async {
|
||
|
final response = await http.get(
|
||
|
Uri.parse(await getBaseUrl() + '/asset-status'),
|
||
|
);
|
||
|
|
||
|
if (response.statusCode == 200) {
|
||
|
List<dynamic> data = json.decode(response.body)['data']['asset_status'];
|
||
|
List<AssetStatusModel> contactDBList = data
|
||
|
.map(
|
||
|
(item) => AssetStatusModel.fromJson(item as Map<String, dynamic>))
|
||
|
.toList();
|
||
|
|
||
|
return contactDBList;
|
||
|
} else {
|
||
|
throw Exception('Failed to fetch data from API Asset Status');
|
||
|
}
|
||
|
}
|
||
|
}
|