From 9cabdb82a4e5b1f6e94e530f63a26fa97ae07a88 Mon Sep 17 00:00:00 2001
From: Hafiyyan <hafiyyan94@gmail.com>
Date: Mon, 6 Apr 2020 22:21:24 +0700
Subject: [PATCH] Add url_map on supplier and home Industry model

- implemented on home industry screen
---
 .gitlab-ci.yml                                |  2 +-
 functions/src/index.ts                        | 88 +++++++++++++++++++
 ios/Runner.xcodeproj/project.pbxproj          |  7 +-
 .../components/progressbar/progressbar.dart   |  9 +-
 lib/src/screens/home/home_screen.dart         |  6 +-
 .../product/product_home_industry.dart        |  2 +-
 pubspec.lock                                  | 30 +------
 pubspec.yaml                                  |  2 +-
 scripts/package.json                          |  6 --
 9 files changed, 106 insertions(+), 46 deletions(-)
 delete mode 100644 scripts/package.json

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index aa7daf4..a79fbc3 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 cf85d9b..ac71938 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 14e514f..cedf6f5 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 a1f426f..fab09bb 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 d049927..6634c05 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 c911043..9a24aba 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 860eebf..1e7a036 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 2be2573..ef481d9 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 c29d749..0000000
--- a/scripts/package.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "dependencies": {
-    "firestore-export-import": "^0.4.0",
-    "node-firestore-import-export": "^0.14.1"
-  }
-}
-- 
GitLab