Compare commits

...

26 Commits

Author SHA1 Message Date
cyzoox 8c25a19eeb Merge feature/passo/PASSO-#1-Sync-data-from-device-to-postgre-and-vice-versa to master 2024-07-25 10:56:20 +08:00
cyzoox eeb83380bd Additional changes 2024-07-25 10:48:59 +08:00
cyzoox 9f0cc75a3f added drawing pad 2024-07-11 09:27:35 +08:00
cyzoox 593041b19b Bug fix on admin side and building faas 2024-04-22 16:05:35 +08:00
cyzoox 17e99e9ee3 data syncing; added loader while syncing data 2024-03-22 17:01:14 +08:00
cyzoox a8f7fc8d7c Fix minor bugs on transactional items; added building structure transactional; change ui of property assessment and property appraisal 2024-03-21 13:47:57 +08:00
cyzoox 5b1752b813 passo offline mode 2024-02-08 08:52:29 +08:00
cyzoox 8204c1fbdf created sql database for admin side and faas building; created blocs and services for admin side and faas building; migrated some data using api to sql database; created user interface for admin side and building faas steppers 2023-11-10 16:38:47 +08:00
superadmin 66bd74118d Merge pull request 'consol/feature/passo/PASSO-#61Structure-offline-funcationality' (#66) from consol/feature/passo/PASSO-#61Structure-offline-funcationality into develop
Reviewed-on: http://git.agusandelnorte.gov.ph:3000/SoftwareDevelopmentSection/unit2-null-safety-repository/pulls/66
2023-10-09 11:36:44 +08:00
PGAN-MIS 71c8f306b5 fixed pupspec.lock 2023-10-09 11:32:16 +08:00
PGAN-MIS e445c255d9 fix QR image preview 2023-10-09 10:58:07 +08:00
PGAN-MIS fe88c5d656 commit before push 2023-10-09 09:54:36 +08:00
cyrilaquismundo 5a17258c82 Merge pull request 'consol/feature/passo/PASSO-#55-Refactor-property-assessment-and-add-condition-to-edit-faas-to-save-changes-or-not__develop' (#63) from consol/feature/passo/PASSO-#55-Refactor-property-assessment-and-add-condition-to-edit-faas-to-save-changes-or-not__develop into develop
Reviewed-on: http://git.agusandelnorte.gov.ph:3000/SoftwareDevelopmentSection/unit2-null-safety-repository/pulls/63
2023-10-09 09:48:45 +08:00
cyzoox 0b031dd545 Fixed conflicts 2023-10-09 09:46:27 +08:00
cyzoox c9372f8e50 Modified additional items 2023-10-09 08:34:24 +08:00
unknown b1ea70b9ab fix error screen 2023-10-08 20:12:49 +08:00
unknown 8dc0529646 fix try again button 2023-10-07 21:30:44 +08:00
unknown ebb04ad358 convert swtich offline into bloc 2023-10-06 20:19:06 +08:00
PGAN-MIS f9fd714fa6 offline features inital 2023-10-06 12:43:37 +08:00
cyzoox d7324e34f1 fixed conflict on pubspec.yaml 2023-10-03 09:16:28 +08:00
cyzoox 337fb64bdf Added sqlflite pub 2023-10-03 09:13:50 +08:00
rodolfobacuinjr 65794bf922 Merge pull request 'feature/unit2/UNITw-#59Implement-Permission-Assignment-in-Superadmin-Module' (#60) from feature/unit2/UNITw-#59Implement-Permission-Assignment-in-Superadmin-Module into develop
Reviewed-on: http://git.agusandelnorte.gov.ph:3000/SoftwareDevelopmentSection/unit2-null-safety-repository/pulls/60
2023-10-03 08:39:07 +08:00
PGAN-MIS deeca18962 add search functions to superadmin screens 2023-10-03 08:33:10 +08:00
PGAN-MIS ba89592496 refactored rbac services 2023-09-27 08:45:32 +08:00
PGAN-MIS 1cc2a70a7f finished implementing permission assignment 2023-09-26 16:03:36 +08:00
cyzoox 75cfe68bd1 Added delete on Land Faas;Added auto-refresh/auto-reload on adding new faas 2023-09-25 14:39:55 +08:00
375 changed files with 38318 additions and 17174 deletions

1
.gitignore vendored
View File

@ -31,6 +31,7 @@ migrate_working_dir/
.pub-cache/ .pub-cache/
.pub/ .pub/
/build/ /build/
pubspeck.lock
# Symbolication related # Symbolication related
app.*.symbols app.*.symbols

View File

@ -26,7 +26,7 @@ apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android { android {
compileSdkVersion flutter.compileSdkVersion compileSdkVersion 34
ndkVersion "25.1.8937393" ndkVersion "25.1.8937393"
compileOptions { compileOptions {
@ -44,9 +44,10 @@ android {
defaultConfig { defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.unit2" applicationId "com.app.rpass"
// You can update the following values to match your application needs. // You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
minSdkVersion flutter.minSdkVersion minSdkVersion flutter.minSdkVersion
targetSdkVersion flutter.targetSdkVersion targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger() versionCode flutterVersionCode.toInteger()

View File

@ -1,12 +1,16 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.unit2"> package="com.example.unit2"
>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" /> <uses-permission android:name="android.permission.DELETE_PACKAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
<application <application
android:label="uniT App" android:label="uniT App"
android:name="${applicationName}" android:name="${applicationName}"
@ -16,7 +20,8 @@ android:authorities = "${applicationId}.fileprovider"
android:exported = "false" android:exported = "false"
android:grantUriPermissions = "true" android:grantUriPermissions = "true"
android:name = "androidx.core.content.FileProvider" android:name = "androidx.core.content.FileProvider"
android:usesCleartextTraffic="true"> android:usesCleartextTraffic="true"
android:requestLegacyExternalStorage="true">
<meta-data <meta-data
android:name = "android.support.FILE_PROVIDER_PATHS" android:name = "android.support.FILE_PROVIDER_PATHS"

Binary file not shown.

After

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

View File

@ -0,0 +1,595 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="1024.000000pt" height="1024.000000pt" viewBox="0 0 1024.000000 1024.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M3055 8904 c-44 -7 -125 -21 -180 -29 -147 -24 -285 -58 -335 -84 -9
-5 -31 -12 -50 -16 -49 -10 -264 -115 -349 -170 -117 -75 -329 -257 -416 -356
-220 -249 -387 -612 -425 -925 -5 -46 -15 -121 -20 -166 -14 -118 -14 -4106 1
-4236 38 -346 168 -668 387 -957 60 -79 212 -235 287 -295 222 -177 490 -308
770 -379 237 -59 115 -56 2345 -56 1929 0 2061 1 2155 18 456 82 805 261 1096
564 248 258 408 562 491 933 l23 105 0 2210 0 2210 -22 101 c-89 398 -253 706
-517 970 -91 90 -253 221 -317 254 -13 7 -36 23 -51 35 -32 27 -194 108 -270
135 -29 10 -82 29 -118 42 -36 14 -90 29 -120 35 -136 28 -180 35 -250 43 -41
5 -95 13 -120 19 -73 17 -3891 12 -3995 -5z m2365 -214 c553 -50 1073 -240
1580 -575 578 -382 1072 -973 1338 -1600 167 -394 237 -697 263 -1140 17 -293
-1 -799 -30 -828 -5 -5 -52 -5 -105 -1 l-96 7 0 549 0 549 -45 45 -45 44 -169
0 -168 0 -47 -41 -46 -41 0 -140 0 -140 -67 8 c-38 4 -93 8 -123 9 l-55 0 -3
301 -2 301 -99 97 c-84 82 -103 96 -118 88 -10 -6 -58 -52 -107 -102 l-88 -92
3 -309 4 -309 -39 -24 -39 -23 -34 38 -34 37 1 499 c1 274 2 509 3 523 l2 25
-275 3 c-151 1 -285 0 -297 -3 l-23 -5 0 -549 0 -550 -55 -31 c-30 -17 -57
-35 -60 -41 -4 -5 -9 -9 -13 -9 -4 0 -7 226 -7 501 0 395 -3 503 -13 506 -16
7 -104 -69 -372 -321 -36 -34 -80 -72 -97 -84 l-33 -23 0 -250 c0 -157 -4
-249 -10 -249 -5 0 -31 13 -57 29 -27 15 -120 69 -208 119 -88 50 -223 127
-300 171 -77 45 -151 81 -165 81 -14 0 -188 -91 -393 -205 -203 -113 -373
-205 -378 -205 -5 0 -9 98 -9 233 0 210 -2 235 -17 249 -10 9 -79 58 -153 110
-302 211 -422 290 -436 284 -11 -4 -14 -39 -14 -199 l0 -194 -87 -6 c-49 -3
-96 -9 -106 -13 -15 -5 -17 -3 -12 18 5 18 -1 33 -19 55 l-26 31 0 310 0 310
-72 64 c-40 36 -100 87 -134 114 -34 27 -116 95 -182 152 l-121 102 -191 0
c-115 0 -199 -4 -211 -11 -19 -10 -20 -23 -19 -497 0 -268 1 -537 0 -599 l0
-112 -127 -3 c-71 -2 -129 -2 -131 -2 -2 1 14 11 34 23 l36 22 -31 29 c-17 17
-34 30 -38 30 -5 0 -53 -41 -108 -91 -55 -50 -153 -133 -217 -185 -176 -143
-201 -181 -163 -255 19 -36 50 -49 116 -49 l49 0 0 -366 c0 -335 -1 -366 -16
-360 -36 14 -203 25 -276 19 -75 -6 -77 -5 -82 18 -27 121 -37 745 -17 954 71
710 362 1373 848 1936 109 125 336 349 453 446 545 450 1224 737 1870 791 151
13 595 14 730 2z m-1840 -50 c-8 -5 -19 -10 -25 -10 -5 0 -3 5 5 10 8 5 20 10
25 10 6 0 3 -5 -5 -10z m-963 -86 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17
-2 13 -5z m-37 -8 c0 -2 -7 -7 -16 -10 -8 -3 -12 -2 -9 4 6 10 25 14 25 6z
m5280 -160 c0 -2 -7 -7 -16 -10 -8 -3 -12 -2 -9 4 6 10 25 14 25 6z m311 -273
c13 -16 12 -17 -3 -4 -10 7 -18 15 -18 17 0 8 8 3 21 -13z m-6149 -248 c6 -14
15 -25 19 -25 5 0 6 -7 3 -15 -5 -11 -2 -13 12 -8 12 4 15 3 10 -5 -5 -8 1
-12 18 -12 13 0 31 -3 40 -6 23 -9 19 -49 -6 -67 -19 -12 -23 -24 -23 -68 0
-48 -2 -54 -22 -57 -13 -2 -35 5 -51 16 -26 19 -28 19 -49 2 -12 -10 -20 -20
-17 -22 2 -3 -7 -3 -20 -1 -40 8 -51 28 -38 69 9 32 8 37 -16 59 -14 13 -29
22 -34 19 -4 -3 -4 5 1 18 9 25 45 48 77 48 15 0 25 11 37 40 18 46 42 52 59
15z m6133 -23 c17 -36 24 -42 50 -42 43 0 54 -11 53 -48 -1 -18 -4 -29 -7 -24
-4 6 -16 2 -30 -9 -18 -15 -21 -23 -13 -31 25 -25 11 -88 -20 -88 -10 0 -16
-4 -13 -10 3 -5 1 -10 -4 -10 -6 0 -11 6 -11 13 0 8 -9 22 -19 32 -19 16 -21
16 -50 -5 -41 -29 -75 -24 -79 12 -2 15 1 35 7 46 8 15 4 24 -20 46 -16 15
-29 33 -29 40 0 23 36 43 68 38 32 -4 38 1 44 43 3 22 28 46 43 42 6 -2 19
-22 30 -45z m-341 -98 c3 -8 2 -12 -4 -9 -6 3 -10 10 -10 16 0 14 7 11 14 -7z
m-6272 -756 c-9 -9 -12 -7 -12 12 0 19 3 21 12 12 9 -9 9 -15 0 -24z m1396
-180 l55 -43 -189 -3 c-103 -1 -194 0 -201 2 -14 6 -17 43 -7 70 5 14 28 16
147 16 l140 0 55 -42z m82 -163 c0 -32 0 -32 -61 -39 -34 -3 -129 -6 -210 -6
l-149 0 -6 25 c-14 56 -13 56 216 54 l210 -1 0 -33z m-127 -125 l127 0 0 -28
0 -29 -205 -7 c-113 -4 -210 -4 -215 -1 -12 7 -13 58 -2 69 4 5 43 6 87 2 44
-3 137 -6 208 -6z m30 -150 c96 0 98 0 95 -22 -4 -31 -31 -35 -240 -37 l-178
-1 0 36 0 37 113 -6 c61 -4 156 -7 210 -7z m95 -150 c1 0 2 -7 2 -15 0 -27
-47 -35 -236 -41 l-184 -7 0 38 0 38 208 -6 c114 -3 208 -6 210 -7z m-211
-154 c11 -11 -12 -33 -35 -33 -14 0 -28 -6 -30 -12 -2 -6 -14 -11 -28 -11 -16
0 -22 4 -18 14 3 8 0 17 -6 21 -6 3 -10 3 -9 -2 5 -26 -4 -33 -41 -33 -38 0
-40 1 -40 33 l0 32 102 -3 c56 -1 103 -4 105 -6z m1036 -100 c9 -7 17 -17 17
-22 0 -4 -5 -3 -12 4 -7 7 -16 12 -21 12 -5 0 -2 -6 6 -14 8 -9 25 -13 38 -10
23 5 23 5 5 -10 -11 -9 -24 -16 -29 -16 -8 0 -7 -19 4 -59 2 -7 -2 -16 -9 -18
-7 -3 -11 3 -10 14 2 10 -1 18 -7 18 -5 0 -10 -19 -9 -42 0 -24 -3 -43 -8 -43
-4 0 -8 45 -8 100 0 104 5 115 43 86z m77 -57 c0 -6 -9 -9 -20 -6 -14 4 -20 0
-20 -11 0 -13 -3 -13 -12 -4 -10 10 -10 15 2 22 21 13 50 12 50 -1z m104 -60
c20 -12 35 -28 35 -37 -1 -16 -2 -16 -6 0 -5 19 -56 40 -77 32 -8 -3 -17 -1
-21 5 -3 7 0 8 9 5 9 -3 16 -1 16 5 0 15 3 14 44 -10z m2013 -1 c-3 -8 -6 -5
-6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m43 13 c0 -6 -4 -13 -10 -16 -5 -3
-10 1 -10 9 0 9 5 16 10 16 6 0 10 -4 10 -9z m-2810 -45 c0 -26 -31 -72 -68
-101 -43 -34 -51 -36 -96 -31 -48 5 -50 4 -94 -39 -51 -51 -48 -66 18 -86 l38
-12 -36 -49 c-40 -56 -36 -54 -116 -62 l-59 -6 5 43 c20 171 201 345 361 347
26 0 47 -2 47 -4z m680 -6 c0 -5 -7 -10 -16 -10 -8 0 -12 5 -9 10 3 6 10 10
16 10 5 0 9 -4 9 -10z m-85 -50 c3 -6 -1 -7 -9 -4 -18 7 -21 14 -7 14 6 0 13
-4 16 -10z m70 0 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8
-4 11 -10z m-204 -76 c30 -9 75 -27 100 -39 50 -26 149 -101 149 -114 0 -4
-62 -11 -137 -15 -76 -4 -169 -11 -207 -16 -68 -8 -71 -8 -148 31 -42 21 -89
39 -102 39 -27 0 -86 -44 -86 -64 0 -7 18 -21 41 -32 l41 -20 -99 -61 c-54
-33 -103 -63 -109 -66 -6 -4 -26 6 -44 21 l-33 28 22 42 c34 67 146 173 227
215 125 65 272 84 385 51z m1644 -219 c160 -92 391 -225 515 -295 124 -70 266
-151 315 -180 50 -29 153 -89 229 -132 77 -44 158 -91 180 -105 l39 -25 -53
-26 c-65 -31 -59 -32 -247 74 -373 210 -441 249 -483 274 -25 15 -65 39 -90
52 -56 31 -409 236 -555 323 -100 60 -131 75 -154 75 -11 0 -71 -29 -133 -64
-62 -35 -198 -112 -303 -171 -164 -93 -333 -188 -770 -432 -231 -128 -286
-154 -317 -148 -18 4 -28 12 -25 19 4 9 -2 12 -16 9 -12 -2 -30 2 -40 9 -20
15 -93 -28 933 545 627 350 669 373 680 368 3 -2 136 -78 295 -170z m-2875
144 c91 -21 187 -94 239 -181 12 -21 21 -48 19 -60 -3 -21 -8 -23 -58 -22
-132 1 -370 18 -370 25 0 5 32 33 70 64 39 31 70 60 70 64 0 14 -41 61 -54 61
-20 0 -157 -89 -216 -140 l-56 -48 -147 -3 -146 -4 32 33 c71 75 239 175 337
202 98 27 186 30 280 9z m4409 -243 c67 -35 121 -83 121 -110 0 -45 -13 -47
-75 -10 -33 19 -84 46 -112 60 -29 14 -53 32 -53 40 0 8 -14 21 -32 28 -27 12
-29 15 -12 19 37 11 113 -2 163 -27z m-3235 -7 c3 -17 6 -109 6 -204 0 -170 0
-173 -23 -188 -23 -15 -25 -14 -68 45 -24 34 -72 86 -106 116 l-63 56 0 77 0
78 53 16 c65 19 133 32 168 34 22 1 28 -4 33 -30z m-650 -59 c48 -43 73 -102
95 -232 22 -130 35 -238 28 -238 -2 0 -31 16 -63 35 -32 19 -62 35 -67 35 -5
0 -24 7 -43 16 -24 12 -34 23 -34 40 0 13 -12 40 -26 61 -14 21 -30 57 -37 80
-6 24 -14 43 -18 43 -4 0 -10 -35 -14 -77 l-8 -78 -15 35 c-51 120 30 310 133
310 24 0 45 -9 69 -30z m4789 -26 c67 -17 139 -51 177 -83 23 -19 23 -20 5
-21 -11 0 -53 -7 -92 -17 l-73 -17 -67 28 c-38 15 -91 30 -119 33 -48 5 -53 3
-69 -20 -22 -34 -12 -62 25 -76 17 -6 44 -16 62 -23 l32 -12 -30 -13 c-74 -32
-346 -89 -366 -77 -14 9 -9 51 13 110 35 93 114 158 229 190 64 18 201 17 273
-2z m-1144 -25 c93 -29 121 -42 191 -83 41 -25 101 -69 133 -98 l58 -53 -24
-29 -24 -30 -92 23 c-51 12 -111 30 -134 40 l-41 18 44 11 c25 6 54 17 64 25
19 14 19 15 -3 51 -28 44 -45 45 -155 12 l-80 -25 -55 21 c-31 11 -67 22 -81
25 -60 11 -70 14 -70 23 0 10 87 58 130 71 38 11 99 10 139 -2z m560 -20 c13
-23 11 -31 -18 -93 -32 -65 -33 -67 -52 -50 -10 9 -19 23 -19 31 0 7 -6 12
-12 11 -27 -6 -11 63 23 98 38 39 57 40 78 3z m-4524 -16 c-4 -10 -9 -50 -12
-90 l-6 -71 -82 -41 c-95 -47 -189 -135 -258 -241 -33 -52 -48 -66 -71 -68
l-28 -4 4 104 c3 90 7 111 35 170 17 37 52 89 77 116 74 79 204 139 305 141
37 1 42 -1 36 -16z m580 -73 c91 -43 245 -192 245 -237 0 -13 -65 -48 -143
-77 l-64 -25 -27 28 c-24 25 -29 41 -36 117 -5 49 -15 103 -23 119 -17 34 -31
105 -21 105 3 0 34 -13 69 -30z m3173 -103 c13 -10 17 -77 5 -77 -18 1 -127
66 -136 81 -6 9 -7 24 -4 33 6 14 12 14 64 -5 32 -12 64 -26 71 -32z m-1158
20 c19 -13 64 -39 100 -59 36 -19 121 -69 190 -110 111 -67 169 -100 231 -133
11 -5 19 -13 19 -17 0 -5 -344 -8 -765 -8 -421 0 -765 3 -765 8 0 7 65 52 76
52 4 0 43 22 88 48 301 180 375 222 387 222 11 0 14 -17 14 -68 0 -58 4 -75
28 -110 36 -55 95 -85 168 -85 82 0 158 53 189 131 12 31 10 98 -5 135 -10 23
4 21 45 -6z m2554 -99 c-1 -24 -2 -61 -3 -82 l-1 -40 -27 26 c-16 14 -49 39
-75 57 -27 18 -48 36 -48 40 0 20 140 65 151 49 3 -4 4 -27 3 -50z m-662 -39
c28 -15 59 -91 60 -147 0 -61 -26 -125 -64 -158 -26 -21 -39 -24 -82 -22 -44
3 -54 0 -73 -22 l-22 -25 -1 31 c0 49 56 261 80 299 33 53 62 65 102 44z
m-4502 -32 c-4 -12 -12 -21 -17 -20 -5 1 -9 -7 -9 -18 0 -10 5 -19 12 -19 6 0
14 -17 18 -37 9 -60 7 -271 -4 -278 -5 -3 -28 4 -50 15 l-41 21 6 92 c7 103
24 175 37 155 5 -8 8 2 8 25 0 35 -2 38 -22 31 -20 -6 -21 -5 -9 10 11 13 11
16 0 16 -8 1 2 9 21 19 42 23 62 18 50 -12z m4949 -32 c61 -28 120 -79 156
-136 26 -40 51 -116 42 -125 -3 -3 -38 19 -78 50 -116 91 -264 155 -360 156
-33 0 -37 3 -43 32 -7 37 -7 38 36 49 60 15 185 2 247 -26z m-693 -52 c-13
-27 -26 -73 -30 -104 -7 -51 -11 -59 -71 -117 -52 -50 -74 -81 -114 -164 -27
-57 -57 -134 -67 -173 -9 -38 -20 -74 -24 -78 -4 -5 -19 29 -34 75 -22 68 -28
104 -29 197 l-2 115 40 27 c22 16 58 37 80 49 126 63 140 83 89 122 -13 11
-24 23 -24 27 0 5 26 20 58 33 78 35 82 36 120 37 l32 1 -24 -47z m-4456 -148
l0 -85 -62 1 c-58 0 -132 16 -85 18 9 1 35 19 57 41 22 22 45 40 50 40 6 0 10
4 10 9 0 15 19 61 25 61 3 0 5 -38 5 -85z m892 -24 c3 9 10 7 25 -8 12 -12 24
-19 27 -16 3 3 31 -9 61 -28 l56 -34 -3 -125 c-3 -96 -8 -134 -22 -165 l-19
-40 -14 45 c-7 25 -15 54 -17 65 -6 32 -55 157 -67 172 -6 7 -9 20 -5 28 4 11
2 14 -6 9 -8 -5 -9 -2 -5 10 4 10 3 15 -3 11 -6 -3 -10 -3 -11 2 -3 28 -7 51
-14 68 -5 14 -4 16 3 6 8 -11 10 -11 14 0z m3034 -27 l42 -16 7 -92 c3 -50 5
-269 3 -486 l-3 -395 -1394 2 c-766 1 -1395 4 -1397 5 -2 3 -7 751 -5 915 l1
72 43 4 c23 2 631 4 1352 5 1180 2 1313 0 1351 -14z m1245 -23 c56 -37 98 -82
83 -88 -7 -2 -42 -22 -78 -44 -37 -22 -70 -38 -75 -35 -5 3 -16 -3 -26 -14
-10 -11 -24 -20 -32 -20 -7 0 -13 -4 -13 -9 0 -11 -151 -14 -168 -3 -9 6 -12
37 -10 118 l3 109 67 0 c36 0 69 -3 73 -6 3 -4 10 -30 14 -59 5 -29 14 -56 20
-60 7 -4 13 -21 13 -38 1 -18 3 -32 5 -32 2 0 17 12 33 27 28 25 30 30 30 105
0 43 4 78 8 78 5 0 29 -13 53 -29z m-4672 -161 l0 -105 -35 39 c-35 36 -36 41
-30 89 7 50 18 80 40 103 18 20 25 -12 25 -126z m-359 6 l95 -32 3 -130 c2
-71 0 -166 -3 -211 l-7 -82 -52 52 c-28 29 -76 65 -106 81 -30 16 -76 47 -101
68 -25 21 -49 38 -53 38 -5 0 -26 15 -49 32 -31 25 -51 33 -85 33 -41 1 -47 5
-78 48 -19 26 -34 50 -34 55 0 11 50 39 102 58 113 41 227 38 368 -10z m4550
-14 c0 -60 -11 -82 -42 -82 -15 0 -18 8 -18 44 0 61 15 96 40 96 18 0 20 -6
20 -58z m905 18 c30 -19 35 -19 116 -4 81 16 260 17 275 2 16 -17 -87 -431
-116 -462 -5 -4 -25 -3 -46 4 -21 7 -69 13 -107 13 -58 0 -69 3 -79 20 -22 43
-104 120 -153 144 -90 46 -215 42 -287 -9 -25 -17 -29 -17 -67 -2 -47 19 -51
36 -21 101 25 56 93 123 155 152 38 19 70 25 130 27 45 1 95 9 115 18 45 20
47 20 85 -4z m-6235 -1 c120 -27 244 -116 300 -215 27 -46 36 -54 61 -54 26 0
33 -6 50 -44 10 -24 22 -59 25 -76 6 -28 10 -31 33 -25 14 3 56 9 93 12 56 4
75 2 112 -17 51 -24 93 -68 103 -108 3 -15 28 -49 55 -75 l49 -49 -3 -71 -3
-72 -138 -3 c-134 -2 -138 -2 -128 17 16 30 13 108 -5 147 -10 21 -34 45 -61
60 l-43 26 -53 -21 c-78 -31 -101 -31 -105 -1 -12 119 -85 217 -200 272 -56
27 -71 30 -130 26 -40 -3 -84 -14 -108 -26 l-42 -21 -16 57 c-20 74 -46 209
-46 245 l0 27 78 0 c42 0 97 -5 122 -11z m1363 -74 c90 -48 97 -58 97 -148 0
-33 -3 -33 -120 17 l-75 31 -3 73 c-2 40 1 72 6 72 6 0 48 -20 95 -45z m4270
-85 c-13 -87 -27 -122 -52 -131 -14 -5 -39 -15 -54 -24 l-28 -15 3 73 c3 62 5
72 21 69 9 -2 17 2 17 9 0 7 11 10 29 7 17 -2 30 -2 29 1 -2 22 4 32 20 29 9
-2 16 -10 15 -18z m-308 -181 c0 -118 -2 -140 -18 -157 -10 -11 -28 -22 -39
-25 -20 -6 -20 -3 -14 96 4 56 9 130 12 165 6 61 7 63 33 60 l26 -3 0 -136z
m-4181 119 c10 -31 15 -278 7 -278 -6 0 -23 12 -38 26 -27 25 -28 31 -34 137
-3 62 -4 115 -2 120 7 12 63 8 67 -5z m408 -187 c48 -23 105 -47 125 -54 l38
-12 3 -80 c4 -99 -4 -145 -24 -145 -8 0 -64 34 -124 76 -61 41 -152 99 -203
128 l-92 52 -3 82 -3 81 98 -43 c54 -24 137 -62 185 -85z m3594 73 c-3 -9 -6
-39 -6 -67 l-1 -52 -77 -35 c-42 -19 -135 -74 -207 -122 l-130 -86 -3 106 c-3
120 0 126 63 117 35 -5 45 -2 65 20 13 14 27 25 31 25 4 0 61 25 126 55 127
58 149 64 139 39z m930 -30 c57 -27 154 -150 154 -195 0 -18 -93 -103 -110
-100 -8 1 -53 22 -100 45 -93 46 -161 69 -170 58 -3 -4 -36 -8 -75 -10 -43 -2
-82 -10 -100 -21 -45 -26 -79 -95 -79 -158 l1 -53 -42 0 c-30 0 -45 5 -49 16
-3 9 -6 81 -6 160 l0 144 36 40 c62 69 160 85 251 42 30 -14 37 -14 56 -2 83
53 166 66 233 34z m-4914 -315 c14 -121 8 -139 -46 -125 -21 5 -24 13 -31 87
-7 89 -3 99 44 95 23 -3 27 -8 33 -57z m4158 29 c0 -13 3 -51 5 -85 l4 -63
-44 0 c-44 0 -45 1 -45 33 0 17 3 56 6 85 7 51 7 52 40 52 28 0 34 -4 34 -22z
m1040 -263 c0 -22 -179 -337 -259 -455 l-30 -44 21 -23 c21 -23 22 -23 330
-23 257 0 310 -2 314 -14 11 -28 -36 -253 -76 -371 -69 -201 -171 -378 -312
-541 -269 -312 -664 -512 -1093 -554 -110 -10 -868 -11 -1080 0 -60 3 -200 -1
-310 -8 -278 -19 -935 -21 -1150 -3 -93 8 -235 12 -315 10 -80 -2 -392 -4
-695 -4 -628 0 -658 3 -894 81 -442 146 -774 430 -976 833 -68 137 -132 344
-153 497 l-8 61 65 7 c36 3 186 6 332 6 253 0 267 1 284 20 18 19 16 23 -57
132 -116 174 -192 305 -218 373 l-10 25 3145 0 c1730 0 3145 -2 3145 -5z"/>
<path d="M4825 8594 c-16 -2 -79 -9 -140 -15 -309 -30 -687 -126 -921 -234
-43 -20 -101 -46 -128 -58 -28 -12 -81 -38 -117 -59 -36 -21 -69 -38 -72 -38
-16 0 -304 -180 -358 -224 -14 -12 -41 -32 -59 -46 -18 -14 -44 -35 -57 -48
-12 -12 -25 -22 -29 -21 -12 3 -94 -72 -89 -82 3 -5 0 -6 -7 -4 -11 5 -251
-222 -335 -316 -21 -23 -21 -25 -4 -25 12 0 17 5 13 15 -3 9 -1 12 6 7 7 -4
12 -2 12 6 0 9 3 9 10 -2 7 -12 10 -8 10 15 1 28 1 29 15 11 14 -19 15 -19 21
0 11 27 26 35 43 21 12 -10 14 -9 8 7 -6 14 -4 17 9 12 12 -4 15 -2 11 9 -8
20 13 76 25 69 6 -4 6 -10 -1 -17 -19 -19 -12 -35 20 -51 28 -14 30 -14 25 0
-5 14 14 44 28 44 10 0 6 -36 -5 -47 -8 -8 -8 -16 0 -30 10 -17 10 -17 12 2 1
11 1 23 1 26 -1 4 10 6 23 5 14 0 25 -6 25 -12 0 -21 45 -7 57 17 7 13 18 24
25 24 14 1 12 24 -3 40 -6 6 -12 2 -15 -13 -4 -12 -13 -22 -21 -22 -8 0 -11 5
-7 11 3 6 0 15 -7 20 -7 4 -10 12 -5 16 5 4 11 2 13 -4 8 -21 20 -15 28 14 4
19 9 23 14 14 6 -10 13 -7 25 10 l17 24 -7 -27 c-10 -43 13 -34 24 10 7 25 10
30 11 15 1 -13 6 -23 12 -23 8 0 7 -6 -2 -17 -13 -17 -13 -17 5 -3 51 39 78
69 72 79 -5 7 -1 9 8 5 9 -3 16 -1 16 4 0 6 10 14 21 17 29 9 139 94 139 106
0 6 4 8 9 5 8 -5 69 35 80 53 4 5 13 11 21 13 8 2 21 10 28 18 11 12 12 12 6
1 -4 -8 12 -1 37 16 81 57 224 134 244 131 13 -2 21 -12 23 -28 3 -26 1 -28
-118 -93 -116 -63 -200 -119 -193 -130 3 -5 1 -7 -5 -3 -19 12 -227 -138 -216
-156 4 -7 2 -8 -4 -4 -13 8 -74 -42 -67 -54 3 -4 -3 -7 -13 -6 -10 0 -17 -6
-17 -16 0 -10 -6 -23 -14 -30 -12 -11 -13 -10 -7 6 5 15 4 17 -7 8 -16 -14
-16 -38 2 -70 13 -24 36 -20 27 4 -6 15 11 18 38 8 9 -3 13 -10 10 -15 -3 -5
-9 -7 -14 -4 -4 3 -10 -2 -14 -10 -8 -21 0 -19 53 12 2 2 -8 12 -22 24 -30 23
-34 36 -13 36 8 0 20 -11 27 -24 16 -29 21 -29 40 3 l16 27 -1 -32 c-1 -20 -5
-30 -13 -27 -7 3 -15 1 -18 -4 -3 -5 4 -11 15 -15 11 -3 20 -11 20 -16 0 -5 5
-9 10 -9 6 0 10 6 10 14 0 8 6 17 13 19 7 3 5 6 -5 6 -10 1 -18 6 -18 12 0 6
9 9 20 6 11 -3 20 -1 20 4 0 4 -9 13 -20 19 -11 6 -20 15 -20 20 0 18 20 10
42 -15 16 -19 24 -22 30 -13 5 9 8 8 8 -4 0 -10 -7 -18 -15 -18 -14 0 -35 -29
-35 -48 0 -6 6 -12 14 -15 11 -4 14 1 13 21 -2 19 3 27 18 30 11 2 23 9 27 16
6 8 8 7 8 -2 0 -9 8 -11 23 -8 12 3 16 3 10 0 -19 -8 -16 -24 2 -18 10 4 13
13 10 24 -3 10 -1 21 5 25 16 10 25 -25 11 -46 -6 -11 -7 -19 -2 -19 17 0 30
27 26 51 -5 26 12 79 26 79 4 0 11 -4 14 -10 3 -5 -1 -10 -10 -10 -9 0 -14 -4
-10 -9 3 -5 1 -13 -5 -16 -8 -5 -8 -11 -1 -19 6 -7 7 -16 3 -21 -4 -4 4 -1 18
6 14 8 27 17 30 20 3 3 21 14 40 25 19 10 39 25 43 32 4 6 13 12 18 12 6 0 34
15 62 34 29 19 64 40 80 47 15 7 27 16 27 21 0 4 9 8 21 8 12 0 17 4 14 11 -4
6 -1 9 6 8 8 -2 52 16 98 39 46 23 88 42 93 42 5 0 28 8 51 19 67 29 81 34 91
32 4 -1 13 3 20 8 12 10 176 61 281 87 33 8 67 19 76 24 9 4 61 13 115 20 54
6 137 18 183 26 46 8 124 14 172 14 l89 0 1 218 c1 119 1 220 1 223 -2 12 43
-3 56 -19 9 -12 12 -72 12 -221 0 -120 4 -200 9 -192 5 8 10 9 12 3 4 -12 135
-19 146 -9 3 4 13 1 21 -6 12 -9 16 -9 19 1 5 14 33 17 33 2 0 -5 6 -7 14 -4
8 3 17 0 21 -5 3 -6 11 -8 17 -5 6 4 14 1 18 -6 5 -8 33 -13 78 -14 39 0 68
-4 67 -7 -6 -8 131 -28 158 -23 19 4 20 3 3 -4 -19 -8 -19 -9 2 -14 12 -4 24
-2 28 3 3 5 17 1 31 -9 15 -9 36 -15 46 -14 12 2 17 -1 13 -7 -5 -8 14 -11 58
-11 54 0 64 -3 60 -15 -6 -15 9 -20 49 -17 9 1 17 -5 17 -14 0 -10 6 -14 14
-11 8 3 16 2 18 -4 2 -5 21 -12 43 -15 22 -4 46 -14 53 -22 8 -11 28 -16 56
-16 32 0 42 -4 39 -13 -3 -7 0 -13 6 -13 6 0 11 6 11 13 0 9 3 8 9 -2 6 -9 10
-10 16 -2 5 9 10 9 20 1 7 -6 19 -8 28 -4 8 3 18 1 22 -5 3 -7 -2 -11 -14 -11
-11 0 -22 -4 -25 -8 -6 -10 35 -9 51 1 17 11 63 -21 56 -39 -4 -10 3 -14 23
-15 16 0 23 -3 16 -6 -16 -6 3 -33 23 -33 8 0 16 -6 18 -12 5 -12 11 16 8 34
0 4 9 13 22 19 18 9 20 9 10 -2 -19 -19 -17 -69 3 -69 11 0 14 6 10 23 -3 12
-3 17 0 10 3 -7 12 -9 20 -6 8 3 14 0 14 -6 0 -6 -5 -11 -11 -11 -5 0 -7 -4
-4 -10 3 -5 13 -10 21 -10 8 0 13 4 10 9 -3 5 2 15 11 22 15 12 16 12 10 -3
-8 -22 6 -23 23 -3 7 8 17 15 22 15 6 0 0 -9 -13 -21 l-24 -21 22 5 c16 4 22
0 21 -12 -2 -30 2 -51 11 -51 4 0 7 18 5 40 -2 30 1 40 12 40 9 0 12 -5 9 -11
-4 -5 -4 -22 -1 -35 6 -21 9 -24 21 -14 11 9 18 9 28 -2 21 -21 31 -58 16 -58
-10 0 -10 -3 -2 -11 15 -15 34 -3 26 16 -6 17 22 21 32 5 3 -5 1 -10 -4 -10
-14 0 -14 -40 0 -60 8 -11 9 -7 4 18 -7 35 1 41 21 15 12 -16 13 -16 14 -1 0
9 -6 19 -12 21 -8 4 -4 8 9 12 12 4 24 14 26 24 3 14 5 13 12 -3 6 -13 4 -21
-3 -24 -14 -4 -16 -42 -3 -42 11 0 21 24 22 53 0 21 1 21 8 3 7 -18 8 -18 14
-2 4 9 11 14 17 11 18 -11 11 -30 -17 -48 l-28 -17 27 6 c18 4 33 1 43 -9 21
-22 20 -23 -24 -19 -36 4 -38 2 -45 -29 -8 -42 0 -50 9 -9 7 31 9 32 45 26 22
-3 41 -2 44 3 3 5 -3 26 -13 47 -44 89 -45 93 -33 119 7 15 17 23 23 20 6 -5
7 -11 0 -19 -5 -6 -7 -31 -4 -54 5 -37 9 -42 32 -42 15 0 34 -9 44 -20 14 -17
14 -20 2 -20 -8 0 -15 -4 -15 -8 0 -16 40 -6 56 14 8 10 12 13 9 6 -6 -12 -4
-12 16 -1 l24 14 -23 3 c-12 2 -20 7 -17 12 3 4 -2 13 -10 20 -13 11 -14 10
-9 -4 3 -9 2 -16 -4 -16 -12 0 -24 29 -17 40 3 5 0 12 -6 16 -8 4 -9 3 -5 -4
4 -7 0 -12 -11 -13 -10 0 -13 -3 -5 -6 6 -2 12 -11 12 -19 0 -12 -4 -12 -20
-2 -11 7 -20 18 -20 25 0 6 -6 14 -12 17 -7 3 -3 3 9 0 28 -6 25 17 -6 50 -20
21 -26 23 -42 13 -11 -7 -19 -20 -19 -29 0 -10 -4 -18 -8 -18 -10 0 -9 36 1
46 4 4 2 13 -4 21 -12 14 0 18 17 6 5 -5 -3 4 -19 19 -16 14 -80 60 -142 102
-78 53 -118 74 -131 70 -14 -4 -15 -3 -6 4 11 7 6 14 -22 31 -20 12 -41 19
-47 15 -7 -4 -9 -3 -5 4 4 6 -25 27 -74 52 -65 34 -80 47 -80 65 0 15 8 26 20
30 25 8 107 -22 114 -41 3 -8 17 -14 31 -14 14 0 25 -5 25 -11 0 -8 6 -7 17 2
10 8 14 9 10 2 -9 -14 29 -52 60 -59 13 -4 20 -11 16 -17 -4 -6 0 -8 10 -4 12
4 17 1 17 -9 0 -11 6 -14 16 -10 8 3 12 2 9 -4 -3 -5 6 -12 20 -16 13 -3 23
-10 20 -14 -3 -4 9 -13 25 -20 17 -7 30 -17 30 -22 0 -6 9 -8 20 -5 10 3 18 1
17 -3 -2 -10 100 -100 114 -100 5 0 9 5 9 10 0 6 5 10 10 10 7 0 7 -6 1 -19
-8 -14 -5 -21 14 -31 14 -7 25 -17 25 -22 0 -4 7 -8 15 -8 8 0 14 -6 13 -12
-2 -9 7 -12 25 -10 18 2 26 -1 22 -8 -6 -10 16 -40 30 -40 4 0 25 -18 47 -40
37 -39 58 -44 58 -14 0 18 17 18 37 -1 8 -8 19 -12 24 -9 6 3 22 3 37 -1 18
-4 22 -9 13 -14 -10 -7 -10 -12 0 -29 11 -17 10 -24 -5 -47 -10 -15 -15 -29
-12 -32 3 -3 8 2 12 11 3 9 13 16 21 16 8 0 21 6 29 14 19 20 51 9 59 -21 4
-19 9 -22 19 -14 21 17 -2 61 -32 61 -13 0 -21 4 -17 9 14 23 -15 18 -33 -5
-19 -27 -19 -27 -25 -5 -4 17 0 24 17 30 12 5 22 18 23 31 2 19 -2 22 -26 17
-16 -3 -31 -3 -35 0 -9 10 15 34 27 26 6 -4 8 0 4 10 -4 11 -2 14 8 11 8 -3
11 -12 9 -19 -3 -7 4 -16 15 -20 12 -3 21 -10 21 -15 0 -5 7 -7 15 -4 8 4 15
1 15 -5 0 -6 -7 -11 -15 -11 -22 0 -18 -17 4 -23 13 -3 22 1 24 12 4 13 6 11
12 -6 4 -13 12 -23 17 -23 5 0 6 -5 2 -12 -5 -8 -2 -9 11 -4 14 5 16 4 6 -7
-9 -11 -8 -17 2 -26 8 -6 16 -8 19 -5 3 2 8 -2 11 -11 5 -11 0 -15 -16 -15
-19 -1 -20 -2 -6 -10 12 -7 25 -6 42 3 l25 13 -24 23 c-13 12 -28 20 -33 17
-5 -3 -8 1 -7 9 1 18 -163 197 -175 189 -5 -3 -8 -2 -7 3 6 18 -166 169 -326
285 -214 157 -441 287 -716 411 -229 104 -558 192 -870 233 -108 14 -596 28
-665 18z m1902 -509 c0 -8 -4 -15 -9 -15 -10 0 -11 14 -1 23 9 10 10 9 10 -8z
m-177 -5 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4 -10z
m-3040 -40 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11 -4
11 -10z m3210 1 c0 -6 -4 -13 -10 -16 -5 -3 -10 1 -10 9 0 9 5 16 10 16 6 0
10 -4 10 -9z m-120 -11 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10
6 0 11 -4 11 -10z m-3375 -20 c-3 -5 -12 -10 -18 -10 -7 0 -6 4 3 10 19 12 23
12 15 0z m3642 -36 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m48
-32 c-3 -3 -11 0 -18 7 -9 10 -8 11 6 5 10 -3 15 -9 12 -12z m-65 -33 c0 -14
-17 -10 -23 5 -4 10 -1 13 9 9 7 -3 14 -9 14 -14z m-850 7 c0 -3 -4 -8 -10
-11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m945 -16 c3 -5 1 -10
-4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11 -10z m19 -38 c-4 -18 -11
-32 -16 -32 -6 0 -7 8 -3 18 4 9 10 25 12 35 9 29 14 13 7 -21z m52 12 c-4 -9
-9 -15 -11 -12 -3 3 -3 13 1 22 4 9 9 15 11 12 3 -3 3 -13 -1 -22z m-3796 -24
c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4 -10z m600
-10 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4 10 -10z
m3350 -15 c0 -8 -4 -15 -10 -15 -5 0 -7 7 -4 15 4 8 8 15 10 15 2 0 4 -7 4
-15z m-4170 -5 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10
-4 10 -10z m3200 0 c0 -5 -4 -10 -9 -10 -6 0 -13 5 -16 10 -3 6 1 10 9 10 9 0
16 -4 16 -10z m150 0 c12 -8 11 -10 -7 -10 -12 0 -25 5 -28 10 -8 13 15 13 35
0z m684 -59 c-2 -2 -13 4 -24 14 -11 10 -20 15 -20 11 0 -4 -5 -4 -10 -1 -6 4
-8 11 -4 16 3 5 18 -1 33 -13 16 -13 27 -25 25 -27z m-3984 25 c0 -3 -4 -8
-10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m3687 -18 c-3 -8
-6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m468 12 c-3 -5 -12 -10 -18 -10
-7 0 -6 4 3 10 19 12 23 12 15 0z m-54 -43 c-8 -8 -11 -7 -11 4 0 9 3 19 7 23
4 4 9 2 11 -4 3 -7 -1 -17 -7 -23z m-4058 8 c1 -5 -6 -11 -15 -13 -11 -2 -18
3 -18 13 0 17 30 18 33 0z m3922 -3 c-3 -3 -11 0 -18 7 -9 10 -8 11 6 5 10 -3
15 -9 12 -12z m-4130 -3 c11 -16 1 -19 -13 -3 -7 8 -8 14 -3 14 5 0 13 -5 16
-11z m89 -7 c3 -5 -1 -9 -9 -9 -8 0 -12 4 -9 9 3 4 7 8 9 8 2 0 6 -4 9 -8z
m46 -2 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11 -4 11
-10z m4080 0 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10
-4 10 -10z m135 0 c-3 -5 -11 -10 -16 -10 -6 0 -7 5 -4 10 3 6 11 10 16 10 6
0 7 -4 4 -10z m-370 -26 c-9 -9 -19 -13 -23 -10 -3 4 0 11 8 16 24 15 33 11
15 -6z m426 6 c5 0 4 -6 -3 -14 -9 -10 -17 -11 -25 -4 -18 15 -16 31 3 24 9
-3 20 -6 25 -6z m-671 -15 c-7 -9 -15 -13 -19 -10 -3 3 1 10 9 15 21 14 24 12
10 -5z m518 -6 c4 -11 2 -11 -8 -2 -7 6 -20 9 -29 6 -14 -4 -14 -3 -1 6 18 13
32 10 38 -10z m52 -3 c0 -16 -28 -42 -36 -33 -7 6 18 47 28 47 5 0 8 -6 8 -14z
m-4140 0 c0 -3 -4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10
-4z m405 -6 c3 -5 2 -10 -4 -10 -5 0 -13 5 -16 10 -3 6 -2 10 4 10 5 0 13 -4
16 -10z m3293 -8 c-8 -9 -14 -9 -24 -1 -19 16 -18 17 10 15 18 -1 22 -4 14
-14z m74 -7 c3 -14 1 -25 -3 -25 -5 0 -9 11 -9 25 0 14 2 25 4 25 2 0 6 -11 8
-25z m-3992 11 c0 -3 -4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10
-2 10 -4z m4384 -20 c-3 -9 -10 -16 -15 -16 -5 0 -4 9 3 20 14 22 21 20 12 -4z
m-4364 0 c0 -7 -11 -16 -25 -18 -14 -3 -25 -1 -25 3 0 5 9 9 20 9 11 0 20 5
20 10 0 6 2 10 5 10 3 0 5 -6 5 -14z m30 4 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11
10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z m695 0 c-3 -5 -13 -10 -21 -10 -8 0 -14
5 -14 10 0 6 9 10 21 10 11 0 17 -4 14 -10z m-795 -15 c-7 -8 -17 -15 -23 -15
-6 0 -2 7 9 15 25 19 30 19 14 0z m465 5 c3 -5 -1 -10 -9 -10 -9 0 -16 5 -16
10 0 6 4 10 9 10 6 0 13 -4 16 -10z m98 -42 c9 -6 9 -8 0 -8 -14 0 -33 32 -32
52 0 7 5 2 10 -12 6 -13 15 -28 22 -32z m3527 37 c0 -9 -6 -12 -15 -9 -8 4
-12 10 -9 15 8 14 24 10 24 -6z m265 5 c-3 -5 -11 -10 -16 -10 -6 0 -7 5 -4
10 3 6 11 10 16 10 6 0 7 -4 4 -10z m-3765 -4 c0 -2 -7 -6 -15 -10 -8 -3 -15
-1 -15 4 0 6 7 10 15 10 8 0 15 -2 15 -4z m98 -21 c-3 -3 -9 2 -12 12 -6 14
-5 15 5 6 7 -7 10 -15 7 -18z m3299 -1 c-9 -9 -28 6 -21 18 4 6 10 6 17 -1 6
-6 8 -13 4 -17z m525 19 c-10 -4 -10 -8 -1 -19 10 -12 9 -18 -5 -32 -16 -16
-17 -15 -10 13 6 29 6 29 -9 10 -11 -14 -16 -16 -17 -6 0 15 29 41 45 40 6 0
4 -3 -3 -6z m-4412 -13 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10
10 6 0 10 -4 10 -10z m550 1 c0 -5 -7 -12 -16 -15 -14 -5 -15 -4 -4 9 14 17
20 19 20 6z m-710 -22 c0 -6 -4 -7 -10 -4 -5 3 -10 11 -10 16 0 6 5 7 10 4 6
-3 10 -11 10 -16z m810 11 c0 -5 -7 -10 -15 -10 -8 0 -15 5 -15 10 0 6 7 10
15 10 8 0 15 -4 15 -10z m3870 -10 c0 -11 -4 -20 -9 -20 -5 0 -11 9 -14 20 -3
13 0 20 9 20 8 0 14 -9 14 -20z m-4610 1 c0 -5 -7 -14 -15 -21 -13 -10 -15 -9
-15 9 0 12 6 21 15 21 8 0 15 -4 15 -9z m385 -1 c3 -5 -1 -10 -9 -10 -9 0 -16
5 -16 10 0 6 4 10 9 10 6 0 13 -4 16 -10z m3643 -10 c-13 -20 -28 -27 -28 -12
0 10 22 32 32 32 5 0 3 -9 -4 -20z m-3350 -26 c-10 -10 -28 6 -28 24 0 15 1
15 17 -1 9 -9 14 -19 11 -23z m3442 20 c0 -8 -4 -12 -10 -9 -5 3 -10 10 -10
16 0 5 5 9 10 9 6 0 10 -7 10 -16z m-3673 -9 c18 -19 9 -33 -10 -16 -21 17
-77 3 -77 -20 0 -32 -18 -30 -23 4 -5 31 2 53 10 31 4 -13 53 -6 53 7 0 15 30
10 47 -6z m278 5 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8
-4 11 -10z m3838 -4 c-3 -4 1 -12 8 -17 10 -6 8 -9 -9 -9 -15 0 -21 4 -16 12
5 8 2 9 -10 5 -20 -8 -39 0 -31 13 3 5 19 8 34 7 16 -1 27 -6 24 -11z m-4633
-11 c0 -8 -4 -15 -10 -15 -5 0 -7 7 -4 15 4 8 8 15 10 15 2 0 4 -7 4 -15z
m646 -10 c-3 -9 -11 -13 -16 -10 -8 5 -7 11 1 21 14 18 24 11 15 -11z m3884
11 c0 -9 7 -12 20 -9 24 6 27 -12 4 -21 -19 -7 -17 -8 -33 22 -8 14 -8 22 -1
22 5 0 10 -6 10 -14z m-4440 -6 c0 -5 7 -10 15 -10 8 0 15 -4 15 -9 0 -5 -11
-8 -24 -8 -18 0 -24 5 -23 18 1 19 17 27 17 9z m4065 0 c3 -5 -1 -10 -9 -10
-9 0 -16 5 -16 10 0 6 4 10 9 10 6 0 13 -4 16 -10z m-3448 -32 c-3 -8 -6 -5
-6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m-777 2 c0 -5 -2 -10 -4 -10 -3 0 -8
5 -11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z m650 0 c0 -5 -5 -10 -11 -10 -5 0
-7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4 -10z m21 -23 c-8 -8 -11 -7 -11 4 0 20
13 34 18 19 3 -7 -1 -17 -7 -23z m-734 -29 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13
3 -3 4 -12 1 -19z"/>
<path d="M6384 7739 c-3 -6 -1 -16 5 -22 8 -8 11 -5 11 11 0 24 -5 28 -16 11z"/>
<path d="M6607 7615 c-17 -12 -16 -13 7 -11 25 1 34 10 18 20 -4 2 -15 -2 -25
-9z"/>
<path d="M2935 7589 c-11 -17 1 -21 15 -4 8 9 8 15 2 15 -6 0 -14 -5 -17 -11z"/>
<path d="M6715 7560 c3 -5 8 -10 11 -10 2 0 4 5 4 10 0 6 -5 10 -11 10 -5 0
-7 -4 -4 -10z"/>
<path d="M6746 7554 c-9 -24 -2 -26 12 -4 7 11 8 20 3 20 -5 0 -12 -7 -15 -16z"/>
<path d="M2987 7502 c1 -8 3 -16 3 -18 0 -2 7 -4 15 -4 8 0 15 5 15 10 0 6 -6
10 -14 10 -8 0 -16 3 -19 8 -2 4 -2 1 0 -6z"/>
<path d="M2700 7494 c0 -8 5 -12 10 -9 6 3 10 10 10 16 0 5 -4 9 -10 9 -5 0
-10 -7 -10 -16z"/>
<path d="M7020 7500 c0 -5 5 -10 11 -10 5 0 7 5 4 10 -3 6 -8 10 -11 10 -2 0
-4 -4 -4 -10z"/>
<path d="M7316 7501 c-14 -5 -16 -10 -7 -15 6 -4 20 -2 29 5 12 10 11 7 -3 -9
-16 -19 -17 -25 -6 -32 17 -10 63 9 55 22 -4 6 -11 5 -17 -1 -16 -16 -31 -13
-17 4 6 8 9 19 5 25 -7 11 -12 12 -39 1z"/>
<path d="M2666 7485 c-9 -26 -7 -32 5 -12 6 10 9 21 6 23 -2 3 -7 -2 -11 -11z"/>
<path d="M2736 7488 c4 -12 -1 -17 -18 -20 -16 -2 -19 -5 -8 -9 8 -4 23 -3 33
0 16 6 16 8 2 26 -11 15 -14 16 -9 3z"/>
<path d="M2781 7484 c0 -11 3 -14 6 -6 3 7 2 16 -1 19 -3 4 -6 -2 -5 -13z"/>
<path d="M7153 7493 c-7 -3 -13 -9 -13 -15 0 -6 7 -8 15 -4 8 3 15 3 15 0 0
-2 -10 -9 -22 -14 -22 -8 -22 -9 -2 -9 11 -1 25 -6 31 -12 7 -7 11 -3 11 15 0
28 -16 46 -35 39z"/>
<path d="M2944 7482 c-7 -4 -8 -15 -3 -27 4 -11 8 -15 9 -10 1 6 6 1 11 -10 8
-17 9 -16 3 5 -3 14 -6 31 -6 38 -1 6 -2 12 -2 12 -1 0 -6 -4 -12 -8z"/>
<path d="M6895 7470 c-3 -5 -1 -10 4 -10 6 0 11 5 11 10 0 6 -2 10 -4 10 -3 0
-8 -4 -11 -10z"/>
<path d="M3020 7465 c0 -5 5 -17 10 -25 5 -8 10 -10 10 -5 0 6 -5 17 -10 25
-5 8 -10 11 -10 5z"/>
<path d="M3275 7460 c-3 -5 3 -10 14 -10 12 0 21 5 21 10 0 6 -6 10 -14 10 -8
0 -18 -4 -21 -10z"/>
<path d="M2907 7452 c-5 -7 -1 -22 12 -37 10 -14 22 -21 25 -16 3 5 0 11 -8
14 -8 3 -16 16 -18 29 -2 16 -5 19 -11 10z"/>
<path d="M3114 7435 c1 -25 10 -32 20 -16 7 11 -3 41 -14 41 -4 0 -7 -11 -6
-25z"/>
<path d="M3150 7449 c0 -5 5 -7 10 -4 6 3 10 8 10 11 0 2 -4 4 -10 4 -5 0 -10
-5 -10 -11z"/>
<path d="M7026 7440 c-10 -11 -16 -26 -13 -35 9 -23 24 -18 23 7 -1 31 30 35
54 6 16 -18 19 -20 20 -6 1 49 -47 65 -84 28z"/>
<path d="M7200 7456 c0 -2 8 -10 18 -17 15 -13 16 -12 3 4 -13 16 -21 21 -21
13z"/>
<path d="M2620 7430 c0 -5 7 -10 16 -10 8 0 12 5 9 10 -3 6 -10 10 -16 10 -5
0 -9 -4 -9 -10z"/>
<path d="M2680 7425 c0 -8 5 -15 10 -15 6 0 10 7 10 15 0 8 -4 15 -10 15 -5 0
-10 -7 -10 -15z"/>
<path d="M3070 7430 c0 -5 7 -10 15 -10 8 0 15 5 15 10 0 6 -7 10 -15 10 -8 0
-15 -4 -15 -10z"/>
<path d="M6955 7430 c3 -5 10 -10 16 -10 5 0 9 5 9 10 0 6 -7 10 -16 10 -8 0
-12 -4 -9 -10z"/>
<path d="M2581 7410 c14 -31 19 -36 19 -24 0 6 -7 19 -16 30 -14 18 -14 18 -3
-6z"/>
<path d="M2870 7415 c-9 -11 -9 -15 -1 -15 7 0 9 -4 6 -10 -3 -5 -2 -10 3 -10
14 0 22 25 13 39 -6 9 -11 8 -21 -4z"/>
<path d="M3160 7415 c-6 -8 -10 -19 -8 -26 2 -6 9 0 16 15 13 29 10 33 -8 11z"/>
<path d="M7137 7394 c-30 -36 -31 -46 -1 -17 13 13 19 14 22 5 2 -6 8 -12 14
-12 7 0 6 5 -1 14 -6 7 -9 21 -5 30 9 23 3 19 -29 -20z"/>
<path d="M7450 7415 c0 -8 5 -15 10 -15 6 0 10 7 10 15 0 8 -4 15 -10 15 -5 0
-10 -7 -10 -15z"/>
<path d="M2991 7404 c0 -11 3 -14 6 -6 3 7 2 16 -1 19 -3 4 -6 -2 -5 -13z"/>
<path d="M3250 7410 c0 -5 7 -7 15 -4 8 4 15 8 15 10 0 2 -7 4 -15 4 -8 0 -15
-4 -15 -10z"/>
<path d="M7243 7408 c3 -9 1 -19 -6 -21 -7 -2 -9 -8 -5 -12 4 -4 14 -1 22 8
14 13 14 16 -1 29 -15 11 -16 11 -10 -4z"/>
<path d="M2475 7400 c3 -5 8 -10 11 -10 2 0 4 5 4 10 0 6 -5 10 -11 10 -5 0
-7 -4 -4 -10z"/>
<path d="M7058 7398 c5 -5 16 -8 23 -6 8 3 3 7 -10 11 -17 4 -21 3 -13 -5z"/>
<path d="M6938 7393 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
<path d="M6986 7387 c3 -10 9 -15 12 -12 3 3 0 11 -7 18 -10 9 -11 8 -5 -6z"/>
<path d="M7195 7390 c4 -6 11 -8 16 -5 14 9 11 15 -7 15 -8 0 -12 -5 -9 -10z"/>
<path d="M7415 7390 c-3 -5 -1 -10 4 -10 6 0 11 5 11 10 0 6 -2 10 -4 10 -3 0
-8 -4 -11 -10z"/>
<path d="M7470 7380 c0 -5 5 -10 10 -10 6 0 10 5 10 10 0 6 -4 10 -10 10 -5 0
-10 -4 -10 -10z"/>
<path d="M2896 7364 c-9 -24 -2 -26 12 -4 7 11 8 20 3 20 -5 0 -12 -7 -15 -16z"/>
<path d="M7057 7359 c7 -7 15 -10 18 -7 3 3 -2 9 -12 12 -14 6 -15 5 -6 -5z"/>
<path d="M7430 7360 c0 -5 5 -10 10 -10 6 0 10 5 10 10 0 6 -4 10 -10 10 -5 0
-10 -4 -10 -10z"/>
<path d="M7210 7350 c0 -5 5 -10 11 -10 5 0 7 5 4 10 -3 6 -8 10 -11 10 -2 0
-4 -4 -4 -10z"/>
<path d="M7590 7342 c0 -5 7 -16 16 -23 14 -12 16 -11 13 5 -4 20 -29 35 -29
18z"/>
<path d="M7680 7346 c0 -2 8 -10 18 -17 15 -13 16 -12 3 4 -13 16 -21 21 -21
13z"/>
<path d="M2790 7329 c0 -5 5 -7 10 -4 6 3 10 8 10 11 0 2 -4 4 -10 4 -5 0 -10
-5 -10 -11z"/>
<path d="M7309 7307 c6 -8 8 -17 4 -20 -3 -4 -2 -7 4 -7 18 0 22 12 8 26 -18
18 -31 18 -16 1z"/>
<path d="M7630 7280 c0 -5 4 -10 9 -10 6 0 13 5 16 10 3 6 -1 10 -9 10 -9 0
-16 -4 -16 -10z"/>
<path d="M7498 7273 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
<path d="M7770 7243 c0 -5 10 -18 23 -29 l22 -19 -20 25 c-11 14 -21 27 -22
29 -2 2 -3 0 -3 -6z"/>
<path d="M8057 5833 c-25 -25 -43 -52 -40 -59 2 -7 26 -15 52 -19 50 -7 171
-4 171 5 0 10 -115 120 -126 120 -6 0 -32 -21 -57 -47z m4 -56 c-10 -9 -11 -8
-5 6 3 10 9 15 12 12 3 -3 0 -11 -7 -18z"/>
<path d="M3274 5011 c20 -22 26 -25 26 -13 0 4 -10 13 -22 21 -23 14 -23 14
-4 -8z"/>
<path d="M7106 4745 c-9 -26 -7 -32 5 -12 6 10 9 21 6 23 -2 3 -7 -2 -11 -11z"/>
<path d="M7192 4720 c-18 -29 -15 -38 4 -12 9 13 14 25 12 27 -2 2 -9 -5 -16
-15z"/>
<path d="M6830 4749 c0 -5 5 -7 10 -4 6 3 10 8 10 11 0 2 -4 4 -10 4 -5 0 -10
-5 -10 -11z"/>
<path d="M5186 4178 c1 -128 3 -241 3 -250 1 -17 18 -18 216 -18 l215 0 0 250
0 250 -219 0 -218 0 3 -232z"/>
<path d="M3946 4139 c-4 -121 -3 -216 2 -221 5 -5 82 -7 173 -6 l164 3 3 218
2 217 -168 0 -169 0 -7 -211z"/>
<path d="M4502 4133 l3 -218 230 0 230 0 3 218 2 217 -235 0 -235 0 2 -217z"/>
<path d="M5842 4133 l3 -218 165 0 165 0 3 218 2 217 -170 0 -170 0 2 -217z
m236 0 l-3 -128 -67 -3 -68 -3 0 131 0 130 70 0 71 0 -3 -127z"/>
<path d="M3926 3175 l-37 -45 -516 -2 c-479 -3 -517 -4 -527 -20 -8 -13 -8
-23 0 -35 10 -17 47 -18 493 -21 264 -1 481 -5 481 -8 0 -8 -71 -95 -139 -170
-86 -94 -141 -165 -141 -181 0 -8 9 -28 21 -44 l20 -29 -119 0 c-101 0 -123
-3 -142 -18 -29 -23 -22 -67 12 -76 13 -3 299 -6 636 -6 599 0 612 0 632 20
26 26 25 45 -2 64 -19 14 -64 16 -289 16 -229 0 -266 2 -266 15 0 12 17 15 88
15 92 0 119 11 119 50 0 18 -78 228 -104 278 -7 15 -17 37 -20 50 l-7 22 140
0 c133 0 141 1 155 22 14 20 14 24 -1 40 -14 15 -37 18 -182 20 l-166 3 -23
43 c-33 59 -66 58 -116 -3z m27 -257 c-3 -95 -6 -174 -7 -175 -5 -6 -246 -6
-246 0 0 5 27 40 59 78 32 39 88 115 122 170 35 54 67 99 70 99 4 0 4 -78 2
-172z m146 -32 c54 -144 54 -146 -10 -146 l-50 0 0 58 c1 31 -1 104 -4 162 -6
120 -9 123 64 -74z m-151 -248 c-3 -9 -38 -14 -115 -16 -89 -2 -112 0 -123 13
-11 13 2 15 115 15 97 0 126 -3 123 -12z"/>
<path d="M5532 3118 c-18 -18 -14 -46 7 -58 13 -7 298 -10 855 -10 826 0 836
0 856 20 16 16 18 25 10 40 -11 20 -24 20 -863 20 -650 0 -856 -3 -865 -12z"/>
<path d="M7648 2785 c-32 -30 -58 -58 -58 -63 0 -5 7 -15 15 -22 13 -11 20 -9
40 10 l24 23 62 -57 62 -58 21 22 21 22 -59 53 c-57 51 -59 55 -47 79 14 25 8
46 -12 46 -7 -1 -38 -25 -69 -55z"/>
<path d="M2402 2734 c-40 -36 -72 -69 -72 -72 0 -4 7 -16 15 -26 14 -19 15
-18 36 7 30 39 39 33 32 -22 -5 -43 -3 -50 18 -65 23 -16 24 -15 27 1 10 60
12 63 47 63 24 0 38 7 49 22 27 39 20 76 -23 119 -21 22 -43 39 -48 39 -5 0
-41 -30 -81 -66z m108 -24 c12 -23 6 -40 -15 -40 -14 0 -35 29 -35 49 0 19 39
12 50 -9z"/>
<path d="M6262 2779 c-55 -28 -78 -60 -62 -88 14 -26 35 -26 88 -1 53 26 102
25 154 -1 65 -33 117 -5 84 46 -40 61 -181 85 -264 44z"/>
<path d="M7526 2671 c-22 -24 -21 -27 22 -57 l37 -26 -50 8 c-116 17 -121 2
-33 -96 66 -73 81 -81 97 -52 8 13 3 24 -22 50 -35 36 -27 40 49 21 39 -10 48
-9 62 5 15 15 12 21 -48 82 -81 82 -93 89 -114 65z"/>
<path d="M2605 2583 c-88 -95 -87 -90 -25 -144 43 -38 58 -46 72 -38 27 15 22
34 -17 60 -19 13 -35 29 -35 36 0 20 22 27 34 11 6 -8 21 -20 32 -26 18 -9 24
-8 34 4 11 12 8 20 -15 44 -21 22 -26 33 -18 41 7 7 21 2 46 -20 39 -35 49
-37 66 -17 9 11 0 24 -46 65 -32 28 -60 50 -63 50 -3 0 -32 -30 -65 -66z"/>
<path d="M5650 2607 c-27 -14 -36 -43 -20 -67 8 -13 86 -15 579 -18 510 -2
571 -1 585 13 20 21 20 49 0 69 -14 14 -79 16 -567 16 -424 0 -558 -3 -577
-13z"/>
<path d="M7308 2502 c-26 -20 -47 -41 -47 -47 -1 -5 29 -47 64 -93 74 -92 68
-91 145 -23 43 38 44 40 28 57 -17 17 -19 17 -47 -10 -18 -17 -36 -26 -45 -23
-23 9 -20 22 9 41 26 17 30 32 16 55 -7 11 -16 8 -45 -14 -32 -25 -36 -26 -43
-10 -4 13 3 25 26 44 23 19 30 32 25 44 -10 26 -34 20 -86 -21z"/>
<path d="M4940 2521 c-54 -17 -90 -42 -96 -68 -14 -53 27 -78 74 -44 49 34
101 37 162 8 41 -20 58 -23 72 -16 47 25 26 74 -46 108 -47 21 -117 27 -166
12z"/>
<path d="M2885 2444 c-11 -9 -51 -32 -90 -51 -38 -19 -72 -37 -74 -39 -2 -2 4
-13 14 -24 11 -13 25 -18 39 -14 30 7 74 -29 78 -64 2 -18 10 -28 24 -30 18
-3 23 7 43 103 17 83 19 110 10 121 -14 17 -19 17 -44 -2z m-15 -89 c0 -26
-14 -33 -25 -15 -9 14 1 40 15 40 5 0 10 -11 10 -25z"/>
<path d="M7156 2389 c-10 -16 -13 -36 -9 -70 3 -28 2 -49 -4 -49 -5 0 -24 11
-43 25 -38 28 -53 31 -68 12 -8 -10 0 -31 32 -86 24 -40 51 -80 60 -89 14 -15
17 -15 32 -1 14 14 13 19 -6 52 -26 43 -17 48 21 11 37 -36 53 -24 44 35 l-7
46 26 -24 c14 -14 26 -30 26 -38 0 -19 14 -16 34 6 20 22 25 14 -62 124 -30
37 -55 67 -57 67 -2 0 -11 -10 -19 -21z"/>
<path d="M3023 2273 c-28 -43 -54 -83 -57 -90 -9 -16 98 -87 119 -80 25 10 17
35 -19 60 l-35 23 41 67 c39 64 44 97 16 97 -8 0 -36 -35 -65 -77z"/>
<path d="M4430 2330 c-24 -24 -24 -30 -6 -55 13 -18 39 -18 652 -17 593 1 640
3 651 19 17 23 16 30 -7 53 -20 20 -33 20 -645 20 -612 0 -625 0 -645 -20z"/>
<path d="M6893 2243 c-30 -6 -63 -49 -63 -83 0 -19 8 -33 26 -45 22 -14 33
-15 72 -5 30 7 48 8 55 1 14 -14 -10 -41 -37 -41 -31 0 -50 -16 -43 -34 8 -20
58 -21 96 -1 16 8 34 28 41 44 25 61 -34 105 -112 84 -43 -12 -51 -8 -37 18 5
11 21 19 35 19 28 0 44 28 23 41 -15 9 -19 9 -56 2z"/>
<path d="M3432 2127 c-16 -18 -82 -160 -82 -174 0 -15 43 -29 47 -16 12 35 28
43 61 31 27 -11 37 -10 60 2 34 20 49 61 34 94 -15 33 -106 81 -120 63z m63
-87 c0 -18 -6 -26 -22 -28 -24 -3 -29 11 -17 43 10 25 39 14 39 -15z"/>
<path d="M6659 2111 c-34 -34 -37 -70 -9 -96 16 -14 30 -17 70 -12 29 4 52 2
56 -4 10 -16 -16 -38 -49 -41 -39 -4 -43 -29 -6 -42 36 -12 93 17 109 55 23
56 -28 95 -114 87 -45 -4 -43 19 3 33 42 12 53 32 25 43 -32 12 -56 5 -85 -23z"/>
<path d="M3631 2027 c-5 -12 -23 -56 -40 -97 -28 -69 -29 -76 -14 -87 25 -19
33 -16 45 19 10 29 12 30 25 13 7 -11 13 -28 13 -40 0 -26 18 -45 43 -45 17 0
18 5 13 35 -6 31 -3 40 23 64 55 51 35 104 -52 140 l-48 21 -8 -23z m79 -61
c0 -2 3 -11 6 -19 6 -17 -19 -29 -41 -21 -8 4 -15 15 -15 25 0 14 7 19 25 19
14 0 25 -2 25 -4z"/>
<path d="M6445 2015 c-58 -57 -15 -122 71 -109 41 6 46 5 42 -12 -2 -13 -16
-21 -46 -27 -33 -6 -42 -13 -40 -25 2 -12 15 -18 46 -20 36 -3 47 1 72 27 36
35 38 60 7 89 -18 17 -36 22 -75 22 -29 0 -52 4 -52 10 0 13 34 30 59 30 14 0
21 6 21 20 0 31 -73 28 -105 -5z"/>
<path d="M5928 2003 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
<path d="M5808 1973 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
<path d="M6257 1950 c-32 -10 -61 -21 -64 -24 -4 -4 54 -194 63 -204 5 -7 144
42 144 51 0 4 -5 17 -10 28 -11 19 -11 19 -50 -1 -49 -25 -50 -25 -50 1 0 13
10 23 30 30 19 7 30 18 30 29 0 28 -16 33 -49 15 -37 -19 -37 -19 -45 0 -4 12
7 21 40 35 32 14 45 25 42 37 -4 24 -16 24 -81 3z"/>
<path d="M3839 1911 c-77 -77 2 -215 104 -182 67 22 98 84 73 145 -19 45 -52
66 -104 66 -35 0 -49 -6 -73 -29z m115 -37 c23 -22 20 -60 -6 -84 -26 -24 -41
-25 -62 -5 -25 25 -29 54 -12 80 19 29 57 33 80 9z"/>
<path d="M4738 1903 c6 -2 18 -2 25 0 6 3 1 5 -13 5 -14 0 -19 -2 -12 -5z"/>
<path d="M4848 1893 c12 -2 30 -2 40 0 9 3 -1 5 -23 4 -22 0 -30 -2 -17 -4z"/>
<path d="M5263 1893 c9 -2 23 -2 30 0 6 3 -1 5 -18 5 -16 0 -22 -2 -12 -5z"/>
<path d="M4100 1851 c-27 -103 -38 -167 -31 -174 17 -17 46 -2 49 25 3 26 5
27 45 22 53 -7 87 20 87 69 0 51 -21 68 -99 86 l-41 9 -10 -37z m85 -35 c25
-18 13 -46 -20 -46 -25 0 -31 13 -19 44 7 20 15 20 39 2z"/>
<path d="M5993 1868 c-31 -35 -34 -45 -22 -72 14 -29 59 -50 95 -43 16 3 27 0
31 -10 8 -21 -4 -28 -50 -28 -55 0 -64 -28 -14 -44 60 -20 108 4 122 61 11 42
-31 78 -90 78 -57 0 -58 22 -2 31 44 7 51 13 44 34 -10 25 -89 20 -114 -7z"/>
<path d="M5776 1818 c-35 -33 -40 -60 -15 -91 17 -22 29 -27 65 -27 31 0 44
-4 44 -14 0 -17 -22 -26 -60 -26 -36 0 -49 -19 -25 -37 33 -23 83 -16 116 16
16 16 29 38 29 49 0 31 -57 73 -94 70 -22 -2 -31 1 -31 12 0 10 12 16 33 18
36 4 54 28 31 43 -25 16 -67 10 -93 -13z"/>
<path d="M4307 1759 c-32 -150 -35 -134 23 -147 79 -18 100 -16 100 11 0 19
-7 25 -42 33 -60 13 -59 40 0 35 41 -2 43 -1 40 21 -2 18 -10 24 -35 26 -26 3
-33 8 -33 24 0 18 4 20 33 13 54 -12 61 -11 65 9 6 27 -7 34 -74 41 l-61 7
-16 -73z"/>
<path d="M4515 1789 c-2 -8 -11 -54 -19 -104 -12 -70 -13 -91 -3 -97 28 -18
47 -1 47 43 0 32 16 21 33 -21 12 -32 20 -40 41 -40 26 0 36 23 16 35 -16 10
-11 41 10 60 29 26 27 90 -2 109 -34 22 -117 32 -123 15z m83 -48 c21 -13 10
-46 -16 -49 -24 -4 -38 18 -28 43 6 17 24 19 44 6z"/>
<path d="M5561 1753 c-25 -92 -40 -167 -35 -175 10 -15 43 -8 54 12 16 30 54
36 78 12 19 -19 62 -21 62 -4 0 4 -25 48 -56 99 -64 105 -87 118 -103 56z m57
-76 c2 -10 -3 -17 -12 -17 -10 0 -16 9 -16 21 0 24 23 21 28 -4z"/>
<path d="M4727 1744 c-4 -16 -9 -64 -13 -106 l-6 -78 30 0 c28 0 31 3 34 38
l3 37 22 -41 c23 -43 43 -57 68 -48 12 5 11 12 -5 45 -20 38 -20 38 0 49 15 8
20 21 20 49 0 50 -22 69 -92 77 -56 6 -56 6 -61 -22z m101 -51 c3 -17 -2 -23
-15 -23 -25 0 -43 19 -36 37 9 22 48 11 51 -14z"/>
<path d="M5298 1748 c-8 -13 -18 -32 -22 -43 l-7 -20 -15 20 c-8 11 -20 28
-27 39 -9 13 -19 17 -35 12 -12 -4 -22 -11 -22 -14 0 -4 18 -31 40 -61 31 -41
40 -62 40 -92 0 -37 2 -39 30 -39 29 0 30 1 29 49 -1 33 7 67 24 104 21 47 23
56 10 61 -24 10 -30 7 -45 -16z"/>
<path d="M4943 1747 c-11 -18 9 -47 33 -47 23 0 24 -2 24 -80 l0 -80 30 0 30
0 0 86 c0 75 2 85 16 80 19 -7 44 10 44 29 0 10 -24 14 -86 17 -47 2 -88 0
-91 -5z"/>
<path d="M6320 1620 c-23 -7 -23 -8 -3 -9 12 -1 25 4 28 9 3 6 5 10 3 9 -2 -1
-14 -5 -28 -9z"/>
<path d="M4165 1526 c17 -7 53 -16 80 -19 l50 -5 -44 14 c-25 7 -61 16 -80 19
l-36 5 30 -14z"/>
<path d="M6020 1530 c-21 -7 -21 -8 -5 -9 11 0 27 4 35 9 18 11 5 11 -30 0z"/>
<path d="M5958 1513 c6 -2 18 -2 25 0 6 3 1 5 -13 5 -14 0 -19 -2 -12 -5z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 40 KiB

View File

@ -0,0 +1,28 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:unit2/utils/global.dart';
import '../../../model/offline/offlane_modules.dart';
import '../../../model/offline/offline_profile.dart';
part 'offline_event.dart';
part 'offline_state.dart';
class OfflineBloc extends Bloc<OfflineEvent, OfflineState> {
OfflineBloc() : super(OfflineInitial()) {
on<SwitchOffline>((event, emit) async {
try {
List<dynamic> modules = await OFFLINE!.get('modules');
List<OfflineModules> offlineModules = [];
for (var module in modules) {
offlineModules.add(module);
}
OfflineProfile offlineProfile = await OFFLINE!.get('offline_profile');
emit(OfflineModeState(
offlineModules: offlineModules, offlineProfile: offlineProfile));
} catch (e) {
emit(OfflineErrorState(message: e.toString()));
}
});
}
}

View File

@ -0,0 +1,13 @@
part of 'offline_bloc.dart';
class OfflineEvent extends Equatable {
const OfflineEvent();
@override
List<Object> get props => [];
}
class SwitchOffline extends OfflineEvent {
@override
List<Object> get props => [];
}

View File

@ -0,0 +1,26 @@
part of 'offline_bloc.dart';
class OfflineState extends Equatable {
const OfflineState();
@override
List<Object> get props => [];
}
class OfflineInitial extends OfflineState {}
class OfflineModeState extends OfflineState {
final OfflineProfile offlineProfile;
final List<OfflineModules> offlineModules;
const OfflineModeState(
{required this.offlineModules, required this.offlineProfile});
@override
List<Object> get props => [offlineProfile, offlineModules];
}
class OfflineLoadingState extends OfflineState {}
class OfflineErrorState extends OfflineState {
final String message;
const OfflineErrorState({required this.message});
}

View File

@ -0,0 +1,35 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../../../model/passo/barangay.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'barangay_admin_event.dart';
part 'barangay_admin_state.dart';
class BarangayAdminBloc extends Bloc<BarangayAdminEvent, BarangayAdminState> {
BarangayAdminBloc() : super(BarangayAdminInitial()) {
List<Brgy> brgy = [];
on<LoadBarangay>((event, emit) async {
brgy = await SQLServices.instance.readAllBarangay();
emit(BarangayLoaded(brgy: brgy));
});
on<LoadBarangayInMunicipality>((event, emit) async {
brgy = await SQLServices.instance
.readBrgyInSelectedMunicipality(event.cityCode);
emit(BarangayLoaded(brgy: brgy));
});
on<AddBarangay>((event, emit) async {
await SQLServices.instance.createBarangay(
Brgy(
id: event.id,
barangayId: event.barangayId,
barangayCode: event.barangayCode,
cityCode: event.cityCode,
barangayDescription: event.barangayDescription),
);
});
}
}

View File

@ -0,0 +1,48 @@
part of 'barangay_admin_bloc.dart';
class BarangayAdminEvent extends Equatable {
const BarangayAdminEvent();
@override
List<Object> get props => [];
}
class AddBarangay extends BarangayAdminEvent {
final int id;
final int barangayId;
final String barangayCode;
final String cityCode;
final String barangayDescription;
const AddBarangay({
required this.id,
required this.barangayId,
required this.barangayCode,
required this.cityCode,
required this.barangayDescription,
});
@override
List<Object> get props => [
id,
barangayId,
barangayCode,
cityCode,
barangayDescription,
];
}
class LoadBarangay extends BarangayAdminEvent {
const LoadBarangay();
@override
List<Object> get props => [];
}
class LoadBarangayInMunicipality extends BarangayAdminEvent {
final String cityCode;
const LoadBarangayInMunicipality({required this.cityCode});
@override
List<Object> get props => [cityCode];
}

View File

@ -0,0 +1,21 @@
part of 'barangay_admin_bloc.dart';
class BarangayAdminState extends Equatable {
const BarangayAdminState();
@override
List<Object> get props => [];
}
class BarangayAdminInitial extends BarangayAdminState {
@override
List<Object> get props => [];
}
class BarangayLoaded extends BarangayAdminState {
final List<Brgy> brgy;
const BarangayLoaded({required this.brgy});
@override
List<Object> get props => [brgy];
}

View File

@ -0,0 +1,42 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../../../model/passo/class_components _offline.dart';
import '../../../../../model/passo/class_components.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'class_components_admin_event.dart';
part 'class_components_admin_state.dart';
class ClassComponentsAdminBloc
extends Bloc<ClassComponentsAdminEvent, ClassComponentsAdminState> {
ClassComponentsAdminBloc() : super(ClassComponentsAdminInitial()) {
List<ClassComponentsOffline> classes = [];
on<LoadClassComponents>((event, emit) async {
classes = await SQLServices.instance.readAllClassComponents();
emit(ClassComponentsAdminLoaded(classes: classes));
});
on<AddClassComponents>((event, emit) async {
await SQLServices.instance.createClassComponents(
ClassComponentsOffline(
componentName: event.componentName,
minBaseUnitvalPercent: event.minBaseUnitvalPercent,
maxBaseUnitvalPercent: event.maxBaseUnitvalPercent,
minUnitvalSqrmtr: event.minUnitvalSqrmtr,
maxUnitvalSqrmtr: event.maxUnitvalSqrmtr,
minAddBaseunitval: event.minAddBaseunitval,
maxAddBaseunitval: event.maxAddBaseunitval,
minDeductBaserate: event.minDeductBaserate,
maxDeductBaserate: event.maxDeductBaserate,
minLinearMeter: event.minLinearMeter,
maxLinearMeter: event.maxLinearMeter,
minSpacing: event.minSpacing,
maxSpacing: event.maxSpacing,
roughFinish: event.roughFinish,
highFinish: event.highFinish,
withoutBucc: event.withoutBucc),
);
});
}
}

View File

@ -0,0 +1,73 @@
part of 'class_components_admin_bloc.dart';
class ClassComponentsAdminEvent extends Equatable {
const ClassComponentsAdminEvent();
@override
List<Object> get props => [];
}
class AddClassComponents extends ClassComponentsAdminEvent {
final String componentName;
final String minBaseUnitvalPercent;
final String maxBaseUnitvalPercent;
final String minUnitvalSqrmtr;
final String maxUnitvalSqrmtr;
final String minAddBaseunitval;
final String maxAddBaseunitval;
final String minDeductBaserate;
final String maxDeductBaserate;
final String minLinearMeter;
final String maxLinearMeter;
final String minSpacing;
final String maxSpacing;
final String roughFinish;
final String highFinish;
final int withoutBucc;
const AddClassComponents({
required this.componentName,
required this.minBaseUnitvalPercent,
required this.maxBaseUnitvalPercent,
required this.minUnitvalSqrmtr,
required this.maxUnitvalSqrmtr,
required this.minAddBaseunitval,
required this.maxAddBaseunitval,
required this.minDeductBaserate,
required this.maxDeductBaserate,
required this.minLinearMeter,
required this.maxLinearMeter,
required this.minSpacing,
required this.maxSpacing,
required this.roughFinish,
required this.highFinish,
required this.withoutBucc,
});
@override
List<Object> get props => [
componentName,
minBaseUnitvalPercent,
maxBaseUnitvalPercent,
minUnitvalSqrmtr,
maxUnitvalSqrmtr,
minAddBaseunitval,
maxAddBaseunitval,
minDeductBaserate,
maxDeductBaserate,
minLinearMeter,
maxLinearMeter,
minSpacing,
maxSpacing,
roughFinish,
highFinish,
withoutBucc,
];
}
class LoadClassComponents extends ClassComponentsAdminEvent {
const LoadClassComponents();
@override
List<Object> get props => [];
}

View File

@ -0,0 +1,21 @@
part of 'class_components_admin_bloc.dart';
class ClassComponentsAdminState extends Equatable {
const ClassComponentsAdminState();
@override
List<Object> get props => [];
}
class ClassComponentsAdminInitial extends ClassComponentsAdminState {
@override
List<Object> get props => [];
}
class ClassComponentsAdminLoaded extends ClassComponentsAdminState {
final List<ClassComponentsOffline> classes;
const ClassComponentsAdminLoaded({required this.classes});
@override
List<Object> get props => [classes];
}

View File

@ -0,0 +1,27 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:unit2/model/passo/land_classification.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'land_classification_event.dart';
part 'land_classification_state.dart';
class LandClassificationBloc
extends Bloc<LandClassificationEvent, LandClassificationState> {
LandClassificationBloc() : super(LandClassificationInitial()) {
List<LandClassification> landClassification = [];
on<LoadLandClassification>((event, emit) async {
landClassification =
await SQLServices.instance.readAllLandClassification();
emit(LandClassificationLoaded(landClassification: landClassification));
});
on<AddLandClassification>((event, emit) async {
await SQLServices.instance.createLandClassification(LandClassification(
id: event.id,
classificationCode: event.classificationCode,
description: event.description));
});
}
}

View File

@ -0,0 +1,34 @@
part of 'land_classification_bloc.dart';
class LandClassificationEvent extends Equatable {
const LandClassificationEvent();
@override
List<Object> get props => [];
}
class AddLandClassification extends LandClassificationEvent {
final int id;
final String classificationCode;
final String description;
const AddLandClassification({
required this.id,
required this.classificationCode,
required this.description,
});
@override
List<Object> get props => [
id,
classificationCode,
description,
];
}
class LoadLandClassification extends LandClassificationEvent {
const LoadLandClassification();
@override
List<Object> get props => [];
}

View File

@ -0,0 +1,18 @@
part of 'land_classification_bloc.dart';
class LandClassificationState extends Equatable {
const LandClassificationState();
@override
List<Object> get props => [];
}
class LandClassificationInitial extends LandClassificationState {}
class LandClassificationLoaded extends LandClassificationState {
final List<LandClassification> landClassification;
const LandClassificationLoaded({required this.landClassification});
@override
List<Object> get props => [landClassification];
}

View File

@ -0,0 +1,39 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../../../model/passo/land_subclassification.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'land_subclassification_event.dart';
part 'land_subclassification_state.dart';
class LandSubclassificationBloc
extends Bloc<LandSubclassificationEvent, LandSubclassificationState> {
LandSubclassificationBloc() : super(LandSubclassificationInitial()) {
List<LandSubClassification> landSubClassification = [];
on<LoadLandSubClassification>((event, emit) async {
landSubClassification =
await SQLServices.instance.readAllLandSubClassification();
emit(LandSubClassificationLoaded(
landSubClassification: landSubClassification));
});
on<LoadSpecificLandSubClassification>((event, emit) async {
landSubClassification = await SQLServices.instance
.readSpecificLandSubClassification(event.cityCode, event.classCode);
emit(LandSubClassificationLoaded(
landSubClassification: landSubClassification));
});
on<AddLandSubClassification>((event, emit) async {
await SQLServices.instance.createLandSubClassification(
LandSubClassification(
id: event.id,
classificationId: event.classificationId,
cityCode: event.cityCode,
subclassCode: event.subclassCode,
subclassDescription: event.subclassDescription,
baseUnitMarketval: event.baseUnitMarketval));
});
}
}

View File

@ -0,0 +1,54 @@
part of 'land_subclassification_bloc.dart';
class LandSubclassificationEvent extends Equatable {
const LandSubclassificationEvent();
@override
List<Object> get props => [];
}
class AddLandSubClassification extends LandSubclassificationEvent {
final int id;
final int classificationId;
final String cityCode;
final String subclassCode;
final String subclassDescription;
final String baseUnitMarketval;
const AddLandSubClassification({
required this.id,
required this.classificationId,
required this.cityCode,
required this.subclassCode,
required this.subclassDescription,
required this.baseUnitMarketval,
});
@override
List<Object> get props => [
id,
classificationId,
cityCode,
subclassCode,
subclassDescription,
baseUnitMarketval,
];
}
class LoadLandSubClassification extends LandSubclassificationEvent {
const LoadLandSubClassification();
@override
List<Object> get props => [];
}
class LoadSpecificLandSubClassification extends LandSubclassificationEvent {
final String cityCode;
final int classCode;
const LoadSpecificLandSubClassification(
{required this.cityCode, required this.classCode});
@override
List<Object> get props => [cityCode, classCode];
}

View File

@ -0,0 +1,18 @@
part of 'land_subclassification_bloc.dart';
class LandSubclassificationState extends Equatable {
const LandSubclassificationState();
@override
List<Object> get props => [];
}
class LandSubclassificationInitial extends LandSubclassificationState {}
class LandSubClassificationLoaded extends LandSubclassificationState {
final List<LandSubClassification> landSubClassification;
const LandSubClassificationLoaded({required this.landSubClassification});
@override
List<Object> get props => [landSubClassification];
}

View File

@ -0,0 +1,27 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:unit2/model/passo/memoranda.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'memoranda_admin_event.dart';
part 'memoranda_admin_state.dart';
class MemorandaAdminBloc
extends Bloc<MemorandaAdminEvent, MemorandaAdminState> {
MemorandaAdminBloc() : super(MemorandaAdminInitial()) {
List<Memoranda> memo = [];
on<LoadMemoranda>((event, emit) async {
memo = await SQLServices.instance.readAllMemoranda();
emit(MemorandaLoaded(memo: memo));
});
on<AddMemoranda>((event, emit) async {
await SQLServices.instance.createMemoranda(Memoranda(
id: event.id,
code: event.code,
memoranda: event.memoranda,
));
});
}
}

View File

@ -0,0 +1,34 @@
part of 'memoranda_admin_bloc.dart';
class MemorandaAdminEvent extends Equatable {
const MemorandaAdminEvent();
@override
List<Object> get props => [];
}
class AddMemoranda extends MemorandaAdminEvent {
final int id;
final String code;
final String memoranda;
const AddMemoranda({
required this.id,
required this.code,
required this.memoranda,
});
@override
List<Object> get props => [
id,
code,
memoranda,
];
}
class LoadMemoranda extends MemorandaAdminEvent {
const LoadMemoranda();
@override
List<Object> get props => [];
}

View File

@ -0,0 +1,21 @@
part of 'memoranda_admin_bloc.dart';
class MemorandaAdminState extends Equatable {
const MemorandaAdminState();
@override
List<Object> get props => [];
}
class MemorandaAdminInitial extends MemorandaAdminState {
@override
List<Object> get props => [];
}
class MemorandaLoaded extends MemorandaAdminState {
final List<Memoranda> memo;
const MemorandaLoaded({required this.memo});
@override
List<Object> get props => [memo];
}

View File

@ -0,0 +1,52 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:unit2/model/passo/city.dart';
import 'package:unit2/sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
import '../../../../../sevices/offline/offline_passo/admin/api_services/municipalities_api_services.dart';
part 'municipalities_admin_event.dart';
part 'municipalities_admin_state.dart';
class MunicipalitiesAdminBloc
extends Bloc<MunicipalitiesAdminEvent, MunicipalitiesAdminState> {
MunicipalitiesAdminBloc() : super(MunicipalitiesAdminInitial()) {
List<City> city = [];
on<LoadMunicipalities>((event, emit) async {
city = await SQLServices.instance.readAllMunicipalities();
emit(MunicipalitiesLoaded(city: city));
});
// on<MunicipalitiesSyncToDevice>((event, emit) async {
// try {
// final result =
// await MunicipalityAdminApiServices.instance.fetch();
// // Assuming result is a List of JSON objects, convert them to City objects.
// final cities =
// result.map((json) => City.fromJson(json)).toList();
// // Loop through the list of City objects and insert them into the local database.
// for (City city in cities) {
// print(city.cityDescription);
// print(city.cityCode);
// await SQLServices.instance.createMunicipalities(city);
// }
// } catch (e) {
// // Handle any errors that might occur during the API call or database insertion.
// print("Error: $e");
// }
// // emit(const LoadMunicipalities());
// });
on<AddMunicipality>((event, emit) async {
await SQLServices.instance.createMunicipalities(
City(
id: event.id,
cityCode: event.cityCode,
cityDescription: event.cityDescription,
),
);
});
}
}

View File

@ -0,0 +1,41 @@
part of 'municipalities_admin_bloc.dart';
class MunicipalitiesAdminEvent extends Equatable {
const MunicipalitiesAdminEvent();
@override
List<Object> get props => [];
}
class AddMunicipality extends MunicipalitiesAdminEvent {
final int id;
final String cityCode;
final String cityDescription;
const AddMunicipality({
required this.id,
required this.cityCode,
required this.cityDescription,
});
@override
List<Object> get props => [
id,
cityCode,
cityDescription,
];
}
class LoadMunicipalities extends MunicipalitiesAdminEvent {
const LoadMunicipalities();
@override
List<Object> get props => [];
}
class MunicipalitiesSyncToDevice extends MunicipalitiesAdminEvent {
const MunicipalitiesSyncToDevice();
@override
List<Object> get props => [];
}

View File

@ -0,0 +1,21 @@
part of 'municipalities_admin_bloc.dart';
class MunicipalitiesAdminState extends Equatable {
const MunicipalitiesAdminState();
@override
List<Object> get props => [];
}
class MunicipalitiesAdminInitial extends MunicipalitiesAdminState {
@override
List<Object> get props => [];
}
class MunicipalitiesLoaded extends MunicipalitiesAdminState {
final List<City> city;
const MunicipalitiesLoaded({required this.city});
@override
List<Object> get props => [city];
}

View File

@ -0,0 +1,32 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../../../model/passo/signatories.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'signatories_admin_event.dart';
part 'signatories_admin_state.dart';
class SignatoriesAdminBloc
extends Bloc<SignatoriesAdminEvent, SignatoriesAdminState> {
SignatoriesAdminBloc() : super(SignatoriesAdminInitial()) {
List<Signatories> signatories = [];
on<LoadSignatories>((event, emit) async {
signatories = await SQLServices.instance.readAllSignatories();
emit(SignatoriesLoaded(signatories: signatories));
});
on<AddSignatories>((event, emit) async {
await SQLServices.instance.createSignatories(Signatories(
id: event.id,
signatoryId: event.signatoryId,
firstname: event.firstname,
middlename: event.middlename,
lastname: event.lastname,
designation: event.designation,
// status: event.status
// genCode: event.genCode
));
});
}
}

View File

@ -0,0 +1,49 @@
part of 'signatories_admin_bloc.dart';
class SignatoriesAdminEvent extends Equatable {
const SignatoriesAdminEvent();
@override
List<Object> get props => [];
}
class AddSignatories extends SignatoriesAdminEvent {
final int id;
final int signatoryId;
final String firstname;
final String middlename;
final String lastname;
final String genCode;
final String designation;
// final String status;
const AddSignatories({
required this.id,
required this.signatoryId,
required this.firstname,
required this.middlename,
required this.lastname,
required this.genCode,
required this.designation,
// required this.status
});
@override
List<Object> get props => [
id,
signatoryId,
firstname,
middlename,
lastname,
genCode,
designation,
// status
];
}
class LoadSignatories extends SignatoriesAdminEvent {
const LoadSignatories();
@override
List<Object> get props => [];
}

View File

@ -0,0 +1,21 @@
part of 'signatories_admin_bloc.dart';
class SignatoriesAdminState extends Equatable {
const SignatoriesAdminState();
@override
List<Object> get props => [];
}
class SignatoriesAdminInitial extends SignatoriesAdminState {
@override
List<Object> get props => [];
}
class SignatoriesLoaded extends SignatoriesAdminState {
final List<Signatories> signatories;
const SignatoriesLoaded({required this.signatories});
@override
List<Object> get props => [signatories];
}

View File

@ -0,0 +1,27 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../../../model/passo/trees_improvements.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'trees_improvements_event.dart';
part 'trees_improvements_state.dart';
class TreesImprovementsBloc
extends Bloc<TreesImprovementsEvent, TreesImprovementsState> {
TreesImprovementsBloc() : super(TreesImprovementsInitial()) {
List<TreesImprovements> treesImprovements = [];
on<LoadTreesImprovements>((event, emit) async {
treesImprovements = await SQLServices.instance.readAllTreesImprovements();
emit(TreesImprovementsLoaded(treesImprovements: treesImprovements));
});
on<AddTreesImprovements>((event, emit) async {
await SQLServices.instance.createTreesImprovements(TreesImprovements(
id: event.id,
improvement: event.improvement,
pricePerTree: event.pricePerTree,
subclassCode: event.subclassCode));
});
}
}

View File

@ -0,0 +1,37 @@
part of 'trees_improvements_bloc.dart';
class TreesImprovementsEvent extends Equatable {
const TreesImprovementsEvent();
@override
List<Object> get props => [];
}
class AddTreesImprovements extends TreesImprovementsEvent {
final int id;
final String improvement;
final String pricePerTree;
final dynamic subclassCode;
const AddTreesImprovements({
required this.id,
required this.improvement,
required this.pricePerTree,
required this.subclassCode,
});
@override
List<Object> get props => [
id,
improvement,
pricePerTree,
subclassCode,
];
}
class LoadTreesImprovements extends TreesImprovementsEvent {
const LoadTreesImprovements();
@override
List<Object> get props => [];
}

View File

@ -0,0 +1,18 @@
part of 'trees_improvements_bloc.dart';
class TreesImprovementsState extends Equatable {
const TreesImprovementsState();
@override
List<Object> get props => [];
}
class TreesImprovementsInitial extends TreesImprovementsState {}
class TreesImprovementsLoaded extends TreesImprovementsState {
final List<TreesImprovements> treesImprovements;
const TreesImprovementsLoaded({required this.treesImprovements});
@override
List<Object> get props => [treesImprovements];
}

View File

@ -0,0 +1,27 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../../../model/passo/type_of_location.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'type_of_location_event.dart';
part 'type_of_location_state.dart';
class TypeOfLocationBloc
extends Bloc<TypeOfLocationEvent, TypeOfLocationState> {
TypeOfLocationBloc() : super(TypeOfLocationInitial()) {
List<TypeOfLocation> typeOfLocation = [];
on<LoadTypeOfLocation>((event, emit) async {
typeOfLocation = await SQLServices.instance.readAllTypeOfLocation();
emit(TypeOfLocationLoaded(typeOfLocation: typeOfLocation));
});
on<AddTypeOfLocation>((event, emit) async {
await SQLServices.instance.createTypeOfLocation(TypeOfLocation(
id: event.id,
distanceKm: event.distanceKm,
allRoadTypes: event.allRoadTypes,
localTradingCenter: event.localTradingCenter));
});
}
}

View File

@ -0,0 +1,37 @@
part of 'type_of_location_bloc.dart';
class TypeOfLocationEvent extends Equatable {
const TypeOfLocationEvent();
@override
List<Object> get props => [];
}
class AddTypeOfLocation extends TypeOfLocationEvent {
final int id;
final String distanceKm;
final String allRoadTypes;
final String localTradingCenter;
const AddTypeOfLocation({
required this.id,
required this.distanceKm,
required this.allRoadTypes,
required this.localTradingCenter,
});
@override
List<Object> get props => [
id,
distanceKm,
allRoadTypes,
localTradingCenter,
];
}
class LoadTypeOfLocation extends TypeOfLocationEvent {
const LoadTypeOfLocation();
@override
List<Object> get props => [];
}

View File

@ -0,0 +1,18 @@
part of 'type_of_location_bloc.dart';
class TypeOfLocationState extends Equatable {
const TypeOfLocationState();
@override
List<Object> get props => [];
}
class TypeOfLocationInitial extends TypeOfLocationState {}
class TypeOfLocationLoaded extends TypeOfLocationState {
final List<TypeOfLocation> typeOfLocation;
const TypeOfLocationLoaded({required this.typeOfLocation});
@override
List<Object> get props => [typeOfLocation];
}

View File

@ -0,0 +1,26 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../../../model/passo/type_of_road.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'type_of_road_event.dart';
part 'type_of_road_state.dart';
class TypeOfRoadBloc extends Bloc<TypeOfRoadEvent, TypeOfRoadState> {
TypeOfRoadBloc() : super(TypeOfRoadInitial()) {
List<TypeOfRoad> typeOfRoad = [];
on<LoadTypeOfRoad>((event, emit) async {
typeOfRoad = await SQLServices.instance.readAllTypeOfRoad();
emit(TypeOfRoadLoaded(typeOfRoad: typeOfRoad));
});
on<AddTypeOfRoad>((event, emit) async {
await SQLServices.instance.createTypeOfRoad(TypeOfRoad(
id: event.id,
roadType: event.roadType,
deduction: event.deduction,
));
});
}
}

View File

@ -0,0 +1,34 @@
part of 'type_of_road_bloc.dart';
class TypeOfRoadEvent extends Equatable {
const TypeOfRoadEvent();
@override
List<Object> get props => [];
}
class AddTypeOfRoad extends TypeOfRoadEvent {
final int id;
final String roadType;
final String deduction;
const AddTypeOfRoad({
required this.id,
required this.roadType,
required this.deduction,
});
@override
List<Object> get props => [
id,
roadType,
deduction,
];
}
class LoadTypeOfRoad extends TypeOfRoadEvent {
const LoadTypeOfRoad();
@override
List<Object> get props => [];
}

View File

@ -0,0 +1,18 @@
part of 'type_of_road_bloc.dart';
class TypeOfRoadState extends Equatable {
const TypeOfRoadState();
@override
List<Object> get props => [];
}
class TypeOfRoadInitial extends TypeOfRoadState {}
class TypeOfRoadLoaded extends TypeOfRoadState {
final List<TypeOfRoad> typeOfRoad;
const TypeOfRoadLoaded({required this.typeOfRoad});
@override
List<Object> get props => [typeOfRoad];
}

View File

@ -0,0 +1,30 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../../../model/passo/unit_construct.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'unit_construction_admin_event.dart';
part 'unit_construction_admin_state.dart';
class UnitConstructionAdminBloc
extends Bloc<UnitConstructionAdminEvent, UnitConstructionAdminState> {
UnitConstructionAdminBloc() : super(UnitConstructionAdminInitial()) {
List<UnitConstruct> unit = [];
on<LoadUnitConstruct>((event, emit) async {
unit = await SQLServices.instance.readAllUnitConstruct();
emit(UnitConstructLoaded(unit: unit));
});
on<AddUnitConstruct>((event, emit) async {
await SQLServices.instance.createUnitConstruction(
UnitConstruct(
id: event.id,
bldgType: event.bldgType,
building: event.building,
unitValue: event.unitValue,
genCode: event.genCode),
);
});
}
}

View File

@ -0,0 +1,34 @@
part of 'unit_construction_admin_bloc.dart';
class UnitConstructionAdminEvent extends Equatable {
const UnitConstructionAdminEvent();
@override
List<Object> get props => [];
}
class AddUnitConstruct extends UnitConstructionAdminEvent {
final int id;
final String bldgType;
final String building;
final String unitValue;
final String genCode;
const AddUnitConstruct({
required this.id,
required this.bldgType,
required this.building,
required this.unitValue,
required this.genCode,
});
@override
List<Object> get props => [id, bldgType, building, unitValue, genCode];
}
class LoadUnitConstruct extends UnitConstructionAdminEvent {
const LoadUnitConstruct();
@override
List<Object> get props => [];
}

View File

@ -0,0 +1,21 @@
part of 'unit_construction_admin_bloc.dart';
class UnitConstructionAdminState extends Equatable {
const UnitConstructionAdminState();
@override
List<Object> get props => [];
}
class UnitConstructionAdminInitial extends UnitConstructionAdminState {
@override
List<Object> get props => [];
}
class UnitConstructLoaded extends UnitConstructionAdminState {
final List<UnitConstruct> unit;
const UnitConstructLoaded({required this.unit});
@override
List<Object> get props => [unit];
}

View File

@ -0,0 +1,31 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../../../model/passo/land_value_adjustment.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'value_adjustments_event.dart';
part 'value_adjustments_state.dart';
class ValueAdjustmentsBloc
extends Bloc<ValueAdjustmentsEvent, ValueAdjustmentsState> {
ValueAdjustmentsBloc() : super(ValueAdjustmentsInitial()) {
List<ValueAdjustments> valueAdjustments = [];
on<LoadValueAdjustments>((event, emit) async {
valueAdjustments = await SQLServices.instance.readAllValueAdjustments();
emit(ValueAdjustmentsLoaded(valueAdjustments: valueAdjustments));
});
on<AddValueAdjustments>((event, emit) async {
await SQLServices.instance.createValueAdjustments(ValueAdjustments(
id: event.id,
landapprDetailsId: event.landapprDetailsId,
baseMarketval: event.baseMarketval,
adjustmentFactors: event.adjustmentFactors,
adjustment: event.adjustment,
valueAdjustment: event.valueAdjustment,
marketValue: event.marketValue,
));
});
}
}

View File

@ -0,0 +1,46 @@
part of 'value_adjustments_bloc.dart';
class ValueAdjustmentsEvent extends Equatable {
const ValueAdjustmentsEvent();
@override
List<Object> get props => [];
}
class AddValueAdjustments extends ValueAdjustmentsEvent {
final int id;
final int landapprDetailsId;
final String baseMarketval;
final String adjustmentFactors;
final String adjustment;
final String valueAdjustment;
final String marketValue;
const AddValueAdjustments({
required this.id,
required this.landapprDetailsId,
required this.baseMarketval,
required this.adjustmentFactors,
required this.adjustment,
required this.valueAdjustment,
required this.marketValue,
});
@override
List<Object> get props => [
id,
landapprDetailsId,
baseMarketval,
adjustmentFactors,
adjustment,
valueAdjustment,
marketValue,
];
}
class LoadValueAdjustments extends ValueAdjustmentsEvent {
const LoadValueAdjustments();
@override
List<Object> get props => [];
}

View File

@ -0,0 +1,18 @@
part of 'value_adjustments_bloc.dart';
class ValueAdjustmentsState extends Equatable {
const ValueAdjustmentsState();
@override
List<Object> get props => [];
}
class ValueAdjustmentsInitial extends ValueAdjustmentsState {}
class ValueAdjustmentsLoaded extends ValueAdjustmentsState {
final List<ValueAdjustments> valueAdjustments;
const ValueAdjustmentsLoaded({required this.valueAdjustments});
@override
List<Object> get props => [valueAdjustments];
}

View File

@ -0,0 +1,84 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:unit2/bloc/passo/bulding/additional_item/additional_item_bloc.dart';
import 'package:unit2/sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
import '../../../../../model/passo/additional_items.dart';
import '../../../../../sevices/offline/offline_passo/building/property_owner_info_service.dart';
part 'additional_items_offline_event.dart';
part 'additional_items_offline_state.dart';
class AdditionalItemsOfflineBloc
extends Bloc<AdditionalItemsOfflineEvent, AdditionalItemsOfflineState> {
AdditionalItemsOfflineBloc() : super(AdditionalItemsOfflineInitial()) {
List<AdditionalItems> addItems = [];
on<LoadAdditionalItems>((event, emit) async {
emit(AdditionalItemsOfflineInitial());
try {
emit(AdditionalItemsLoaded(addItem: addItems));
} catch (e) {
emit(AdditionalItemsErrorState(e.toString()));
}
});
on<LoadAdditionalItemsEdit>((event, emit) async {
emit(AdditionalItemsOfflineInitial());
List<Map<String, dynamic>> result =
await SQLServices.instance.getAdditionalItems(event.id);
if (result.isNotEmpty) {
addItems = result.map((map) => AdditionalItems.fromJson(map)).toList();
emit(AdditionalItemsLoaded(addItem: addItems));
} else {
print('No data found.');
}
});
on<AddAdditionalItems>((event, emit) async {
try {
AdditionalItems item = await SQLServices.instance.createAdditionalItems(
AdditionalItems(
id: event.id,
bldgapprDetailsId: event.bldgapprDetailsId,
classId: event.classId,
className: event.className,
structType: event.structType,
unitValue: event.unitValue,
baseUnitValue: event.baseUnitValue,
area: event.area,
marketValue: event.marketValue,
depreciationRate: event.depreciationRate,
adjustedMarketVal: event.adjustedMarketVal,
amtDepreciation: event.amtDepreciation,
painted: event.painted == true ? '1' : '0',
secondhand: event.secondhand == true ? '1' : '0',
paintedUnitval: event.paintedUnitval,
secondhandUnitval: event.secondhandUnitval,
actualUse: event.actualUse,
genCode: event.genCode));
print(item.toJson());
addItems.add(item);
emit(AdditionalItemsLoaded(addItem: addItems));
} catch (e) {
print(e.toString());
}
});
on<ShowAdditionalItems>((event, emit) async {
emit(ShowAddItemsScreen());
});
on<FetchAdditionalItems>((event, emit) async {
addItems = await SQLServices.instance.readAdditionalItems();
emit(AdditionalItemsLoaded(addItem: addItems));
});
on<DeleteAdditionalItems>((event, emit) async {
addItems
.removeWhere(((AdditionalItems element) => element.id == event.id));
await SQLServices.instance.deleteAdditionalItems(id: event.id);
emit(const AdditionalItemsDeletedState(success: true));
});
}
}

View File

@ -0,0 +1,134 @@
part of 'additional_items_offline_bloc.dart';
class AdditionalItemsOfflineEvent extends Equatable {
const AdditionalItemsOfflineEvent();
@override
List<Object> get props => [];
}
class LoadAdditionalItems extends AdditionalItemsOfflineEvent {
final List<AdditionalItems> items;
const LoadAdditionalItems({this.items = const <AdditionalItems>[]});
@override
List<Object> get props => [items];
}
class LoadAdditionalItemsEdit extends AdditionalItemsOfflineEvent {
final List<AdditionalItems> items;
final int? id;
const LoadAdditionalItemsEdit({required this.items, this.id});
@override
List<Object> get props => [items];
}
class AddAdditionalItems extends AdditionalItemsOfflineEvent {
final int id;
final int bldgapprDetailsId;
final int classId;
final String assessedById;
final String assessedByName;
final String dateCreated;
final String dateModified;
final String className;
final String structType;
final dynamic unitValue;
final dynamic baseUnitValue;
final dynamic area;
final dynamic marketValue;
final dynamic depreciationRate;
final dynamic adjustedMarketVal;
final dynamic amtDepreciation;
final bool painted;
final bool secondhand;
final dynamic paintedUnitval;
final dynamic secondhandUnitval;
final String actualUse;
final String genCode;
const AddAdditionalItems({
required this.id,
required this.bldgapprDetailsId,
required this.classId,
required this.assessedById,
required this.assessedByName,
required this.dateCreated,
required this.dateModified,
required this.className,
required this.structType,
required this.unitValue,
required this.baseUnitValue,
required this.area,
required this.marketValue,
required this.depreciationRate,
required this.adjustedMarketVal,
required this.amtDepreciation,
required this.painted,
required this.secondhand,
required this.paintedUnitval,
required this.secondhandUnitval,
required this.actualUse,
required this.genCode,
});
@override
List<Object> get props => [
id,
bldgapprDetailsId,
classId,
assessedById,
assessedByName,
dateCreated,
dateModified,
className,
structType,
unitValue,
baseUnitValue,
area,
marketValue,
depreciationRate,
adjustedMarketVal,
amtDepreciation,
painted,
secondhand,
paintedUnitval,
secondhandUnitval,
actualUse,
genCode
];
}
class UpdateAdditionalItems extends AdditionalItemsOfflineEvent {
final AdditionalItems addItems;
const UpdateAdditionalItems({required this.addItems});
@override
List<Object> get props => [addItems];
}
class FetchAdditionalItems extends AdditionalItemsOfflineEvent {
const FetchAdditionalItems();
@override
List<Object> get props => [];
}
class FetchSpecificAdditionalItems extends AdditionalItemsOfflineEvent {
final int id;
const FetchSpecificAdditionalItems({required this.id});
@override
List<Object> get props => [id];
}
class DeleteAdditionalItems extends AdditionalItemsOfflineEvent {
final int id;
const DeleteAdditionalItems({required this.id});
@override
List<Object> get props => [id];
}
class ShowAdditionalItems extends AdditionalItemsOfflineEvent {}

View File

@ -0,0 +1,46 @@
part of 'additional_items_offline_bloc.dart';
class AdditionalItemsOfflineState extends Equatable {
const AdditionalItemsOfflineState();
@override
List<Object> get props => [];
}
class AdditionalItemsOfflineInitial extends AdditionalItemsOfflineState {
@override
List<Object> get props => [];
}
class AdditionalItemsLoaded extends AdditionalItemsOfflineState {
final List<AdditionalItems> addItem;
const AdditionalItemsLoaded({required this.addItem});
@override
List<Object> get props => [addItem];
}
class LoadSpecificAdditionalItems extends AdditionalItemsOfflineState {
final AdditionalItems addItem;
const LoadSpecificAdditionalItems({required this.addItem});
@override
List<Object> get props => [addItem];
}
class ShowAddItemsScreen extends AdditionalItemsOfflineState {}
class AdditionalItemsErrorState extends AdditionalItemsOfflineState {
const AdditionalItemsErrorState(this.error);
final String error;
@override
List<Object> get props => [error];
}
class AdditionalItemsDeletedState extends AdditionalItemsOfflineState {
final bool success;
const AdditionalItemsDeletedState({required this.success});
@override
List<Object> get props => [success];
}

View File

@ -0,0 +1,58 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:unit2/model/passo/property_appraisal.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'bldg_appraisal_offline_event.dart';
part 'bldg_appraisal_offline_state.dart';
class BldgAppraisalOfflineBloc
extends Bloc<BldgAppraisalOfflineEvent, BldgAppraisalOfflineState> {
BldgAppraisalOfflineBloc() : super(BldgAppraisalOfflineInitial()) {
List<PropertyAppraisal> appraisal = [];
on<AddBldgAppraisal>((event, emit) async {
await SQLServices.instance.createBldgAppraisal(PropertyAppraisal(
id: event.id,
bldgapprDetailsId: event.bldgapprDetailsId,
assessedById: event.assessedById,
assessedByName: event.assessedByName,
dateCreated: event.dateCreated,
dateModified: event.dateModified,
unitconstructCost: event.unitconstructCost,
buildingCore: event.buildingCore,
unitconstructSubtotal: event.unitconstructSubtotal,
depreciationRate: event.depreciationRate,
depreciationCost: event.depreciationCost,
costAddItems: event.costAddItems,
addItemsSubtotal: event.addItemsSubtotal,
totalpercentDepreciation: event.totalpercentDepreciation,
marketValue: event.marketValue,
totalArea: event.totalArea,
actualUse: event.actualUse,
));
});
on<FetchSingleBldgAppraisal>((event, emit) async {
List<Map<String, dynamic>> result =
await SQLServices.instance.getBldgAppraisal(event.id);
if (result.isNotEmpty) {
List<PropertyAppraisal> appraisalList =
result.map((map) => PropertyAppraisal.fromJson2(map)).toList();
// Choose a specific element from locationList
PropertyAppraisal firstAppraisal = appraisalList
.first; // You can change this to select a specific item
print('appraisal test result');
print(firstAppraisal.toJson());
emit(SpecificBldgAppraisalLoaded(appraisal: firstAppraisal));
} else {
print('No data found.');
}
});
on<UpdateAppraisal>((event, emit) async {
await SQLServices.instance.updateAppraisal(event.id, event.appraisal);
});
}
}

View File

@ -0,0 +1,89 @@
part of 'bldg_appraisal_offline_bloc.dart';
class BldgAppraisalOfflineEvent extends Equatable {
const BldgAppraisalOfflineEvent();
@override
List<Object> get props => [];
}
class AddBldgAppraisal extends BldgAppraisalOfflineEvent {
final int id;
final int bldgapprDetailsId;
final String assessedById;
final String assessedByName;
final String dateCreated;
final String dateModified;
final String unitconstructCost;
final String buildingCore;
final String unitconstructSubtotal;
final String depreciationRate;
final String depreciationCost;
final String costAddItems;
final String addItemsSubtotal;
final String totalpercentDepreciation;
final String marketValue;
final String totalArea;
final String actualUse;
final String genCode;
const AddBldgAppraisal(
{required this.id,
required this.bldgapprDetailsId,
required this.assessedById,
required this.assessedByName,
required this.dateCreated,
required this.dateModified,
required this.unitconstructCost,
required this.buildingCore,
required this.unitconstructSubtotal,
required this.depreciationRate,
required this.depreciationCost,
required this.costAddItems,
required this.addItemsSubtotal,
required this.totalpercentDepreciation,
required this.marketValue,
required this.totalArea,
required this.actualUse,
required this.genCode});
@override
List<Object> get props => [
id,
bldgapprDetailsId,
assessedById,
assessedByName,
dateCreated,
dateModified,
unitconstructCost,
buildingCore,
unitconstructSubtotal,
depreciationRate,
depreciationCost,
costAddItems,
addItemsSubtotal,
totalpercentDepreciation,
marketValue,
totalArea,
actualUse,
genCode
];
}
class FetchSingleBldgAppraisal extends BldgAppraisalOfflineEvent {
final int id;
const FetchSingleBldgAppraisal({required this.id});
@override
List<Object> get props => [id];
}
class UpdateAppraisal extends BldgAppraisalOfflineEvent {
final PropertyAppraisal appraisal;
final int id;
const UpdateAppraisal({required this.id, required this.appraisal});
@override
List<Object> get props => [id, appraisal];
}

View File

@ -0,0 +1,37 @@
part of 'bldg_appraisal_offline_bloc.dart';
class BldgAppraisalOfflineState extends Equatable {
const BldgAppraisalOfflineState();
@override
List<Object> get props => [];
}
class BldgAppraisalOfflineInitial extends BldgAppraisalOfflineState {
@override
List<Object> get props => [];
}
class BldgAppraisalOfflineLoaded extends BldgAppraisalOfflineState {
final List<PropertyAppraisal> appraisal;
const BldgAppraisalOfflineLoaded({required this.appraisal});
@override
List<Object> get props => [appraisal];
}
class LoadSpecificBldgAppraisalOffline extends BldgAppraisalOfflineState {
final PropertyAppraisal appraisal;
const LoadSpecificBldgAppraisalOffline({required this.appraisal});
@override
List<Object> get props => [appraisal];
}
class SpecificBldgAppraisalLoaded extends BldgAppraisalOfflineState {
final PropertyAppraisal appraisal;
const SpecificBldgAppraisalLoaded({required this.appraisal});
@override
List<Object> get props => [appraisal];
}

View File

@ -0,0 +1,70 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:unit2/model/passo/property_assessment.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'bldg_assessment_offline_event.dart';
part 'bldg_assessment_offline_state.dart';
class BldgAssessmentOfflineBloc
extends Bloc<BldgAssessmentOfflineEvent, BldgAssessmentOfflineState> {
BldgAssessmentOfflineBloc() : super(BldgAssessmentOfflineInitial()) {
List<PropertyAssessment> assessment = [];
on<AddBldgAssessment>((event, emit) async {
await SQLServices.instance.createBldgAssessment(PropertyAssessment(
id: event.id,
bldgapprDetailsId: event.bldgapprDetailsId,
assessedById: event.assessedById,
assessedByName: event.assessedByName,
dateCreated: event.dateCreated,
dateModified: event.dateModified,
actualUse: event.actualUse,
marketValue: event.marketValue,
assessmentLevel: event.assessmentLevel,
assessedValue: event.assessedValue,
taxable: event.taxable,
exempt: event.exempt,
qtr: event.qtr,
yr: event.yr.toString(),
appraisedbyName: event.appraisedbyName,
appraisedbyDate: event.appraisedbyDate,
recommendapprName: event.recommendapprName,
recommendapprDate: event.recommendapprDate,
approvedbyName: event.approvedbyName,
approvedbyDate: event.approvedbyDate,
memoranda: event.memoranda,
swornstatementNo: event.swornstatementNo,
dateReceived: event.dateReceived,
entryDateAssessment: event.entryDateAssessment,
entryDateBy: event.entryDateBy,
note: event.note,
genCode: event.genCode,
appraisedbyDesignation: event.appraisedbyDesignation,
approvedbyDesignation: event.approvedbyDesignation,
recommendapprDesignation: event.recommendapprDesignation));
});
on<FetchSingleBldgAssessment>((event, emit) async {
List<Map<String, dynamic>> result =
await SQLServices.instance.getBldgAssessment(event.id);
if (result.isNotEmpty) {
List<PropertyAssessment> assessmentList =
result.map((map) => PropertyAssessment.fromJson2(map)).toList();
// Choose a specific element from locationList
PropertyAssessment firstAssessment = assessmentList
.first; // You can change this to select a specific item
print('assessment test result');
print(firstAssessment.toJson());
emit(SpecificBldgAssessmentLoaded(assessment: firstAssessment));
} else {
print('No data found.');
}
});
on<UpdateBldgAssessment>((event, emit) async {
await SQLServices.instance.updateAssessment(event.id, event.assessment);
});
}
}

View File

@ -0,0 +1,126 @@
part of 'bldg_assessment_offline_bloc.dart';
class BldgAssessmentOfflineEvent extends Equatable {
const BldgAssessmentOfflineEvent();
@override
List<Object> get props => [];
}
class AddBldgAssessment extends BldgAssessmentOfflineEvent {
final int id;
final int bldgapprDetailsId;
final String assessedById;
final String assessedByName;
final String dateCreated;
final String dateModified;
final String actualUse;
final String marketValue;
final String assessmentLevel;
final String assessedValue;
final String taxable;
final String exempt;
final String qtr;
final int yr;
final String appraisedbyName;
final String appraisedbyDate;
final String recommendapprName;
final String recommendapprDate;
final String approvedbyName;
final String approvedbyDate;
final String memoranda;
final String swornstatementNo;
final String dateReceived;
final String entryDateAssessment;
final String entryDateBy;
final String genCode;
final String note;
final String appraisedbyDesignation;
final String recommendapprDesignation;
final String approvedbyDesignation;
const AddBldgAssessment({
required this.id,
required this.bldgapprDetailsId,
required this.assessedById,
required this.assessedByName,
required this.dateCreated,
required this.dateModified,
required this.actualUse,
required this.marketValue,
required this.assessmentLevel,
required this.assessedValue,
required this.taxable,
required this.exempt,
required this.qtr,
required this.yr,
required this.appraisedbyName,
required this.appraisedbyDate,
required this.recommendapprName,
required this.recommendapprDate,
required this.approvedbyName,
required this.approvedbyDate,
required this.memoranda,
required this.swornstatementNo,
required this.dateReceived,
required this.entryDateAssessment,
required this.entryDateBy,
required this.genCode,
required this.note,
required this.appraisedbyDesignation,
required this.recommendapprDesignation,
required this.approvedbyDesignation,
});
@override
List<Object> get props => [
id,
bldgapprDetailsId,
assessedById,
assessedByName,
dateCreated,
dateModified,
actualUse,
marketValue,
assessmentLevel,
assessedValue,
taxable,
exempt,
qtr,
yr,
appraisedbyName,
appraisedbyDate,
recommendapprName,
recommendapprDate,
approvedbyName,
approvedbyDate,
memoranda,
swornstatementNo,
dateReceived,
entryDateAssessment,
entryDateBy,
genCode,
note,
appraisedbyDesignation,
recommendapprDesignation,
approvedbyDesignation,
];
}
class FetchSingleBldgAssessment extends BldgAssessmentOfflineEvent {
final int id;
const FetchSingleBldgAssessment({required this.id});
@override
List<Object> get props => [id];
}
class UpdateBldgAssessment extends BldgAssessmentOfflineEvent {
final PropertyAssessment assessment;
final int id;
UpdateBldgAssessment({required this.id, required this.assessment});
@override
List<Object> get props => [id, assessment];
}

View File

@ -0,0 +1,37 @@
part of 'bldg_assessment_offline_bloc.dart';
class BldgAssessmentOfflineState extends Equatable {
const BldgAssessmentOfflineState();
@override
List<Object> get props => [];
}
class BldgAssessmentOfflineInitial extends BldgAssessmentOfflineState {
@override
List<Object> get props => [];
}
class BldgAssessmentOfflineLoaded extends BldgAssessmentOfflineState {
final List<PropertyAssessment> assessment;
const BldgAssessmentOfflineLoaded({required this.assessment});
@override
List<Object> get props => [assessment];
}
class LoadSpecificBldgAssessmentOffline extends BldgAssessmentOfflineState {
final PropertyAssessment assessment;
const LoadSpecificBldgAssessmentOffline({required this.assessment});
@override
List<Object> get props => [assessment];
}
class SpecificBldgAssessmentLoaded extends BldgAssessmentOfflineState {
final PropertyAssessment assessment;
const SpecificBldgAssessmentLoaded({required this.assessment});
@override
List<Object> get props => [assessment];
}

View File

@ -0,0 +1,66 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../../../model/passo/additional_items.dart';
import '../../../../../model/passo/building_and_structure.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'building_and_structure_event.dart';
part 'building_and_structure_state.dart';
class BuildingAndStructureBloc
extends Bloc<BuildingAndStructureEvent, BuildingAndStructureState> {
BuildingAndStructureBloc() : super(BuildingAndStructureOfflineInitial()) {
List<BldgAndStructure> bldgAndStructure = [];
on<LoadBuildingAndStructure>((event, emit) async {
emit(BuildingAndStructureOfflineInitial());
try {
emit(BuildingAndStructureLoaded(bldgAndStructure: bldgAndStructure));
} catch (e) {
emit(BuildingAndStructureErrorState(e.toString()));
}
});
on<LoadBuildingAndStructureEdit>((event, emit) async {
emit(BuildingAndStructureOfflineInitial());
List<Map<String, dynamic>> result =
await SQLServices.instance.getBuildingAndStructure(event.id);
if (result.isNotEmpty) {
bldgAndStructure =
result.map((map) => BldgAndStructure.fromJson(map)).toList();
emit(BuildingAndStructureLoaded(bldgAndStructure: bldgAndStructure));
} else {
print('No data found.');
}
});
on<AddBuildingAndStructure>((event, emit) async {
try {
BldgAndStructure item = await SQLServices.instance
.createBuildingAndStructure(event.bldgAndStructure);
print(item.toJson());
bldgAndStructure.add(item);
emit(BuildingAndStructureLoaded(bldgAndStructure: bldgAndStructure));
} catch (e) {
print(e.toString());
}
});
on<ShowBuildingAndStructure>((event, emit) async {
emit(ShowBldgAndStructuresScreen());
});
on<FetchBuildingAndStructure>((event, emit) async {
bldgAndStructure = await SQLServices.instance.readBuildingAndStructure();
emit(BuildingAndStructureLoaded(bldgAndStructure: bldgAndStructure));
});
on<DeleteBuildingAndStructure>((event, emit) async {
bldgAndStructure
.removeWhere(((BldgAndStructure element) => element.id == event.id));
await SQLServices.instance.deleteBuildingAndStructure(id: event.id);
emit(const BuildingAndStructureDeletedState(success: true));
});
}
}

View File

@ -0,0 +1,68 @@
part of 'building_and_structure_bloc.dart';
class BuildingAndStructureEvent extends Equatable {
const BuildingAndStructureEvent();
@override
List<Object> get props => [];
}
class LoadBuildingAndStructure extends BuildingAndStructureEvent {
final List<BldgAndStructure> bldgAndStructure;
const LoadBuildingAndStructure(
{this.bldgAndStructure = const <BldgAndStructure>[]});
@override
List<Object> get props => [bldgAndStructure];
}
class LoadBuildingAndStructureEdit extends BuildingAndStructureEvent {
final List<BldgAndStructure> bldgAndStructure;
final int? id;
const LoadBuildingAndStructureEdit({required this.bldgAndStructure, this.id});
@override
List<Object> get props => [bldgAndStructure];
}
class AddBuildingAndStructure extends BuildingAndStructureEvent {
final BldgAndStructure bldgAndStructure;
const AddBuildingAndStructure({required this.bldgAndStructure});
@override
List<Object> get props => [bldgAndStructure];
}
class UpdateBuildingAndStructure extends BuildingAndStructureEvent {
final BldgAndStructure addItems;
const UpdateBuildingAndStructure({required this.addItems});
@override
List<Object> get props => [addItems];
}
class FetchBuildingAndStructure extends BuildingAndStructureEvent {
const FetchBuildingAndStructure();
@override
List<Object> get props => [];
}
class FetchSpecificBuildingAndStructure extends BuildingAndStructureEvent {
final int id;
const FetchSpecificBuildingAndStructure({required this.id});
@override
List<Object> get props => [id];
}
class DeleteBuildingAndStructure extends BuildingAndStructureEvent {
final int id;
const DeleteBuildingAndStructure({required this.id});
@override
List<Object> get props => [id];
}
class ShowBuildingAndStructure extends BuildingAndStructureEvent {}

View File

@ -0,0 +1,46 @@
part of 'building_and_structure_bloc.dart';
class BuildingAndStructureState extends Equatable {
const BuildingAndStructureState();
@override
List<Object> get props => [];
}
class BuildingAndStructureOfflineInitial extends BuildingAndStructureState {
@override
List<Object> get props => [];
}
class BuildingAndStructureLoaded extends BuildingAndStructureState {
final List<BldgAndStructure> bldgAndStructure;
const BuildingAndStructureLoaded({required this.bldgAndStructure});
@override
List<Object> get props => [bldgAndStructure];
}
class LoadSpecificBuildingAndStructure extends BuildingAndStructureState {
final BldgAndStructure bldgAndStructure;
const LoadSpecificBuildingAndStructure({required this.bldgAndStructure});
@override
List<Object> get props => [bldgAndStructure];
}
class ShowBldgAndStructuresScreen extends BuildingAndStructureState {}
class BuildingAndStructureErrorState extends BuildingAndStructureState {
const BuildingAndStructureErrorState(this.error);
final String error;
@override
List<Object> get props => [error];
}
class BuildingAndStructureDeletedState extends BuildingAndStructureState {
final bool success;
const BuildingAndStructureDeletedState({required this.success});
@override
List<Object> get props => [success];
}

View File

@ -0,0 +1,65 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:unit2/model/passo/general_description.dart';
import 'package:unit2/sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
import '../../../../../sevices/offline/offline_passo/building/property_owner_info_service.dart';
part 'general_description_event.dart';
part 'general_description_state.dart';
class GeneralDescriptionBloc
extends Bloc<GeneralDescriptionEvent, GeneralDescriptionState> {
GeneralDescriptionBloc() : super(GeneralDescriptionInitial()) {
List<GeneralDesc> todos = [];
on<AddGendesc>((event, emit) async {
await SQLServices.instance.createBldgGeneralDescription(GeneralDesc(
bldgapprDetailsId: event.bldgapprDetailsId,
assessedById: event.assessedById,
assessedByName: event.assessedByName,
bldgKind: event.bldgKind,
strucType: event.strucType,
bldgPermit: event.bldgPermit,
dateIssued: event.dateIssued.toString(),
cct: event.cct,
certCompletionIssued: event.certCompletionIssued.toString(),
certOccupancyIssued: event.certOccupancyIssued.toString(),
dateCompleted: event.dateCompleted.toString(),
dateOccupied: event.dateOccupied.toString(),
bldgAge: event.bldgAge,
noStoreys: event.noStoreys,
area1Stfloor: event.area1Stfloor,
area2Ndfloor: event.area2Ndfloor,
area3Rdfloor: event.area3Rdfloor,
area4Thfloor: event.area4Thfloor,
totalFloorArea: event.totalFloorArea,
floorSketch: event.floorSketch,
actualUse: event.actualUse,
unitValue: event.unitValue,
genCode: event.genCode));
});
on<FetchSingleGeneralDescription>((event, emit) async {
List<Map<String, dynamic>> result =
await SQLServices.instance.getGeneralDescription(event.id);
if (result.isNotEmpty) {
List<GeneralDesc> genDescList =
result.map((map) => GeneralDesc.fromJson2(map)).toList();
// Choose a specific element from locationList
GeneralDesc firstGenDesc =
genDescList.first; // You can change this to select a specific item
print('location test result');
print(firstGenDesc);
emit(SpecificGeneralDescriptionLoaded(gendesc: firstGenDesc));
} else {
print('No data found.');
}
});
on<UpdateGeneralDescription>((event, emit) async {
await SQLServices.instance
.updateGeneralDescription(event.id, event.gendesc);
});
}
}

View File

@ -0,0 +1,113 @@
part of 'general_description_bloc.dart';
class GeneralDescriptionEvent extends Equatable {
const GeneralDescriptionEvent();
@override
List<Object> get props => [];
}
class AddGendesc extends GeneralDescriptionEvent {
final int id;
final int bldgapprDetailsId;
final String assessedById;
final String assessedByName;
final String dateCreated;
final String dateModified;
final String bldgKind;
final String strucType;
final String bldgPermit;
final String dateIssued;
final String cct;
final String certCompletionIssued;
final String certOccupancyIssued;
final String dateCompleted;
final String dateOccupied;
final String bldgAge;
final String noStoreys;
final String area1Stfloor;
final String area2Ndfloor;
final String area3Rdfloor;
final String area4Thfloor;
final String totalFloorArea;
final dynamic floorSketch;
final String actualUse;
final String unitValue;
final String genCode;
const AddGendesc(
{required this.id,
required this.bldgapprDetailsId,
required this.assessedById,
required this.assessedByName,
required this.dateCreated,
required this.dateModified,
required this.bldgKind,
required this.strucType,
required this.bldgPermit,
required this.dateIssued,
required this.cct,
required this.certCompletionIssued,
required this.certOccupancyIssued,
required this.dateCompleted,
required this.dateOccupied,
required this.bldgAge,
required this.noStoreys,
required this.area1Stfloor,
required this.area2Ndfloor,
required this.area3Rdfloor,
required this.area4Thfloor,
required this.totalFloorArea,
required this.floorSketch,
required this.actualUse,
required this.unitValue,
required this.genCode});
@override
List<Object> get props => [
id,
bldgapprDetailsId,
assessedById,
assessedByName,
dateCreated,
dateModified,
bldgKind,
strucType,
bldgPermit,
dateIssued,
cct,
certCompletionIssued,
certOccupancyIssued,
dateCompleted,
dateOccupied,
bldgAge,
noStoreys,
area1Stfloor,
area2Ndfloor,
area3Rdfloor,
area4Thfloor,
totalFloorArea,
floorSketch,
actualUse,
unitValue,
genCode
];
}
class FetchSingleGeneralDescription extends GeneralDescriptionEvent {
final int id;
const FetchSingleGeneralDescription({required this.id});
@override
List<Object> get props => [id];
}
class UpdateGeneralDescription extends GeneralDescriptionEvent {
final GeneralDesc gendesc;
final int id;
UpdateGeneralDescription({required this.id, required this.gendesc});
@override
List<Object> get props => [id, gendesc];
}

View File

@ -0,0 +1,29 @@
part of 'general_description_bloc.dart';
class GeneralDescriptionState extends Equatable {
const GeneralDescriptionState();
@override
List<Object> get props => [];
}
class GeneralDescriptionInitial extends GeneralDescriptionState {
@override
List<Object> get props => [];
}
class LocationLoaded extends GeneralDescriptionState {
final List<GeneralDesc> gendesc;
const LocationLoaded({required this.gendesc});
@override
List<Object> get props => [gendesc];
}
class SpecificGeneralDescriptionLoaded extends GeneralDescriptionState {
final GeneralDesc gendesc;
const SpecificGeneralDescriptionLoaded({required this.gendesc});
@override
List<Object> get props => [gendesc];
}

View File

@ -0,0 +1,83 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:unit2/sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
import '../../../../../model/passo/land_ref.dart';
import '../../../../../model/passo/todo.dart';
import '../../../../../sevices/offline/offline_passo/building/property_owner_info_service.dart';
part 'landref_location_event.dart';
part 'landref_location_state.dart';
class LandrefLocationBloc
extends Bloc<LandrefLocationEvent, LandrefLocationState> {
LandrefLocationBloc() : super(LandrefInitial()) {
List<LandRef> todos = [];
on<AddLandRef>((event, emit) async {
await SQLServices.instance.createBldgLandRef(
LandRef(
id: event.id,
bldgapprDetailsId: event.bldgapprDetailsId,
assessedById: event.assessedById,
assessedByName: event.assessedByName,
owner: event.owner,
cloaNo: event.cloaNo,
lotNo: event.lotNo,
tdn: event.tdn,
area: event.area,
surveyNo: event.surveyNo,
blkNo: event.blkNo,
genCode: event.genCode),
);
});
// on<UpdateTodo>((event, emit) async {
// await PropertyOwnerInfoServices.instance.update(
// todo: event.todo,
// );
// });
// on<FetchLanRef>((event, emit) async {
// landref = await PropertyOwnerInfoServices.instance.readAllTodos();
// emit(LandrefLoaded(landref: landref));
// });
on<FetchSingleLandref>((event, emit) async {
List<Map<String, dynamic>> result =
await SQLServices.instance.getLandRef(event.id);
if (result.isNotEmpty) {
LandRef firstRow = LandRef(
id: result[0]["id"],
bldgapprDetailsId: result[0]["bldgapprDetailsId"],
assessedById: result[0]["assessedById"],
assessedByName: result[0]["assessedByName"],
dateCreated: DateTime.now().toString(),
dateModified: DateTime.now().toString(),
owner: result[0]["owner"],
cloaNo: result[0]["cloaNo"],
lotNo: result[0]["lotNo"],
tdn: result[0]["tdn"],
area: result[0]["area"],
surveyNo: result[0]["surveyNo"],
blkNo: result[0]["blkNo"],
);
print('landref test result');
print(firstRow);
emit(SpecificLandrefLoaded(landref: firstRow));
} else {
print('No data found.');
}
});
on<UpdateBldgLandRef>((event, emit) async {
await SQLServices.instance.updateLandRef(event.id, event.landRef);
});
// on<DeleteTodo>((event, emit) async {
// await PropertyOwnerInfoServices.instance.delete(id: event.id);
// add(const FetchTodos());
// });
}
}

View File

@ -0,0 +1,91 @@
part of 'landref_location_bloc.dart';
class LandrefLocationEvent extends Equatable {
const LandrefLocationEvent();
@override
List<Object> get props => [];
}
class AddLandRef extends LandrefLocationEvent {
final int id;
final int bldgapprDetailsId;
final String assessedById;
final String assessedByName;
final dynamic owner;
final dynamic cloaNo;
final dynamic lotNo;
final dynamic tdn;
final dynamic area;
final dynamic surveyNo;
final dynamic blkNo;
final String dateCreated;
final String dateModified;
final String genCode;
const AddLandRef(
{required this.id,
required this.bldgapprDetailsId,
required this.assessedById,
required this.assessedByName,
required this.owner,
required this.cloaNo,
required this.lotNo,
required this.tdn,
required this.area,
required this.surveyNo,
required this.blkNo,
required this.dateCreated,
required this.dateModified,
required this.genCode});
@override
List<Object> get props => [
id,
bldgapprDetailsId,
assessedById,
assessedByName,
owner,
cloaNo,
lotNo,
tdn,
area,
surveyNo,
blkNo,
dateCreated,
dateModified,
genCode
];
}
class UpdateBldgLandRef extends LandrefLocationEvent {
final LandRef landRef;
final int id;
UpdateBldgLandRef({required this.id, required this.landRef});
@override
List<Object> get props => [id, landRef];
}
class FetchLanRef extends LandrefLocationEvent {
const FetchLanRef();
@override
List<Object> get props => [];
}
class FetchSingleLandref extends LandrefLocationEvent {
final int id;
const FetchSingleLandref({required this.id});
@override
List<Object> get props => [id];
}
// class DeleteTodo extends LandrefLocationEvent {
// final int id;
// const DeleteTodo({required this.id});
// @override
// List<Object> get props => [id];
// }

View File

@ -0,0 +1,29 @@
part of 'landref_location_bloc.dart';
class LandrefLocationState extends Equatable {
const LandrefLocationState();
@override
List<Object> get props => [];
}
class LandrefInitial extends LandrefLocationState {
@override
List<Object> get props => [];
}
class LandrefLoaded extends LandrefLocationState {
final List<LandRef> landref;
const LandrefLoaded({required this.landref});
@override
List<Object> get props => [landref];
}
class SpecificLandrefLoaded extends LandrefLocationState {
final LandRef landref;
const SpecificLandrefLoaded({required this.landref});
@override
List<Object> get props => [landref];
}

View File

@ -0,0 +1,48 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:unit2/sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
import '../../../../../model/passo/bldg_loc.dart';
part 'location_event.dart';
part 'location_state.dart';
class LocationBloc extends Bloc<LocationEvent, LocationState> {
LocationBloc() : super(LocationInitial()) {
List<BldgLoc> todos = [];
on<AddLocation>((event, emit) async {
await SQLServices.instance.createBldglocation(BldgLoc(
id: event.id,
bldgapprDetailsId: event.bldgapprDetailsId,
assessedById: event.assessedById,
assessedByName: event.assessedByName,
street: event.street,
barangay: event.barangay,
municipality: event.municipality,
province: event.province,
genCode: event.genCode));
});
on<FetchSingleLocation>((event, emit) async {
List<Map<String, dynamic>> result =
await SQLServices.instance.getLocation(event.id);
if (result.isNotEmpty) {
List<BldgLoc> locationList =
result.map((map) => BldgLoc.fromJson(map)).toList();
// Choose a specific element from locationList
BldgLoc firstLocation =
locationList.first; // You can change this to select a specific item
print('location test result');
print(firstLocation);
emit(SpecificLocationLoaded(location: firstLocation));
} else {
print('No data found.');
}
});
on<UpdateBldgLoc>((event, emit) async {
await SQLServices.instance.updateLocation(event.id, event.bldgLoc);
});
}
}

View File

@ -0,0 +1,81 @@
part of 'location_bloc.dart';
class LocationEvent extends Equatable {
const LocationEvent();
@override
List<Object> get props => [];
}
class AddLocation extends LocationEvent {
final int id;
final int bldgapprDetailsId;
final String assessedById;
final String assessedByName;
final String street;
final String barangay;
final String municipality;
final String province;
final String dateCreated;
final String dateModified;
final String genCode;
const AddLocation(
{required this.id,
required this.bldgapprDetailsId,
required this.assessedById,
required this.assessedByName,
required this.street,
required this.barangay,
required this.municipality,
required this.province,
required this.dateCreated,
required this.dateModified,
required this.genCode});
@override
List<Object> get props => [
bldgapprDetailsId,
assessedById,
assessedByName,
street,
barangay,
municipality,
province,
dateCreated,
dateModified,
genCode
];
}
class UpdateBldgLoc extends LocationEvent {
final BldgLoc bldgLoc;
final int id;
UpdateBldgLoc({required this.id, required this.bldgLoc});
@override
List<Object> get props => [id, bldgLoc];
}
class FetchLanRef extends LocationEvent {
const FetchLanRef();
@override
List<Object> get props => [];
}
class FetchSingleLocation extends LocationEvent {
final int id;
const FetchSingleLocation({required this.id});
@override
List<Object> get props => [id];
}
// class DeleteTodo extends LocationEvent {
// final int id;
// const DeleteTodo({required this.id});
// @override
// List<Object> get props => [id];
// }

View File

@ -0,0 +1,29 @@
part of 'location_bloc.dart';
class LocationState extends Equatable {
const LocationState();
@override
List<Object> get props => [];
}
class LocationInitial extends LocationState {
@override
List<Object> get props => [];
}
class LocationLoaded extends LocationState {
final List<BldgLoc> location;
const LocationLoaded({required this.location});
@override
List<Object> get props => [location];
}
class SpecificLocationLoaded extends LocationState {
final BldgLoc location;
const SpecificLocationLoaded({required this.location});
@override
List<Object> get props => [location];
}

View File

@ -0,0 +1,506 @@
import 'dart:convert';
import 'dart:io';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:intl/intl.dart';
import 'package:unit2/model/passo/floor_sketch.dart';
import 'package:unit2/sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
import 'package:unit2/sevices/passo/building/building_services.dart';
import '../../../../../model/offline/offline_profile.dart';
import '../../../../../model/passo/additional_items.dart';
import '../../../../../model/passo/bldg_loc.dart';
import '../../../../../model/passo/building_and_structure.dart';
import '../../../../../model/passo/general_description.dart';
import '../../../../../model/passo/land_ref.dart';
import '../../../../../model/passo/property_assessment.dart';
import '../../../../../model/passo/property_info.dart';
import '../../../../../model/passo/structureMaterial.dart';
import '../../../../../model/passo/todo.dart';
import '../../../../../model/profile/basic_information/primary-information.dart';
import '../../../../../sevices/offline/offline_passo/building/property_owner_info_service.dart';
import 'package:http/http.dart';
import 'package:path/path.dart';
// as http;
import '../../../../../utils/urls.dart';
part 'crud_event.dart';
part 'crud_state.dart';
class CrudBloc extends Bloc<CrudEvent, CrudState> {
CrudBloc() : super(CrudInitial()) {
List<PropertyInfo> propertyOwner = [];
on<AddTodo>((event, emit) async {
try {
PropertyInfo ownerInfo;
ownerInfo = await SQLServices.instance.createBldgOwner(
PropertyInfo(
transCode: event.transCode,
tdn: event.tdn,
pin: event.pin,
fname: event.fname,
mname: event.mname,
lname: event.lname,
bday: event.bday,
address: event.address,
telno: event.telno,
tin: event.tin,
adminUser: event.adminUser,
adminAddress: event.adminAddress,
adminTelno: event.adminTelno,
adminTin: event.adminTin,
faasType: event.faasType,
assessedById: event.assessedById,
assessedByName: event.assessedByName,
dateCreated: event.dateCreated,
dateModified: event.dateModified,
genCode: event.genCode),
);
propertyOwner.add(ownerInfo);
emit(PropertyInfoLoaded(propertyInfos: propertyOwner));
} catch (e) {
emit(PropertyOwnerInfoErrorState(errorMessage: 'Failed to add todo'));
print('Error: $e');
// You might want to throw or log the error, or take other appropriate actions
// If you want to rethrow the error, uncomment the following line
// throw e;
}
});
on<UpdatePropertyOwnerInfo>((event, emit) async {
await SQLServices.instance.updateBldgOwner(event.id, event.propertyInfo);
});
on<FetchTodos>((event, emit) async {
emit(PropertyOwnerInfoLoading());
propertyOwner = await SQLServices.instance.readAllBldgOwner();
emit(PropertyInfoLoaded(propertyInfos: propertyOwner));
});
// on<FetchSpecificTodo>((event, emit) async {
// Prop todo = await PropertyOwnerInfoServices.instance.readTodo(id: event.id);
// emit(DisplaySpecificTodo(todo: todo));
// });
on<DeleteTodo>((event, emit) async {
await SQLServices.instance.deleteBldgOwner(id: event.id);
// Directly fetch and emit new data rather than triggering another event
try {
emit(PropertyOwnerInfoLoading());
propertyOwner.clear(); // Clear the current list
propertyOwner =
await SQLServices.instance.readAllBldgOwner(); // Refetch data
emit(PropertyInfoLoaded(
propertyInfos: propertyOwner)); // Emit new state with updated data
} catch (error) {
// emit((error.toString())); // Handle potential errors
print(error.toString());
}
});
Future<Map<String, dynamic>> _prepareBuildingDetails(
UploadBuildingFaas event, PropertyInfo infos) async {
// Fetch data
List<Map<String, dynamic>> genDesc =
await SQLServices.instance.getGeneralDescription(infos.id);
List<Map<String, dynamic>> loc =
await SQLServices.instance.getLocation(infos.id);
List<Map<String, dynamic>> landRef =
await SQLServices.instance.getLandRef(infos.id);
List<Map<String, dynamic>> assessment =
await SQLServices.instance.getBldgAssessment(infos.id);
List<Map<String, dynamic>> strucMat =
await SQLServices.instance.getStructuralMaterials(infos.id);
List<Map<String, dynamic>> addItems =
await SQLServices.instance.getAdditionalItems(infos.id);
List<Map<String, dynamic>> bldgStructure =
await SQLServices.instance.getBuildingAndStructure(infos.id);
// Parse data
GeneralDesc firstGenDesc = GeneralDesc.fromJson2(genDesc.first);
BldgLoc firstLoc = BldgLoc.fromJson2(loc.first);
LandRef firstLandRef = LandRef.fromJson2(landRef.first);
PropertyAssessment firstAssess =
PropertyAssessment.fromJson2(assessment.first);
StructureMaterials firstStructMat =
StructureMaterials.fromJson2(strucMat.first);
// Prepare details
DateTime dateIssued = DateTime.parse(firstGenDesc.dateIssued!);
final details = {
"assessed_by_id": event.offlineProfile.id.toString(),
"assessed_by_name": event.offlineProfile.firstName,
"date_created": "{{currentTimestamp}}",
"date_modified": "{{currentTimestamp}}",
"trans_code": '08887',
"tdn": infos.tdn,
"pin": infos.pin,
"fname": infos.fname,
"mname": infos.mname,
"lname": infos.lname,
"bday": infos.bday,
"address": infos.address,
"telno": infos.telno,
"tin": infos.tin,
"admin_user": infos.adminUser,
"admin_address": infos.adminAddress,
"admin_telno": infos.adminTelno,
"admin_tin": infos.adminTin,
"faas_type": infos.faasType,
"gen_code": "5TH",
"bldgappr_location.date_created": "{{currentTimestamp}}",
"bldgappr_location.date_modified": "{{currentTimestamp}}",
"bldgappr_location.street": firstLoc.street,
"bldgappr_location.barangay": firstLoc.barangay,
"bldgappr_location.municipality": firstLoc.municipality,
"bldgappr_location.province": firstLoc.province,
"bldgappr_location.gen_code": "5TH",
"bldgappr_landref.date_created": "{{currentTimestamp}}",
"bldgappr_landref.date_modified": "{{currentTimestamp}}",
"bldgappr_landref.owner": firstLandRef.owner,
"bldgappr_landref.cloa_no": firstLandRef.cloaNo,
"bldgappr_landref.lot_no": firstLandRef.lotNo,
"bldgappr_landref.tdn": firstLandRef.tdn,
"bldgappr_landref.area": firstLandRef.area,
"bldgappr_landref.survey_no": firstLandRef.surveyNo,
"bldgappr_landref.blk_no": firstLandRef.blkNo,
"bldgappr_landref.gen_code": "5TH",
"bldgappr_generaldesc.date_created": "{{currentTimestamp}}",
"bldgappr_generaldesc.date_modified": "{{currentTimestamp}}",
"bldgappr_generaldesc.bldg_kind": firstGenDesc.bldgKind,
"bldgappr_generaldesc.struc_type": firstGenDesc.strucType,
"bldgappr_generaldesc.bldg_permit": firstGenDesc.bldgPermit,
"bldgappr_generaldesc.date_issued": DateFormat("yyyy-MM-dd")
.format(DateTime.parse(firstGenDesc.dateIssued!)),
"bldgappr_generaldesc.cct": null,
"bldgappr_generaldesc.cert_completion_issued": DateFormat("yyyy-MM-dd")
.format(DateTime.parse(firstGenDesc.certCompletionIssued!)),
"bldgappr_generaldesc.cert_occupancy_issued": DateFormat("yyyy-MM-dd")
.format(DateTime.parse(firstGenDesc.certOccupancyIssued!)),
"bldgappr_generaldesc.date_completed": DateFormat("yyyy-MM-dd")
.format(DateTime.parse(firstGenDesc.dateCompleted!)),
"bldgappr_generaldesc.date_occupied": DateFormat("yyyy-MM-dd")
.format(DateTime.parse(firstGenDesc.dateOccupied!)),
"bldgappr_generaldesc.bldg_age": firstGenDesc.bldgAge,
"bldgappr_generaldesc.no_storeys": firstGenDesc.noStoreys,
"bldgappr_generaldesc.area_1stfloor": firstGenDesc.area1Stfloor,
"bldgappr_generaldesc.area_2ndfloor": firstGenDesc.area2Ndfloor,
"bldgappr_generaldesc.area_3rdfloor": firstGenDesc.area3Rdfloor,
"bldgappr_generaldesc.area_4thfloor": firstGenDesc.area4Thfloor,
"bldgappr_generaldesc.total_floor_area": firstGenDesc.totalFloorArea,
"bldgappr_generaldesc.floor_sketch": null,
"bldgappr_generaldesc.actual_use": firstGenDesc.actualUse,
"bldgappr_generaldesc.unit_value": firstGenDesc.unitValue,
"bldgappr_generaldesc.gen_code": "5TH",
"bldgappr_struct_materials.date_created": "{{currentTimestamp}}",
"bldgappr_struct_materials.date_modified": "{{currentTimestamp}}",
"bldgappr_struct_materials.foundation": firstStructMat.foundation,
"bldgappr_struct_materials.columns": firstStructMat.columns,
"bldgappr_struct_materials.beams": firstStructMat.beams,
"bldgappr_struct_materials.truss_framing": firstStructMat.trussFraming,
"bldgappr_struct_materials.roof": firstStructMat.roof,
"bldgappr_struct_materials.flooring": firstStructMat.flooring,
"bldgappr_struct_materials.walls": firstStructMat.walls,
"bldgappr_struct_materials.others": firstStructMat.others,
"bldgappr_struct_materials.gen_code": "5TH",
"bldgappr_property_assessment.date_created": "{{currentTimestamp}}",
"bldgappr_property_assessment.date_modified": "{{currentTimestamp}}",
"bldgappr_property_assessment.actual_use": firstAssess.actualUse,
"bldgappr_property_assessment.market_value": firstAssess.marketValue,
"bldgappr_property_assessment.assessment_level":
firstAssess.assessmentLevel,
"bldgappr_property_assessment.assessed_value":
firstAssess.assessedValue,
"bldgappr_property_assessment.taxable": firstAssess.taxable,
"bldgappr_property_assessment.exempt": firstAssess.exempt,
"bldgappr_property_assessment.qtr": firstAssess.qtr,
"bldgappr_property_assessment.yr": firstAssess.yr,
"bldgappr_property_assessment.appraisedby_name":
firstAssess.appraisedbyName,
"bldgappr_property_assessment.appraisedby_designation":
firstAssess.appraisedbyDesignation,
"bldgappr_property_assessment.appraisedby_date":
DateFormat("yyyy-MM-dd")
.format(DateTime.parse(firstAssess.appraisedbyDate!)),
"bldgappr_property_assessment.recommendappr_name":
firstAssess.recommendapprName,
"bldgappr_property_assessment.recommendappr_designation":
firstAssess.recommendapprDesignation,
"bldgappr_property_assessment.recommendappr_date":
DateFormat("yyyy-MM-dd")
.format(DateTime.parse(firstAssess.recommendapprDate!)),
"bldgappr_property_assessment.approvedby_name":
firstAssess.approvedbyName,
"bldgappr_property_assessment.approvedby_designation":
firstAssess.approvedbyDesignation,
"bldgappr_property_assessment.approvedby_date": DateFormat("yyyy-MM-dd")
.format(DateTime.parse(firstAssess.approvedbyDate!)),
"bldgappr_property_assessment.memoranda": firstAssess.memoranda,
"bldgappr_property_assessment.note": firstAssess.note,
"bldgappr_property_assessment.swornstatement_no":
firstAssess.swornstatementNo,
"bldgappr_property_assessment.date_received": DateFormat("yyyy-MM-dd")
.format(DateTime.parse(firstAssess.dateReceived!)),
"bldgappr_property_assessment.entry_date_assessment":
DateFormat("yyyy-MM-dd")
.format(DateTime.parse(firstAssess.entryDateAssessment!)),
"bldgappr_property_assessment.entry_date_by": " ",
"bldgappr_property_assessment.gen_code": "5TH",
"bldgappr_rec_supersededass.date_created": "{{currentTimestamp}}",
"bldgappr_rec_supersededass.date_modified": "{{currentTimestamp}}",
"bldgappr_rec_supersededass.pin": " ",
"bldgappr_rec_supersededass.tdn": " ",
"bldgappr_rec_supersededass.total_assval": "0",
"bldgappr_rec_supersededass.owner": " ",
"bldgappr_rec_supersededass.effectivity_ass": null,
"bldgappr_rec_supersededass.page_no": "0",
"bldgappr_rec_supersededass.total_marketval": "0",
"bldgappr_rec_supersededass.total_area": "0",
"bldgappr_rec_supersededass.rec_assessment": null,
"bldgappr_rec_supersededass.rec_taxmapping": " ",
"bldgappr_rec_supersededass.rec_records": " ",
"bldgappr_rec_supersededass.date": null,
"bldgappr_rec_supersededass.gen_code": "5TH"
};
return details;
}
Future<void> _postAdditionalItems(
Map<String, dynamic> datas, PropertyInfo infos) async {
String xClientKey = "unitK3CQaXiWlPReDsBzmmwBZPd9Re1z";
String xClientKeySecret = "unitcYqAN7GGalyz";
Map<String, String> headers = {
'Content-Type': 'application/json; charset=UTF-8',
'X-Client-Key': xClientKey,
'X-Client-Secret': xClientKeySecret
};
List<Map<String, dynamic>> addItems =
await SQLServices.instance.getAdditionalItems(infos.id);
List<AdditionalItems> addItemsList =
addItems.map((map) => AdditionalItems.fromJson(map)).toList();
for (AdditionalItems items in addItemsList) {
// Populate AdditionalItems model here
final addItems = AdditionalItems(
id: 1,
bldgapprDetailsId: datas['data']['id'],
classId: items.classId,
className: items.className,
structType: items.structType,
unitValue: items.unitValue,
baseUnitValue: items.baseUnitValue,
area: items.area,
marketValue: items.marketValue,
depreciationRate: items.depreciationRate,
adjustedMarketVal: items.adjustedMarketVal,
amtDepreciation: items.amtDepreciation,
painted: items.painted,
secondhand: items.secondhand,
paintedUnitval: items.paintedUnitval,
secondhandUnitval: items.secondhandUnitval,
actualUse: items.actualUse,
genCode: "5TH");
Response addResponse = await post(
Uri.parse(
'https://${Url.instance.host()}/api/rptass_app/additional_items/'),
headers: headers,
body: jsonEncode(addItems));
print(addResponse.body);
}
}
Future<void> _postBuildingStructures(
Map<String, dynamic> datas, PropertyInfo infos) async {
String xClientKey = "unitK3CQaXiWlPReDsBzmmwBZPd9Re1z";
String xClientKeySecret = "unitcYqAN7GGalyz";
Map<String, String> headers = {
'Content-Type': 'application/json; charset=UTF-8',
'X-Client-Key': xClientKey,
'X-Client-Secret': xClientKeySecret
};
List<Map<String, dynamic>> bldgStructures =
await SQLServices.instance.getBuildingAndStructure(infos.id);
List<BldgAndStructure> bldgStructureList =
bldgStructures.map((map) => BldgAndStructure.fromJson(map)).toList();
for (BldgAndStructure structure in bldgStructureList) {
final bldgStruc = BldgAndStructure(
id: 1,
bldgapprDetailsId: datas['data']['id'],
bldgArea: structure.bldgArea,
bldgType: structure.bldgType,
structType: structure.structType,
description: structure.description,
actualUse: structure.actualUse,
floorCount: structure.floorCount,
unitValue: structure.unitValue,
depRate: structure.depRate,
marketValue: structure.marketValue,
depAmount: structure.depAmount,
adjustedMarketValue: structure.adjustedMarketValue,
genCode: '5TH',
buccPercentage: structure.buccPercentage);
Response response = await post(
Uri.parse(
'https://${Url.instance.host()}/api/rptass_app/bldgappr_structure/'),
headers: headers,
body: jsonEncode(bldgStruc));
print(response.body);
}
}
Future<Response> _postBuildingDetails(Map<String, dynamic> details) async {
String xClientKey = "unitK3CQaXiWlPReDsBzmmwBZPd9Re1z";
String xClientKeySecret = "unitcYqAN7GGalyz";
Map<String, String> headers = {
'Content-Type': 'application/json; charset=UTF-8',
'X-Client-Key': xClientKey,
'X-Client-Secret': xClientKeySecret
};
return await post(
Uri.parse(
'https://${Url.instance.host()}/api/rptass_app/bldgappr_details/'),
headers: headers,
body: jsonEncode(details));
}
Future<Response> _postFloorSketch(
Map<String, dynamic> details, file) async {
String xClientKey = "unitK3CQaXiWlPReDsBzmmwBZPd9Re1z";
String xClientKeySecret = "unitcYqAN7GGalyz";
// Construct the headers for the request
Map<String, String> headers = {
'Content-Type': 'multipart/form-data',
'X-Client-Key': xClientKey,
'X-Client-Secret': xClientKeySecret,
};
// Create a MultipartRequest
var request = MultipartRequest(
'POST',
Uri.parse(
'https://${Url.instance.host()}/api/rptass_app/bldgappr_sketch/'),
);
// Add the headers to the request
request.headers.addAll(headers);
// Add JSON data as a field
// Add individual fields to the request
details.forEach((key, value) {
request.fields[key] = value.toString();
});
// Add the floor sketch image file, if it exists
var fileName = basename(file);
request.files.add(
await MultipartFile.fromPath(
'floor_sketch', // Field name in the API
file,
filename: fileName,
),
);
// Send the request and get the response
var streamedResponse = await request.send();
return await Response.fromStream(streamedResponse);
}
Future<void> _uploadImage(data, infos) async {
// Create a map with the required fields
List<Map<String, dynamic>> floorSketch =
await SQLServices.instance.getFloorSketch(infos.id);
// Parse data
FloorSketch firstFs = FloorSketch.fromJson(floorSketch.first);
var file = File(firstFs.floorSketch!);
Map<String, dynamic> detailsMap = {
"bldgappr_details_id": data['data']['id'], // int8 NOT NULL
"date_created": DateTime.now().toIso8601String(), // timestamptz NULL
"floor_sketch": firstFs.floorSketch!, // text NULL
"gen_code": "5TH", // varchar(20) NOT NULL
};
try {
Response response = await _postFloorSketch(detailsMap, file.path);
print(response.body);
if (response.statusCode == 201) {
print('Upload successful');
} else {
print('Upload failed with status: ${response.statusCode}');
}
} catch (e) {
print('Error: $e');
}
}
on<UploadBuildingFaas>((event, emit) async {
emit(UploadBuildingFaasLoading());
try {
List<PropertyInfo> propertyOwner =
await SQLServices.instance.readAllBldgOwner();
for (PropertyInfo infos in propertyOwner) {
if (infos.dateSynced == null) {
final details = await _prepareBuildingDetails(event, infos);
Response detailsResponse = await _postBuildingDetails(details);
final datas = json.decode(detailsResponse.body);
print(datas);
await _postAdditionalItems(datas, infos);
await _postBuildingStructures(datas, infos);
await _uploadImage(datas, infos);
if (detailsResponse.statusCode == 201) {
final detailsInfo = PropertyInfo(
id: infos.id,
transCode: infos.transCode,
assessedById: infos.assessedById,
assessedByName: infos.assessedByName,
tdn: infos.tdn,
pin: infos.pin,
fname: infos.fname,
mname: infos.mname,
bday: infos.bday,
lname: infos.lname,
address: infos.address,
telno: infos.telno,
tin: infos.tin,
adminUser: infos.adminUser,
adminAddress: infos.adminAddress,
adminTin: infos.adminTin,
adminTelno: infos.adminTelno,
faasType: "Building",
dateSynced:
DateFormat('MM/dd/yyyy hh:mm a').format(DateTime.now()));
await SQLServices.instance.updateBldgOwner(infos.id, detailsInfo);
}
}
propertyOwner = await SQLServices.instance.readAllBldgOwner();
emit(PropertyInfoLoaded(propertyInfos: propertyOwner));
}
} catch (e) {
print(e.toString());
emit(PropertyOwnerInfoErrorState(errorMessage: e.toString()));
}
;
});
}
}

View File

@ -0,0 +1,117 @@
part of 'crud_bloc.dart';
abstract class CrudEvent extends Equatable {
const CrudEvent();
}
class AddTodo extends CrudEvent {
final String id;
final String transCode;
final String tdn;
final String pin;
final String fname;
final String mname;
final String lname;
final String bday;
final String address;
final String telno;
final String tin;
final String adminUser;
final String adminAddress;
final String adminTelno;
final String adminTin;
final String faasType;
final String assessedById;
final String assessedByName;
final String dateCreated;
final String dateModified;
final String genCode;
const AddTodo(
{required this.id,
required this.transCode,
required this.tdn,
required this.pin,
required this.fname,
required this.mname,
required this.lname,
required this.bday,
required this.address,
required this.telno,
required this.tin,
required this.adminUser,
required this.adminAddress,
required this.adminTelno,
required this.adminTin,
required this.faasType,
required this.assessedById,
required this.assessedByName,
required this.dateCreated,
required this.dateModified,
required this.genCode});
@override
List<Object?> get props => [
id,
transCode,
tdn,
pin,
fname,
mname,
lname,
bday,
address,
telno,
tin,
adminUser,
adminAddress,
adminTelno,
adminTin,
faasType,
assessedById,
assessedByName,
dateCreated,
dateModified,
genCode
];
}
class UpdatePropertyOwnerInfo extends CrudEvent {
final PropertyInfo propertyInfo;
final int id;
UpdatePropertyOwnerInfo({required this.id, required this.propertyInfo});
@override
List<Object> get props => [id, propertyInfo];
}
class FetchTodos extends CrudEvent {
const FetchTodos();
@override
List<Object?> get props => [];
}
class UploadBuildingFaas extends CrudEvent {
final OfflineProfile offlineProfile;
const UploadBuildingFaas({required this.offlineProfile});
@override
List<Object?> get props => [offlineProfile];
}
class FetchSpecificTodo extends CrudEvent {
final int id;
const FetchSpecificTodo({required this.id});
@override
List<Object?> get props => [id];
}
class DeleteTodo extends CrudEvent {
final int id;
const DeleteTodo({required this.id});
@override
List<Object?> get props => [id];
}

View File

@ -0,0 +1,43 @@
part of 'crud_bloc.dart';
abstract class CrudState extends Equatable {
const CrudState();
}
class CrudInitial extends CrudState {
@override
List<Object> get props => [];
}
class PropertyOwnerInfoLoading extends CrudState {
@override
List<Object> get props => [];
}
class PropertyOwnerInfoErrorState extends CrudState {
final String errorMessage;
const PropertyOwnerInfoErrorState({required this.errorMessage});
@override
List<Object> get props => [errorMessage];
}
class PropertyInfoLoaded extends CrudState {
final List<PropertyInfo> propertyInfos;
const PropertyInfoLoaded({required this.propertyInfos});
@override
List<Object> get props => [propertyInfos];
}
class DisplaySpecificTodo extends CrudState {
final Todo todo;
const DisplaySpecificTodo({required this.todo});
@override
List<Object> get props => [todo];
}
class UploadBuildingFaasLoading extends CrudState {
@override
List<Object> get props => [];
}

View File

@ -0,0 +1,57 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../../../model/passo/structural_materials_ii.dart';
import '../../../../../model/passo/structureMaterial.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'structural_material_offline_event.dart';
part 'structural_material_offline_state.dart';
class StructuralMaterialOfflineBloc extends Bloc<StructuralMaterialOfflineEvent,
StructuralMaterialOfflineState> {
StructuralMaterialOfflineBloc() : super(StructuralMaterialOfflineInitial()) {
List<StructureMaterials> materials = [];
on<AddStructuralMaterial>((event, emit) async {
await SQLServices.instance.createStructuralMaterials(StructureMaterialsII(
id: event.id,
bldgapprDetailsId: event.bldgapprDetailsId,
foundation: event.foundation!.join(', ').split(', '),
columns: event.columns!.join(', ').split(', '),
beams: event.beams!.join(', ').split(', '),
trussFraming: event.trussFraming!.join(', ').split(', '),
roof: event.roof!.join(', ').split(', '),
flooring: event.flooring!.join(', ').split(', '),
walls: event.walls!.join(', ').split(', '),
others: event.others!.join(', ').split(', '),
genCode: event.genCode,
assessedById: event.assessedById,
assessedByName: event.assessedByName,
dateCreated: event.dateCreated,
dateModified: event.dateModified));
});
on<FetchSingleStructuralMaterial>((event, emit) async {
List<Map<String, dynamic>> result =
await SQLServices.instance.getStructuralMaterials(event.id);
if (result.isNotEmpty) {
List<StructureMaterials> materialList =
result.map((map) => StructureMaterials.fromJson2(map)).toList();
// Choose a specific element from locationList
StructureMaterials firstMaterial =
materialList.first; // You can change this to select a specific item
print('struct mat test result');
print(firstMaterial);
emit(SpecificStructuralMaterialLoaded(materials: firstMaterial));
} else {
print('No data found.');
}
});
on<UpdateStructuralMaterials>((event, emit) async {
await SQLServices.instance
.updateStructuralMaterial(event.id, event.materials);
});
}
}

View File

@ -0,0 +1,80 @@
part of 'structural_material_offline_bloc.dart';
class StructuralMaterialOfflineEvent extends Equatable {
const StructuralMaterialOfflineEvent();
@override
List<Object> get props => [];
}
class AddStructuralMaterial extends StructuralMaterialOfflineEvent {
final int id;
final int bldgapprDetailsId;
final List<String>? foundation;
final List<String>? columns;
final List<String>? beams;
final List<String>? trussFraming;
final List<String>? roof;
final List<String>? flooring;
final List<String>? walls;
final List<String>? others;
final String assessedById;
final String assessedByName;
final String dateCreated;
final String dateModified;
final String genCode;
const AddStructuralMaterial(
{required this.id,
required this.bldgapprDetailsId,
required this.foundation,
required this.columns,
required this.beams,
required this.trussFraming,
required this.roof,
required this.flooring,
required this.walls,
required this.others,
required this.assessedById,
required this.assessedByName,
required this.dateCreated,
required this.dateModified,
required this.genCode});
@override
List<Object> get props => [
id,
bldgapprDetailsId,
...?foundation,
...?columns,
...?beams,
...?trussFraming,
...?roof,
...?flooring,
...?walls,
...?others,
assessedById,
assessedByName,
dateCreated,
dateModified,
genCode
];
}
class FetchSingleStructuralMaterial extends StructuralMaterialOfflineEvent {
final int id;
const FetchSingleStructuralMaterial({required this.id});
@override
List<Object> get props => [id];
}
class UpdateStructuralMaterials extends StructuralMaterialOfflineEvent {
final StructureMaterialsII materials;
final int id;
UpdateStructuralMaterials({required this.id, required this.materials});
@override
List<Object> get props => [id, materials];
}

View File

@ -0,0 +1,29 @@
part of 'structural_material_offline_bloc.dart';
class StructuralMaterialOfflineState extends Equatable {
const StructuralMaterialOfflineState();
@override
List<Object> get props => [];
}
class StructuralMaterialOfflineInitial extends StructuralMaterialOfflineState {
@override
List<Object> get props => [];
}
class StructuralMaterialLoaded extends StructuralMaterialOfflineState {
final List<StructureMaterials> materials;
const StructuralMaterialLoaded({required this.materials});
@override
List<Object> get props => [materials];
}
class SpecificStructuralMaterialLoaded extends StructuralMaterialOfflineState {
final StructureMaterials materials;
const SpecificStructuralMaterialLoaded({required this.materials});
@override
List<Object> get props => [materials];
}

View File

@ -0,0 +1,71 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:unit2/bloc/passo/land/land_appraisal/land_appraisal_bloc.dart';
import 'package:unit2/model/passo/land_appr.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'land_property_appraisal_event.dart';
part 'land_property_appraisal_state.dart';
class LandPropertyAppraisalBloc
extends Bloc<LandPropertyAppraisalEvent, LandPropertyAppraisalState> {
LandPropertyAppraisalBloc() : super(LandPropertyAppraisalInitial()) {
List<LandAppr> landAppr = [];
on<LoadLandPropertyAppraisal>((event, emit) async {
emit(LandPropertyAppraisalInitial());
try {
emit(LandPropertyAppraisalLoaded(landAppr: landAppr));
} catch (e) {
emit(LandPropertyAppraisalErrorState(e.toString()));
}
});
on<LoadLandPropertyAppraisalEdit>((event, emit) async {
emit(LandPropertyAppraisalInitial());
List<Map<String, dynamic>> result =
await SQLServices.instance.getLandPropertyAppraisal(event.id);
if (result.isNotEmpty) {
landAppr = result.map((map) => LandAppr.fromJson2(map)).toList();
emit(LandPropertyAppraisalLoaded(landAppr: landAppr));
} else {
print('No data found.');
}
});
on<AddLandPropertyAppraisal>((event, emit) async {
try {
print(event);
LandAppr item = await SQLServices.instance.createLandAppraisal(LandAppr(
landapprDetailsId: event.landapprDetailsId,
classification: event.classification,
subClass: event.subClass,
area: event.area,
unitValue: event.unitValue,
baseMarketval: event.baseMarketval));
print('Appraisal');
print(item.toJson());
landAppr.add(item);
emit(LandPropertyAppraisalLoaded(landAppr: landAppr));
} catch (e) {
print(e.toString());
}
});
on<ShowAdditionalItems>((event, emit) async {
emit(ShowAddItemsScreen());
});
// on<FetchAdditionalItems>((event, emit) async {
// addItems = await SQLServices.instance.readAdditionalItems();
// emit(AdditionalItemsLoaded(addItem: addItems));
// });
on<DeleteLandPropertyAppraisal>((event, emit) async {
landAppr.removeWhere(((LandAppr element) => element.id == event.id));
await SQLServices.instance.deleteLandPropertyAppraisal(id: event.id);
emit(const LandPropertyAppraisalDeletedState(success: true));
});
}
}

View File

@ -0,0 +1,86 @@
part of 'land_property_appraisal_bloc.dart';
class LandPropertyAppraisalEvent extends Equatable {
const LandPropertyAppraisalEvent();
@override
List<Object> get props => [];
}
class LoadLandPropertyAppraisal extends LandPropertyAppraisalEvent {
final List<LandAppr> landAppr;
const LoadLandPropertyAppraisal({this.landAppr = const <LandAppr>[]});
@override
List<Object> get props => [landAppr];
}
class LoadLandPropertyAppraisalEdit extends LandPropertyAppraisalEvent {
final List<LandAppr> landAppr;
final int? id;
const LoadLandPropertyAppraisalEdit({required this.landAppr, this.id});
@override
List<Object> get props => [landAppr];
}
class AddLandPropertyAppraisal extends LandPropertyAppraisalEvent {
final int landapprDetailsId;
final String classification;
final String subClass;
final String area;
final String unitValue;
final String baseMarketval;
const AddLandPropertyAppraisal({
required this.landapprDetailsId,
required this.classification,
required this.subClass,
required this.area,
required this.unitValue,
required this.baseMarketval,
});
@override
List<Object> get props => [
landapprDetailsId,
classification,
subClass,
area,
unitValue,
baseMarketval,
];
}
class UpdateLandPropertyAppraisal extends LandPropertyAppraisalEvent {
final LandAppr landAppr;
const UpdateLandPropertyAppraisal({required this.landAppr});
@override
List<Object> get props => [landAppr];
}
class FetchLandPropertyAppraisal extends LandPropertyAppraisalEvent {
const FetchLandPropertyAppraisal();
@override
List<Object> get props => [];
}
class FetchSpecificLandPropertyAppraisal extends LandPropertyAppraisalEvent {
final int id;
const FetchSpecificLandPropertyAppraisal({required this.id});
@override
List<Object> get props => [id];
}
class DeleteLandPropertyAppraisal extends LandPropertyAppraisalEvent {
final int id;
const DeleteLandPropertyAppraisal({required this.id});
@override
List<Object> get props => [id];
}
class ShowAdditionalItems extends LandPropertyAppraisalEvent {}

View File

@ -0,0 +1,46 @@
part of 'land_property_appraisal_bloc.dart';
class LandPropertyAppraisalState extends Equatable {
const LandPropertyAppraisalState();
@override
List<Object> get props => [];
}
class LandPropertyAppraisalInitial extends LandPropertyAppraisalState {
@override
List<Object> get props => [];
}
class LandPropertyAppraisalLoaded extends LandPropertyAppraisalState {
final List<LandAppr> landAppr;
const LandPropertyAppraisalLoaded({required this.landAppr});
@override
List<Object> get props => [landAppr];
}
class LoadSpecificLandPropertyAppraisal extends LandPropertyAppraisalState {
final LandAppr landAppr;
const LoadSpecificLandPropertyAppraisal({required this.landAppr});
@override
List<Object> get props => [landAppr];
}
class ShowAddItemsScreen extends LandPropertyAppraisalState {}
class LandPropertyAppraisalErrorState extends LandPropertyAppraisalState {
const LandPropertyAppraisalErrorState(this.error);
final String error;
@override
List<Object> get props => [error];
}
class LandPropertyAppraisalDeletedState extends LandPropertyAppraisalState {
final bool success;
const LandPropertyAppraisalDeletedState({required this.success});
@override
List<Object> get props => [success];
}

View File

@ -0,0 +1,72 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../../../model/passo/land_property_assessment.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'land_property_assessment_event.dart';
part 'land_property_assessment_state.dart';
class LandPropertyAssessmentBloc
extends Bloc<LandPropertyAssessmentEvent, LandPropertyAssessmentState> {
LandPropertyAssessmentBloc() : super(LandPropertyAssessmentInitial()) {
List<LandPropertyAssessment> landPropertyAssessment = [];
on<LoadLandPropertyAssessment>((event, emit) async {
emit(LandPropertyAssessmentInitial());
try {
emit(LandPropertyAssessmentLoaded(
landPropertyAssessment: landPropertyAssessment));
} catch (e) {
emit(LandPropertyAssessmentErrorState(e.toString()));
}
});
on<LoadLandPropertyAssessmentEdit>((event, emit) async {
emit(LandPropertyAssessmentInitial());
List<Map<String, dynamic>> result =
await SQLServices.instance.getLandPropertyAssessment(event.id);
if (result.isNotEmpty) {
landPropertyAssessment =
result.map((map) => LandPropertyAssessment.fromJson2(map)).toList();
emit(LandPropertyAssessmentLoaded(
landPropertyAssessment: landPropertyAssessment));
} else {
print('No data found.');
}
});
on<AddLandPropertyAssessment>((event, emit) async {
try {
LandPropertyAssessment item = await SQLServices.instance
.createLandPropertyAssessment(LandPropertyAssessment(
landapprDetailsId: event.landapprDetailsId,
actualUse: event.actualUse,
marketval: event.marketval,
assessmentLevel: event.assessmentLevel,
assessedValue: event.assessedValue,
totalMarketval: event.totalMarketval,
totalAssessedval: event.totalAssessedval,
));
print(item.toJson());
landPropertyAssessment.add(item);
emit(LandPropertyAssessmentLoaded(
landPropertyAssessment: landPropertyAssessment));
} catch (e) {
print(e.toString());
}
});
on<ShowLandPropertyAssessment>((event, emit) async {
emit(ShowLandPropertyAssessmentcreen());
});
on<DeleteLandPropertyAssessment>((event, emit) async {
landPropertyAssessment.removeWhere(
((LandPropertyAssessment element) => element.id == event.id));
await SQLServices.instance.deleteLandPropertyAssessment(id: event.id);
emit(const LandPropertyAssessmentDeletedState(success: true));
});
}
}

View File

@ -0,0 +1,91 @@
part of 'land_property_assessment_bloc.dart';
class LandPropertyAssessmentEvent extends Equatable {
const LandPropertyAssessmentEvent();
@override
List<Object> get props => [];
}
class LoadLandPropertyAssessment extends LandPropertyAssessmentEvent {
final List<LandPropertyAssessment> landPropertyAssessment;
const LoadLandPropertyAssessment(
{this.landPropertyAssessment = const <LandPropertyAssessment>[]});
@override
List<Object> get props => [landPropertyAssessment];
}
class LoadLandPropertyAssessmentEdit extends LandPropertyAssessmentEvent {
final List<LandPropertyAssessment> landPropertyAssessment;
final int? id;
const LoadLandPropertyAssessmentEdit(
{required this.landPropertyAssessment, this.id});
@override
List<Object> get props => [landPropertyAssessment];
}
class AddLandPropertyAssessment extends LandPropertyAssessmentEvent {
final int landapprDetailsId;
final String actualUse;
final String marketval;
final String assessmentLevel;
final String assessedValue;
final String totalMarketval;
final String totalAssessedval;
const AddLandPropertyAssessment({
required this.landapprDetailsId,
required this.actualUse,
required this.marketval,
required this.assessmentLevel,
required this.assessedValue,
required this.totalMarketval,
required this.totalAssessedval,
});
@override
List<Object> get props => [
landapprDetailsId,
actualUse,
marketval,
assessmentLevel,
assessedValue,
totalMarketval,
totalAssessedval,
];
}
class UpdateLandPropertyAssessment extends LandPropertyAssessmentEvent {
final LandPropertyAssessment landPropertyAssessment;
const UpdateLandPropertyAssessment({required this.landPropertyAssessment});
@override
List<Object> get props => [landPropertyAssessment];
}
class FetchLandPropertyAssessment extends LandPropertyAssessmentEvent {
const FetchLandPropertyAssessment();
@override
List<Object> get props => [];
}
class FetchSpecificLandPropertyAssessment extends LandPropertyAssessmentEvent {
final int id;
const FetchSpecificLandPropertyAssessment({required this.id});
@override
List<Object> get props => [id];
}
class DeleteLandPropertyAssessment extends LandPropertyAssessmentEvent {
final int id;
const DeleteLandPropertyAssessment({required this.id});
@override
List<Object> get props => [id];
}
class ShowLandPropertyAssessment extends LandPropertyAssessmentEvent {}

View File

@ -0,0 +1,47 @@
part of 'land_property_assessment_bloc.dart';
class LandPropertyAssessmentState extends Equatable {
const LandPropertyAssessmentState();
@override
List<Object> get props => [];
}
class LandPropertyAssessmentInitial extends LandPropertyAssessmentState {
@override
List<Object> get props => [];
}
class LandPropertyAssessmentLoaded extends LandPropertyAssessmentState {
final List<LandPropertyAssessment> landPropertyAssessment;
const LandPropertyAssessmentLoaded({required this.landPropertyAssessment});
@override
List<Object> get props => [landPropertyAssessment];
}
class LoadSpecificLandPropertyAssessment extends LandPropertyAssessmentState {
final LandPropertyAssessment landPropertyAssessment;
const LoadSpecificLandPropertyAssessment(
{required this.landPropertyAssessment});
@override
List<Object> get props => [landPropertyAssessment];
}
class ShowLandPropertyAssessmentcreen extends LandPropertyAssessmentState {}
class LandPropertyAssessmentErrorState extends LandPropertyAssessmentState {
const LandPropertyAssessmentErrorState(this.error);
final String error;
@override
List<Object> get props => [error];
}
class LandPropertyAssessmentDeletedState extends LandPropertyAssessmentState {
final bool success;
const LandPropertyAssessmentDeletedState({required this.success});
@override
List<Object> get props => [success];
}

View File

@ -0,0 +1,55 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../../../model/passo/land_property_boundaries.dart';
import '../../../../../sevices/offline/offline_passo/admin/sql_services/sql_services.dart';
part 'land_property_boundaries_event.dart';
part 'land_property_boundaries_state.dart';
class LandPropertyBoundariesBloc
extends Bloc<LandPropertyBoundariesEvent, LandPropertyBoundariesState> {
LandPropertyBoundariesBloc() : super(LandPropertyBoundariesInitial()) {
List<LandPropertyBoundaries> todos = [];
on<AddLandPropertyBoundaries>((event, emit) async {
await SQLServices.instance.createLandPropertyBoundaries(
LandPropertyBoundaries(
id: event.id,
landapprDetailsId: event.landapprDetailsId,
assessedById: event.assessedById,
assessedByName: event.assessedByName,
dateCreated: event.dateCreated,
dateModified: event.dateModified,
north: event.north,
east: event.east,
south: event.south,
west: event.west,
sketch: event.sketch));
});
on<FetchSingleLandPropertyBoundaries>((event, emit) async {
List<Map<String, dynamic>> result =
await SQLServices.instance.getLandPropertyBoundaries(event.id);
if (result.isNotEmpty) {
List<LandPropertyBoundaries> landpropertyboundariesList =
result.map((map) => LandPropertyBoundaries.fromJson(map)).toList();
// Choose a specific element from landpropertyboundariesList
LandPropertyBoundaries firstLandPropertyBoundaries =
landpropertyboundariesList
.first; // You can change this to select a specific item
print('landpropertyboundaries test result');
print(firstLandPropertyBoundaries);
emit(SpecificLandPropertyBoundariesLoaded(
landpropertyboundaries: firstLandPropertyBoundaries));
} else {
print('No data found.');
}
});
on<UpdateLandPropertyBoundaries>((event, emit) async {
await SQLServices.instance
.updateLandPropertyBoundaries(event.id, event.landPropertyBoundaries);
});
}
}

View File

@ -0,0 +1,77 @@
part of 'land_property_boundaries_bloc.dart';
class LandPropertyBoundariesEvent extends Equatable {
const LandPropertyBoundariesEvent();
@override
List<Object> get props => [];
}
class AddLandPropertyBoundaries extends LandPropertyBoundariesEvent {
final int id;
final int landapprDetailsId;
final String assessedById;
final String assessedByName;
final String dateCreated;
final String dateModified;
final String north;
final String east;
final String south;
final String west;
final String sketch;
const AddLandPropertyBoundaries({
required this.id,
required this.landapprDetailsId,
required this.assessedById,
required this.assessedByName,
required this.dateCreated,
required this.dateModified,
required this.north,
required this.east,
required this.south,
required this.west,
required this.sketch,
});
@override
List<Object> get props => [
id,
landapprDetailsId,
assessedById,
assessedByName,
dateCreated,
dateModified,
north,
east,
south,
west,
sketch,
];
}
class UpdateLandPropertyBoundaries extends LandPropertyBoundariesEvent {
final LandPropertyBoundaries landPropertyBoundaries;
final int id;
UpdateLandPropertyBoundaries(
{required this.id, required this.landPropertyBoundaries});
@override
List<Object> get props => [id, landPropertyBoundaries];
}
class FetchLanRef extends LandPropertyBoundariesEvent {
const FetchLanRef();
@override
List<Object> get props => [];
}
class FetchSingleLandPropertyBoundaries extends LandPropertyBoundariesEvent {
final int id;
const FetchSingleLandPropertyBoundaries({required this.id});
@override
List<Object> get props => [id];
}

Some files were not shown because too many files have changed in this diff Show More