Merge branch 'master' of tzw/fcs into master

This commit is contained in:
2024-10-08 01:44:03 +06:30
committed by Gogs
15 changed files with 75 additions and 69 deletions

View File

@@ -2,35 +2,25 @@ import 'package:flutter/material.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
enum Flavor { UNSET, DEV, STAGING, PRODUCTION, LOCAL } enum Flavor { UNSET, DEV, STAGING, PRODUCTION, LOCAL }
const FlavorNames = ["Unset", "Development", "Staging", "Production", "Local"]; const FlavorNames = ["Unset", "Development", "Staging", "Production", "Local"];
class Config { class Config {
static Config _instance = Config( static Config _instance = Config(flavor: Flavor.UNSET, apiURL: "");
flavor: Flavor.UNSET,
apiURL: "",
bucketName: "",
reportProjectID: "",
reportURL: "");
final Flavor flavor; final Flavor flavor;
final String name; final String name;
final Color color; final Color color;
final String apiURL; final String apiURL;
final String reportURL;
final Level level; final Level level;
final String reportProjectID;
final String bucketName;
factory Config( factory Config(
{required Flavor flavor, {required Flavor flavor,
required String apiURL, required String apiURL,
required String reportURL, Color color = Colors.blue,
required String reportProjectID, Level level = Level.SEVERE}) {
required String bucketName, _instance = Config._internal(
Color color= Colors.blue, flavor, FlavorNames[flavor.index], color, apiURL, level);
Level level= Level.SEVERE}) {
_instance = Config._internal(flavor, FlavorNames[flavor.index], color,
apiURL, reportURL, level, reportProjectID, bucketName);
Logger.root.level = level; Logger.root.level = level;
Logger.root.onRecord.listen((record) { Logger.root.onRecord.listen((record) {
@@ -41,8 +31,7 @@ class Config {
return _instance; return _instance;
} }
Config._internal(this.flavor, this.name, this.color, this.apiURL, Config._internal(this.flavor, this.name, this.color, this.apiURL, this.level);
this.reportURL, this.level, this.reportProjectID, this.bucketName);
static Config get instance { static Config get instance {
return _instance; return _instance;

View File

@@ -1,12 +1,13 @@
import 'dart:convert'; import 'dart:convert';
import 'package:fcs/config.dart';
import 'package:fcs/constants.dart'; import 'package:fcs/constants.dart';
import 'package:fcs/domain/entities/package.dart'; import 'package:fcs/domain/entities/package.dart';
import 'package:fcs/helpers/api_helper.dart'; import 'package:fcs/helpers/api_helper.dart';
import 'package:fcs/helpers/firebase_helper.dart'; import 'package:fcs/helpers/firebase_helper.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import '../services/services.dart';
class PackageDataProvider { class PackageDataProvider {
final log = Logger('PackageDataProvider'); final log = Logger('PackageDataProvider');
@@ -70,7 +71,7 @@ class PackageDataProvider {
try { try {
var data = await requestAPI( var data = await requestAPI(
"/api/fts/$packages_collection/$escapePackage/$limit", "GET", "/api/fts/$packages_collection/$escapePackage/$limit", "GET",
url: Config.instance.reportURL, token: await getToken()); url: Services.setting.reportURL, token: await getToken());
if (data == null) return []; if (data == null) return [];
@@ -105,7 +106,7 @@ class PackageDataProvider {
}; };
var result = await requestAPI("/api/data/packages", "POST", var result = await requestAPI("/api/data/packages", "POST",
token: await getToken(), token: await getToken(),
url: Config.instance.reportURL, url: Services.setting.reportURL,
payload: jsonEncode(data)); payload: jsonEncode(data));
if (result == null) return packages; if (result == null) return packages;
result.forEach((d) { result.forEach((d) {

View File

@@ -4,8 +4,7 @@ import 'package:fcs/domain/entities/pickup.dart';
import 'package:fcs/helpers/api_helper.dart'; import 'package:fcs/helpers/api_helper.dart';
import 'package:fcs/helpers/firebase_helper.dart'; import 'package:fcs/helpers/firebase_helper.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import '../services/services.dart';
import '../../config.dart';
class PickupDataProvider { class PickupDataProvider {
final log = Logger('PickupDataProvider'); final log = Logger('PickupDataProvider');
@@ -34,7 +33,7 @@ class PickupDataProvider {
}; };
var result = await requestAPI("/api/data/pickups", "POST", var result = await requestAPI("/api/data/pickups", "POST",
token: await getToken(), token: await getToken(),
url: Config.instance.reportURL, url: Services.setting.reportURL,
payload: jsonEncode(data)); payload: jsonEncode(data));
if (result == null) return pickups; if (result == null) return pickups;
result.forEach((d) { result.forEach((d) {

View File

@@ -1,13 +1,14 @@
import 'dart:convert'; import 'dart:convert';
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:fcs/config.dart';
import 'package:fcs/constants.dart'; import 'package:fcs/constants.dart';
import 'package:fcs/domain/entities/user.dart'; import 'package:fcs/domain/entities/user.dart';
import 'package:fcs/helpers/api_helper.dart'; import 'package:fcs/helpers/api_helper.dart';
import 'package:fcs/helpers/firebase_helper.dart'; import 'package:fcs/helpers/firebase_helper.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import '../services/services.dart';
class UserDataProvider { class UserDataProvider {
final log = Logger('UserDataProvider'); final log = Logger('UserDataProvider');
@@ -66,7 +67,7 @@ class UserDataProvider {
try { try {
var data = await requestAPI( var data = await requestAPI(
"/api/fts/$user_collection/$escapeBuyer/$limit", "GET", "/api/fts/$user_collection/$escapeBuyer/$limit", "GET",
url: Config.instance.reportURL, token: await getToken()); url: Services.setting.reportURL, token: await getToken());
if (data == null) return []; if (data == null) return [];

View File

@@ -24,6 +24,7 @@ import 'package:fcs/data/services/rate_service.dart';
import 'package:fcs/data/services/shipment_imp.dart'; import 'package:fcs/data/services/shipment_imp.dart';
import 'package:fcs/data/services/shipment_service.dart'; import 'package:fcs/data/services/shipment_service.dart';
import '../../domain/entities/setting.dart';
import 'auth_imp.dart'; import 'auth_imp.dart';
import 'auth_service.dart'; import 'auth_service.dart';
import 'common_imp.dart'; import 'common_imp.dart';
@@ -37,6 +38,8 @@ import 'user_service.dart';
class Services { class Services {
static final Services instance = Services._(); static final Services instance = Services._();
static Setting setting = Setting();
late AuthService _authService; late AuthService _authService;
late UserService _userService; late UserService _userService;

View File

@@ -10,6 +10,9 @@ List<Day> dayLists = [
class Setting { class Setting {
final int supportBuildNum; final int supportBuildNum;
final String reportURL;
final String reportProjectID;
final String bucketName;
// contact page // contact page
String? usaAddress; String? usaAddress;
String? mmAddress; String? mmAddress;
@@ -44,7 +47,10 @@ class Setting {
this.shipmentTypes = const [], this.shipmentTypes = const [],
this.courierWebsite, this.courierWebsite,
this.deactivateTextEn, this.deactivateTextEn,
this.deactivateTextMm}); this.deactivateTextMm,
this.bucketName = '',
this.reportProjectID = '',
this.reportURL = ''});
factory Setting.fromMap(Map<String, dynamic> map) { factory Setting.fromMap(Map<String, dynamic> map) {
return Setting( return Setting(
@@ -62,9 +68,11 @@ class Setting {
termsMm: map['terms_mm_markdown'], termsMm: map['terms_mm_markdown'],
shipmentTypes: List.from(map['shipment_types']), shipmentTypes: List.from(map['shipment_types']),
courierWebsite: map['courier_website'], courierWebsite: map['courier_website'],
deactivateTextEn: map['deactivate_text_en']??"", deactivateTextEn: map['deactivate_text_en'] ?? "",
deactivateTextMm: map['deactivate_text_mm']??"" deactivateTextMm: map['deactivate_text_mm'] ?? "",
); reportProjectID: map['report_project_id'] ?? "",
reportURL: map['report_url'] ?? "",
bucketName: map['bucket_name'] ?? '');
} }
@override @override

View File

@@ -37,7 +37,7 @@ Future<dynamic> requestAPI(String path, method,
if (devInfo.deviceID != null) { if (devInfo.deviceID != null) {
headers["Device"] = devInfo.deviceID ?? "" + ":" + deviceName; headers["Device"] = devInfo.deviceID ?? "" + ":" + deviceName;
} }
headers["Project-ID"] = Config.instance.reportProjectID; headers["Project-ID"] = Services.setting.reportProjectID;
BaseOptions options = new BaseOptions( BaseOptions options = new BaseOptions(
method: method, method: method,
@@ -99,7 +99,7 @@ Future<dynamic> requestDownloadAPI(String path, method,
var _downloadData = StringBuffer(); var _downloadData = StringBuffer();
var fileSave = new File(filePath!); var fileSave = new File(filePath!);
var request = await client.getUrl(Uri.parse("$baseUrl$path")); var request = await client.getUrl(Uri.parse("$baseUrl$path"));
request.headers.set("Project-ID", Config.instance.reportProjectID); request.headers.set("Project-ID", Services.setting.reportProjectID);
request.headers request.headers
.set(HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8"); .set(HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8");
if (token != null) { if (token != null) {
@@ -140,7 +140,7 @@ Future<dynamic> requestDownloadPDFAPI(String path, method,
// var _downloadData = StringBuffer(); // var _downloadData = StringBuffer();
var fileSave = new File(filePath!); var fileSave = new File(filePath!);
var request = await client.getUrl(Uri.parse("$baseUrl$path")); var request = await client.getUrl(Uri.parse("$baseUrl$path"));
request.headers.set("Project-ID", Config.instance.reportProjectID); request.headers.set("Project-ID", Services.setting.reportProjectID);
if (token != null) { if (token != null) {
request.headers.set("Token", token); request.headers.set("Token", token);
} }
@@ -188,7 +188,7 @@ Future<dynamic> requestDownload(String path, method,
HttpClient client = new HttpClient(); HttpClient client = new HttpClient();
// var _downloadData = StringBuffer(); // var _downloadData = StringBuffer();
var request = await client.postUrl(Uri.parse("$baseUrl$path")); var request = await client.postUrl(Uri.parse("$baseUrl$path"));
request.headers.set("Project-ID", Config.instance.reportProjectID); request.headers.set("Project-ID", Services.setting.reportProjectID);
if (token != null) { if (token != null) {
request.headers.set("Token", token); request.headers.set("Token", token);
} }
@@ -244,7 +244,7 @@ Future<File> downloadPDF(
await requestDownload("/api/pdf", "POST", await requestDownload("/api/pdf", "POST",
filePath: path, filePath: path,
url: Config.instance.reportURL, url: Services.setting.reportURL,
token: await getToken(), token: await getToken(),
payload: jsonEncode(data), onDownloadDone: (f) async { payload: jsonEncode(data), onDownloadDone: (f) async {
completer.complete(f); completer.complete(f);

View File

@@ -21,9 +21,9 @@ Future<void> main() async {
color: Colors.blue, color: Colors.blue,
apiURL: "http://192.168.100.150:9090", apiURL: "http://192.168.100.150:9090",
// apiURL: "https://asia-northeast1-fcs-dev1.cloudfunctions.net/API13", // apiURL: "https://asia-northeast1-fcs-dev1.cloudfunctions.net/API13",
reportURL: "http://petrok.mokkon.com:7071", // reportURL: "http://petrok.mokkon.com:7071",
reportProjectID: "fcs-dev", // reportProjectID: "fcs-dev",
bucketName: "gs://fcs-dev1-us", // bucketName: "gs://fcs-dev1-us",
level: Level.ALL); level: Level.ALL);
runApp(App(title: "FCS - Dev")); runApp(App(title: "FCS - Dev"));
} }

View File

@@ -9,10 +9,12 @@ void main() {
Config( Config(
flavor: Flavor.DEV, flavor: Flavor.DEV,
color: Colors.blue, color: Colors.blue,
reportURL: "http://petrok.mokkon.com:8091",
reportProjectID: "fcs-dev",
apiURL: "http://192.168.1.155:7777", apiURL: "http://192.168.1.155:7777",
bucketName: "gs://fcs-dev1-us", // reportURL: "http://petrok.mokkon.com:8091",
// reportProjectID: "fcs-dev",
// bucketName: "gs://fcs-dev1-us",
level: Level.ALL); level: Level.ALL);
runApp(App(title: "FCS - Dev local",)); runApp(App(
title: "FCS - Dev local",
));
} }

View File

@@ -16,9 +16,9 @@ Future<void> main() async {
flavor: Flavor.PRODUCTION, flavor: Flavor.PRODUCTION,
color: Colors.blue, color: Colors.blue,
apiURL: "https://asia-northeast1-fcs-prod1.cloudfunctions.net/API13", apiURL: "https://asia-northeast1-fcs-prod1.cloudfunctions.net/API13",
reportURL: "http://petrok.mokkon.com:8092", // reportURL: "http://petrok.mokkon.com:8092",
reportProjectID: "fcs-prod", // reportProjectID: "fcs-prod",
bucketName: "gs://fcs-prod1", // bucketName: "gs://fcs-prod1",
level: Level.ALL); level: Level.ALL);
runApp(App(title: "FCS")); runApp(App(title: "FCS"));
} }

View File

@@ -2,10 +2,10 @@ import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:fcs/config.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import '../../../constants.dart'; import '../../../constants.dart';
import '../../../data/services/services.dart';
import '../../../domain/entities/user.dart'; import '../../../domain/entities/user.dart';
import '../../../helpers/api_helper.dart'; import '../../../helpers/api_helper.dart';
import '../../../helpers/firebase_helper.dart'; import '../../../helpers/firebase_helper.dart';
@@ -56,7 +56,7 @@ class ConsigneeSelectionModel extends BaseModel {
var result = await requestAPI( var result = await requestAPI(
"/api/fts/$user_collection/$escapeSender/$rowPerPage", "GET", "/api/fts/$user_collection/$escapeSender/$rowPerPage", "GET",
url: Config.instance.reportURL, token: await getToken()); url: Services.setting.reportURL, token: await getToken());
if (result != null) { if (result != null) {
for (var row in result) { for (var row in result) {

View File

@@ -3,9 +3,8 @@ import 'dart:convert';
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import '../../../config.dart';
import '../../../constants.dart'; import '../../../constants.dart';
import '../../../data/services/services.dart';
import '../../../domain/entities/user.dart'; import '../../../domain/entities/user.dart';
import '../../../helpers/api_helper.dart'; import '../../../helpers/api_helper.dart';
import '../../../helpers/firebase_helper.dart'; import '../../../helpers/firebase_helper.dart';
@@ -57,7 +56,7 @@ class SenderSelectionModel extends BaseModel {
var result = await requestAPI( var result = await requestAPI(
"/api/fts/$user_collection/$escapeSender/$rowPerPage", "GET", "/api/fts/$user_collection/$escapeSender/$rowPerPage", "GET",
url: Config.instance.reportURL, token: await getToken()); url: Services.setting.reportURL, token: await getToken());
if (result != null) { if (result != null) {
for (var row in result) { for (var row in result) {

View File

@@ -157,10 +157,13 @@ class FcsShipmentModel extends BaseModel {
void initUser(user) { void initUser(user) {
super.initUser(user); super.initUser(user);
if (user != null && user.hasFcsShipments()) {
_loadShipmentTypes(); _loadShipmentTypes();
_loadShipmentConsignees(); _loadShipmentConsignees();
_loadShipmentPorts(); _loadShipmentPorts();
} }
}
@override @override
logout() async { logout() async {

View File

@@ -141,6 +141,7 @@ class MainModel extends ChangeNotifier {
try { try {
Services.instance.authService.getSetting().listen((event) { Services.instance.authService.getSetting().listen((event) {
this.setting = event; this.setting = event;
Services.setting = event;
models.forEach((m) => m.initSetting(setting)); models.forEach((m) => m.initSetting(setting));
notifyListeners(); notifyListeners();
}); });

View File

@@ -133,7 +133,7 @@ class _PackageInfoState extends State<PackageInfo> {
if (d == null) return; if (d == null) return;
_changeDeliverayAddress(d); _changeDeliverayAddress(d);
} }
: () {}, : null,
); );
return LocalProgress( return LocalProgress(