Compare commits
47 Commits
master
...
b7b203ee51
| Author | SHA1 | Date | |
|---|---|---|---|
| b7b203ee51 | |||
| 71123c3520 | |||
| 9e2e7845c8 | |||
| 4a96dbe2b8 | |||
| b290094164 | |||
| f830e7d76d | |||
| 9910de4ed8 | |||
| edde363b6d | |||
| ed113d8702 | |||
| 7d6be4f3f4 | |||
| 57704399b9 | |||
| 12cdc1a5e8 | |||
| 5d1e9d1cbb | |||
| fc93c68154 | |||
| 4155f9a085 | |||
| 23bf009903 | |||
| 3486bc73e9 | |||
| a8e500551d | |||
| 28f7fafb5b | |||
| ad713621a5 | |||
| efd6a9bf9f | |||
| 3b07dca52e | |||
| 677e1d044a | |||
| 6ef1361ba1 | |||
| 4f7fa4ba93 | |||
| 39ca4f0c35 | |||
| 98c900f408 | |||
| 24431b3514 | |||
| 7c8660c1d2 | |||
| 0860ec5459 | |||
| f9e09a17fe | |||
| b057c8b69a | |||
| e7b0159ea9 | |||
| afbd72404d | |||
| 0d47710e81 | |||
| b8a914ec0e | |||
| 3d73d9a17a | |||
| 455a5a5571 | |||
| 890be0ded6 | |||
| 2f4edc1b6e | |||
| 9b68cb6bc3 | |||
| 02686115cb | |||
| c28a4a3177 | |||
| 8c9517b529 | |||
| b4cf137351 | |||
| ac2d8da95e | |||
| c42ee069e6 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -17,7 +17,6 @@ migrate_working_dir/
|
||||
*.ipr
|
||||
*.iws
|
||||
*.lock
|
||||
.lock
|
||||
.idea/
|
||||
|
||||
# The .vscode folder contains launch configuration and tasks you configure in
|
||||
|
||||
193
APP_SIZE_OPTIMIZATION.md
Normal file
193
APP_SIZE_OPTIMIZATION.md
Normal file
@@ -0,0 +1,193 @@
|
||||
# راهنمای کاهش حجم اپلیکیشن Flutter
|
||||
|
||||
## چرا حجم اپ زیاد میشه؟
|
||||
|
||||
### 1. **Assets (تصاویر و آیکونها)**
|
||||
- هر فایل تصویر/آیکون که از Figma اضافه میکنید، مستقیماً به حجم اپ اضافه میشه
|
||||
- در حال حاضر شما **119 SVG** و **119 VEC** دارید (احتمالاً تکراری!)
|
||||
- همه assets در `pubspec.yaml` به صورت کلی اضافه شدن (`assets/icons/`)
|
||||
|
||||
### 2. **کد Dart**
|
||||
- خود کد Dart حجم کمی داره
|
||||
- اما dependencies و packages حجم زیادی اضافه میکنن
|
||||
- کدهای generate شده (freezed, json_serializable) هم حجم دارن
|
||||
|
||||
### 3. **مشکلات فعلی پروژه:**
|
||||
- ✅ **تکرار assets**: هم SVG و هم VEC دارید
|
||||
- ❌ **عدم بهینهسازی تصاویر**: PNG به جای WebP
|
||||
- ❌ **شامل شدن همه assets**: حتی اونایی که استفاده نمیشن
|
||||
|
||||
---
|
||||
|
||||
## راهحلها
|
||||
|
||||
### ✅ 1. حذف Assets تکراری
|
||||
|
||||
**مشکل**: شما هم `assets/icons/*.svg` و هم `assets/vec/*.svg.vec` دارید
|
||||
|
||||
**راهحل**:
|
||||
- اگر از VEC استفاده میکنید، SVG ها رو حذف کنید
|
||||
- یا برعکس، اگر SVG استفاده میکنید، VEC ها رو حذف کنید
|
||||
|
||||
### ✅ 2. بهینهسازی تصاویر
|
||||
|
||||
**قبل از اضافه کردن از Figma:**
|
||||
1. تصاویر رو به **WebP** تبدیل کنید (حجم 30-50% کمتر)
|
||||
2. از ابزارهای فشردهسازی استفاده کنید:
|
||||
- [TinyPNG](https://tinypng.com/) برای PNG
|
||||
- [Squoosh](https://squoosh.app/) برای همه فرمتها
|
||||
|
||||
**تبدیل PNG به WebP:**
|
||||
```bash
|
||||
# نصب cwebp (Google WebP tools)
|
||||
# سپس:
|
||||
cwebp -q 80 input.png -o output.webp
|
||||
```
|
||||
|
||||
### ✅ 3. حذف Assets استفاده نشده
|
||||
|
||||
**استفاده از ابزار:**
|
||||
```bash
|
||||
# نصب flutter_unused_assets
|
||||
dart pub global activate flutter_unused_assets
|
||||
|
||||
# بررسی assets استفاده نشده
|
||||
flutter_unused_assets
|
||||
```
|
||||
|
||||
### ✅ 4. بهینهسازی pubspec.yaml
|
||||
|
||||
**به جای:**
|
||||
```yaml
|
||||
assets:
|
||||
- assets/icons/ # همه فایلها
|
||||
- assets/images/
|
||||
```
|
||||
|
||||
**استفاده کنید:**
|
||||
```yaml
|
||||
assets:
|
||||
- assets/icons/add.svg # فقط فایلهای استفاده شده
|
||||
- assets/icons/home.svg
|
||||
- assets/images/inner_splash.webp
|
||||
```
|
||||
|
||||
### ✅ 5. استفاده از Asset Variants
|
||||
|
||||
برای تصاویر بزرگ، از variants استفاده کنید:
|
||||
```
|
||||
assets/images/
|
||||
splash.png # برای density 1.0
|
||||
2.0x/splash.png # برای density 2.0
|
||||
3.0x/splash.png # برای density 3.0
|
||||
```
|
||||
|
||||
### ✅ 6. Lazy Loading برای Assets بزرگ
|
||||
|
||||
برای تصاویر بزرگ که همیشه استفاده نمیشن:
|
||||
```dart
|
||||
// به جای Image.asset
|
||||
FutureBuilder(
|
||||
future: rootBundle.load('assets/images/large_image.webp'),
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.hasData) {
|
||||
return Image.memory(snapshot.data!);
|
||||
}
|
||||
return CircularProgressIndicator();
|
||||
},
|
||||
)
|
||||
```
|
||||
|
||||
### ✅ 7. بهینهسازی Build
|
||||
|
||||
در `android/app/build.gradle.kts` شما این تنظیمات رو دارید (خوبه!):
|
||||
```kotlin
|
||||
isMinifyEnabled = true
|
||||
isShrinkResources = true
|
||||
```
|
||||
|
||||
اما میتونید اضافه کنید:
|
||||
```kotlin
|
||||
buildTypes {
|
||||
release {
|
||||
// ...
|
||||
// اضافه کردن این خط:
|
||||
isDebuggable = false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## چکلیست قبل از اضافه کردن Asset از Figma
|
||||
|
||||
- [ ] آیا این asset قبلاً وجود داره؟
|
||||
- [ ] آیا واقعاً نیاز به این asset دارم؟
|
||||
- [ ] آیا میتونم از asset موجود استفاده کنم؟
|
||||
- [ ] آیا تصویر رو به WebP تبدیل کردم؟
|
||||
- [ ] آیا تصویر رو فشرده کردم؟
|
||||
- [ ] آیا فقط فایلهای لازم رو به pubspec.yaml اضافه کردم؟
|
||||
|
||||
---
|
||||
|
||||
## ابزارهای مفید
|
||||
|
||||
1. **بررسی حجم اپ:**
|
||||
```bash
|
||||
flutter build apk --analyze-size
|
||||
```
|
||||
|
||||
2. **بررسی Assets استفاده نشده:**
|
||||
```bash
|
||||
flutter_unused_assets
|
||||
```
|
||||
|
||||
3. **فشردهسازی تصاویر:**
|
||||
- [TinyPNG](https://tinypng.com/)
|
||||
- [Squoosh](https://squoosh.app/)
|
||||
- [ImageOptim](https://imageoptim.com/)
|
||||
|
||||
4. **تبدیل فرمت:**
|
||||
- PNG → WebP: [CloudConvert](https://cloudconvert.com/)
|
||||
- SVG → Optimized SVG: [SVGOMG](https://jakearchibald.github.io/svgomg/)
|
||||
|
||||
---
|
||||
|
||||
## نکات مهم
|
||||
|
||||
1. **همیشه از WebP استفاده کنید** به جای PNG/JPG (حجم 30-50% کمتر)
|
||||
2. **SVG ها رو optimize کنید** قبل از اضافه کردن
|
||||
3. **Assets استفاده نشده رو حذف کنید** به صورت منظم
|
||||
4. **از Asset Variants استفاده کنید** برای تصاویر با resolution بالا
|
||||
5. **Build Release رو بررسی کنید** نه Debug (Debug حجم بیشتری داره)
|
||||
|
||||
---
|
||||
|
||||
## مثال: کاهش حجم
|
||||
|
||||
**قبل:**
|
||||
- 119 SVG × 10KB = ~1.2 MB
|
||||
- 119 VEC × 8KB = ~950 KB
|
||||
- **جمع: ~2.15 MB فقط برای آیکونها!**
|
||||
|
||||
**بعد از بهینهسازی:**
|
||||
- حذف تکرار: فقط 119 فایل = ~1 MB
|
||||
- بهینهسازی SVG: ~500 KB
|
||||
- **صرفهجویی: ~1.65 MB!**
|
||||
|
||||
---
|
||||
|
||||
## سوالات متداول
|
||||
|
||||
**Q: چرا با اضافه کردن 50 صفحه Dart حجم زیاد میشه؟**
|
||||
A: خود کد Dart حجم کمی داره، اما:
|
||||
- Dependencies جدید اضافه میشن
|
||||
- Assets جدید برای صفحات اضافه میشن
|
||||
- Build artifacts بیشتر میشن
|
||||
|
||||
**Q: آیا باید همه assets رو حذف کنم؟**
|
||||
A: نه! فقط اونایی که استفاده نمیشن رو حذف کنید.
|
||||
|
||||
**Q: چطور بفهمم کدوم assets استفاده نمیشن؟**
|
||||
A: از `flutter_unused_assets` استفاده کنید یا به صورت دستی جستجو کنید.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
sdk.dir=C:\\Users\\Housh11\\AppData\\Local\\Android\\sdk
|
||||
flutter.sdk=C:\\src\\flutter
|
||||
flutter.buildMode=release
|
||||
flutter.versionName=1.3.34
|
||||
flutter.versionCode=31
|
||||
flutter.buildMode=debug
|
||||
flutter.versionName=1.3.43
|
||||
flutter.versionCode=39
|
||||
10
assets/icons/inspection_poultry.svg
Normal file
10
assets/icons/inspection_poultry.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<svg width="49" height="39" viewBox="0 0 49 39" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M17.4876 30.2057C24.5116 30.2057 30.2057 24.5116 30.2057 17.4876C30.2057 10.4636 24.5116 4.76953 17.4876 4.76953C10.4636 4.76953 4.76953 10.4636 4.76953 17.4876C4.76953 24.5116 10.4636 30.2057 17.4876 30.2057Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M33.3852 33.3842L26.4697 26.4688" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M24.0771 14.8029C23.0086 13.7947 21.8333 14.4501 20.9292 15.1325C20.1072 15.7413 19.0757 15.8847 18.7963 15.7878C18.5538 15.5552 18.3853 14.6556 18.2292 13.9925C18.0155 12.965 17.7442 11.6194 16.9511 10.6966L16.9799 10.6656C17.0471 10.5856 17.0969 10.494 17.1265 10.3959C17.1562 10.2977 17.1651 10.1951 17.1527 10.0937C17.1403 9.99234 17.1068 9.89428 17.0543 9.80512C17.0017 9.71596 16.931 9.63743 16.8463 9.57404C16.7616 9.51064 16.6644 9.46361 16.5605 9.43564C16.4565 9.40766 16.3476 9.39928 16.2402 9.41098C16.1328 9.42269 16.0289 9.45424 15.9344 9.50384C15.8399 9.55344 15.7567 9.62011 15.6895 9.70006V9.53332C15.6895 9.32764 15.6029 9.13039 15.4487 8.98495C15.2946 8.83952 15.0855 8.75781 14.8676 8.75781C14.6496 8.75781 14.4405 8.83952 14.2864 8.98495C14.1322 9.13039 14.0456 9.32764 14.0456 9.53332V9.68455L14.0004 9.62638C13.868 9.46287 13.6722 9.35569 13.456 9.32842C13.2398 9.30115 13.021 9.35603 12.8477 9.48097C12.6744 9.60592 12.5608 9.79071 12.5319 9.99469C12.503 10.1987 12.5612 10.4051 12.6936 10.5686L12.7224 10.6035C12.5089 10.8628 12.3486 11.1573 12.2498 11.4721H11.9909C11.7729 11.4721 11.5638 11.5538 11.4097 11.6992C11.2555 11.8447 11.1689 12.0419 11.1689 12.2476C11.1689 12.4533 11.2555 12.6505 11.4097 12.796C11.5638 12.9414 11.7729 13.0231 11.9909 13.0231H12.6977C13.1456 13.4419 13.7785 13.8529 13.7785 14.357C13.7785 14.5664 13.5771 14.8107 13.2484 15.1907C12.3301 16.1026 11.8207 17.314 11.8265 18.5719C11.8265 20.8984 13.3552 22.019 14.8347 23.0931C15.9977 23.9384 16.573 24.5899 17.7442 24.8613V26.2068H17.3333C17.1153 26.2068 16.9062 26.2885 16.7521 26.4339C16.598 26.5794 16.5114 26.7766 16.5114 26.9823C16.5114 27.188 16.598 27.3852 16.7521 27.5307C16.9062 27.6761 17.1153 27.7578 17.3333 27.7578H19.3881C19.6061 27.7578 19.8151 27.6761 19.9692 27.5307C20.1234 27.3852 20.21 27.188 20.21 26.9823C20.21 26.7766 20.1234 26.5794 19.9692 26.4339C19.8151 26.2885 19.6061 26.2068 19.3881 26.2068V24.8458C20.4902 24.6063 21.4789 24.0329 22.2031 23.2133C23.6785 21.3599 23.5305 21.0148 24.2579 20.2974C24.6334 19.9627 24.9157 19.5459 25.0798 19.0837C25.3962 18.2501 24.825 15.5047 24.0771 14.8029ZM23.5346 18.6068C23.4449 18.8468 23.2905 19.0606 23.0867 19.2272C22.7339 19.5461 22.4419 19.9199 22.2237 20.3323C21.8341 21.0174 21.3875 21.6721 20.8881 22.2905C20.5892 22.6159 20.2252 22.8825 19.8168 23.0748C19.4085 23.2671 18.9639 23.3814 18.5086 23.4111C17.5963 23.4111 17.0374 22.7403 15.8415 21.8601C14.4689 20.8596 13.4744 20.1384 13.4744 18.5641C13.4747 17.6661 13.8514 16.8047 14.5223 16.1678C14.9662 15.656 15.4265 15.1286 15.4265 14.3531C15.4265 13.2635 14.6045 12.5733 14.0867 12.1196C14.0045 12.0499 13.9018 11.9607 13.8278 11.8947C13.87 11.7237 13.9674 11.5692 14.1065 11.4526C14.2456 11.3359 14.4196 11.2628 14.6045 11.2433C15.7963 11.2433 16.1744 12.1429 16.6182 14.2911C16.8566 15.4543 17.0621 16.447 17.7648 17.0054C18.7264 17.7615 20.7442 17.2652 21.9565 16.3501C22.6059 15.8615 22.8606 15.8537 22.9017 15.8886C23.1976 16.2415 23.6415 18.1376 23.5346 18.6029V18.6068Z" fill="white"/>
|
||||
<path d="M19.128 19.1849C18.9796 19.3766 18.8011 19.4699 18.6209 19.4501C18.0798 19.4501 17.3842 18.4182 17.2017 18.055C17.0839 17.8567 16.9297 17.7504 16.771 17.7582C16.6123 17.766 16.4613 17.8873 16.3493 18.0969C16.2372 18.3066 16.1727 18.5886 16.1691 18.8844C16.1655 19.1803 16.223 19.4675 16.3298 19.6865C16.4566 19.8998 17.4707 21.756 18.6209 21.756C19.1215 21.7853 19.6091 21.4575 19.9845 20.8394C20.0429 20.7321 20.0893 20.6043 20.121 20.4632C20.1526 20.3222 20.1689 20.1708 20.1689 20.0179C20.1689 19.865 20.1526 19.7137 20.121 19.5726C20.0893 19.4316 20.0429 19.3037 19.9845 19.1964C19.8701 18.9888 19.7171 18.8716 19.5575 18.8695C19.3978 18.8673 19.244 18.9804 19.128 19.1849Z" fill="white"/>
|
||||
<path d="M44.5688 28.3654H37.9374C35.434 28.3654 34 26.8065 34 24.0853V15.2997C34 12.4613 35.3263 11.0195 37.9374 11.0195C38.2773 11.0195 38.5591 11.3259 38.5591 11.6953C38.5591 12.0558 38.6917 12.3982 38.9238 12.6505C39.1559 12.9028 39.4709 13.047 39.8025 13.047H42.7037C43.3918 13.047 43.9471 12.4432 43.9471 11.6953C43.9471 11.3259 44.229 11.0195 44.5688 11.0195C47.1799 11.0195 48.5062 12.4613 48.5062 15.2997V24.0853C48.5062 26.8065 47.0722 28.3654 44.5688 28.3654ZM37.3986 12.3892C36.0889 12.5063 35.2434 13.1461 35.2434 15.2997V24.0853C35.2434 26.0857 36.0972 27.0138 37.9374 27.0138H44.5688C46.409 27.0138 47.2628 26.0857 47.2628 24.0853V15.2997C47.2628 13.1461 46.4174 12.5153 45.1077 12.3892C44.8258 13.5426 43.8559 14.3986 42.7037 14.3986H39.8025C39.1394 14.3986 38.5177 14.1193 38.0452 13.6056C37.7302 13.2632 37.5146 12.8487 37.3986 12.3892Z" fill="white" stroke="white" stroke-width="0.25"/>
|
||||
<path d="M42.7039 14.4065H39.8027C39.1396 14.4065 38.5179 14.1272 38.0454 13.6136C37.5729 13.0999 37.3159 12.4241 37.3159 11.7033C37.3159 10.2165 38.435 9 39.8027 9H42.7039C43.3671 9 43.9888 9.27934 44.4613 9.79296C44.9338 10.3066 45.1907 10.9824 45.1907 11.7033C45.1907 13.19 44.0717 14.4065 42.7039 14.4065ZM39.8027 10.3516C39.1147 10.3516 38.5593 10.9554 38.5593 11.7033C38.5593 12.0637 38.6919 12.4061 38.924 12.6584C39.1561 12.9107 39.4711 13.0549 39.8027 13.0549H42.7039C43.392 13.0549 43.9473 12.4512 43.9473 11.7033C43.9473 11.3428 43.8147 11.0004 43.5826 10.7481C43.3505 10.4958 43.0355 10.3516 42.7039 10.3516H39.8027Z" fill="white"/>
|
||||
<path d="M41.2533 20.2501H37.9376C37.5978 20.2501 37.3159 19.9437 37.3159 19.5743C37.3159 19.2048 37.5978 18.8984 37.9376 18.8984H41.2533C41.5932 18.8984 41.875 19.2048 41.875 19.5743C41.875 19.9437 41.5932 20.2501 41.2533 20.2501Z" fill="white"/>
|
||||
<path d="M44.569 23.8555H37.9376C37.5978 23.8555 37.3159 23.5492 37.3159 23.1797C37.3159 22.8103 37.5978 22.5039 37.9376 22.5039H44.569C44.9089 22.5039 45.1907 22.8103 45.1907 23.1797C45.1907 23.5492 44.9089 23.8555 44.569 23.8555Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.2 KiB |
BIN
assets/vec/inspection_poultry.svg.vec
Normal file
BIN
assets/vec/inspection_poultry.svg.vec
Normal file
Binary file not shown.
@@ -1,4 +1,6 @@
|
||||
description: This file stores settings for Dart & Flutter DevTools.
|
||||
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
|
||||
extensions:
|
||||
- hive_ce: true
|
||||
- hive_ce: true
|
||||
- provider: true
|
||||
- shared_preferences: true
|
||||
@@ -19,6 +19,7 @@ abstract class Info with _$Info {
|
||||
String? minVersion,
|
||||
String? module,
|
||||
bool? required,
|
||||
List<String>? changes,
|
||||
}) = _Info;
|
||||
|
||||
factory Info.fromJson(Map<String, dynamic> json) => _$InfoFromJson(json);
|
||||
|
||||
@@ -308,7 +308,7 @@ $InfoCopyWith<$Res>? get info {
|
||||
/// @nodoc
|
||||
mixin _$Info {
|
||||
|
||||
String? get version; String? get minVersion; String? get module; bool? get required;
|
||||
String? get version; String? get minVersion; String? get module; bool? get required; List<String>? get changes;
|
||||
/// Create a copy of Info
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@@ -321,16 +321,16 @@ $InfoCopyWith<Info> get copyWith => _$InfoCopyWithImpl<Info>(this as Info, _$ide
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is Info&&(identical(other.version, version) || other.version == version)&&(identical(other.minVersion, minVersion) || other.minVersion == minVersion)&&(identical(other.module, module) || other.module == module)&&(identical(other.required, required) || other.required == required));
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is Info&&(identical(other.version, version) || other.version == version)&&(identical(other.minVersion, minVersion) || other.minVersion == minVersion)&&(identical(other.module, module) || other.module == module)&&(identical(other.required, required) || other.required == required)&&const DeepCollectionEquality().equals(other.changes, changes));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,version,minVersion,module,required);
|
||||
int get hashCode => Object.hash(runtimeType,version,minVersion,module,required,const DeepCollectionEquality().hash(changes));
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'Info(version: $version, minVersion: $minVersion, module: $module, required: $required)';
|
||||
return 'Info(version: $version, minVersion: $minVersion, module: $module, required: $required, changes: $changes)';
|
||||
}
|
||||
|
||||
|
||||
@@ -341,7 +341,7 @@ abstract mixin class $InfoCopyWith<$Res> {
|
||||
factory $InfoCopyWith(Info value, $Res Function(Info) _then) = _$InfoCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String? version, String? minVersion, String? module, bool? required
|
||||
String? version, String? minVersion, String? module, bool? required, List<String>? changes
|
||||
});
|
||||
|
||||
|
||||
@@ -358,13 +358,14 @@ class _$InfoCopyWithImpl<$Res>
|
||||
|
||||
/// Create a copy of Info
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? version = freezed,Object? minVersion = freezed,Object? module = freezed,Object? required = freezed,}) {
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? version = freezed,Object? minVersion = freezed,Object? module = freezed,Object? required = freezed,Object? changes = freezed,}) {
|
||||
return _then(_self.copyWith(
|
||||
version: freezed == version ? _self.version : version // ignore: cast_nullable_to_non_nullable
|
||||
as String?,minVersion: freezed == minVersion ? _self.minVersion : minVersion // ignore: cast_nullable_to_non_nullable
|
||||
as String?,module: freezed == module ? _self.module : module // ignore: cast_nullable_to_non_nullable
|
||||
as String?,required: freezed == required ? _self.required : required // ignore: cast_nullable_to_non_nullable
|
||||
as bool?,
|
||||
as bool?,changes: freezed == changes ? _self.changes : changes // ignore: cast_nullable_to_non_nullable
|
||||
as List<String>?,
|
||||
));
|
||||
}
|
||||
|
||||
@@ -449,10 +450,10 @@ return $default(_that);case _:
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String? version, String? minVersion, String? module, bool? required)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String? version, String? minVersion, String? module, bool? required, List<String>? changes)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Info() when $default != null:
|
||||
return $default(_that.version,_that.minVersion,_that.module,_that.required);case _:
|
||||
return $default(_that.version,_that.minVersion,_that.module,_that.required,_that.changes);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
@@ -470,10 +471,10 @@ return $default(_that.version,_that.minVersion,_that.module,_that.required);case
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String? version, String? minVersion, String? module, bool? required) $default,) {final _that = this;
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String? version, String? minVersion, String? module, bool? required, List<String>? changes) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Info():
|
||||
return $default(_that.version,_that.minVersion,_that.module,_that.required);case _:
|
||||
return $default(_that.version,_that.minVersion,_that.module,_that.required,_that.changes);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
@@ -490,10 +491,10 @@ return $default(_that.version,_that.minVersion,_that.module,_that.required);case
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String? version, String? minVersion, String? module, bool? required)? $default,) {final _that = this;
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String? version, String? minVersion, String? module, bool? required, List<String>? changes)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Info() when $default != null:
|
||||
return $default(_that.version,_that.minVersion,_that.module,_that.required);case _:
|
||||
return $default(_that.version,_that.minVersion,_that.module,_that.required,_that.changes);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
@@ -505,13 +506,22 @@ return $default(_that.version,_that.minVersion,_that.module,_that.required);case
|
||||
@JsonSerializable()
|
||||
|
||||
class _Info implements Info {
|
||||
const _Info({this.version, this.minVersion, this.module, this.required});
|
||||
const _Info({this.version, this.minVersion, this.module, this.required, final List<String>? changes}): _changes = changes;
|
||||
factory _Info.fromJson(Map<String, dynamic> json) => _$InfoFromJson(json);
|
||||
|
||||
@override final String? version;
|
||||
@override final String? minVersion;
|
||||
@override final String? module;
|
||||
@override final bool? required;
|
||||
final List<String>? _changes;
|
||||
@override List<String>? get changes {
|
||||
final value = _changes;
|
||||
if (value == null) return null;
|
||||
if (_changes is EqualUnmodifiableListView) return _changes;
|
||||
// ignore: implicit_dynamic_type
|
||||
return EqualUnmodifiableListView(value);
|
||||
}
|
||||
|
||||
|
||||
/// Create a copy of Info
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@@ -526,16 +536,16 @@ Map<String, dynamic> toJson() {
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Info&&(identical(other.version, version) || other.version == version)&&(identical(other.minVersion, minVersion) || other.minVersion == minVersion)&&(identical(other.module, module) || other.module == module)&&(identical(other.required, required) || other.required == required));
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Info&&(identical(other.version, version) || other.version == version)&&(identical(other.minVersion, minVersion) || other.minVersion == minVersion)&&(identical(other.module, module) || other.module == module)&&(identical(other.required, required) || other.required == required)&&const DeepCollectionEquality().equals(other._changes, _changes));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,version,minVersion,module,required);
|
||||
int get hashCode => Object.hash(runtimeType,version,minVersion,module,required,const DeepCollectionEquality().hash(_changes));
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'Info(version: $version, minVersion: $minVersion, module: $module, required: $required)';
|
||||
return 'Info(version: $version, minVersion: $minVersion, module: $module, required: $required, changes: $changes)';
|
||||
}
|
||||
|
||||
|
||||
@@ -546,7 +556,7 @@ abstract mixin class _$InfoCopyWith<$Res> implements $InfoCopyWith<$Res> {
|
||||
factory _$InfoCopyWith(_Info value, $Res Function(_Info) _then) = __$InfoCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
String? version, String? minVersion, String? module, bool? required
|
||||
String? version, String? minVersion, String? module, bool? required, List<String>? changes
|
||||
});
|
||||
|
||||
|
||||
@@ -563,13 +573,14 @@ class __$InfoCopyWithImpl<$Res>
|
||||
|
||||
/// Create a copy of Info
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? version = freezed,Object? minVersion = freezed,Object? module = freezed,Object? required = freezed,}) {
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? version = freezed,Object? minVersion = freezed,Object? module = freezed,Object? required = freezed,Object? changes = freezed,}) {
|
||||
return _then(_Info(
|
||||
version: freezed == version ? _self.version : version // ignore: cast_nullable_to_non_nullable
|
||||
as String?,minVersion: freezed == minVersion ? _self.minVersion : minVersion // ignore: cast_nullable_to_non_nullable
|
||||
as String?,module: freezed == module ? _self.module : module // ignore: cast_nullable_to_non_nullable
|
||||
as String?,required: freezed == required ? _self.required : required // ignore: cast_nullable_to_non_nullable
|
||||
as bool?,
|
||||
as bool?,changes: freezed == changes ? _self._changes : changes // ignore: cast_nullable_to_non_nullable
|
||||
as List<String>?,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,9 @@ _Info _$InfoFromJson(Map<String, dynamic> json) => _Info(
|
||||
minVersion: json['minVersion'] as String?,
|
||||
module: json['module'] as String?,
|
||||
required: json['required'] as bool?,
|
||||
changes: (json['changes'] as List<dynamic>?)
|
||||
?.map((e) => e as String)
|
||||
.toList(),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$InfoToJson(_Info instance) => <String, dynamic>{
|
||||
@@ -34,4 +37,5 @@ Map<String, dynamic> _$InfoToJson(_Info instance) => <String, dynamic>{
|
||||
'minVersion': instance.minVersion,
|
||||
'module': instance.module,
|
||||
'required': instance.required,
|
||||
'changes': instance.changes,
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:rasadyar_app/presentation/routes/app_pages.dart';
|
||||
import 'package:rasadyar_chicken/data/di/chicken_di.dart';
|
||||
import 'package:rasadyar_chicken/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/features/steward/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
import 'package:rasadyar_inspection/injection/inspection_di.dart';
|
||||
import 'package:rasadyar_inspection/inspection.dart';
|
||||
@@ -22,7 +22,7 @@ Future<void> seedTargetPage() async {
|
||||
functions: ["setupLiveStockDI"],
|
||||
),
|
||||
TargetPage(
|
||||
route: ChickenRoutes.initSteward,
|
||||
route: StewardRoutes.initSteward,
|
||||
module: Module.chicken,
|
||||
functions: ["setupChickenDI"],
|
||||
),
|
||||
|
||||
@@ -94,15 +94,15 @@ class ModulesLogic extends GetxController {
|
||||
|
||||
void _goToModule(Module module, int index) async {
|
||||
selectedIndex.value = index;
|
||||
await Future.delayed(Duration(milliseconds: 300));
|
||||
await Future.delayed(Duration(milliseconds: 100));
|
||||
selectedIndex.value = null;
|
||||
// saveModule(module);
|
||||
|
||||
await navigateToModule(module);
|
||||
}
|
||||
|
||||
Future<void> navigateToModule(Module module) async {
|
||||
var target = getAuthTargetPage(module).entries.first;
|
||||
|
||||
|
||||
if (target.value?[0] != null) {
|
||||
isLoading.value = !isLoading.value;
|
||||
await target.value?[0]?.call();
|
||||
|
||||
@@ -14,6 +14,7 @@ class SplashLogic extends GetxController with GetTickerProviderStateMixin {
|
||||
RxBool hasUpdated = false.obs;
|
||||
RxBool onUpdateDownload = false.obs;
|
||||
RxDouble percent = 0.0.obs;
|
||||
RxString strVersion = ''.obs;
|
||||
final RxnString _updateFilePath = RxnString();
|
||||
final platform = MethodChannel('apk_installer');
|
||||
final Dio _dio = Dio();
|
||||
@@ -35,9 +36,15 @@ class SplashLogic extends GetxController with GetTickerProviderStateMixin {
|
||||
duration: const Duration(milliseconds: 8000),
|
||||
);
|
||||
|
||||
scaleAnimation.value = Tween<double>(begin: 0.8, end: 1.2).animate(scaleController);
|
||||
scaleAnimation.value = Tween<double>(
|
||||
begin: 0.8,
|
||||
end: 1.2,
|
||||
).animate(scaleController);
|
||||
|
||||
rotationAnimation.value = Tween<double>(begin: 0.0, end: 1).animate(rotateController);
|
||||
rotationAnimation.value = Tween<double>(
|
||||
begin: 0.0,
|
||||
end: 1,
|
||||
).animate(rotateController);
|
||||
|
||||
rotateController.forward();
|
||||
rotateController.addStatusListener((status) {
|
||||
@@ -63,6 +70,7 @@ class SplashLogic extends GetxController with GetTickerProviderStateMixin {
|
||||
onConfirm: () async {
|
||||
await fileDownload();
|
||||
},
|
||||
changes: appInfoModel?.info?.changes,
|
||||
);
|
||||
} else if (!data && Get.isDialogOpen == true) {
|
||||
Get.back();
|
||||
@@ -164,8 +172,6 @@ class SplashLogic extends GetxController with GetTickerProviderStateMixin {
|
||||
if (target != null) {
|
||||
var mFuns = getFunctionsList(target.functions);
|
||||
await Future.wait(mFuns ?? []);
|
||||
|
||||
iLog("target.route ===>${target.route!}");
|
||||
Get.offAndToNamed(target.route!);
|
||||
}
|
||||
} catch (e, st) {
|
||||
@@ -184,8 +190,12 @@ class SplashLogic extends GetxController with GetTickerProviderStateMixin {
|
||||
Future<bool> checkVersion() async {
|
||||
try {
|
||||
final info = await PackageInfo.fromPlatform();
|
||||
int version = info.version.versionNumber;
|
||||
var res = await _dio.get("https://rsibackend.rasadyar.com/app/rasadyar-app-info/");
|
||||
strVersion.value = info.version;
|
||||
int version = strVersion.value.versionNumber;
|
||||
|
||||
var res = await _dio.get(
|
||||
"https://rsibackend.rasadyar.com/app/rasadyar-app-info/",
|
||||
);
|
||||
|
||||
appInfoModel = AppInfoModel.fromJson(res.data);
|
||||
|
||||
@@ -244,7 +254,9 @@ class SplashLogic extends GetxController with GetTickerProviderStateMixin {
|
||||
Future<void> installApk() async {
|
||||
try {
|
||||
eLog(_updateFilePath.value);
|
||||
await platform.invokeMethod('apk_installer', {'appPath': _updateFilePath.value});
|
||||
await platform.invokeMethod('apk_installer', {
|
||||
'appPath': _updateFilePath.value,
|
||||
});
|
||||
} catch (e) {
|
||||
eLog(e);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
|
||||
import 'logic.dart';
|
||||
|
||||
class SplashPage extends GetView<SplashLogic> {
|
||||
@@ -11,36 +10,51 @@ class SplashPage extends GetView<SplashLogic> {
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: AppColor.blueDarker,
|
||||
body: Center(
|
||||
child: Stack(
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
body: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Spacer(),
|
||||
Center(
|
||||
child: Stack(
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
ObxValue((data) {
|
||||
return ScaleTransition(
|
||||
scale: data.value!,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 1),
|
||||
child: Assets.images.innerSplash.image(
|
||||
width: 190,
|
||||
height: 190,
|
||||
),
|
||||
),
|
||||
);
|
||||
}, controller.scaleAnimation),
|
||||
|
||||
ObxValue((data) {
|
||||
return ScaleTransition(
|
||||
scale: data.value!,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 1),
|
||||
child: Assets.images.innerSplash.image(
|
||||
width: 190,
|
||||
height: 190,
|
||||
)
|
||||
),
|
||||
);
|
||||
}, controller.scaleAnimation),
|
||||
ObxValue((data) {
|
||||
return RotationTransition(
|
||||
turns: data.value!,
|
||||
|
||||
ObxValue((data) {
|
||||
return RotationTransition(
|
||||
turns: data.value!,
|
||||
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 1),
|
||||
child: Assets.images.outterSplash.image()
|
||||
),
|
||||
);
|
||||
}, controller.rotationAnimation),
|
||||
],
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 1),
|
||||
child: Assets.images.outterSplash.image(),
|
||||
),
|
||||
);
|
||||
}, controller.rotationAnimation),
|
||||
],
|
||||
),
|
||||
),
|
||||
Spacer(),
|
||||
ObxValue((data) {
|
||||
return Text(
|
||||
data.value,
|
||||
style: AppFonts.yekan16.copyWith(
|
||||
color: Colors.white.withAlpha(120),
|
||||
),
|
||||
);
|
||||
}, controller.strVersion),
|
||||
SizedBox(height: 30.h),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
74
output.json
Normal file
74
output.json
Normal file
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"lat": 35.8245784,
|
||||
"log": 50.9479516,
|
||||
"hatching_id": 4560,
|
||||
"role": "SuperAdmin",
|
||||
"report_information": {
|
||||
"general_condition_hall": {
|
||||
"images": [
|
||||
"https://s3.rasadyar.com/rasadyar/202512141551550.jpg",
|
||||
"https://s3.rasadyar.com/rasadyar/202512141551560.jpg"
|
||||
],
|
||||
"health_status": "عالی",
|
||||
"ventilation_status": "عالی",
|
||||
"bed_condition": "خشک",
|
||||
"temperature": 25,
|
||||
"drinking_water_source": null,
|
||||
"drinking_water_quality": null
|
||||
},
|
||||
"casualties": {
|
||||
"normal_losses": null,
|
||||
"abnormal_losses": null,
|
||||
"source_of_hatching": null,
|
||||
"cause_abnormal_losses": null,
|
||||
"type_disease": null,
|
||||
"sampling_done": null,
|
||||
"type_sampling": null,
|
||||
"images": null
|
||||
},
|
||||
"technical_officer": {
|
||||
"technical_health_officer": "",
|
||||
"technical_engineering_officer": ""
|
||||
},
|
||||
"input_status": {
|
||||
"input_status": null,
|
||||
"company_name": null,
|
||||
"tracking_code": "",
|
||||
"type_of_grain": null,
|
||||
"inventory_in_warehouse": "",
|
||||
"inventory_until_visit": "",
|
||||
"grade_grain": null,
|
||||
"images": null
|
||||
},
|
||||
"infrastructure_energy": {
|
||||
"generator_type": "",
|
||||
"generator_model": "",
|
||||
"generator_count": "",
|
||||
"generator_capacity": "",
|
||||
"fuel_type": null,
|
||||
"generator_performance": null,
|
||||
"emergency_fuel_inventory": "",
|
||||
"has_power_cut_history": null,
|
||||
"power_cut_duration": "",
|
||||
"power_cut_hour": "",
|
||||
"additional_notes": ""
|
||||
},
|
||||
"hr": {
|
||||
"number_employed": null,
|
||||
"number_indigenous": null,
|
||||
"number_non_indigenous": null,
|
||||
"contract_status": null,
|
||||
"trained": null
|
||||
},
|
||||
"facilities": {
|
||||
"has_facilities": null,
|
||||
"type_of_facility": null,
|
||||
"amount": null,
|
||||
"date": null,
|
||||
"repayment_status": null,
|
||||
"request_facilities": null
|
||||
},
|
||||
"inspection_status": "تایید شده",
|
||||
"inspection_notes": "تست"
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
description: This file stores settings for Dart & Flutter DevTools.
|
||||
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
|
||||
extensions:
|
||||
- hive_ce: true
|
||||
- hive_ce: true
|
||||
- provider: true
|
||||
- shared_preferences: true
|
||||
@@ -1,3 +1,13 @@
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/features/province_inspector/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/features/province_operator/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/features/province_supervisor/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/features/steward/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/features/super_admin/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/features/jahad/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/features/vet_farm/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/presentation/routes/routes.dart';
|
||||
|
||||
String getFaUserRole(String? role) {
|
||||
@@ -88,7 +98,7 @@ Map<String, String?> getFaUserRoleWithOnTap(String? role) {
|
||||
case "Poultry":
|
||||
return {"مرغدار": null};
|
||||
case "ProvinceOperator":
|
||||
return {"مدیر اجرایی": null};
|
||||
return {"مدیر اجرایی": ProvinceOperatorRoutes.initProvinceOperator};
|
||||
case "ProvinceFinancial":
|
||||
return {"مالی اتحادیه": null};
|
||||
case "KillHouse":
|
||||
@@ -96,17 +106,17 @@ Map<String, String?> getFaUserRoleWithOnTap(String? role) {
|
||||
case "KillHouseVet":
|
||||
return {"دامپزشک کشتارگاه": null};
|
||||
case "VetFarm":
|
||||
return {"دامپزشک فارم": null};
|
||||
return {"دامپزشک فارم": VetFarmRoutes.initVetFarm};
|
||||
case "Driver":
|
||||
return {"راننده": null};
|
||||
case "ProvinceInspector":
|
||||
return {"بازرس اتحادیه": null};
|
||||
return {"بازرس اتحادیه": ProvinceInspectorRoutes.initProvinceInspector};
|
||||
case "VetSupervisor":
|
||||
return {"دامپزشک کل": null};
|
||||
case "Jahad":
|
||||
return {"جهاد کشاورزی استان": null};
|
||||
return {"جهاد کشاورزی استان": JahadRoutes.initJahad};
|
||||
case "CityJahad":
|
||||
return {"جهاد کشاورزی شهرستان": null};
|
||||
return {"جهاد کشاورزی شهرستان": CityJahadRoutes.initCityJahad};
|
||||
case "ProvincialGovernment":
|
||||
return {"استانداری": null};
|
||||
case "Guilds":
|
||||
@@ -122,7 +132,7 @@ Map<String, String?> getFaUserRoleWithOnTap(String? role) {
|
||||
case "Observatory":
|
||||
return {"رصدخانه": null};
|
||||
case "ProvinceSupervisor":
|
||||
return {"ناظر استان": null};
|
||||
return {"ناظر استان": ProvinceSupervisorRoutes.initProvinceSupervisor};
|
||||
case "GuildRoom":
|
||||
return {"اتاق اصناف": null};
|
||||
case "PosCompany":
|
||||
@@ -130,7 +140,7 @@ Map<String, String?> getFaUserRoleWithOnTap(String? role) {
|
||||
case "LiveStockSupport":
|
||||
return {"پشتیبانی امور دام": null};
|
||||
case "SuperAdmin":
|
||||
return {"ادمین کل": null};
|
||||
return {"ادمین کل": SuperAdminRoutes.initSuperAdmin};
|
||||
case "ChainCompany":
|
||||
return {"شرکت زنجیره": null};
|
||||
case "AdminX":
|
||||
@@ -140,7 +150,7 @@ Map<String, String?> getFaUserRoleWithOnTap(String? role) {
|
||||
case "Dispenser":
|
||||
return {"پخش کننده": null};
|
||||
case "CityPoultry":
|
||||
return {"طیور شهرستان": null};
|
||||
return {"طیور شهرستان": CityPoultryRoutes.initCityPoultry};
|
||||
case "ParentCompany":
|
||||
return {"شرکت مادر": null};
|
||||
case "ColdHouseSteward":
|
||||
@@ -150,9 +160,9 @@ Map<String, String?> getFaUserRoleWithOnTap(String? role) {
|
||||
case "LiveStockProvinceJahad":
|
||||
return {"جهاد استان": null};
|
||||
case "Steward":
|
||||
return {"مباشر": ChickenRoutes.initSteward};
|
||||
return {"مباشر": StewardRoutes.initSteward};
|
||||
case "PoultryScience":
|
||||
return {"کارشناس طیور": ChickenRoutes.initPoultryScience};
|
||||
return {"کارشناس طیور": PoultryScienceRoutes.initPoultryScience};
|
||||
default:
|
||||
return {"نامشخص": null};
|
||||
}
|
||||
|
||||
@@ -1,180 +0,0 @@
|
||||
import 'package:rasadyar_chicken/data/models/request/change_password/change_password_request_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/conform_allocation/conform_allocation.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/create_steward_free_bar/create_steward_free_bar.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/steward_free_sale_bar/steward_free_sale_bar_request.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/submit_steward_allocation/submit_steward_allocation.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/allocated_made/allocated_made.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/bar_information/bar_information.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/broadcast_price/broadcast_price.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/dashboard_kill_house_free_bar/dashboard_kill_house_free_bar.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/guild/guild_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/guild_profile/guild_profile.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/imported_loads_model/imported_loads_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/inventory/inventory_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/iran_province_city/iran_province_city_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/kill_house_distribution_info/kill_house_distribution_info.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/out_province_carcasses_buyer/out_province_carcasses_buyer.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/roles_products/roles_products.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/segmentation_model/segmentation_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_free_bar/steward_free_bar.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_free_bar_dashboard/steward_free_bar_dashboard.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_free_sale_bar/steward_free_sale_bar.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_remain_weight/steward_remain_weight.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_sales_info_dashboard/steward_sales_info_dashboard.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/user_profile/user_profile.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/waiting_arrival/waiting_arrival.dart'
|
||||
hide ProductModel;
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
abstract class ChickenRemoteDatasource {
|
||||
Future<List<InventoryModel>?> getInventory({required String token, CancelToken? cancelToken});
|
||||
|
||||
Future<KillHouseDistributionInfo?> getKillHouseDistributionInfo({required String token});
|
||||
|
||||
Future<BarInformation?> getGeneralBarInformation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<PaginationModel<WaitingArrivalModel>?> getWaitingArrivals({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> setSateForArrivals({required String token, required Map<String, dynamic> request});
|
||||
|
||||
Future<PaginationModel<ImportedLoadsModel>?> getImportedLoadsModel({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<PaginationModel<AllocatedMadeModel>?> getAllocatedMade({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> confirmAllocation({required String token, required Map<String, dynamic> allocation});
|
||||
|
||||
Future<void> denyAllocation({required String token, required String allocationToken});
|
||||
|
||||
Future<void> confirmAllAllocation({
|
||||
required String token,
|
||||
required List<String> allocationTokens,
|
||||
});
|
||||
|
||||
Future<List<ProductModel>?> getRolesProducts({required String token});
|
||||
|
||||
Future<List<GuildModel>?> getGuilds({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<GuildProfile?> getProfile({required String token});
|
||||
|
||||
Future<void> postSubmitStewardAllocation({
|
||||
required String token,
|
||||
required SubmitStewardAllocation request,
|
||||
});
|
||||
|
||||
Future<void> deleteStewardAllocation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> updateStewardAllocation({required String token, required ConformAllocation request});
|
||||
|
||||
Future<StewardFreeBarDashboard?> getStewardDashboard({
|
||||
required String token,
|
||||
required String stratDate,
|
||||
required String endDate,
|
||||
});
|
||||
|
||||
Future<DashboardKillHouseFreeBar?> getDashboardKillHouseFreeBar({
|
||||
required String token,
|
||||
required String stratDate,
|
||||
required String endDate,
|
||||
});
|
||||
|
||||
Future<PaginationModel<StewardFreeBar>?> getStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> createStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
required CreateStewardFreeBar body,
|
||||
});
|
||||
|
||||
Future<void> deleteStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<CreateStewardFreeBar?> editStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
|
||||
Future<PaginationModel<OutProvinceCarcassesBuyer>?> getOutProvinceCarcassesBuyer({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> createOutProvinceCarcassesBuyer({
|
||||
required String token,
|
||||
required OutProvinceCarcassesBuyer body,
|
||||
});
|
||||
|
||||
Future<List<IranProvinceCityModel>?> getProvince({CancelToken? cancelToken});
|
||||
|
||||
Future<List<IranProvinceCityModel>?> getCity({required String provinceName});
|
||||
|
||||
Future<PaginationModel<StewardFreeSaleBar>?> getStewardFreeSaleBar({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> createOutProvinceStewardFreeBar({
|
||||
required String token,
|
||||
required StewardFreeSaleBarRequest body,
|
||||
});
|
||||
|
||||
Future<void> updateOutProvinceStewardFreeBar({
|
||||
required String token,
|
||||
required StewardFreeSaleBarRequest body,
|
||||
});
|
||||
|
||||
|
||||
Future<void> deleteOutProvinceStewardFreeBar({
|
||||
required String token,
|
||||
required String key
|
||||
});
|
||||
|
||||
|
||||
Future<UserProfile?> getUserProfile({required String token});
|
||||
|
||||
Future<void> updateUserProfile({required String token, required UserProfile userProfile});
|
||||
|
||||
Future<void> updatePassword({required String token, required ChangePasswordRequestModel model});
|
||||
|
||||
Future<PaginationModel<SegmentationModel>?> getSegmentation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> createSegmentation({required String token, required SegmentationModel model});
|
||||
|
||||
Future<void> editSegmentation({required String token, required SegmentationModel model});
|
||||
|
||||
Future<SegmentationModel?> deleteSegmentation({required String token, required String key});
|
||||
|
||||
Future<BroadcastPrice?> getBroadcastPrice({required String token});
|
||||
|
||||
Future<StewardSalesInfoDashboard?> getStewardSalesInfoDashboard({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<StewardRemainWeight?> getStewardRemainWeight({required String token});
|
||||
}
|
||||
@@ -1,548 +0,0 @@
|
||||
import 'package:rasadyar_chicken/data/models/request/change_password/change_password_request_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/conform_allocation/conform_allocation.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/create_steward_free_bar/create_steward_free_bar.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/steward_free_sale_bar/steward_free_sale_bar_request.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/submit_steward_allocation/submit_steward_allocation.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/allocated_made/allocated_made.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/bar_information/bar_information.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/broadcast_price/broadcast_price.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/dashboard_kill_house_free_bar/dashboard_kill_house_free_bar.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/guild/guild_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/guild_profile/guild_profile.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/imported_loads_model/imported_loads_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/inventory/inventory_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/iran_province_city/iran_province_city_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/kill_house_distribution_info/kill_house_distribution_info.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/out_province_carcasses_buyer/out_province_carcasses_buyer.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/roles_products/roles_products.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/segmentation_model/segmentation_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_free_bar/steward_free_bar.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_free_bar_dashboard/steward_free_bar_dashboard.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_free_sale_bar/steward_free_sale_bar.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_remain_weight/steward_remain_weight.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_sales_info_dashboard/steward_sales_info_dashboard.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/user_profile/user_profile.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/waiting_arrival/waiting_arrival.dart'
|
||||
hide ProductModel;
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
import 'chicken_remote.dart';
|
||||
|
||||
class ChickenRemoteDatasourceImp implements ChickenRemoteDatasource {
|
||||
final DioRemote _httpClient;
|
||||
|
||||
ChickenRemoteDatasourceImp(this._httpClient);
|
||||
|
||||
@override
|
||||
Future<List<InventoryModel>?> getInventory({
|
||||
required String token,
|
||||
CancelToken? cancelToken,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/roles-products/?role=Steward',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
|
||||
fromJsonList: (json) =>
|
||||
(json).map((item) => InventoryModel.fromJson(item as Map<String, dynamic>)).toList(),
|
||||
);
|
||||
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<KillHouseDistributionInfo?> getKillHouseDistributionInfo({required String token}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/kill-house-distribution-info/?role=Steward',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: KillHouseDistributionInfo.fromJson,
|
||||
);
|
||||
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BarInformation?> getGeneralBarInformation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/bars_for_kill_house_dashboard/',
|
||||
queryParameters: queryParameters,
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: BarInformation.fromJson,
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<WaitingArrivalModel>?> getWaitingArrivals({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/steward-allocation/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
queryParameters: queryParameters,
|
||||
fromJson: (json) => PaginationModel<WaitingArrivalModel>.fromJson(
|
||||
json,
|
||||
(json) => WaitingArrivalModel.fromJson(json as Map<String, dynamic>),
|
||||
),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> setSateForArrivals({
|
||||
required String token,
|
||||
required Map<String, dynamic> request,
|
||||
}) async {
|
||||
await _httpClient.put(
|
||||
'/steward-allocation/0/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
data: request,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<ImportedLoadsModel>?> getImportedLoadsModel({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/steward-allocation/',
|
||||
queryParameters: queryParameters,
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: (json) => PaginationModel.fromJson(
|
||||
json,
|
||||
(data) => ImportedLoadsModel.fromJson(data as Map<String, dynamic>),
|
||||
),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<AllocatedMadeModel>?> getAllocatedMade({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/steward-allocation/',
|
||||
queryParameters: queryParameters,
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: (json) => PaginationModel<AllocatedMadeModel>.fromJson(
|
||||
json,
|
||||
(json) => AllocatedMadeModel.fromJson(json as Map<String, dynamic>),
|
||||
),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> confirmAllocation({
|
||||
required String token,
|
||||
required Map<String, dynamic> allocation,
|
||||
}) async {
|
||||
await _httpClient.put(
|
||||
'/steward-allocation/0/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
data: allocation,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> denyAllocation({required String token, required String allocationToken}) async {
|
||||
await _httpClient.delete(
|
||||
'/steward-allocation/0/?steward_allocation_key=$allocationToken',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> confirmAllAllocation({
|
||||
required String token,
|
||||
required List<String> allocationTokens,
|
||||
}) async {
|
||||
await _httpClient.put(
|
||||
'/steward-allocation/0/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
data: {'steward_allocation_list': allocationTokens},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<ProductModel>?> getRolesProducts({required String token}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/roles-products/?role=Steward',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJsonList: (json) =>
|
||||
json.map((item) => ProductModel.fromJson(item as Map<String, dynamic>)).toList(),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<GuildModel>?> getGuilds({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/guilds/',
|
||||
queryParameters: queryParameters,
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJsonList: (json) =>
|
||||
json.map((item) => GuildModel.fromJson(item as Map<String, dynamic>)).toList(),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<GuildProfile?> getProfile({required String token}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/guilds/0/?profile',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: GuildProfile.fromJson,
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> postSubmitStewardAllocation({
|
||||
required String token,
|
||||
required SubmitStewardAllocation request,
|
||||
}) async {
|
||||
await _httpClient.post(
|
||||
'/steward-allocation/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
data: request.toJson(),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> deleteStewardAllocation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
await _httpClient.delete(
|
||||
'/steward-allocation/0/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updateStewardAllocation({
|
||||
required String token,
|
||||
required ConformAllocation request,
|
||||
}) async {
|
||||
await _httpClient.put(
|
||||
'/steward-allocation/0/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
data: request.toJson(),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<StewardFreeBarDashboard?> getStewardDashboard({
|
||||
required String token,
|
||||
required String stratDate,
|
||||
required String endDate,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/steward_free_bar_dashboard/?date1=$stratDate&date2=$endDate&search=filter',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: StewardFreeBarDashboard.fromJson,
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<DashboardKillHouseFreeBar?> getDashboardKillHouseFreeBar({
|
||||
required String token,
|
||||
required String stratDate,
|
||||
required String endDate,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/dashboard_kill_house_free_bar/?date1=$stratDate&date2=$endDate&search=filter',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: DashboardKillHouseFreeBar.fromJson,
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<StewardFreeBar>?> getStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/steward_free_bar/',
|
||||
queryParameters: queryParameters,
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: (json) => PaginationModel<StewardFreeBar>.fromJson(
|
||||
json,
|
||||
(json) => StewardFreeBar.fromJson(json as Map<String, dynamic>),
|
||||
),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<IranProvinceCityModel>?> getCity({required String provinceName}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/iran_city/',
|
||||
queryParameters: {'name': provinceName},
|
||||
fromJsonList: (json) =>
|
||||
json.map((item) => IranProvinceCityModel.fromJson(item as Map<String, dynamic>)).toList(),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<IranProvinceCityModel>?> getProvince({CancelToken? cancelToken}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/iran_province/',
|
||||
fromJsonList: (json) =>
|
||||
json.map((item) => IranProvinceCityModel.fromJson(item as Map<String, dynamic>)).toList(),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> createStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
required CreateStewardFreeBar body,
|
||||
}) async {
|
||||
await _httpClient.post(
|
||||
'/steward_free_bar/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
data: body.toJson()..removeWhere((key, value) => value==null,),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<CreateStewardFreeBar?> editStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var data = await _httpClient.put(
|
||||
'/steward_free_bar/0/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
data: queryParameters,
|
||||
fromJson: CreateStewardFreeBar.fromJson,
|
||||
);
|
||||
return data.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> deleteStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
await _httpClient.delete(
|
||||
'/steward_free_bar/0/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<OutProvinceCarcassesBuyer>?> getOutProvinceCarcassesBuyer({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/out-province-carcasses-buyer/',
|
||||
queryParameters: queryParameters,
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: (json) => PaginationModel<OutProvinceCarcassesBuyer>.fromJson(
|
||||
json,
|
||||
(json) => OutProvinceCarcassesBuyer.fromJson(json as Map<String, dynamic>),
|
||||
),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> createOutProvinceCarcassesBuyer({
|
||||
required String token,
|
||||
required OutProvinceCarcassesBuyer body,
|
||||
}) async {
|
||||
await _httpClient.post(
|
||||
'/out-province-carcasses-buyer/',
|
||||
data: body.toJson()..removeWhere((key, value) => value == null),
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<StewardFreeSaleBar>?> getStewardFreeSaleBar({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/steward_free_sale_bar/',
|
||||
queryParameters: queryParameters,
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: (json) => PaginationModel<StewardFreeSaleBar>.fromJson(
|
||||
json,
|
||||
(json) => StewardFreeSaleBar.fromJson(json as Map<String, dynamic>),
|
||||
),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> createOutProvinceStewardFreeBar({
|
||||
required String token,
|
||||
required StewardFreeSaleBarRequest body,
|
||||
}) async {
|
||||
await _httpClient.post(
|
||||
'/steward_free_sale_bar/',
|
||||
data: body.toJson()..removeWhere((key, value) => value == null),
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updateOutProvinceStewardFreeBar({
|
||||
required String token,
|
||||
required StewardFreeSaleBarRequest body,
|
||||
}) async {
|
||||
await _httpClient.put(
|
||||
'/steward_free_sale_bar/0/',
|
||||
data: body.toJson()
|
||||
..removeWhere((key, value) => value == null)
|
||||
..addAll({'carcassWeight': body.weightOfCarcasses, 'carcassCount': body.numberOfCarcasses}),
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> deleteOutProvinceStewardFreeBar({required String token, required String key}) async {
|
||||
await _httpClient.delete(
|
||||
'/steward_free_sale_bar/0/',
|
||||
queryParameters: {'key': key},
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<UserProfile?> getUserProfile({required String token}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/system_user_profile/?self-profile',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: (json) => UserProfile.fromJson(json),
|
||||
);
|
||||
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updateUserProfile({required String token, required UserProfile userProfile}) async {
|
||||
await _httpClient.put(
|
||||
'/system_user_profile/0/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
data: userProfile.toJson()..removeWhere((key, value) => value == null),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updatePassword({
|
||||
required String token,
|
||||
required ChangePasswordRequestModel model,
|
||||
}) async {
|
||||
await _httpClient.post(
|
||||
'/api/change_password/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
data: model.toJson()..removeWhere((key, value) => value == null),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<SegmentationModel>?> getSegmentation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/app-segmentation/',
|
||||
queryParameters: queryParameters,
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: (json) => PaginationModel<SegmentationModel>.fromJson(
|
||||
json,
|
||||
(json) => SegmentationModel.fromJson(json as Map<String, dynamic>),
|
||||
),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> createSegmentation({required String token, required SegmentationModel model}) async {
|
||||
await _httpClient.post(
|
||||
'/app-segmentation/',
|
||||
data: model.toJson()..removeWhere((key, value) => value == null),
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> editSegmentation({required String token, required SegmentationModel model}) async {
|
||||
await _httpClient.put(
|
||||
'/app-segmentation/0/',
|
||||
data: model.toJson()..removeWhere((key, value) => value == null),
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<SegmentationModel?> deleteSegmentation({
|
||||
required String token,
|
||||
required String key,
|
||||
}) async {
|
||||
var res = await _httpClient.delete<SegmentationModel?>(
|
||||
'/app-segmentation/0/',
|
||||
queryParameters: {'key': key},
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: (json) => SegmentationModel.fromJson(json),
|
||||
);
|
||||
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BroadcastPrice?> getBroadcastPrice({required String token}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/broadcast-price/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
|
||||
fromJson: (json) => BroadcastPrice.fromJson(json),
|
||||
);
|
||||
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<StewardSalesInfoDashboard?> getStewardSalesInfoDashboard({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/steward-sales-info-dashboard/',
|
||||
queryParameters: queryParameters,
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: (json) => StewardSalesInfoDashboard.fromJson(json),
|
||||
);
|
||||
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<StewardRemainWeight?> getStewardRemainWeight({required String token}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/steward-remain-weight/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: StewardRemainWeight.fromJson,
|
||||
);
|
||||
|
||||
return res.data;
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,12 @@ import 'package:rasadyar_chicken/data/models/kill_house_module/register_request/
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/register_request/response/kill_house/kill_house_response.dart';
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/register_request/response/kill_request_list/kill_request_list.dart'
|
||||
as listModel;
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/warehouse_and_distribution/response/kill_house_bars/kill_house_bars_response.dart';
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/warehouse_and_distribution/response/kill_house_sales_info_dashboard/kill_house_sales_info_dashboard.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
abstract class KillHouseRemoteDataSource {
|
||||
//region requestKill
|
||||
Future<List<KillHouseResponse>?> getKillHouseList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
@@ -14,12 +18,34 @@ abstract class KillHouseRemoteDataSource {
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> submitKillHouseRequest({required String token, required Map<String, dynamic> data});
|
||||
Future<void> submitKillHouseRequest({
|
||||
required String token,
|
||||
required Map<String, dynamic> data,
|
||||
});
|
||||
|
||||
Future<List<listModel.KillRequestList>?> getListKillRequest({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> deleteKillRequest({required String token, required int requestId});
|
||||
Future<void> deleteKillRequest({
|
||||
required String token,
|
||||
required int requestId,
|
||||
});
|
||||
//endregion
|
||||
|
||||
//region warehouseAndDistribution
|
||||
|
||||
Future<KillHouseSalesInfoDashboard?> getInfoDashboard({
|
||||
required String token,
|
||||
CancelToken? cancelToken,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<PaginationModel<KillHouseBarsResponse>?> getBarsForKillHouse({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
//endregion
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@ import 'package:rasadyar_chicken/data/models/kill_house_module/register_request/
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/register_request/response/kill_house/kill_house_response.dart';
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/register_request/response/kill_request_list/kill_request_list.dart'
|
||||
as listModel;
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/warehouse_and_distribution/response/kill_house_bars/kill_house_bars_response.dart';
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/warehouse_and_distribution/response/kill_house_sales_info_dashboard/kill_house_sales_info_dashboard.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class KillHouseRemoteDataSourceImpl extends KillHouseRemoteDataSource {
|
||||
@@ -20,7 +22,9 @@ class KillHouseRemoteDataSourceImpl extends KillHouseRemoteDataSource {
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: (json) {
|
||||
var data = json['results'] as List<dynamic>;
|
||||
return ChickenCommissionPrices.fromJson(data.first as Map<String, dynamic>);
|
||||
return ChickenCommissionPrices.fromJson(
|
||||
data.first as Map<String, dynamic>,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -35,8 +39,9 @@ class KillHouseRemoteDataSourceImpl extends KillHouseRemoteDataSource {
|
||||
var res = await _httpClient.get(
|
||||
'/kill_house/?kill_house',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJsonList: (json) =>
|
||||
json.map((e) => KillHouseResponse.fromJson(e as Map<String, dynamic>)).toList(),
|
||||
fromJsonList: (json) => json
|
||||
.map((e) => KillHouseResponse.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
);
|
||||
|
||||
return res.data;
|
||||
@@ -63,18 +68,66 @@ class KillHouseRemoteDataSourceImpl extends KillHouseRemoteDataSource {
|
||||
'/kill_request/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
queryParameters: queryParameters,
|
||||
fromJsonList: (json) =>
|
||||
json.map((e) => listModel.KillRequestList.fromJson(e as Map<String, dynamic>)).toList(),
|
||||
fromJsonList: (json) => json
|
||||
.map(
|
||||
(e) =>
|
||||
listModel.KillRequestList.fromJson(e as Map<String, dynamic>),
|
||||
)
|
||||
.toList(),
|
||||
);
|
||||
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> deleteKillRequest({required String token, required int requestId}) async {
|
||||
Future<void> deleteKillRequest({
|
||||
required String token,
|
||||
required int requestId,
|
||||
}) async {
|
||||
await _httpClient.delete(
|
||||
'/kill_request/$requestId/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
);
|
||||
}
|
||||
|
||||
//endregion
|
||||
//region warehouseAndDistribution
|
||||
@override
|
||||
Future<KillHouseSalesInfoDashboard?> getInfoDashboard({
|
||||
required String token,
|
||||
CancelToken? cancelToken,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/kill-house-sales-info-dashboard/?role=KillHouse',
|
||||
|
||||
cancelToken: cancelToken,
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
queryParameters: queryParameters,
|
||||
fromJson: KillHouseSalesInfoDashboard.fromJson,
|
||||
);
|
||||
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<KillHouseBarsResponse>?> getBarsForKillHouse({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/bars_for_kill_house/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
queryParameters: queryParameters,
|
||||
|
||||
fromJson: (json) => PaginationModel<KillHouseBarsResponse>.fromJson(
|
||||
json,
|
||||
(json) => KillHouseBarsResponse.fromJson(json as Map<String, dynamic>),
|
||||
),
|
||||
);
|
||||
|
||||
return res.data;
|
||||
}
|
||||
|
||||
//endregion
|
||||
}
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
import 'package:rasadyar_chicken/data/models/poultry_export/poultry_export.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/kill_registration/kill_registration.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/all_poultry/all_poultry.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/approved_price/approved_price.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/hatching/hatching_models.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/hatching_report/hatching_report.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/kill_house_poultry/kill_house_poultry.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/kill_request_poultry/kill_request_poultry.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/poultry_farm/poultry_farm.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/poultry_hatching/poultry_hatching.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/poultry_order/poultry_order.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/poultry_science/home_poultry_science/home_poultry_science_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/sell_for_freezing/sell_for_freezing.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
abstract class PoultryScienceRemoteDatasource {
|
||||
Future<HomePoultryScienceModel?> getHomePoultryScience({
|
||||
required String token,
|
||||
required String type,
|
||||
});
|
||||
|
||||
Future<PaginationModel<HatchingModel>?> getHatchingPoultry({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> submitPoultryScienceReport({
|
||||
required String token,
|
||||
required FormData data,
|
||||
ProgressCallback? onSendProgress,
|
||||
});
|
||||
|
||||
Future<PaginationModel<HatchingReport>?> getPoultryScienceReport({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<PaginationModel<PoultryFarm>?> getPoultryScienceFarmList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<ApprovedPrice?> getApprovedPrice({ required String token,
|
||||
Map<String, dynamic>? queryParameters,});
|
||||
|
||||
Future<List<AllPoultry>?> getAllPoultry({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
|
||||
Future<SellForFreezing?> getSellForFreezing({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
|
||||
Future<PoultryExport?> getPoultryExport({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
|
||||
Future<List<KillRequestPoultry>?> getUserPoultry({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<List<PoultryHatching>?> getPoultryHatching({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<List<KillHousePoultry>?> getKillHouseList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> submitKillRegistration({
|
||||
required String token,
|
||||
required KillRegistrationRequest request,
|
||||
});
|
||||
|
||||
|
||||
Future<PaginationModel<PoultryOrder>?> getPoultryOderList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> deletePoultryOder({
|
||||
required String token,
|
||||
required String orderId,
|
||||
});
|
||||
}
|
||||
@@ -1,23 +1,20 @@
|
||||
import 'package:rasadyar_chicken/chicken.dart';
|
||||
import 'package:rasadyar_chicken/data/common/dio_error_handler.dart';
|
||||
import 'package:rasadyar_chicken/data/data_source/local/chicken_local.dart';
|
||||
import 'package:rasadyar_chicken/data/data_source/local/chicken_local_imp.dart';
|
||||
import 'package:rasadyar_chicken/data/data_source/remote/auth/auth_remote.dart';
|
||||
import 'package:rasadyar_chicken/data/data_source/remote/auth/auth_remote_imp.dart';
|
||||
import 'package:rasadyar_chicken/data/data_source/remote/chicken/chicken_remote.dart';
|
||||
import 'package:rasadyar_chicken/data/data_source/remote/chicken/chicken_remote_imp.dart';
|
||||
import 'package:rasadyar_chicken/features/common/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/di/common_di.dart';
|
||||
import 'package:rasadyar_chicken/data/data_source/remote/kill_house/kill_house_remote.dart';
|
||||
import 'package:rasadyar_chicken/data/data_source/remote/kill_house/kill_house_remote_impl.dart';
|
||||
import 'package:rasadyar_chicken/data/data_source/remote/poultry_science/poultry_science_remote.dart';
|
||||
import 'package:rasadyar_chicken/data/data_source/remote/poultry_science/poultry_science_remote_imp.dart';
|
||||
import 'package:rasadyar_chicken/data/repositories/auth/auth_repository.dart';
|
||||
import 'package:rasadyar_chicken/data/repositories/auth/auth_repository_imp.dart';
|
||||
import 'package:rasadyar_chicken/data/repositories/chicken/chicken_repository.dart';
|
||||
import 'package:rasadyar_chicken/data/repositories/chicken/chicken_repository_imp.dart';
|
||||
import 'package:rasadyar_chicken/data/repositories/kill_house/kill_house_repository.dart';
|
||||
import 'package:rasadyar_chicken/data/repositories/kill_house/kill_house_repository_impl.dart';
|
||||
import 'package:rasadyar_chicken/data/repositories/poultry_science/poultry_science_repository.dart';
|
||||
import 'package:rasadyar_chicken/data/repositories/poultry_science/poultry_science_repository_imp.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/di/poultry_science_di.dart';
|
||||
import 'package:rasadyar_chicken/features/steward/data/di/steward_di.dart';
|
||||
import 'package:rasadyar_chicken/features/province_operator/data/di/province_operator_di.dart';
|
||||
import 'package:rasadyar_chicken/features/province_inspector/data/di/province_inspector_di.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/data/di/city_jahad_di.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/data/di/city_poultry_di.dart';
|
||||
import 'package:rasadyar_chicken/features/vet_farm/data/di/vet_farm_di.dart';
|
||||
import 'package:rasadyar_chicken/features/super_admin/data/di/super_admin_di.dart';
|
||||
import 'package:rasadyar_chicken/features/province_supervisor/data/di/province_supervisor_di.dart';
|
||||
import 'package:rasadyar_chicken/features/jahad/data/di/jahad_di.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
GetIt diChicken = GetIt.asNewInstance();
|
||||
@@ -40,7 +37,7 @@ Future<void> setupChickenDI() async {
|
||||
},
|
||||
clearTokenCallback: () async {
|
||||
await tokenService.deleteModuleTokens(Module.chicken);
|
||||
Get.offAllNamed(ChickenRoutes.auth, arguments: Module.chicken);
|
||||
Get.offAllNamed(CommonRoutes.auth, arguments: Module.chicken);
|
||||
},
|
||||
),
|
||||
instanceName: 'chickenInterceptor',
|
||||
@@ -51,39 +48,47 @@ Future<void> setupChickenDI() async {
|
||||
diChicken.registerLazySingleton<DioRemote>(
|
||||
() => DioRemote(
|
||||
baseUrl: baseUrl,
|
||||
interceptors: diChicken.get<AppInterceptor>(instanceName: 'chickenInterceptor'),
|
||||
interceptors: diChicken.get<AppInterceptor>(
|
||||
instanceName: 'chickenInterceptor',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
final dioRemote = diChicken.get<DioRemote>();
|
||||
await dioRemote.init();
|
||||
|
||||
diChicken.registerLazySingleton<AuthRemoteDataSource>(() => AuthRemoteDataSourceImp(dioRemote));
|
||||
// Setup common feature DI
|
||||
await setupCommonDI(diChicken, dioRemote);
|
||||
|
||||
diChicken.registerLazySingleton<AuthRepository>(
|
||||
() => AuthRepositoryImpl(diChicken.get<AuthRemoteDataSource>()),
|
||||
);
|
||||
// Setup poultry_science feature DI
|
||||
await setupPoultryScienceDI(diChicken, dioRemote);
|
||||
|
||||
diChicken.registerLazySingleton<ChickenRemoteDatasource>(
|
||||
() => ChickenRemoteDatasourceImp(diChicken.get<DioRemote>()),
|
||||
);
|
||||
// Setup steward feature DI
|
||||
await setupStewardDI(diChicken, dioRemote);
|
||||
|
||||
diChicken.registerLazySingleton<ChickenLocalDataSource>(() => ChickenLocalDataSourceImp());
|
||||
// Setup province_operator feature DI
|
||||
await setupProvinceOperatorDI(diChicken, dioRemote);
|
||||
|
||||
diChicken.registerLazySingleton<ChickenRepository>(
|
||||
() => ChickenRepositoryImp(
|
||||
remote: diChicken.get<ChickenRemoteDatasource>(),
|
||||
local: diChicken.get<ChickenLocalDataSource>(),
|
||||
),
|
||||
);
|
||||
// Setup province_inspector feature DI
|
||||
await setupProvinceInspectorDI(diChicken, dioRemote);
|
||||
|
||||
diChicken.registerLazySingleton<PoultryScienceRemoteDatasource>(
|
||||
() => PoultryScienceRemoteDatasourceImp(diChicken.get<DioRemote>()),
|
||||
);
|
||||
// Setup city_jahad feature DI
|
||||
await setupCityJahadDI(diChicken, dioRemote);
|
||||
|
||||
diChicken.registerLazySingleton<PoultryScienceRepository>(
|
||||
() => PoultryScienceRepositoryImp(diChicken.get<PoultryScienceRemoteDatasource>()),
|
||||
);
|
||||
// Setup city_poultry feature DI
|
||||
await setupCityPoultryDI(diChicken, dioRemote);
|
||||
|
||||
// Setup vet_farm feature DI
|
||||
await setupVetFarmDI(diChicken, dioRemote);
|
||||
|
||||
// Setup super_admin feature DI
|
||||
await setupSuperAdminDI(diChicken, dioRemote);
|
||||
|
||||
// Setup province_supervisor feature DI
|
||||
await setupProvinceSupervisorDI(diChicken, dioRemote);
|
||||
|
||||
// Setup jahad feature DI
|
||||
await setupJahadDI(diChicken, dioRemote);
|
||||
|
||||
//region kill house module DI
|
||||
diChicken.registerLazySingleton<KillHouseRemoteDataSource>(
|
||||
@@ -98,58 +103,50 @@ Future<void> setupChickenDI() async {
|
||||
Future<void> newSetupAuthDI(String newUrl) async {
|
||||
var tokenService = Get.find<TokenStorageService>();
|
||||
|
||||
// همیشه baseUrl جدید رو ذخیره کن
|
||||
await tokenService.saveBaseUrl(Module.chicken, newUrl);
|
||||
|
||||
// Re-register AppInterceptor
|
||||
if (diChicken.isRegistered<AppInterceptor>(instanceName: 'chickenInterceptor')) {
|
||||
await diChicken.unregister<AppInterceptor>(instanceName: 'chickenInterceptor');
|
||||
}
|
||||
// پاکسازی DI مخصوص ماژول مرغ
|
||||
await diChicken.resetScope();
|
||||
diChicken.pushNewScope();
|
||||
|
||||
// --- Re-register AppInterceptor
|
||||
diChicken.registerLazySingleton<AppInterceptor>(
|
||||
() => AppInterceptor(
|
||||
refreshTokenCallback: () async => null,
|
||||
saveTokenCallback: (String newToken) async {
|
||||
// await tokenService.saveAccessToken(newToken);
|
||||
},
|
||||
saveTokenCallback: (newToken) async {},
|
||||
clearTokenCallback: () async {
|
||||
await tokenService.deleteModuleTokens(Module.chicken);
|
||||
Get.offAllNamed(ChickenRoutes.auth, arguments: Module.chicken);
|
||||
Get.offAllNamed(CommonRoutes.auth, arguments: Module.chicken);
|
||||
},
|
||||
),
|
||||
instanceName: 'chickenInterceptor',
|
||||
);
|
||||
|
||||
// Re-register DioRemote
|
||||
if (diChicken.isRegistered<DioRemote>()) {
|
||||
await diChicken.unregister<DioRemote>();
|
||||
}
|
||||
// --- Re-register DioRemote
|
||||
diChicken.registerLazySingleton<DioRemote>(
|
||||
() => DioRemote(
|
||||
baseUrl: newUrl,
|
||||
interceptors: diChicken.get<AppInterceptor>(instanceName: 'chickenInterceptor'),
|
||||
interceptors: diChicken.get<AppInterceptor>(
|
||||
instanceName: 'chickenInterceptor',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
final dioRemote = diChicken.get<DioRemote>();
|
||||
await dioRemote.init();
|
||||
|
||||
// Re-register dependent layers
|
||||
await reRegister<AuthRemoteDataSource>(() => AuthRemoteDataSourceImp(dioRemote));
|
||||
await reRegister<AuthRepository>(() => AuthRepositoryImpl(diChicken.get<AuthRemoteDataSource>()));
|
||||
await reRegister<ChickenRemoteDatasource>(() => ChickenRemoteDatasourceImp(dioRemote));
|
||||
await reRegister<ChickenLocalDataSource>(() => ChickenLocalDataSourceImp());
|
||||
await reRegister<ChickenRepository>(
|
||||
() => ChickenRepositoryImp(
|
||||
remote: diChicken.get<ChickenRemoteDatasource>(),
|
||||
local: diChicken.get<ChickenLocalDataSource>(),
|
||||
),
|
||||
);
|
||||
|
||||
await reRegister<PoultryScienceRemoteDatasource>(
|
||||
() => PoultryScienceRemoteDatasourceImp(dioRemote),
|
||||
);
|
||||
await reRegister<PoultryScienceRepository>(
|
||||
() => PoultryScienceRepositoryImp(diChicken.get<PoultryScienceRemoteDatasource>()),
|
||||
);
|
||||
// --- common, poultry_science, steward, and other features
|
||||
await setupCommonDI(diChicken, dioRemote);
|
||||
await setupPoultryScienceDI(diChicken, dioRemote);
|
||||
await setupStewardDI(diChicken, dioRemote);
|
||||
await setupProvinceOperatorDI(diChicken, dioRemote);
|
||||
await setupProvinceInspectorDI(diChicken, dioRemote);
|
||||
await setupCityJahadDI(diChicken, dioRemote);
|
||||
await setupCityPoultryDI(diChicken, dioRemote);
|
||||
await setupVetFarmDI(diChicken, dioRemote);
|
||||
await setupSuperAdminDI(diChicken, dioRemote);
|
||||
await setupProvinceSupervisorDI(diChicken, dioRemote);
|
||||
await setupJahadDI(diChicken, dioRemote);
|
||||
}
|
||||
|
||||
Future<void> reRegister<T extends Object>(T Function() factory) async {
|
||||
|
||||
@@ -0,0 +1,272 @@
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
|
||||
part 'kill_house_bars_response.freezed.dart';
|
||||
part 'kill_house_bars_response.g.dart';
|
||||
|
||||
@freezed
|
||||
abstract class KillHouseBarsResponse with _$KillHouseBarsResponse {
|
||||
const factory KillHouseBarsResponse({
|
||||
KillHouseUserModel? killhouseUser,
|
||||
KillHouseUserModel? killer,
|
||||
AddCarModel? addCar,
|
||||
PoultryRequestModel? poultryRequest,
|
||||
WeightInfoModel? weightInfo,
|
||||
String? key,
|
||||
String? createDate,
|
||||
bool? trash,
|
||||
int? quantity,
|
||||
int? barCode,
|
||||
int? quarantineQuantity,
|
||||
String? quarantineCodeState,
|
||||
double? fee,
|
||||
String? time,
|
||||
String? state,
|
||||
String? vetState,
|
||||
String? activeState,
|
||||
String? assignmentStateArchive,
|
||||
String? showKillHouse,
|
||||
CarModel? car,
|
||||
String? killHouseMessage,
|
||||
String? allocationState,
|
||||
bool? auction,
|
||||
String? role,
|
||||
String? clearanceCode,
|
||||
String? trafficCode,
|
||||
RegistrarClearanceCode? registrarClearanceCode,
|
||||
String? editorTrafficCode,
|
||||
String? barRemover,
|
||||
int? extraKilledQuantity,
|
||||
int? acceptedRealQuantity,
|
||||
double? acceptedRealWeight,
|
||||
double? extraKilledWeight,
|
||||
int? vetAcceptedRealQuantity,
|
||||
double? vetAcceptedRealWeight,
|
||||
int? acceptedAssignmentRealQuantity,
|
||||
double? acceptedAssignmentRealWeight,
|
||||
String? message,
|
||||
bool? wareHouseConfirmation,
|
||||
int? wareHouseAcceptedRealQuantity,
|
||||
double? wareHouseAcceptedRealWeight,
|
||||
String? dateOfWareHouse,
|
||||
bool? freezing,
|
||||
bool? archiveWage,
|
||||
double? weightLoss,
|
||||
String? wareHouseInputType,
|
||||
String? documentStatus,
|
||||
String? aggregateCode,
|
||||
bool? aggregateStatus,
|
||||
bool? calculateStatus,
|
||||
bool? temporaryTrash,
|
||||
bool? temporaryDeleted,
|
||||
String? enteredMessage,
|
||||
String? inquiryDate,
|
||||
String? inquiryOrigin,
|
||||
String? inquiryDestination,
|
||||
String? inquiryDriver,
|
||||
String? inquiryPelak,
|
||||
String? settlementType,
|
||||
double? price,
|
||||
String? description,
|
||||
String? barDocumentDescription,
|
||||
String? image,
|
||||
String? priceRegisterar,
|
||||
String? priceRegisterarRole,
|
||||
String? priceRegisterDate,
|
||||
String? priceEditor,
|
||||
String? priceEditorRole,
|
||||
String? priceEditorDate,
|
||||
bool? nonReceipt,
|
||||
bool? nonReceiptReturn,
|
||||
String? nonReceiptReturnMessage,
|
||||
String? nonReceiptMessage,
|
||||
bool? mainNonReceipt,
|
||||
String? nonReceiptState,
|
||||
String? nonReceiptChecker,
|
||||
String? nonReceiptCheckerMessage,
|
||||
String? nonReceiptCheckerMobile,
|
||||
String? nonReceiptCheckDate,
|
||||
String? nonReceiptReturner,
|
||||
String? nonReceiptReturnerMobile,
|
||||
String? nonReceiptReturnDate,
|
||||
bool? fine,
|
||||
double? fineAmount,
|
||||
double? fineCoefficient,
|
||||
String? documentNumber,
|
||||
bool? companyDocument,
|
||||
bool? warehouse,
|
||||
double? warehouseCommitmentWeight,
|
||||
bool? returnTrash,
|
||||
double? amount,
|
||||
int? killRequest,
|
||||
String? realAddCar,
|
||||
String? barDocumentStatus,
|
||||
int? inputWarehouse,
|
||||
}) = _KillHouseBars;
|
||||
|
||||
factory KillHouseBarsResponse.fromJson(Map<String, dynamic> json) =>
|
||||
_$KillHouseBarsFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
abstract class KillHouseUserModel with _$KillHouseUserModel {
|
||||
const factory KillHouseUserModel({
|
||||
KillHouseOperatorModel? killHouseOperator,
|
||||
String? name,
|
||||
bool? killer,
|
||||
String? key,
|
||||
double? maximumLoadVolumeIncrease,
|
||||
double? maximumLoadVolumeReduction,
|
||||
}) = _KillHouseUserModel;
|
||||
|
||||
factory KillHouseUserModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$KillHouseUserModelFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
abstract class KillHouseOperatorModel with _$KillHouseOperatorModel {
|
||||
const factory KillHouseOperatorModel({UserDetailModel? user}) =
|
||||
_KillHouseOperatorModel;
|
||||
|
||||
factory KillHouseOperatorModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$KillHouseOperatorModelFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
abstract class UserDetailModel with _$UserDetailModel {
|
||||
const factory UserDetailModel({
|
||||
String? fullname,
|
||||
String? firstName,
|
||||
String? lastName,
|
||||
int? baseOrder,
|
||||
String? mobile,
|
||||
String? nationalId,
|
||||
String? nationalCode,
|
||||
String? key,
|
||||
CityDetailModel? city,
|
||||
String? unitName,
|
||||
String? unitNationalId,
|
||||
String? unitRegistrationNumber,
|
||||
String? unitEconomicalNumber,
|
||||
String? unitProvince,
|
||||
String? unitCity,
|
||||
String? unitPostalCode,
|
||||
String? unitAddress,
|
||||
}) = _UserDetailModel;
|
||||
|
||||
factory UserDetailModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$UserDetailModelFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
abstract class CityDetailModel with _$CityDetailModel {
|
||||
const factory CityDetailModel({
|
||||
int? id,
|
||||
String? key,
|
||||
String? createDate,
|
||||
String? modifyDate,
|
||||
bool? trash,
|
||||
int? provinceIdForeignKey,
|
||||
int? cityIdKey,
|
||||
String? name,
|
||||
double? productPrice,
|
||||
bool? provinceCenter,
|
||||
int? cityNumber,
|
||||
String? cityName,
|
||||
int? provinceNumber,
|
||||
String? provinceName,
|
||||
String? createdBy,
|
||||
String? modifiedBy,
|
||||
int? province,
|
||||
}) = _CityDetailModel;
|
||||
|
||||
factory CityDetailModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$CityDetailModelFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
abstract class AddCarModel with _$AddCarModel {
|
||||
const factory AddCarModel({DriverModel? driver}) = _AddCarModel;
|
||||
|
||||
factory AddCarModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$AddCarModelFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
abstract class DriverModel with _$DriverModel {
|
||||
const factory DriverModel({
|
||||
String? driverName,
|
||||
String? driverMobile,
|
||||
String? typeCar,
|
||||
String? pelak,
|
||||
String? healthCode,
|
||||
}) = _DriverModel;
|
||||
|
||||
factory DriverModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$DriverModelFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
abstract class PoultryRequestModel with _$PoultryRequestModel {
|
||||
const factory PoultryRequestModel({
|
||||
int? poultryReqOrderCode,
|
||||
String? poultryName,
|
||||
String? poultryUserName,
|
||||
String? poultryMobile,
|
||||
String? poultryCity,
|
||||
String? chickenBreed,
|
||||
String? date,
|
||||
bool? freezing,
|
||||
bool? export,
|
||||
bool? freeSaleInProvince,
|
||||
bool? directBuying,
|
||||
}) = _PoultryRequestModel;
|
||||
|
||||
factory PoultryRequestModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$PoultryRequestModelFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
abstract class WeightInfoModel with _$WeightInfoModel {
|
||||
const factory WeightInfoModel({
|
||||
double? indexWeight,
|
||||
double? weight,
|
||||
double? finalIndexWeight,
|
||||
double? killHousePrice,
|
||||
int? weightLoss,
|
||||
double? inputLoss,
|
||||
String? state,
|
||||
}) = _WeightInfoModel;
|
||||
|
||||
factory WeightInfoModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$WeightInfoModelFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
abstract class CarModel with _$CarModel {
|
||||
const factory CarModel({
|
||||
int? id,
|
||||
String? key,
|
||||
String? pelak,
|
||||
//Object? capocity,
|
||||
String? typeCar,
|
||||
String? driverName,
|
||||
String? driverMobile,
|
||||
String? weightWithoutLoad,
|
||||
}) = _CarModel;
|
||||
|
||||
factory CarModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$CarModelFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
abstract class RegistrarClearanceCode with _$RegistrarClearanceCode {
|
||||
const factory RegistrarClearanceCode({
|
||||
String? date,
|
||||
String? name,
|
||||
String? role,
|
||||
String? mobile,
|
||||
}) = _RegistrarClearanceCode;
|
||||
|
||||
factory RegistrarClearanceCode.fromJson(Map<String, dynamic> json) =>
|
||||
_$RegistrarClearanceCodeFromJson(json);
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,474 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'kill_house_bars_response.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
_KillHouseBars _$KillHouseBarsFromJson(
|
||||
Map<String, dynamic> json,
|
||||
) => _KillHouseBars(
|
||||
killhouseUser: json['killhouse_user'] == null
|
||||
? null
|
||||
: KillHouseUserModel.fromJson(
|
||||
json['killhouse_user'] as Map<String, dynamic>,
|
||||
),
|
||||
killer: json['killer'] == null
|
||||
? null
|
||||
: KillHouseUserModel.fromJson(json['killer'] as Map<String, dynamic>),
|
||||
addCar: json['add_car'] == null
|
||||
? null
|
||||
: AddCarModel.fromJson(json['add_car'] as Map<String, dynamic>),
|
||||
poultryRequest: json['poultry_request'] == null
|
||||
? null
|
||||
: PoultryRequestModel.fromJson(
|
||||
json['poultry_request'] as Map<String, dynamic>,
|
||||
),
|
||||
weightInfo: json['weight_info'] == null
|
||||
? null
|
||||
: WeightInfoModel.fromJson(json['weight_info'] as Map<String, dynamic>),
|
||||
key: json['key'] as String?,
|
||||
createDate: json['create_date'] as String?,
|
||||
trash: json['trash'] as bool?,
|
||||
quantity: (json['quantity'] as num?)?.toInt(),
|
||||
barCode: (json['bar_code'] as num?)?.toInt(),
|
||||
quarantineQuantity: (json['quarantine_quantity'] as num?)?.toInt(),
|
||||
quarantineCodeState: json['quarantine_code_state'] as String?,
|
||||
fee: (json['fee'] as num?)?.toDouble(),
|
||||
time: json['time'] as String?,
|
||||
state: json['state'] as String?,
|
||||
vetState: json['vet_state'] as String?,
|
||||
activeState: json['active_state'] as String?,
|
||||
assignmentStateArchive: json['assignment_state_archive'] as String?,
|
||||
showKillHouse: json['show_kill_house'] as String?,
|
||||
car: json['car'] == null
|
||||
? null
|
||||
: CarModel.fromJson(json['car'] as Map<String, dynamic>),
|
||||
killHouseMessage: json['kill_house_message'] as String?,
|
||||
allocationState: json['allocation_state'] as String?,
|
||||
auction: json['auction'] as bool?,
|
||||
role: json['role'] as String?,
|
||||
clearanceCode: json['clearance_code'] as String?,
|
||||
trafficCode: json['traffic_code'] as String?,
|
||||
registrarClearanceCode: json['registrar_clearance_code'] == null
|
||||
? null
|
||||
: RegistrarClearanceCode.fromJson(
|
||||
json['registrar_clearance_code'] as Map<String, dynamic>,
|
||||
),
|
||||
editorTrafficCode: json['editor_traffic_code'] as String?,
|
||||
barRemover: json['bar_remover'] as String?,
|
||||
extraKilledQuantity: (json['extra_killed_quantity'] as num?)?.toInt(),
|
||||
acceptedRealQuantity: (json['accepted_real_quantity'] as num?)?.toInt(),
|
||||
acceptedRealWeight: (json['accepted_real_weight'] as num?)?.toDouble(),
|
||||
extraKilledWeight: (json['extra_killed_weight'] as num?)?.toDouble(),
|
||||
vetAcceptedRealQuantity: (json['vet_accepted_real_quantity'] as num?)
|
||||
?.toInt(),
|
||||
vetAcceptedRealWeight: (json['vet_accepted_real_weight'] as num?)?.toDouble(),
|
||||
acceptedAssignmentRealQuantity:
|
||||
(json['accepted_assignment_real_quantity'] as num?)?.toInt(),
|
||||
acceptedAssignmentRealWeight:
|
||||
(json['accepted_assignment_real_weight'] as num?)?.toDouble(),
|
||||
message: json['message'] as String?,
|
||||
wareHouseConfirmation: json['ware_house_confirmation'] as bool?,
|
||||
wareHouseAcceptedRealQuantity:
|
||||
(json['ware_house_accepted_real_quantity'] as num?)?.toInt(),
|
||||
wareHouseAcceptedRealWeight: (json['ware_house_accepted_real_weight'] as num?)
|
||||
?.toDouble(),
|
||||
dateOfWareHouse: json['date_of_ware_house'] as String?,
|
||||
freezing: json['freezing'] as bool?,
|
||||
archiveWage: json['archive_wage'] as bool?,
|
||||
weightLoss: (json['weight_loss'] as num?)?.toDouble(),
|
||||
wareHouseInputType: json['ware_house_input_type'] as String?,
|
||||
documentStatus: json['document_status'] as String?,
|
||||
aggregateCode: json['aggregate_code'] as String?,
|
||||
aggregateStatus: json['aggregate_status'] as bool?,
|
||||
calculateStatus: json['calculate_status'] as bool?,
|
||||
temporaryTrash: json['temporary_trash'] as bool?,
|
||||
temporaryDeleted: json['temporary_deleted'] as bool?,
|
||||
enteredMessage: json['entered_message'] as String?,
|
||||
inquiryDate: json['inquiry_date'] as String?,
|
||||
inquiryOrigin: json['inquiry_origin'] as String?,
|
||||
inquiryDestination: json['inquiry_destination'] as String?,
|
||||
inquiryDriver: json['inquiry_driver'] as String?,
|
||||
inquiryPelak: json['inquiry_pelak'] as String?,
|
||||
settlementType: json['settlement_type'] as String?,
|
||||
price: (json['price'] as num?)?.toDouble(),
|
||||
description: json['description'] as String?,
|
||||
barDocumentDescription: json['bar_document_description'] as String?,
|
||||
image: json['image'] as String?,
|
||||
priceRegisterar: json['price_registerar'] as String?,
|
||||
priceRegisterarRole: json['price_registerar_role'] as String?,
|
||||
priceRegisterDate: json['price_register_date'] as String?,
|
||||
priceEditor: json['price_editor'] as String?,
|
||||
priceEditorRole: json['price_editor_role'] as String?,
|
||||
priceEditorDate: json['price_editor_date'] as String?,
|
||||
nonReceipt: json['non_receipt'] as bool?,
|
||||
nonReceiptReturn: json['non_receipt_return'] as bool?,
|
||||
nonReceiptReturnMessage: json['non_receipt_return_message'] as String?,
|
||||
nonReceiptMessage: json['non_receipt_message'] as String?,
|
||||
mainNonReceipt: json['main_non_receipt'] as bool?,
|
||||
nonReceiptState: json['non_receipt_state'] as String?,
|
||||
nonReceiptChecker: json['non_receipt_checker'] as String?,
|
||||
nonReceiptCheckerMessage: json['non_receipt_checker_message'] as String?,
|
||||
nonReceiptCheckerMobile: json['non_receipt_checker_mobile'] as String?,
|
||||
nonReceiptCheckDate: json['non_receipt_check_date'] as String?,
|
||||
nonReceiptReturner: json['non_receipt_returner'] as String?,
|
||||
nonReceiptReturnerMobile: json['non_receipt_returner_mobile'] as String?,
|
||||
nonReceiptReturnDate: json['non_receipt_return_date'] as String?,
|
||||
fine: json['fine'] as bool?,
|
||||
fineAmount: (json['fine_amount'] as num?)?.toDouble(),
|
||||
fineCoefficient: (json['fine_coefficient'] as num?)?.toDouble(),
|
||||
documentNumber: json['document_number'] as String?,
|
||||
companyDocument: json['company_document'] as bool?,
|
||||
warehouse: json['warehouse'] as bool?,
|
||||
warehouseCommitmentWeight: (json['warehouse_commitment_weight'] as num?)
|
||||
?.toDouble(),
|
||||
returnTrash: json['return_trash'] as bool?,
|
||||
amount: (json['amount'] as num?)?.toDouble(),
|
||||
killRequest: (json['kill_request'] as num?)?.toInt(),
|
||||
realAddCar: json['real_add_car'] as String?,
|
||||
barDocumentStatus: json['bar_document_status'] as String?,
|
||||
inputWarehouse: (json['input_warehouse'] as num?)?.toInt(),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$KillHouseBarsToJson(
|
||||
_KillHouseBars instance,
|
||||
) => <String, dynamic>{
|
||||
'killhouse_user': instance.killhouseUser,
|
||||
'killer': instance.killer,
|
||||
'add_car': instance.addCar,
|
||||
'poultry_request': instance.poultryRequest,
|
||||
'weight_info': instance.weightInfo,
|
||||
'key': instance.key,
|
||||
'create_date': instance.createDate,
|
||||
'trash': instance.trash,
|
||||
'quantity': instance.quantity,
|
||||
'bar_code': instance.barCode,
|
||||
'quarantine_quantity': instance.quarantineQuantity,
|
||||
'quarantine_code_state': instance.quarantineCodeState,
|
||||
'fee': instance.fee,
|
||||
'time': instance.time,
|
||||
'state': instance.state,
|
||||
'vet_state': instance.vetState,
|
||||
'active_state': instance.activeState,
|
||||
'assignment_state_archive': instance.assignmentStateArchive,
|
||||
'show_kill_house': instance.showKillHouse,
|
||||
'car': instance.car,
|
||||
'kill_house_message': instance.killHouseMessage,
|
||||
'allocation_state': instance.allocationState,
|
||||
'auction': instance.auction,
|
||||
'role': instance.role,
|
||||
'clearance_code': instance.clearanceCode,
|
||||
'traffic_code': instance.trafficCode,
|
||||
'registrar_clearance_code': instance.registrarClearanceCode,
|
||||
'editor_traffic_code': instance.editorTrafficCode,
|
||||
'bar_remover': instance.barRemover,
|
||||
'extra_killed_quantity': instance.extraKilledQuantity,
|
||||
'accepted_real_quantity': instance.acceptedRealQuantity,
|
||||
'accepted_real_weight': instance.acceptedRealWeight,
|
||||
'extra_killed_weight': instance.extraKilledWeight,
|
||||
'vet_accepted_real_quantity': instance.vetAcceptedRealQuantity,
|
||||
'vet_accepted_real_weight': instance.vetAcceptedRealWeight,
|
||||
'accepted_assignment_real_quantity': instance.acceptedAssignmentRealQuantity,
|
||||
'accepted_assignment_real_weight': instance.acceptedAssignmentRealWeight,
|
||||
'message': instance.message,
|
||||
'ware_house_confirmation': instance.wareHouseConfirmation,
|
||||
'ware_house_accepted_real_quantity': instance.wareHouseAcceptedRealQuantity,
|
||||
'ware_house_accepted_real_weight': instance.wareHouseAcceptedRealWeight,
|
||||
'date_of_ware_house': instance.dateOfWareHouse,
|
||||
'freezing': instance.freezing,
|
||||
'archive_wage': instance.archiveWage,
|
||||
'weight_loss': instance.weightLoss,
|
||||
'ware_house_input_type': instance.wareHouseInputType,
|
||||
'document_status': instance.documentStatus,
|
||||
'aggregate_code': instance.aggregateCode,
|
||||
'aggregate_status': instance.aggregateStatus,
|
||||
'calculate_status': instance.calculateStatus,
|
||||
'temporary_trash': instance.temporaryTrash,
|
||||
'temporary_deleted': instance.temporaryDeleted,
|
||||
'entered_message': instance.enteredMessage,
|
||||
'inquiry_date': instance.inquiryDate,
|
||||
'inquiry_origin': instance.inquiryOrigin,
|
||||
'inquiry_destination': instance.inquiryDestination,
|
||||
'inquiry_driver': instance.inquiryDriver,
|
||||
'inquiry_pelak': instance.inquiryPelak,
|
||||
'settlement_type': instance.settlementType,
|
||||
'price': instance.price,
|
||||
'description': instance.description,
|
||||
'bar_document_description': instance.barDocumentDescription,
|
||||
'image': instance.image,
|
||||
'price_registerar': instance.priceRegisterar,
|
||||
'price_registerar_role': instance.priceRegisterarRole,
|
||||
'price_register_date': instance.priceRegisterDate,
|
||||
'price_editor': instance.priceEditor,
|
||||
'price_editor_role': instance.priceEditorRole,
|
||||
'price_editor_date': instance.priceEditorDate,
|
||||
'non_receipt': instance.nonReceipt,
|
||||
'non_receipt_return': instance.nonReceiptReturn,
|
||||
'non_receipt_return_message': instance.nonReceiptReturnMessage,
|
||||
'non_receipt_message': instance.nonReceiptMessage,
|
||||
'main_non_receipt': instance.mainNonReceipt,
|
||||
'non_receipt_state': instance.nonReceiptState,
|
||||
'non_receipt_checker': instance.nonReceiptChecker,
|
||||
'non_receipt_checker_message': instance.nonReceiptCheckerMessage,
|
||||
'non_receipt_checker_mobile': instance.nonReceiptCheckerMobile,
|
||||
'non_receipt_check_date': instance.nonReceiptCheckDate,
|
||||
'non_receipt_returner': instance.nonReceiptReturner,
|
||||
'non_receipt_returner_mobile': instance.nonReceiptReturnerMobile,
|
||||
'non_receipt_return_date': instance.nonReceiptReturnDate,
|
||||
'fine': instance.fine,
|
||||
'fine_amount': instance.fineAmount,
|
||||
'fine_coefficient': instance.fineCoefficient,
|
||||
'document_number': instance.documentNumber,
|
||||
'company_document': instance.companyDocument,
|
||||
'warehouse': instance.warehouse,
|
||||
'warehouse_commitment_weight': instance.warehouseCommitmentWeight,
|
||||
'return_trash': instance.returnTrash,
|
||||
'amount': instance.amount,
|
||||
'kill_request': instance.killRequest,
|
||||
'real_add_car': instance.realAddCar,
|
||||
'bar_document_status': instance.barDocumentStatus,
|
||||
'input_warehouse': instance.inputWarehouse,
|
||||
};
|
||||
|
||||
_KillHouseUserModel _$KillHouseUserModelFromJson(Map<String, dynamic> json) =>
|
||||
_KillHouseUserModel(
|
||||
killHouseOperator: json['kill_house_operator'] == null
|
||||
? null
|
||||
: KillHouseOperatorModel.fromJson(
|
||||
json['kill_house_operator'] as Map<String, dynamic>,
|
||||
),
|
||||
name: json['name'] as String?,
|
||||
killer: json['killer'] as bool?,
|
||||
key: json['key'] as String?,
|
||||
maximumLoadVolumeIncrease: (json['maximum_load_volume_increase'] as num?)
|
||||
?.toDouble(),
|
||||
maximumLoadVolumeReduction:
|
||||
(json['maximum_load_volume_reduction'] as num?)?.toDouble(),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$KillHouseUserModelToJson(_KillHouseUserModel instance) =>
|
||||
<String, dynamic>{
|
||||
'kill_house_operator': instance.killHouseOperator,
|
||||
'name': instance.name,
|
||||
'killer': instance.killer,
|
||||
'key': instance.key,
|
||||
'maximum_load_volume_increase': instance.maximumLoadVolumeIncrease,
|
||||
'maximum_load_volume_reduction': instance.maximumLoadVolumeReduction,
|
||||
};
|
||||
|
||||
_KillHouseOperatorModel _$KillHouseOperatorModelFromJson(
|
||||
Map<String, dynamic> json,
|
||||
) => _KillHouseOperatorModel(
|
||||
user: json['user'] == null
|
||||
? null
|
||||
: UserDetailModel.fromJson(json['user'] as Map<String, dynamic>),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$KillHouseOperatorModelToJson(
|
||||
_KillHouseOperatorModel instance,
|
||||
) => <String, dynamic>{'user': instance.user};
|
||||
|
||||
_UserDetailModel _$UserDetailModelFromJson(Map<String, dynamic> json) =>
|
||||
_UserDetailModel(
|
||||
fullname: json['fullname'] as String?,
|
||||
firstName: json['first_name'] as String?,
|
||||
lastName: json['last_name'] as String?,
|
||||
baseOrder: (json['base_order'] as num?)?.toInt(),
|
||||
mobile: json['mobile'] as String?,
|
||||
nationalId: json['national_id'] as String?,
|
||||
nationalCode: json['national_code'] as String?,
|
||||
key: json['key'] as String?,
|
||||
city: json['city'] == null
|
||||
? null
|
||||
: CityDetailModel.fromJson(json['city'] as Map<String, dynamic>),
|
||||
unitName: json['unit_name'] as String?,
|
||||
unitNationalId: json['unit_national_id'] as String?,
|
||||
unitRegistrationNumber: json['unit_registration_number'] as String?,
|
||||
unitEconomicalNumber: json['unit_economical_number'] as String?,
|
||||
unitProvince: json['unit_province'] as String?,
|
||||
unitCity: json['unit_city'] as String?,
|
||||
unitPostalCode: json['unit_postal_code'] as String?,
|
||||
unitAddress: json['unit_address'] as String?,
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$UserDetailModelToJson(_UserDetailModel instance) =>
|
||||
<String, dynamic>{
|
||||
'fullname': instance.fullname,
|
||||
'first_name': instance.firstName,
|
||||
'last_name': instance.lastName,
|
||||
'base_order': instance.baseOrder,
|
||||
'mobile': instance.mobile,
|
||||
'national_id': instance.nationalId,
|
||||
'national_code': instance.nationalCode,
|
||||
'key': instance.key,
|
||||
'city': instance.city,
|
||||
'unit_name': instance.unitName,
|
||||
'unit_national_id': instance.unitNationalId,
|
||||
'unit_registration_number': instance.unitRegistrationNumber,
|
||||
'unit_economical_number': instance.unitEconomicalNumber,
|
||||
'unit_province': instance.unitProvince,
|
||||
'unit_city': instance.unitCity,
|
||||
'unit_postal_code': instance.unitPostalCode,
|
||||
'unit_address': instance.unitAddress,
|
||||
};
|
||||
|
||||
_CityDetailModel _$CityDetailModelFromJson(Map<String, dynamic> json) =>
|
||||
_CityDetailModel(
|
||||
id: (json['id'] as num?)?.toInt(),
|
||||
key: json['key'] as String?,
|
||||
createDate: json['create_date'] as String?,
|
||||
modifyDate: json['modify_date'] as String?,
|
||||
trash: json['trash'] as bool?,
|
||||
provinceIdForeignKey: (json['province_id_foreign_key'] as num?)?.toInt(),
|
||||
cityIdKey: (json['city_id_key'] as num?)?.toInt(),
|
||||
name: json['name'] as String?,
|
||||
productPrice: (json['product_price'] as num?)?.toDouble(),
|
||||
provinceCenter: json['province_center'] as bool?,
|
||||
cityNumber: (json['city_number'] as num?)?.toInt(),
|
||||
cityName: json['city_name'] as String?,
|
||||
provinceNumber: (json['province_number'] as num?)?.toInt(),
|
||||
provinceName: json['province_name'] as String?,
|
||||
createdBy: json['created_by'] as String?,
|
||||
modifiedBy: json['modified_by'] as String?,
|
||||
province: (json['province'] as num?)?.toInt(),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$CityDetailModelToJson(_CityDetailModel instance) =>
|
||||
<String, dynamic>{
|
||||
'id': instance.id,
|
||||
'key': instance.key,
|
||||
'create_date': instance.createDate,
|
||||
'modify_date': instance.modifyDate,
|
||||
'trash': instance.trash,
|
||||
'province_id_foreign_key': instance.provinceIdForeignKey,
|
||||
'city_id_key': instance.cityIdKey,
|
||||
'name': instance.name,
|
||||
'product_price': instance.productPrice,
|
||||
'province_center': instance.provinceCenter,
|
||||
'city_number': instance.cityNumber,
|
||||
'city_name': instance.cityName,
|
||||
'province_number': instance.provinceNumber,
|
||||
'province_name': instance.provinceName,
|
||||
'created_by': instance.createdBy,
|
||||
'modified_by': instance.modifiedBy,
|
||||
'province': instance.province,
|
||||
};
|
||||
|
||||
_AddCarModel _$AddCarModelFromJson(Map<String, dynamic> json) => _AddCarModel(
|
||||
driver: json['driver'] == null
|
||||
? null
|
||||
: DriverModel.fromJson(json['driver'] as Map<String, dynamic>),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$AddCarModelToJson(_AddCarModel instance) =>
|
||||
<String, dynamic>{'driver': instance.driver};
|
||||
|
||||
_DriverModel _$DriverModelFromJson(Map<String, dynamic> json) => _DriverModel(
|
||||
driverName: json['driver_name'] as String?,
|
||||
driverMobile: json['driver_mobile'] as String?,
|
||||
typeCar: json['type_car'] as String?,
|
||||
pelak: json['pelak'] as String?,
|
||||
healthCode: json['health_code'] as String?,
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$DriverModelToJson(_DriverModel instance) =>
|
||||
<String, dynamic>{
|
||||
'driver_name': instance.driverName,
|
||||
'driver_mobile': instance.driverMobile,
|
||||
'type_car': instance.typeCar,
|
||||
'pelak': instance.pelak,
|
||||
'health_code': instance.healthCode,
|
||||
};
|
||||
|
||||
_PoultryRequestModel _$PoultryRequestModelFromJson(Map<String, dynamic> json) =>
|
||||
_PoultryRequestModel(
|
||||
poultryReqOrderCode: (json['poultry_req_order_code'] as num?)?.toInt(),
|
||||
poultryName: json['poultry_name'] as String?,
|
||||
poultryUserName: json['poultry_user_name'] as String?,
|
||||
poultryMobile: json['poultry_mobile'] as String?,
|
||||
poultryCity: json['poultry_city'] as String?,
|
||||
chickenBreed: json['chicken_breed'] as String?,
|
||||
date: json['date'] as String?,
|
||||
freezing: json['freezing'] as bool?,
|
||||
export: json['export'] as bool?,
|
||||
freeSaleInProvince: json['free_sale_in_province'] as bool?,
|
||||
directBuying: json['direct_buying'] as bool?,
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$PoultryRequestModelToJson(
|
||||
_PoultryRequestModel instance,
|
||||
) => <String, dynamic>{
|
||||
'poultry_req_order_code': instance.poultryReqOrderCode,
|
||||
'poultry_name': instance.poultryName,
|
||||
'poultry_user_name': instance.poultryUserName,
|
||||
'poultry_mobile': instance.poultryMobile,
|
||||
'poultry_city': instance.poultryCity,
|
||||
'chicken_breed': instance.chickenBreed,
|
||||
'date': instance.date,
|
||||
'freezing': instance.freezing,
|
||||
'export': instance.export,
|
||||
'free_sale_in_province': instance.freeSaleInProvince,
|
||||
'direct_buying': instance.directBuying,
|
||||
};
|
||||
|
||||
_WeightInfoModel _$WeightInfoModelFromJson(Map<String, dynamic> json) =>
|
||||
_WeightInfoModel(
|
||||
indexWeight: (json['index_weight'] as num?)?.toDouble(),
|
||||
weight: (json['weight'] as num?)?.toDouble(),
|
||||
finalIndexWeight: (json['final_index_weight'] as num?)?.toDouble(),
|
||||
killHousePrice: (json['kill_house_price'] as num?)?.toDouble(),
|
||||
weightLoss: (json['weight_loss'] as num?)?.toInt(),
|
||||
inputLoss: (json['input_loss'] as num?)?.toDouble(),
|
||||
state: json['state'] as String?,
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$WeightInfoModelToJson(_WeightInfoModel instance) =>
|
||||
<String, dynamic>{
|
||||
'index_weight': instance.indexWeight,
|
||||
'weight': instance.weight,
|
||||
'final_index_weight': instance.finalIndexWeight,
|
||||
'kill_house_price': instance.killHousePrice,
|
||||
'weight_loss': instance.weightLoss,
|
||||
'input_loss': instance.inputLoss,
|
||||
'state': instance.state,
|
||||
};
|
||||
|
||||
_CarModel _$CarModelFromJson(Map<String, dynamic> json) => _CarModel(
|
||||
id: (json['id'] as num?)?.toInt(),
|
||||
key: json['key'] as String?,
|
||||
pelak: json['pelak'] as String?,
|
||||
typeCar: json['type_car'] as String?,
|
||||
driverName: json['driver_name'] as String?,
|
||||
driverMobile: json['driver_mobile'] as String?,
|
||||
weightWithoutLoad: json['weight_without_load'] as String?,
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$CarModelToJson(_CarModel instance) => <String, dynamic>{
|
||||
'id': instance.id,
|
||||
'key': instance.key,
|
||||
'pelak': instance.pelak,
|
||||
'type_car': instance.typeCar,
|
||||
'driver_name': instance.driverName,
|
||||
'driver_mobile': instance.driverMobile,
|
||||
'weight_without_load': instance.weightWithoutLoad,
|
||||
};
|
||||
|
||||
_RegistrarClearanceCode _$RegistrarClearanceCodeFromJson(
|
||||
Map<String, dynamic> json,
|
||||
) => _RegistrarClearanceCode(
|
||||
date: json['date'] as String?,
|
||||
name: json['name'] as String?,
|
||||
role: json['role'] as String?,
|
||||
mobile: json['mobile'] as String?,
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$RegistrarClearanceCodeToJson(
|
||||
_RegistrarClearanceCode instance,
|
||||
) => <String, dynamic>{
|
||||
'date': instance.date,
|
||||
'name': instance.name,
|
||||
'role': instance.role,
|
||||
'mobile': instance.mobile,
|
||||
};
|
||||
@@ -0,0 +1,35 @@
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
|
||||
part 'kill_house_sales_info_dashboard.freezed.dart';
|
||||
part 'kill_house_sales_info_dashboard.g.dart';
|
||||
|
||||
@freezed
|
||||
abstract class KillHouseSalesInfoDashboard with _$KillHouseSalesInfoDashboard {
|
||||
const factory KillHouseSalesInfoDashboard({
|
||||
double? totalGovernmentalInputWeight,
|
||||
double? totalFreeInputWeight,
|
||||
double? totalGovernmentalOutputWeight,
|
||||
double? totalFreeOutputWeight,
|
||||
double? totalGovernmentalRemainWeight,
|
||||
double? totalFreeRemainWeight,
|
||||
@JsonKey(name: 'total_kill_house_free_sale__bar_carcasses_weight')
|
||||
double? totalKillHouseFreeSaleBarCarcassesWeight,
|
||||
double? totalKillHouseAllocationsWeight,
|
||||
double? segmentationsWeight,
|
||||
double? coldHouseAllocationsWeight,
|
||||
double? totalSellingInProvinceGovernmentalWeight,
|
||||
double? totalSellingInProvinceFreeWeight,
|
||||
double? totalCommitmentSellingInProvinceGovernmentalWeight,
|
||||
double? totalCommitmentSellingInProvinceGovernmentalRemainWeight,
|
||||
double? totalCommitmentSellingInProvinceFreeWeight,
|
||||
double? totalCommitmentSellingInProvinceFreeRemainWeight,
|
||||
double? posAllocatedWeight,
|
||||
double? posGovernmentalAllocatedWeight,
|
||||
double? posFreeAllocatedWeight,
|
||||
double? wareHouseArchiveGovernmentalWeight,
|
||||
double? wareHouseArchiveFreeWeight,
|
||||
}) = _KillHouseSalesInfoDashboard;
|
||||
|
||||
factory KillHouseSalesInfoDashboard.fromJson(Map<String, dynamic> json) =>
|
||||
_$KillHouseSalesInfoDashboardFromJson(json);
|
||||
}
|
||||
@@ -0,0 +1,337 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'kill_house_sales_info_dashboard.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
|
||||
/// @nodoc
|
||||
mixin _$KillHouseSalesInfoDashboard {
|
||||
|
||||
double? get totalGovernmentalInputWeight; double? get totalFreeInputWeight; double? get totalGovernmentalOutputWeight; double? get totalFreeOutputWeight; double? get totalGovernmentalRemainWeight; double? get totalFreeRemainWeight;@JsonKey(name: 'total_kill_house_free_sale__bar_carcasses_weight') double? get totalKillHouseFreeSaleBarCarcassesWeight; double? get totalKillHouseAllocationsWeight; double? get segmentationsWeight; double? get coldHouseAllocationsWeight; double? get totalSellingInProvinceGovernmentalWeight; double? get totalSellingInProvinceFreeWeight; double? get totalCommitmentSellingInProvinceGovernmentalWeight; double? get totalCommitmentSellingInProvinceGovernmentalRemainWeight; double? get totalCommitmentSellingInProvinceFreeWeight; double? get totalCommitmentSellingInProvinceFreeRemainWeight; double? get posAllocatedWeight; double? get posGovernmentalAllocatedWeight; double? get posFreeAllocatedWeight; double? get wareHouseArchiveGovernmentalWeight; double? get wareHouseArchiveFreeWeight;
|
||||
/// Create a copy of KillHouseSalesInfoDashboard
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$KillHouseSalesInfoDashboardCopyWith<KillHouseSalesInfoDashboard> get copyWith => _$KillHouseSalesInfoDashboardCopyWithImpl<KillHouseSalesInfoDashboard>(this as KillHouseSalesInfoDashboard, _$identity);
|
||||
|
||||
/// Serializes this KillHouseSalesInfoDashboard to a JSON map.
|
||||
Map<String, dynamic> toJson();
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is KillHouseSalesInfoDashboard&&(identical(other.totalGovernmentalInputWeight, totalGovernmentalInputWeight) || other.totalGovernmentalInputWeight == totalGovernmentalInputWeight)&&(identical(other.totalFreeInputWeight, totalFreeInputWeight) || other.totalFreeInputWeight == totalFreeInputWeight)&&(identical(other.totalGovernmentalOutputWeight, totalGovernmentalOutputWeight) || other.totalGovernmentalOutputWeight == totalGovernmentalOutputWeight)&&(identical(other.totalFreeOutputWeight, totalFreeOutputWeight) || other.totalFreeOutputWeight == totalFreeOutputWeight)&&(identical(other.totalGovernmentalRemainWeight, totalGovernmentalRemainWeight) || other.totalGovernmentalRemainWeight == totalGovernmentalRemainWeight)&&(identical(other.totalFreeRemainWeight, totalFreeRemainWeight) || other.totalFreeRemainWeight == totalFreeRemainWeight)&&(identical(other.totalKillHouseFreeSaleBarCarcassesWeight, totalKillHouseFreeSaleBarCarcassesWeight) || other.totalKillHouseFreeSaleBarCarcassesWeight == totalKillHouseFreeSaleBarCarcassesWeight)&&(identical(other.totalKillHouseAllocationsWeight, totalKillHouseAllocationsWeight) || other.totalKillHouseAllocationsWeight == totalKillHouseAllocationsWeight)&&(identical(other.segmentationsWeight, segmentationsWeight) || other.segmentationsWeight == segmentationsWeight)&&(identical(other.coldHouseAllocationsWeight, coldHouseAllocationsWeight) || other.coldHouseAllocationsWeight == coldHouseAllocationsWeight)&&(identical(other.totalSellingInProvinceGovernmentalWeight, totalSellingInProvinceGovernmentalWeight) || other.totalSellingInProvinceGovernmentalWeight == totalSellingInProvinceGovernmentalWeight)&&(identical(other.totalSellingInProvinceFreeWeight, totalSellingInProvinceFreeWeight) || other.totalSellingInProvinceFreeWeight == totalSellingInProvinceFreeWeight)&&(identical(other.totalCommitmentSellingInProvinceGovernmentalWeight, totalCommitmentSellingInProvinceGovernmentalWeight) || other.totalCommitmentSellingInProvinceGovernmentalWeight == totalCommitmentSellingInProvinceGovernmentalWeight)&&(identical(other.totalCommitmentSellingInProvinceGovernmentalRemainWeight, totalCommitmentSellingInProvinceGovernmentalRemainWeight) || other.totalCommitmentSellingInProvinceGovernmentalRemainWeight == totalCommitmentSellingInProvinceGovernmentalRemainWeight)&&(identical(other.totalCommitmentSellingInProvinceFreeWeight, totalCommitmentSellingInProvinceFreeWeight) || other.totalCommitmentSellingInProvinceFreeWeight == totalCommitmentSellingInProvinceFreeWeight)&&(identical(other.totalCommitmentSellingInProvinceFreeRemainWeight, totalCommitmentSellingInProvinceFreeRemainWeight) || other.totalCommitmentSellingInProvinceFreeRemainWeight == totalCommitmentSellingInProvinceFreeRemainWeight)&&(identical(other.posAllocatedWeight, posAllocatedWeight) || other.posAllocatedWeight == posAllocatedWeight)&&(identical(other.posGovernmentalAllocatedWeight, posGovernmentalAllocatedWeight) || other.posGovernmentalAllocatedWeight == posGovernmentalAllocatedWeight)&&(identical(other.posFreeAllocatedWeight, posFreeAllocatedWeight) || other.posFreeAllocatedWeight == posFreeAllocatedWeight)&&(identical(other.wareHouseArchiveGovernmentalWeight, wareHouseArchiveGovernmentalWeight) || other.wareHouseArchiveGovernmentalWeight == wareHouseArchiveGovernmentalWeight)&&(identical(other.wareHouseArchiveFreeWeight, wareHouseArchiveFreeWeight) || other.wareHouseArchiveFreeWeight == wareHouseArchiveFreeWeight));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hashAll([runtimeType,totalGovernmentalInputWeight,totalFreeInputWeight,totalGovernmentalOutputWeight,totalFreeOutputWeight,totalGovernmentalRemainWeight,totalFreeRemainWeight,totalKillHouseFreeSaleBarCarcassesWeight,totalKillHouseAllocationsWeight,segmentationsWeight,coldHouseAllocationsWeight,totalSellingInProvinceGovernmentalWeight,totalSellingInProvinceFreeWeight,totalCommitmentSellingInProvinceGovernmentalWeight,totalCommitmentSellingInProvinceGovernmentalRemainWeight,totalCommitmentSellingInProvinceFreeWeight,totalCommitmentSellingInProvinceFreeRemainWeight,posAllocatedWeight,posGovernmentalAllocatedWeight,posFreeAllocatedWeight,wareHouseArchiveGovernmentalWeight,wareHouseArchiveFreeWeight]);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'KillHouseSalesInfoDashboard(totalGovernmentalInputWeight: $totalGovernmentalInputWeight, totalFreeInputWeight: $totalFreeInputWeight, totalGovernmentalOutputWeight: $totalGovernmentalOutputWeight, totalFreeOutputWeight: $totalFreeOutputWeight, totalGovernmentalRemainWeight: $totalGovernmentalRemainWeight, totalFreeRemainWeight: $totalFreeRemainWeight, totalKillHouseFreeSaleBarCarcassesWeight: $totalKillHouseFreeSaleBarCarcassesWeight, totalKillHouseAllocationsWeight: $totalKillHouseAllocationsWeight, segmentationsWeight: $segmentationsWeight, coldHouseAllocationsWeight: $coldHouseAllocationsWeight, totalSellingInProvinceGovernmentalWeight: $totalSellingInProvinceGovernmentalWeight, totalSellingInProvinceFreeWeight: $totalSellingInProvinceFreeWeight, totalCommitmentSellingInProvinceGovernmentalWeight: $totalCommitmentSellingInProvinceGovernmentalWeight, totalCommitmentSellingInProvinceGovernmentalRemainWeight: $totalCommitmentSellingInProvinceGovernmentalRemainWeight, totalCommitmentSellingInProvinceFreeWeight: $totalCommitmentSellingInProvinceFreeWeight, totalCommitmentSellingInProvinceFreeRemainWeight: $totalCommitmentSellingInProvinceFreeRemainWeight, posAllocatedWeight: $posAllocatedWeight, posGovernmentalAllocatedWeight: $posGovernmentalAllocatedWeight, posFreeAllocatedWeight: $posFreeAllocatedWeight, wareHouseArchiveGovernmentalWeight: $wareHouseArchiveGovernmentalWeight, wareHouseArchiveFreeWeight: $wareHouseArchiveFreeWeight)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $KillHouseSalesInfoDashboardCopyWith<$Res> {
|
||||
factory $KillHouseSalesInfoDashboardCopyWith(KillHouseSalesInfoDashboard value, $Res Function(KillHouseSalesInfoDashboard) _then) = _$KillHouseSalesInfoDashboardCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
double? totalGovernmentalInputWeight, double? totalFreeInputWeight, double? totalGovernmentalOutputWeight, double? totalFreeOutputWeight, double? totalGovernmentalRemainWeight, double? totalFreeRemainWeight,@JsonKey(name: 'total_kill_house_free_sale__bar_carcasses_weight') double? totalKillHouseFreeSaleBarCarcassesWeight, double? totalKillHouseAllocationsWeight, double? segmentationsWeight, double? coldHouseAllocationsWeight, double? totalSellingInProvinceGovernmentalWeight, double? totalSellingInProvinceFreeWeight, double? totalCommitmentSellingInProvinceGovernmentalWeight, double? totalCommitmentSellingInProvinceGovernmentalRemainWeight, double? totalCommitmentSellingInProvinceFreeWeight, double? totalCommitmentSellingInProvinceFreeRemainWeight, double? posAllocatedWeight, double? posGovernmentalAllocatedWeight, double? posFreeAllocatedWeight, double? wareHouseArchiveGovernmentalWeight, double? wareHouseArchiveFreeWeight
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$KillHouseSalesInfoDashboardCopyWithImpl<$Res>
|
||||
implements $KillHouseSalesInfoDashboardCopyWith<$Res> {
|
||||
_$KillHouseSalesInfoDashboardCopyWithImpl(this._self, this._then);
|
||||
|
||||
final KillHouseSalesInfoDashboard _self;
|
||||
final $Res Function(KillHouseSalesInfoDashboard) _then;
|
||||
|
||||
/// Create a copy of KillHouseSalesInfoDashboard
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? totalGovernmentalInputWeight = freezed,Object? totalFreeInputWeight = freezed,Object? totalGovernmentalOutputWeight = freezed,Object? totalFreeOutputWeight = freezed,Object? totalGovernmentalRemainWeight = freezed,Object? totalFreeRemainWeight = freezed,Object? totalKillHouseFreeSaleBarCarcassesWeight = freezed,Object? totalKillHouseAllocationsWeight = freezed,Object? segmentationsWeight = freezed,Object? coldHouseAllocationsWeight = freezed,Object? totalSellingInProvinceGovernmentalWeight = freezed,Object? totalSellingInProvinceFreeWeight = freezed,Object? totalCommitmentSellingInProvinceGovernmentalWeight = freezed,Object? totalCommitmentSellingInProvinceGovernmentalRemainWeight = freezed,Object? totalCommitmentSellingInProvinceFreeWeight = freezed,Object? totalCommitmentSellingInProvinceFreeRemainWeight = freezed,Object? posAllocatedWeight = freezed,Object? posGovernmentalAllocatedWeight = freezed,Object? posFreeAllocatedWeight = freezed,Object? wareHouseArchiveGovernmentalWeight = freezed,Object? wareHouseArchiveFreeWeight = freezed,}) {
|
||||
return _then(_self.copyWith(
|
||||
totalGovernmentalInputWeight: freezed == totalGovernmentalInputWeight ? _self.totalGovernmentalInputWeight : totalGovernmentalInputWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalFreeInputWeight: freezed == totalFreeInputWeight ? _self.totalFreeInputWeight : totalFreeInputWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalGovernmentalOutputWeight: freezed == totalGovernmentalOutputWeight ? _self.totalGovernmentalOutputWeight : totalGovernmentalOutputWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalFreeOutputWeight: freezed == totalFreeOutputWeight ? _self.totalFreeOutputWeight : totalFreeOutputWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalGovernmentalRemainWeight: freezed == totalGovernmentalRemainWeight ? _self.totalGovernmentalRemainWeight : totalGovernmentalRemainWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalFreeRemainWeight: freezed == totalFreeRemainWeight ? _self.totalFreeRemainWeight : totalFreeRemainWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalKillHouseFreeSaleBarCarcassesWeight: freezed == totalKillHouseFreeSaleBarCarcassesWeight ? _self.totalKillHouseFreeSaleBarCarcassesWeight : totalKillHouseFreeSaleBarCarcassesWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalKillHouseAllocationsWeight: freezed == totalKillHouseAllocationsWeight ? _self.totalKillHouseAllocationsWeight : totalKillHouseAllocationsWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,segmentationsWeight: freezed == segmentationsWeight ? _self.segmentationsWeight : segmentationsWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,coldHouseAllocationsWeight: freezed == coldHouseAllocationsWeight ? _self.coldHouseAllocationsWeight : coldHouseAllocationsWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalSellingInProvinceGovernmentalWeight: freezed == totalSellingInProvinceGovernmentalWeight ? _self.totalSellingInProvinceGovernmentalWeight : totalSellingInProvinceGovernmentalWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalSellingInProvinceFreeWeight: freezed == totalSellingInProvinceFreeWeight ? _self.totalSellingInProvinceFreeWeight : totalSellingInProvinceFreeWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalCommitmentSellingInProvinceGovernmentalWeight: freezed == totalCommitmentSellingInProvinceGovernmentalWeight ? _self.totalCommitmentSellingInProvinceGovernmentalWeight : totalCommitmentSellingInProvinceGovernmentalWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalCommitmentSellingInProvinceGovernmentalRemainWeight: freezed == totalCommitmentSellingInProvinceGovernmentalRemainWeight ? _self.totalCommitmentSellingInProvinceGovernmentalRemainWeight : totalCommitmentSellingInProvinceGovernmentalRemainWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalCommitmentSellingInProvinceFreeWeight: freezed == totalCommitmentSellingInProvinceFreeWeight ? _self.totalCommitmentSellingInProvinceFreeWeight : totalCommitmentSellingInProvinceFreeWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalCommitmentSellingInProvinceFreeRemainWeight: freezed == totalCommitmentSellingInProvinceFreeRemainWeight ? _self.totalCommitmentSellingInProvinceFreeRemainWeight : totalCommitmentSellingInProvinceFreeRemainWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,posAllocatedWeight: freezed == posAllocatedWeight ? _self.posAllocatedWeight : posAllocatedWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,posGovernmentalAllocatedWeight: freezed == posGovernmentalAllocatedWeight ? _self.posGovernmentalAllocatedWeight : posGovernmentalAllocatedWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,posFreeAllocatedWeight: freezed == posFreeAllocatedWeight ? _self.posFreeAllocatedWeight : posFreeAllocatedWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,wareHouseArchiveGovernmentalWeight: freezed == wareHouseArchiveGovernmentalWeight ? _self.wareHouseArchiveGovernmentalWeight : wareHouseArchiveGovernmentalWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,wareHouseArchiveFreeWeight: freezed == wareHouseArchiveFreeWeight ? _self.wareHouseArchiveFreeWeight : wareHouseArchiveFreeWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [KillHouseSalesInfoDashboard].
|
||||
extension KillHouseSalesInfoDashboardPatterns on KillHouseSalesInfoDashboard {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _KillHouseSalesInfoDashboard value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _KillHouseSalesInfoDashboard() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _KillHouseSalesInfoDashboard value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _KillHouseSalesInfoDashboard():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _KillHouseSalesInfoDashboard value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _KillHouseSalesInfoDashboard() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( double? totalGovernmentalInputWeight, double? totalFreeInputWeight, double? totalGovernmentalOutputWeight, double? totalFreeOutputWeight, double? totalGovernmentalRemainWeight, double? totalFreeRemainWeight, @JsonKey(name: 'total_kill_house_free_sale__bar_carcasses_weight') double? totalKillHouseFreeSaleBarCarcassesWeight, double? totalKillHouseAllocationsWeight, double? segmentationsWeight, double? coldHouseAllocationsWeight, double? totalSellingInProvinceGovernmentalWeight, double? totalSellingInProvinceFreeWeight, double? totalCommitmentSellingInProvinceGovernmentalWeight, double? totalCommitmentSellingInProvinceGovernmentalRemainWeight, double? totalCommitmentSellingInProvinceFreeWeight, double? totalCommitmentSellingInProvinceFreeRemainWeight, double? posAllocatedWeight, double? posGovernmentalAllocatedWeight, double? posFreeAllocatedWeight, double? wareHouseArchiveGovernmentalWeight, double? wareHouseArchiveFreeWeight)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _KillHouseSalesInfoDashboard() when $default != null:
|
||||
return $default(_that.totalGovernmentalInputWeight,_that.totalFreeInputWeight,_that.totalGovernmentalOutputWeight,_that.totalFreeOutputWeight,_that.totalGovernmentalRemainWeight,_that.totalFreeRemainWeight,_that.totalKillHouseFreeSaleBarCarcassesWeight,_that.totalKillHouseAllocationsWeight,_that.segmentationsWeight,_that.coldHouseAllocationsWeight,_that.totalSellingInProvinceGovernmentalWeight,_that.totalSellingInProvinceFreeWeight,_that.totalCommitmentSellingInProvinceGovernmentalWeight,_that.totalCommitmentSellingInProvinceGovernmentalRemainWeight,_that.totalCommitmentSellingInProvinceFreeWeight,_that.totalCommitmentSellingInProvinceFreeRemainWeight,_that.posAllocatedWeight,_that.posGovernmentalAllocatedWeight,_that.posFreeAllocatedWeight,_that.wareHouseArchiveGovernmentalWeight,_that.wareHouseArchiveFreeWeight);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( double? totalGovernmentalInputWeight, double? totalFreeInputWeight, double? totalGovernmentalOutputWeight, double? totalFreeOutputWeight, double? totalGovernmentalRemainWeight, double? totalFreeRemainWeight, @JsonKey(name: 'total_kill_house_free_sale__bar_carcasses_weight') double? totalKillHouseFreeSaleBarCarcassesWeight, double? totalKillHouseAllocationsWeight, double? segmentationsWeight, double? coldHouseAllocationsWeight, double? totalSellingInProvinceGovernmentalWeight, double? totalSellingInProvinceFreeWeight, double? totalCommitmentSellingInProvinceGovernmentalWeight, double? totalCommitmentSellingInProvinceGovernmentalRemainWeight, double? totalCommitmentSellingInProvinceFreeWeight, double? totalCommitmentSellingInProvinceFreeRemainWeight, double? posAllocatedWeight, double? posGovernmentalAllocatedWeight, double? posFreeAllocatedWeight, double? wareHouseArchiveGovernmentalWeight, double? wareHouseArchiveFreeWeight) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _KillHouseSalesInfoDashboard():
|
||||
return $default(_that.totalGovernmentalInputWeight,_that.totalFreeInputWeight,_that.totalGovernmentalOutputWeight,_that.totalFreeOutputWeight,_that.totalGovernmentalRemainWeight,_that.totalFreeRemainWeight,_that.totalKillHouseFreeSaleBarCarcassesWeight,_that.totalKillHouseAllocationsWeight,_that.segmentationsWeight,_that.coldHouseAllocationsWeight,_that.totalSellingInProvinceGovernmentalWeight,_that.totalSellingInProvinceFreeWeight,_that.totalCommitmentSellingInProvinceGovernmentalWeight,_that.totalCommitmentSellingInProvinceGovernmentalRemainWeight,_that.totalCommitmentSellingInProvinceFreeWeight,_that.totalCommitmentSellingInProvinceFreeRemainWeight,_that.posAllocatedWeight,_that.posGovernmentalAllocatedWeight,_that.posFreeAllocatedWeight,_that.wareHouseArchiveGovernmentalWeight,_that.wareHouseArchiveFreeWeight);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( double? totalGovernmentalInputWeight, double? totalFreeInputWeight, double? totalGovernmentalOutputWeight, double? totalFreeOutputWeight, double? totalGovernmentalRemainWeight, double? totalFreeRemainWeight, @JsonKey(name: 'total_kill_house_free_sale__bar_carcasses_weight') double? totalKillHouseFreeSaleBarCarcassesWeight, double? totalKillHouseAllocationsWeight, double? segmentationsWeight, double? coldHouseAllocationsWeight, double? totalSellingInProvinceGovernmentalWeight, double? totalSellingInProvinceFreeWeight, double? totalCommitmentSellingInProvinceGovernmentalWeight, double? totalCommitmentSellingInProvinceGovernmentalRemainWeight, double? totalCommitmentSellingInProvinceFreeWeight, double? totalCommitmentSellingInProvinceFreeRemainWeight, double? posAllocatedWeight, double? posGovernmentalAllocatedWeight, double? posFreeAllocatedWeight, double? wareHouseArchiveGovernmentalWeight, double? wareHouseArchiveFreeWeight)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _KillHouseSalesInfoDashboard() when $default != null:
|
||||
return $default(_that.totalGovernmentalInputWeight,_that.totalFreeInputWeight,_that.totalGovernmentalOutputWeight,_that.totalFreeOutputWeight,_that.totalGovernmentalRemainWeight,_that.totalFreeRemainWeight,_that.totalKillHouseFreeSaleBarCarcassesWeight,_that.totalKillHouseAllocationsWeight,_that.segmentationsWeight,_that.coldHouseAllocationsWeight,_that.totalSellingInProvinceGovernmentalWeight,_that.totalSellingInProvinceFreeWeight,_that.totalCommitmentSellingInProvinceGovernmentalWeight,_that.totalCommitmentSellingInProvinceGovernmentalRemainWeight,_that.totalCommitmentSellingInProvinceFreeWeight,_that.totalCommitmentSellingInProvinceFreeRemainWeight,_that.posAllocatedWeight,_that.posGovernmentalAllocatedWeight,_that.posFreeAllocatedWeight,_that.wareHouseArchiveGovernmentalWeight,_that.wareHouseArchiveFreeWeight);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
@JsonSerializable()
|
||||
|
||||
class _KillHouseSalesInfoDashboard implements KillHouseSalesInfoDashboard {
|
||||
const _KillHouseSalesInfoDashboard({this.totalGovernmentalInputWeight, this.totalFreeInputWeight, this.totalGovernmentalOutputWeight, this.totalFreeOutputWeight, this.totalGovernmentalRemainWeight, this.totalFreeRemainWeight, @JsonKey(name: 'total_kill_house_free_sale__bar_carcasses_weight') this.totalKillHouseFreeSaleBarCarcassesWeight, this.totalKillHouseAllocationsWeight, this.segmentationsWeight, this.coldHouseAllocationsWeight, this.totalSellingInProvinceGovernmentalWeight, this.totalSellingInProvinceFreeWeight, this.totalCommitmentSellingInProvinceGovernmentalWeight, this.totalCommitmentSellingInProvinceGovernmentalRemainWeight, this.totalCommitmentSellingInProvinceFreeWeight, this.totalCommitmentSellingInProvinceFreeRemainWeight, this.posAllocatedWeight, this.posGovernmentalAllocatedWeight, this.posFreeAllocatedWeight, this.wareHouseArchiveGovernmentalWeight, this.wareHouseArchiveFreeWeight});
|
||||
factory _KillHouseSalesInfoDashboard.fromJson(Map<String, dynamic> json) => _$KillHouseSalesInfoDashboardFromJson(json);
|
||||
|
||||
@override final double? totalGovernmentalInputWeight;
|
||||
@override final double? totalFreeInputWeight;
|
||||
@override final double? totalGovernmentalOutputWeight;
|
||||
@override final double? totalFreeOutputWeight;
|
||||
@override final double? totalGovernmentalRemainWeight;
|
||||
@override final double? totalFreeRemainWeight;
|
||||
@override@JsonKey(name: 'total_kill_house_free_sale__bar_carcasses_weight') final double? totalKillHouseFreeSaleBarCarcassesWeight;
|
||||
@override final double? totalKillHouseAllocationsWeight;
|
||||
@override final double? segmentationsWeight;
|
||||
@override final double? coldHouseAllocationsWeight;
|
||||
@override final double? totalSellingInProvinceGovernmentalWeight;
|
||||
@override final double? totalSellingInProvinceFreeWeight;
|
||||
@override final double? totalCommitmentSellingInProvinceGovernmentalWeight;
|
||||
@override final double? totalCommitmentSellingInProvinceGovernmentalRemainWeight;
|
||||
@override final double? totalCommitmentSellingInProvinceFreeWeight;
|
||||
@override final double? totalCommitmentSellingInProvinceFreeRemainWeight;
|
||||
@override final double? posAllocatedWeight;
|
||||
@override final double? posGovernmentalAllocatedWeight;
|
||||
@override final double? posFreeAllocatedWeight;
|
||||
@override final double? wareHouseArchiveGovernmentalWeight;
|
||||
@override final double? wareHouseArchiveFreeWeight;
|
||||
|
||||
/// Create a copy of KillHouseSalesInfoDashboard
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$KillHouseSalesInfoDashboardCopyWith<_KillHouseSalesInfoDashboard> get copyWith => __$KillHouseSalesInfoDashboardCopyWithImpl<_KillHouseSalesInfoDashboard>(this, _$identity);
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
return _$KillHouseSalesInfoDashboardToJson(this, );
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _KillHouseSalesInfoDashboard&&(identical(other.totalGovernmentalInputWeight, totalGovernmentalInputWeight) || other.totalGovernmentalInputWeight == totalGovernmentalInputWeight)&&(identical(other.totalFreeInputWeight, totalFreeInputWeight) || other.totalFreeInputWeight == totalFreeInputWeight)&&(identical(other.totalGovernmentalOutputWeight, totalGovernmentalOutputWeight) || other.totalGovernmentalOutputWeight == totalGovernmentalOutputWeight)&&(identical(other.totalFreeOutputWeight, totalFreeOutputWeight) || other.totalFreeOutputWeight == totalFreeOutputWeight)&&(identical(other.totalGovernmentalRemainWeight, totalGovernmentalRemainWeight) || other.totalGovernmentalRemainWeight == totalGovernmentalRemainWeight)&&(identical(other.totalFreeRemainWeight, totalFreeRemainWeight) || other.totalFreeRemainWeight == totalFreeRemainWeight)&&(identical(other.totalKillHouseFreeSaleBarCarcassesWeight, totalKillHouseFreeSaleBarCarcassesWeight) || other.totalKillHouseFreeSaleBarCarcassesWeight == totalKillHouseFreeSaleBarCarcassesWeight)&&(identical(other.totalKillHouseAllocationsWeight, totalKillHouseAllocationsWeight) || other.totalKillHouseAllocationsWeight == totalKillHouseAllocationsWeight)&&(identical(other.segmentationsWeight, segmentationsWeight) || other.segmentationsWeight == segmentationsWeight)&&(identical(other.coldHouseAllocationsWeight, coldHouseAllocationsWeight) || other.coldHouseAllocationsWeight == coldHouseAllocationsWeight)&&(identical(other.totalSellingInProvinceGovernmentalWeight, totalSellingInProvinceGovernmentalWeight) || other.totalSellingInProvinceGovernmentalWeight == totalSellingInProvinceGovernmentalWeight)&&(identical(other.totalSellingInProvinceFreeWeight, totalSellingInProvinceFreeWeight) || other.totalSellingInProvinceFreeWeight == totalSellingInProvinceFreeWeight)&&(identical(other.totalCommitmentSellingInProvinceGovernmentalWeight, totalCommitmentSellingInProvinceGovernmentalWeight) || other.totalCommitmentSellingInProvinceGovernmentalWeight == totalCommitmentSellingInProvinceGovernmentalWeight)&&(identical(other.totalCommitmentSellingInProvinceGovernmentalRemainWeight, totalCommitmentSellingInProvinceGovernmentalRemainWeight) || other.totalCommitmentSellingInProvinceGovernmentalRemainWeight == totalCommitmentSellingInProvinceGovernmentalRemainWeight)&&(identical(other.totalCommitmentSellingInProvinceFreeWeight, totalCommitmentSellingInProvinceFreeWeight) || other.totalCommitmentSellingInProvinceFreeWeight == totalCommitmentSellingInProvinceFreeWeight)&&(identical(other.totalCommitmentSellingInProvinceFreeRemainWeight, totalCommitmentSellingInProvinceFreeRemainWeight) || other.totalCommitmentSellingInProvinceFreeRemainWeight == totalCommitmentSellingInProvinceFreeRemainWeight)&&(identical(other.posAllocatedWeight, posAllocatedWeight) || other.posAllocatedWeight == posAllocatedWeight)&&(identical(other.posGovernmentalAllocatedWeight, posGovernmentalAllocatedWeight) || other.posGovernmentalAllocatedWeight == posGovernmentalAllocatedWeight)&&(identical(other.posFreeAllocatedWeight, posFreeAllocatedWeight) || other.posFreeAllocatedWeight == posFreeAllocatedWeight)&&(identical(other.wareHouseArchiveGovernmentalWeight, wareHouseArchiveGovernmentalWeight) || other.wareHouseArchiveGovernmentalWeight == wareHouseArchiveGovernmentalWeight)&&(identical(other.wareHouseArchiveFreeWeight, wareHouseArchiveFreeWeight) || other.wareHouseArchiveFreeWeight == wareHouseArchiveFreeWeight));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hashAll([runtimeType,totalGovernmentalInputWeight,totalFreeInputWeight,totalGovernmentalOutputWeight,totalFreeOutputWeight,totalGovernmentalRemainWeight,totalFreeRemainWeight,totalKillHouseFreeSaleBarCarcassesWeight,totalKillHouseAllocationsWeight,segmentationsWeight,coldHouseAllocationsWeight,totalSellingInProvinceGovernmentalWeight,totalSellingInProvinceFreeWeight,totalCommitmentSellingInProvinceGovernmentalWeight,totalCommitmentSellingInProvinceGovernmentalRemainWeight,totalCommitmentSellingInProvinceFreeWeight,totalCommitmentSellingInProvinceFreeRemainWeight,posAllocatedWeight,posGovernmentalAllocatedWeight,posFreeAllocatedWeight,wareHouseArchiveGovernmentalWeight,wareHouseArchiveFreeWeight]);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'KillHouseSalesInfoDashboard(totalGovernmentalInputWeight: $totalGovernmentalInputWeight, totalFreeInputWeight: $totalFreeInputWeight, totalGovernmentalOutputWeight: $totalGovernmentalOutputWeight, totalFreeOutputWeight: $totalFreeOutputWeight, totalGovernmentalRemainWeight: $totalGovernmentalRemainWeight, totalFreeRemainWeight: $totalFreeRemainWeight, totalKillHouseFreeSaleBarCarcassesWeight: $totalKillHouseFreeSaleBarCarcassesWeight, totalKillHouseAllocationsWeight: $totalKillHouseAllocationsWeight, segmentationsWeight: $segmentationsWeight, coldHouseAllocationsWeight: $coldHouseAllocationsWeight, totalSellingInProvinceGovernmentalWeight: $totalSellingInProvinceGovernmentalWeight, totalSellingInProvinceFreeWeight: $totalSellingInProvinceFreeWeight, totalCommitmentSellingInProvinceGovernmentalWeight: $totalCommitmentSellingInProvinceGovernmentalWeight, totalCommitmentSellingInProvinceGovernmentalRemainWeight: $totalCommitmentSellingInProvinceGovernmentalRemainWeight, totalCommitmentSellingInProvinceFreeWeight: $totalCommitmentSellingInProvinceFreeWeight, totalCommitmentSellingInProvinceFreeRemainWeight: $totalCommitmentSellingInProvinceFreeRemainWeight, posAllocatedWeight: $posAllocatedWeight, posGovernmentalAllocatedWeight: $posGovernmentalAllocatedWeight, posFreeAllocatedWeight: $posFreeAllocatedWeight, wareHouseArchiveGovernmentalWeight: $wareHouseArchiveGovernmentalWeight, wareHouseArchiveFreeWeight: $wareHouseArchiveFreeWeight)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$KillHouseSalesInfoDashboardCopyWith<$Res> implements $KillHouseSalesInfoDashboardCopyWith<$Res> {
|
||||
factory _$KillHouseSalesInfoDashboardCopyWith(_KillHouseSalesInfoDashboard value, $Res Function(_KillHouseSalesInfoDashboard) _then) = __$KillHouseSalesInfoDashboardCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
double? totalGovernmentalInputWeight, double? totalFreeInputWeight, double? totalGovernmentalOutputWeight, double? totalFreeOutputWeight, double? totalGovernmentalRemainWeight, double? totalFreeRemainWeight,@JsonKey(name: 'total_kill_house_free_sale__bar_carcasses_weight') double? totalKillHouseFreeSaleBarCarcassesWeight, double? totalKillHouseAllocationsWeight, double? segmentationsWeight, double? coldHouseAllocationsWeight, double? totalSellingInProvinceGovernmentalWeight, double? totalSellingInProvinceFreeWeight, double? totalCommitmentSellingInProvinceGovernmentalWeight, double? totalCommitmentSellingInProvinceGovernmentalRemainWeight, double? totalCommitmentSellingInProvinceFreeWeight, double? totalCommitmentSellingInProvinceFreeRemainWeight, double? posAllocatedWeight, double? posGovernmentalAllocatedWeight, double? posFreeAllocatedWeight, double? wareHouseArchiveGovernmentalWeight, double? wareHouseArchiveFreeWeight
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$KillHouseSalesInfoDashboardCopyWithImpl<$Res>
|
||||
implements _$KillHouseSalesInfoDashboardCopyWith<$Res> {
|
||||
__$KillHouseSalesInfoDashboardCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _KillHouseSalesInfoDashboard _self;
|
||||
final $Res Function(_KillHouseSalesInfoDashboard) _then;
|
||||
|
||||
/// Create a copy of KillHouseSalesInfoDashboard
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? totalGovernmentalInputWeight = freezed,Object? totalFreeInputWeight = freezed,Object? totalGovernmentalOutputWeight = freezed,Object? totalFreeOutputWeight = freezed,Object? totalGovernmentalRemainWeight = freezed,Object? totalFreeRemainWeight = freezed,Object? totalKillHouseFreeSaleBarCarcassesWeight = freezed,Object? totalKillHouseAllocationsWeight = freezed,Object? segmentationsWeight = freezed,Object? coldHouseAllocationsWeight = freezed,Object? totalSellingInProvinceGovernmentalWeight = freezed,Object? totalSellingInProvinceFreeWeight = freezed,Object? totalCommitmentSellingInProvinceGovernmentalWeight = freezed,Object? totalCommitmentSellingInProvinceGovernmentalRemainWeight = freezed,Object? totalCommitmentSellingInProvinceFreeWeight = freezed,Object? totalCommitmentSellingInProvinceFreeRemainWeight = freezed,Object? posAllocatedWeight = freezed,Object? posGovernmentalAllocatedWeight = freezed,Object? posFreeAllocatedWeight = freezed,Object? wareHouseArchiveGovernmentalWeight = freezed,Object? wareHouseArchiveFreeWeight = freezed,}) {
|
||||
return _then(_KillHouseSalesInfoDashboard(
|
||||
totalGovernmentalInputWeight: freezed == totalGovernmentalInputWeight ? _self.totalGovernmentalInputWeight : totalGovernmentalInputWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalFreeInputWeight: freezed == totalFreeInputWeight ? _self.totalFreeInputWeight : totalFreeInputWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalGovernmentalOutputWeight: freezed == totalGovernmentalOutputWeight ? _self.totalGovernmentalOutputWeight : totalGovernmentalOutputWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalFreeOutputWeight: freezed == totalFreeOutputWeight ? _self.totalFreeOutputWeight : totalFreeOutputWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalGovernmentalRemainWeight: freezed == totalGovernmentalRemainWeight ? _self.totalGovernmentalRemainWeight : totalGovernmentalRemainWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalFreeRemainWeight: freezed == totalFreeRemainWeight ? _self.totalFreeRemainWeight : totalFreeRemainWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalKillHouseFreeSaleBarCarcassesWeight: freezed == totalKillHouseFreeSaleBarCarcassesWeight ? _self.totalKillHouseFreeSaleBarCarcassesWeight : totalKillHouseFreeSaleBarCarcassesWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalKillHouseAllocationsWeight: freezed == totalKillHouseAllocationsWeight ? _self.totalKillHouseAllocationsWeight : totalKillHouseAllocationsWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,segmentationsWeight: freezed == segmentationsWeight ? _self.segmentationsWeight : segmentationsWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,coldHouseAllocationsWeight: freezed == coldHouseAllocationsWeight ? _self.coldHouseAllocationsWeight : coldHouseAllocationsWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalSellingInProvinceGovernmentalWeight: freezed == totalSellingInProvinceGovernmentalWeight ? _self.totalSellingInProvinceGovernmentalWeight : totalSellingInProvinceGovernmentalWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalSellingInProvinceFreeWeight: freezed == totalSellingInProvinceFreeWeight ? _self.totalSellingInProvinceFreeWeight : totalSellingInProvinceFreeWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalCommitmentSellingInProvinceGovernmentalWeight: freezed == totalCommitmentSellingInProvinceGovernmentalWeight ? _self.totalCommitmentSellingInProvinceGovernmentalWeight : totalCommitmentSellingInProvinceGovernmentalWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalCommitmentSellingInProvinceGovernmentalRemainWeight: freezed == totalCommitmentSellingInProvinceGovernmentalRemainWeight ? _self.totalCommitmentSellingInProvinceGovernmentalRemainWeight : totalCommitmentSellingInProvinceGovernmentalRemainWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalCommitmentSellingInProvinceFreeWeight: freezed == totalCommitmentSellingInProvinceFreeWeight ? _self.totalCommitmentSellingInProvinceFreeWeight : totalCommitmentSellingInProvinceFreeWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,totalCommitmentSellingInProvinceFreeRemainWeight: freezed == totalCommitmentSellingInProvinceFreeRemainWeight ? _self.totalCommitmentSellingInProvinceFreeRemainWeight : totalCommitmentSellingInProvinceFreeRemainWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,posAllocatedWeight: freezed == posAllocatedWeight ? _self.posAllocatedWeight : posAllocatedWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,posGovernmentalAllocatedWeight: freezed == posGovernmentalAllocatedWeight ? _self.posGovernmentalAllocatedWeight : posGovernmentalAllocatedWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,posFreeAllocatedWeight: freezed == posFreeAllocatedWeight ? _self.posFreeAllocatedWeight : posFreeAllocatedWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,wareHouseArchiveGovernmentalWeight: freezed == wareHouseArchiveGovernmentalWeight ? _self.wareHouseArchiveGovernmentalWeight : wareHouseArchiveGovernmentalWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,wareHouseArchiveFreeWeight: freezed == wareHouseArchiveFreeWeight ? _self.wareHouseArchiveFreeWeight : wareHouseArchiveFreeWeight // ignore: cast_nullable_to_non_nullable
|
||||
as double?,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,91 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'kill_house_sales_info_dashboard.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
_KillHouseSalesInfoDashboard _$KillHouseSalesInfoDashboardFromJson(
|
||||
Map<String, dynamic> json,
|
||||
) => _KillHouseSalesInfoDashboard(
|
||||
totalGovernmentalInputWeight:
|
||||
(json['total_governmental_input_weight'] as num?)?.toDouble(),
|
||||
totalFreeInputWeight: (json['total_free_input_weight'] as num?)?.toDouble(),
|
||||
totalGovernmentalOutputWeight:
|
||||
(json['total_governmental_output_weight'] as num?)?.toDouble(),
|
||||
totalFreeOutputWeight: (json['total_free_output_weight'] as num?)?.toDouble(),
|
||||
totalGovernmentalRemainWeight:
|
||||
(json['total_governmental_remain_weight'] as num?)?.toDouble(),
|
||||
totalFreeRemainWeight: (json['total_free_remain_weight'] as num?)?.toDouble(),
|
||||
totalKillHouseFreeSaleBarCarcassesWeight:
|
||||
(json['total_kill_house_free_sale__bar_carcasses_weight'] as num?)
|
||||
?.toDouble(),
|
||||
totalKillHouseAllocationsWeight:
|
||||
(json['total_kill_house_allocations_weight'] as num?)?.toDouble(),
|
||||
segmentationsWeight: (json['segmentations_weight'] as num?)?.toDouble(),
|
||||
coldHouseAllocationsWeight: (json['cold_house_allocations_weight'] as num?)
|
||||
?.toDouble(),
|
||||
totalSellingInProvinceGovernmentalWeight:
|
||||
(json['total_selling_in_province_governmental_weight'] as num?)
|
||||
?.toDouble(),
|
||||
totalSellingInProvinceFreeWeight:
|
||||
(json['total_selling_in_province_free_weight'] as num?)?.toDouble(),
|
||||
totalCommitmentSellingInProvinceGovernmentalWeight:
|
||||
(json['total_commitment_selling_in_province_governmental_weight'] as num?)
|
||||
?.toDouble(),
|
||||
totalCommitmentSellingInProvinceGovernmentalRemainWeight:
|
||||
(json['total_commitment_selling_in_province_governmental_remain_weight']
|
||||
as num?)
|
||||
?.toDouble(),
|
||||
totalCommitmentSellingInProvinceFreeWeight:
|
||||
(json['total_commitment_selling_in_province_free_weight'] as num?)
|
||||
?.toDouble(),
|
||||
totalCommitmentSellingInProvinceFreeRemainWeight:
|
||||
(json['total_commitment_selling_in_province_free_remain_weight'] as num?)
|
||||
?.toDouble(),
|
||||
posAllocatedWeight: (json['pos_allocated_weight'] as num?)?.toDouble(),
|
||||
posGovernmentalAllocatedWeight:
|
||||
(json['pos_governmental_allocated_weight'] as num?)?.toDouble(),
|
||||
posFreeAllocatedWeight: (json['pos_free_allocated_weight'] as num?)
|
||||
?.toDouble(),
|
||||
wareHouseArchiveGovernmentalWeight:
|
||||
(json['ware_house_archive_governmental_weight'] as num?)?.toDouble(),
|
||||
wareHouseArchiveFreeWeight: (json['ware_house_archive_free_weight'] as num?)
|
||||
?.toDouble(),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$KillHouseSalesInfoDashboardToJson(
|
||||
_KillHouseSalesInfoDashboard instance,
|
||||
) => <String, dynamic>{
|
||||
'total_governmental_input_weight': instance.totalGovernmentalInputWeight,
|
||||
'total_free_input_weight': instance.totalFreeInputWeight,
|
||||
'total_governmental_output_weight': instance.totalGovernmentalOutputWeight,
|
||||
'total_free_output_weight': instance.totalFreeOutputWeight,
|
||||
'total_governmental_remain_weight': instance.totalGovernmentalRemainWeight,
|
||||
'total_free_remain_weight': instance.totalFreeRemainWeight,
|
||||
'total_kill_house_free_sale__bar_carcasses_weight':
|
||||
instance.totalKillHouseFreeSaleBarCarcassesWeight,
|
||||
'total_kill_house_allocations_weight':
|
||||
instance.totalKillHouseAllocationsWeight,
|
||||
'segmentations_weight': instance.segmentationsWeight,
|
||||
'cold_house_allocations_weight': instance.coldHouseAllocationsWeight,
|
||||
'total_selling_in_province_governmental_weight':
|
||||
instance.totalSellingInProvinceGovernmentalWeight,
|
||||
'total_selling_in_province_free_weight':
|
||||
instance.totalSellingInProvinceFreeWeight,
|
||||
'total_commitment_selling_in_province_governmental_weight':
|
||||
instance.totalCommitmentSellingInProvinceGovernmentalWeight,
|
||||
'total_commitment_selling_in_province_governmental_remain_weight':
|
||||
instance.totalCommitmentSellingInProvinceGovernmentalRemainWeight,
|
||||
'total_commitment_selling_in_province_free_weight':
|
||||
instance.totalCommitmentSellingInProvinceFreeWeight,
|
||||
'total_commitment_selling_in_province_free_remain_weight':
|
||||
instance.totalCommitmentSellingInProvinceFreeRemainWeight,
|
||||
'pos_allocated_weight': instance.posAllocatedWeight,
|
||||
'pos_governmental_allocated_weight': instance.posGovernmentalAllocatedWeight,
|
||||
'pos_free_allocated_weight': instance.posFreeAllocatedWeight,
|
||||
'ware_house_archive_governmental_weight':
|
||||
instance.wareHouseArchiveGovernmentalWeight,
|
||||
'ware_house_archive_free_weight': instance.wareHouseArchiveFreeWeight,
|
||||
};
|
||||
@@ -1,200 +0,0 @@
|
||||
import 'package:rasadyar_chicken/data/models/local/widely_used_local_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/change_password/change_password_request_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/conform_allocation/conform_allocation.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/steward_free_sale_bar/steward_free_sale_bar_request.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/submit_steward_allocation/submit_steward_allocation.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/allocated_made/allocated_made.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/bar_information/bar_information.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/broadcast_price/broadcast_price.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/dashboard_kill_house_free_bar/dashboard_kill_house_free_bar.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/guild/guild_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/guild_profile/guild_profile.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/imported_loads_model/imported_loads_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/inventory/inventory_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/iran_province_city/iran_province_city_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/kill_house_distribution_info/kill_house_distribution_info.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/out_province_carcasses_buyer/out_province_carcasses_buyer.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/roles_products/roles_products.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/segmentation_model/segmentation_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_free_bar/steward_free_bar.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_free_bar_dashboard/steward_free_bar_dashboard.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_free_sale_bar/steward_free_sale_bar.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_remain_weight/steward_remain_weight.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_sales_info_dashboard/steward_sales_info_dashboard.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/user_profile/user_profile.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/waiting_arrival/waiting_arrival.dart'
|
||||
hide ProductModel;
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
import '../../models/request/create_steward_free_bar/create_steward_free_bar.dart';
|
||||
|
||||
abstract class ChickenRepository {
|
||||
//region Remote
|
||||
|
||||
//region Steward
|
||||
Future<List<InventoryModel>?> getInventory({required String token, CancelToken? cancelToken});
|
||||
|
||||
Future<KillHouseDistributionInfo?> getKillHouseDistributionInfo({required String token});
|
||||
|
||||
Future<BarInformation?> getGeneralBarInformation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<PaginationModel<WaitingArrivalModel>?> getWaitingArrivals({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> setSateForArrivals({required String token, required Map<String, dynamic> request});
|
||||
|
||||
Future<PaginationModel<ImportedLoadsModel>?> getImportedLoadsModel({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<PaginationModel<AllocatedMadeModel>?> getAllocatedMade({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> confirmAllocation({required String token, required Map<String, dynamic> allocation});
|
||||
|
||||
Future<void> denyAllocation({required String token, required String allocationToken});
|
||||
|
||||
Future<void> confirmAllAllocation({
|
||||
required String token,
|
||||
required List<String> allocationTokens,
|
||||
});
|
||||
|
||||
Future<List<ProductModel>?> getRolesProducts({required String token});
|
||||
|
||||
Future<List<GuildModel>?> getGuilds({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<GuildProfile?> getProfile({required String token});
|
||||
|
||||
Future<void> postSubmitStewardAllocation({
|
||||
required String token,
|
||||
required SubmitStewardAllocation request,
|
||||
});
|
||||
|
||||
Future<void> deleteStewardAllocation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> updateStewardAllocation({required String token, required ConformAllocation request});
|
||||
|
||||
Future<StewardFreeBarDashboard?> getStewardDashboard({
|
||||
required String token,
|
||||
required String stratDate,
|
||||
required String endDate,
|
||||
});
|
||||
|
||||
Future<DashboardKillHouseFreeBar?> getDashboardKillHouseFreeBar({
|
||||
required String token,
|
||||
required String stratDate,
|
||||
required String endDate,
|
||||
});
|
||||
|
||||
Future<PaginationModel<StewardFreeBar>?> getStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> createStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
required CreateStewardFreeBar body,
|
||||
});
|
||||
|
||||
|
||||
Future<CreateStewardFreeBar?> editStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
required CreateStewardFreeBar body,
|
||||
});
|
||||
|
||||
|
||||
|
||||
Future<void> deleteStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<PaginationModel<OutProvinceCarcassesBuyer>?> getOutProvinceCarcassesBuyer({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> createOutProvinceCarcassesBuyer({
|
||||
required String token,
|
||||
required OutProvinceCarcassesBuyer body,
|
||||
});
|
||||
|
||||
Future<List<IranProvinceCityModel>?> getProvince({CancelToken? cancelToken});
|
||||
|
||||
Future<List<IranProvinceCityModel>?> getCity({required String provinceName});
|
||||
|
||||
Future<PaginationModel<StewardFreeSaleBar>?> getStewardFreeSaleBar({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> createOutProvinceStewardFreeBar({
|
||||
required String token,
|
||||
required StewardFreeSaleBarRequest body,
|
||||
});
|
||||
|
||||
Future<void> updateOutProvinceStewardFreeBar({
|
||||
required String token,
|
||||
required StewardFreeSaleBarRequest body,
|
||||
});
|
||||
|
||||
Future<void> deleteOutProvinceStewardFreeBar({
|
||||
required String token,
|
||||
required String key
|
||||
});
|
||||
|
||||
|
||||
|
||||
Future<UserProfile?> getUserProfile({required String token});
|
||||
|
||||
Future<void> updateUserProfile({required String token, required UserProfile userProfile});
|
||||
|
||||
Future<void> updatePassword({required String token, required ChangePasswordRequestModel model});
|
||||
|
||||
Future<PaginationModel<SegmentationModel>?> getSegmentation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> createSegmentation({required String token, required SegmentationModel model});
|
||||
|
||||
Future<void> editSegmentation({required String token, required SegmentationModel model});
|
||||
|
||||
Future<SegmentationModel?> deleteSegmentation({required String token, required String key});
|
||||
|
||||
Future<BroadcastPrice?> getBroadcastPrice({required String token});
|
||||
|
||||
Future<StewardSalesInfoDashboard?> getStewardSalesInfoDashboard({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<StewardRemainWeight?> getStewardRemainWeight({required String token});
|
||||
|
||||
//endregion
|
||||
|
||||
|
||||
|
||||
|
||||
//endregion
|
||||
|
||||
//region local
|
||||
Future<void> initWidleyUsed();
|
||||
|
||||
WidelyUsedLocalModel? getAllWidely();
|
||||
//endregion
|
||||
}
|
||||
@@ -1,433 +0,0 @@
|
||||
import 'package:rasadyar_chicken/data/data_source/local/chicken_local.dart';
|
||||
import 'package:rasadyar_chicken/data/data_source/remote/chicken/chicken_remote.dart';
|
||||
import 'package:rasadyar_chicken/data/models/local/widely_used_local_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/change_password/change_password_request_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/conform_allocation/conform_allocation.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/create_steward_free_bar/create_steward_free_bar.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/steward_free_sale_bar/steward_free_sale_bar_request.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/submit_steward_allocation/submit_steward_allocation.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/allocated_made/allocated_made.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/bar_information/bar_information.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/broadcast_price/broadcast_price.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/dashboard_kill_house_free_bar/dashboard_kill_house_free_bar.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/guild/guild_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/guild_profile/guild_profile.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/imported_loads_model/imported_loads_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/inventory/inventory_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/iran_province_city/iran_province_city_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/kill_house_distribution_info/kill_house_distribution_info.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/out_province_carcasses_buyer/out_province_carcasses_buyer.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/roles_products/roles_products.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/segmentation_model/segmentation_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_free_bar/steward_free_bar.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_free_bar_dashboard/steward_free_bar_dashboard.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_free_sale_bar/steward_free_sale_bar.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_remain_weight/steward_remain_weight.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/steward_sales_info_dashboard/steward_sales_info_dashboard.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/user_profile/user_profile.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/waiting_arrival/waiting_arrival.dart'
|
||||
hide ProductModel;
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
import 'chicken_repository.dart';
|
||||
|
||||
class ChickenRepositoryImp implements ChickenRepository {
|
||||
final ChickenRemoteDatasource remote;
|
||||
final ChickenLocalDataSource local;
|
||||
|
||||
ChickenRepositoryImp({required this.remote, required this.local});
|
||||
|
||||
//region Remote
|
||||
@override
|
||||
Future<List<InventoryModel>?> getInventory({
|
||||
required String token,
|
||||
CancelToken? cancelToken,
|
||||
}) async {
|
||||
var res = await remote.getInventory(token: token, cancelToken: cancelToken);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<KillHouseDistributionInfo?> getKillHouseDistributionInfo({
|
||||
required String token,
|
||||
}) async {
|
||||
var res = await remote.getKillHouseDistributionInfo(token: token);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BarInformation?> getGeneralBarInformation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await remote.getGeneralBarInformation(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<WaitingArrivalModel>?> getWaitingArrivals({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await remote.getWaitingArrivals(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> setSateForArrivals({
|
||||
required String token,
|
||||
required Map<String, dynamic> request,
|
||||
}) async {
|
||||
await remote.setSateForArrivals(token: token, request: request);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<ImportedLoadsModel>?> getImportedLoadsModel({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await remote.getImportedLoadsModel(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<AllocatedMadeModel>?> getAllocatedMade({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await remote.getAllocatedMade(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> confirmAllocation({
|
||||
required String token,
|
||||
required Map<String, dynamic> allocation,
|
||||
}) async {
|
||||
await remote.confirmAllocation(token: token, allocation: allocation);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> denyAllocation({
|
||||
required String token,
|
||||
required String allocationToken,
|
||||
}) async {
|
||||
await remote.denyAllocation(token: token, allocationToken: allocationToken);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> confirmAllAllocation({
|
||||
required String token,
|
||||
required List<String> allocationTokens,
|
||||
}) async {
|
||||
await remote.confirmAllAllocation(
|
||||
token: token,
|
||||
allocationTokens: allocationTokens,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<ProductModel>?> getRolesProducts({required String token}) async {
|
||||
var res = await remote.getRolesProducts(token: token);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<GuildModel>?> getGuilds({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await remote.getGuilds(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<GuildProfile?> getProfile({required String token}) async {
|
||||
var res = await remote.getProfile(token: token);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> postSubmitStewardAllocation({
|
||||
required String token,
|
||||
required SubmitStewardAllocation request,
|
||||
}) async {
|
||||
await remote.postSubmitStewardAllocation(token: token, request: request);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> deleteStewardAllocation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
await remote.deleteStewardAllocation(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updateStewardAllocation({
|
||||
required String token,
|
||||
required ConformAllocation request,
|
||||
}) async {
|
||||
await remote.updateStewardAllocation(token: token, request: request);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<StewardFreeBarDashboard?> getStewardDashboard({
|
||||
required String token,
|
||||
required String stratDate,
|
||||
required String endDate,
|
||||
}) async {
|
||||
var res = await remote.getStewardDashboard(
|
||||
token: token,
|
||||
stratDate: stratDate,
|
||||
endDate: endDate,
|
||||
);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<DashboardKillHouseFreeBar?> getDashboardKillHouseFreeBar({
|
||||
required String token,
|
||||
required String stratDate,
|
||||
required String endDate,
|
||||
}) async {
|
||||
var res = await remote.getDashboardKillHouseFreeBar(
|
||||
token: token,
|
||||
stratDate: stratDate,
|
||||
endDate: endDate,
|
||||
);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<StewardFreeBar>?>
|
||||
getStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await remote.getStewardPurchasesOutSideOfTheProvince(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<IranProvinceCityModel>?> getCity({
|
||||
required String provinceName,
|
||||
}) async {
|
||||
var res = await remote.getCity(provinceName: provinceName);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<IranProvinceCityModel>?> getProvince({
|
||||
CancelToken? cancelToken,
|
||||
}) async {
|
||||
var res = await remote.getProvince(cancelToken: cancelToken);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> createStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
required CreateStewardFreeBar body,
|
||||
}) async {
|
||||
await remote.createStewardPurchasesOutSideOfTheProvince(
|
||||
token: token,
|
||||
body: body,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<CreateStewardFreeBar?> editStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
required CreateStewardFreeBar body,
|
||||
}) async {
|
||||
return await remote.editStewardPurchasesOutSideOfTheProvince(
|
||||
token: token,
|
||||
queryParameters: body.toJson()
|
||||
..removeWhere((key, value) => value == null),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> deleteStewardPurchasesOutSideOfTheProvince({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
await remote.deleteStewardPurchasesOutSideOfTheProvince(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<OutProvinceCarcassesBuyer>?>
|
||||
getOutProvinceCarcassesBuyer({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await remote.getOutProvinceCarcassesBuyer(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> createOutProvinceCarcassesBuyer({
|
||||
required String token,
|
||||
required OutProvinceCarcassesBuyer body,
|
||||
}) async {
|
||||
await remote.createOutProvinceCarcassesBuyer(token: token, body: body);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<StewardFreeSaleBar>?> getStewardFreeSaleBar({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await remote.getStewardFreeSaleBar(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> createOutProvinceStewardFreeBar({
|
||||
required String token,
|
||||
required StewardFreeSaleBarRequest body,
|
||||
}) async {
|
||||
await remote.createOutProvinceStewardFreeBar(token: token, body: body);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updateOutProvinceStewardFreeBar({
|
||||
required String token,
|
||||
required StewardFreeSaleBarRequest body,
|
||||
}) async {
|
||||
await remote.updateOutProvinceStewardFreeBar(token: token, body: body);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> deleteOutProvinceStewardFreeBar({
|
||||
required String token,
|
||||
required String key,
|
||||
}) async {
|
||||
await remote.deleteOutProvinceStewardFreeBar(token: token, key: key);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<UserProfile?> getUserProfile({required String token}) async {
|
||||
var res = await remote.getUserProfile(token: token);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updateUserProfile({
|
||||
required String token,
|
||||
required UserProfile userProfile,
|
||||
}) async {
|
||||
await remote.updateUserProfile(token: token, userProfile: userProfile);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updatePassword({
|
||||
required String token,
|
||||
required ChangePasswordRequestModel model,
|
||||
}) async {
|
||||
await remote.updatePassword(token: token, model: model);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<SegmentationModel>?> getSegmentation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await remote.getSegmentation(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> createSegmentation({
|
||||
required String token,
|
||||
required SegmentationModel model,
|
||||
}) async {
|
||||
await remote.createSegmentation(token: token, model: model);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> editSegmentation({
|
||||
required String token,
|
||||
required SegmentationModel model,
|
||||
}) async {
|
||||
await remote.editSegmentation(token: token, model: model);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<SegmentationModel?> deleteSegmentation({
|
||||
required String token,
|
||||
required String key,
|
||||
}) async {
|
||||
var res = await remote.deleteSegmentation(token: token, key: key);
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BroadcastPrice?> getBroadcastPrice({required String token}) async {
|
||||
var res = await remote.getBroadcastPrice(token: token);
|
||||
return res;
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
||||
//region local
|
||||
@override
|
||||
WidelyUsedLocalModel? getAllWidely() => local.getAllWidely();
|
||||
|
||||
@override
|
||||
Future<void> initWidleyUsed() async {
|
||||
await local.initWidleyUsed();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<StewardSalesInfoDashboard?> getStewardSalesInfoDashboard({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await remote.getStewardSalesInfoDashboard(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<StewardRemainWeight?> getStewardRemainWeight({required String token}) async {
|
||||
return await remote.getStewardRemainWeight(token: token);
|
||||
}
|
||||
|
||||
//endregion
|
||||
}
|
||||
@@ -4,8 +4,15 @@ import 'package:rasadyar_chicken/data/models/kill_house_module/register_request/
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/register_request/response/kill_request_list/kill_request_list.dart'
|
||||
as listModel
|
||||
show KillRequestList;
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/warehouse_and_distribution/response/kill_house_bars/kill_house_bars_response.dart';
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/warehouse_and_distribution/response/kill_house_sales_info_dashboard/kill_house_sales_info_dashboard.dart';
|
||||
import 'package:rasadyar_core/data/model/pagination_model/pagination_model.dart';
|
||||
|
||||
|
||||
abstract class KillHouseRepository {
|
||||
|
||||
|
||||
//region requestKill
|
||||
Future<List<KillHouseResponse>?> getKillHouseList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
@@ -16,12 +23,34 @@ abstract class KillHouseRepository {
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> submitKillHouseRequest({required String token, required KillRequestResponse data});
|
||||
Future<void> submitKillHouseRequest({
|
||||
required String token,
|
||||
required KillRequestResponse data,
|
||||
});
|
||||
|
||||
Future<List<listModel.KillRequestList>?> getListKillRequest({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> deleteKillRequest({required String token, required int requestId});
|
||||
Future<void> deleteKillRequest({
|
||||
required String token,
|
||||
required int requestId,
|
||||
});
|
||||
|
||||
//endregion
|
||||
|
||||
//region warehouseAndDistribution
|
||||
|
||||
Future<KillHouseSalesInfoDashboard?> getInfoDashboard({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<PaginationModel<KillHouseBarsResponse>?> getBarsForKillHouse({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
//endregion
|
||||
}
|
||||
|
||||
@@ -3,8 +3,10 @@ import 'package:rasadyar_chicken/data/models/kill_house_module/register_request/
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/register_request/response/chicken_commission_prices/chicken_commission_prices.dart';
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/register_request/response/kill_house/kill_house_response.dart';
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/register_request/response/kill_request_list/kill_request_list.dart'
|
||||
as listModel;
|
||||
|
||||
as ListModel;
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/warehouse_and_distribution/response/kill_house_bars/kill_house_bars_response.dart';
|
||||
import 'package:rasadyar_chicken/data/models/kill_house_module/warehouse_and_distribution/response/kill_house_sales_info_dashboard/kill_house_sales_info_dashboard.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
import 'kill_house_repository.dart';
|
||||
|
||||
class KillHouseRepositoryImpl extends KillHouseRepository {
|
||||
@@ -17,7 +19,10 @@ class KillHouseRepositoryImpl extends KillHouseRepository {
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await remoteDataSource.getKillHouseList(token: token, queryParameters: queryParameters);
|
||||
return await remoteDataSource.getKillHouseList(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -37,11 +42,14 @@ class KillHouseRepositoryImpl extends KillHouseRepository {
|
||||
required KillRequestResponse data,
|
||||
}) async {
|
||||
var jsonData = data.toJson();
|
||||
return await remoteDataSource.submitKillHouseRequest(token: token, data: jsonData);
|
||||
return await remoteDataSource.submitKillHouseRequest(
|
||||
token: token,
|
||||
data: jsonData,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<listModel.KillRequestList>?> getListKillRequest({
|
||||
Future<List<ListModel.KillRequestList>?> getListKillRequest({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
@@ -52,7 +60,43 @@ class KillHouseRepositoryImpl extends KillHouseRepository {
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> deleteKillRequest({required String token, required int requestId}) async {
|
||||
await remoteDataSource.deleteKillRequest(token: token, requestId: requestId);
|
||||
Future<void> deleteKillRequest({
|
||||
required String token,
|
||||
required int requestId,
|
||||
}) async {
|
||||
await remoteDataSource.deleteKillRequest(
|
||||
token: token,
|
||||
requestId: requestId,
|
||||
);
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
||||
//region warehouseAndDistribution
|
||||
|
||||
@override
|
||||
Future<KillHouseSalesInfoDashboard?> getInfoDashboard({
|
||||
required String token,
|
||||
CancelToken? cancelToken,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await remoteDataSource.getInfoDashboard(
|
||||
token: token,
|
||||
cancelToken: cancelToken,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<KillHouseBarsResponse>?> getBarsForKillHouse({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await remoteDataSource.getBarsForKillHouse(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
}
|
||||
|
||||
//endregion
|
||||
}
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
import 'package:rasadyar_chicken/data/models/poultry_export/poultry_export.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/kill_registration/kill_registration.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/all_poultry/all_poultry.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/approved_price/approved_price.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/hatching/hatching_models.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/hatching_report/hatching_report.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/kill_house_poultry/kill_house_poultry.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/kill_request_poultry/kill_request_poultry.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/poultry_farm/poultry_farm.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/poultry_hatching/poultry_hatching.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/poultry_order/poultry_order.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/poultry_science/home_poultry_science/home_poultry_science_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/sell_for_freezing/sell_for_freezing.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
abstract class PoultryScienceRepository {
|
||||
Future<HomePoultryScienceModel?> getHomePoultry({required String token, required String type});
|
||||
|
||||
Future<PaginationModel<HatchingModel>?> getHatchingPoultry({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
|
||||
Future<void> submitPoultryScienceReport({
|
||||
required String token,
|
||||
required FormData data,
|
||||
ProgressCallback? onSendProgress,
|
||||
});
|
||||
|
||||
|
||||
Future<PaginationModel<HatchingReport>?> getHatchingPoultryReport({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<PaginationModel<PoultryFarm>?> getPoultryScienceFarmList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<ApprovedPrice?> getApprovedPrice({ required String token,
|
||||
Map<String, dynamic>? queryParameters,});
|
||||
|
||||
|
||||
Future<List<AllPoultry>?> getAllPoultry({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
|
||||
Future<SellForFreezing?> getSellForFreezing({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
|
||||
Future<PoultryExport?> getPoultryExport({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<List<KillRequestPoultry>?> getUserPoultry({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<List<PoultryHatching>?> getPoultryHatching({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<List<KillHousePoultry>?> getKillHouseList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> submitKillRegistration({
|
||||
required String token,
|
||||
required KillRegistrationRequest request,
|
||||
});
|
||||
|
||||
Future<PaginationModel<PoultryOrder>?> getPoultryOderList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
Future<void> deletePoultryOder({
|
||||
required String token,
|
||||
required String orderId,
|
||||
});
|
||||
}
|
||||
@@ -1,145 +0,0 @@
|
||||
import 'package:rasadyar_chicken/data/data_source/remote/poultry_science/poultry_science_remote.dart';
|
||||
import 'package:rasadyar_chicken/data/models/poultry_export/poultry_export.dart';
|
||||
import 'package:rasadyar_chicken/data/models/request/kill_registration/kill_registration.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/all_poultry/all_poultry.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/approved_price/approved_price.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/hatching/hatching_models.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/hatching_report/hatching_report.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/kill_house_poultry/kill_house_poultry.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/kill_request_poultry/kill_request_poultry.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/poultry_farm/poultry_farm.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/poultry_hatching/poultry_hatching.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/poultry_order/poultry_order.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/poultry_science/home_poultry_science/home_poultry_science_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/sell_for_freezing/sell_for_freezing.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
import 'poultry_science_repository.dart';
|
||||
|
||||
class PoultryScienceRepositoryImp implements PoultryScienceRepository {
|
||||
final PoultryScienceRemoteDatasource datasource;
|
||||
|
||||
PoultryScienceRepositoryImp(this.datasource);
|
||||
|
||||
@override
|
||||
Future<HomePoultryScienceModel?> getHomePoultry({
|
||||
required String token,
|
||||
required String type,
|
||||
}) async => await datasource.getHomePoultryScience(token: token, type: type);
|
||||
|
||||
@override
|
||||
Future<PaginationModel<HatchingModel>?> getHatchingPoultry({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async => await datasource.getHatchingPoultry(token: token, queryParameters: queryParameters);
|
||||
|
||||
@override
|
||||
Future<void> submitPoultryScienceReport({
|
||||
required String token,
|
||||
required FormData data,
|
||||
ProgressCallback? onSendProgress,
|
||||
}) async => await datasource.submitPoultryScienceReport(
|
||||
token: token,
|
||||
data: data,
|
||||
onSendProgress: onSendProgress,
|
||||
);
|
||||
|
||||
@override
|
||||
Future<PaginationModel<HatchingReport>?> getHatchingPoultryReport({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await datasource.getPoultryScienceReport(token: token, queryParameters: queryParameters);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<PoultryFarm>?> getPoultryScienceFarmList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await datasource.getPoultryScienceFarmList(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<ApprovedPrice?> getApprovedPrice({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await datasource.getApprovedPrice(token: token, queryParameters: queryParameters);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<AllPoultry>?> getAllPoultry({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await datasource.getAllPoultry(token: token, queryParameters: queryParameters);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PoultryExport?> getPoultryExport({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await datasource.getPoultryExport(token: token, queryParameters: queryParameters);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<SellForFreezing?> getSellForFreezing({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await datasource.getSellForFreezing(token: token, queryParameters: queryParameters);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<KillRequestPoultry>?> getUserPoultry({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await datasource.getUserPoultry(token: token, queryParameters: queryParameters);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<PoultryHatching>?> getPoultryHatching({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await datasource.getPoultryHatching(token: token, queryParameters: queryParameters);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<KillHousePoultry>?> getKillHouseList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await datasource.getKillHouseList(token: token, queryParameters: queryParameters);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> submitKillRegistration({
|
||||
required String token,
|
||||
required KillRegistrationRequest request,
|
||||
}) async {
|
||||
await datasource.submitKillRegistration(token: token, request: request);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<PoultryOrder>?> getPoultryOderList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await datasource.getPoultryOderList(token: token, queryParameters: queryParameters);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> deletePoultryOder({
|
||||
required String token,
|
||||
required String orderId,
|
||||
}) async {
|
||||
await datasource.deletePoultryOder(token: token, orderId: orderId);
|
||||
}
|
||||
}
|
||||
3
packages/chicken/lib/features/city_jahad/city_jahad.dart
Normal file
3
packages/chicken/lib/features/city_jahad/city_jahad.dart
Normal file
@@ -0,0 +1,3 @@
|
||||
export 'data/di/city_jahad_di.dart';
|
||||
export 'presentation/routes/routes.dart';
|
||||
export 'presentation/routes/pages.dart';
|
||||
@@ -0,0 +1,15 @@
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/poultry_science_report/poultry_science_report.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/request/submit_inspection/submit_inspection_response.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
abstract class CityJahadRemoteDataSource {
|
||||
Future<PaginationModel<PoultryScienceReport>?> getSubmitInspectionList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> submitInspection({
|
||||
required String token,
|
||||
required SubmitInspectionResponse request,
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/poultry_science_report/poultry_science_report.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/request/submit_inspection/submit_inspection_response.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/data/datasources/remote/city_jahad_remote_data_source.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class CityJahadRemoteDataSourceImpl implements CityJahadRemoteDataSource {
|
||||
final DioRemote _httpClient;
|
||||
|
||||
CityJahadRemoteDataSourceImpl(this._httpClient);
|
||||
|
||||
@override
|
||||
Future<PaginationModel<PoultryScienceReport>?> getSubmitInspectionList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/poultry_science_report/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
queryParameters: queryParameters,
|
||||
fromJson: (json) => PaginationModel<PoultryScienceReport>.fromJson(
|
||||
json,
|
||||
(json) => PoultryScienceReport.fromJson(json as Map<String, dynamic>),
|
||||
),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> submitInspection({
|
||||
required String token,
|
||||
required SubmitInspectionResponse request,
|
||||
}) async {
|
||||
await _httpClient.post(
|
||||
'/poultry_science_report/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
data: request.toJson(),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
import 'package:rasadyar_chicken/features/city_jahad/data/datasources/remote/city_jahad_remote_data_source.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/data/datasources/remote/city_jahad_remote_data_source_impl.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/data/repositories/city_jahad_repository.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/data/repositories/city_jahad_repository_impl.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
/// Setup dependency injection for city_jahad feature
|
||||
Future<void> setupCityJahadDI(GetIt di, DioRemote dioRemote) async {
|
||||
di.registerLazySingleton<CityJahadRemoteDataSource>(
|
||||
() => CityJahadRemoteDataSourceImpl(dioRemote),
|
||||
);
|
||||
|
||||
di.registerLazySingleton<CityJahadRepository>(
|
||||
() => CityJahadRepositoryImpl(di.get<CityJahadRemoteDataSource>()),
|
||||
);
|
||||
}
|
||||
|
||||
/// Re-register city_jahad dependencies (used when base URL changes)
|
||||
Future<void> reRegisterCityJahadDI(GetIt di, DioRemote dioRemote) async {
|
||||
await reRegister(di, () => CityJahadRemoteDataSourceImpl(dioRemote));
|
||||
await reRegister(
|
||||
di,
|
||||
() => CityJahadRepositoryImpl(di.get<CityJahadRemoteDataSource>()),
|
||||
);
|
||||
}
|
||||
|
||||
/// Helper function to re-register a dependency
|
||||
Future<void> reRegister<T extends Object>(
|
||||
GetIt di,
|
||||
T Function() factory,
|
||||
) async {
|
||||
if (di.isRegistered<T>()) {
|
||||
await di.unregister<T>();
|
||||
}
|
||||
di.registerLazySingleton<T>(factory);
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/poultry_science_report/poultry_science_report.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/request/submit_inspection/submit_inspection_response.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
abstract class CityJahadRepository {
|
||||
Future<PaginationModel<PoultryScienceReport>?> getSubmitInspectionList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> submitInspection({
|
||||
required String token,
|
||||
required SubmitInspectionResponse request,
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/poultry_science_report/poultry_science_report.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/request/submit_inspection/submit_inspection_response.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/data/datasources/remote/city_jahad_remote_data_source.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/data/repositories/city_jahad_repository.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class CityJahadRepositoryImpl implements CityJahadRepository {
|
||||
final CityJahadRemoteDataSource _remote;
|
||||
|
||||
CityJahadRepositoryImpl(this._remote);
|
||||
|
||||
@override
|
||||
Future<PaginationModel<PoultryScienceReport>?> getSubmitInspectionList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await _remote.getSubmitInspectionList(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> submitInspection({
|
||||
required String token,
|
||||
required SubmitInspectionResponse request,
|
||||
}) async {
|
||||
return await _remote.submitInspection(token: token, request: request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
import 'package:rasadyar_chicken/data/di/chicken_di.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/hatching/hatching_models.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/repositories/poultry_science_repository.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/pages/root/logic.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class ActiveHatchingLogic extends GetxController {
|
||||
CityJahadRootLogic rootLogic = Get.find<CityJahadRootLogic>();
|
||||
BaseLogic baseLogic = Get.find<BaseLogic>();
|
||||
late PoultryScienceRepository poultryScienceRepository;
|
||||
Rx<Resource<PaginationModel<HatchingModel>>> activeHatchingList =
|
||||
Resource<PaginationModel<HatchingModel>>.loading().obs;
|
||||
|
||||
final RxBool isLoadingMoreList = false.obs;
|
||||
RxInt currentPage = 1.obs;
|
||||
RxInt expandedIndex = RxInt(-1);
|
||||
List<String> routesName = ['اقدام', 'جوجه ریزی فعال'];
|
||||
|
||||
Rx<Jalali> fromDateFilter = Jalali.now().obs;
|
||||
Rx<Jalali> toDateFilter = Jalali.now().obs;
|
||||
RxnString searchedValue = RxnString();
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
poultryScienceRepository = diChicken.get<PoultryScienceRepository>();
|
||||
}
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
super.onReady();
|
||||
getHatchingList();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
super.onClose();
|
||||
baseLogic.clearSearch();
|
||||
}
|
||||
|
||||
Future<void> getHatchingList([bool isLoadingMore = false]) async {
|
||||
if (isLoadingMore) {
|
||||
isLoadingMoreList.value = true;
|
||||
} else {
|
||||
activeHatchingList.value =
|
||||
Resource<PaginationModel<HatchingModel>>.loading();
|
||||
}
|
||||
|
||||
if (searchedValue.value != null &&
|
||||
searchedValue.value!.trim().isNotEmpty &&
|
||||
currentPage.value > 1) {
|
||||
currentPage.value = 1;
|
||||
}
|
||||
|
||||
safeCall(
|
||||
call: () async => await poultryScienceRepository.getHatchingPoultry(
|
||||
token: rootLogic.tokenService.accessToken.value!,
|
||||
queryParameters: buildQueryParams(
|
||||
queryParams: {'type': 'hatching'},
|
||||
role: 'CityJahad',
|
||||
pageSize: 50,
|
||||
page: currentPage.value,
|
||||
),
|
||||
),
|
||||
onSuccess: (res) {
|
||||
if ((res?.count ?? 0) == 0) {
|
||||
activeHatchingList.value =
|
||||
Resource<PaginationModel<HatchingModel>>.empty();
|
||||
} else {
|
||||
activeHatchingList.value =
|
||||
Resource<PaginationModel<HatchingModel>>.success(
|
||||
PaginationModel<HatchingModel>(
|
||||
count: res?.count ?? 0,
|
||||
next: res?.next,
|
||||
previous: res?.previous,
|
||||
results: [
|
||||
...(activeHatchingList.value.data?.results ?? []),
|
||||
...(res?.results ?? []),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
void toggleExpanded(int index) {
|
||||
expandedIndex.value = expandedIndex.value == index ? -1 : index;
|
||||
}
|
||||
|
||||
Future<void> onRefresh() async {
|
||||
currentPage.value = 1;
|
||||
await getHatchingList();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,239 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/hatching/hatching_models.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/pages/active_hatching/logic.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/presentation/widgets/submit_inspection_bottom_sheet/create_inspection_bottom_sheet.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/presentation/widgets/submit_inspection_bottom_sheet/create_inspection_bottom_sheet_logic.dart';
|
||||
import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart';
|
||||
import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class ActiveHatchingPage extends GetView<ActiveHatchingLogic> {
|
||||
const ActiveHatchingPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ChickenBasePage(
|
||||
hasSearch: true,
|
||||
hasFilter: false,
|
||||
backId: cityJahadActionKey,
|
||||
routes: controller.routesName,
|
||||
onSearchChanged: (data) {
|
||||
controller.searchedValue.value = data;
|
||||
controller.getHatchingList();
|
||||
},
|
||||
child: hatchingWidget(),
|
||||
/*widgets: [
|
||||
hatchingWidget()
|
||||
],*/
|
||||
);
|
||||
}
|
||||
|
||||
Widget hatchingWidget() {
|
||||
return ObxValue((data) {
|
||||
return RPaginatedListView(
|
||||
listType: ListType.separated,
|
||||
resource: data.value,
|
||||
hasMore: data.value.data?.next != null,
|
||||
padding: EdgeInsets.fromLTRB(8, 8, 8, 80),
|
||||
itemBuilder: (context, index) {
|
||||
var item = data.value.data!.results![index];
|
||||
return ObxValue((val) {
|
||||
return ExpandableListItem2(
|
||||
selected: val.value.isEqual(index),
|
||||
onTap: () => controller.toggleExpanded(index),
|
||||
index: index,
|
||||
child: itemListWidget(item),
|
||||
secondChild: itemListExpandedWidget(item),
|
||||
labelColor: AppColor.blueLight,
|
||||
labelIcon: Assets.vec.activeFramSvg.path,
|
||||
);
|
||||
}, controller.expandedIndex);
|
||||
},
|
||||
itemCount: data.value.data?.results?.length ?? 0,
|
||||
separatorBuilder: (context, index) => SizedBox(height: 8.h),
|
||||
onLoadMore: () async => controller.getHatchingList(true),
|
||||
);
|
||||
}, controller.activeHatchingList);
|
||||
}
|
||||
|
||||
Container itemListExpandedWidget(HatchingModel item) {
|
||||
return Container(
|
||||
padding: EdgeInsets.symmetric(horizontal: 8),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
child: Column(
|
||||
spacing: 8,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
item.poultry?.user?.fullname ?? 'N/A',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppFonts.yekan16.copyWith(color: AppColor.greenDark),
|
||||
),
|
||||
Spacer(),
|
||||
|
||||
Visibility(
|
||||
child: Text(
|
||||
item.violation == true ? 'پیگیری' : 'عادی',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppFonts.yekan10.copyWith(color: AppColor.redDark),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Container(
|
||||
height: 32,
|
||||
padding: EdgeInsets.symmetric(horizontal: 8),
|
||||
decoration: ShapeDecoration(
|
||||
color: AppColor.blueLight,
|
||||
shape: RoundedRectangleBorder(
|
||||
side: BorderSide(width: 1, color: AppColor.blueLightHover),
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'نژاد:${item.breed?.first.breed ?? 'N/A'}',
|
||||
style: AppFonts.yekan14.copyWith(color: AppColor.textColor),
|
||||
),
|
||||
Text(
|
||||
' سن${item.age} (روز)',
|
||||
|
||||
style: AppFonts.yekan14.copyWith(color: AppColor.blueNormal),
|
||||
),
|
||||
Text(
|
||||
' دوره جوجه ریزی:${item.period}',
|
||||
style: AppFonts.yekan14.copyWith(color: AppColor.textColor),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
buildRow(
|
||||
title: 'شماره مجوز جوجه ریزی',
|
||||
value: item.licenceNumber ?? 'N/A',
|
||||
),
|
||||
buildUnitRow(
|
||||
title: 'حجم جوجه ریزی',
|
||||
value: item.quantity.separatedByCommaFa,
|
||||
unit: '(قطعه)',
|
||||
),
|
||||
buildUnitRow(
|
||||
title: 'مانده در سالن',
|
||||
value: item.leftOver.separatedByCommaFa,
|
||||
unit: '(قطعه)',
|
||||
),
|
||||
buildUnitRow(
|
||||
title: 'تلفات',
|
||||
value: item.losses.separatedByCommaFa,
|
||||
unit: '(قطعه)',
|
||||
),
|
||||
buildRow(
|
||||
title: 'دامپزشک فارم',
|
||||
value:
|
||||
'${item.vetFarm?.vetFarmFullName}(${item.vetFarm?.vetFarmMobile})',
|
||||
),
|
||||
buildRow(
|
||||
title: 'شرح بازرسی',
|
||||
value: item.reportInfo?.image == false
|
||||
? 'ارسال تصویر جوجه ریزی فارم '
|
||||
: 'تکمیل شده',
|
||||
titleStyle: AppFonts.yekan14.copyWith(
|
||||
color: (item.reportInfo?.image ?? false)
|
||||
? AppColor.greenNormal
|
||||
: AppColor.redDark,
|
||||
),
|
||||
valueStyle: AppFonts.yekan14.copyWith(
|
||||
color: (item.reportInfo?.image ?? false)
|
||||
? AppColor.greenNormal
|
||||
: AppColor.redDark,
|
||||
),
|
||||
),
|
||||
|
||||
RElevated(
|
||||
height: 40.h,
|
||||
isFullWidth: true,
|
||||
onPressed: () {
|
||||
Get.find<CreateInspectionBottomSheetLogic>().setHatchingModel(
|
||||
item,
|
||||
);
|
||||
Get.bottomSheet(
|
||||
CreateInspectionBottomSheet(),
|
||||
isScrollControlled: true,
|
||||
ignoreSafeArea: false,
|
||||
).then((value) {
|
||||
if (Get.isRegistered<CreateInspectionBottomSheetLogic>()) {
|
||||
Get.find<CreateInspectionBottomSheetLogic>().clearForm();
|
||||
}
|
||||
});
|
||||
},
|
||||
child: Text('ثبت بازرسی'),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget itemListWidget(HatchingModel item) {
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
SizedBox(width: 20),
|
||||
Expanded(
|
||||
flex: 2,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
spacing: 3,
|
||||
children: [
|
||||
Text(
|
||||
item.poultry?.user?.fullname ?? 'ندارد',
|
||||
textAlign: TextAlign.start,
|
||||
style: AppFonts.yekan12.copyWith(color: AppColor.blueNormal),
|
||||
),
|
||||
Text(
|
||||
item.poultry?.user?.mobile ?? 'ندارد',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppFonts.yekan14.copyWith(color: AppColor.bgDark),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
flex: 3,
|
||||
child: Column(
|
||||
spacing: 3,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
item.poultry?.unitName ?? 'ندارد',
|
||||
textAlign: TextAlign.start,
|
||||
style: AppFonts.yekan12.copyWith(color: AppColor.bgDark),
|
||||
),
|
||||
Text(
|
||||
item.licenceNumber ?? 'ندارد',
|
||||
textAlign: TextAlign.left,
|
||||
style: AppFonts.yekan12.copyWith(color: AppColor.blueNormal),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: Assets.vec.scanSvg.svg(
|
||||
width: 32.w,
|
||||
height: 32.h,
|
||||
colorFilter: ColorFilter.mode(AppColor.blueNormal, BlendMode.srcIn),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class CityJahadActionItem {
|
||||
final String title;
|
||||
final String route;
|
||||
final String icon;
|
||||
|
||||
CityJahadActionItem({
|
||||
required this.title,
|
||||
required this.route,
|
||||
required this.icon,
|
||||
});
|
||||
}
|
||||
|
||||
class CityJahadHomeLogic extends GetxController {
|
||||
RxList<CityJahadActionItem> items = [
|
||||
CityJahadActionItem(
|
||||
title: "جوجه ریزی فعال",
|
||||
route: CityJahadRoutes.activeHatchingCityJahad,
|
||||
icon: Assets.vec.activeFramSvg.path,
|
||||
),
|
||||
CityJahadActionItem(
|
||||
title: "بازرسی مزارع طیور",
|
||||
route: CityJahadRoutes.newInspectionCityJahad,
|
||||
icon: Assets.vec.inspectionPoultrySvg.path,
|
||||
),
|
||||
].obs;
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart';
|
||||
import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
import 'logic.dart';
|
||||
|
||||
class CityJahadHomePage extends GetView<CityJahadHomeLogic> {
|
||||
CityJahadHomePage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ChickenBasePage(
|
||||
isBase: true,
|
||||
hasNews: true,
|
||||
hasNotification: true,
|
||||
child: gridWidget(),
|
||||
);
|
||||
}
|
||||
|
||||
Widget gridWidget() {
|
||||
return ObxValue((data) {
|
||||
return GridView.builder(
|
||||
physics: BouncingScrollPhysics(),
|
||||
padding: EdgeInsets.symmetric(vertical: 18.h, horizontal: 32.w),
|
||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 2,
|
||||
mainAxisSpacing: 24.h,
|
||||
crossAxisSpacing: 24.w,
|
||||
),
|
||||
itemCount: data.length,
|
||||
hitTestBehavior: HitTestBehavior.opaque,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
var item = data[index];
|
||||
return GlassMorphismCardIcon(
|
||||
title: item.title,
|
||||
vecIcon: item.icon,
|
||||
onTap: () async {
|
||||
Get.toNamed(item.route, id: cityJahadActionKey);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}, controller.items);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,160 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/pages/root/logic.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/poultry_science_report/poultry_science_report.dart';
|
||||
import 'package:rasadyar_chicken/presentation/widget/base_page/logic.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class NewInspectionLogic extends GetxController {
|
||||
BaseLogic baseLogic = Get.find<BaseLogic>();
|
||||
|
||||
Rx<Resource<PaginationModel<PoultryScienceReport>>> submitInspectionList =
|
||||
Resource<PaginationModel<PoultryScienceReport>>.loading().obs;
|
||||
|
||||
CityJahadRootLogic rootLogic = Get.find<CityJahadRootLogic>();
|
||||
|
||||
final RxBool isLoadingMoreAllocationsMade = false.obs;
|
||||
RxInt currentPage = 1.obs;
|
||||
RxInt expandedIndex = RxInt(-1);
|
||||
RxList<XFile> pickedImages = <XFile>[].obs;
|
||||
final List<MultipartFile> _multiPartPickedImages = <MultipartFile>[];
|
||||
|
||||
RxBool isOnUpload = false.obs;
|
||||
|
||||
RxDouble presentUpload = 0.0.obs;
|
||||
RxList<String> routesName = RxList();
|
||||
RxInt selectedSegmentIndex = 0.obs;
|
||||
|
||||
RxnString searchedValue = RxnString();
|
||||
Rx<Jalali> fromDateFilter = Jalali.now().obs;
|
||||
Rx<Jalali> toDateFilter = Jalali.now().obs;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
|
||||
routesName.value = ['اقدام'].toList();
|
||||
|
||||
ever(selectedSegmentIndex, (callback) {
|
||||
routesName.removeLast();
|
||||
routesName.add(callback == 0 ? 'بازرسی' : 'بایگانی');
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
super.onReady();
|
||||
|
||||
getReport();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
super.onClose();
|
||||
baseLogic.clearSearch();
|
||||
}
|
||||
|
||||
Future<void> getReport([bool isLoadingMore = false]) async {
|
||||
if (isLoadingMore) {
|
||||
isLoadingMoreAllocationsMade.value = true;
|
||||
} else {
|
||||
submitInspectionList.value =
|
||||
Resource<PaginationModel<PoultryScienceReport>>.loading();
|
||||
}
|
||||
|
||||
if (searchedValue.value != null &&
|
||||
searchedValue.value!.trim().isNotEmpty &&
|
||||
currentPage.value > 1) {
|
||||
currentPage.value = 1;
|
||||
}
|
||||
|
||||
safeCall(
|
||||
call: () async =>
|
||||
await rootLogic.cityJahadRepository.getSubmitInspectionList(
|
||||
token: rootLogic.tokenService.accessToken.value!,
|
||||
queryParameters: buildQueryParams(
|
||||
role: 'CityJahad',
|
||||
pageSize: 50,
|
||||
search: 'filter',
|
||||
|
||||
page: currentPage.value,
|
||||
),
|
||||
),
|
||||
onSuccess: (res) {
|
||||
if ((res?.count ?? 0) == 0) {
|
||||
submitInspectionList.value =
|
||||
Resource<PaginationModel<PoultryScienceReport>>.empty();
|
||||
} else {
|
||||
submitInspectionList.value =
|
||||
Resource<PaginationModel<PoultryScienceReport>>.success(
|
||||
PaginationModel<PoultryScienceReport>(
|
||||
count: res?.count ?? 0,
|
||||
next: res?.next,
|
||||
previous: res?.previous,
|
||||
results: [
|
||||
...(submitInspectionList.value.data?.results ?? []),
|
||||
...(res?.results ?? []),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> pickImages() async {
|
||||
determineCurrentPosition();
|
||||
var tmp = await pickCameraImage();
|
||||
if (tmp?.path != null && pickedImages.length < 7) {
|
||||
pickedImages.add(tmp!);
|
||||
}
|
||||
}
|
||||
|
||||
void removeImage(int index) {
|
||||
pickedImages.removeAt(index);
|
||||
}
|
||||
|
||||
void closeBottomSheet() {
|
||||
Get.back();
|
||||
}
|
||||
|
||||
double calculateUploadProgress({required int sent, required int total}) {
|
||||
if (total != 0) {
|
||||
double progress = (sent * 100 / total) / 100;
|
||||
return progress;
|
||||
} else {
|
||||
return 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
void toggleExpanded(int index) {
|
||||
expandedIndex.value = expandedIndex.value == index ? -1 : index;
|
||||
}
|
||||
|
||||
void setSearchValue(String? data) {
|
||||
dLog('Search Value: $data');
|
||||
searchedValue.value = data?.trim();
|
||||
getReport();
|
||||
}
|
||||
|
||||
Future<void> onRefresh() async {
|
||||
currentPage.value = 1;
|
||||
await getReport();
|
||||
}
|
||||
|
||||
String getStatus(PoultryScienceReport item) {
|
||||
final status = item.reportInformation?.inspectionStatus ?? item.state;
|
||||
if (status == null || status.isEmpty) {
|
||||
return 'در حال بررسی';
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
Color getStatusColor(PoultryScienceReport item) {
|
||||
final status = item.reportInformation?.inspectionStatus ?? item.state;
|
||||
if (status == null || status.isEmpty) {
|
||||
return AppColor.yellowNormal;
|
||||
}
|
||||
// میتوانید منطق رنگ را بر اساس inspectionStatus تنظیم کنید
|
||||
return AppColor.greenNormal;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,86 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:rasadyar_chicken/data/di/chicken_di.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/data/repositories/city_jahad_repository.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/routes/pages.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/pages/home/view.dart';
|
||||
import 'package:rasadyar_chicken/features/common/presentation/page/profile/view.dart';
|
||||
import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart';
|
||||
import 'package:rasadyar_chicken/presentation/utils/utils.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
enum ErrorLocationType { serviceDisabled, permissionDenied, none }
|
||||
|
||||
class CityJahadRootLogic extends GetxController {
|
||||
var tokenService = Get.find<TokenStorageService>();
|
||||
var gService = Get.find<GService>();
|
||||
|
||||
late CityJahadRepository cityJahadRepository;
|
||||
|
||||
RxList<ErrorLocationType> errorLocationType = RxList();
|
||||
RxMap<int, dynamic> homeExpandedList = RxMap();
|
||||
DateTime? _lastBackPressed;
|
||||
|
||||
RxInt currentPage = 0.obs;
|
||||
|
||||
final pages = [
|
||||
Navigator(
|
||||
key: Get.nestedKey(cityJahadActionKey),
|
||||
onGenerateRoute: (settings) {
|
||||
final page = CityJahadPages.pages.firstWhere(
|
||||
(e) => e.name == settings.name,
|
||||
orElse: () => CityJahadPages.pages.firstWhere(
|
||||
(e) => e.name == CityJahadRoutes.homeCityJahad,
|
||||
),
|
||||
);
|
||||
|
||||
return buildRouteFromGetPage(page);
|
||||
},
|
||||
),
|
||||
|
||||
ProfilePage(),
|
||||
];
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
cityJahadRepository = diChicken.get<CityJahadRepository>();
|
||||
fLog('gService: ${gService.getRole(Module.chicken)}');
|
||||
}
|
||||
|
||||
void toggleExpanded(int index) {
|
||||
if (homeExpandedList.keys.contains(index)) {
|
||||
homeExpandedList.remove(index);
|
||||
} else {
|
||||
homeExpandedList[index] = false;
|
||||
}
|
||||
}
|
||||
|
||||
void rootErrorHandler(DioException error) {
|
||||
handleGeneric(error, () {
|
||||
tokenService.deleteModuleTokens(Module.chicken);
|
||||
});
|
||||
}
|
||||
|
||||
void changePage(int index) {
|
||||
currentPage.value = index;
|
||||
}
|
||||
|
||||
void popBackTaped() async {
|
||||
final now = DateTime.now();
|
||||
if (_lastBackPressed == null ||
|
||||
now.difference(_lastBackPressed!) > Duration(seconds: 2)) {
|
||||
_lastBackPressed = now;
|
||||
Get.snackbar(
|
||||
'خروج از برنامه',
|
||||
'برای خروج دوباره بازگشت را بزنید',
|
||||
snackPosition: SnackPosition.TOP,
|
||||
duration: Duration(seconds: 2),
|
||||
backgroundColor: AppColor.warning,
|
||||
);
|
||||
} else {
|
||||
await SystemNavigator.pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart';
|
||||
import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
import 'logic.dart';
|
||||
|
||||
class CityJahadRootPage extends GetView<CityJahadRootLogic> {
|
||||
const CityJahadRootPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ChickenBasePage(
|
||||
isFullScreen: true,
|
||||
onPopScopTaped: controller.popBackTaped,
|
||||
child: ObxValue((data) {
|
||||
return Stack(
|
||||
children: [
|
||||
IndexedStack(children: controller.pages, index: data.value),
|
||||
Positioned(
|
||||
right: 0,
|
||||
left: 0,
|
||||
bottom: 0,
|
||||
child: RBottomNavigation(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
items: [
|
||||
|
||||
RBottomNavigationItem(
|
||||
label: 'خانه',
|
||||
icon: Assets.vec.homeSvg.path,
|
||||
isSelected: controller.currentPage.value == 0,
|
||||
onTap: () {
|
||||
Get.nestedKey(
|
||||
cityJahadActionKey,
|
||||
)?.currentState?.popUntil((route) => route.isFirst);
|
||||
controller.changePage(0);
|
||||
},
|
||||
),
|
||||
RBottomNavigationItem(
|
||||
label: 'پروفایل',
|
||||
icon: Assets.vec.profileCircleSvg.path,
|
||||
isSelected: controller.currentPage.value == 1,
|
||||
onTap: () {
|
||||
Get.nestedKey(
|
||||
cityJahadActionKey,
|
||||
)?.currentState?.popUntil((route) => route.isFirst);
|
||||
controller.changePage(1);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}, controller.currentPage),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/pages/home/logic.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/pages/home/view.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/pages/root/logic.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/pages/root/view.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/pages/active_hatching/logic.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/pages/active_hatching/view.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/pages/new_inspection/logic.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/pages/new_inspection/view.dart';
|
||||
import 'package:rasadyar_chicken/features/city_jahad/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/presentation/widgets/submit_inspection_bottom_sheet/create_inspection_bottom_sheet_logic.dart';
|
||||
import 'package:rasadyar_chicken/presentation/routes/global_binding.dart';
|
||||
import 'package:rasadyar_chicken/presentation/widget/base_page/logic.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class CityJahadPages {
|
||||
CityJahadPages._();
|
||||
|
||||
static List<GetPage> get pages => [
|
||||
GetPage(
|
||||
name: CityJahadRoutes.initCityJahad,
|
||||
page: () => CityJahadRootPage(),
|
||||
middlewares: [AuthMiddleware()],
|
||||
bindings: [
|
||||
GlobalBinding(),
|
||||
BindingsBuilder(() {
|
||||
Get.lazyPut(() => ChickenBaseLogic(), fenix: true);
|
||||
Get.lazyPut(() => CityJahadRootLogic());
|
||||
Get.lazyPut(() => CityJahadHomeLogic());
|
||||
}),
|
||||
],
|
||||
),
|
||||
GetPage(
|
||||
name: CityJahadRoutes.homeCityJahad,
|
||||
page: () => CityJahadHomePage(),
|
||||
middlewares: [AuthMiddleware()],
|
||||
binding: BindingsBuilder(() {
|
||||
Get.put(CityJahadHomeLogic());
|
||||
Get.lazyPut(() => ChickenBaseLogic());
|
||||
}),
|
||||
),
|
||||
|
||||
GetPage(
|
||||
name: CityJahadRoutes.activeHatchingCityJahad,
|
||||
page: () => ActiveHatchingPage(),
|
||||
middlewares: [AuthMiddleware()],
|
||||
bindings: [
|
||||
GlobalBinding(),
|
||||
BindingsBuilder(() {
|
||||
Get.lazyPut(() => ActiveHatchingLogic());
|
||||
Get.lazyPut(() => CreateInspectionBottomSheetLogic());
|
||||
}),
|
||||
],
|
||||
),
|
||||
GetPage(
|
||||
name: CityJahadRoutes.newInspectionCityJahad,
|
||||
page: () => NewInspectionPage(),
|
||||
middlewares: [AuthMiddleware()],
|
||||
bindings: [
|
||||
GlobalBinding(),
|
||||
BindingsBuilder(() {
|
||||
Get.lazyPut(() => NewInspectionLogic());
|
||||
}),
|
||||
],
|
||||
),
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
sealed class CityJahadRoutes {
|
||||
CityJahadRoutes._();
|
||||
|
||||
static const _base = '/chicken/cityJahad';
|
||||
static const initCityJahad = '$_base/';
|
||||
static const homeCityJahad = '$_base/home';
|
||||
static const actionCityJahad = '$_base/action';
|
||||
static const activeHatchingCityJahad = '$_base/activeHatching';
|
||||
static const newInspectionCityJahad = '$_base/newInspection';
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
export 'data/di/city_poultry_di.dart';
|
||||
export 'presentation/routes/routes.dart';
|
||||
export 'presentation/routes/pages.dart';
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/poultry_science_report/poultry_science_report.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/request/submit_inspection/submit_inspection_response.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
abstract class CityPoultryRemoteDataSource {
|
||||
Future<PaginationModel<PoultryScienceReport>?> getSubmitInspectionList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> submitInspection({
|
||||
required String token,
|
||||
required SubmitInspectionResponse request,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/poultry_science_report/poultry_science_report.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/request/submit_inspection/submit_inspection_response.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/data/datasources/remote/city_poultry_remote_data_source.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class CityPoultryRemoteDataSourceImpl implements CityPoultryRemoteDataSource {
|
||||
final DioRemote _httpClient;
|
||||
|
||||
CityPoultryRemoteDataSourceImpl(this._httpClient);
|
||||
|
||||
@override
|
||||
Future<PaginationModel<PoultryScienceReport>?> getSubmitInspectionList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/poultry_science_report/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
queryParameters: queryParameters,
|
||||
fromJson: (json) => PaginationModel<PoultryScienceReport>.fromJson(
|
||||
json,
|
||||
(json) => PoultryScienceReport.fromJson(json as Map<String, dynamic>),
|
||||
),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> submitInspection({
|
||||
required String token,
|
||||
required SubmitInspectionResponse request,
|
||||
}) async {
|
||||
await _httpClient.post(
|
||||
'/poultry_science_report/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
data: request.toJson(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
import 'package:rasadyar_chicken/features/city_poultry/data/datasources/remote/city_poultry_remote_data_source.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/data/datasources/remote/city_poultry_remote_data_source_impl.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/data/repositories/city_poultry_repository.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/data/repositories/city_poultry_repository_impl.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
/// Setup dependency injection for city_poultry feature
|
||||
Future<void> setupCityPoultryDI(GetIt di, DioRemote dioRemote) async {
|
||||
di.registerLazySingleton<CityPoultryRemoteDataSource>(
|
||||
() => CityPoultryRemoteDataSourceImpl(dioRemote),
|
||||
);
|
||||
|
||||
di.registerLazySingleton<CityPoultryRepository>(
|
||||
() => CityPoultryRepositoryImpl(di.get<CityPoultryRemoteDataSource>()),
|
||||
);
|
||||
}
|
||||
|
||||
/// Re-register city_poultry dependencies (used when base URL changes)
|
||||
Future<void> reRegisterCityPoultryDI(GetIt di, DioRemote dioRemote) async {
|
||||
await reRegister(di, () => CityPoultryRemoteDataSourceImpl(dioRemote));
|
||||
await reRegister(
|
||||
di,
|
||||
() => CityPoultryRepositoryImpl(di.get<CityPoultryRemoteDataSource>()),
|
||||
);
|
||||
}
|
||||
|
||||
/// Helper function to re-register a dependency
|
||||
Future<void> reRegister<T extends Object>(
|
||||
GetIt di,
|
||||
T Function() factory,
|
||||
) async {
|
||||
if (di.isRegistered<T>()) {
|
||||
await di.unregister<T>();
|
||||
}
|
||||
di.registerLazySingleton<T>(factory);
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/poultry_science_report/poultry_science_report.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/request/submit_inspection/submit_inspection_response.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
abstract class CityPoultryRepository {
|
||||
Future<PaginationModel<PoultryScienceReport>?> getSubmitInspectionList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> submitInspection({
|
||||
required String token,
|
||||
required SubmitInspectionResponse request,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/poultry_science_report/poultry_science_report.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/request/submit_inspection/submit_inspection_response.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/data/datasources/remote/city_poultry_remote_data_source.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/data/repositories/city_poultry_repository.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class CityPoultryRepositoryImpl implements CityPoultryRepository {
|
||||
final CityPoultryRemoteDataSource _remote;
|
||||
|
||||
CityPoultryRepositoryImpl(this._remote);
|
||||
|
||||
@override
|
||||
Future<PaginationModel<PoultryScienceReport>?> getSubmitInspectionList({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
return await _remote.getSubmitInspectionList(
|
||||
token: token,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> submitInspection({
|
||||
required String token,
|
||||
required SubmitInspectionResponse request,
|
||||
}) async {
|
||||
return await _remote.submitInspection(token: token, request: request);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
import 'package:rasadyar_chicken/data/di/chicken_di.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/hatching/hatching_models.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/repositories/poultry_science_repository.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/pages/root/logic.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class ActiveHatchingLogic extends GetxController {
|
||||
CityPoultryRootLogic rootLogic = Get.find<CityPoultryRootLogic>();
|
||||
BaseLogic baseLogic = Get.find<BaseLogic>();
|
||||
late PoultryScienceRepository poultryScienceRepository;
|
||||
Rx<Resource<PaginationModel<HatchingModel>>> activeHatchingList =
|
||||
Resource<PaginationModel<HatchingModel>>.loading().obs;
|
||||
|
||||
final RxBool isLoadingMoreList = false.obs;
|
||||
RxInt currentPage = 1.obs;
|
||||
RxInt expandedIndex = RxInt(-1);
|
||||
List<String> routesName = ['اقدام', 'جوجه ریزی فعال'];
|
||||
|
||||
Rx<Jalali> fromDateFilter = Jalali.now().obs;
|
||||
Rx<Jalali> toDateFilter = Jalali.now().obs;
|
||||
RxnString searchedValue = RxnString();
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
poultryScienceRepository = diChicken.get<PoultryScienceRepository>();
|
||||
}
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
super.onReady();
|
||||
getHatchingList();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
super.onClose();
|
||||
baseLogic.clearSearch();
|
||||
}
|
||||
|
||||
Future<void> getHatchingList([bool isLoadingMore = false]) async {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (isLoadingMore) {
|
||||
isLoadingMoreList.value = true;
|
||||
} else {
|
||||
activeHatchingList.value =
|
||||
Resource<PaginationModel<HatchingModel>>.loading();
|
||||
}
|
||||
|
||||
if (searchedValue.value != null &&
|
||||
searchedValue.value!.trim().isNotEmpty &&
|
||||
currentPage.value > 1) {
|
||||
currentPage.value = 1;
|
||||
}
|
||||
|
||||
safeCall(
|
||||
call: () async => await poultryScienceRepository.getHatchingPoultry(
|
||||
token: rootLogic.tokenService.accessToken.value!,
|
||||
queryParameters: buildQueryParams(
|
||||
queryParams: {'type': 'hatching'},
|
||||
role: 'CityPoultry',
|
||||
pageSize: 50,
|
||||
page: currentPage.value,
|
||||
),
|
||||
),
|
||||
onSuccess: (res) {
|
||||
if ((res?.count ?? 0) == 0) {
|
||||
activeHatchingList.value =
|
||||
Resource<PaginationModel<HatchingModel>>.empty();
|
||||
} else {
|
||||
activeHatchingList.value =
|
||||
Resource<PaginationModel<HatchingModel>>.success(
|
||||
PaginationModel<HatchingModel>(
|
||||
count: res?.count ?? 0,
|
||||
next: res?.next,
|
||||
previous: res?.previous,
|
||||
results: [
|
||||
...(activeHatchingList.value.data?.results ?? []),
|
||||
...(res?.results ?? []),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
void toggleExpanded(int index) {
|
||||
expandedIndex.value = expandedIndex.value == index ? -1 : index;
|
||||
}
|
||||
|
||||
Future<void> onRefresh() async {
|
||||
currentPage.value = 1;
|
||||
await getHatchingList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,236 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/hatching/hatching_models.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/pages/active_hatching/logic.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/presentation/widgets/submit_inspection_bottom_sheet/create_inspection_bottom_sheet.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/presentation/widgets/submit_inspection_bottom_sheet/create_inspection_bottom_sheet_logic.dart';
|
||||
import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart';
|
||||
import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class ActiveHatchingPage extends GetView<ActiveHatchingLogic> {
|
||||
const ActiveHatchingPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ChickenBasePage(
|
||||
hasSearch: true,
|
||||
hasFilter: false,
|
||||
backId: cityPoultryActionKey,
|
||||
routes: controller.routesName,
|
||||
onSearchChanged: (data) {
|
||||
controller.searchedValue.value = data;
|
||||
controller.getHatchingList();
|
||||
},
|
||||
child: hatchingWidget(),
|
||||
);
|
||||
}
|
||||
|
||||
Widget hatchingWidget() {
|
||||
return ObxValue((data) {
|
||||
return RPaginatedListView(
|
||||
listType: ListType.separated,
|
||||
resource: data.value,
|
||||
hasMore: data.value.data?.next != null,
|
||||
padding: EdgeInsets.fromLTRB(8, 8, 8, 80),
|
||||
itemBuilder: (context, index) {
|
||||
var item = data.value.data!.results![index];
|
||||
return ObxValue((val) {
|
||||
return ExpandableListItem2(
|
||||
selected: val.value.isEqual(index),
|
||||
onTap: () => controller.toggleExpanded(index),
|
||||
index: index,
|
||||
child: itemListWidget(item),
|
||||
secondChild: itemListExpandedWidget(item),
|
||||
labelColor: AppColor.blueLight,
|
||||
labelIcon: Assets.vec.activeFramSvg.path,
|
||||
);
|
||||
}, controller.expandedIndex);
|
||||
},
|
||||
itemCount: data.value.data?.results?.length ?? 0,
|
||||
separatorBuilder: (context, index) => SizedBox(height: 8.h),
|
||||
onLoadMore: () async => controller.getHatchingList(true),
|
||||
);
|
||||
}, controller.activeHatchingList);
|
||||
}
|
||||
|
||||
Container itemListExpandedWidget(HatchingModel item) {
|
||||
return Container(
|
||||
padding: EdgeInsets.symmetric(horizontal: 8),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
child: Column(
|
||||
spacing: 8,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
item.poultry?.user?.fullname ?? 'N/A',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppFonts.yekan16.copyWith(color: AppColor.greenDark),
|
||||
),
|
||||
Spacer(),
|
||||
|
||||
Visibility(
|
||||
child: Text(
|
||||
item.violation == true ? 'پیگیری' : 'عادی',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppFonts.yekan10.copyWith(color: AppColor.redDark),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Container(
|
||||
height: 32,
|
||||
padding: EdgeInsets.symmetric(horizontal: 8),
|
||||
decoration: ShapeDecoration(
|
||||
color: AppColor.blueLight,
|
||||
shape: RoundedRectangleBorder(
|
||||
side: BorderSide(width: 1, color: AppColor.blueLightHover),
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'نژاد:${item.breed?.first.breed ?? 'N/A'}',
|
||||
style: AppFonts.yekan14.copyWith(color: AppColor.textColor),
|
||||
),
|
||||
Text(
|
||||
' سن${item.age} (روز)',
|
||||
|
||||
style: AppFonts.yekan14.copyWith(color: AppColor.blueNormal),
|
||||
),
|
||||
Text(
|
||||
' دوره جوجه ریزی:${item.period}',
|
||||
style: AppFonts.yekan14.copyWith(color: AppColor.textColor),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
buildRow(
|
||||
title: 'شماره مجوز جوجه ریزی',
|
||||
value: item.licenceNumber ?? 'N/A',
|
||||
),
|
||||
buildUnitRow(
|
||||
title: 'حجم جوجه ریزی',
|
||||
value: item.quantity.separatedByCommaFa,
|
||||
unit: '(قطعه)',
|
||||
),
|
||||
buildUnitRow(
|
||||
title: 'مانده در سالن',
|
||||
value: item.leftOver.separatedByCommaFa,
|
||||
unit: '(قطعه)',
|
||||
),
|
||||
buildUnitRow(
|
||||
title: 'تلفات',
|
||||
value: item.losses.separatedByCommaFa,
|
||||
unit: '(قطعه)',
|
||||
),
|
||||
buildRow(
|
||||
title: 'دامپزشک فارم',
|
||||
value:
|
||||
'${item.vetFarm?.vetFarmFullName}(${item.vetFarm?.vetFarmMobile})',
|
||||
),
|
||||
buildRow(
|
||||
title: 'شرح بازرسی',
|
||||
value: item.reportInfo?.image == false
|
||||
? 'ارسال تصویر جوجه ریزی فارم '
|
||||
: 'تکمیل شده',
|
||||
titleStyle: AppFonts.yekan14.copyWith(
|
||||
color: (item.reportInfo?.image ?? false)
|
||||
? AppColor.greenNormal
|
||||
: AppColor.redDark,
|
||||
),
|
||||
valueStyle: AppFonts.yekan14.copyWith(
|
||||
color: (item.reportInfo?.image ?? false)
|
||||
? AppColor.greenNormal
|
||||
: AppColor.redDark,
|
||||
),
|
||||
),
|
||||
|
||||
RElevated(
|
||||
height: 40.h,
|
||||
isFullWidth: true,
|
||||
onPressed: () {
|
||||
Get.find<CreateInspectionBottomSheetLogic>().setHatchingModel(
|
||||
item,
|
||||
);
|
||||
Get.bottomSheet(
|
||||
CreateInspectionBottomSheet(),
|
||||
isScrollControlled: true,
|
||||
ignoreSafeArea: false,
|
||||
).then((value) {
|
||||
if (Get.isRegistered<CreateInspectionBottomSheetLogic>()) {
|
||||
Get.find<CreateInspectionBottomSheetLogic>().clearForm();
|
||||
}
|
||||
});
|
||||
},
|
||||
child: Text('ثبت بازرسی'),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget itemListWidget(HatchingModel item) {
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
SizedBox(width: 20),
|
||||
Expanded(
|
||||
flex: 2,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
spacing: 3,
|
||||
children: [
|
||||
Text(
|
||||
item.poultry?.user?.fullname ?? 'ندارد',
|
||||
textAlign: TextAlign.start,
|
||||
style: AppFonts.yekan12.copyWith(color: AppColor.blueNormal),
|
||||
),
|
||||
Text(
|
||||
item.poultry?.user?.mobile ?? 'ندارد',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppFonts.yekan14.copyWith(color: AppColor.bgDark),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
flex: 3,
|
||||
child: Column(
|
||||
spacing: 3,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
item.poultry?.unitName ?? 'ندارد',
|
||||
textAlign: TextAlign.start,
|
||||
style: AppFonts.yekan12.copyWith(color: AppColor.bgDark),
|
||||
),
|
||||
Text(
|
||||
item.licenceNumber ?? 'ندارد',
|
||||
textAlign: TextAlign.left,
|
||||
style: AppFonts.yekan12.copyWith(color: AppColor.blueNormal),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: Assets.vec.scanSvg.svg(
|
||||
width: 32.w,
|
||||
height: 32.h,
|
||||
colorFilter: ColorFilter.mode(AppColor.blueNormal, BlendMode.srcIn),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class CityPoultryActionItem {
|
||||
final String title;
|
||||
final String route;
|
||||
final String icon;
|
||||
|
||||
CityPoultryActionItem({
|
||||
required this.title,
|
||||
required this.route,
|
||||
required this.icon,
|
||||
});
|
||||
}
|
||||
|
||||
class CityPoultryHomeLogic extends GetxController {
|
||||
RxList<CityPoultryActionItem> items = [
|
||||
CityPoultryActionItem(
|
||||
title: "جوجه ریزی فعال",
|
||||
route: CityPoultryRoutes.activeHatchingCityPoultry,
|
||||
icon: Assets.vec.activeFramSvg.path,
|
||||
),
|
||||
CityPoultryActionItem(
|
||||
title: "بازرسی مزارع طیور",
|
||||
route: CityPoultryRoutes.newInspectionCityPoultry,
|
||||
icon: Assets.vec.inspectionPoultrySvg.path,
|
||||
),
|
||||
].obs;
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart';
|
||||
import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
import 'logic.dart';
|
||||
|
||||
class CityPoultryHomePage extends GetView<CityPoultryHomeLogic> {
|
||||
CityPoultryHomePage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ChickenBasePage(
|
||||
isBase: true,
|
||||
hasNews: true,
|
||||
hasNotification: true,
|
||||
child: gridWidget(),
|
||||
);
|
||||
}
|
||||
|
||||
Widget gridWidget() {
|
||||
return ObxValue((data) {
|
||||
return GridView.builder(
|
||||
physics: BouncingScrollPhysics(),
|
||||
padding: EdgeInsets.symmetric(vertical: 18.h, horizontal: 32.w),
|
||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 2,
|
||||
mainAxisSpacing: 24.h,
|
||||
crossAxisSpacing: 24.w,
|
||||
),
|
||||
itemCount: data.length,
|
||||
hitTestBehavior: HitTestBehavior.opaque,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
var item = data[index];
|
||||
return GlassMorphismCardIcon(
|
||||
title: item.title,
|
||||
vecIcon: item.icon,
|
||||
onTap: () async {
|
||||
Get.toNamed(item.route, id: cityPoultryActionKey);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}, controller.items);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/pages/root/logic.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/poultry_science_report/poultry_science_report.dart';
|
||||
import 'package:rasadyar_chicken/presentation/widget/base_page/logic.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class NewInspectionLogic extends GetxController {
|
||||
BaseLogic baseLogic = Get.find<BaseLogic>();
|
||||
|
||||
Rx<Resource<PaginationModel<PoultryScienceReport>>> submitInspectionList =
|
||||
Resource<PaginationModel<PoultryScienceReport>>.loading().obs;
|
||||
|
||||
CityPoultryRootLogic rootLogic = Get.find<CityPoultryRootLogic>();
|
||||
|
||||
final RxBool isLoadingMoreAllocationsMade = false.obs;
|
||||
RxInt currentPage = 1.obs;
|
||||
RxInt expandedIndex = RxInt(-1);
|
||||
RxList<XFile> pickedImages = <XFile>[].obs;
|
||||
|
||||
RxBool isOnUpload = false.obs;
|
||||
|
||||
RxDouble presentUpload = 0.0.obs;
|
||||
RxList<String> routesName = RxList();
|
||||
RxInt selectedSegmentIndex = 0.obs;
|
||||
|
||||
RxnString searchedValue = RxnString();
|
||||
Rx<Jalali> fromDateFilter = Jalali.now().obs;
|
||||
Rx<Jalali> toDateFilter = Jalali.now().obs;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
|
||||
routesName.value = ['اقدام'].toList();
|
||||
|
||||
ever(selectedSegmentIndex, (callback) {
|
||||
routesName.removeLast();
|
||||
routesName.add(callback == 0 ? 'بازرسی' : 'بایگانی');
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
super.onReady();
|
||||
|
||||
getReport();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
super.onClose();
|
||||
baseLogic.clearSearch();
|
||||
}
|
||||
|
||||
Future<void> getReport([bool isLoadingMore = false]) async {
|
||||
if (isLoadingMore) {
|
||||
isLoadingMoreAllocationsMade.value = true;
|
||||
} else {
|
||||
submitInspectionList.value =
|
||||
Resource<PaginationModel<PoultryScienceReport>>.loading();
|
||||
}
|
||||
|
||||
if (searchedValue.value != null &&
|
||||
searchedValue.value!.trim().isNotEmpty &&
|
||||
currentPage.value > 1) {
|
||||
currentPage.value = 1;
|
||||
}
|
||||
|
||||
safeCall(
|
||||
call: () async =>
|
||||
await rootLogic.cityPoultryRepository.getSubmitInspectionList(
|
||||
token: rootLogic.tokenService.accessToken.value!,
|
||||
queryParameters: buildQueryParams(
|
||||
role: 'CityPoultry',
|
||||
pageSize: 50,
|
||||
search: 'filter',
|
||||
|
||||
page: currentPage.value,
|
||||
),
|
||||
),
|
||||
onSuccess: (res) {
|
||||
if ((res?.count ?? 0) == 0) {
|
||||
submitInspectionList.value =
|
||||
Resource<PaginationModel<PoultryScienceReport>>.empty();
|
||||
} else {
|
||||
submitInspectionList.value =
|
||||
Resource<PaginationModel<PoultryScienceReport>>.success(
|
||||
PaginationModel<PoultryScienceReport>(
|
||||
count: res?.count ?? 0,
|
||||
next: res?.next,
|
||||
previous: res?.previous,
|
||||
results: [
|
||||
...(submitInspectionList.value.data?.results ?? []),
|
||||
...(res?.results ?? []),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> pickImages() async {
|
||||
determineCurrentPosition();
|
||||
var tmp = await pickCameraImage();
|
||||
if (tmp?.path != null && pickedImages.length < 7) {
|
||||
pickedImages.add(tmp!);
|
||||
}
|
||||
}
|
||||
|
||||
void removeImage(int index) {
|
||||
pickedImages.removeAt(index);
|
||||
}
|
||||
|
||||
void closeBottomSheet() {
|
||||
Get.back();
|
||||
}
|
||||
|
||||
double calculateUploadProgress({required int sent, required int total}) {
|
||||
if (total != 0) {
|
||||
double progress = (sent * 100 / total) / 100;
|
||||
return progress;
|
||||
} else {
|
||||
return 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
void toggleExpanded(int index) {
|
||||
expandedIndex.value = expandedIndex.value == index ? -1 : index;
|
||||
}
|
||||
|
||||
void setSearchValue(String? data) {
|
||||
dLog('Search Value: $data');
|
||||
searchedValue.value = data?.trim();
|
||||
getReport();
|
||||
}
|
||||
|
||||
Future<void> onRefresh() async {
|
||||
currentPage.value = 1;
|
||||
await getReport();
|
||||
}
|
||||
|
||||
String getStatus(PoultryScienceReport item) {
|
||||
final status = item.reportInformation?.inspectionStatus ?? item.state;
|
||||
if (status == null || status.isEmpty) {
|
||||
return 'در حال بررسی';
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
Color getStatusColor(PoultryScienceReport item) {
|
||||
final status = item.reportInformation?.inspectionStatus ?? item.state;
|
||||
if (status == null || status.isEmpty) {
|
||||
return AppColor.yellowNormal;
|
||||
}
|
||||
// میتوانید منطق رنگ را بر اساس inspectionStatus تنظیم کنید
|
||||
return AppColor.greenNormal;
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,100 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:rasadyar_chicken/data/di/chicken_di.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/data/repositories/city_poultry_repository.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/routes/pages.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/features/common/presentation/page/profile/view.dart';
|
||||
import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart';
|
||||
import 'package:rasadyar_chicken/presentation/utils/utils.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
enum ErrorLocationType { serviceDisabled, permissionDenied, none }
|
||||
|
||||
class CityPoultryRootLogic extends GetxController {
|
||||
var tokenService = Get.find<TokenStorageService>();
|
||||
var gService = Get.find<GService>();
|
||||
|
||||
late CityPoultryRepository cityPoultryRepository;
|
||||
|
||||
RxList<ErrorLocationType> errorLocationType = RxList();
|
||||
RxMap<int, dynamic> homeExpandedList = RxMap();
|
||||
DateTime? _lastBackPressed;
|
||||
|
||||
RxInt currentPage = 0.obs;
|
||||
|
||||
final pages = [
|
||||
Navigator(
|
||||
key: Get.nestedKey(cityPoultryActionKey),
|
||||
onGenerateRoute: (settings) {
|
||||
final page = CityPoultryPages.pages.firstWhere(
|
||||
(e) => e.name == settings.name,
|
||||
orElse: () => CityPoultryPages.pages.firstWhere(
|
||||
(e) => e.name == CityPoultryRoutes.homeCityPoultry,
|
||||
),
|
||||
);
|
||||
|
||||
return buildRouteFromGetPage(page);
|
||||
},
|
||||
),
|
||||
|
||||
ProfilePage(),
|
||||
];
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
cityPoultryRepository = diChicken.get<CityPoultryRepository>();
|
||||
fLog('gService: ${gService.getRole(Module.chicken)}');
|
||||
}
|
||||
|
||||
void toggleExpanded(int index) {
|
||||
if (homeExpandedList.keys.contains(index)) {
|
||||
homeExpandedList.remove(index);
|
||||
} else {
|
||||
homeExpandedList[index] = false;
|
||||
}
|
||||
}
|
||||
|
||||
void rootErrorHandler(DioException error) {
|
||||
handleGeneric(error, () {
|
||||
tokenService.deleteModuleTokens(Module.chicken);
|
||||
});
|
||||
}
|
||||
|
||||
void changePage(int index) {
|
||||
currentPage.value = index;
|
||||
}
|
||||
|
||||
void popBackTaped() async {
|
||||
final nestedKey = Get.nestedKey(cityPoultryActionKey);
|
||||
|
||||
final currentRoute = Get.routing.current;
|
||||
|
||||
final isInternalRoute =
|
||||
currentRoute == CityPoultryRoutes.activeHatchingCityPoultry ||
|
||||
currentRoute == CityPoultryRoutes.newInspectionCityPoultry ||
|
||||
currentRoute == CityPoultryRoutes.actionCityPoultry;
|
||||
|
||||
if (isInternalRoute) {
|
||||
Get.back(id: cityPoultryActionKey);
|
||||
return;
|
||||
}
|
||||
|
||||
// اگر در صفحه home هستیم، منطق خروج از اپ را اجرا کن
|
||||
final now = DateTime.now();
|
||||
if (_lastBackPressed == null ||
|
||||
now.difference(_lastBackPressed!) > Duration(seconds: 2)) {
|
||||
_lastBackPressed = now;
|
||||
Get.snackbar(
|
||||
'خروج از برنامه',
|
||||
'برای خروج دوباره بازگشت را بزنید',
|
||||
snackPosition: SnackPosition.TOP,
|
||||
duration: Duration(seconds: 2),
|
||||
backgroundColor: AppColor.warning,
|
||||
);
|
||||
} else {
|
||||
await SystemNavigator.pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart';
|
||||
import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
import 'logic.dart';
|
||||
|
||||
class CityPoultryRootPage extends GetView<CityPoultryRootLogic> {
|
||||
const CityPoultryRootPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ChickenBasePage(
|
||||
isFullScreen: true,
|
||||
onPopScopTaped: controller.popBackTaped,
|
||||
child: ObxValue((data) {
|
||||
return Stack(
|
||||
children: [
|
||||
IndexedStack(children: controller.pages, index: data.value),
|
||||
Positioned(
|
||||
right: 0,
|
||||
left: 0,
|
||||
bottom: 0,
|
||||
child: RBottomNavigation(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
items: [
|
||||
|
||||
RBottomNavigationItem(
|
||||
label: 'خانه',
|
||||
icon: Assets.vec.homeSvg.path,
|
||||
isSelected: controller.currentPage.value == 0,
|
||||
onTap: () {
|
||||
Get.nestedKey(
|
||||
cityPoultryActionKey,
|
||||
)?.currentState?.popUntil((route) => route.isFirst);
|
||||
controller.changePage(0);
|
||||
},
|
||||
),
|
||||
RBottomNavigationItem(
|
||||
label: 'پروفایل',
|
||||
icon: Assets.vec.profileCircleSvg.path,
|
||||
isSelected: controller.currentPage.value == 1,
|
||||
onTap: () {
|
||||
Get.nestedKey(
|
||||
cityPoultryActionKey,
|
||||
)?.currentState?.popUntil((route) => route.isFirst);
|
||||
controller.changePage(1);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}, controller.currentPage),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/pages/home/logic.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/pages/home/view.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/pages/root/logic.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/pages/root/view.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/pages/active_hatching/logic.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/pages/active_hatching/view.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/pages/new_inspection/logic.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/pages/new_inspection/view.dart';
|
||||
import 'package:rasadyar_chicken/features/city_poultry/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_chicken/features/poultry_science/presentation/widgets/submit_inspection_bottom_sheet/create_inspection_bottom_sheet_logic.dart';
|
||||
import 'package:rasadyar_chicken/presentation/routes/global_binding.dart';
|
||||
import 'package:rasadyar_chicken/presentation/widget/base_page/logic.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class CityPoultryPages {
|
||||
CityPoultryPages._();
|
||||
|
||||
static List<GetPage> get pages => [
|
||||
GetPage(
|
||||
name: CityPoultryRoutes.initCityPoultry,
|
||||
page: () => CityPoultryRootPage(),
|
||||
middlewares: [AuthMiddleware()],
|
||||
bindings: [
|
||||
GlobalBinding(),
|
||||
BindingsBuilder(() {
|
||||
Get.lazyPut(() => ChickenBaseLogic(), fenix: true);
|
||||
Get.lazyPut(() => CityPoultryRootLogic());
|
||||
Get.lazyPut(() => CityPoultryHomeLogic());
|
||||
}),
|
||||
],
|
||||
),
|
||||
GetPage(
|
||||
name: CityPoultryRoutes.homeCityPoultry,
|
||||
page: () => CityPoultryHomePage(),
|
||||
middlewares: [AuthMiddleware()],
|
||||
binding: BindingsBuilder(() {
|
||||
Get.put(CityPoultryHomeLogic());
|
||||
Get.lazyPut(() => ChickenBaseLogic());
|
||||
}),
|
||||
),
|
||||
|
||||
GetPage(
|
||||
name: CityPoultryRoutes.activeHatchingCityPoultry,
|
||||
page: () => ActiveHatchingPage(),
|
||||
middlewares: [AuthMiddleware()],
|
||||
bindings: [
|
||||
GlobalBinding(),
|
||||
BindingsBuilder(() {
|
||||
Get.lazyPut(() => ActiveHatchingLogic());
|
||||
Get.lazyPut(() => CreateInspectionBottomSheetLogic());
|
||||
}),
|
||||
],
|
||||
),
|
||||
GetPage(
|
||||
name: CityPoultryRoutes.newInspectionCityPoultry,
|
||||
page: () => NewInspectionPage(),
|
||||
middlewares: [AuthMiddleware()],
|
||||
bindings: [
|
||||
GlobalBinding(),
|
||||
BindingsBuilder(() {
|
||||
Get.lazyPut(() => NewInspectionLogic());
|
||||
}),
|
||||
],
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
sealed class CityPoultryRoutes {
|
||||
CityPoultryRoutes._();
|
||||
|
||||
static const _base = '/chicken/cityPoultry';
|
||||
static const initCityPoultry = '$_base/';
|
||||
static const homeCityPoultry = '$_base/home';
|
||||
static const actionCityPoultry = '$_base/action';
|
||||
static const activeHatchingCityPoultry = '$_base/activeHatching';
|
||||
static const newInspectionCityPoultry = '$_base/newInspection';
|
||||
}
|
||||
|
||||
2
packages/chicken/lib/features/common/common.dart
Normal file
2
packages/chicken/lib/features/common/common.dart
Normal file
@@ -0,0 +1,2 @@
|
||||
export 'presentation/routes/routes.dart';
|
||||
export 'presentation/routes/pages.dart';
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'package:rasadyar_chicken/data/models/local/widely_used_local_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/local/widely_used_local_model.dart';
|
||||
|
||||
abstract class ChickenLocalDataSource {
|
||||
Future<void> openBox();
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:rasadyar_chicken/data/models/local/widely_used_local_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/local/widely_used_local_model.dart';
|
||||
import 'package:rasadyar_chicken/features/steward/presentation/routes/routes.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
import 'chicken_local.dart';
|
||||
@@ -22,7 +23,7 @@ class ChickenLocalDataSourceImp implements ChickenLocalDataSource {
|
||||
color: AppColor.greenLightActive.toARGB32(),
|
||||
iconColor: AppColor.greenNormal.toARGB32(),
|
||||
iconPath: Assets.vec.cubeSearchSvg.path,
|
||||
path: ChickenRoutes.buysInProvinceSteward,
|
||||
path: StewardRoutes.buysInProvinceSteward,
|
||||
),
|
||||
WidelyUsedLocalItem(
|
||||
index: 1,
|
||||
@@ -31,7 +32,7 @@ class ChickenLocalDataSourceImp implements ChickenLocalDataSource {
|
||||
color: AppColor.blueLightActive.toARGB32(),
|
||||
iconColor: AppColor.blueNormal.toARGB32(),
|
||||
iconPath: Assets.vec.cubeSvg.path,
|
||||
path: ChickenRoutes.salesInProvinceSteward,
|
||||
path: StewardRoutes.salesInProvinceSteward,
|
||||
),
|
||||
|
||||
WidelyUsedLocalItem(
|
||||
@@ -40,7 +41,7 @@ class ChickenLocalDataSourceImp implements ChickenLocalDataSource {
|
||||
color: AppColor.blueLightActive.toARGB32(),
|
||||
iconColor: AppColor.blueNormal.toARGB32(),
|
||||
iconPath: Assets.vec.cubeRotateSvg.path,
|
||||
path: ChickenRoutes.buysInProvinceSteward,
|
||||
path: StewardRoutes.buysInProvinceSteward,
|
||||
),
|
||||
]; */
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
import 'package:rasadyar_chicken/data/models/response/user_info/user_info_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/user_profile_model/user_profile_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/user_info/user_info_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/user_profile_model/user_profile_model.dart';
|
||||
|
||||
abstract class AuthRemoteDataSource {
|
||||
Future<UserProfileModel?> login({required Map<String, dynamic> authRequest});
|
||||
@@ -11,6 +11,6 @@ abstract class AuthRemoteDataSource {
|
||||
|
||||
Future<UserInfoModel?> getUserInfo(String phoneNumber);
|
||||
|
||||
/// Calls `/steward-app-login/` endpoint with required token and `server` as query param, plus optional extra query parameters.
|
||||
|
||||
Future<void> stewardAppLogin({required String token, Map<String, dynamic>? queryParameters});
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:rasadyar_chicken/data/models/response/user_info/user_info_model.dart';
|
||||
import 'package:rasadyar_chicken/data/models/response/user_profile_model/user_profile_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/user_info/user_info_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/user_profile_model/user_profile_model.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
import 'auth_remote.dart';
|
||||
@@ -0,0 +1,75 @@
|
||||
import 'package:rasadyar_chicken/features/common/data/model/request/change_password/change_password_request_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/bar_information/bar_information.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/broadcast_price/broadcast_price.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/guild/guild_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/guild_profile/guild_profile.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/inventory/inventory_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/iran_province_city/iran_province_city_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/kill_house_distribution_info/kill_house_distribution_info.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/roles_products/roles_products.dart';
|
||||
import 'package:rasadyar_chicken/features/steward/data/model/response/segmentation_model/segmentation_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/user_profile/user_profile.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
abstract class CommonRemoteDatasource {
|
||||
Future<List<InventoryModel>?> getInventory({
|
||||
required String token,
|
||||
CancelToken? cancelToken,
|
||||
});
|
||||
|
||||
Future<KillHouseDistributionInfo?> getKillHouseDistributionInfo({
|
||||
required String token,
|
||||
});
|
||||
|
||||
Future<BarInformation?> getGeneralBarInformation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<List<ProductModel>?> getRolesProducts({required String token});
|
||||
|
||||
Future<List<GuildModel>?> getGuilds({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<GuildProfile?> getProfile({required String token});
|
||||
|
||||
Future<List<IranProvinceCityModel>?> getProvince({CancelToken? cancelToken});
|
||||
|
||||
Future<List<IranProvinceCityModel>?> getCity({required String provinceName});
|
||||
|
||||
Future<UserProfile?> getUserProfile({required String token});
|
||||
|
||||
Future<void> updateUserProfile({
|
||||
required String token,
|
||||
required UserProfile userProfile,
|
||||
});
|
||||
|
||||
Future<void> updatePassword({
|
||||
required String token,
|
||||
required ChangePasswordRequestModel model,
|
||||
});
|
||||
|
||||
Future<PaginationModel<SegmentationModel>?> getSegmentation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
});
|
||||
|
||||
Future<void> createSegmentation({
|
||||
required String token,
|
||||
required SegmentationModel model,
|
||||
});
|
||||
|
||||
Future<void> editSegmentation({
|
||||
required String token,
|
||||
required SegmentationModel model,
|
||||
});
|
||||
|
||||
Future<SegmentationModel?> deleteSegmentation({
|
||||
required String token,
|
||||
required String key,
|
||||
});
|
||||
|
||||
Future<BroadcastPrice?> getBroadcastPrice({required String token});
|
||||
}
|
||||
@@ -0,0 +1,238 @@
|
||||
import 'package:rasadyar_chicken/features/common/data/model/request/change_password/change_password_request_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/bar_information/bar_information.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/broadcast_price/broadcast_price.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/guild/guild_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/guild_profile/guild_profile.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/inventory/inventory_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/iran_province_city/iran_province_city_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/kill_house_distribution_info/kill_house_distribution_info.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/roles_products/roles_products.dart';
|
||||
import 'package:rasadyar_chicken/features/steward/data/model/response/segmentation_model/segmentation_model.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/model/response/user_profile/user_profile.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
import 'common_remote.dart';
|
||||
|
||||
class CommonRemoteDatasourceImp implements CommonRemoteDatasource {
|
||||
final DioRemote _httpClient;
|
||||
|
||||
CommonRemoteDatasourceImp(this._httpClient);
|
||||
|
||||
@override
|
||||
Future<List<InventoryModel>?> getInventory({
|
||||
required String token,
|
||||
CancelToken? cancelToken,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/roles-products/?role=Steward',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
|
||||
fromJsonList: (json) => (json)
|
||||
.map((item) => InventoryModel.fromJson(item as Map<String, dynamic>))
|
||||
.toList(),
|
||||
);
|
||||
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<KillHouseDistributionInfo?> getKillHouseDistributionInfo({
|
||||
required String token,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/kill-house-distribution-info/?role=Steward',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: KillHouseDistributionInfo.fromJson,
|
||||
);
|
||||
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BarInformation?> getGeneralBarInformation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/bars_for_kill_house_dashboard/',
|
||||
queryParameters: queryParameters,
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: BarInformation.fromJson,
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<ProductModel>?> getRolesProducts({required String token}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/roles-products/?role=Steward',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJsonList: (json) => json
|
||||
.map((item) => ProductModel.fromJson(item as Map<String, dynamic>))
|
||||
.toList(),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<GuildModel>?> getGuilds({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/guilds/',
|
||||
queryParameters: queryParameters,
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJsonList: (json) => json
|
||||
.map((item) => GuildModel.fromJson(item as Map<String, dynamic>))
|
||||
.toList(),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<GuildProfile?> getProfile({required String token}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/guilds/0/?profile',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: GuildProfile.fromJson,
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<IranProvinceCityModel>?> getCity({
|
||||
required String provinceName,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/iran_city/',
|
||||
queryParameters: {'name': provinceName},
|
||||
fromJsonList: (json) => json
|
||||
.map(
|
||||
(item) =>
|
||||
IranProvinceCityModel.fromJson(item as Map<String, dynamic>),
|
||||
)
|
||||
.toList(),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<IranProvinceCityModel>?> getProvince({
|
||||
CancelToken? cancelToken,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/iran_province/',
|
||||
fromJsonList: (json) => json
|
||||
.map(
|
||||
(item) =>
|
||||
IranProvinceCityModel.fromJson(item as Map<String, dynamic>),
|
||||
)
|
||||
.toList(),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<UserProfile?> getUserProfile({required String token}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/system_user_profile/?self-profile',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: (json) => UserProfile.fromJson(json),
|
||||
);
|
||||
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updateUserProfile({
|
||||
required String token,
|
||||
required UserProfile userProfile,
|
||||
}) async {
|
||||
await _httpClient.put(
|
||||
'/system_user_profile/0/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
data: userProfile.toJson()..removeWhere((key, value) => value == null),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updatePassword({
|
||||
required String token,
|
||||
required ChangePasswordRequestModel model,
|
||||
}) async {
|
||||
await _httpClient.post(
|
||||
'/api/change_password/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
data: model.toJson()..removeWhere((key, value) => value == null),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PaginationModel<SegmentationModel>?> getSegmentation({
|
||||
required String token,
|
||||
Map<String, dynamic>? queryParameters,
|
||||
}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/app-segmentation/',
|
||||
queryParameters: queryParameters,
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: (json) => PaginationModel<SegmentationModel>.fromJson(
|
||||
json,
|
||||
(json) => SegmentationModel.fromJson(json as Map<String, dynamic>),
|
||||
),
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> createSegmentation({
|
||||
required String token,
|
||||
required SegmentationModel model,
|
||||
}) async {
|
||||
await _httpClient.post(
|
||||
'/app-segmentation/',
|
||||
data: model.toJson()..removeWhere((key, value) => value == null),
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> editSegmentation({
|
||||
required String token,
|
||||
required SegmentationModel model,
|
||||
}) async {
|
||||
await _httpClient.put(
|
||||
'/app-segmentation/0/',
|
||||
data: model.toJson()..removeWhere((key, value) => value == null),
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<SegmentationModel?> deleteSegmentation({
|
||||
required String token,
|
||||
required String key,
|
||||
}) async {
|
||||
var res = await _httpClient.delete<SegmentationModel?>(
|
||||
'/app-segmentation/0/',
|
||||
queryParameters: {'key': key},
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
fromJson: (json) => SegmentationModel.fromJson(json),
|
||||
);
|
||||
|
||||
return res.data;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BroadcastPrice?> getBroadcastPrice({required String token}) async {
|
||||
var res = await _httpClient.get(
|
||||
'/broadcast-price/',
|
||||
headers: {'Authorization': 'Bearer $token'},
|
||||
|
||||
fromJson: (json) => BroadcastPrice.fromJson(json),
|
||||
);
|
||||
|
||||
return res.data;
|
||||
}
|
||||
}
|
||||
66
packages/chicken/lib/features/common/data/di/common_di.dart
Normal file
66
packages/chicken/lib/features/common/data/di/common_di.dart
Normal file
@@ -0,0 +1,66 @@
|
||||
import 'package:rasadyar_chicken/features/common/data/datasources/local/chicken_local.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/datasources/local/chicken_local_imp.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/datasources/remote/auth/auth_remote.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/datasources/remote/auth/auth_remote_imp.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/datasources/remote/common/common_remote.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/datasources/remote/common/common_remote_imp.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/repositories/auth/auth_repository.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/repositories/auth/auth_repository_imp.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/repositories/common/common_repository.dart';
|
||||
import 'package:rasadyar_chicken/features/common/data/repositories/common/common_repository_imp.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
/// Setup dependency injection for common feature
|
||||
Future<void> setupCommonDI(GetIt di, DioRemote dioRemote) async {
|
||||
di.registerLazySingleton<AuthRemoteDataSource>(
|
||||
() => AuthRemoteDataSourceImp(dioRemote),
|
||||
);
|
||||
|
||||
di.registerLazySingleton<AuthRepository>(
|
||||
() => AuthRepositoryImpl(di.get<AuthRemoteDataSource>()),
|
||||
);
|
||||
|
||||
di.registerLazySingleton<CommonRemoteDatasource>(
|
||||
() => CommonRemoteDatasourceImp(dioRemote),
|
||||
);
|
||||
|
||||
di.registerLazySingleton<ChickenLocalDataSource>(
|
||||
() => ChickenLocalDataSourceImp(),
|
||||
);
|
||||
|
||||
di.registerLazySingleton<CommonRepository>(
|
||||
() => CommonRepositoryImp(
|
||||
remote: di.get<CommonRemoteDatasource>(),
|
||||
local: di.get<ChickenLocalDataSource>(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/// Re-register common dependencies (used when base URL changes)
|
||||
Future<void> reRegisterCommonDI(GetIt di, DioRemote dioRemote) async {
|
||||
await reRegister(di, () => AuthRemoteDataSourceImp(dioRemote));
|
||||
await reRegister(
|
||||
di,
|
||||
() => AuthRepositoryImpl(di.get<AuthRemoteDataSource>()),
|
||||
);
|
||||
await reRegister(di, () => CommonRemoteDatasourceImp(dioRemote));
|
||||
await reRegister(di, () => ChickenLocalDataSourceImp());
|
||||
await reRegister(
|
||||
di,
|
||||
() => CommonRepositoryImp(
|
||||
remote: di.get<CommonRemoteDatasource>(),
|
||||
local: di.get<ChickenLocalDataSource>(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/// Helper function to re-register a dependency
|
||||
Future<void> reRegister<T extends Object>(
|
||||
GetIt di,
|
||||
T Function() factory,
|
||||
) async {
|
||||
if (di.isRegistered<T>()) {
|
||||
await di.unregister<T>();
|
||||
}
|
||||
di.registerLazySingleton<T>(factory);
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user