diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index aa7daf49cd0c70dc0b91b97e5b216d89ebc74e12..a79fbc36c3f301bab70c2b433f87b10619ac8696 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -145,7 +145,7 @@ build-web-release: - mkdir -p ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' - ssh-keyscan -t rsa "$prod_ip" >> ~/.ssh/known_hosts - - scp -r "$username_prod@$prod_ip":~/web build/web + - scp -r build/web "$username_prod@$prod_ip":~/ - ssh "$username_prod@$prod_ip" 'sudo bash /var/www/sites/siaga-wabah/deployment.sh' only: - release \ No newline at end of file diff --git a/functions/src/index.ts b/functions/src/index.ts index cf85d9bf266af61875b5f3da7bb88ab23f502f1a..ac71938014f48eae6cf8a6e61c16f8b1d1293057 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -12,6 +12,14 @@ function getNotifikasiId(time : Date, path : String) { return `${time.toISOString()}-${newPath}`; } +function getKetersediaanId(type : String, providerId : number, barangId : number) { + return `${type}-${providerId}-barang-${barangId}`; +} + +function getAgregasiId(itemId : number) { + return `item-${itemId}`; +} + export const notifyNewInstitusi = functions.firestore .document('waspada/covid19/institusi/{id}') .onCreate((snapshot, context) => { @@ -143,3 +151,83 @@ export const notifyNewBarangHomeIndustry = functions.firestore return handler(snapshot, context); }); + +export const createKetersediaanFromSupplierBarang = functions.firestore + .document('/waspada/covid19/supplier/{supplierId}/barang/{barangId}') + .onCreate((snapshot, context) => { + const handler = async (_snapshot : firestore.DocumentSnapshot, _context : functions.EventContext) => { + const barang = _snapshot.data(); + const item = (await barang?.item.get()).data(); + const supplier = (await _snapshot.ref.parent.parent?.get())?.data(); + + const supplierId = _context.params.supplierId; + const barangId = _context.params.barangId; + const ketersediaanId = getKetersediaanId('supplier', supplierId, barangId); + + return firestore().doc(FIRESTORE_PREFIX + 'agregrasi-ketersediaan/' + ketersediaanId).set({ + barang: _snapshot.ref, + harga: barang?.harga, + nama_item: item.nama, + nama_supplier: supplier?.nama, + stok: barang?.stok, + supplier: _snapshot.ref.parent.parent, + lastUpdated: _snapshot.updateTime + }); + } + + return handler(snapshot, context); + }); + +export const updateKetersediaanFromSupplierBarang = functions.firestore + .document('/waspada/covid19/supplier/{supplierId}/barang/{barangId}') + .onUpdate((snapshot, context) => { + const handler = async (_snapshot : functions.Change<firestore.DocumentSnapshot>, _context : functions.EventContext) => { + const barang = _snapshot.after.data(); + const item = (await barang?.item.get()).data(); + const supplier = (await _snapshot.after.ref.parent.parent?.get())?.data(); + + const supplierId = _context.params.supplierId; + const barangId = _context.params.barangId; + const ketersediaanId = getKetersediaanId('supplier', supplierId, barangId); + + return firestore().doc(FIRESTORE_PREFIX + 'agregrasi-ketersediaan/' + ketersediaanId).set({ + barang: _snapshot.after.ref, + harga: barang?.harga, + nama_item: item.nama, + nama_supplier: supplier?.nama, + stok: barang?.stok, + supplier: _snapshot.after.ref.parent.parent, + lastUpdated: _snapshot.after.updateTime + }); + } + + return handler(snapshot, context); + }); + +export const deleteKetersediaanFromSupplierBarang = functions.firestore + .document('/waspada/covid19/supplier/{supplierId}/barang/{barangId}') + .onDelete((snapshot, context) => { + const supplierId = context.params.supplierId; + const barangId = context.params.barangId; + const ketersediaanId = getKetersediaanId('supplier', supplierId, barangId); + + return firestore().doc(FIRESTORE_PREFIX + 'agregrasi-ketersediaan/' + ketersediaanId).delete(); + }); + +export const aggregateKebutuhanInstitusi = functions.firestore + .document('/waspada/covid19/institusi/{institusiId}/kebutuhan/{kebutuhanId}') + .onWrite((snapshot, context) => { + const handler = async (kebutuhan : firestore.DocumentData | undefined, increment : boolean) => { + if (kebutuhan?.item) { + return firestore().doc(FIRESTORE_PREFIX + 'agregasi/' + getAgregasiId(kebutuhan.item.id)).set({ + item: kebutuhan.item, + kebutuhan: firestore.FieldValue.increment((increment ? 1 : -1) * kebutuhan.kebutuhan), + terpenuhi: firestore.FieldValue.increment((increment ? 1 : -1) * kebutuhan.terpenuhi) + }, {merge: true}); + } + + return null; + }; + + return handler(snapshot.before.data(), false).then(() => handler(snapshot.after.data(), true)); + }); diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 14e514fa31ab80ec07e4d63bd92c8a1aa956090a..cedf6f51e3e777287cb763f07843878a5edcddc2 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -315,7 +315,7 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mobileApps; + PRODUCT_BUNDLE_IDENTIFIER = id.ac.ui.cs.sigap; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -453,7 +453,7 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mobileApps; + PRODUCT_BUNDLE_IDENTIFIER = id.ac.ui.cs.sigap; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -483,9 +483,10 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mobileApps; + PRODUCT_BUNDLE_IDENTIFIER = id.ac.ui.cs.sigap; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + DEVELOPMENT_TEAM = 88Q75CKN7W; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; }; diff --git a/lib/src/components/progressbar/progressbar.dart b/lib/src/components/progressbar/progressbar.dart index a1f426fa7f99778b235f6d712430120699bc9f10..fab09bbdb268d06b9c0e7de71248971981b102d5 100644 --- a/lib/src/components/progressbar/progressbar.dart +++ b/lib/src/components/progressbar/progressbar.dart @@ -43,5 +43,12 @@ class ProgressBar extends StatelessWidget { } double _getProgress({BuildContext context, int available, int total}) { - return MediaQuery.of(context).size.width * (available / total); + if (available == 0 && total == 0){ + return MediaQuery.of(context).size.width * 0; + }else { + return MediaQuery + .of(context) + .size + .width * (available / total); + } } diff --git a/lib/src/screens/home/home_screen.dart b/lib/src/screens/home/home_screen.dart index d04992759b06b5a255c9159d8a8d8977c3532b4c..6634c05f6005b97ab7ea79afc045d1479b62f0dc 100644 --- a/lib/src/screens/home/home_screen.dart +++ b/lib/src/screens/home/home_screen.dart @@ -4,8 +4,7 @@ import 'package:flutter/widgets.dart'; import 'package:mobile_apps/src/common/constants.dart'; import 'package:mobile_apps/src/screens/home/home_industry/list_home_industry.dart'; import 'package:mobile_apps/src/screens/home/institusi/list_institusi.dart'; -/* TODO remove comment after Agregasi feature ready -import 'package:mobile_apps/src/screens/home/inventories/inventories.dart'; */ +import 'package:mobile_apps/src/screens/home/inventories/inventories.dart'; import 'package:mobile_apps/src/screens/home/kontak/kontak.dart'; import 'package:mobile_apps/src/screens/supplier/list_supplier.dart'; import 'package:mobile_apps/src/services/auth_service.dart'; @@ -27,12 +26,11 @@ class HomeScreen extends StatelessWidget { style: Theme.of(context).textTheme.subtitle1, textAlign: TextAlign.left, ), - /* TODO remove comment after Agregasi feature ready Container( padding: EdgeInsets.only(top: 31, left: 20, right: 20, bottom: 13), color: Colors.white, child: InventoriesWidget(), - ),*/ + ), Container( padding: EdgeInsets.symmetric( horizontal: MarginConstants.horizontalFromScreen, diff --git a/lib/src/screens/homeindustry/product/product_home_industry.dart b/lib/src/screens/homeindustry/product/product_home_industry.dart index c9110434e4bddbb5b4a193b5456d60ed404fb10d..9a24aba65570adf3461a7c29fb2f4a2761a622d2 100644 --- a/lib/src/screens/homeindustry/product/product_home_industry.dart +++ b/lib/src/screens/homeindustry/product/product_home_industry.dart @@ -46,7 +46,7 @@ class ProductHomeIndustryWidget extends StatelessWidget { return Center(child: CircularProgressIndicator()); } final item = itemRepository.item(snapshot); - return _description('Jenis Produk', '${item.nama} buah'); + return _description('Jenis Produk', '${item.nama}'); }), _description('Kapasitas Produksi', '${product.kapasitas} pcs/${product.durasi}'), diff --git a/pubspec.lock b/pubspec.lock index 860eebfa42437c31a8fbdb1df03fa3f2a3715b13..1e7a036a73ac1a4c4c9912ebc96063cbf0cafbdb 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -36,13 +36,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.4.0" - bloc: - dependency: transitive - description: - name: bloc - url: "https://pub.dartlang.org" - source: hosted - version: "3.0.0" boolean_selector: dependency: transitive description: @@ -307,13 +300,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_bloc: - dependency: "direct main" - description: - name: flutter_bloc - url: "https://pub.dartlang.org" - source: hosted - version: "3.2.0" flutter_cache_manager: dependency: transitive description: @@ -457,13 +443,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.2.5" - localstorage: - dependency: "direct main" - description: - name: localstorage - url: "https://pub.dartlang.org" - source: hosted - version: "3.0.1+4" logging: dependency: transitive description: @@ -625,13 +604,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.5" - rxdart: - dependency: transitive - description: - name: rxdart - url: "https://pub.dartlang.org" - source: hosted - version: "0.23.1" screenshot: dependency: "direct main" description: @@ -673,7 +645,7 @@ packages: source: hosted version: "1.5.5" sqflite: - dependency: "direct main" + dependency: transitive description: name: sqflite url: "https://pub.dartlang.org" diff --git a/pubspec.yaml b/pubspec.yaml index 2be2573bbcdd3ec73844f3609dafb9be054a2e7b..ef481d9dd10c96fecb13d6f3f215f5ded89e77fc 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,7 +11,7 @@ description: A health care equipment marketplace to help COVID-19 situation. # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.0.0+1 +version: 1.0.0+4 environment: sdk: ">=2.7.0 <3.0.0" diff --git a/scripts/package.json b/scripts/package.json deleted file mode 100644 index c29d74920c10c23ab46c61879648c7bc3dd56a54..0000000000000000000000000000000000000000 --- a/scripts/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "dependencies": { - "firestore-export-import": "^0.4.0", - "node-firestore-import-export": "^0.14.1" - } -}