Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7c8b36b65d | ||
|
|
243b7e02aa | ||
|
|
288d0d75a0 | ||
|
|
36bc9e0f9e | ||
|
|
ac991431c8 | ||
|
|
587caa44c5 | ||
|
|
2e4c77888e | ||
|
|
f9bfb69254 | ||
|
|
d02d3b5fbd | ||
|
|
7661319b4f | ||
|
|
75415cc6ff | ||
|
|
843c11b200 | ||
|
|
0917c5132b | ||
|
|
b07af60778 | ||
|
|
8d801e52d9 | ||
|
|
7137cd2335 | ||
|
|
b98462ee8c | ||
|
|
83f4e065ed | ||
|
|
e236d811ce | ||
|
|
0b70194d8e | ||
|
|
c1cefb122b |
@@ -0,0 +1,47 @@
|
||||
name: Build Android APK (split per ABI)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build-apk:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: "temurin"
|
||||
java-version: "17"
|
||||
cache: "gradle"
|
||||
|
||||
- name: Setup Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
# Samain dengan versi di ios.yml biar konsisten.
|
||||
flutter-version: "3.47.0"
|
||||
cache: true
|
||||
|
||||
- name: Install Dependencies
|
||||
run: flutter pub get
|
||||
|
||||
# ── Build ───────────────────────────────────────────────────────────────
|
||||
|
||||
- name: Build APK (split per ABI)
|
||||
run: flutter build apk --release --split-per-abi
|
||||
|
||||
# ── Artifact ────────────────────────────────────────────────────────────
|
||||
|
||||
- name: Upload APKs as Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: android-apk
|
||||
path: build/app/outputs/flutter-apk/app-*-release.apk
|
||||
retention-days: 7
|
||||
@@ -18,6 +18,9 @@ jobs:
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
# Dipin biar CI nggak ikut naik versi diam-diam.
|
||||
# Flutter 3.47 mensyaratkan iOS deployment target minimal 15.0.
|
||||
flutter-version: "3.47.0"
|
||||
cache: true
|
||||
|
||||
- name: Install Dependencies
|
||||
@@ -69,7 +72,7 @@ jobs:
|
||||
- name: Install CocoaPods Dependencies
|
||||
run: |
|
||||
cd ios
|
||||
rm -f Podfile.lock
|
||||
rm -rf Pods Podfile.lock
|
||||
pod install --repo-update
|
||||
|
||||
# ── Build & Archive ─────────────────────────────────────────────────────
|
||||
|
||||
@@ -12,7 +12,7 @@ A POS (Point of Sale) application for business owners, built with Flutter. The p
|
||||
- Architecture Overview
|
||||
- Project Structure
|
||||
- Key Dependencies & Purpose
|
||||
- Code Generation
|
||||
- Code Generation (see docs/codegen.md)
|
||||
- Internationalization (i18n)
|
||||
- Theming & Assets
|
||||
- Environment Configuration (`env.dart`)
|
||||
@@ -40,6 +40,7 @@ A POS (Point of Sale) application for business owners, built with Flutter. The p
|
||||
|
||||
- Flutter SDK installed as per the official guide (`https://flutter.dev/docs/get-started/install`)
|
||||
- Dart version per constraint: ^3.8.1
|
||||
- For code generation only: FVM + Flutter 3.41.9 (`dart pub global activate fvm && fvm install 3.41.9`) — see [docs/codegen.md](docs/codegen.md)
|
||||
|
||||
### Installation
|
||||
|
||||
@@ -51,8 +52,16 @@ flutter pub get
|
||||
|
||||
### Code generation (required after clone or when annotations change)
|
||||
|
||||
```bash
|
||||
flutter pub run build_runner build --delete-conflicting-outputs
|
||||
> **Do not run codegen with Flutter 3.47 / Dart 3.13** — every builder crashes with
|
||||
> `Missing implementation of visitDotShorthandPropertyAccess`. Codegen must run on Flutter 3.41.9
|
||||
> (Dart 3.11.5) via FVM. Full setup, commands, and troubleshooting: **[docs/codegen.md](docs/codegen.md)**.
|
||||
|
||||
```powershell
|
||||
$FVM = "$env:USERPROFILE\fvm\versions\3.41.9\bin"
|
||||
|
||||
& "$FVM\flutter.bat" pub get
|
||||
& "$FVM\dart.bat" run build_runner build --delete-conflicting-outputs
|
||||
flutter pub get # restore lockfile resolution for the global SDK
|
||||
```
|
||||
|
||||
> Re-run whenever you change files using `@RoutePage()`, `@injectable`, `@freezed`, or `@JsonSerializable`.
|
||||
@@ -179,14 +188,27 @@ Refer to `pubspec.yaml` for full version constraints.
|
||||
|
||||
## Code Generation
|
||||
|
||||
**Full guide: [docs/codegen.md](docs/codegen.md)** — read it before your first codegen run.
|
||||
|
||||
Codegen runs on a pinned SDK (Flutter 3.41.9 / Dart 3.11.5 via FVM), not on the global Flutter 3.47:
|
||||
`freezed 2.5.8` caps `analyzer` below 8.0.0, and analyzer 7.7.1 crashes on the dot-shorthand syntax
|
||||
used by Dart 3.13 sources. The app itself still runs and builds with the global SDK.
|
||||
|
||||
Common commands:
|
||||
|
||||
```bash
|
||||
flutter pub run build_runner build --delete-conflicting-outputs
|
||||
```powershell
|
||||
$FVM = "$env:USERPROFILE\fvm\versions\3.41.9\bin"
|
||||
|
||||
& "$FVM\flutter.bat" pub get
|
||||
& "$FVM\dart.bat" run build_runner build --delete-conflicting-outputs
|
||||
# or watch
|
||||
flutter pub run build_runner watch --delete-conflicting-outputs
|
||||
& "$FVM\dart.bat" run build_runner watch --delete-conflicting-outputs
|
||||
flutter pub get # restore lockfile resolution for the global SDK
|
||||
```
|
||||
|
||||
> `--delete-conflicting-outputs` wipes every generated file first. If you cancel the build midway,
|
||||
> restore them with `git checkout` — see the troubleshooting table in [docs/codegen.md](docs/codegen.md).
|
||||
|
||||
### Asset generation (flutter_gen_runner)
|
||||
|
||||
`flutter_gen_runner` is integrated with `build_runner`. Running the commands above will also generate typed accessors for assets based on the `flutter_gen` section in `pubspec.yaml`:
|
||||
@@ -255,15 +277,20 @@ flutter pub get
|
||||
flutter format .
|
||||
flutter analyze
|
||||
|
||||
# Code generation (single run / watch)
|
||||
flutter pub run build_runner build --delete-conflicting-outputs
|
||||
flutter pub run build_runner watch --delete-conflicting-outputs
|
||||
# Localization (safe on the global SDK)
|
||||
flutter gen-l10n
|
||||
|
||||
# Run by device
|
||||
flutter devices
|
||||
flutter run -d <device-id>
|
||||
```
|
||||
|
||||
Code generation uses the pinned FVM SDK — see [docs/codegen.md](docs/codegen.md):
|
||||
|
||||
```powershell
|
||||
& "$env:USERPROFILE\fvm\versions\3.41.9\bin\dart.bat" run build_runner build --delete-conflicting-outputs
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Additional Notes
|
||||
@@ -316,7 +343,7 @@ Aplikasi Point of Sale (POS) untuk pemilik usaha, dibangun dengan Flutter. Proye
|
||||
- Arsitektur & Alur
|
||||
- Struktur Proyek
|
||||
- Dependensi Utama & Fungsinya
|
||||
- Code Generation
|
||||
- Code Generation (lihat docs/codegen.md)
|
||||
- Internationalization (i18n)
|
||||
- Theming & Assets
|
||||
- Konfigurasi Lingkungan (`env.dart`)
|
||||
@@ -344,6 +371,7 @@ Aplikasi Point of Sale (POS) untuk pemilik usaha, dibangun dengan Flutter. Proye
|
||||
|
||||
- Flutter SDK terpasang sesuai panduan resmi (`https://flutter.dev/docs/get-started/install`)
|
||||
- Versi Dart sesuai constraint: ^3.8.1
|
||||
- Khusus untuk code generation: FVM + Flutter 3.41.9 (`dart pub global activate fvm && fvm install 3.41.9`) — lihat [docs/codegen.md](docs/codegen.md)
|
||||
|
||||
### Instalasi
|
||||
|
||||
@@ -355,8 +383,16 @@ flutter pub get
|
||||
|
||||
### Generate kode (wajib setelah clone atau mengubah anotasi)
|
||||
|
||||
```bash
|
||||
flutter pub run build_runner build --delete-conflicting-outputs
|
||||
> **Jangan jalankan codegen dengan Flutter 3.47 / Dart 3.13** — semua builder crash dengan
|
||||
> `Missing implementation of visitDotShorthandPropertyAccess`. Codegen harus memakai Flutter 3.41.9
|
||||
> (Dart 3.11.5) via FVM. Setup, perintah, dan troubleshooting lengkap: **[docs/codegen.md](docs/codegen.md)**.
|
||||
|
||||
```powershell
|
||||
$FVM = "$env:USERPROFILE\fvm\versions\3.41.9\bin"
|
||||
|
||||
& "$FVM\flutter.bat" pub get
|
||||
& "$FVM\dart.bat" run build_runner build --delete-conflicting-outputs
|
||||
flutter pub get # kembalikan resolusi lockfile ke SDK global
|
||||
```
|
||||
|
||||
> Jalankan ulang perintah di atas setiap kali Anda mengubah file yang menggunakan anotasi `@RoutePage()`, `@injectable`, `@freezed`, atau `@JsonSerializable`.
|
||||
@@ -472,14 +508,27 @@ Catatan versi lengkap tersedia di `pubspec.yaml`.
|
||||
|
||||
## Code Generation
|
||||
|
||||
**Panduan lengkap: [docs/codegen.md](docs/codegen.md)** — baca dulu sebelum codegen pertama kali.
|
||||
|
||||
Codegen dijalankan dengan SDK terpisah (Flutter 3.41.9 / Dart 3.11.5 via FVM), bukan Flutter global 3.47:
|
||||
`freezed 2.5.8` mengunci `analyzer` di bawah 8.0.0, dan analyzer 7.7.1 crash pada sintaks *dot-shorthand*
|
||||
milik Dart 3.13. Aplikasinya sendiri tetap di-`run`/`build` dengan SDK global.
|
||||
|
||||
Perintah umum:
|
||||
|
||||
```bash
|
||||
flutter pub run build_runner build --delete-conflicting-outputs
|
||||
```powershell
|
||||
$FVM = "$env:USERPROFILE\fvm\versions\3.41.9\bin"
|
||||
|
||||
& "$FVM\flutter.bat" pub get
|
||||
& "$FVM\dart.bat" run build_runner build --delete-conflicting-outputs
|
||||
# atau untuk watch
|
||||
flutter pub run build_runner watch --delete-conflicting-outputs
|
||||
& "$FVM\dart.bat" run build_runner watch --delete-conflicting-outputs
|
||||
flutter pub get # kembalikan resolusi lockfile ke SDK global
|
||||
```
|
||||
|
||||
> `--delete-conflicting-outputs` menghapus semua file generated lebih dulu. Kalau build dibatalkan di
|
||||
> tengah jalan, pulihkan dengan `git checkout` — lihat tabel troubleshooting di [docs/codegen.md](docs/codegen.md).
|
||||
|
||||
Generator yang digunakan:
|
||||
|
||||
- AutoRoute: menghasilkan deklarasi router & route.
|
||||
@@ -533,15 +582,20 @@ flutter pub get
|
||||
flutter format .
|
||||
flutter analyze
|
||||
|
||||
# Code generation (sekali jalan / watch)
|
||||
flutter pub run build_runner build --delete-conflicting-outputs
|
||||
flutter pub run build_runner watch --delete-conflicting-outputs
|
||||
# Localization (aman dengan SDK global)
|
||||
flutter gen-l10n
|
||||
|
||||
# Run by device
|
||||
flutter devices
|
||||
flutter run -d <device-id>
|
||||
```
|
||||
|
||||
Code generation memakai SDK FVM yang di-pin — lihat [docs/codegen.md](docs/codegen.md):
|
||||
|
||||
```powershell
|
||||
& "$env:USERPROFILE\fvm\versions\3.41.9\bin\dart.bat" run build_runner build --delete-conflicting-outputs
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Catatan Tambahan
|
||||
|
||||
@@ -19,3 +19,10 @@ analyzer:
|
||||
- test/generated/**
|
||||
- "**/**.g.dart"
|
||||
- "**/**.freezed.dart"
|
||||
- build/**
|
||||
- android/**
|
||||
- ios/**
|
||||
- web/**
|
||||
- windows/**
|
||||
- macos/**
|
||||
- linux/**
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
||||
|
||||
<application
|
||||
android:label="Enaklo Owner"
|
||||
android:label="Grow Food"
|
||||
android:name="${applicationName}"
|
||||
android:icon="@mipmap/launcher_icon">
|
||||
<activity
|
||||
|
||||
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 203 KiB After Width: | Height: | Size: 133 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 27 KiB |
@@ -1,3 +1,7 @@
|
||||
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
# This builtInKotlin flag was added automatically by Flutter migrator
|
||||
android.builtInKotlin=false
|
||||
# This newDsl flag was added automatically by Flutter migrator
|
||||
android.newDsl=false
|
||||
|
||||
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip
|
||||
|
||||
@@ -18,8 +18,8 @@ pluginManagement {
|
||||
|
||||
plugins {
|
||||
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
|
||||
id("com.android.application") version "8.7.3" apply false
|
||||
id("org.jetbrains.kotlin.android") version "2.1.0" apply false
|
||||
id("com.android.application") version "8.11.1" apply false
|
||||
id("org.jetbrains.kotlin.android") version "2.2.20" apply false
|
||||
id("com.google.gms.google-services") version "4.4.2" apply false
|
||||
}
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 498 KiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 952 KiB |
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 2.0 MiB |
@@ -0,0 +1,163 @@
|
||||
# Code Generation (build_runner)
|
||||
|
||||
> **PENTING:** `build_runner` di proyek ini **tidak bisa** dijalankan dengan Flutter 3.47 / Dart 3.13.
|
||||
> Gunakan SDK Flutter 3.41.9 (Dart 3.11.5) lewat FVM. Aplikasinya sendiri tetap di-`run`/`build`
|
||||
> dengan Flutter versi global (3.47).
|
||||
|
||||
---
|
||||
|
||||
## TL;DR
|
||||
|
||||
PowerShell (Windows):
|
||||
|
||||
```powershell
|
||||
$FVM = "$env:USERPROFILE\fvm\versions\3.41.9\bin"
|
||||
|
||||
& "$FVM\flutter.bat" pub get # 1. resolve paket dgn Dart 3.11.5
|
||||
& "$FVM\dart.bat" run build_runner build --delete-conflicting-outputs # 2. generate
|
||||
flutter pub get # 3. balik ke SDK global 3.47
|
||||
```
|
||||
|
||||
Git Bash:
|
||||
|
||||
```bash
|
||||
FVM=~/fvm/versions/3.41.9/bin
|
||||
|
||||
"$FVM/flutter.bat" pub get
|
||||
"$FVM/dart.bat" run build_runner build --delete-conflicting-outputs
|
||||
flutter pub get
|
||||
```
|
||||
|
||||
Durasi normal: **±90–120 detik** untuk full build (146 output).
|
||||
|
||||
Setelah itu jalankan `flutter analyze` untuk memastikan hasil generate bersih.
|
||||
|
||||
---
|
||||
|
||||
## Kenapa harus SDK terpisah?
|
||||
|
||||
Kalau codegen dijalankan dengan Flutter global (3.47 / Dart 3.13), semua builder gagal dengan:
|
||||
|
||||
```
|
||||
W SDK language version 3.13.0 is newer than `analyzer` language version 3.9.0.
|
||||
E freezed on lib/application/.../category_analytic_loader_bloc.dart:
|
||||
Exception: Missing implementation of visitDotShorthandPropertyAccess
|
||||
```
|
||||
|
||||
Rantai penyebabnya:
|
||||
|
||||
1. `freezed 2.5.8` membatasi `analyzer <8.0.0`, jadi pub me-resolve ke **analyzer 7.7.1** (language version 3.9).
|
||||
2. Dart 3.13 memakai sintaks *dot-shorthand* (`.value`) di sumber SDK/framework.
|
||||
3. Analyzer 7.7.1 bisa mem-*parse*-nya tapi belum bisa menuliskannya ke summary → crash saat resolve.
|
||||
4. Semua generator (`freezed`, `json_serializable`, `injectable_generator`, `auto_route_generator`) berbagi analyzer yang sama, jadi semuanya ikut mati — termasuk saat men-generate file lama yang tidak diubah.
|
||||
|
||||
Dart 3.11.5 (Flutter 3.41.9) adalah versi tertinggi yang **masih cocok dengan analyzer 7.7.1** sekaligus memenuhi batas `pubspec.lock` (`dart >=3.11.0-0`).
|
||||
|
||||
---
|
||||
|
||||
## Setup sekali di mesin baru
|
||||
|
||||
```powershell
|
||||
dart pub global activate fvm
|
||||
```
|
||||
|
||||
Tambahkan folder binari pub ke PATH agar perintah `fvm` dikenali:
|
||||
`%LOCALAPPDATA%\Pub\Cache\bin`
|
||||
|
||||
Lalu unduh SDK-nya (±1 GB, sekali saja):
|
||||
|
||||
```powershell
|
||||
fvm install 3.41.9
|
||||
fvm list # verifikasi
|
||||
```
|
||||
|
||||
SDK tersimpan di `%USERPROFILE%\fvm\versions\3.41.9` dan **tidak** mengubah Flutter global.
|
||||
|
||||
> Kita sengaja **tidak** menjalankan `fvm use`, supaya repo tidak punya `.fvmrc`/`.fvm/`
|
||||
> dan IDE tetap memakai Flutter 3.47 untuk menjalankan aplikasi.
|
||||
> Kalau lebih suka pin per-project, jalankan `fvm use 3.41.9` lalu pakai `fvm dart run build_runner ...`,
|
||||
> dan tambahkan `.fvm/` ke `.gitignore`.
|
||||
|
||||
---
|
||||
|
||||
## Perintah harian
|
||||
|
||||
Semua contoh memakai variabel `$FVM` dari bagian TL;DR.
|
||||
|
||||
```powershell
|
||||
# build sekali (paling sering dipakai)
|
||||
& "$FVM\dart.bat" run build_runner build --delete-conflicting-outputs
|
||||
|
||||
# mode watch saat banyak mengubah anotasi
|
||||
& "$FVM\dart.bat" run build_runner watch --delete-conflicting-outputs
|
||||
|
||||
# hanya membersihkan output generated
|
||||
& "$FVM\dart.bat" run build_runner clean
|
||||
```
|
||||
|
||||
Wajib generate ulang setiap kali mengubah/menambah file dengan anotasi:
|
||||
|
||||
| Anotasi | Generator | Output |
|
||||
| --- | --- | --- |
|
||||
| `@freezed` | freezed | `*.freezed.dart` |
|
||||
| `@JsonSerializable` / `fromJson` di DTO | json_serializable | `*.g.dart` |
|
||||
| `@injectable`, `@LazySingleton` | injectable_generator | `lib/injection.config.dart` |
|
||||
| `@RoutePage()` | auto_route_generator | `lib/presentation/router/app_router.gr.dart` |
|
||||
| asset baru di `assets/` | flutter_gen_runner | `lib/presentation/components/assets/assets.gen.dart` |
|
||||
|
||||
### Localization (i18n) — tidak lewat build_runner
|
||||
|
||||
`flutter gen-l10n` memakai tooling Flutter, bukan analyzer, jadi **aman dijalankan dengan Flutter 3.47**:
|
||||
|
||||
```powershell
|
||||
flutter gen-l10n
|
||||
```
|
||||
|
||||
Jalankan setiap kali `lib/l10n/app_id.arb` / `app_en.arb` berubah. Hasilnya: `lib/l10n/app_localizations*.dart`.
|
||||
|
||||
---
|
||||
|
||||
## Aturan penting soal `--delete-conflicting-outputs`
|
||||
|
||||
Flag ini **menghapus dulu** semua file generated (±55 file `*.freezed.dart` / `*.g.dart`) sebelum membuat ulang.
|
||||
Kalau proses dibatalkan di tengah jalan, project akan penuh error karena file-nya sudah hilang.
|
||||
|
||||
Pemulihan (semua file generated ikut ter-commit di git):
|
||||
|
||||
```bash
|
||||
git status --porcelain | grep -E "^ D" | sed 's/^ D //' | while read -r f; do git checkout -- "$f"; done
|
||||
```
|
||||
|
||||
Tips: jangan pipe output build ke `tail`/`head` — outputnya jadi ter-buffer sampai proses selesai,
|
||||
sehingga terlihat seperti *hang* padahal sedang jalan.
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
| Gejala | Penyebab | Solusi |
|
||||
| --- | --- | --- |
|
||||
| `Missing implementation of visitDotShorthandPropertyAccess` | codegen dijalankan dengan Flutter global 3.47 | pakai SDK FVM 3.41.9 |
|
||||
| `Failed to update packages` + dump stack VM | `flutter pub run build_runner` / `fvm spawn ... pub run` | pakai `dart.bat run build_runner`, jangan `flutter pub run` |
|
||||
| Ratusan error “isn't defined” di IDE, file `*.freezed.dart` hilang | build dibatalkan setelah `--delete-conflicting-outputs` | restore lewat `git checkout` (lihat di atas) |
|
||||
| `pub get` gagal / versi paket bergeser | `pubspec.lock` di-resolve oleh SDK berbeda | jalankan `flutter pub get` dengan SDK global setelah codegen selesai |
|
||||
| Build terasa lama di run pertama | asset graph baru dibuat dari nol | wajar, ±90–120 detik; run berikutnya inkremental |
|
||||
|
||||
---
|
||||
|
||||
## Rencana jangka panjang
|
||||
|
||||
Perbaikan permanen = upgrade toolchain codegen supaya jalan native di Dart 3.13:
|
||||
|
||||
- `freezed` 2.5.8 → 3.x, `freezed_annotation` 2.4.x → 3.x
|
||||
- `injectable` 2.x → 3.x, `injectable_generator` 2.7 → 3.x
|
||||
- `auto_route` 9.x → 11.x, `auto_route_generator` 9.x → 10.x
|
||||
- `build_runner` → 2.16.x, `json_serializable` → 6.14.x (analyzer ikut naik ke 13.x)
|
||||
|
||||
Konsekuensinya breaking dan cukup besar, jadi perlu dijadwalkan sendiri:
|
||||
|
||||
- freezed 3 **menghapus** `.map()` / `.when()` / `.maybeWhen()` / `.maybeMap()` → ±49 pemakaian (mayoritas di handler event BLoC) harus diganti pattern matching Dart 3 (`switch`).
|
||||
- ±98 file dengan `@freezed` harus dideklarasikan `abstract class` atau `sealed class`.
|
||||
- Migrasi konfigurasi router (auto_route 11) dan DI (injectable 3).
|
||||
|
||||
Selama migrasi itu belum dikerjakan, gunakan alur FVM di dokumen ini.
|
||||
@@ -0,0 +1,289 @@
|
||||
# Migrasi profit sharing
|
||||
|
||||
4 Oktober 2026
|
||||
|
||||
## Ringkasan
|
||||
|
||||
Ada tiga perubahan di backend:
|
||||
|
||||
1. **Parent category bisa ditandai bukan team.** Kategori punya field baru `is_team`. Parent category dengan `is_team: false` tidak bisa dipilih sebagai team di purchase order dan cash advance, dan tidak ikut laporan profit sharing.
|
||||
2. **Endpoint laporan pindah path.** `/api/v1/analytics/parent-categories` menjadi `/api/v1/analytics/profit-sharing`.
|
||||
3. **Pembagian revenue tinggal dua porsi.** Porsi purchase (60%) dihapus. Revenue sekarang dibagi ke owner (SDL) dan team, dengan porsi team = 100% − fee owner.
|
||||
|
||||
Nomor 2 dan 3 adalah breaking change. Setelah backend baru dirilis, client yang masih memanggil path lama mendapat 404, dan `limit_purchase` serta `percentages.purchase` tidak ada lagi di response. Karena itu client harus diupdate lebih dulu, lihat [Urutan rilis](#database-dan-urutan-rilis).
|
||||
|
||||
Yang perlu bertindak, di dashboard maupun app mobile, mana pun yang punya layarnya:
|
||||
|
||||
- **Form kategori**: tambah toggle team untuk parent category.
|
||||
- **Laporan profit sharing**: ganti path, hapus porsi purchase, tampilkan dua porsi.
|
||||
- **Form purchase order dan cash advance**: picker team tidak perlu diubah, tapi form edit perlu menyesuaikan, lihat [Purchase order dan cash advance](#purchase-order-dan-cash-advance).
|
||||
|
||||
## Kategori: field `is_team`
|
||||
|
||||
### Response
|
||||
|
||||
Semua response kategori membawa `is_team` (boolean, tidak pernah `null`): `POST /api/v1/categories`, `PUT /api/v1/categories/:id`, `GET /api/v1/categories`, dan `GET /api/v1/categories/:id`.
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "<uuid>",
|
||||
"name": "Merchandise",
|
||||
"parent_id": null,
|
||||
"owner_fee_percent": null,
|
||||
"is_team": false
|
||||
}
|
||||
```
|
||||
|
||||
### Request
|
||||
|
||||
`POST /api/v1/categories` dan `PUT /api/v1/categories/:id` menerima `is_team`.
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Merchandise",
|
||||
"is_team": false
|
||||
}
|
||||
```
|
||||
|
||||
| Request | `is_team` yang dikirim | Hasil |
|
||||
| --- | --- | --- |
|
||||
| Create | tidak dikirim | `true` |
|
||||
| Create | `false` | `false` |
|
||||
| Update | tidak dikirim atau `null` | tidak berubah |
|
||||
| Update | `true` atau `false` | diganti |
|
||||
|
||||
Update yang hanya berisi `is_team` diterima.
|
||||
|
||||
Aturan nilainya:
|
||||
|
||||
- `is_team` hanya berpengaruh di parent category, yaitu kategori dengan `parent_id: null`. Di sub-category nilainya disimpan tapi tidak dipakai, jadi tampilkan toggle hanya untuk parent category.
|
||||
- Semua kategori yang sudah ada sebelum rilis bernilai `true`. Tidak ada yang berubah sampai admin mematikannya.
|
||||
- Flag dibaca saat request, bukan saat transaksi. Kalau parent category dimatikan, penjualannya di periode lampau juga hilang dari laporan profit sharing. Kalau dinyalakan lagi, semuanya muncul kembali.
|
||||
|
||||
### Efek `is_team: false`
|
||||
|
||||
| Endpoint | Efek |
|
||||
| --- | --- |
|
||||
| `GET /api/v1/purchase-orders/teams`, `GET /api/v1/cash-advances/teams` | Kategori tidak muncul. Pusat tetap ada. |
|
||||
| Create dan update purchase order dan cash advance | `team_scope: "category"` dengan `team_category_id` kategori ini ditolak. |
|
||||
| `GET /api/v1/analytics/profit-sharing` | Kategori tidak muncul di `data`, dan revenue-nya tidak dihitung di `budget`. |
|
||||
| `GET /api/v1/analytics/profit-sharing/:parent_category_id` | Ditolak. |
|
||||
|
||||
Data yang sudah ada tidak diubah. Purchase order dan cash advance yang sudah tercatat ke kategori itu tetap menyimpan team-nya. Laporan purchasing (`GET /api/v1/analytics/purchasing`) masih menampilkannya di `team_data`, dan filter `team=<category_id>` tetap bisa dipakai.
|
||||
|
||||
Laporan lain yang tidak menyaring `is_team`, misalnya `GET /api/v1/analytics/categories`, tetap menampilkan penjualan kategori itu.
|
||||
|
||||
## Purchase order dan cash advance
|
||||
|
||||
Picker team sudah mengambil dari `GET /api/v1/purchase-orders/teams` dan `GET /api/v1/cash-advances/teams`, jadi kategori non-team otomatis tidak muncul tanpa perubahan di client.
|
||||
|
||||
Yang perlu diubah ada di form edit. Purchase order atau cash advance lama bisa tercatat ke kategori yang sekarang sudah non-team. Kalau form edit mengirim ulang `team_scope` dan `team_category_id` yang sama, request ditolak, walaupun user tidak mengubah team-nya.
|
||||
|
||||
1. Kirim `team_scope` dan `team_category_id` hanya kalau user mengganti team. Kalau `team_scope` tidak dikirim, team yang tersimpan tidak berubah.
|
||||
2. Kalau team yang tersimpan tidak ada di daftar `/teams`, tampilkan namanya dari field `team` di response apa adanya, dan jangan memilihkan team lain secara otomatis.
|
||||
|
||||
Contoh error saat team ditolak, dengan HTTP status 500:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"data": null,
|
||||
"errors": [
|
||||
{
|
||||
"code": "900",
|
||||
"entity": "purchase_order_service",
|
||||
"cause": "category Merchandise is not a team"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Untuk cash advance, `entity` bernilai `cash_advance_service`. Cocokkan dengan teks `is not a team` di `cause` kalau perlu menampilkan pesan khusus.
|
||||
|
||||
## Laporan profit sharing
|
||||
|
||||
### Path baru
|
||||
|
||||
| Lama | Baru |
|
||||
| --- | --- |
|
||||
| `GET /api/v1/analytics/parent-categories` | `GET /api/v1/analytics/profit-sharing` |
|
||||
| `GET /api/v1/analytics/parent-categories/:parent_category_id` | `GET /api/v1/analytics/profit-sharing/:parent_category_id` |
|
||||
|
||||
Query parameter dan role tidak berubah:
|
||||
|
||||
- `date_from` dan `date_to` wajib, dengan format `DD-MM-YYYY`, misalnya `28-09-2026`.
|
||||
- `outlet_id` opsional.
|
||||
- Hanya bisa diakses superadmin, admin, manager, owner, dan purchasing.
|
||||
|
||||
Path lama sudah tidak ada dan mengembalikan 404.
|
||||
|
||||
### Pembagian revenue
|
||||
|
||||
Revenue tiap parent category yang team dibagi dua:
|
||||
|
||||
- **SDL (fee owner)** = revenue × `owner_fee_percent` / 100. Default-nya 20%, dan bisa diganti per parent category lewat `owner_fee_percent` di kategori.
|
||||
- **Team** = revenue − SDL.
|
||||
|
||||
Contoh dengan tiga parent category dalam satu minggu:
|
||||
|
||||
| Parent category | `is_team` | Fee owner | Revenue | SDL | Team |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| Food | `true` | 20% (default) | 1.000.000 | 200.000 | 800.000 |
|
||||
| Drink | `true` | 35% | 2.000.000 | 700.000 | 1.300.000 |
|
||||
| Merchandise | `false` | - | 500.000 | tidak dihitung | tidak dihitung |
|
||||
| **Budget minggu ini** | | | **3.000.000** | **900.000** | **2.100.000** |
|
||||
|
||||
### Perubahan field
|
||||
|
||||
| Field | Sebelum | Sesudah |
|
||||
| --- | --- | --- |
|
||||
| `data[]` | semua parent category | hanya parent category team |
|
||||
| `budget.percentages.purchase` | `60` | dihapus |
|
||||
| `budget.percentages.owner` | `20`, atau fee parent itu di endpoint detail | tidak berubah |
|
||||
| `budget.percentages.team` | `20` | `100 − owner`: `80` di list, `100 − fee parent` di detail |
|
||||
| `limit_purchase` di `budget.total`, `budget.weekly[]`, `budget.monthly[]` | 60% revenue | dihapus |
|
||||
| `limit_team` di tempat yang sama | 20% revenue | `revenue − sdl` |
|
||||
| `revenue` dan `sdl` di `budget` | semua parent category | hanya parent category team |
|
||||
|
||||
Di endpoint list, `budget.percentages` selalu berisi default `20` dan `80`, walaupun ada parent dengan fee berbeda. Angka `sdl` dan `limit_team` dihitung per parent dengan fee masing-masing, jadi `limit_team / revenue` bisa tidak persis 80%. Tampilkan angka rupiah dari response, jangan dihitung ulang dari persentase.
|
||||
|
||||
Baris di `data[]` membawa `sdl` tapi tidak membawa porsi team. Kalau porsi team per parent perlu ditampilkan, hitung dari `total_revenue − sdl`.
|
||||
|
||||
Contoh response list, dipotong:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"date_from": "2026-09-28T00:00:00+07:00",
|
||||
"date_to": "2026-10-04T23:59:59.999999999+07:00",
|
||||
"data": [
|
||||
{
|
||||
"parent_category_id": "<uuid>",
|
||||
"parent_category_name": "Drink",
|
||||
"owner_fee_percent": 35,
|
||||
"sdl": 700000,
|
||||
"total_revenue": 2000000
|
||||
},
|
||||
{
|
||||
"parent_category_id": "<uuid>",
|
||||
"parent_category_name": "Food",
|
||||
"owner_fee_percent": 20,
|
||||
"sdl": 200000,
|
||||
"total_revenue": 1000000
|
||||
}
|
||||
],
|
||||
"budget": {
|
||||
"percentages": { "owner": 20, "team": 80 },
|
||||
"cut_off_from": "2026-09-28T00:00:00+07:00",
|
||||
"cut_off_to": "2026-10-04T23:59:59.999999999+07:00",
|
||||
"total": {
|
||||
"period_start": "2026-09-28T00:00:00+07:00",
|
||||
"period_end": "2026-10-04T23:59:59.999999999+07:00",
|
||||
"revenue": 3000000,
|
||||
"order_count": 4,
|
||||
"sdl": 900000,
|
||||
"limit_team": 2100000
|
||||
},
|
||||
"weekly": [
|
||||
{
|
||||
"period_start": "2026-09-28T00:00:00+07:00",
|
||||
"period_end": "2026-10-04T23:59:59.999999999+07:00",
|
||||
"revenue": 3000000,
|
||||
"order_count": 4,
|
||||
"sdl": 900000,
|
||||
"limit_team": 2100000
|
||||
}
|
||||
],
|
||||
"monthly": [
|
||||
{
|
||||
"month": "2026-09",
|
||||
"week_count": 1,
|
||||
"period_start": "2026-09-28T00:00:00+07:00",
|
||||
"period_end": "2026-10-04T23:59:59.999999999+07:00",
|
||||
"revenue": 3000000,
|
||||
"order_count": 4,
|
||||
"sdl": 900000,
|
||||
"limit_team": 2100000
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"errors": null
|
||||
}
|
||||
```
|
||||
|
||||
Di endpoint detail, `budget` bentuknya sama, tapi `percentages` memakai fee parent itu, misalnya `{ "owner": 35, "team": 65 }` untuk Drink.
|
||||
|
||||
### Detail kategori non-team
|
||||
|
||||
Detail untuk parent category non-team ditolak dengan HTTP status 500:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"data": null,
|
||||
"errors": [
|
||||
{
|
||||
"code": "internal_error",
|
||||
"entity": "AnalyticsHandler::GetParentCategoryAnalyticsDetail",
|
||||
"cause": "failed to get parent category analytics detail: failed to get parent category analytics detail: category Merchandise is not a team"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Ini bisa terjadi kalau user membuka link lama atau bookmark ke parent yang baru dimatikan. Cocokkan dengan teks `is not a team` di `cause`, lalu arahkan user kembali ke list.
|
||||
|
||||
## Migrasi client
|
||||
|
||||
### Laporan profit sharing
|
||||
|
||||
1. Ganti path ke `/api/v1/analytics/profit-sharing`. Selama backend lama masih jalan, path baru mengembalikan 404. Kalau dapat 404, panggil path lama `/api/v1/analytics/parent-categories`, supaya client baru bisa dirilis sebelum backend.
|
||||
2. Hapus tampilan limit purchase dan persentase purchase. Jangan menganggap `limit_purchase` atau `percentages.purchase` selalu ada.
|
||||
3. Tampilkan dua porsi dengan label "SDL / Fee owner" dan "Team", ambil angkanya dari `sdl` dan `limit_team`.
|
||||
4. Kalau detail ditolak dengan `is not a team`, arahkan kembali ke list.
|
||||
|
||||
Selama fallback ke backend lama, `limit_team` masih berisi 20% revenue. Angkanya baru jadi `revenue − sdl` setelah backend baru dirilis.
|
||||
|
||||
### Form kategori
|
||||
|
||||
1. Tambah toggle `is_team` untuk parent category, misalnya berlabel "Ikut profit sharing (team)". Untuk kategori baru, toggle menyala secara default.
|
||||
2. Saat membuka form edit, isi toggle dari `is_team`. Selama backend lama masih jalan, field ini tidak ada di response, jadi anggap `true`.
|
||||
3. Saat admin mematikan toggle, tampilkan konfirmasi bahwa kategori itu tidak akan muncul di pilihan team dan di laporan profit sharing, termasuk untuk periode lampau.
|
||||
4. Di daftar kategori, beri penanda untuk parent category dengan `is_team: false`.
|
||||
|
||||
Backend lama mengabaikan `is_team` di request, jadi toggle bisa dirilis lebih dulu, tapi belum berpengaruh sampai backend baru jalan. Pengecualiannya update yang hanya berisi `is_team`: backend lama menolaknya dengan error code `303` dan pesan `at least one field must be provided for update`. Selama masa transisi, kirim `is_team` bersama field form lainnya.
|
||||
|
||||
## Database dan urutan rilis
|
||||
|
||||
Migration `000101_add_is_team_to_categories` menambah kolom `categories.is_team` (`BOOLEAN NOT NULL DEFAULT TRUE`). Semua kategori yang ada otomatis bernilai `true`. Migration ini hanya menambah kolom, jadi backend lama tetap jalan normal setelahnya.
|
||||
|
||||
Urutan rilis:
|
||||
|
||||
1. Rilis client baru: path profit sharing dengan fallback ke path lama, tanpa porsi purchase, dan dengan toggle `is_team`. Untuk app mobile, pastikan versi baru sudah dipakai sebagian besar user sebelum langkah 3, karena versi lama yang memanggil `/parent-categories` mendapat 404 setelah itu.
|
||||
2. Jalankan migration `000101`.
|
||||
3. Deploy backend baru.
|
||||
4. Hapus fallback path lama di client.
|
||||
5. Admin mematikan `is_team` di parent category yang bukan team.
|
||||
|
||||
Rollback: deploy backend lama, lalu jalankan down migration yang menghapus kolom `is_team`. Client dengan fallback tetap jalan di backend lama. Nilai `is_team` yang sudah diatur admin hilang saat kolom dihapus.
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Client baru (fallback path, tanpa porsi purchase, toggle `is_team`) dirilis
|
||||
- [ ] Migration `000101` dan backend baru dirilis di staging
|
||||
- [ ] Uji: parent category yang dimatikan hilang dari `/purchase-orders/teams` dan `/cash-advances/teams`
|
||||
- [ ] Uji: purchase order dan cash advance baru dengan kategori itu ditolak, dan edit purchase order lama tanpa mengganti team tetap berhasil
|
||||
- [ ] Uji: kategori itu hilang dari `/analytics/profit-sharing`, dan detailnya ditolak
|
||||
- [ ] Uji: `limit_team = revenue − sdl`, dan `sdl` mengikuti fee masing-masing parent
|
||||
- [ ] Migration `000101` dan backend baru dirilis di production
|
||||
- [ ] Fallback path lama di client dihapus
|
||||
|
||||
## FAQ
|
||||
|
||||
**Kenapa porsi team jadi 100% − fee owner, bukan tetap 20%?** Porsi purchase sudah tidak ada, jadi seluruh revenue dibagi dua. Owner mengambil fee-nya, dan sisanya untuk team. Kalau fee owner sebuah parent dinaikkan, porsi team parent itu turun sebesar yang sama.
|
||||
|
||||
**Apakah sub-category bisa dijadikan non-team sendiri?** Tidak. Team dan profit sharing dihitung per parent category, jadi semua sub-category ikut status parent-nya.
|
||||
|
||||
**Bagaimana dengan kategori top-level yang tidak punya sub-category?** Kategori itu tetap parent category, jadi `is_team` berlaku untuknya.
|
||||
@@ -21,6 +21,6 @@
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>MinimumOSVersion</key>
|
||||
<string>12.0</string>
|
||||
<string>15.0</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Uncomment this line to define a global platform for your project
|
||||
platform :ios, '14.0'
|
||||
platform :ios, '15.0'
|
||||
|
||||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
||||
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
||||
@@ -40,7 +40,7 @@ post_install do |installer|
|
||||
installer.pods_project.targets.each do |target|
|
||||
flutter_additional_ios_build_settings(target)
|
||||
target.build_configurations.each do |config|
|
||||
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '14.0'
|
||||
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0'
|
||||
config.build_settings['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES'
|
||||
# Disable code signing for all Pod targets — only Runner needs signing
|
||||
config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
|
||||
|
||||
@@ -476,7 +476,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SUPPORTED_PLATFORMS = iphoneos;
|
||||
@@ -495,7 +495,7 @@
|
||||
DEVELOPMENT_TEAM = 5TRC3M8UZG;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
@@ -607,7 +607,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
@@ -658,7 +658,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SUPPORTED_PLATFORMS = iphoneos;
|
||||
@@ -679,7 +679,7 @@
|
||||
DEVELOPMENT_TEAM = 5TRC3M8UZG;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
@@ -703,7 +703,7 @@
|
||||
DEVELOPMENT_TEAM = 5TRC3M8UZG;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
|
||||
|
Before Width: | Height: | Size: 654 KiB After Width: | Height: | Size: 652 KiB |
|
Before Width: | Height: | Size: 775 B After Width: | Height: | Size: 622 B |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 20 KiB |
@@ -5,7 +5,7 @@
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Enaklo Owner</string>
|
||||
<string>Grow Food</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
|
||||
@@ -3,15 +3,15 @@
|
||||
flutter_launcher_icons:
|
||||
android: "launcher_icon"
|
||||
ios: true
|
||||
image_path: "assets/images/logo.png"
|
||||
image_path: "assets/images/ic_launcher.png"
|
||||
remove_alpha_ios: true
|
||||
min_sdk_android: 21 # android min sdk min:16, default 21
|
||||
adaptive_icon_background: "#ffffff"
|
||||
adaptive_icon_foreground: "assets/images/logo.png"
|
||||
adaptive_icon_foreground: "assets/images/ic_launcher.png"
|
||||
web:
|
||||
generate: true
|
||||
image_path: "assets/images/logo.png"
|
||||
image_path: "assets/images/ic_launcher.png"
|
||||
windows:
|
||||
generate: true
|
||||
image_path: "assets/images/logo.png"
|
||||
image_path: "assets/images/ic_launcher.png"
|
||||
icon_size: 48
|
||||
|
||||
@@ -25,6 +25,9 @@ class CategoryAnalyticLoaderBloc
|
||||
Emitter<CategoryAnalyticLoaderState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
rangeDateChanged: (e) async {
|
||||
emit(state.copyWith(dateFrom: e.dateFrom, dateTo: e.dateTo));
|
||||
},
|
||||
fetched: (e) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
@@ -34,8 +37,8 @@ class CategoryAnalyticLoaderBloc
|
||||
);
|
||||
|
||||
final result = await _repository.getCategory(
|
||||
dateFrom: DateTime.now().subtract(const Duration(days: 30)),
|
||||
dateTo: DateTime.now(),
|
||||
dateFrom: state.dateFrom,
|
||||
dateTo: state.dateTo,
|
||||
);
|
||||
|
||||
var data = result.fold(
|
||||
|
||||
@@ -19,27 +19,34 @@ final _privateConstructorUsedError = UnsupportedError(
|
||||
mixin _$CategoryAnalyticLoaderEvent {
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(DateTime dateFrom, DateTime dateTo)
|
||||
rangeDateChanged,
|
||||
required TResult Function() fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult? Function()? fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult Function()? fetched,
|
||||
required TResult orElse(),
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_RangeDateChanged value) rangeDateChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
required TResult orElse(),
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@@ -74,6 +81,165 @@ class _$CategoryAnalyticLoaderEventCopyWithImpl<
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$RangeDateChangedImplCopyWith<$Res> {
|
||||
factory _$$RangeDateChangedImplCopyWith(
|
||||
_$RangeDateChangedImpl value,
|
||||
$Res Function(_$RangeDateChangedImpl) then,
|
||||
) = __$$RangeDateChangedImplCopyWithImpl<$Res>;
|
||||
@useResult
|
||||
$Res call({DateTime dateFrom, DateTime dateTo});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$RangeDateChangedImplCopyWithImpl<$Res>
|
||||
extends
|
||||
_$CategoryAnalyticLoaderEventCopyWithImpl<$Res, _$RangeDateChangedImpl>
|
||||
implements _$$RangeDateChangedImplCopyWith<$Res> {
|
||||
__$$RangeDateChangedImplCopyWithImpl(
|
||||
_$RangeDateChangedImpl _value,
|
||||
$Res Function(_$RangeDateChangedImpl) _then,
|
||||
) : super(_value, _then);
|
||||
|
||||
/// Create a copy of CategoryAnalyticLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({Object? dateFrom = null, Object? dateTo = null}) {
|
||||
return _then(
|
||||
_$RangeDateChangedImpl(
|
||||
null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
null == dateTo
|
||||
? _value.dateTo
|
||||
: dateTo // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$RangeDateChangedImpl implements _RangeDateChanged {
|
||||
const _$RangeDateChangedImpl(this.dateFrom, this.dateTo);
|
||||
|
||||
@override
|
||||
final DateTime dateFrom;
|
||||
@override
|
||||
final DateTime dateTo;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'CategoryAnalyticLoaderEvent.rangeDateChanged(dateFrom: $dateFrom, dateTo: $dateTo)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$RangeDateChangedImpl &&
|
||||
(identical(other.dateFrom, dateFrom) ||
|
||||
other.dateFrom == dateFrom) &&
|
||||
(identical(other.dateTo, dateTo) || other.dateTo == dateTo));
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, dateFrom, dateTo);
|
||||
|
||||
/// Create a copy of CategoryAnalyticLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$RangeDateChangedImplCopyWith<_$RangeDateChangedImpl> get copyWith =>
|
||||
__$$RangeDateChangedImplCopyWithImpl<_$RangeDateChangedImpl>(
|
||||
this,
|
||||
_$identity,
|
||||
);
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(DateTime dateFrom, DateTime dateTo)
|
||||
rangeDateChanged,
|
||||
required TResult Function() fetched,
|
||||
}) {
|
||||
return rangeDateChanged(dateFrom, dateTo);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult? Function()? fetched,
|
||||
}) {
|
||||
return rangeDateChanged?.call(dateFrom, dateTo);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult Function()? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (rangeDateChanged != null) {
|
||||
return rangeDateChanged(dateFrom, dateTo);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_RangeDateChanged value) rangeDateChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
}) {
|
||||
return rangeDateChanged(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
}) {
|
||||
return rangeDateChanged?.call(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (rangeDateChanged != null) {
|
||||
return rangeDateChanged(this);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _RangeDateChanged implements CategoryAnalyticLoaderEvent {
|
||||
const factory _RangeDateChanged(
|
||||
final DateTime dateFrom,
|
||||
final DateTime dateTo,
|
||||
) = _$RangeDateChangedImpl;
|
||||
|
||||
DateTime get dateFrom;
|
||||
DateTime get dateTo;
|
||||
|
||||
/// Create a copy of CategoryAnalyticLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$RangeDateChangedImplCopyWith<_$RangeDateChangedImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$FetchedImplCopyWith<$Res> {
|
||||
factory _$$FetchedImplCopyWith(
|
||||
@@ -116,19 +282,27 @@ class _$FetchedImpl implements _Fetched {
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({required TResult Function() fetched}) {
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(DateTime dateFrom, DateTime dateTo)
|
||||
rangeDateChanged,
|
||||
required TResult Function() fetched,
|
||||
}) {
|
||||
return fetched();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({TResult? Function()? fetched}) {
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult? Function()? fetched,
|
||||
}) {
|
||||
return fetched?.call();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult Function()? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
@@ -141,6 +315,7 @@ class _$FetchedImpl implements _Fetched {
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_RangeDateChanged value) rangeDateChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
}) {
|
||||
return fetched(this);
|
||||
@@ -149,6 +324,7 @@ class _$FetchedImpl implements _Fetched {
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
}) {
|
||||
return fetched?.call(this);
|
||||
@@ -157,6 +333,7 @@ class _$FetchedImpl implements _Fetched {
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
@@ -177,6 +354,8 @@ mixin _$CategoryAnalyticLoaderState {
|
||||
Option<AnalyticFailure> get failureOptionCategoryAnalytic =>
|
||||
throw _privateConstructorUsedError;
|
||||
bool get isFetching => throw _privateConstructorUsedError;
|
||||
DateTime get dateFrom => throw _privateConstructorUsedError;
|
||||
DateTime get dateTo => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of CategoryAnalyticLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@@ -200,6 +379,8 @@ abstract class $CategoryAnalyticLoaderStateCopyWith<$Res> {
|
||||
CategoryAnalytic categoryAnalytic,
|
||||
Option<AnalyticFailure> failureOptionCategoryAnalytic,
|
||||
bool isFetching,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
});
|
||||
|
||||
$CategoryAnalyticCopyWith<$Res> get categoryAnalytic;
|
||||
@@ -226,6 +407,8 @@ class _$CategoryAnalyticLoaderStateCopyWithImpl<
|
||||
Object? categoryAnalytic = null,
|
||||
Object? failureOptionCategoryAnalytic = null,
|
||||
Object? isFetching = null,
|
||||
Object? dateFrom = null,
|
||||
Object? dateTo = null,
|
||||
}) {
|
||||
return _then(
|
||||
_value.copyWith(
|
||||
@@ -241,6 +424,14 @@ class _$CategoryAnalyticLoaderStateCopyWithImpl<
|
||||
? _value.isFetching
|
||||
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
dateFrom: null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
dateTo: null == dateTo
|
||||
? _value.dateTo
|
||||
: dateTo // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
)
|
||||
as $Val,
|
||||
);
|
||||
@@ -270,6 +461,8 @@ abstract class _$$CategoryAnalyticLoaderStateImplCopyWith<$Res>
|
||||
CategoryAnalytic categoryAnalytic,
|
||||
Option<AnalyticFailure> failureOptionCategoryAnalytic,
|
||||
bool isFetching,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -297,6 +490,8 @@ class __$$CategoryAnalyticLoaderStateImplCopyWithImpl<$Res>
|
||||
Object? categoryAnalytic = null,
|
||||
Object? failureOptionCategoryAnalytic = null,
|
||||
Object? isFetching = null,
|
||||
Object? dateFrom = null,
|
||||
Object? dateTo = null,
|
||||
}) {
|
||||
return _then(
|
||||
_$CategoryAnalyticLoaderStateImpl(
|
||||
@@ -312,6 +507,14 @@ class __$$CategoryAnalyticLoaderStateImplCopyWithImpl<$Res>
|
||||
? _value.isFetching
|
||||
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
dateFrom: null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
dateTo: null == dateTo
|
||||
? _value.dateTo
|
||||
: dateTo // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -325,6 +528,8 @@ class _$CategoryAnalyticLoaderStateImpl
|
||||
required this.categoryAnalytic,
|
||||
required this.failureOptionCategoryAnalytic,
|
||||
this.isFetching = false,
|
||||
required this.dateFrom,
|
||||
required this.dateTo,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -334,10 +539,14 @@ class _$CategoryAnalyticLoaderStateImpl
|
||||
@override
|
||||
@JsonKey()
|
||||
final bool isFetching;
|
||||
@override
|
||||
final DateTime dateFrom;
|
||||
@override
|
||||
final DateTime dateTo;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'CategoryAnalyticLoaderState(categoryAnalytic: $categoryAnalytic, failureOptionCategoryAnalytic: $failureOptionCategoryAnalytic, isFetching: $isFetching)';
|
||||
return 'CategoryAnalyticLoaderState(categoryAnalytic: $categoryAnalytic, failureOptionCategoryAnalytic: $failureOptionCategoryAnalytic, isFetching: $isFetching, dateFrom: $dateFrom, dateTo: $dateTo)';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -354,7 +563,10 @@ class _$CategoryAnalyticLoaderStateImpl
|
||||
other.failureOptionCategoryAnalytic ==
|
||||
failureOptionCategoryAnalytic) &&
|
||||
(identical(other.isFetching, isFetching) ||
|
||||
other.isFetching == isFetching));
|
||||
other.isFetching == isFetching) &&
|
||||
(identical(other.dateFrom, dateFrom) ||
|
||||
other.dateFrom == dateFrom) &&
|
||||
(identical(other.dateTo, dateTo) || other.dateTo == dateTo));
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -363,6 +575,8 @@ class _$CategoryAnalyticLoaderStateImpl
|
||||
categoryAnalytic,
|
||||
failureOptionCategoryAnalytic,
|
||||
isFetching,
|
||||
dateFrom,
|
||||
dateTo,
|
||||
);
|
||||
|
||||
/// Create a copy of CategoryAnalyticLoaderState
|
||||
@@ -383,6 +597,8 @@ abstract class _CategoryAnalyticLoaderState
|
||||
required final CategoryAnalytic categoryAnalytic,
|
||||
required final Option<AnalyticFailure> failureOptionCategoryAnalytic,
|
||||
final bool isFetching,
|
||||
required final DateTime dateFrom,
|
||||
required final DateTime dateTo,
|
||||
}) = _$CategoryAnalyticLoaderStateImpl;
|
||||
|
||||
@override
|
||||
@@ -391,6 +607,10 @@ abstract class _CategoryAnalyticLoaderState
|
||||
Option<AnalyticFailure> get failureOptionCategoryAnalytic;
|
||||
@override
|
||||
bool get isFetching;
|
||||
@override
|
||||
DateTime get dateFrom;
|
||||
@override
|
||||
DateTime get dateTo;
|
||||
|
||||
/// Create a copy of CategoryAnalyticLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
|
||||
@@ -2,5 +2,9 @@ part of 'category_analytic_loader_bloc.dart';
|
||||
|
||||
@freezed
|
||||
class CategoryAnalyticLoaderEvent with _$CategoryAnalyticLoaderEvent {
|
||||
const factory CategoryAnalyticLoaderEvent.rangeDateChanged(
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
) = _RangeDateChanged;
|
||||
const factory CategoryAnalyticLoaderEvent.fetched() = _Fetched;
|
||||
}
|
||||
|
||||
@@ -6,10 +6,14 @@ class CategoryAnalyticLoaderState with _$CategoryAnalyticLoaderState {
|
||||
required CategoryAnalytic categoryAnalytic,
|
||||
required Option<AnalyticFailure> failureOptionCategoryAnalytic,
|
||||
@Default(false) bool isFetching,
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
}) = _CategoryAnalyticLoaderState;
|
||||
|
||||
factory CategoryAnalyticLoaderState.initial() => CategoryAnalyticLoaderState(
|
||||
categoryAnalytic: CategoryAnalytic.empty(),
|
||||
failureOptionCategoryAnalytic: none(),
|
||||
dateFrom: DateTime.now(),
|
||||
dateTo: DateTime.now(),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/analytic/analytic.dart';
|
||||
import '../../../domain/analytic/repositories/i_analytic_repository.dart';
|
||||
|
||||
part 'exclusive_summary_loader_event.dart';
|
||||
part 'exclusive_summary_loader_state.dart';
|
||||
part 'exclusive_summary_loader_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class ExclusiveSummaryLoaderBloc
|
||||
extends Bloc<ExclusiveSummaryLoaderEvent, ExclusiveSummaryLoaderState> {
|
||||
final IAnalyticRepository _repository;
|
||||
|
||||
ExclusiveSummaryLoaderBloc(this._repository)
|
||||
: super(ExclusiveSummaryLoaderState.initial()) {
|
||||
on<ExclusiveSummaryLoaderEvent>(_onEvent);
|
||||
}
|
||||
|
||||
Future<void> _onEvent(
|
||||
ExclusiveSummaryLoaderEvent event,
|
||||
Emitter<ExclusiveSummaryLoaderState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
rangeDateChanged: (e) async {
|
||||
emit(state.copyWith(dateFrom: e.dateFrom, dateTo: e.dateTo));
|
||||
},
|
||||
fetched: (e) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
isFetching: true,
|
||||
failureOption: none(),
|
||||
),
|
||||
);
|
||||
|
||||
final result = await _repository.getExclusiveSummary(
|
||||
dateFrom: state.dateFrom,
|
||||
dateTo: state.dateTo,
|
||||
);
|
||||
|
||||
final data = result.fold(
|
||||
(f) => state.copyWith(failureOption: optionOf(f)),
|
||||
(summary) => state.copyWith(exclusiveSummary: summary),
|
||||
);
|
||||
|
||||
emit(data.copyWith(isFetching: false));
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,617 @@
|
||||
// coverage:ignore-file
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// 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 'exclusive_summary_loader_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
T _$identity<T>(T value) => value;
|
||||
|
||||
final _privateConstructorUsedError = UnsupportedError(
|
||||
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||
);
|
||||
|
||||
/// @nodoc
|
||||
mixin _$ExclusiveSummaryLoaderEvent {
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(DateTime dateFrom, DateTime dateTo)
|
||||
rangeDateChanged,
|
||||
required TResult Function() fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult? Function()? fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult Function()? fetched,
|
||||
required TResult orElse(),
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_RangeDateChanged value) rangeDateChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
required TResult orElse(),
|
||||
}) => throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class $ExclusiveSummaryLoaderEventCopyWith<$Res> {
|
||||
factory $ExclusiveSummaryLoaderEventCopyWith(
|
||||
ExclusiveSummaryLoaderEvent value,
|
||||
$Res Function(ExclusiveSummaryLoaderEvent) then,
|
||||
) =
|
||||
_$ExclusiveSummaryLoaderEventCopyWithImpl<
|
||||
$Res,
|
||||
ExclusiveSummaryLoaderEvent
|
||||
>;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class _$ExclusiveSummaryLoaderEventCopyWithImpl<
|
||||
$Res,
|
||||
$Val extends ExclusiveSummaryLoaderEvent
|
||||
>
|
||||
implements $ExclusiveSummaryLoaderEventCopyWith<$Res> {
|
||||
_$ExclusiveSummaryLoaderEventCopyWithImpl(this._value, this._then);
|
||||
|
||||
// ignore: unused_field
|
||||
final $Val _value;
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of ExclusiveSummaryLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$RangeDateChangedImplCopyWith<$Res> {
|
||||
factory _$$RangeDateChangedImplCopyWith(
|
||||
_$RangeDateChangedImpl value,
|
||||
$Res Function(_$RangeDateChangedImpl) then,
|
||||
) = __$$RangeDateChangedImplCopyWithImpl<$Res>;
|
||||
@useResult
|
||||
$Res call({DateTime dateFrom, DateTime dateTo});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$RangeDateChangedImplCopyWithImpl<$Res>
|
||||
extends
|
||||
_$ExclusiveSummaryLoaderEventCopyWithImpl<$Res, _$RangeDateChangedImpl>
|
||||
implements _$$RangeDateChangedImplCopyWith<$Res> {
|
||||
__$$RangeDateChangedImplCopyWithImpl(
|
||||
_$RangeDateChangedImpl _value,
|
||||
$Res Function(_$RangeDateChangedImpl) _then,
|
||||
) : super(_value, _then);
|
||||
|
||||
/// Create a copy of ExclusiveSummaryLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({Object? dateFrom = null, Object? dateTo = null}) {
|
||||
return _then(
|
||||
_$RangeDateChangedImpl(
|
||||
null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
null == dateTo
|
||||
? _value.dateTo
|
||||
: dateTo // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$RangeDateChangedImpl implements _RangeDateChanged {
|
||||
const _$RangeDateChangedImpl(this.dateFrom, this.dateTo);
|
||||
|
||||
@override
|
||||
final DateTime dateFrom;
|
||||
@override
|
||||
final DateTime dateTo;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ExclusiveSummaryLoaderEvent.rangeDateChanged(dateFrom: $dateFrom, dateTo: $dateTo)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$RangeDateChangedImpl &&
|
||||
(identical(other.dateFrom, dateFrom) ||
|
||||
other.dateFrom == dateFrom) &&
|
||||
(identical(other.dateTo, dateTo) || other.dateTo == dateTo));
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, dateFrom, dateTo);
|
||||
|
||||
/// Create a copy of ExclusiveSummaryLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$RangeDateChangedImplCopyWith<_$RangeDateChangedImpl> get copyWith =>
|
||||
__$$RangeDateChangedImplCopyWithImpl<_$RangeDateChangedImpl>(
|
||||
this,
|
||||
_$identity,
|
||||
);
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(DateTime dateFrom, DateTime dateTo)
|
||||
rangeDateChanged,
|
||||
required TResult Function() fetched,
|
||||
}) {
|
||||
return rangeDateChanged(dateFrom, dateTo);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult? Function()? fetched,
|
||||
}) {
|
||||
return rangeDateChanged?.call(dateFrom, dateTo);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult Function()? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (rangeDateChanged != null) {
|
||||
return rangeDateChanged(dateFrom, dateTo);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_RangeDateChanged value) rangeDateChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
}) {
|
||||
return rangeDateChanged(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
}) {
|
||||
return rangeDateChanged?.call(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (rangeDateChanged != null) {
|
||||
return rangeDateChanged(this);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _RangeDateChanged implements ExclusiveSummaryLoaderEvent {
|
||||
const factory _RangeDateChanged(
|
||||
final DateTime dateFrom,
|
||||
final DateTime dateTo,
|
||||
) = _$RangeDateChangedImpl;
|
||||
|
||||
DateTime get dateFrom;
|
||||
DateTime get dateTo;
|
||||
|
||||
/// Create a copy of ExclusiveSummaryLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$RangeDateChangedImplCopyWith<_$RangeDateChangedImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$FetchedImplCopyWith<$Res> {
|
||||
factory _$$FetchedImplCopyWith(
|
||||
_$FetchedImpl value,
|
||||
$Res Function(_$FetchedImpl) then,
|
||||
) = __$$FetchedImplCopyWithImpl<$Res>;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$FetchedImplCopyWithImpl<$Res>
|
||||
extends _$ExclusiveSummaryLoaderEventCopyWithImpl<$Res, _$FetchedImpl>
|
||||
implements _$$FetchedImplCopyWith<$Res> {
|
||||
__$$FetchedImplCopyWithImpl(
|
||||
_$FetchedImpl _value,
|
||||
$Res Function(_$FetchedImpl) _then,
|
||||
) : super(_value, _then);
|
||||
|
||||
/// Create a copy of ExclusiveSummaryLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$FetchedImpl implements _Fetched {
|
||||
const _$FetchedImpl();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ExclusiveSummaryLoaderEvent.fetched()';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType && other is _$FetchedImpl);
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(DateTime dateFrom, DateTime dateTo)
|
||||
rangeDateChanged,
|
||||
required TResult Function() fetched,
|
||||
}) {
|
||||
return fetched();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult? Function()? fetched,
|
||||
}) {
|
||||
return fetched?.call();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult Function()? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (fetched != null) {
|
||||
return fetched();
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_RangeDateChanged value) rangeDateChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
}) {
|
||||
return fetched(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
}) {
|
||||
return fetched?.call(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (fetched != null) {
|
||||
return fetched(this);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _Fetched implements ExclusiveSummaryLoaderEvent {
|
||||
const factory _Fetched() = _$FetchedImpl;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
mixin _$ExclusiveSummaryLoaderState {
|
||||
ExclusiveSummary get exclusiveSummary => throw _privateConstructorUsedError;
|
||||
Option<AnalyticFailure> get failureOption =>
|
||||
throw _privateConstructorUsedError;
|
||||
bool get isFetching => throw _privateConstructorUsedError;
|
||||
DateTime get dateFrom => throw _privateConstructorUsedError;
|
||||
DateTime get dateTo => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of ExclusiveSummaryLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$ExclusiveSummaryLoaderStateCopyWith<ExclusiveSummaryLoaderState>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class $ExclusiveSummaryLoaderStateCopyWith<$Res> {
|
||||
factory $ExclusiveSummaryLoaderStateCopyWith(
|
||||
ExclusiveSummaryLoaderState value,
|
||||
$Res Function(ExclusiveSummaryLoaderState) then,
|
||||
) =
|
||||
_$ExclusiveSummaryLoaderStateCopyWithImpl<
|
||||
$Res,
|
||||
ExclusiveSummaryLoaderState
|
||||
>;
|
||||
@useResult
|
||||
$Res call({
|
||||
ExclusiveSummary exclusiveSummary,
|
||||
Option<AnalyticFailure> failureOption,
|
||||
bool isFetching,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
});
|
||||
|
||||
$ExclusiveSummaryCopyWith<$Res> get exclusiveSummary;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class _$ExclusiveSummaryLoaderStateCopyWithImpl<
|
||||
$Res,
|
||||
$Val extends ExclusiveSummaryLoaderState
|
||||
>
|
||||
implements $ExclusiveSummaryLoaderStateCopyWith<$Res> {
|
||||
_$ExclusiveSummaryLoaderStateCopyWithImpl(this._value, this._then);
|
||||
|
||||
// ignore: unused_field
|
||||
final $Val _value;
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of ExclusiveSummaryLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? exclusiveSummary = null,
|
||||
Object? failureOption = null,
|
||||
Object? isFetching = null,
|
||||
Object? dateFrom = null,
|
||||
Object? dateTo = null,
|
||||
}) {
|
||||
return _then(
|
||||
_value.copyWith(
|
||||
exclusiveSummary: null == exclusiveSummary
|
||||
? _value.exclusiveSummary
|
||||
: exclusiveSummary // ignore: cast_nullable_to_non_nullable
|
||||
as ExclusiveSummary,
|
||||
failureOption: null == failureOption
|
||||
? _value.failureOption
|
||||
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<AnalyticFailure>,
|
||||
isFetching: null == isFetching
|
||||
? _value.isFetching
|
||||
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
dateFrom: null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
dateTo: null == dateTo
|
||||
? _value.dateTo
|
||||
: dateTo // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
)
|
||||
as $Val,
|
||||
);
|
||||
}
|
||||
|
||||
/// Create a copy of ExclusiveSummaryLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$ExclusiveSummaryCopyWith<$Res> get exclusiveSummary {
|
||||
return $ExclusiveSummaryCopyWith<$Res>(_value.exclusiveSummary, (value) {
|
||||
return _then(_value.copyWith(exclusiveSummary: value) as $Val);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$ExclusiveSummaryLoaderStateImplCopyWith<$Res>
|
||||
implements $ExclusiveSummaryLoaderStateCopyWith<$Res> {
|
||||
factory _$$ExclusiveSummaryLoaderStateImplCopyWith(
|
||||
_$ExclusiveSummaryLoaderStateImpl value,
|
||||
$Res Function(_$ExclusiveSummaryLoaderStateImpl) then,
|
||||
) = __$$ExclusiveSummaryLoaderStateImplCopyWithImpl<$Res>;
|
||||
@override
|
||||
@useResult
|
||||
$Res call({
|
||||
ExclusiveSummary exclusiveSummary,
|
||||
Option<AnalyticFailure> failureOption,
|
||||
bool isFetching,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
});
|
||||
|
||||
@override
|
||||
$ExclusiveSummaryCopyWith<$Res> get exclusiveSummary;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$ExclusiveSummaryLoaderStateImplCopyWithImpl<$Res>
|
||||
extends
|
||||
_$ExclusiveSummaryLoaderStateCopyWithImpl<
|
||||
$Res,
|
||||
_$ExclusiveSummaryLoaderStateImpl
|
||||
>
|
||||
implements _$$ExclusiveSummaryLoaderStateImplCopyWith<$Res> {
|
||||
__$$ExclusiveSummaryLoaderStateImplCopyWithImpl(
|
||||
_$ExclusiveSummaryLoaderStateImpl _value,
|
||||
$Res Function(_$ExclusiveSummaryLoaderStateImpl) _then,
|
||||
) : super(_value, _then);
|
||||
|
||||
/// Create a copy of ExclusiveSummaryLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? exclusiveSummary = null,
|
||||
Object? failureOption = null,
|
||||
Object? isFetching = null,
|
||||
Object? dateFrom = null,
|
||||
Object? dateTo = null,
|
||||
}) {
|
||||
return _then(
|
||||
_$ExclusiveSummaryLoaderStateImpl(
|
||||
exclusiveSummary: null == exclusiveSummary
|
||||
? _value.exclusiveSummary
|
||||
: exclusiveSummary // ignore: cast_nullable_to_non_nullable
|
||||
as ExclusiveSummary,
|
||||
failureOption: null == failureOption
|
||||
? _value.failureOption
|
||||
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<AnalyticFailure>,
|
||||
isFetching: null == isFetching
|
||||
? _value.isFetching
|
||||
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
dateFrom: null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
dateTo: null == dateTo
|
||||
? _value.dateTo
|
||||
: dateTo // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$ExclusiveSummaryLoaderStateImpl
|
||||
implements _ExclusiveSummaryLoaderState {
|
||||
const _$ExclusiveSummaryLoaderStateImpl({
|
||||
required this.exclusiveSummary,
|
||||
required this.failureOption,
|
||||
this.isFetching = false,
|
||||
required this.dateFrom,
|
||||
required this.dateTo,
|
||||
});
|
||||
|
||||
@override
|
||||
final ExclusiveSummary exclusiveSummary;
|
||||
@override
|
||||
final Option<AnalyticFailure> failureOption;
|
||||
@override
|
||||
@JsonKey()
|
||||
final bool isFetching;
|
||||
@override
|
||||
final DateTime dateFrom;
|
||||
@override
|
||||
final DateTime dateTo;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ExclusiveSummaryLoaderState(exclusiveSummary: $exclusiveSummary, failureOption: $failureOption, isFetching: $isFetching, dateFrom: $dateFrom, dateTo: $dateTo)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$ExclusiveSummaryLoaderStateImpl &&
|
||||
(identical(other.exclusiveSummary, exclusiveSummary) ||
|
||||
other.exclusiveSummary == exclusiveSummary) &&
|
||||
(identical(other.failureOption, failureOption) ||
|
||||
other.failureOption == failureOption) &&
|
||||
(identical(other.isFetching, isFetching) ||
|
||||
other.isFetching == isFetching) &&
|
||||
(identical(other.dateFrom, dateFrom) ||
|
||||
other.dateFrom == dateFrom) &&
|
||||
(identical(other.dateTo, dateTo) || other.dateTo == dateTo));
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType,
|
||||
exclusiveSummary,
|
||||
failureOption,
|
||||
isFetching,
|
||||
dateFrom,
|
||||
dateTo,
|
||||
);
|
||||
|
||||
/// Create a copy of ExclusiveSummaryLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$ExclusiveSummaryLoaderStateImplCopyWith<_$ExclusiveSummaryLoaderStateImpl>
|
||||
get copyWith =>
|
||||
__$$ExclusiveSummaryLoaderStateImplCopyWithImpl<
|
||||
_$ExclusiveSummaryLoaderStateImpl
|
||||
>(this, _$identity);
|
||||
}
|
||||
|
||||
abstract class _ExclusiveSummaryLoaderState
|
||||
implements ExclusiveSummaryLoaderState {
|
||||
const factory _ExclusiveSummaryLoaderState({
|
||||
required final ExclusiveSummary exclusiveSummary,
|
||||
required final Option<AnalyticFailure> failureOption,
|
||||
final bool isFetching,
|
||||
required final DateTime dateFrom,
|
||||
required final DateTime dateTo,
|
||||
}) = _$ExclusiveSummaryLoaderStateImpl;
|
||||
|
||||
@override
|
||||
ExclusiveSummary get exclusiveSummary;
|
||||
@override
|
||||
Option<AnalyticFailure> get failureOption;
|
||||
@override
|
||||
bool get isFetching;
|
||||
@override
|
||||
DateTime get dateFrom;
|
||||
@override
|
||||
DateTime get dateTo;
|
||||
|
||||
/// Create a copy of ExclusiveSummaryLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$ExclusiveSummaryLoaderStateImplCopyWith<_$ExclusiveSummaryLoaderStateImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
part of 'exclusive_summary_loader_bloc.dart';
|
||||
|
||||
@freezed
|
||||
class ExclusiveSummaryLoaderEvent with _$ExclusiveSummaryLoaderEvent {
|
||||
const factory ExclusiveSummaryLoaderEvent.rangeDateChanged(
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
) = _RangeDateChanged;
|
||||
|
||||
const factory ExclusiveSummaryLoaderEvent.fetched() = _Fetched;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
part of 'exclusive_summary_loader_bloc.dart';
|
||||
|
||||
@freezed
|
||||
class ExclusiveSummaryLoaderState with _$ExclusiveSummaryLoaderState {
|
||||
const factory ExclusiveSummaryLoaderState({
|
||||
required ExclusiveSummary exclusiveSummary,
|
||||
required Option<AnalyticFailure> failureOption,
|
||||
@Default(false) bool isFetching,
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
}) = _ExclusiveSummaryLoaderState;
|
||||
|
||||
factory ExclusiveSummaryLoaderState.initial() {
|
||||
final now = DateTime.now();
|
||||
return ExclusiveSummaryLoaderState(
|
||||
exclusiveSummary: ExclusiveSummary.empty(),
|
||||
failureOption: none(),
|
||||
dateFrom: DateTime(now.year, now.month, 1),
|
||||
dateTo: DateTime(now.year, now.month + 1, 0),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,9 @@ class PaymentMethodAnalyticLoaderBloc
|
||||
Emitter<PaymentMethodAnalyticLoaderState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
rangeDateChanged: (e) async {
|
||||
emit(state.copyWith(dateFrom: e.dateFrom, dateTo: e.dateTo));
|
||||
},
|
||||
fetched: (e) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
@@ -37,8 +40,8 @@ class PaymentMethodAnalyticLoaderBloc
|
||||
);
|
||||
|
||||
final result = await _repository.getPaymentMethod(
|
||||
dateFrom: DateTime.now().subtract(const Duration(days: 30)),
|
||||
dateTo: DateTime.now(),
|
||||
dateFrom: state.dateFrom,
|
||||
dateTo: state.dateTo,
|
||||
);
|
||||
|
||||
var data = result.fold(
|
||||
|
||||
@@ -19,27 +19,34 @@ final _privateConstructorUsedError = UnsupportedError(
|
||||
mixin _$PaymentMethodAnalyticLoaderEvent {
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(DateTime dateFrom, DateTime dateTo)
|
||||
rangeDateChanged,
|
||||
required TResult Function() fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult? Function()? fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult Function()? fetched,
|
||||
required TResult orElse(),
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_RangeDateChanged value) rangeDateChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
required TResult orElse(),
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@@ -74,6 +81,168 @@ class _$PaymentMethodAnalyticLoaderEventCopyWithImpl<
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$RangeDateChangedImplCopyWith<$Res> {
|
||||
factory _$$RangeDateChangedImplCopyWith(
|
||||
_$RangeDateChangedImpl value,
|
||||
$Res Function(_$RangeDateChangedImpl) then,
|
||||
) = __$$RangeDateChangedImplCopyWithImpl<$Res>;
|
||||
@useResult
|
||||
$Res call({DateTime dateFrom, DateTime dateTo});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$RangeDateChangedImplCopyWithImpl<$Res>
|
||||
extends
|
||||
_$PaymentMethodAnalyticLoaderEventCopyWithImpl<
|
||||
$Res,
|
||||
_$RangeDateChangedImpl
|
||||
>
|
||||
implements _$$RangeDateChangedImplCopyWith<$Res> {
|
||||
__$$RangeDateChangedImplCopyWithImpl(
|
||||
_$RangeDateChangedImpl _value,
|
||||
$Res Function(_$RangeDateChangedImpl) _then,
|
||||
) : super(_value, _then);
|
||||
|
||||
/// Create a copy of PaymentMethodAnalyticLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({Object? dateFrom = null, Object? dateTo = null}) {
|
||||
return _then(
|
||||
_$RangeDateChangedImpl(
|
||||
null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
null == dateTo
|
||||
? _value.dateTo
|
||||
: dateTo // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$RangeDateChangedImpl implements _RangeDateChanged {
|
||||
const _$RangeDateChangedImpl(this.dateFrom, this.dateTo);
|
||||
|
||||
@override
|
||||
final DateTime dateFrom;
|
||||
@override
|
||||
final DateTime dateTo;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'PaymentMethodAnalyticLoaderEvent.rangeDateChanged(dateFrom: $dateFrom, dateTo: $dateTo)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$RangeDateChangedImpl &&
|
||||
(identical(other.dateFrom, dateFrom) ||
|
||||
other.dateFrom == dateFrom) &&
|
||||
(identical(other.dateTo, dateTo) || other.dateTo == dateTo));
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, dateFrom, dateTo);
|
||||
|
||||
/// Create a copy of PaymentMethodAnalyticLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$RangeDateChangedImplCopyWith<_$RangeDateChangedImpl> get copyWith =>
|
||||
__$$RangeDateChangedImplCopyWithImpl<_$RangeDateChangedImpl>(
|
||||
this,
|
||||
_$identity,
|
||||
);
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(DateTime dateFrom, DateTime dateTo)
|
||||
rangeDateChanged,
|
||||
required TResult Function() fetched,
|
||||
}) {
|
||||
return rangeDateChanged(dateFrom, dateTo);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult? Function()? fetched,
|
||||
}) {
|
||||
return rangeDateChanged?.call(dateFrom, dateTo);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult Function()? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (rangeDateChanged != null) {
|
||||
return rangeDateChanged(dateFrom, dateTo);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_RangeDateChanged value) rangeDateChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
}) {
|
||||
return rangeDateChanged(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
}) {
|
||||
return rangeDateChanged?.call(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (rangeDateChanged != null) {
|
||||
return rangeDateChanged(this);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _RangeDateChanged implements PaymentMethodAnalyticLoaderEvent {
|
||||
const factory _RangeDateChanged(
|
||||
final DateTime dateFrom,
|
||||
final DateTime dateTo,
|
||||
) = _$RangeDateChangedImpl;
|
||||
|
||||
DateTime get dateFrom;
|
||||
DateTime get dateTo;
|
||||
|
||||
/// Create a copy of PaymentMethodAnalyticLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$RangeDateChangedImplCopyWith<_$RangeDateChangedImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$FetchedImplCopyWith<$Res> {
|
||||
factory _$$FetchedImplCopyWith(
|
||||
@@ -116,19 +285,27 @@ class _$FetchedImpl implements _Fetched {
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({required TResult Function() fetched}) {
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(DateTime dateFrom, DateTime dateTo)
|
||||
rangeDateChanged,
|
||||
required TResult Function() fetched,
|
||||
}) {
|
||||
return fetched();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({TResult? Function()? fetched}) {
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult? Function()? fetched,
|
||||
}) {
|
||||
return fetched?.call();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult Function()? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
@@ -141,6 +318,7 @@ class _$FetchedImpl implements _Fetched {
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_RangeDateChanged value) rangeDateChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
}) {
|
||||
return fetched(this);
|
||||
@@ -149,6 +327,7 @@ class _$FetchedImpl implements _Fetched {
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
}) {
|
||||
return fetched?.call(this);
|
||||
@@ -157,6 +336,7 @@ class _$FetchedImpl implements _Fetched {
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
@@ -178,6 +358,8 @@ mixin _$PaymentMethodAnalyticLoaderState {
|
||||
Option<AnalyticFailure> get failureOptionPaymentMethodAnalytic =>
|
||||
throw _privateConstructorUsedError;
|
||||
bool get isFetching => throw _privateConstructorUsedError;
|
||||
DateTime get dateFrom => throw _privateConstructorUsedError;
|
||||
DateTime get dateTo => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of PaymentMethodAnalyticLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@@ -201,6 +383,8 @@ abstract class $PaymentMethodAnalyticLoaderStateCopyWith<$Res> {
|
||||
PaymentMethodAnalytic paymentMethodAnalytic,
|
||||
Option<AnalyticFailure> failureOptionPaymentMethodAnalytic,
|
||||
bool isFetching,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
});
|
||||
|
||||
$PaymentMethodAnalyticCopyWith<$Res> get paymentMethodAnalytic;
|
||||
@@ -227,6 +411,8 @@ class _$PaymentMethodAnalyticLoaderStateCopyWithImpl<
|
||||
Object? paymentMethodAnalytic = null,
|
||||
Object? failureOptionPaymentMethodAnalytic = null,
|
||||
Object? isFetching = null,
|
||||
Object? dateFrom = null,
|
||||
Object? dateTo = null,
|
||||
}) {
|
||||
return _then(
|
||||
_value.copyWith(
|
||||
@@ -243,6 +429,14 @@ class _$PaymentMethodAnalyticLoaderStateCopyWithImpl<
|
||||
? _value.isFetching
|
||||
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
dateFrom: null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
dateTo: null == dateTo
|
||||
? _value.dateTo
|
||||
: dateTo // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
)
|
||||
as $Val,
|
||||
);
|
||||
@@ -274,6 +468,8 @@ abstract class _$$PaymentMethodAnalyticLoaderStateImplCopyWith<$Res>
|
||||
PaymentMethodAnalytic paymentMethodAnalytic,
|
||||
Option<AnalyticFailure> failureOptionPaymentMethodAnalytic,
|
||||
bool isFetching,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -301,6 +497,8 @@ class __$$PaymentMethodAnalyticLoaderStateImplCopyWithImpl<$Res>
|
||||
Object? paymentMethodAnalytic = null,
|
||||
Object? failureOptionPaymentMethodAnalytic = null,
|
||||
Object? isFetching = null,
|
||||
Object? dateFrom = null,
|
||||
Object? dateTo = null,
|
||||
}) {
|
||||
return _then(
|
||||
_$PaymentMethodAnalyticLoaderStateImpl(
|
||||
@@ -317,6 +515,14 @@ class __$$PaymentMethodAnalyticLoaderStateImplCopyWithImpl<$Res>
|
||||
? _value.isFetching
|
||||
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
dateFrom: null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
dateTo: null == dateTo
|
||||
? _value.dateTo
|
||||
: dateTo // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -330,6 +536,8 @@ class _$PaymentMethodAnalyticLoaderStateImpl
|
||||
required this.paymentMethodAnalytic,
|
||||
required this.failureOptionPaymentMethodAnalytic,
|
||||
this.isFetching = false,
|
||||
required this.dateFrom,
|
||||
required this.dateTo,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -339,10 +547,14 @@ class _$PaymentMethodAnalyticLoaderStateImpl
|
||||
@override
|
||||
@JsonKey()
|
||||
final bool isFetching;
|
||||
@override
|
||||
final DateTime dateFrom;
|
||||
@override
|
||||
final DateTime dateTo;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'PaymentMethodAnalyticLoaderState(paymentMethodAnalytic: $paymentMethodAnalytic, failureOptionPaymentMethodAnalytic: $failureOptionPaymentMethodAnalytic, isFetching: $isFetching)';
|
||||
return 'PaymentMethodAnalyticLoaderState(paymentMethodAnalytic: $paymentMethodAnalytic, failureOptionPaymentMethodAnalytic: $failureOptionPaymentMethodAnalytic, isFetching: $isFetching, dateFrom: $dateFrom, dateTo: $dateTo)';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -359,7 +571,10 @@ class _$PaymentMethodAnalyticLoaderStateImpl
|
||||
other.failureOptionPaymentMethodAnalytic ==
|
||||
failureOptionPaymentMethodAnalytic) &&
|
||||
(identical(other.isFetching, isFetching) ||
|
||||
other.isFetching == isFetching));
|
||||
other.isFetching == isFetching) &&
|
||||
(identical(other.dateFrom, dateFrom) ||
|
||||
other.dateFrom == dateFrom) &&
|
||||
(identical(other.dateTo, dateTo) || other.dateTo == dateTo));
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -368,6 +583,8 @@ class _$PaymentMethodAnalyticLoaderStateImpl
|
||||
paymentMethodAnalytic,
|
||||
failureOptionPaymentMethodAnalytic,
|
||||
isFetching,
|
||||
dateFrom,
|
||||
dateTo,
|
||||
);
|
||||
|
||||
/// Create a copy of PaymentMethodAnalyticLoaderState
|
||||
@@ -390,6 +607,8 @@ abstract class _PaymentMethodAnalyticLoaderState
|
||||
required final PaymentMethodAnalytic paymentMethodAnalytic,
|
||||
required final Option<AnalyticFailure> failureOptionPaymentMethodAnalytic,
|
||||
final bool isFetching,
|
||||
required final DateTime dateFrom,
|
||||
required final DateTime dateTo,
|
||||
}) = _$PaymentMethodAnalyticLoaderStateImpl;
|
||||
|
||||
@override
|
||||
@@ -398,6 +617,10 @@ abstract class _PaymentMethodAnalyticLoaderState
|
||||
Option<AnalyticFailure> get failureOptionPaymentMethodAnalytic;
|
||||
@override
|
||||
bool get isFetching;
|
||||
@override
|
||||
DateTime get dateFrom;
|
||||
@override
|
||||
DateTime get dateTo;
|
||||
|
||||
/// Create a copy of PaymentMethodAnalyticLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
|
||||
@@ -2,5 +2,9 @@ part of 'payment_method_analytic_loader_bloc.dart';
|
||||
|
||||
@freezed
|
||||
class PaymentMethodAnalyticLoaderEvent with _$PaymentMethodAnalyticLoaderEvent {
|
||||
const factory PaymentMethodAnalyticLoaderEvent.rangeDateChanged(
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
) = _RangeDateChanged;
|
||||
const factory PaymentMethodAnalyticLoaderEvent.fetched() = _Fetched;
|
||||
}
|
||||
|
||||
@@ -6,11 +6,15 @@ class PaymentMethodAnalyticLoaderState with _$PaymentMethodAnalyticLoaderState {
|
||||
required PaymentMethodAnalytic paymentMethodAnalytic,
|
||||
required Option<AnalyticFailure> failureOptionPaymentMethodAnalytic,
|
||||
@Default(false) bool isFetching,
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
}) = _PaymentMethodAnalyticLoaderState;
|
||||
|
||||
factory PaymentMethodAnalyticLoaderState.initial() =>
|
||||
PaymentMethodAnalyticLoaderState(
|
||||
paymentMethodAnalytic: PaymentMethodAnalytic.empty(),
|
||||
failureOptionPaymentMethodAnalytic: none(),
|
||||
dateFrom: DateTime.now(),
|
||||
dateTo: DateTime.now(),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ class ProductAnalyticLoaderState with _$ProductAnalyticLoaderState {
|
||||
factory ProductAnalyticLoaderState.initial() => ProductAnalyticLoaderState(
|
||||
productAnalytic: ProductAnalytic.empty(),
|
||||
failureOptionProductAnalytic: none(),
|
||||
dateFrom: DateTime.now().subtract(const Duration(days: 30)),
|
||||
dateFrom: DateTime.now(),
|
||||
dateTo: DateTime.now(),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/analytic/analytic.dart';
|
||||
import '../../../domain/analytic/repositories/i_analytic_repository.dart';
|
||||
|
||||
part 'profit_sharing_detail_loader_event.dart';
|
||||
part 'profit_sharing_detail_loader_state.dart';
|
||||
part 'profit_sharing_detail_loader_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class ProfitSharingDetailLoaderBloc
|
||||
extends
|
||||
Bloc<ProfitSharingDetailLoaderEvent, ProfitSharingDetailLoaderState> {
|
||||
final IAnalyticRepository _repository;
|
||||
|
||||
ProfitSharingDetailLoaderBloc(this._repository)
|
||||
: super(ProfitSharingDetailLoaderState.initial()) {
|
||||
on<ProfitSharingDetailLoaderEvent>(_onProfitSharingDetailLoaderEvent);
|
||||
}
|
||||
|
||||
Future<void> _onProfitSharingDetailLoaderEvent(
|
||||
ProfitSharingDetailLoaderEvent event,
|
||||
Emitter<ProfitSharingDetailLoaderState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
expandedCategoryChanged: (e) async {
|
||||
final isSame = state.expandedCategoryId == e.categoryId;
|
||||
emit(state.copyWith(expandedCategoryId: isSame ? '' : e.categoryId));
|
||||
},
|
||||
fetched: (e) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
isFetching: true,
|
||||
failureOption: none(),
|
||||
parentCategoryId: e.parentCategoryId,
|
||||
dateFrom: e.dateFrom,
|
||||
dateTo: e.dateTo,
|
||||
),
|
||||
);
|
||||
|
||||
final result = await _repository.getProfitSharingDetail(
|
||||
parentCategoryId: e.parentCategoryId,
|
||||
dateFrom: e.dateFrom,
|
||||
dateTo: e.dateTo,
|
||||
);
|
||||
|
||||
final newState = result.fold(
|
||||
(f) => state.copyWith(failureOption: optionOf(f)),
|
||||
(detail) => state.copyWith(
|
||||
detail: detail,
|
||||
// Sub kategori pertama langsung terbuka supaya produknya kelihatan.
|
||||
expandedCategoryId: detail.categories.isEmpty
|
||||
? ''
|
||||
: detail.categories.first.categoryId,
|
||||
),
|
||||
);
|
||||
|
||||
emit(newState.copyWith(isFetching: false));
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,772 @@
|
||||
// coverage:ignore-file
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// 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 'profit_sharing_detail_loader_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
T _$identity<T>(T value) => value;
|
||||
|
||||
final _privateConstructorUsedError = UnsupportedError(
|
||||
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||
);
|
||||
|
||||
/// @nodoc
|
||||
mixin _$ProfitSharingDetailLoaderEvent {
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(
|
||||
String parentCategoryId,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
)
|
||||
fetched,
|
||||
required TResult Function(String categoryId) expandedCategoryChanged,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(
|
||||
String parentCategoryId,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
)?
|
||||
fetched,
|
||||
TResult? Function(String categoryId)? expandedCategoryChanged,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(
|
||||
String parentCategoryId,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
)?
|
||||
fetched,
|
||||
TResult Function(String categoryId)? expandedCategoryChanged,
|
||||
required TResult orElse(),
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
required TResult Function(_ExpandedCategoryChanged value)
|
||||
expandedCategoryChanged,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
TResult? Function(_ExpandedCategoryChanged value)? expandedCategoryChanged,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
TResult Function(_ExpandedCategoryChanged value)? expandedCategoryChanged,
|
||||
required TResult orElse(),
|
||||
}) => throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class $ProfitSharingDetailLoaderEventCopyWith<$Res> {
|
||||
factory $ProfitSharingDetailLoaderEventCopyWith(
|
||||
ProfitSharingDetailLoaderEvent value,
|
||||
$Res Function(ProfitSharingDetailLoaderEvent) then,
|
||||
) =
|
||||
_$ProfitSharingDetailLoaderEventCopyWithImpl<
|
||||
$Res,
|
||||
ProfitSharingDetailLoaderEvent
|
||||
>;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class _$ProfitSharingDetailLoaderEventCopyWithImpl<
|
||||
$Res,
|
||||
$Val extends ProfitSharingDetailLoaderEvent
|
||||
>
|
||||
implements $ProfitSharingDetailLoaderEventCopyWith<$Res> {
|
||||
_$ProfitSharingDetailLoaderEventCopyWithImpl(this._value, this._then);
|
||||
|
||||
// ignore: unused_field
|
||||
final $Val _value;
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of ProfitSharingDetailLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$FetchedImplCopyWith<$Res> {
|
||||
factory _$$FetchedImplCopyWith(
|
||||
_$FetchedImpl value,
|
||||
$Res Function(_$FetchedImpl) then,
|
||||
) = __$$FetchedImplCopyWithImpl<$Res>;
|
||||
@useResult
|
||||
$Res call({String parentCategoryId, DateTime dateFrom, DateTime dateTo});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$FetchedImplCopyWithImpl<$Res>
|
||||
extends _$ProfitSharingDetailLoaderEventCopyWithImpl<$Res, _$FetchedImpl>
|
||||
implements _$$FetchedImplCopyWith<$Res> {
|
||||
__$$FetchedImplCopyWithImpl(
|
||||
_$FetchedImpl _value,
|
||||
$Res Function(_$FetchedImpl) _then,
|
||||
) : super(_value, _then);
|
||||
|
||||
/// Create a copy of ProfitSharingDetailLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? parentCategoryId = null,
|
||||
Object? dateFrom = null,
|
||||
Object? dateTo = null,
|
||||
}) {
|
||||
return _then(
|
||||
_$FetchedImpl(
|
||||
parentCategoryId: null == parentCategoryId
|
||||
? _value.parentCategoryId
|
||||
: parentCategoryId // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
dateFrom: null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
dateTo: null == dateTo
|
||||
? _value.dateTo
|
||||
: dateTo // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$FetchedImpl implements _Fetched {
|
||||
const _$FetchedImpl({
|
||||
required this.parentCategoryId,
|
||||
required this.dateFrom,
|
||||
required this.dateTo,
|
||||
});
|
||||
|
||||
@override
|
||||
final String parentCategoryId;
|
||||
@override
|
||||
final DateTime dateFrom;
|
||||
@override
|
||||
final DateTime dateTo;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ProfitSharingDetailLoaderEvent.fetched(parentCategoryId: $parentCategoryId, dateFrom: $dateFrom, dateTo: $dateTo)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$FetchedImpl &&
|
||||
(identical(other.parentCategoryId, parentCategoryId) ||
|
||||
other.parentCategoryId == parentCategoryId) &&
|
||||
(identical(other.dateFrom, dateFrom) ||
|
||||
other.dateFrom == dateFrom) &&
|
||||
(identical(other.dateTo, dateTo) || other.dateTo == dateTo));
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode =>
|
||||
Object.hash(runtimeType, parentCategoryId, dateFrom, dateTo);
|
||||
|
||||
/// Create a copy of ProfitSharingDetailLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||
__$$FetchedImplCopyWithImpl<_$FetchedImpl>(this, _$identity);
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(
|
||||
String parentCategoryId,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
)
|
||||
fetched,
|
||||
required TResult Function(String categoryId) expandedCategoryChanged,
|
||||
}) {
|
||||
return fetched(parentCategoryId, dateFrom, dateTo);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(
|
||||
String parentCategoryId,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
)?
|
||||
fetched,
|
||||
TResult? Function(String categoryId)? expandedCategoryChanged,
|
||||
}) {
|
||||
return fetched?.call(parentCategoryId, dateFrom, dateTo);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(
|
||||
String parentCategoryId,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
)?
|
||||
fetched,
|
||||
TResult Function(String categoryId)? expandedCategoryChanged,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (fetched != null) {
|
||||
return fetched(parentCategoryId, dateFrom, dateTo);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
required TResult Function(_ExpandedCategoryChanged value)
|
||||
expandedCategoryChanged,
|
||||
}) {
|
||||
return fetched(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
TResult? Function(_ExpandedCategoryChanged value)? expandedCategoryChanged,
|
||||
}) {
|
||||
return fetched?.call(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
TResult Function(_ExpandedCategoryChanged value)? expandedCategoryChanged,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (fetched != null) {
|
||||
return fetched(this);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _Fetched implements ProfitSharingDetailLoaderEvent {
|
||||
const factory _Fetched({
|
||||
required final String parentCategoryId,
|
||||
required final DateTime dateFrom,
|
||||
required final DateTime dateTo,
|
||||
}) = _$FetchedImpl;
|
||||
|
||||
String get parentCategoryId;
|
||||
DateTime get dateFrom;
|
||||
DateTime get dateTo;
|
||||
|
||||
/// Create a copy of ProfitSharingDetailLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$ExpandedCategoryChangedImplCopyWith<$Res> {
|
||||
factory _$$ExpandedCategoryChangedImplCopyWith(
|
||||
_$ExpandedCategoryChangedImpl value,
|
||||
$Res Function(_$ExpandedCategoryChangedImpl) then,
|
||||
) = __$$ExpandedCategoryChangedImplCopyWithImpl<$Res>;
|
||||
@useResult
|
||||
$Res call({String categoryId});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$ExpandedCategoryChangedImplCopyWithImpl<$Res>
|
||||
extends
|
||||
_$ProfitSharingDetailLoaderEventCopyWithImpl<
|
||||
$Res,
|
||||
_$ExpandedCategoryChangedImpl
|
||||
>
|
||||
implements _$$ExpandedCategoryChangedImplCopyWith<$Res> {
|
||||
__$$ExpandedCategoryChangedImplCopyWithImpl(
|
||||
_$ExpandedCategoryChangedImpl _value,
|
||||
$Res Function(_$ExpandedCategoryChangedImpl) _then,
|
||||
) : super(_value, _then);
|
||||
|
||||
/// Create a copy of ProfitSharingDetailLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({Object? categoryId = null}) {
|
||||
return _then(
|
||||
_$ExpandedCategoryChangedImpl(
|
||||
null == categoryId
|
||||
? _value.categoryId
|
||||
: categoryId // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$ExpandedCategoryChangedImpl implements _ExpandedCategoryChanged {
|
||||
const _$ExpandedCategoryChangedImpl(this.categoryId);
|
||||
|
||||
@override
|
||||
final String categoryId;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ProfitSharingDetailLoaderEvent.expandedCategoryChanged(categoryId: $categoryId)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$ExpandedCategoryChangedImpl &&
|
||||
(identical(other.categoryId, categoryId) ||
|
||||
other.categoryId == categoryId));
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, categoryId);
|
||||
|
||||
/// Create a copy of ProfitSharingDetailLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$ExpandedCategoryChangedImplCopyWith<_$ExpandedCategoryChangedImpl>
|
||||
get copyWith =>
|
||||
__$$ExpandedCategoryChangedImplCopyWithImpl<
|
||||
_$ExpandedCategoryChangedImpl
|
||||
>(this, _$identity);
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(
|
||||
String parentCategoryId,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
)
|
||||
fetched,
|
||||
required TResult Function(String categoryId) expandedCategoryChanged,
|
||||
}) {
|
||||
return expandedCategoryChanged(categoryId);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(
|
||||
String parentCategoryId,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
)?
|
||||
fetched,
|
||||
TResult? Function(String categoryId)? expandedCategoryChanged,
|
||||
}) {
|
||||
return expandedCategoryChanged?.call(categoryId);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(
|
||||
String parentCategoryId,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
)?
|
||||
fetched,
|
||||
TResult Function(String categoryId)? expandedCategoryChanged,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (expandedCategoryChanged != null) {
|
||||
return expandedCategoryChanged(categoryId);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
required TResult Function(_ExpandedCategoryChanged value)
|
||||
expandedCategoryChanged,
|
||||
}) {
|
||||
return expandedCategoryChanged(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
TResult? Function(_ExpandedCategoryChanged value)? expandedCategoryChanged,
|
||||
}) {
|
||||
return expandedCategoryChanged?.call(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
TResult Function(_ExpandedCategoryChanged value)? expandedCategoryChanged,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (expandedCategoryChanged != null) {
|
||||
return expandedCategoryChanged(this);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _ExpandedCategoryChanged
|
||||
implements ProfitSharingDetailLoaderEvent {
|
||||
const factory _ExpandedCategoryChanged(final String categoryId) =
|
||||
_$ExpandedCategoryChangedImpl;
|
||||
|
||||
String get categoryId;
|
||||
|
||||
/// Create a copy of ProfitSharingDetailLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$ExpandedCategoryChangedImplCopyWith<_$ExpandedCategoryChangedImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
mixin _$ProfitSharingDetailLoaderState {
|
||||
ProfitSharingDetail get detail => throw _privateConstructorUsedError;
|
||||
Option<AnalyticFailure> get failureOption =>
|
||||
throw _privateConstructorUsedError;
|
||||
bool get isFetching => throw _privateConstructorUsedError;
|
||||
String get parentCategoryId => throw _privateConstructorUsedError;
|
||||
String get expandedCategoryId => throw _privateConstructorUsedError;
|
||||
DateTime get dateFrom => throw _privateConstructorUsedError;
|
||||
DateTime get dateTo => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of ProfitSharingDetailLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$ProfitSharingDetailLoaderStateCopyWith<ProfitSharingDetailLoaderState>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class $ProfitSharingDetailLoaderStateCopyWith<$Res> {
|
||||
factory $ProfitSharingDetailLoaderStateCopyWith(
|
||||
ProfitSharingDetailLoaderState value,
|
||||
$Res Function(ProfitSharingDetailLoaderState) then,
|
||||
) =
|
||||
_$ProfitSharingDetailLoaderStateCopyWithImpl<
|
||||
$Res,
|
||||
ProfitSharingDetailLoaderState
|
||||
>;
|
||||
@useResult
|
||||
$Res call({
|
||||
ProfitSharingDetail detail,
|
||||
Option<AnalyticFailure> failureOption,
|
||||
bool isFetching,
|
||||
String parentCategoryId,
|
||||
String expandedCategoryId,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
});
|
||||
|
||||
$ProfitSharingDetailCopyWith<$Res> get detail;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class _$ProfitSharingDetailLoaderStateCopyWithImpl<
|
||||
$Res,
|
||||
$Val extends ProfitSharingDetailLoaderState
|
||||
>
|
||||
implements $ProfitSharingDetailLoaderStateCopyWith<$Res> {
|
||||
_$ProfitSharingDetailLoaderStateCopyWithImpl(this._value, this._then);
|
||||
|
||||
// ignore: unused_field
|
||||
final $Val _value;
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of ProfitSharingDetailLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? detail = null,
|
||||
Object? failureOption = null,
|
||||
Object? isFetching = null,
|
||||
Object? parentCategoryId = null,
|
||||
Object? expandedCategoryId = null,
|
||||
Object? dateFrom = null,
|
||||
Object? dateTo = null,
|
||||
}) {
|
||||
return _then(
|
||||
_value.copyWith(
|
||||
detail: null == detail
|
||||
? _value.detail
|
||||
: detail // ignore: cast_nullable_to_non_nullable
|
||||
as ProfitSharingDetail,
|
||||
failureOption: null == failureOption
|
||||
? _value.failureOption
|
||||
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<AnalyticFailure>,
|
||||
isFetching: null == isFetching
|
||||
? _value.isFetching
|
||||
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
parentCategoryId: null == parentCategoryId
|
||||
? _value.parentCategoryId
|
||||
: parentCategoryId // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
expandedCategoryId: null == expandedCategoryId
|
||||
? _value.expandedCategoryId
|
||||
: expandedCategoryId // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
dateFrom: null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
dateTo: null == dateTo
|
||||
? _value.dateTo
|
||||
: dateTo // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
)
|
||||
as $Val,
|
||||
);
|
||||
}
|
||||
|
||||
/// Create a copy of ProfitSharingDetailLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$ProfitSharingDetailCopyWith<$Res> get detail {
|
||||
return $ProfitSharingDetailCopyWith<$Res>(_value.detail, (value) {
|
||||
return _then(_value.copyWith(detail: value) as $Val);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$ProfitSharingDetailLoaderStateImplCopyWith<$Res>
|
||||
implements $ProfitSharingDetailLoaderStateCopyWith<$Res> {
|
||||
factory _$$ProfitSharingDetailLoaderStateImplCopyWith(
|
||||
_$ProfitSharingDetailLoaderStateImpl value,
|
||||
$Res Function(_$ProfitSharingDetailLoaderStateImpl) then,
|
||||
) = __$$ProfitSharingDetailLoaderStateImplCopyWithImpl<$Res>;
|
||||
@override
|
||||
@useResult
|
||||
$Res call({
|
||||
ProfitSharingDetail detail,
|
||||
Option<AnalyticFailure> failureOption,
|
||||
bool isFetching,
|
||||
String parentCategoryId,
|
||||
String expandedCategoryId,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
});
|
||||
|
||||
@override
|
||||
$ProfitSharingDetailCopyWith<$Res> get detail;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$ProfitSharingDetailLoaderStateImplCopyWithImpl<$Res>
|
||||
extends
|
||||
_$ProfitSharingDetailLoaderStateCopyWithImpl<
|
||||
$Res,
|
||||
_$ProfitSharingDetailLoaderStateImpl
|
||||
>
|
||||
implements _$$ProfitSharingDetailLoaderStateImplCopyWith<$Res> {
|
||||
__$$ProfitSharingDetailLoaderStateImplCopyWithImpl(
|
||||
_$ProfitSharingDetailLoaderStateImpl _value,
|
||||
$Res Function(_$ProfitSharingDetailLoaderStateImpl) _then,
|
||||
) : super(_value, _then);
|
||||
|
||||
/// Create a copy of ProfitSharingDetailLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? detail = null,
|
||||
Object? failureOption = null,
|
||||
Object? isFetching = null,
|
||||
Object? parentCategoryId = null,
|
||||
Object? expandedCategoryId = null,
|
||||
Object? dateFrom = null,
|
||||
Object? dateTo = null,
|
||||
}) {
|
||||
return _then(
|
||||
_$ProfitSharingDetailLoaderStateImpl(
|
||||
detail: null == detail
|
||||
? _value.detail
|
||||
: detail // ignore: cast_nullable_to_non_nullable
|
||||
as ProfitSharingDetail,
|
||||
failureOption: null == failureOption
|
||||
? _value.failureOption
|
||||
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<AnalyticFailure>,
|
||||
isFetching: null == isFetching
|
||||
? _value.isFetching
|
||||
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
parentCategoryId: null == parentCategoryId
|
||||
? _value.parentCategoryId
|
||||
: parentCategoryId // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
expandedCategoryId: null == expandedCategoryId
|
||||
? _value.expandedCategoryId
|
||||
: expandedCategoryId // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
dateFrom: null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
dateTo: null == dateTo
|
||||
? _value.dateTo
|
||||
: dateTo // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$ProfitSharingDetailLoaderStateImpl
|
||||
extends _ProfitSharingDetailLoaderState {
|
||||
const _$ProfitSharingDetailLoaderStateImpl({
|
||||
required this.detail,
|
||||
required this.failureOption,
|
||||
this.isFetching = false,
|
||||
this.parentCategoryId = '',
|
||||
this.expandedCategoryId = '',
|
||||
required this.dateFrom,
|
||||
required this.dateTo,
|
||||
}) : super._();
|
||||
|
||||
@override
|
||||
final ProfitSharingDetail detail;
|
||||
@override
|
||||
final Option<AnalyticFailure> failureOption;
|
||||
@override
|
||||
@JsonKey()
|
||||
final bool isFetching;
|
||||
@override
|
||||
@JsonKey()
|
||||
final String parentCategoryId;
|
||||
@override
|
||||
@JsonKey()
|
||||
final String expandedCategoryId;
|
||||
@override
|
||||
final DateTime dateFrom;
|
||||
@override
|
||||
final DateTime dateTo;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ProfitSharingDetailLoaderState(detail: $detail, failureOption: $failureOption, isFetching: $isFetching, parentCategoryId: $parentCategoryId, expandedCategoryId: $expandedCategoryId, dateFrom: $dateFrom, dateTo: $dateTo)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$ProfitSharingDetailLoaderStateImpl &&
|
||||
(identical(other.detail, detail) || other.detail == detail) &&
|
||||
(identical(other.failureOption, failureOption) ||
|
||||
other.failureOption == failureOption) &&
|
||||
(identical(other.isFetching, isFetching) ||
|
||||
other.isFetching == isFetching) &&
|
||||
(identical(other.parentCategoryId, parentCategoryId) ||
|
||||
other.parentCategoryId == parentCategoryId) &&
|
||||
(identical(other.expandedCategoryId, expandedCategoryId) ||
|
||||
other.expandedCategoryId == expandedCategoryId) &&
|
||||
(identical(other.dateFrom, dateFrom) ||
|
||||
other.dateFrom == dateFrom) &&
|
||||
(identical(other.dateTo, dateTo) || other.dateTo == dateTo));
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType,
|
||||
detail,
|
||||
failureOption,
|
||||
isFetching,
|
||||
parentCategoryId,
|
||||
expandedCategoryId,
|
||||
dateFrom,
|
||||
dateTo,
|
||||
);
|
||||
|
||||
/// Create a copy of ProfitSharingDetailLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$ProfitSharingDetailLoaderStateImplCopyWith<
|
||||
_$ProfitSharingDetailLoaderStateImpl
|
||||
>
|
||||
get copyWith =>
|
||||
__$$ProfitSharingDetailLoaderStateImplCopyWithImpl<
|
||||
_$ProfitSharingDetailLoaderStateImpl
|
||||
>(this, _$identity);
|
||||
}
|
||||
|
||||
abstract class _ProfitSharingDetailLoaderState
|
||||
extends ProfitSharingDetailLoaderState {
|
||||
const factory _ProfitSharingDetailLoaderState({
|
||||
required final ProfitSharingDetail detail,
|
||||
required final Option<AnalyticFailure> failureOption,
|
||||
final bool isFetching,
|
||||
final String parentCategoryId,
|
||||
final String expandedCategoryId,
|
||||
required final DateTime dateFrom,
|
||||
required final DateTime dateTo,
|
||||
}) = _$ProfitSharingDetailLoaderStateImpl;
|
||||
const _ProfitSharingDetailLoaderState._() : super._();
|
||||
|
||||
@override
|
||||
ProfitSharingDetail get detail;
|
||||
@override
|
||||
Option<AnalyticFailure> get failureOption;
|
||||
@override
|
||||
bool get isFetching;
|
||||
@override
|
||||
String get parentCategoryId;
|
||||
@override
|
||||
String get expandedCategoryId;
|
||||
@override
|
||||
DateTime get dateFrom;
|
||||
@override
|
||||
DateTime get dateTo;
|
||||
|
||||
/// Create a copy of ProfitSharingDetailLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$ProfitSharingDetailLoaderStateImplCopyWith<
|
||||
_$ProfitSharingDetailLoaderStateImpl
|
||||
>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
part of 'profit_sharing_detail_loader_bloc.dart';
|
||||
|
||||
@freezed
|
||||
class ProfitSharingDetailLoaderEvent with _$ProfitSharingDetailLoaderEvent {
|
||||
const factory ProfitSharingDetailLoaderEvent.fetched({
|
||||
required String parentCategoryId,
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
}) = _Fetched;
|
||||
|
||||
/// Buka/tutup daftar produk pada satu sub kategori.
|
||||
const factory ProfitSharingDetailLoaderEvent.expandedCategoryChanged(
|
||||
String categoryId,
|
||||
) = _ExpandedCategoryChanged;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
part of 'profit_sharing_detail_loader_bloc.dart';
|
||||
|
||||
@freezed
|
||||
class ProfitSharingDetailLoaderState with _$ProfitSharingDetailLoaderState {
|
||||
const ProfitSharingDetailLoaderState._();
|
||||
|
||||
const factory ProfitSharingDetailLoaderState({
|
||||
required ProfitSharingDetail detail,
|
||||
required Option<AnalyticFailure> failureOption,
|
||||
@Default(false) bool isFetching,
|
||||
@Default('') String parentCategoryId,
|
||||
@Default('') String expandedCategoryId,
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
}) = _ProfitSharingDetailLoaderState;
|
||||
|
||||
factory ProfitSharingDetailLoaderState.initial() {
|
||||
final now = DateTime.now();
|
||||
return ProfitSharingDetailLoaderState(
|
||||
detail: ProfitSharingDetail.empty(),
|
||||
failureOption: none(),
|
||||
dateFrom: DateTime(now.year, now.month, 1),
|
||||
dateTo: DateTime(now.year, now.month + 1, 0),
|
||||
);
|
||||
}
|
||||
|
||||
bool isExpanded(String categoryId) => expandedCategoryId == categoryId;
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/analytic/analytic.dart';
|
||||
import '../../../domain/analytic/repositories/i_analytic_repository.dart';
|
||||
|
||||
part 'profit_sharing_loader_event.dart';
|
||||
part 'profit_sharing_loader_state.dart';
|
||||
part 'profit_sharing_loader_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class ProfitSharingLoaderBloc
|
||||
extends Bloc<ProfitSharingLoaderEvent, ProfitSharingLoaderState> {
|
||||
final IAnalyticRepository _repository;
|
||||
|
||||
ProfitSharingLoaderBloc(this._repository)
|
||||
: super(ProfitSharingLoaderState.initial()) {
|
||||
on<ProfitSharingLoaderEvent>(_onProfitSharingLoaderEvent);
|
||||
}
|
||||
|
||||
Future<void> _onProfitSharingLoaderEvent(
|
||||
ProfitSharingLoaderEvent event,
|
||||
Emitter<ProfitSharingLoaderState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
rangeDateChanged: (e) async {
|
||||
emit(state.copyWith(dateFrom: e.dateFrom, dateTo: e.dateTo));
|
||||
},
|
||||
periodTypeChanged: (e) async {
|
||||
emit(state.copyWith(periodType: e.periodType));
|
||||
},
|
||||
fetched: (e) async {
|
||||
emit(state.copyWith(isFetching: true, failureOption: none()));
|
||||
|
||||
final result = await _repository.getProfitSharing(
|
||||
dateFrom: state.dateFrom,
|
||||
dateTo: state.dateTo,
|
||||
);
|
||||
|
||||
final newState = result.fold(
|
||||
(f) => state.copyWith(failureOption: optionOf(f)),
|
||||
(profitSharing) => state.copyWith(profitSharing: profitSharing),
|
||||
);
|
||||
|
||||
emit(newState.copyWith(isFetching: false));
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,807 @@
|
||||
// coverage:ignore-file
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// 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 'profit_sharing_loader_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
T _$identity<T>(T value) => value;
|
||||
|
||||
final _privateConstructorUsedError = UnsupportedError(
|
||||
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||
);
|
||||
|
||||
/// @nodoc
|
||||
mixin _$ProfitSharingLoaderEvent {
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(DateTime dateFrom, DateTime dateTo)
|
||||
rangeDateChanged,
|
||||
required TResult Function(ProfitSharingPeriodType periodType)
|
||||
periodTypeChanged,
|
||||
required TResult Function() fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult? Function(ProfitSharingPeriodType periodType)? periodTypeChanged,
|
||||
TResult? Function()? fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult Function(ProfitSharingPeriodType periodType)? periodTypeChanged,
|
||||
TResult Function()? fetched,
|
||||
required TResult orElse(),
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_RangeDateChanged value) rangeDateChanged,
|
||||
required TResult Function(_PeriodTypeChanged value) periodTypeChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult? Function(_PeriodTypeChanged value)? periodTypeChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult Function(_PeriodTypeChanged value)? periodTypeChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
required TResult orElse(),
|
||||
}) => throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class $ProfitSharingLoaderEventCopyWith<$Res> {
|
||||
factory $ProfitSharingLoaderEventCopyWith(
|
||||
ProfitSharingLoaderEvent value,
|
||||
$Res Function(ProfitSharingLoaderEvent) then,
|
||||
) = _$ProfitSharingLoaderEventCopyWithImpl<$Res, ProfitSharingLoaderEvent>;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class _$ProfitSharingLoaderEventCopyWithImpl<
|
||||
$Res,
|
||||
$Val extends ProfitSharingLoaderEvent
|
||||
>
|
||||
implements $ProfitSharingLoaderEventCopyWith<$Res> {
|
||||
_$ProfitSharingLoaderEventCopyWithImpl(this._value, this._then);
|
||||
|
||||
// ignore: unused_field
|
||||
final $Val _value;
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of ProfitSharingLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$RangeDateChangedImplCopyWith<$Res> {
|
||||
factory _$$RangeDateChangedImplCopyWith(
|
||||
_$RangeDateChangedImpl value,
|
||||
$Res Function(_$RangeDateChangedImpl) then,
|
||||
) = __$$RangeDateChangedImplCopyWithImpl<$Res>;
|
||||
@useResult
|
||||
$Res call({DateTime dateFrom, DateTime dateTo});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$RangeDateChangedImplCopyWithImpl<$Res>
|
||||
extends _$ProfitSharingLoaderEventCopyWithImpl<$Res, _$RangeDateChangedImpl>
|
||||
implements _$$RangeDateChangedImplCopyWith<$Res> {
|
||||
__$$RangeDateChangedImplCopyWithImpl(
|
||||
_$RangeDateChangedImpl _value,
|
||||
$Res Function(_$RangeDateChangedImpl) _then,
|
||||
) : super(_value, _then);
|
||||
|
||||
/// Create a copy of ProfitSharingLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({Object? dateFrom = null, Object? dateTo = null}) {
|
||||
return _then(
|
||||
_$RangeDateChangedImpl(
|
||||
null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
null == dateTo
|
||||
? _value.dateTo
|
||||
: dateTo // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$RangeDateChangedImpl implements _RangeDateChanged {
|
||||
const _$RangeDateChangedImpl(this.dateFrom, this.dateTo);
|
||||
|
||||
@override
|
||||
final DateTime dateFrom;
|
||||
@override
|
||||
final DateTime dateTo;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ProfitSharingLoaderEvent.rangeDateChanged(dateFrom: $dateFrom, dateTo: $dateTo)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$RangeDateChangedImpl &&
|
||||
(identical(other.dateFrom, dateFrom) ||
|
||||
other.dateFrom == dateFrom) &&
|
||||
(identical(other.dateTo, dateTo) || other.dateTo == dateTo));
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, dateFrom, dateTo);
|
||||
|
||||
/// Create a copy of ProfitSharingLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$RangeDateChangedImplCopyWith<_$RangeDateChangedImpl> get copyWith =>
|
||||
__$$RangeDateChangedImplCopyWithImpl<_$RangeDateChangedImpl>(
|
||||
this,
|
||||
_$identity,
|
||||
);
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(DateTime dateFrom, DateTime dateTo)
|
||||
rangeDateChanged,
|
||||
required TResult Function(ProfitSharingPeriodType periodType)
|
||||
periodTypeChanged,
|
||||
required TResult Function() fetched,
|
||||
}) {
|
||||
return rangeDateChanged(dateFrom, dateTo);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult? Function(ProfitSharingPeriodType periodType)? periodTypeChanged,
|
||||
TResult? Function()? fetched,
|
||||
}) {
|
||||
return rangeDateChanged?.call(dateFrom, dateTo);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult Function(ProfitSharingPeriodType periodType)? periodTypeChanged,
|
||||
TResult Function()? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (rangeDateChanged != null) {
|
||||
return rangeDateChanged(dateFrom, dateTo);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_RangeDateChanged value) rangeDateChanged,
|
||||
required TResult Function(_PeriodTypeChanged value) periodTypeChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
}) {
|
||||
return rangeDateChanged(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult? Function(_PeriodTypeChanged value)? periodTypeChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
}) {
|
||||
return rangeDateChanged?.call(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult Function(_PeriodTypeChanged value)? periodTypeChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (rangeDateChanged != null) {
|
||||
return rangeDateChanged(this);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _RangeDateChanged implements ProfitSharingLoaderEvent {
|
||||
const factory _RangeDateChanged(
|
||||
final DateTime dateFrom,
|
||||
final DateTime dateTo,
|
||||
) = _$RangeDateChangedImpl;
|
||||
|
||||
DateTime get dateFrom;
|
||||
DateTime get dateTo;
|
||||
|
||||
/// Create a copy of ProfitSharingLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$RangeDateChangedImplCopyWith<_$RangeDateChangedImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$PeriodTypeChangedImplCopyWith<$Res> {
|
||||
factory _$$PeriodTypeChangedImplCopyWith(
|
||||
_$PeriodTypeChangedImpl value,
|
||||
$Res Function(_$PeriodTypeChangedImpl) then,
|
||||
) = __$$PeriodTypeChangedImplCopyWithImpl<$Res>;
|
||||
@useResult
|
||||
$Res call({ProfitSharingPeriodType periodType});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$PeriodTypeChangedImplCopyWithImpl<$Res>
|
||||
extends
|
||||
_$ProfitSharingLoaderEventCopyWithImpl<$Res, _$PeriodTypeChangedImpl>
|
||||
implements _$$PeriodTypeChangedImplCopyWith<$Res> {
|
||||
__$$PeriodTypeChangedImplCopyWithImpl(
|
||||
_$PeriodTypeChangedImpl _value,
|
||||
$Res Function(_$PeriodTypeChangedImpl) _then,
|
||||
) : super(_value, _then);
|
||||
|
||||
/// Create a copy of ProfitSharingLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({Object? periodType = null}) {
|
||||
return _then(
|
||||
_$PeriodTypeChangedImpl(
|
||||
null == periodType
|
||||
? _value.periodType
|
||||
: periodType // ignore: cast_nullable_to_non_nullable
|
||||
as ProfitSharingPeriodType,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$PeriodTypeChangedImpl implements _PeriodTypeChanged {
|
||||
const _$PeriodTypeChangedImpl(this.periodType);
|
||||
|
||||
@override
|
||||
final ProfitSharingPeriodType periodType;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ProfitSharingLoaderEvent.periodTypeChanged(periodType: $periodType)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$PeriodTypeChangedImpl &&
|
||||
(identical(other.periodType, periodType) ||
|
||||
other.periodType == periodType));
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, periodType);
|
||||
|
||||
/// Create a copy of ProfitSharingLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$PeriodTypeChangedImplCopyWith<_$PeriodTypeChangedImpl> get copyWith =>
|
||||
__$$PeriodTypeChangedImplCopyWithImpl<_$PeriodTypeChangedImpl>(
|
||||
this,
|
||||
_$identity,
|
||||
);
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(DateTime dateFrom, DateTime dateTo)
|
||||
rangeDateChanged,
|
||||
required TResult Function(ProfitSharingPeriodType periodType)
|
||||
periodTypeChanged,
|
||||
required TResult Function() fetched,
|
||||
}) {
|
||||
return periodTypeChanged(periodType);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult? Function(ProfitSharingPeriodType periodType)? periodTypeChanged,
|
||||
TResult? Function()? fetched,
|
||||
}) {
|
||||
return periodTypeChanged?.call(periodType);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult Function(ProfitSharingPeriodType periodType)? periodTypeChanged,
|
||||
TResult Function()? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (periodTypeChanged != null) {
|
||||
return periodTypeChanged(periodType);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_RangeDateChanged value) rangeDateChanged,
|
||||
required TResult Function(_PeriodTypeChanged value) periodTypeChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
}) {
|
||||
return periodTypeChanged(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult? Function(_PeriodTypeChanged value)? periodTypeChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
}) {
|
||||
return periodTypeChanged?.call(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult Function(_PeriodTypeChanged value)? periodTypeChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (periodTypeChanged != null) {
|
||||
return periodTypeChanged(this);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _PeriodTypeChanged implements ProfitSharingLoaderEvent {
|
||||
const factory _PeriodTypeChanged(final ProfitSharingPeriodType periodType) =
|
||||
_$PeriodTypeChangedImpl;
|
||||
|
||||
ProfitSharingPeriodType get periodType;
|
||||
|
||||
/// Create a copy of ProfitSharingLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$PeriodTypeChangedImplCopyWith<_$PeriodTypeChangedImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$FetchedImplCopyWith<$Res> {
|
||||
factory _$$FetchedImplCopyWith(
|
||||
_$FetchedImpl value,
|
||||
$Res Function(_$FetchedImpl) then,
|
||||
) = __$$FetchedImplCopyWithImpl<$Res>;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$FetchedImplCopyWithImpl<$Res>
|
||||
extends _$ProfitSharingLoaderEventCopyWithImpl<$Res, _$FetchedImpl>
|
||||
implements _$$FetchedImplCopyWith<$Res> {
|
||||
__$$FetchedImplCopyWithImpl(
|
||||
_$FetchedImpl _value,
|
||||
$Res Function(_$FetchedImpl) _then,
|
||||
) : super(_value, _then);
|
||||
|
||||
/// Create a copy of ProfitSharingLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$FetchedImpl implements _Fetched {
|
||||
const _$FetchedImpl();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ProfitSharingLoaderEvent.fetched()';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType && other is _$FetchedImpl);
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(DateTime dateFrom, DateTime dateTo)
|
||||
rangeDateChanged,
|
||||
required TResult Function(ProfitSharingPeriodType periodType)
|
||||
periodTypeChanged,
|
||||
required TResult Function() fetched,
|
||||
}) {
|
||||
return fetched();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult? Function(ProfitSharingPeriodType periodType)? periodTypeChanged,
|
||||
TResult? Function()? fetched,
|
||||
}) {
|
||||
return fetched?.call();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult Function(ProfitSharingPeriodType periodType)? periodTypeChanged,
|
||||
TResult Function()? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (fetched != null) {
|
||||
return fetched();
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_RangeDateChanged value) rangeDateChanged,
|
||||
required TResult Function(_PeriodTypeChanged value) periodTypeChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
}) {
|
||||
return fetched(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult? Function(_PeriodTypeChanged value)? periodTypeChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
}) {
|
||||
return fetched?.call(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult Function(_PeriodTypeChanged value)? periodTypeChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (fetched != null) {
|
||||
return fetched(this);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _Fetched implements ProfitSharingLoaderEvent {
|
||||
const factory _Fetched() = _$FetchedImpl;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
mixin _$ProfitSharingLoaderState {
|
||||
ProfitSharing get profitSharing => throw _privateConstructorUsedError;
|
||||
Option<AnalyticFailure> get failureOption =>
|
||||
throw _privateConstructorUsedError;
|
||||
bool get isFetching => throw _privateConstructorUsedError;
|
||||
ProfitSharingPeriodType get periodType => throw _privateConstructorUsedError;
|
||||
DateTime get dateFrom => throw _privateConstructorUsedError;
|
||||
DateTime get dateTo => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of ProfitSharingLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$ProfitSharingLoaderStateCopyWith<ProfitSharingLoaderState> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class $ProfitSharingLoaderStateCopyWith<$Res> {
|
||||
factory $ProfitSharingLoaderStateCopyWith(
|
||||
ProfitSharingLoaderState value,
|
||||
$Res Function(ProfitSharingLoaderState) then,
|
||||
) = _$ProfitSharingLoaderStateCopyWithImpl<$Res, ProfitSharingLoaderState>;
|
||||
@useResult
|
||||
$Res call({
|
||||
ProfitSharing profitSharing,
|
||||
Option<AnalyticFailure> failureOption,
|
||||
bool isFetching,
|
||||
ProfitSharingPeriodType periodType,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
});
|
||||
|
||||
$ProfitSharingCopyWith<$Res> get profitSharing;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class _$ProfitSharingLoaderStateCopyWithImpl<
|
||||
$Res,
|
||||
$Val extends ProfitSharingLoaderState
|
||||
>
|
||||
implements $ProfitSharingLoaderStateCopyWith<$Res> {
|
||||
_$ProfitSharingLoaderStateCopyWithImpl(this._value, this._then);
|
||||
|
||||
// ignore: unused_field
|
||||
final $Val _value;
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of ProfitSharingLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? profitSharing = null,
|
||||
Object? failureOption = null,
|
||||
Object? isFetching = null,
|
||||
Object? periodType = null,
|
||||
Object? dateFrom = null,
|
||||
Object? dateTo = null,
|
||||
}) {
|
||||
return _then(
|
||||
_value.copyWith(
|
||||
profitSharing: null == profitSharing
|
||||
? _value.profitSharing
|
||||
: profitSharing // ignore: cast_nullable_to_non_nullable
|
||||
as ProfitSharing,
|
||||
failureOption: null == failureOption
|
||||
? _value.failureOption
|
||||
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<AnalyticFailure>,
|
||||
isFetching: null == isFetching
|
||||
? _value.isFetching
|
||||
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
periodType: null == periodType
|
||||
? _value.periodType
|
||||
: periodType // ignore: cast_nullable_to_non_nullable
|
||||
as ProfitSharingPeriodType,
|
||||
dateFrom: null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
dateTo: null == dateTo
|
||||
? _value.dateTo
|
||||
: dateTo // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
)
|
||||
as $Val,
|
||||
);
|
||||
}
|
||||
|
||||
/// Create a copy of ProfitSharingLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$ProfitSharingCopyWith<$Res> get profitSharing {
|
||||
return $ProfitSharingCopyWith<$Res>(_value.profitSharing, (value) {
|
||||
return _then(_value.copyWith(profitSharing: value) as $Val);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$ProfitSharingLoaderStateImplCopyWith<$Res>
|
||||
implements $ProfitSharingLoaderStateCopyWith<$Res> {
|
||||
factory _$$ProfitSharingLoaderStateImplCopyWith(
|
||||
_$ProfitSharingLoaderStateImpl value,
|
||||
$Res Function(_$ProfitSharingLoaderStateImpl) then,
|
||||
) = __$$ProfitSharingLoaderStateImplCopyWithImpl<$Res>;
|
||||
@override
|
||||
@useResult
|
||||
$Res call({
|
||||
ProfitSharing profitSharing,
|
||||
Option<AnalyticFailure> failureOption,
|
||||
bool isFetching,
|
||||
ProfitSharingPeriodType periodType,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
});
|
||||
|
||||
@override
|
||||
$ProfitSharingCopyWith<$Res> get profitSharing;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$ProfitSharingLoaderStateImplCopyWithImpl<$Res>
|
||||
extends
|
||||
_$ProfitSharingLoaderStateCopyWithImpl<
|
||||
$Res,
|
||||
_$ProfitSharingLoaderStateImpl
|
||||
>
|
||||
implements _$$ProfitSharingLoaderStateImplCopyWith<$Res> {
|
||||
__$$ProfitSharingLoaderStateImplCopyWithImpl(
|
||||
_$ProfitSharingLoaderStateImpl _value,
|
||||
$Res Function(_$ProfitSharingLoaderStateImpl) _then,
|
||||
) : super(_value, _then);
|
||||
|
||||
/// Create a copy of ProfitSharingLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? profitSharing = null,
|
||||
Object? failureOption = null,
|
||||
Object? isFetching = null,
|
||||
Object? periodType = null,
|
||||
Object? dateFrom = null,
|
||||
Object? dateTo = null,
|
||||
}) {
|
||||
return _then(
|
||||
_$ProfitSharingLoaderStateImpl(
|
||||
profitSharing: null == profitSharing
|
||||
? _value.profitSharing
|
||||
: profitSharing // ignore: cast_nullable_to_non_nullable
|
||||
as ProfitSharing,
|
||||
failureOption: null == failureOption
|
||||
? _value.failureOption
|
||||
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<AnalyticFailure>,
|
||||
isFetching: null == isFetching
|
||||
? _value.isFetching
|
||||
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
periodType: null == periodType
|
||||
? _value.periodType
|
||||
: periodType // ignore: cast_nullable_to_non_nullable
|
||||
as ProfitSharingPeriodType,
|
||||
dateFrom: null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
dateTo: null == dateTo
|
||||
? _value.dateTo
|
||||
: dateTo // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$ProfitSharingLoaderStateImpl extends _ProfitSharingLoaderState {
|
||||
const _$ProfitSharingLoaderStateImpl({
|
||||
required this.profitSharing,
|
||||
required this.failureOption,
|
||||
this.isFetching = false,
|
||||
this.periodType = ProfitSharingPeriodType.weekly,
|
||||
required this.dateFrom,
|
||||
required this.dateTo,
|
||||
}) : super._();
|
||||
|
||||
@override
|
||||
final ProfitSharing profitSharing;
|
||||
@override
|
||||
final Option<AnalyticFailure> failureOption;
|
||||
@override
|
||||
@JsonKey()
|
||||
final bool isFetching;
|
||||
@override
|
||||
@JsonKey()
|
||||
final ProfitSharingPeriodType periodType;
|
||||
@override
|
||||
final DateTime dateFrom;
|
||||
@override
|
||||
final DateTime dateTo;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ProfitSharingLoaderState(profitSharing: $profitSharing, failureOption: $failureOption, isFetching: $isFetching, periodType: $periodType, dateFrom: $dateFrom, dateTo: $dateTo)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$ProfitSharingLoaderStateImpl &&
|
||||
(identical(other.profitSharing, profitSharing) ||
|
||||
other.profitSharing == profitSharing) &&
|
||||
(identical(other.failureOption, failureOption) ||
|
||||
other.failureOption == failureOption) &&
|
||||
(identical(other.isFetching, isFetching) ||
|
||||
other.isFetching == isFetching) &&
|
||||
(identical(other.periodType, periodType) ||
|
||||
other.periodType == periodType) &&
|
||||
(identical(other.dateFrom, dateFrom) ||
|
||||
other.dateFrom == dateFrom) &&
|
||||
(identical(other.dateTo, dateTo) || other.dateTo == dateTo));
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType,
|
||||
profitSharing,
|
||||
failureOption,
|
||||
isFetching,
|
||||
periodType,
|
||||
dateFrom,
|
||||
dateTo,
|
||||
);
|
||||
|
||||
/// Create a copy of ProfitSharingLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$ProfitSharingLoaderStateImplCopyWith<_$ProfitSharingLoaderStateImpl>
|
||||
get copyWith =>
|
||||
__$$ProfitSharingLoaderStateImplCopyWithImpl<
|
||||
_$ProfitSharingLoaderStateImpl
|
||||
>(this, _$identity);
|
||||
}
|
||||
|
||||
abstract class _ProfitSharingLoaderState extends ProfitSharingLoaderState {
|
||||
const factory _ProfitSharingLoaderState({
|
||||
required final ProfitSharing profitSharing,
|
||||
required final Option<AnalyticFailure> failureOption,
|
||||
final bool isFetching,
|
||||
final ProfitSharingPeriodType periodType,
|
||||
required final DateTime dateFrom,
|
||||
required final DateTime dateTo,
|
||||
}) = _$ProfitSharingLoaderStateImpl;
|
||||
const _ProfitSharingLoaderState._() : super._();
|
||||
|
||||
@override
|
||||
ProfitSharing get profitSharing;
|
||||
@override
|
||||
Option<AnalyticFailure> get failureOption;
|
||||
@override
|
||||
bool get isFetching;
|
||||
@override
|
||||
ProfitSharingPeriodType get periodType;
|
||||
@override
|
||||
DateTime get dateFrom;
|
||||
@override
|
||||
DateTime get dateTo;
|
||||
|
||||
/// Create a copy of ProfitSharingLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$ProfitSharingLoaderStateImplCopyWith<_$ProfitSharingLoaderStateImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
part of 'profit_sharing_loader_bloc.dart';
|
||||
|
||||
@freezed
|
||||
class ProfitSharingLoaderEvent with _$ProfitSharingLoaderEvent {
|
||||
const factory ProfitSharingLoaderEvent.rangeDateChanged(
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
) = _RangeDateChanged;
|
||||
const factory ProfitSharingLoaderEvent.periodTypeChanged(
|
||||
ProfitSharingPeriodType periodType,
|
||||
) = _PeriodTypeChanged;
|
||||
const factory ProfitSharingLoaderEvent.fetched() = _Fetched;
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
part of 'profit_sharing_loader_bloc.dart';
|
||||
|
||||
/// Tampilan rincian bagi hasil: per minggu atau per bulan.
|
||||
enum ProfitSharingPeriodType { weekly, monthly }
|
||||
|
||||
@freezed
|
||||
class ProfitSharingLoaderState with _$ProfitSharingLoaderState {
|
||||
const ProfitSharingLoaderState._();
|
||||
|
||||
const factory ProfitSharingLoaderState({
|
||||
required ProfitSharing profitSharing,
|
||||
required Option<AnalyticFailure> failureOption,
|
||||
@Default(false) bool isFetching,
|
||||
@Default(ProfitSharingPeriodType.weekly) ProfitSharingPeriodType periodType,
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
}) = _ProfitSharingLoaderState;
|
||||
|
||||
factory ProfitSharingLoaderState.initial() {
|
||||
final now = DateTime.now();
|
||||
return ProfitSharingLoaderState(
|
||||
profitSharing: ProfitSharing.empty(),
|
||||
failureOption: none(),
|
||||
dateFrom: DateTime(now.year, now.month, 1),
|
||||
dateTo: DateTime(now.year, now.month + 1, 0),
|
||||
);
|
||||
}
|
||||
|
||||
/// Baris periode sesuai tab yang dipilih, periode kosong disembunyikan.
|
||||
List<ProfitSharingPeriod> get periods {
|
||||
final budget = profitSharing.budget;
|
||||
final list = periodType == ProfitSharingPeriodType.weekly
|
||||
? budget.weekly
|
||||
: budget.monthly;
|
||||
return list.where((e) => e.hasRevenue).toList();
|
||||
}
|
||||
}
|
||||
@@ -41,6 +41,7 @@ class PurchasingAnalyticLoaderBloc
|
||||
dateFrom: state.dateFrom,
|
||||
dateTo: state.dateTo,
|
||||
outletId: state.outletId,
|
||||
groupBy: state.groupBy,
|
||||
);
|
||||
|
||||
final newState = result.fold(
|
||||
|
||||
@@ -529,6 +529,7 @@ mixin _$PurchasingAnalyticLoaderState {
|
||||
DateTime get dateFrom => throw _privateConstructorUsedError;
|
||||
DateTime get dateTo => throw _privateConstructorUsedError;
|
||||
String? get outletId => throw _privateConstructorUsedError;
|
||||
String get groupBy => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of PurchasingAnalyticLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@@ -555,6 +556,7 @@ abstract class $PurchasingAnalyticLoaderStateCopyWith<$Res> {
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
String? outletId,
|
||||
String groupBy,
|
||||
});
|
||||
|
||||
$PurchasingAnalyticCopyWith<$Res> get purchasing;
|
||||
@@ -584,6 +586,7 @@ class _$PurchasingAnalyticLoaderStateCopyWithImpl<
|
||||
Object? dateFrom = null,
|
||||
Object? dateTo = null,
|
||||
Object? outletId = freezed,
|
||||
Object? groupBy = null,
|
||||
}) {
|
||||
return _then(
|
||||
_value.copyWith(
|
||||
@@ -611,6 +614,10 @@ class _$PurchasingAnalyticLoaderStateCopyWithImpl<
|
||||
? _value.outletId
|
||||
: outletId // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
groupBy: null == groupBy
|
||||
? _value.groupBy
|
||||
: groupBy // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
)
|
||||
as $Val,
|
||||
);
|
||||
@@ -643,6 +650,7 @@ abstract class _$$PurchasingAnalyticLoaderStateImplCopyWith<$Res>
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
String? outletId,
|
||||
String groupBy,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -673,6 +681,7 @@ class __$$PurchasingAnalyticLoaderStateImplCopyWithImpl<$Res>
|
||||
Object? dateFrom = null,
|
||||
Object? dateTo = null,
|
||||
Object? outletId = freezed,
|
||||
Object? groupBy = null,
|
||||
}) {
|
||||
return _then(
|
||||
_$PurchasingAnalyticLoaderStateImpl(
|
||||
@@ -700,6 +709,10 @@ class __$$PurchasingAnalyticLoaderStateImplCopyWithImpl<$Res>
|
||||
? _value.outletId
|
||||
: outletId // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
groupBy: null == groupBy
|
||||
? _value.groupBy
|
||||
: groupBy // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -716,6 +729,7 @@ class _$PurchasingAnalyticLoaderStateImpl
|
||||
required this.dateFrom,
|
||||
required this.dateTo,
|
||||
this.outletId,
|
||||
this.groupBy = 'day',
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -731,10 +745,13 @@ class _$PurchasingAnalyticLoaderStateImpl
|
||||
final DateTime dateTo;
|
||||
@override
|
||||
final String? outletId;
|
||||
@override
|
||||
@JsonKey()
|
||||
final String groupBy;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'PurchasingAnalyticLoaderState(purchasing: $purchasing, failureOptionPurchasing: $failureOptionPurchasing, isFetching: $isFetching, dateFrom: $dateFrom, dateTo: $dateTo, outletId: $outletId)';
|
||||
return 'PurchasingAnalyticLoaderState(purchasing: $purchasing, failureOptionPurchasing: $failureOptionPurchasing, isFetching: $isFetching, dateFrom: $dateFrom, dateTo: $dateTo, outletId: $outletId, groupBy: $groupBy)';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -755,7 +772,8 @@ class _$PurchasingAnalyticLoaderStateImpl
|
||||
other.dateFrom == dateFrom) &&
|
||||
(identical(other.dateTo, dateTo) || other.dateTo == dateTo) &&
|
||||
(identical(other.outletId, outletId) ||
|
||||
other.outletId == outletId));
|
||||
other.outletId == outletId) &&
|
||||
(identical(other.groupBy, groupBy) || other.groupBy == groupBy));
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -767,6 +785,7 @@ class _$PurchasingAnalyticLoaderStateImpl
|
||||
dateFrom,
|
||||
dateTo,
|
||||
outletId,
|
||||
groupBy,
|
||||
);
|
||||
|
||||
/// Create a copy of PurchasingAnalyticLoaderState
|
||||
@@ -792,6 +811,7 @@ abstract class _PurchasingAnalyticLoaderState
|
||||
required final DateTime dateFrom,
|
||||
required final DateTime dateTo,
|
||||
final String? outletId,
|
||||
final String groupBy,
|
||||
}) = _$PurchasingAnalyticLoaderStateImpl;
|
||||
|
||||
@override
|
||||
@@ -806,6 +826,8 @@ abstract class _PurchasingAnalyticLoaderState
|
||||
DateTime get dateTo;
|
||||
@override
|
||||
String? get outletId;
|
||||
@override
|
||||
String get groupBy;
|
||||
|
||||
/// Create a copy of PurchasingAnalyticLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
|
||||
@@ -9,6 +9,7 @@ class PurchasingAnalyticLoaderState with _$PurchasingAnalyticLoaderState {
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
String? outletId,
|
||||
@Default('day') String groupBy,
|
||||
}) = _PurchasingAnalyticLoaderState;
|
||||
|
||||
factory PurchasingAnalyticLoaderState.initial() =>
|
||||
|
||||
@@ -13,7 +13,7 @@ class SalesLoaderState with _$SalesLoaderState {
|
||||
factory SalesLoaderState.initial() => SalesLoaderState(
|
||||
sales: SalesAnalytic.empty(),
|
||||
failureOptionSales: none(),
|
||||
dateFrom: DateTime.now().subtract(const Duration(days: 30)),
|
||||
dateFrom: DateTime.now(),
|
||||
dateTo: DateTime.now(),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -46,6 +46,31 @@ class OrderLoaderBloc extends Bloc<OrderLoaderEvent, OrderLoaderState> {
|
||||
|
||||
emit(newState);
|
||||
},
|
||||
summaryFetched: (e) async {
|
||||
emit(state.copyWith(isFetchingSummary: true));
|
||||
|
||||
final results = await Future.wait([
|
||||
_repository.getTotalCount(
|
||||
outletId: state.outletId,
|
||||
dateFrom: state.dateFrom,
|
||||
dateTo: state.dateTo,
|
||||
),
|
||||
_repository.getTotalCount(
|
||||
status: 'pending',
|
||||
outletId: state.outletId,
|
||||
dateFrom: state.dateFrom,
|
||||
dateTo: state.dateTo,
|
||||
),
|
||||
]);
|
||||
|
||||
emit(
|
||||
state.copyWith(
|
||||
isFetchingSummary: false,
|
||||
totalOrder: results[0].getOrElse(() => 0),
|
||||
totalPendingOrder: results[1].getOrElse(() => 0),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ mixin _$OrderLoaderEvent {
|
||||
required TResult Function(String search) searchChanged,
|
||||
required TResult Function(String? outletId) outletChanged,
|
||||
required TResult Function(bool isRefresh) fetched,
|
||||
required TResult Function() summaryFetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
@@ -33,6 +34,7 @@ mixin _$OrderLoaderEvent {
|
||||
TResult? Function(String search)? searchChanged,
|
||||
TResult? Function(String? outletId)? outletChanged,
|
||||
TResult? Function(bool isRefresh)? fetched,
|
||||
TResult? Function()? summaryFetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
@@ -41,6 +43,7 @@ mixin _$OrderLoaderEvent {
|
||||
TResult Function(String search)? searchChanged,
|
||||
TResult Function(String? outletId)? outletChanged,
|
||||
TResult Function(bool isRefresh)? fetched,
|
||||
TResult Function()? summaryFetched,
|
||||
required TResult orElse(),
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
@@ -50,6 +53,7 @@ mixin _$OrderLoaderEvent {
|
||||
required TResult Function(_SearchChanged value) searchChanged,
|
||||
required TResult Function(_OutletChanged value) outletChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
required TResult Function(_SummaryFetched value) summaryFetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
@@ -58,6 +62,7 @@ mixin _$OrderLoaderEvent {
|
||||
TResult? Function(_SearchChanged value)? searchChanged,
|
||||
TResult? Function(_OutletChanged value)? outletChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
TResult? Function(_SummaryFetched value)? summaryFetched,
|
||||
}) => throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
@@ -66,6 +71,7 @@ mixin _$OrderLoaderEvent {
|
||||
TResult Function(_SearchChanged value)? searchChanged,
|
||||
TResult Function(_OutletChanged value)? outletChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
TResult Function(_SummaryFetched value)? summaryFetched,
|
||||
required TResult orElse(),
|
||||
}) => throw _privateConstructorUsedError;
|
||||
}
|
||||
@@ -179,6 +185,7 @@ class _$RangeDateChangedImpl implements _RangeDateChanged {
|
||||
required TResult Function(String search) searchChanged,
|
||||
required TResult Function(String? outletId) outletChanged,
|
||||
required TResult Function(bool isRefresh) fetched,
|
||||
required TResult Function() summaryFetched,
|
||||
}) {
|
||||
return rangeDateChanged(dateFrom, dateTo);
|
||||
}
|
||||
@@ -191,6 +198,7 @@ class _$RangeDateChangedImpl implements _RangeDateChanged {
|
||||
TResult? Function(String search)? searchChanged,
|
||||
TResult? Function(String? outletId)? outletChanged,
|
||||
TResult? Function(bool isRefresh)? fetched,
|
||||
TResult? Function()? summaryFetched,
|
||||
}) {
|
||||
return rangeDateChanged?.call(dateFrom, dateTo);
|
||||
}
|
||||
@@ -203,6 +211,7 @@ class _$RangeDateChangedImpl implements _RangeDateChanged {
|
||||
TResult Function(String search)? searchChanged,
|
||||
TResult Function(String? outletId)? outletChanged,
|
||||
TResult Function(bool isRefresh)? fetched,
|
||||
TResult Function()? summaryFetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (rangeDateChanged != null) {
|
||||
@@ -219,6 +228,7 @@ class _$RangeDateChangedImpl implements _RangeDateChanged {
|
||||
required TResult Function(_SearchChanged value) searchChanged,
|
||||
required TResult Function(_OutletChanged value) outletChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
required TResult Function(_SummaryFetched value) summaryFetched,
|
||||
}) {
|
||||
return rangeDateChanged(this);
|
||||
}
|
||||
@@ -231,6 +241,7 @@ class _$RangeDateChangedImpl implements _RangeDateChanged {
|
||||
TResult? Function(_SearchChanged value)? searchChanged,
|
||||
TResult? Function(_OutletChanged value)? outletChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
TResult? Function(_SummaryFetched value)? summaryFetched,
|
||||
}) {
|
||||
return rangeDateChanged?.call(this);
|
||||
}
|
||||
@@ -243,6 +254,7 @@ class _$RangeDateChangedImpl implements _RangeDateChanged {
|
||||
TResult Function(_SearchChanged value)? searchChanged,
|
||||
TResult Function(_OutletChanged value)? outletChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
TResult Function(_SummaryFetched value)? summaryFetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (rangeDateChanged != null) {
|
||||
@@ -344,6 +356,7 @@ class _$StatusChangedImpl implements _StatusChanged {
|
||||
required TResult Function(String search) searchChanged,
|
||||
required TResult Function(String? outletId) outletChanged,
|
||||
required TResult Function(bool isRefresh) fetched,
|
||||
required TResult Function() summaryFetched,
|
||||
}) {
|
||||
return statusChanged(status);
|
||||
}
|
||||
@@ -356,6 +369,7 @@ class _$StatusChangedImpl implements _StatusChanged {
|
||||
TResult? Function(String search)? searchChanged,
|
||||
TResult? Function(String? outletId)? outletChanged,
|
||||
TResult? Function(bool isRefresh)? fetched,
|
||||
TResult? Function()? summaryFetched,
|
||||
}) {
|
||||
return statusChanged?.call(status);
|
||||
}
|
||||
@@ -368,6 +382,7 @@ class _$StatusChangedImpl implements _StatusChanged {
|
||||
TResult Function(String search)? searchChanged,
|
||||
TResult Function(String? outletId)? outletChanged,
|
||||
TResult Function(bool isRefresh)? fetched,
|
||||
TResult Function()? summaryFetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (statusChanged != null) {
|
||||
@@ -384,6 +399,7 @@ class _$StatusChangedImpl implements _StatusChanged {
|
||||
required TResult Function(_SearchChanged value) searchChanged,
|
||||
required TResult Function(_OutletChanged value) outletChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
required TResult Function(_SummaryFetched value) summaryFetched,
|
||||
}) {
|
||||
return statusChanged(this);
|
||||
}
|
||||
@@ -396,6 +412,7 @@ class _$StatusChangedImpl implements _StatusChanged {
|
||||
TResult? Function(_SearchChanged value)? searchChanged,
|
||||
TResult? Function(_OutletChanged value)? outletChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
TResult? Function(_SummaryFetched value)? summaryFetched,
|
||||
}) {
|
||||
return statusChanged?.call(this);
|
||||
}
|
||||
@@ -408,6 +425,7 @@ class _$StatusChangedImpl implements _StatusChanged {
|
||||
TResult Function(_SearchChanged value)? searchChanged,
|
||||
TResult Function(_OutletChanged value)? outletChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
TResult Function(_SummaryFetched value)? summaryFetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (statusChanged != null) {
|
||||
@@ -505,6 +523,7 @@ class _$SearchChangedImpl implements _SearchChanged {
|
||||
required TResult Function(String search) searchChanged,
|
||||
required TResult Function(String? outletId) outletChanged,
|
||||
required TResult Function(bool isRefresh) fetched,
|
||||
required TResult Function() summaryFetched,
|
||||
}) {
|
||||
return searchChanged(search);
|
||||
}
|
||||
@@ -517,6 +536,7 @@ class _$SearchChangedImpl implements _SearchChanged {
|
||||
TResult? Function(String search)? searchChanged,
|
||||
TResult? Function(String? outletId)? outletChanged,
|
||||
TResult? Function(bool isRefresh)? fetched,
|
||||
TResult? Function()? summaryFetched,
|
||||
}) {
|
||||
return searchChanged?.call(search);
|
||||
}
|
||||
@@ -529,6 +549,7 @@ class _$SearchChangedImpl implements _SearchChanged {
|
||||
TResult Function(String search)? searchChanged,
|
||||
TResult Function(String? outletId)? outletChanged,
|
||||
TResult Function(bool isRefresh)? fetched,
|
||||
TResult Function()? summaryFetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (searchChanged != null) {
|
||||
@@ -545,6 +566,7 @@ class _$SearchChangedImpl implements _SearchChanged {
|
||||
required TResult Function(_SearchChanged value) searchChanged,
|
||||
required TResult Function(_OutletChanged value) outletChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
required TResult Function(_SummaryFetched value) summaryFetched,
|
||||
}) {
|
||||
return searchChanged(this);
|
||||
}
|
||||
@@ -557,6 +579,7 @@ class _$SearchChangedImpl implements _SearchChanged {
|
||||
TResult? Function(_SearchChanged value)? searchChanged,
|
||||
TResult? Function(_OutletChanged value)? outletChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
TResult? Function(_SummaryFetched value)? summaryFetched,
|
||||
}) {
|
||||
return searchChanged?.call(this);
|
||||
}
|
||||
@@ -569,6 +592,7 @@ class _$SearchChangedImpl implements _SearchChanged {
|
||||
TResult Function(_SearchChanged value)? searchChanged,
|
||||
TResult Function(_OutletChanged value)? outletChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
TResult Function(_SummaryFetched value)? summaryFetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (searchChanged != null) {
|
||||
@@ -667,6 +691,7 @@ class _$OutletChangedImpl implements _OutletChanged {
|
||||
required TResult Function(String search) searchChanged,
|
||||
required TResult Function(String? outletId) outletChanged,
|
||||
required TResult Function(bool isRefresh) fetched,
|
||||
required TResult Function() summaryFetched,
|
||||
}) {
|
||||
return outletChanged(outletId);
|
||||
}
|
||||
@@ -679,6 +704,7 @@ class _$OutletChangedImpl implements _OutletChanged {
|
||||
TResult? Function(String search)? searchChanged,
|
||||
TResult? Function(String? outletId)? outletChanged,
|
||||
TResult? Function(bool isRefresh)? fetched,
|
||||
TResult? Function()? summaryFetched,
|
||||
}) {
|
||||
return outletChanged?.call(outletId);
|
||||
}
|
||||
@@ -691,6 +717,7 @@ class _$OutletChangedImpl implements _OutletChanged {
|
||||
TResult Function(String search)? searchChanged,
|
||||
TResult Function(String? outletId)? outletChanged,
|
||||
TResult Function(bool isRefresh)? fetched,
|
||||
TResult Function()? summaryFetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (outletChanged != null) {
|
||||
@@ -707,6 +734,7 @@ class _$OutletChangedImpl implements _OutletChanged {
|
||||
required TResult Function(_SearchChanged value) searchChanged,
|
||||
required TResult Function(_OutletChanged value) outletChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
required TResult Function(_SummaryFetched value) summaryFetched,
|
||||
}) {
|
||||
return outletChanged(this);
|
||||
}
|
||||
@@ -719,6 +747,7 @@ class _$OutletChangedImpl implements _OutletChanged {
|
||||
TResult? Function(_SearchChanged value)? searchChanged,
|
||||
TResult? Function(_OutletChanged value)? outletChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
TResult? Function(_SummaryFetched value)? summaryFetched,
|
||||
}) {
|
||||
return outletChanged?.call(this);
|
||||
}
|
||||
@@ -731,6 +760,7 @@ class _$OutletChangedImpl implements _OutletChanged {
|
||||
TResult Function(_SearchChanged value)? searchChanged,
|
||||
TResult Function(_OutletChanged value)? outletChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
TResult Function(_SummaryFetched value)? summaryFetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (outletChanged != null) {
|
||||
@@ -830,6 +860,7 @@ class _$FetchedImpl implements _Fetched {
|
||||
required TResult Function(String search) searchChanged,
|
||||
required TResult Function(String? outletId) outletChanged,
|
||||
required TResult Function(bool isRefresh) fetched,
|
||||
required TResult Function() summaryFetched,
|
||||
}) {
|
||||
return fetched(isRefresh);
|
||||
}
|
||||
@@ -842,6 +873,7 @@ class _$FetchedImpl implements _Fetched {
|
||||
TResult? Function(String search)? searchChanged,
|
||||
TResult? Function(String? outletId)? outletChanged,
|
||||
TResult? Function(bool isRefresh)? fetched,
|
||||
TResult? Function()? summaryFetched,
|
||||
}) {
|
||||
return fetched?.call(isRefresh);
|
||||
}
|
||||
@@ -854,6 +886,7 @@ class _$FetchedImpl implements _Fetched {
|
||||
TResult Function(String search)? searchChanged,
|
||||
TResult Function(String? outletId)? outletChanged,
|
||||
TResult Function(bool isRefresh)? fetched,
|
||||
TResult Function()? summaryFetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (fetched != null) {
|
||||
@@ -870,6 +903,7 @@ class _$FetchedImpl implements _Fetched {
|
||||
required TResult Function(_SearchChanged value) searchChanged,
|
||||
required TResult Function(_OutletChanged value) outletChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
required TResult Function(_SummaryFetched value) summaryFetched,
|
||||
}) {
|
||||
return fetched(this);
|
||||
}
|
||||
@@ -882,6 +916,7 @@ class _$FetchedImpl implements _Fetched {
|
||||
TResult? Function(_SearchChanged value)? searchChanged,
|
||||
TResult? Function(_OutletChanged value)? outletChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
TResult? Function(_SummaryFetched value)? summaryFetched,
|
||||
}) {
|
||||
return fetched?.call(this);
|
||||
}
|
||||
@@ -894,6 +929,7 @@ class _$FetchedImpl implements _Fetched {
|
||||
TResult Function(_SearchChanged value)? searchChanged,
|
||||
TResult Function(_OutletChanged value)? outletChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
TResult Function(_SummaryFetched value)? summaryFetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (fetched != null) {
|
||||
@@ -915,6 +951,138 @@ abstract class _Fetched implements OrderLoaderEvent {
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$SummaryFetchedImplCopyWith<$Res> {
|
||||
factory _$$SummaryFetchedImplCopyWith(
|
||||
_$SummaryFetchedImpl value,
|
||||
$Res Function(_$SummaryFetchedImpl) then,
|
||||
) = __$$SummaryFetchedImplCopyWithImpl<$Res>;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$SummaryFetchedImplCopyWithImpl<$Res>
|
||||
extends _$OrderLoaderEventCopyWithImpl<$Res, _$SummaryFetchedImpl>
|
||||
implements _$$SummaryFetchedImplCopyWith<$Res> {
|
||||
__$$SummaryFetchedImplCopyWithImpl(
|
||||
_$SummaryFetchedImpl _value,
|
||||
$Res Function(_$SummaryFetchedImpl) _then,
|
||||
) : super(_value, _then);
|
||||
|
||||
/// Create a copy of OrderLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$SummaryFetchedImpl implements _SummaryFetched {
|
||||
const _$SummaryFetchedImpl();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OrderLoaderEvent.summaryFetched()';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType && other is _$SummaryFetchedImpl);
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function(DateTime dateFrom, DateTime dateTo)
|
||||
rangeDateChanged,
|
||||
required TResult Function(String status) statusChanged,
|
||||
required TResult Function(String search) searchChanged,
|
||||
required TResult Function(String? outletId) outletChanged,
|
||||
required TResult Function(bool isRefresh) fetched,
|
||||
required TResult Function() summaryFetched,
|
||||
}) {
|
||||
return summaryFetched();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult? Function(String status)? statusChanged,
|
||||
TResult? Function(String search)? searchChanged,
|
||||
TResult? Function(String? outletId)? outletChanged,
|
||||
TResult? Function(bool isRefresh)? fetched,
|
||||
TResult? Function()? summaryFetched,
|
||||
}) {
|
||||
return summaryFetched?.call();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function(DateTime dateFrom, DateTime dateTo)? rangeDateChanged,
|
||||
TResult Function(String status)? statusChanged,
|
||||
TResult Function(String search)? searchChanged,
|
||||
TResult Function(String? outletId)? outletChanged,
|
||||
TResult Function(bool isRefresh)? fetched,
|
||||
TResult Function()? summaryFetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (summaryFetched != null) {
|
||||
return summaryFetched();
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(_RangeDateChanged value) rangeDateChanged,
|
||||
required TResult Function(_StatusChanged value) statusChanged,
|
||||
required TResult Function(_SearchChanged value) searchChanged,
|
||||
required TResult Function(_OutletChanged value) outletChanged,
|
||||
required TResult Function(_Fetched value) fetched,
|
||||
required TResult Function(_SummaryFetched value) summaryFetched,
|
||||
}) {
|
||||
return summaryFetched(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult? Function(_StatusChanged value)? statusChanged,
|
||||
TResult? Function(_SearchChanged value)? searchChanged,
|
||||
TResult? Function(_OutletChanged value)? outletChanged,
|
||||
TResult? Function(_Fetched value)? fetched,
|
||||
TResult? Function(_SummaryFetched value)? summaryFetched,
|
||||
}) {
|
||||
return summaryFetched?.call(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(_RangeDateChanged value)? rangeDateChanged,
|
||||
TResult Function(_StatusChanged value)? statusChanged,
|
||||
TResult Function(_SearchChanged value)? searchChanged,
|
||||
TResult Function(_OutletChanged value)? outletChanged,
|
||||
TResult Function(_Fetched value)? fetched,
|
||||
TResult Function(_SummaryFetched value)? summaryFetched,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (summaryFetched != null) {
|
||||
return summaryFetched(this);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _SummaryFetched implements OrderLoaderEvent {
|
||||
const factory _SummaryFetched() = _$SummaryFetchedImpl;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
mixin _$OrderLoaderState {
|
||||
List<Order> get orders => throw _privateConstructorUsedError;
|
||||
@@ -926,6 +1094,9 @@ mixin _$OrderLoaderState {
|
||||
bool get isFetching => throw _privateConstructorUsedError;
|
||||
bool get hasReachedMax => throw _privateConstructorUsedError;
|
||||
int get page => throw _privateConstructorUsedError;
|
||||
int get totalOrder => throw _privateConstructorUsedError;
|
||||
int get totalPendingOrder => throw _privateConstructorUsedError;
|
||||
bool get isFetchingSummary => throw _privateConstructorUsedError;
|
||||
DateTime get dateFrom => throw _privateConstructorUsedError;
|
||||
DateTime get dateTo => throw _privateConstructorUsedError;
|
||||
|
||||
@@ -952,6 +1123,9 @@ abstract class $OrderLoaderStateCopyWith<$Res> {
|
||||
bool isFetching,
|
||||
bool hasReachedMax,
|
||||
int page,
|
||||
int totalOrder,
|
||||
int totalPendingOrder,
|
||||
bool isFetchingSummary,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
});
|
||||
@@ -980,6 +1154,9 @@ class _$OrderLoaderStateCopyWithImpl<$Res, $Val extends OrderLoaderState>
|
||||
Object? isFetching = null,
|
||||
Object? hasReachedMax = null,
|
||||
Object? page = null,
|
||||
Object? totalOrder = null,
|
||||
Object? totalPendingOrder = null,
|
||||
Object? isFetchingSummary = null,
|
||||
Object? dateFrom = null,
|
||||
Object? dateTo = null,
|
||||
}) {
|
||||
@@ -1017,6 +1194,18 @@ class _$OrderLoaderStateCopyWithImpl<$Res, $Val extends OrderLoaderState>
|
||||
? _value.page
|
||||
: page // ignore: cast_nullable_to_non_nullable
|
||||
as int,
|
||||
totalOrder: null == totalOrder
|
||||
? _value.totalOrder
|
||||
: totalOrder // ignore: cast_nullable_to_non_nullable
|
||||
as int,
|
||||
totalPendingOrder: null == totalPendingOrder
|
||||
? _value.totalPendingOrder
|
||||
: totalPendingOrder // ignore: cast_nullable_to_non_nullable
|
||||
as int,
|
||||
isFetchingSummary: null == isFetchingSummary
|
||||
? _value.isFetchingSummary
|
||||
: isFetchingSummary // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
dateFrom: null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
@@ -1049,6 +1238,9 @@ abstract class _$$OrderLoaderStateImplCopyWith<$Res>
|
||||
bool isFetching,
|
||||
bool hasReachedMax,
|
||||
int page,
|
||||
int totalOrder,
|
||||
int totalPendingOrder,
|
||||
bool isFetchingSummary,
|
||||
DateTime dateFrom,
|
||||
DateTime dateTo,
|
||||
});
|
||||
@@ -1076,6 +1268,9 @@ class __$$OrderLoaderStateImplCopyWithImpl<$Res>
|
||||
Object? isFetching = null,
|
||||
Object? hasReachedMax = null,
|
||||
Object? page = null,
|
||||
Object? totalOrder = null,
|
||||
Object? totalPendingOrder = null,
|
||||
Object? isFetchingSummary = null,
|
||||
Object? dateFrom = null,
|
||||
Object? dateTo = null,
|
||||
}) {
|
||||
@@ -1113,6 +1308,18 @@ class __$$OrderLoaderStateImplCopyWithImpl<$Res>
|
||||
? _value.page
|
||||
: page // ignore: cast_nullable_to_non_nullable
|
||||
as int,
|
||||
totalOrder: null == totalOrder
|
||||
? _value.totalOrder
|
||||
: totalOrder // ignore: cast_nullable_to_non_nullable
|
||||
as int,
|
||||
totalPendingOrder: null == totalPendingOrder
|
||||
? _value.totalPendingOrder
|
||||
: totalPendingOrder // ignore: cast_nullable_to_non_nullable
|
||||
as int,
|
||||
isFetchingSummary: null == isFetchingSummary
|
||||
? _value.isFetchingSummary
|
||||
: isFetchingSummary // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
dateFrom: null == dateFrom
|
||||
? _value.dateFrom
|
||||
: dateFrom // ignore: cast_nullable_to_non_nullable
|
||||
@@ -1138,6 +1345,9 @@ class _$OrderLoaderStateImpl implements _OrderLoaderState {
|
||||
this.isFetching = false,
|
||||
this.hasReachedMax = false,
|
||||
this.page = 1,
|
||||
this.totalOrder = 0,
|
||||
this.totalPendingOrder = 0,
|
||||
this.isFetchingSummary = false,
|
||||
required this.dateFrom,
|
||||
required this.dateTo,
|
||||
}) : _orders = orders;
|
||||
@@ -1168,13 +1378,22 @@ class _$OrderLoaderStateImpl implements _OrderLoaderState {
|
||||
@JsonKey()
|
||||
final int page;
|
||||
@override
|
||||
@JsonKey()
|
||||
final int totalOrder;
|
||||
@override
|
||||
@JsonKey()
|
||||
final int totalPendingOrder;
|
||||
@override
|
||||
@JsonKey()
|
||||
final bool isFetchingSummary;
|
||||
@override
|
||||
final DateTime dateFrom;
|
||||
@override
|
||||
final DateTime dateTo;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OrderLoaderState(orders: $orders, failureOptionOrder: $failureOptionOrder, status: $status, search: $search, outletId: $outletId, isFetching: $isFetching, hasReachedMax: $hasReachedMax, page: $page, dateFrom: $dateFrom, dateTo: $dateTo)';
|
||||
return 'OrderLoaderState(orders: $orders, failureOptionOrder: $failureOptionOrder, status: $status, search: $search, outletId: $outletId, isFetching: $isFetching, hasReachedMax: $hasReachedMax, page: $page, totalOrder: $totalOrder, totalPendingOrder: $totalPendingOrder, isFetchingSummary: $isFetchingSummary, dateFrom: $dateFrom, dateTo: $dateTo)';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -1194,6 +1413,12 @@ class _$OrderLoaderStateImpl implements _OrderLoaderState {
|
||||
(identical(other.hasReachedMax, hasReachedMax) ||
|
||||
other.hasReachedMax == hasReachedMax) &&
|
||||
(identical(other.page, page) || other.page == page) &&
|
||||
(identical(other.totalOrder, totalOrder) ||
|
||||
other.totalOrder == totalOrder) &&
|
||||
(identical(other.totalPendingOrder, totalPendingOrder) ||
|
||||
other.totalPendingOrder == totalPendingOrder) &&
|
||||
(identical(other.isFetchingSummary, isFetchingSummary) ||
|
||||
other.isFetchingSummary == isFetchingSummary) &&
|
||||
(identical(other.dateFrom, dateFrom) ||
|
||||
other.dateFrom == dateFrom) &&
|
||||
(identical(other.dateTo, dateTo) || other.dateTo == dateTo));
|
||||
@@ -1210,6 +1435,9 @@ class _$OrderLoaderStateImpl implements _OrderLoaderState {
|
||||
isFetching,
|
||||
hasReachedMax,
|
||||
page,
|
||||
totalOrder,
|
||||
totalPendingOrder,
|
||||
isFetchingSummary,
|
||||
dateFrom,
|
||||
dateTo,
|
||||
);
|
||||
@@ -1236,6 +1464,9 @@ abstract class _OrderLoaderState implements OrderLoaderState {
|
||||
final bool isFetching,
|
||||
final bool hasReachedMax,
|
||||
final int page,
|
||||
final int totalOrder,
|
||||
final int totalPendingOrder,
|
||||
final bool isFetchingSummary,
|
||||
required final DateTime dateFrom,
|
||||
required final DateTime dateTo,
|
||||
}) = _$OrderLoaderStateImpl;
|
||||
@@ -1257,6 +1488,12 @@ abstract class _OrderLoaderState implements OrderLoaderState {
|
||||
@override
|
||||
int get page;
|
||||
@override
|
||||
int get totalOrder;
|
||||
@override
|
||||
int get totalPendingOrder;
|
||||
@override
|
||||
bool get isFetchingSummary;
|
||||
@override
|
||||
DateTime get dateFrom;
|
||||
@override
|
||||
DateTime get dateTo;
|
||||
|
||||
@@ -12,4 +12,5 @@ class OrderLoaderEvent with _$OrderLoaderEvent {
|
||||
_OutletChanged;
|
||||
const factory OrderLoaderEvent.fetched({@Default(false) bool isRefresh}) =
|
||||
_Fetched;
|
||||
const factory OrderLoaderEvent.summaryFetched() = _SummaryFetched;
|
||||
}
|
||||
|
||||
@@ -11,6 +11,9 @@ class OrderLoaderState with _$OrderLoaderState {
|
||||
@Default(false) bool isFetching,
|
||||
@Default(false) bool hasReachedMax,
|
||||
@Default(1) int page,
|
||||
@Default(0) int totalOrder,
|
||||
@Default(0) int totalPendingOrder,
|
||||
@Default(false) bool isFetchingSummary,
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
}) = _OrderLoaderState;
|
||||
@@ -20,6 +23,6 @@ class OrderLoaderState with _$OrderLoaderState {
|
||||
failureOptionOrder: none(),
|
||||
dateFrom: DateTime.now(),
|
||||
dateTo: DateTime.now(),
|
||||
status: 'all',
|
||||
status: 'pending',
|
||||
);
|
||||
}
|
||||
|
||||
@@ -22,14 +22,29 @@ class SelectedOutletBloc
|
||||
Future<void> _onSelectedOutletEvent(
|
||||
SelectedOutletEvent event,
|
||||
Emitter<SelectedOutletState> emit,
|
||||
) {
|
||||
) {
|
||||
return event.map(
|
||||
loaded: (e) async {
|
||||
final savedId = _localDataProvider.getSelectedOutletId();
|
||||
emit(state.copyWith(selectedOutletId: savedId));
|
||||
final savedName = _localDataProvider.getSelectedOutletName();
|
||||
|
||||
if (savedId != null && savedName != null) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
selectedOutletId: savedId,
|
||||
selectedOutlet: Outlet.empty().copyWith(
|
||||
id: savedId,
|
||||
name: savedName,
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
emit(state.copyWith(selectedOutletId: savedId));
|
||||
}
|
||||
},
|
||||
selected: (e) async {
|
||||
await _localDataProvider.saveSelectedOutletId(e.outlet.id);
|
||||
await _localDataProvider.saveSelectedOutletName(e.outlet.name);
|
||||
emit(
|
||||
state.copyWith(
|
||||
selectedOutlet: e.outlet,
|
||||
|
||||
@@ -3,4 +3,5 @@ class LocalStorageKey {
|
||||
static const String token = 'token';
|
||||
static const String user = 'user';
|
||||
static const String selectedOutletId = 'selected_outlet_id';
|
||||
static const String selectedOutletName = 'selected_outlet_name';
|
||||
}
|
||||
|
||||
@@ -6,4 +6,7 @@ extension IntegerExt on int {
|
||||
symbol: 'Rp. ',
|
||||
decimalDigits: 0,
|
||||
).format(this);
|
||||
|
||||
/// Format ribuan tanpa simbol mata uang, contoh: 1.639
|
||||
String get thousandFormat => NumberFormat.decimalPattern('id').format(this);
|
||||
}
|
||||
|
||||
@@ -9,6 +9,11 @@ part 'app_value.dart';
|
||||
class ThemeApp {
|
||||
static ThemeData get theme => ThemeData(
|
||||
useMaterial3: true,
|
||||
colorScheme: ColorScheme.fromSeed(
|
||||
seedColor: AppColor.primary,
|
||||
primary: AppColor.primary,
|
||||
brightness: Brightness.light,
|
||||
),
|
||||
scaffoldBackgroundColor: AppColor.background,
|
||||
fontFamily: FontFamily.quicksand,
|
||||
inputDecorationTheme: InputDecorationTheme(
|
||||
@@ -67,6 +72,7 @@ class ThemeApp {
|
||||
),
|
||||
bottomSheetTheme: BottomSheetThemeData(
|
||||
backgroundColor: AppColor.white,
|
||||
)
|
||||
surfaceTintColor: Colors.transparent,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -10,8 +10,17 @@ class ApiPath {
|
||||
static const String dashboardAnalytic = '/api/v1/analytics/dashboard';
|
||||
static const String productAnalytic = '/api/v1/analytics/products';
|
||||
static const String paymentMethodAnalytic =
|
||||
'/api/v1/analytics/paymentMethods';
|
||||
'/api/v1/analytics/payment-methods';
|
||||
static const String purchasingAnalytic = '/api/v1/analytics/purchasing';
|
||||
static const String exclusiveSummaryAnalytic =
|
||||
'/api/v1/analytics/exclusive-summary/period';
|
||||
static const String profitSharingAnalytic =
|
||||
'/api/v1/analytics/profit-sharing';
|
||||
|
||||
/// Path lama profit sharing, hanya untuk fallback selama backend lama masih
|
||||
/// jalan. Hapus setelah backend baru rilis (docs/migrasi-profit-sharing.md).
|
||||
static const String profitSharingAnalyticLegacy =
|
||||
'/api/v1/analytics/parent-categories';
|
||||
|
||||
// Inventory
|
||||
static const String inventoryReportDetail =
|
||||
|
||||
@@ -12,4 +12,6 @@ part 'entities/dashboard_analytic_entity.dart';
|
||||
part 'entities/product_analytic_entity.dart';
|
||||
part 'entities/payment_method_analytic_entity.dart';
|
||||
part 'entities/purchasing_analytic_entity.dart';
|
||||
part 'entities/exclusive_summary_entity.dart';
|
||||
part 'entities/profit_sharing_entity.dart';
|
||||
part 'failures/analytic_failure.dart';
|
||||
|
||||
@@ -5,6 +5,7 @@ class CategoryAnalytic with _$CategoryAnalytic {
|
||||
const factory CategoryAnalytic({
|
||||
required String organizationId,
|
||||
required String outletId,
|
||||
required String outletName,
|
||||
required String dateFrom,
|
||||
required String dateTo,
|
||||
required List<CategoryAnalyticItem> data,
|
||||
@@ -13,6 +14,7 @@ class CategoryAnalytic with _$CategoryAnalytic {
|
||||
factory CategoryAnalytic.empty() => const CategoryAnalytic(
|
||||
organizationId: "",
|
||||
outletId: "",
|
||||
outletName: "",
|
||||
dateFrom: "",
|
||||
dateTo: "",
|
||||
data: [],
|
||||
|
||||
@@ -5,6 +5,7 @@ class DashboardAnalytic with _$DashboardAnalytic {
|
||||
const factory DashboardAnalytic({
|
||||
required String organizationId,
|
||||
required String outletId,
|
||||
required String outletName,
|
||||
required String dateFrom,
|
||||
required String dateTo,
|
||||
required DashboardOverview overview,
|
||||
@@ -16,6 +17,7 @@ class DashboardAnalytic with _$DashboardAnalytic {
|
||||
factory DashboardAnalytic.empty() => DashboardAnalytic(
|
||||
organizationId: '',
|
||||
outletId: '',
|
||||
outletName: '',
|
||||
dateFrom: '',
|
||||
dateTo: '',
|
||||
overview: DashboardOverview.empty(),
|
||||
@@ -34,6 +36,9 @@ class DashboardOverview with _$DashboardOverview {
|
||||
required int totalCustomers,
|
||||
required int voidedOrders,
|
||||
required int refundedOrders,
|
||||
required int totalItemSold,
|
||||
required int totalLowStock,
|
||||
required int totalProductActive,
|
||||
}) = _DashboardOverview;
|
||||
|
||||
factory DashboardOverview.empty() => const DashboardOverview(
|
||||
@@ -43,6 +48,9 @@ class DashboardOverview with _$DashboardOverview {
|
||||
totalCustomers: 0,
|
||||
voidedOrders: 0,
|
||||
refundedOrders: 0,
|
||||
totalItemSold: 0,
|
||||
totalLowStock: 0,
|
||||
totalProductActive: 0,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
part of '../analytic.dart';
|
||||
|
||||
@freezed
|
||||
class ExclusiveSummary with _$ExclusiveSummary {
|
||||
const factory ExclusiveSummary({
|
||||
required String organizationId,
|
||||
required String outletId,
|
||||
required String outletName,
|
||||
required ExclusiveSummaryPeriod period,
|
||||
required ExclusiveSummarySummary summary,
|
||||
required ExclusiveSummaryReimburse reimburse,
|
||||
required List<ExclusiveSummaryBreakdown> hppBreakdown,
|
||||
required List<ExclusiveSummaryBreakdown> operationalExpenseBreakdown,
|
||||
required List<ExclusiveSummaryDaily> dailySummary,
|
||||
required List<ExclusiveSummaryTransaction> dailyTransactions,
|
||||
}) = _ExclusiveSummary;
|
||||
|
||||
factory ExclusiveSummary.empty() => ExclusiveSummary(
|
||||
organizationId: '',
|
||||
outletId: '',
|
||||
outletName: '',
|
||||
period: ExclusiveSummaryPeriod.empty(),
|
||||
summary: ExclusiveSummarySummary.empty(),
|
||||
reimburse: ExclusiveSummaryReimburse.empty(),
|
||||
hppBreakdown: [],
|
||||
operationalExpenseBreakdown: [],
|
||||
dailySummary: [],
|
||||
dailyTransactions: [],
|
||||
);
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ExclusiveSummaryPeriod with _$ExclusiveSummaryPeriod {
|
||||
const factory ExclusiveSummaryPeriod({
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
}) = _ExclusiveSummaryPeriod;
|
||||
|
||||
factory ExclusiveSummaryPeriod.empty() => ExclusiveSummaryPeriod(
|
||||
dateFrom: DateTime.fromMillisecondsSinceEpoch(0),
|
||||
dateTo: DateTime.fromMillisecondsSinceEpoch(0),
|
||||
);
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ExclusiveSummarySummary with _$ExclusiveSummarySummary {
|
||||
const factory ExclusiveSummarySummary({
|
||||
required int sales,
|
||||
required int hpp,
|
||||
required int grossProfit,
|
||||
required int salaryTotal,
|
||||
required int salaryDw,
|
||||
required int salaryStaff,
|
||||
required int salaryOther,
|
||||
required int otherOperationalExpenses,
|
||||
required int operationalExpensesTotal,
|
||||
required int totalCost,
|
||||
required int netProfit,
|
||||
}) = _ExclusiveSummarySummary;
|
||||
|
||||
factory ExclusiveSummarySummary.empty() => const ExclusiveSummarySummary(
|
||||
sales: 0,
|
||||
hpp: 0,
|
||||
grossProfit: 0,
|
||||
salaryTotal: 0,
|
||||
salaryDw: 0,
|
||||
salaryStaff: 0,
|
||||
salaryOther: 0,
|
||||
otherOperationalExpenses: 0,
|
||||
operationalExpensesTotal: 0,
|
||||
totalCost: 0,
|
||||
netProfit: 0,
|
||||
);
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ExclusiveSummaryReimburse with _$ExclusiveSummaryReimburse {
|
||||
const factory ExclusiveSummaryReimburse({
|
||||
required int totalCost,
|
||||
required int excludedSalaryStaff,
|
||||
required int totalReimburse,
|
||||
}) = _ExclusiveSummaryReimburse;
|
||||
|
||||
factory ExclusiveSummaryReimburse.empty() => const ExclusiveSummaryReimburse(
|
||||
totalCost: 0,
|
||||
excludedSalaryStaff: 0,
|
||||
totalReimburse: 0,
|
||||
);
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ExclusiveSummaryBreakdown with _$ExclusiveSummaryBreakdown {
|
||||
const factory ExclusiveSummaryBreakdown({
|
||||
required String categoryCode,
|
||||
required String categoryName,
|
||||
required int amount,
|
||||
required double percentage,
|
||||
}) = _ExclusiveSummaryBreakdown;
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ExclusiveSummaryDaily with _$ExclusiveSummaryDaily {
|
||||
const factory ExclusiveSummaryDaily({
|
||||
required DateTime date,
|
||||
required int transactionCount,
|
||||
required int totalCost,
|
||||
}) = _ExclusiveSummaryDaily;
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ExclusiveSummaryTransaction with _$ExclusiveSummaryTransaction {
|
||||
const factory ExclusiveSummaryTransaction({
|
||||
required DateTime date,
|
||||
required String categoryCode,
|
||||
required String categoryName,
|
||||
required String description,
|
||||
required int amount,
|
||||
required String source,
|
||||
}) = _ExclusiveSummaryTransaction;
|
||||
}
|
||||
@@ -5,6 +5,7 @@ class PaymentMethodAnalytic with _$PaymentMethodAnalytic {
|
||||
const factory PaymentMethodAnalytic({
|
||||
required String organizationId,
|
||||
required String outletId,
|
||||
required String outletName,
|
||||
required String dateFrom,
|
||||
required String dateTo,
|
||||
required String groupBy,
|
||||
@@ -15,6 +16,7 @@ class PaymentMethodAnalytic with _$PaymentMethodAnalytic {
|
||||
factory PaymentMethodAnalytic.empty() => PaymentMethodAnalytic(
|
||||
organizationId: '',
|
||||
outletId: '',
|
||||
outletName: '',
|
||||
dateFrom: '',
|
||||
dateTo: '',
|
||||
groupBy: '',
|
||||
|
||||
@@ -5,6 +5,7 @@ class ProductAnalytic with _$ProductAnalytic {
|
||||
const factory ProductAnalytic({
|
||||
required String organizationId,
|
||||
required String outletId,
|
||||
required String outletName,
|
||||
required String dateFrom,
|
||||
required String dateTo,
|
||||
required List<ProductAnalyticData> data,
|
||||
@@ -13,6 +14,7 @@ class ProductAnalytic with _$ProductAnalytic {
|
||||
factory ProductAnalytic.empty() => const ProductAnalytic(
|
||||
organizationId: '',
|
||||
outletId: '',
|
||||
outletName: '',
|
||||
dateFrom: '',
|
||||
dateTo: '',
|
||||
data: [],
|
||||
@@ -24,22 +26,40 @@ class ProductAnalyticData with _$ProductAnalyticData {
|
||||
const factory ProductAnalyticData({
|
||||
required String productId,
|
||||
required String productName,
|
||||
required String productSku,
|
||||
required int productPrice,
|
||||
required String categoryId,
|
||||
required String categoryName,
|
||||
required int categoryOrder,
|
||||
required int quantitySold,
|
||||
required int revenue,
|
||||
required double averagePrice,
|
||||
required int orderCount,
|
||||
required int standardHppPerUnit,
|
||||
required int standardHppTotal,
|
||||
required int fifoHppPerUnit,
|
||||
required int fifoHppTotal,
|
||||
required int movingAverageHppPerUnit,
|
||||
required int movingAverageHppTotal,
|
||||
}) = _ProductAnalyticData;
|
||||
|
||||
factory ProductAnalyticData.empty() => const ProductAnalyticData(
|
||||
productId: '',
|
||||
productName: '',
|
||||
productSku: '',
|
||||
productPrice: 0,
|
||||
categoryId: '',
|
||||
categoryName: '',
|
||||
categoryOrder: 0,
|
||||
quantitySold: 0,
|
||||
revenue: 0,
|
||||
averagePrice: 0.0,
|
||||
orderCount: 0,
|
||||
standardHppPerUnit: 0,
|
||||
standardHppTotal: 0,
|
||||
fifoHppPerUnit: 0,
|
||||
fifoHppTotal: 0,
|
||||
movingAverageHppPerUnit: 0,
|
||||
movingAverageHppTotal: 0,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -4,22 +4,34 @@ part of '../analytic.dart';
|
||||
class ProfitLossAnalytic with _$ProfitLossAnalytic {
|
||||
const factory ProfitLossAnalytic({
|
||||
required String organizationId,
|
||||
required String outletId,
|
||||
required String outletName,
|
||||
required String dateFrom,
|
||||
required String dateTo,
|
||||
required String groupBy,
|
||||
required ProfitLossSummary summary,
|
||||
required List<ProfitLossDailyData> data,
|
||||
required List<ProfitLossProductData> productData,
|
||||
required List<ProfitLossMainSummaryItem> mainSummary,
|
||||
required ProfitLossPurchasing purchasing,
|
||||
required List<ProfitLossOperationalExpense> operationalExpenses,
|
||||
required int operationalExpensesTotal,
|
||||
}) = _ProfitLossAnalytic;
|
||||
|
||||
factory ProfitLossAnalytic.empty() => ProfitLossAnalytic(
|
||||
organizationId: '',
|
||||
outletId: '',
|
||||
outletName: '',
|
||||
dateFrom: '',
|
||||
dateTo: '',
|
||||
groupBy: '',
|
||||
summary: ProfitLossSummary.empty(),
|
||||
data: [],
|
||||
productData: [],
|
||||
mainSummary: [],
|
||||
purchasing: ProfitLossPurchasing.empty(),
|
||||
operationalExpenses: [],
|
||||
operationalExpensesTotal: 0,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -115,3 +127,79 @@ class ProfitLossProductData with _$ProfitLossProductData {
|
||||
profitPerUnit: 0,
|
||||
);
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ProfitLossMainSummaryItem with _$ProfitLossMainSummaryItem {
|
||||
const factory ProfitLossMainSummaryItem({
|
||||
required String id,
|
||||
required String label,
|
||||
required bool isBold,
|
||||
required int todayNominal,
|
||||
required double todayPct,
|
||||
required int mtdNominal,
|
||||
required double mtdPct,
|
||||
@Default([]) List<ProfitLossMainSummaryItem> subItems,
|
||||
}) = _ProfitLossMainSummaryItem;
|
||||
|
||||
factory ProfitLossMainSummaryItem.empty() => const ProfitLossMainSummaryItem(
|
||||
id: '',
|
||||
label: '',
|
||||
isBold: false,
|
||||
todayNominal: 0,
|
||||
todayPct: 0,
|
||||
mtdNominal: 0,
|
||||
mtdPct: 0,
|
||||
subItems: [],
|
||||
);
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ProfitLossPurchasing with _$ProfitLossPurchasing {
|
||||
const factory ProfitLossPurchasing({
|
||||
required int todayTotal,
|
||||
required int mtdTotal,
|
||||
required int todayRawMaterial,
|
||||
required int mtdRawMaterial,
|
||||
required int todayExpense,
|
||||
required int mtdExpense,
|
||||
@Default([]) List<ProfitLossPurchasingItem> items,
|
||||
}) = _ProfitLossPurchasing;
|
||||
|
||||
factory ProfitLossPurchasing.empty() => const ProfitLossPurchasing(
|
||||
todayTotal: 0,
|
||||
mtdTotal: 0,
|
||||
todayRawMaterial: 0,
|
||||
mtdRawMaterial: 0,
|
||||
todayExpense: 0,
|
||||
mtdExpense: 0,
|
||||
items: [],
|
||||
);
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ProfitLossPurchasingItem with _$ProfitLossPurchasingItem {
|
||||
const factory ProfitLossPurchasingItem({
|
||||
required String date,
|
||||
required String item,
|
||||
required int quantity,
|
||||
required int nominal,
|
||||
}) = _ProfitLossPurchasingItem;
|
||||
|
||||
factory ProfitLossPurchasingItem.empty() => const ProfitLossPurchasingItem(
|
||||
date: '',
|
||||
item: '',
|
||||
quantity: 0,
|
||||
nominal: 0,
|
||||
);
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ProfitLossOperationalExpense with _$ProfitLossOperationalExpense {
|
||||
const factory ProfitLossOperationalExpense({
|
||||
required String item,
|
||||
required int nominal,
|
||||
}) = _ProfitLossOperationalExpense;
|
||||
|
||||
factory ProfitLossOperationalExpense.empty() =>
|
||||
const ProfitLossOperationalExpense(item: '', nominal: 0);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,247 @@
|
||||
part of '../analytic.dart';
|
||||
|
||||
/// Bagi hasil (profit sharing) berdasarkan omzet per parent category.
|
||||
@freezed
|
||||
class ProfitSharing with _$ProfitSharing {
|
||||
const factory ProfitSharing({
|
||||
required String organizationId,
|
||||
required String outletId,
|
||||
required String outletName,
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
required List<ProfitSharingCategory> categories,
|
||||
required ProfitSharingBudget budget,
|
||||
}) = _ProfitSharing;
|
||||
|
||||
factory ProfitSharing.empty() => ProfitSharing(
|
||||
organizationId: '',
|
||||
outletId: '',
|
||||
outletName: '',
|
||||
dateFrom: DateTime.fromMillisecondsSinceEpoch(0),
|
||||
dateTo: DateTime.fromMillisecondsSinceEpoch(0),
|
||||
categories: [],
|
||||
budget: ProfitSharingBudget.empty(),
|
||||
);
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ProfitSharingCategory with _$ProfitSharingCategory {
|
||||
const ProfitSharingCategory._();
|
||||
|
||||
const factory ProfitSharingCategory({
|
||||
required String parentCategoryId,
|
||||
required String parentCategoryName,
|
||||
required int totalRevenue,
|
||||
required int totalQuantity,
|
||||
required int categoryCount,
|
||||
required int productCount,
|
||||
required int orderCount,
|
||||
required int totalStandardHpp,
|
||||
required int totalFifoHpp,
|
||||
required int totalMovingAverageHpp,
|
||||
@Default(0) double ownerFeePercent,
|
||||
@Default(0) int sdl,
|
||||
@Default(ProfitSharingTopProduct()) ProfitSharingTopProduct topProduct,
|
||||
}) = _ProfitSharingCategory;
|
||||
|
||||
factory ProfitSharingCategory.empty() => const ProfitSharingCategory(
|
||||
parentCategoryId: '',
|
||||
parentCategoryName: '',
|
||||
totalRevenue: 0,
|
||||
totalQuantity: 0,
|
||||
categoryCount: 0,
|
||||
productCount: 0,
|
||||
orderCount: 0,
|
||||
totalStandardHpp: 0,
|
||||
totalFifoHpp: 0,
|
||||
totalMovingAverageHpp: 0,
|
||||
);
|
||||
|
||||
bool get hasTopProduct => topProduct.productId.isNotEmpty;
|
||||
|
||||
/// Porsi tim = omzet − SDL. Response tidak membawa porsi tim per kategori,
|
||||
/// jadi dihitung dari nominalnya (docs/migrasi-profit-sharing.md).
|
||||
int get teamShare => totalRevenue - sdl;
|
||||
|
||||
/// % porsi tim terhadap omzet, yaitu 100 − fee owner.
|
||||
double get teamPercent => 100 - ownerFeePercent;
|
||||
|
||||
/// Laba kotor memakai HPP standar (acuan yang dipakai di laporan laba rugi).
|
||||
int get grossProfit => totalRevenue - totalStandardHpp;
|
||||
|
||||
double get grossMargin =>
|
||||
totalRevenue == 0 ? 0 : (grossProfit / totalRevenue) * 100;
|
||||
|
||||
/// % HPP standar terhadap omzet.
|
||||
double get standardHppPercentage =>
|
||||
totalRevenue == 0 ? 0 : (totalStandardHpp / totalRevenue) * 100;
|
||||
|
||||
/// % HPP riil (FIFO) terhadap omzet — dipakai untuk status kesehatan margin.
|
||||
double get realHppPercentage =>
|
||||
totalRevenue == 0 ? 0 : (totalFifoHpp / totalRevenue) * 100;
|
||||
}
|
||||
|
||||
/// Produk dengan omzet tertinggi di satu kategori induk.
|
||||
@freezed
|
||||
class ProfitSharingTopProduct with _$ProfitSharingTopProduct {
|
||||
const factory ProfitSharingTopProduct({
|
||||
@Default('') String productId,
|
||||
@Default('') String productName,
|
||||
@Default(0) int quantitySold,
|
||||
@Default(0) int revenue,
|
||||
}) = _ProfitSharingTopProduct;
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ProfitSharingBudget with _$ProfitSharingBudget {
|
||||
const factory ProfitSharingBudget({
|
||||
required ProfitSharingPercentage percentages,
|
||||
required DateTime cutOffFrom,
|
||||
required DateTime cutOffTo,
|
||||
required ProfitSharingPeriod total,
|
||||
required List<ProfitSharingPeriod> weekly,
|
||||
required List<ProfitSharingPeriod> monthly,
|
||||
}) = _ProfitSharingBudget;
|
||||
|
||||
factory ProfitSharingBudget.empty() => ProfitSharingBudget(
|
||||
percentages: ProfitSharingPercentage.empty(),
|
||||
cutOffFrom: DateTime.fromMillisecondsSinceEpoch(0),
|
||||
cutOffTo: DateTime.fromMillisecondsSinceEpoch(0),
|
||||
total: ProfitSharingPeriod.empty(),
|
||||
weekly: [],
|
||||
monthly: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// Porsi bawaan bagi hasil: owner (SDL) dan tim, dengan tim = 100 − owner.
|
||||
@freezed
|
||||
class ProfitSharingPercentage with _$ProfitSharingPercentage {
|
||||
const factory ProfitSharingPercentage({
|
||||
required double owner,
|
||||
required double team,
|
||||
}) = _ProfitSharingPercentage;
|
||||
|
||||
factory ProfitSharingPercentage.empty() =>
|
||||
const ProfitSharingPercentage(owner: 0, team: 0);
|
||||
}
|
||||
|
||||
/// Satu baris periode bagi hasil. Dipakai untuk total, mingguan, dan bulanan.
|
||||
/// [month] dan [weekCount] hanya terisi untuk data bulanan.
|
||||
@freezed
|
||||
class ProfitSharingPeriod with _$ProfitSharingPeriod {
|
||||
const ProfitSharingPeriod._();
|
||||
|
||||
const factory ProfitSharingPeriod({
|
||||
required DateTime periodStart,
|
||||
required DateTime periodEnd,
|
||||
required int revenue,
|
||||
required int orderCount,
|
||||
required int sdl,
|
||||
required int limitTeam,
|
||||
@Default('') String month,
|
||||
@Default(0) int weekCount,
|
||||
}) = _ProfitSharingPeriod;
|
||||
|
||||
factory ProfitSharingPeriod.empty() => ProfitSharingPeriod(
|
||||
periodStart: DateTime.fromMillisecondsSinceEpoch(0),
|
||||
periodEnd: DateTime.fromMillisecondsSinceEpoch(0),
|
||||
revenue: 0,
|
||||
orderCount: 0,
|
||||
sdl: 0,
|
||||
limitTeam: 0,
|
||||
);
|
||||
|
||||
bool get hasRevenue => revenue > 0;
|
||||
|
||||
/// % SDL (bagian owner) terhadap omzet. Fee owner berbeda tiap kategori
|
||||
/// induk, jadi porsinya dihitung dari nominal, bukan dari persentase tetap.
|
||||
double get sdlPercentage => revenue == 0 ? 0 : (sdl / revenue) * 100;
|
||||
|
||||
/// % porsi tim terhadap omzet, dihitung dari nominal dengan alasan yang sama.
|
||||
double get teamPercentage => revenue == 0 ? 0 : (limitTeam / revenue) * 100;
|
||||
|
||||
int get averageOrderValue => orderCount == 0 ? 0 : revenue ~/ orderCount;
|
||||
}
|
||||
|
||||
/// Rincian satu kategori induk: ringkasan, sub kategori beserta produknya,
|
||||
/// dan bagi hasil khusus kategori tersebut.
|
||||
@freezed
|
||||
class ProfitSharingDetail with _$ProfitSharingDetail {
|
||||
const factory ProfitSharingDetail({
|
||||
required String organizationId,
|
||||
required String outletId,
|
||||
required String outletName,
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
required String parentCategoryId,
|
||||
required String parentCategoryName,
|
||||
required ProfitSharingCategory summary,
|
||||
required List<ProfitSharingSubCategory> categories,
|
||||
required ProfitSharingBudget budget,
|
||||
}) = _ProfitSharingDetail;
|
||||
|
||||
factory ProfitSharingDetail.empty() => ProfitSharingDetail(
|
||||
organizationId: '',
|
||||
outletId: '',
|
||||
outletName: '',
|
||||
dateFrom: DateTime.fromMillisecondsSinceEpoch(0),
|
||||
dateTo: DateTime.fromMillisecondsSinceEpoch(0),
|
||||
parentCategoryId: '',
|
||||
parentCategoryName: '',
|
||||
summary: ProfitSharingCategory.empty(),
|
||||
categories: [],
|
||||
budget: ProfitSharingBudget.empty(),
|
||||
);
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ProfitSharingSubCategory with _$ProfitSharingSubCategory {
|
||||
const ProfitSharingSubCategory._();
|
||||
|
||||
const factory ProfitSharingSubCategory({
|
||||
required String categoryId,
|
||||
required String categoryName,
|
||||
required int totalRevenue,
|
||||
required int totalQuantity,
|
||||
required int productCount,
|
||||
required int orderCount,
|
||||
required int totalStandardHpp,
|
||||
required int totalFifoHpp,
|
||||
required int totalMovingAverageHpp,
|
||||
required List<ProfitSharingProduct> products,
|
||||
}) = _ProfitSharingSubCategory;
|
||||
|
||||
double get standardHppPercentage =>
|
||||
totalRevenue == 0 ? 0 : (totalStandardHpp / totalRevenue) * 100;
|
||||
|
||||
double get realHppPercentage =>
|
||||
totalRevenue == 0 ? 0 : (totalFifoHpp / totalRevenue) * 100;
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ProfitSharingProduct with _$ProfitSharingProduct {
|
||||
const ProfitSharingProduct._();
|
||||
|
||||
const factory ProfitSharingProduct({
|
||||
required String productId,
|
||||
required String productName,
|
||||
required String productSku,
|
||||
required int productPrice,
|
||||
required int quantitySold,
|
||||
required int revenue,
|
||||
required double averagePrice,
|
||||
required int orderCount,
|
||||
required double standardHppPerUnit,
|
||||
required int standardHppTotal,
|
||||
required double fifoHppPerUnit,
|
||||
required int fifoHppTotal,
|
||||
required double movingAverageHppPerUnit,
|
||||
required int movingAverageHppTotal,
|
||||
}) = _ProfitSharingProduct;
|
||||
|
||||
double get standardHppPercentage =>
|
||||
revenue == 0 ? 0 : (standardHppTotal / revenue) * 100;
|
||||
|
||||
double get realHppPercentage =>
|
||||
revenue == 0 ? 0 : (fifoHppTotal / revenue) * 100;
|
||||
}
|
||||
@@ -33,7 +33,11 @@ class PurchasingAnalytic with _$PurchasingAnalytic {
|
||||
class PurchasingAnalyticSummary with _$PurchasingAnalyticSummary {
|
||||
const factory PurchasingAnalyticSummary({
|
||||
required int totalPurchases,
|
||||
required int rawMaterialPurchases,
|
||||
required int expensePurchases,
|
||||
required int totalPurchaseOrders,
|
||||
required int rawMaterialPurchaseOrders,
|
||||
required int expenseCount,
|
||||
required int totalQuantity,
|
||||
required double averagePurchaseOrderValue,
|
||||
required int totalIngredients,
|
||||
@@ -43,7 +47,11 @@ class PurchasingAnalyticSummary with _$PurchasingAnalyticSummary {
|
||||
factory PurchasingAnalyticSummary.empty() =>
|
||||
const PurchasingAnalyticSummary(
|
||||
totalPurchases: 0,
|
||||
rawMaterialPurchases: 0,
|
||||
expensePurchases: 0,
|
||||
totalPurchaseOrders: 0,
|
||||
rawMaterialPurchaseOrders: 0,
|
||||
expenseCount: 0,
|
||||
totalQuantity: 0,
|
||||
averagePurchaseOrderValue: 0,
|
||||
totalIngredients: 0,
|
||||
@@ -56,7 +64,11 @@ class PurchasingAnalyticData with _$PurchasingAnalyticData {
|
||||
const factory PurchasingAnalyticData({
|
||||
required DateTime date,
|
||||
required int purchases,
|
||||
required int rawMaterialPurchases,
|
||||
required int expensePurchases,
|
||||
required int purchaseOrders,
|
||||
required int rawMaterialPurchaseOrders,
|
||||
required int expenseCount,
|
||||
required int quantity,
|
||||
required int ingredients,
|
||||
required int vendors,
|
||||
@@ -65,7 +77,11 @@ class PurchasingAnalyticData with _$PurchasingAnalyticData {
|
||||
factory PurchasingAnalyticData.empty() => PurchasingAnalyticData(
|
||||
date: DateTime.fromMillisecondsSinceEpoch(0),
|
||||
purchases: 0,
|
||||
rawMaterialPurchases: 0,
|
||||
expensePurchases: 0,
|
||||
purchaseOrders: 0,
|
||||
rawMaterialPurchaseOrders: 0,
|
||||
expenseCount: 0,
|
||||
quantity: 0,
|
||||
ingredients: 0,
|
||||
vendors: 0,
|
||||
|
||||
@@ -5,6 +5,7 @@ class SalesAnalytic with _$SalesAnalytic {
|
||||
const factory SalesAnalytic({
|
||||
required String organizationId,
|
||||
required String outletId,
|
||||
required String outletName,
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
required String groupBy,
|
||||
@@ -15,6 +16,7 @@ class SalesAnalytic with _$SalesAnalytic {
|
||||
factory SalesAnalytic.empty() => SalesAnalytic(
|
||||
organizationId: '',
|
||||
outletId: '',
|
||||
outletName: '',
|
||||
dateFrom: DateTime.fromMillisecondsSinceEpoch(0),
|
||||
dateTo: DateTime.fromMillisecondsSinceEpoch(0),
|
||||
groupBy: '',
|
||||
|
||||
@@ -5,6 +5,9 @@ sealed class AnalyticFailure with _$AnalyticFailure {
|
||||
const factory AnalyticFailure.serverError(ApiFailure failure) = _ServerError;
|
||||
const factory AnalyticFailure.unexpectedError() = _UnexpectedError;
|
||||
const factory AnalyticFailure.empty() = _Empty;
|
||||
|
||||
/// Detail profit sharing ditolak karena kategori induknya sudah non-team.
|
||||
const factory AnalyticFailure.notTeam() = _NotTeam;
|
||||
const factory AnalyticFailure.dynamicErrorMessage(String erroMessage) =
|
||||
_DynamicErrorMessage;
|
||||
}
|
||||
|
||||
@@ -49,5 +49,26 @@ abstract class IAnalyticRepository {
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
String? outletId,
|
||||
String groupBy = 'day',
|
||||
});
|
||||
|
||||
Future<Either<AnalyticFailure, ExclusiveSummary>> getExclusiveSummary({
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
String? outletId,
|
||||
});
|
||||
|
||||
Future<Either<AnalyticFailure, ProfitSharing>> getProfitSharing({
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
String? outletId,
|
||||
String groupBy = 'day',
|
||||
});
|
||||
|
||||
Future<Either<AnalyticFailure, ProfitSharingDetail>> getProfitSharingDetail({
|
||||
required String parentCategoryId,
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
String? outletId,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -10,4 +10,11 @@ abstract class IOrderRepository {
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
});
|
||||
|
||||
Future<Either<OrderFailure, int>> getTotalCount({
|
||||
String? status,
|
||||
String? outletId,
|
||||
required DateTime dateFrom,
|
||||
required DateTime dateTo,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -9,12 +9,12 @@ abstract class Env {
|
||||
@dev
|
||||
class DevEnv implements Env {
|
||||
@override
|
||||
String get baseUrl => 'https://api-pos.apskel.id'; // example value
|
||||
String get baseUrl => 'https://enaklo-pos-api.altru.id'; // example value
|
||||
}
|
||||
|
||||
@Injectable(as: Env)
|
||||
@prod
|
||||
class ProdEnv implements Env {
|
||||
@override
|
||||
String get baseUrl => 'https://api-pos.apskel.id';
|
||||
String get baseUrl => 'https://enaklo-pos-api.altru.id';
|
||||
}
|
||||
|
||||