Compare commits

47 Commits

Author SHA1 Message Date
b7b203ee51 refactor: update changeUserRole method to accept named parameters for improved clarity and modify ProfilePage to utilize new method signature 2025-12-30 09:40:15 +03:30
71123c3520 refactor: enhance AuthLogic to handle user roles and improve navigation based on role selection; format code for better readability in ProfilePage 2025-12-30 09:16:07 +03:30
9e2e7845c8 feat: integrate GService into various root logic classes and log user roles during initialization 2025-12-29 16:44:36 +03:30
4a96dbe2b8 chore: update app version to 1.9.0, change Flutter build mode to debug, and add changes field to app info model for update dialogs 2025-12-29 16:23:19 +03:30
b290094164 chore: update Flutter build mode to release and increment version number in pubspec.yaml to 1.9.0 2025-12-29 14:40:25 +03:30
f830e7d76d chore: update version number in pubspec.yaml to 1.3.43+39 2025-12-29 14:27:31 +03:30
9910de4ed8 feat: integrate city poultry feature by adding routes, DI setup, and updating UI components to reflect new data handling and localization changes 2025-12-29 14:26:12 +03:30
edde363b6d chore: change Flutter build mode to debug in local.properties, add strVersion observable in SplashLogic, and update splash view layout to display version information 2025-12-29 13:02:57 +03:30
ed113d8702 chore: change Flutter build mode from debug to release in local.properties 2025-12-29 12:07:20 +03:30
7d6be4f3f4 chore: update version number in pubspec.yaml and local.properties to 1.3.42+38 2025-12-29 11:38:51 +03:30
57704399b9 refactor: optimize module navigation delay and clean up unused code in splash and auth logic
fix : role access to chicken app
2025-12-29 11:21:54 +03:30
12cdc1a5e8 refactor: update auth repository implementation in integration tests by changing type from AuthRepositoryImpl to AuthRepository and adding necessary imports 2025-12-29 10:13:04 +03:30
5d1e9d1cbb chore: update device_preview_plus version to 2.5.6, change Flutter build mode to debug, adjust image picker widget color opacity, and clean up unused assets script formatting 2025-12-22 12:20:06 +03:30
fc93c68154 chore: change Flutter build mode to release in local.properties and add an empty line to JSON response schema 2025-12-22 10:47:06 +03:30
4155f9a085 chore: update Android SDK version in local.properties and clean up JSON response schema; enhance step5_page with horizontal scroll direction and reverse order 2025-12-22 08:50:13 +03:30
23bf009903 fix: resolve import path issues and clean up unused imports across multiple files 2025-12-17 15:08:42 +03:30
3486bc73e9 Merge branch with resolved conflicts - restructured features and added new modules 2025-12-17 10:26:39 +03:30
a8e500551d Merge branch 'feature/chicken_inspection' into develop 2025-12-17 09:39:03 +03:30
28f7fafb5b chore: update version number in pubspec.yaml from 1.3.39+35 to 1.3.41+37 2025-12-17 09:33:46 +03:30
ad713621a5 chore: update version number in pubspec.yaml from 1.4.0 to 1.8.0 2025-12-17 09:33:15 +03:30
efd6a9bf9f feat: enhance CreateInspectionBottomSheetLogic by resetting critical values during initialization and improving UI responsiveness with updated height adjustments and location visibility 2025-12-17 09:22:21 +03:30
3b07dca52e feat: add step 5 page to CreateInspectionBottomSheet and enhance inspection submission flow with new data fields and improved UI components 2025-12-17 09:00:32 +03:30
677e1d044a feat: refactor image handling in CreateInspectionBottomSheetLogic by replacing camera picker with RImagePicker for hall, input warehouse, and losses images, and add image listener setup for better state management 2025-12-16 16:32:03 +03:30
6ef1361ba1 feat: add close button to image picker widget for improved user interaction and navigation 2025-12-16 14:42:46 +03:30
4f7fa4ba93 feat: enhance CreateInspectionBottomSheetLogic with image listener setup and improve camera controller functionality for better user experience 2025-12-16 14:38:06 +03:30
39ca4f0c35 fix: improve camera controller state management by ensuring proper initialization and disposal, enhancing image capture reliability 2025-12-16 09:19:29 +03:30
98c900f408 feat: integrate camera package and update related dependencies in pubspec.lock for enhanced image handling capabilities 2025-12-15 16:36:23 +03:30
24431b3514 feat: enhance RTextField by adding isFullHeight property for improved vertical layout control 2025-12-15 09:08:20 +03:30
7c8660c1d2 feat: add isFullHeight property to RTextField in CaptchaWidget for improved layout flexibility 2025-12-15 09:08:09 +03:30
0860ec5459 chore: update package versions in pubspec.lock and local.properties, change build mode to debug for development purposes 2025-12-15 08:42:37 +03:30
f9e09a17fe chore: update app version to 1.3.39+35, change build mode to release, and enhance role handling in authentication logic for improved user experience 2025-12-14 16:26:35 +03:30
b057c8b69a feat: integrate CreateInspectionBottomSheetLogic into various feature routes for enhanced inspection submission functionality 2025-12-14 14:18:56 +03:30
e7b0159ea9 chore: update devtools options to include new extensions, increment package versions, and refactor authentication logic for improved user experience 2025-12-14 12:48:48 +03:30
afbd72404d chore: update app version to 1.3.36+32, change build mode to release, and enhance user role handling in chicken feature with new routes and DI setup 2025-12-13 16:30:02 +03:30
0d47710e81 feat: update poultry science feature with new data models and repository methods, enhance inspection submission process, and improve UI for better user experience 2025-12-13 12:22:13 +03:30
b8a914ec0e feat: implement submit inspection functionality in poultry science feature, including new data source methods, repository updates, and UI enhancements for image uploads and inspection submission 2025-12-11 19:50:20 +03:30
3d73d9a17a feat: add image upload functionality to poultry science feature, including repository and data source updates for handling image uploads 2025-12-10 16:42:53 +03:30
455a5a5571 refactor: remove unused local and remote data sources, models, and tests for chicken and poultry features to streamline codebase 2025-12-08 16:10:34 +03:30
890be0ded6 refactor: update routing and logic for steward features, including route imports and path adjustments 2025-12-08 11:09:24 +03:30
2f4edc1b6e fix : routing in poultry sience 2025-12-08 10:29:16 +03:30
9b68cb6bc3 chore: update app version to 1.3.35+32, change build mode to debug, and refactor poultry farm inspection routes and logic for improved structure 2025-12-08 10:27:24 +03:30
02686115cb refactor: update data source and repository structure by removing unused files, enhancing model integration, and adjusting import paths for better organization 2025-12-07 12:33:39 +03:30
c28a4a3177 feat : wearhouse home page 2025-12-03 15:13:36 +03:30
8c9517b529 refactor: replace InventoryModel with ProductModel across the application, removing unused inventory model files and updating related repository and UI components 2025-12-03 09:15:44 +03:30
b4cf137351 chore: update dependencies in pubspec.lock for chicken and livestock packages, including version upgrades and new package additions 2025-12-03 08:36:58 +03:30
ac2d8da95e fix : test 2025-12-03 08:25:34 +03:30
c42ee069e6 feat: warehouse_and_distribution in killhouse module 2025-12-01 15:25:19 +03:30
505 changed files with 49565 additions and 4924 deletions

1
.gitignore vendored
View File

@@ -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
View 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` استفاده کنید یا به صورت دستی جستجو کنید.

View File

@@ -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

View 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

Binary file not shown.

View File

@@ -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

View File

@@ -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);

View File

@@ -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>?,
));
}

View File

@@ -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,
};

View File

@@ -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"],
),

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -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
View 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": "تست"
}
}

View File

@@ -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

View File

@@ -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};
}

View File

@@ -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});
}

View File

@@ -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;
}
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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,
});
}

View File

@@ -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 {

View File

@@ -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);
}

View File

@@ -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,
};

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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,
};

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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,
});
}

View File

@@ -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);
}
}

View File

@@ -0,0 +1,3 @@
export 'data/di/city_jahad_di.dart';
export 'presentation/routes/routes.dart';
export 'presentation/routes/pages.dart';

View File

@@ -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,
});
}

View File

@@ -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(),
);
}
}

View File

@@ -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);
}

View File

@@ -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,
});
}

View File

@@ -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);
}
}

View File

@@ -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();
}
}

View File

@@ -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),
),
),
],
);
}
}

View File

@@ -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;
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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();
}
}
}

View File

@@ -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),
);
}
}

View File

@@ -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());
}),
],
),
];
}

View File

@@ -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';
}

View File

@@ -0,0 +1,4 @@
export 'data/di/city_poultry_di.dart';
export 'presentation/routes/routes.dart';
export 'presentation/routes/pages.dart';

View File

@@ -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,
});
}

View File

@@ -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(),
);
}
}

View File

@@ -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);
}

View File

@@ -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,
});
}

View File

@@ -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);
}
}

View File

@@ -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();
}
}

View File

@@ -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),
),
),
],
);
}
}

View File

@@ -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;
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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();
}
}
}

View File

@@ -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),
);
}
}

View File

@@ -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());
}),
],
),
];
}

View File

@@ -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';
}

View File

@@ -0,0 +1,2 @@
export 'presentation/routes/routes.dart';
export 'presentation/routes/pages.dart';

View File

@@ -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();

View File

@@ -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,
),
]; */
}

View File

@@ -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});
}

View File

@@ -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';

View File

@@ -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});
}

View File

@@ -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;
}
}

View 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