#AMB-36 -> entities, repositories and fetchApis...
This commit is contained in:
parent
c4174a248d
commit
4aa60980a1
72 changed files with 29111 additions and 201 deletions
2
.env
2
.env
|
@ -1,2 +1,2 @@
|
||||||
BASEROW_TOKEN="TFxO7vzBLVRCu9I3VMoHmTuCvSu8aCDi"
|
BASEROW_TOKEN="TFxO7vzBLVRCu9I3VMoHmTuCvSu8aCDi"
|
||||||
BASEROW_IDS='{"measure": 328253, "measure_combination": 328217, "organism": 328255, "funding_program": 328256, "factsheet": 328273, "standortansprueche": 328188, "referenzumsetzung": 328465, "betriebsverzeichnis": 328472, "erfahrungsbericht": 330802, "genehmigungspflicht": 330806, "dienstleister": 330824, "ansprechperson": 330832, "material": 330836, "quellen": 334231, "tree_type": 342622, "aenderungfactsheet": 330946}'
|
BASEROW_IDS='{"measure": 328253,"measure_combination": 328217, "organism": 328255, "funding_program": 328256, "factsheet": 328273, "location_requirements": 328188, "reference_implementation": 328465, "business": 328472, "experience_report": 330802, "approval_requirement": 330806, "service_provider": 330824, "service_provider_contact_person": 330832, "material": 330836, "source": 334231, "tree_type": 342622, "aenderungfactsheet": 330946}'
|
|
@ -1,6 +1,5 @@
|
||||||
import 'package:ambito/src/domain/entity/entities.dart';
|
import 'package:ambito/src/packages/ambito_api/base_api.dart';
|
||||||
import 'package:ambito/src/domain/entity/funding_program/funding_program.dart';
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
||||||
import 'package:ambito/src/packages/ambito_api/base.dart';
|
|
||||||
import 'package:ambito/src/pages/loading/loading_page.dart';
|
import 'package:ambito/src/pages/loading/loading_page.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
@ -20,31 +19,23 @@ late Isar isar;
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
|
|
||||||
await dotenv.load(fileName: '.env');
|
await dotenv.load(fileName: '.env');
|
||||||
|
|
||||||
await Isar.initialize();
|
await AmbitoIsarDB().init();
|
||||||
const dir = Isar.sqliteInMemory;
|
|
||||||
const engine = kIsWeb ? IsarEngine.sqlite : IsarEngine.isar;
|
|
||||||
isar = Isar.open(
|
|
||||||
schemas: [
|
|
||||||
FundingProgramSchema,
|
|
||||||
MeasureSchema,
|
|
||||||
MeasureCombinationSchema,
|
|
||||||
OrganismSchema,
|
|
||||||
TreeTypeSchema,
|
|
||||||
],
|
|
||||||
directory: dir,
|
|
||||||
engine: engine,
|
|
||||||
inspector: true,
|
|
||||||
);
|
|
||||||
|
|
||||||
await Future.wait([
|
await Future.wait([
|
||||||
BaseApi().getContent('tree_type'),
|
/*BaseApi().getContent('tree_type'),
|
||||||
BaseApi().getContent('measure'),
|
BaseApi().getContent('measure'),
|
||||||
BaseApi().getContent('measure_combination'),
|
BaseApi().getContent('measure_combination'),
|
||||||
BaseApi().getContent('organism'),
|
BaseApi().getContent('organism'),
|
||||||
BaseApi().getContent('funding_program'),
|
BaseApi().getContent('funding_program'),
|
||||||
|
BaseApi().getContent('location_requirements'),
|
||||||
|
BaseApi().getContent('reference_implementation'),
|
||||||
|
BaseApi().getContent('business'),
|
||||||
|
BaseApi().getContent('service_provider'),
|
||||||
|
BaseApi().getContent('service_provider_contact_person'),
|
||||||
|
BaseApi().getContent('material'),*/
|
||||||
|
BaseApi().getContent('source'),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
runApp(const Ambito());
|
runApp(const Ambito());
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
library ambito_entities;
|
|
||||||
|
|
||||||
export 'base_entity.dart';
|
|
||||||
export 'general/file/file_part.dart';
|
|
||||||
export 'general/file/thumbnail.dart';
|
|
||||||
export 'general/file/thumbnails.dart';
|
|
||||||
export 'general/id_value/id_value.dart';
|
|
||||||
export 'general/id_value_color/id_value_color.dart';
|
|
||||||
export 'general/id_value_mix/id_value_mix.dart';
|
|
||||||
export 'general/month/month.dart';
|
|
||||||
export 'measure/measure.dart';
|
|
||||||
export 'measure_combination/measure_combination.dart';
|
|
||||||
export 'organism/organism.dart';
|
|
||||||
export 'tree_type//tree_type.dart';
|
|
|
@ -1,4 +1,4 @@
|
||||||
import 'package:ambito/src/domain/entity/entities.dart';
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import 'package:ambito/src/domain/entity/entities.dart';
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import 'package:ambito/src/domain/entity/entities.dart';
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
import 'package:ambito/src/entity/_general/id_value/id_value.dart';
|
||||||
|
import 'package:ambito/src/entity/_general/id_value_color/id_value_color.dart';
|
||||||
|
import 'package:ambito/src/entity/base_entity.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
part 'approval_requirement.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable(explicitToJson: true)
|
||||||
|
@collection
|
||||||
|
class ApprovalRequirement extends BaseEntity with EntityWithId {
|
||||||
|
ApprovalRequirement();
|
||||||
|
|
||||||
|
@JsonKey(name: 'Name der Genehmigung')
|
||||||
|
@Index()
|
||||||
|
String? name;
|
||||||
|
@JsonKey(name: 'Anmerkungen')
|
||||||
|
String? notes;
|
||||||
|
@JsonKey(name: 'Maßnahme')
|
||||||
|
List<IdValue>? measures;
|
||||||
|
@JsonKey(name: 'Behörde')
|
||||||
|
List<IdValueColor>? authority;
|
||||||
|
@JsonKey(name: 'Art der Genehmigung')
|
||||||
|
List<IdValueColor>? typeOfApproval;
|
||||||
|
|
||||||
|
factory ApprovalRequirement.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$ApprovalRequirementFromJson(json);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$ApprovalRequirementToJson(this);
|
||||||
|
}
|
1303
lib/src/entity/approval_requirement/approval_requirement.g.dart
Normal file
1303
lib/src/entity/approval_requirement/approval_requirement.g.dart
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,10 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
|
import '../../../../main.dart';
|
||||||
|
|
||||||
|
class ApprovalRequirementRepository extends BaseDB {
|
||||||
|
@override
|
||||||
|
IsarCollection collection = isar.approvalRequirements;
|
||||||
|
}
|
73
lib/src/entity/business/business.dart
Normal file
73
lib/src/entity/business/business.dart
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
part 'business.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable(explicitToJson: true)
|
||||||
|
@collection
|
||||||
|
class Business extends BaseEntity with EntityWithId {
|
||||||
|
Business();
|
||||||
|
|
||||||
|
@JsonKey(name: 'Modellbetrieb')
|
||||||
|
@Index()
|
||||||
|
String? name;
|
||||||
|
|
||||||
|
@JsonKey(name: 'Ursprungsgebiet')
|
||||||
|
IdValueColor? areaOfOrigin;
|
||||||
|
@JsonKey(name: 'Ansprechpartner')
|
||||||
|
String? businessOwner;
|
||||||
|
@JsonKey(name: 'Feld 6')
|
||||||
|
String? businessEmail;
|
||||||
|
@JsonKey(name: 'Feld 7')
|
||||||
|
String? businessPhone;
|
||||||
|
@JsonKey(name: 'Feld 8')
|
||||||
|
String? contactName;
|
||||||
|
@JsonKey(name: 'Feld 9')
|
||||||
|
String? contactPosition;
|
||||||
|
@JsonKey(name: 'Feld 10')
|
||||||
|
String? contactEmail;
|
||||||
|
@JsonKey(name: 'Feld 11')
|
||||||
|
String? contactPhone;
|
||||||
|
@JsonKey(name: 'Feld 12')
|
||||||
|
String? contact2Name;
|
||||||
|
@JsonKey(name: 'Feld 13')
|
||||||
|
String? contact2Position;
|
||||||
|
@JsonKey(name: 'Feld 14')
|
||||||
|
String? contact2Email;
|
||||||
|
@JsonKey(name: 'Feld 15')
|
||||||
|
String? contact2Phone;
|
||||||
|
@JsonKey(name: 'Feld 16')
|
||||||
|
String? contact3Name;
|
||||||
|
@JsonKey(name: 'Feld 17')
|
||||||
|
String? contact3Email;
|
||||||
|
@JsonKey(name: 'Feld 18')
|
||||||
|
String? addressComplete;
|
||||||
|
@JsonKey(name: 'Feld 19')
|
||||||
|
String? addressStreet;
|
||||||
|
@JsonKey(name: 'Feld 20')
|
||||||
|
String? addressPostalCode;
|
||||||
|
@JsonKey(name: 'Feld 21')
|
||||||
|
String? addressCity;
|
||||||
|
@JsonKey(name: 'Feld 22')
|
||||||
|
String? addressRegion;
|
||||||
|
@JsonKey(name: 'Feld 23')
|
||||||
|
String? addressFederalState;
|
||||||
|
@JsonKey(name: 'Feld 24')
|
||||||
|
String? unknown;
|
||||||
|
@JsonKey(name: 'Feld 25')
|
||||||
|
String? businessType;
|
||||||
|
@JsonKey(name: 'Region')
|
||||||
|
String? region;
|
||||||
|
@JsonKey(name: 'Umgesetze_Maßnahmen')
|
||||||
|
List<IdValueColor>? measures;
|
||||||
|
@JsonKey(name: '05 Referenzumsetzung')
|
||||||
|
List<IdValueColor>? referenceImplementation;
|
||||||
|
@JsonKey(name: '07 Erfahrungsbericht Umsetuzung')
|
||||||
|
List<IdValueColor>? experienceReport;
|
||||||
|
|
||||||
|
factory Business.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$BusinessFromJson(json);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$BusinessToJson(this);
|
||||||
|
}
|
7238
lib/src/entity/business/business.g.dart
Normal file
7238
lib/src/entity/business/business.g.dart
Normal file
File diff suppressed because it is too large
Load diff
10
lib/src/entity/business/business_repository.dart
Normal file
10
lib/src/entity/business/business_repository.dart
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
|
import '../../../../main.dart';
|
||||||
|
|
||||||
|
class BusinessRepository extends BaseDB {
|
||||||
|
@override
|
||||||
|
IsarCollection collection = isar.business;
|
||||||
|
}
|
25
lib/src/entity/entities.dart
Normal file
25
lib/src/entity/entities.dart
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
library ambito_entities;
|
||||||
|
|
||||||
|
export '_general/file/file_part.dart';
|
||||||
|
export '_general/file/thumbnail.dart';
|
||||||
|
export '_general/file/thumbnails.dart';
|
||||||
|
export '_general/id_value/id_value.dart';
|
||||||
|
export '_general/id_value_color/id_value_color.dart';
|
||||||
|
export '_general/id_value_mix/id_value_mix.dart';
|
||||||
|
export '_general/month/month.dart';
|
||||||
|
export 'approval_requirement/approval_requirement.dart';
|
||||||
|
export 'base_entity.dart';
|
||||||
|
export 'business/business.dart';
|
||||||
|
export 'experience_report/experience_report.dart';
|
||||||
|
export 'funding_program/funding_program.dart';
|
||||||
|
export 'location_requirements/location_requirements.dart';
|
||||||
|
export 'material/material.dart';
|
||||||
|
export 'measure/measure.dart';
|
||||||
|
export 'measure_combination/measure_combination.dart';
|
||||||
|
export 'number_factsheet/number_factsheet.dart';
|
||||||
|
export 'organism/organism.dart';
|
||||||
|
export 'reference_implementation/reference_implementation.dart';
|
||||||
|
export 'service_provider/service_provider.dart';
|
||||||
|
export 'service_provider/service_provider_contact_person.dart';
|
||||||
|
export 'source/source.dart';
|
||||||
|
export 'tree_type/tree_type.dart';
|
25
lib/src/entity/experience_report/experience_report.dart
Normal file
25
lib/src/entity/experience_report/experience_report.dart
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
part 'experience_report.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable(explicitToJson: true)
|
||||||
|
@collection
|
||||||
|
class ExperienceReport extends BaseEntity with EntityWithId {
|
||||||
|
ExperienceReport();
|
||||||
|
|
||||||
|
@JsonKey(name: 'Kurztitel')
|
||||||
|
String? title;
|
||||||
|
@JsonKey(name: 'Ausführlicher Refahrungsbericht')
|
||||||
|
String? content;
|
||||||
|
@JsonKey(name: 'Maßnahme')
|
||||||
|
List<IdValue>? measures;
|
||||||
|
@JsonKey(name: 'Betrieb')
|
||||||
|
List<IdValue>? business;
|
||||||
|
|
||||||
|
factory ExperienceReport.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$ExperienceReportFromJson(json);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$ExperienceReportToJson(this);
|
||||||
|
}
|
1153
lib/src/entity/experience_report/experience_report.g.dart
Normal file
1153
lib/src/entity/experience_report/experience_report.g.dart
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,10 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
|
import '../../../../main.dart';
|
||||||
|
|
||||||
|
class ExperienceReportRepository extends BaseDB {
|
||||||
|
@override
|
||||||
|
IsarCollection collection = isar.experienceReports;
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
import 'package:ambito/src/domain/entity/entities.dart';
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import 'package:ambito/src/domain/entity/funding_program/funding_program.dart';
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
import '../../../../main.dart';
|
import '../../../../main.dart';
|
||||||
|
|
||||||
class FundingProgramRepository extends BaseDB {
|
class FundingProgramRepository extends BaseDB {
|
||||||
|
@override
|
||||||
IsarCollection collection = isar.fundingPrograms;
|
IsarCollection collection = isar.fundingPrograms;
|
||||||
}
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
part 'location_requirements.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable(explicitToJson: true)
|
||||||
|
@collection
|
||||||
|
class LocationRequirements extends BaseEntity with EntityWithIdAndName {
|
||||||
|
LocationRequirements();
|
||||||
|
|
||||||
|
@JsonKey(name: 'Maßnahmentabelle Standortansprüche')
|
||||||
|
List<IdValue>? measures;
|
||||||
|
@JsonKey(name: 'Flächentyp')
|
||||||
|
List<IdValueColor>? areaType;
|
||||||
|
@JsonKey(name: 'Exposition')
|
||||||
|
List<IdValueColor>? exposition;
|
||||||
|
@JsonKey(name: 'Licht')
|
||||||
|
List<IdValueColor>? light;
|
||||||
|
@JsonKey(name: 'Feuchtigkeit')
|
||||||
|
List<IdValueColor>? humidity;
|
||||||
|
@JsonKey(name: 'Topographie')
|
||||||
|
List<IdValueColor>? topography;
|
||||||
|
@JsonKey(name: 'Geometrie')
|
||||||
|
List<IdValueColor>? geometry;
|
||||||
|
@JsonKey(name: 'Wertigkeit')
|
||||||
|
IdValueColor? value;
|
||||||
|
@JsonKey(name: 'Kosten')
|
||||||
|
IdValueColor? costs;
|
||||||
|
@JsonKey(name: 'Aufwand')
|
||||||
|
IdValueColor? effort;
|
||||||
|
@JsonKey(name: 'Pflegeaufwand')
|
||||||
|
IdValueColor? careEffort;
|
||||||
|
@JsonKey(name: 'Mindesflächengröße in m²')
|
||||||
|
int? minimalAreaSize;
|
||||||
|
@JsonKey(name: 'Boden')
|
||||||
|
List<IdValueColor>? ground;
|
||||||
|
|
||||||
|
factory LocationRequirements.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$LocationRequirementsFromJson(json);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$LocationRequirementsToJson(this);
|
||||||
|
}
|
2194
lib/src/entity/location_requirements/location_requirements.g.dart
Normal file
2194
lib/src/entity/location_requirements/location_requirements.g.dart
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,10 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
|
import '../../../../main.dart';
|
||||||
|
|
||||||
|
class LocationRequirementsRepository extends BaseDB {
|
||||||
|
@override
|
||||||
|
IsarCollection collection = isar.locationRequirements;
|
||||||
|
}
|
24
lib/src/entity/material/material.dart
Normal file
24
lib/src/entity/material/material.dart
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
part 'material.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable(explicitToJson: true)
|
||||||
|
@collection
|
||||||
|
class Material extends BaseEntity with EntityWithId {
|
||||||
|
Material();
|
||||||
|
|
||||||
|
@JsonKey(name: 'Name Material')
|
||||||
|
@Index(unique: true, hash: true)
|
||||||
|
String? name;
|
||||||
|
@JsonKey(name: 'Bezugsquelle')
|
||||||
|
List<IdValueColor>? sourceOfSupply;
|
||||||
|
@JsonKey(name: 'Durchschnittlicher Preis')
|
||||||
|
double? averagePrice;
|
||||||
|
|
||||||
|
factory Material.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$MaterialFromJson(json);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$MaterialToJson(this);
|
||||||
|
}
|
917
lib/src/entity/material/material.g.dart
Normal file
917
lib/src/entity/material/material.g.dart
Normal file
|
@ -0,0 +1,917 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'material.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// _IsarCollectionGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
// coverage:ignore-file
|
||||||
|
// ignore_for_file: duplicate_ignore, invalid_use_of_protected_member, lines_longer_than_80_chars, constant_identifier_names, avoid_js_rounded_ints, no_leading_underscores_for_local_identifiers, require_trailing_commas, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_in_if_null_operators, library_private_types_in_public_api, prefer_const_constructors
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
|
||||||
|
extension GetMaterialCollection on Isar {
|
||||||
|
IsarCollection<int, Material> get materials => this.collection();
|
||||||
|
}
|
||||||
|
|
||||||
|
const MaterialSchema = IsarGeneratedSchema(
|
||||||
|
schema: IsarSchema(
|
||||||
|
name: 'Material',
|
||||||
|
idName: 'id',
|
||||||
|
embedded: false,
|
||||||
|
properties: [
|
||||||
|
IsarPropertySchema(
|
||||||
|
name: 'name',
|
||||||
|
type: IsarType.string,
|
||||||
|
),
|
||||||
|
IsarPropertySchema(
|
||||||
|
name: 'sourceOfSupply',
|
||||||
|
type: IsarType.objectList,
|
||||||
|
target: 'IdValueColor',
|
||||||
|
),
|
||||||
|
IsarPropertySchema(
|
||||||
|
name: 'averagePrice',
|
||||||
|
type: IsarType.double,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
indexes: [
|
||||||
|
IsarIndexSchema(
|
||||||
|
name: 'name',
|
||||||
|
properties: [
|
||||||
|
"name",
|
||||||
|
],
|
||||||
|
unique: true,
|
||||||
|
hash: true,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
converter: IsarObjectConverter<int, Material>(
|
||||||
|
serialize: serializeMaterial,
|
||||||
|
deserialize: deserializeMaterial,
|
||||||
|
deserializeProperty: deserializeMaterialProp,
|
||||||
|
),
|
||||||
|
embeddedSchemas: [IdValueColorSchema],
|
||||||
|
);
|
||||||
|
|
||||||
|
@isarProtected
|
||||||
|
int serializeMaterial(IsarWriter writer, Material object) {
|
||||||
|
{
|
||||||
|
final value = object.name;
|
||||||
|
if (value == null) {
|
||||||
|
IsarCore.writeNull(writer, 1);
|
||||||
|
} else {
|
||||||
|
IsarCore.writeString(writer, 1, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
final list = object.sourceOfSupply;
|
||||||
|
if (list == null) {
|
||||||
|
IsarCore.writeNull(writer, 2);
|
||||||
|
} else {
|
||||||
|
final listWriter = IsarCore.beginList(writer, 2, list.length);
|
||||||
|
for (var i = 0; i < list.length; i++) {
|
||||||
|
{
|
||||||
|
final value = list[i];
|
||||||
|
final objectWriter = IsarCore.beginObject(listWriter, i);
|
||||||
|
serializeIdValueColor(objectWriter, value);
|
||||||
|
IsarCore.endObject(listWriter, objectWriter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
IsarCore.endList(writer, listWriter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
IsarCore.writeDouble(writer, 3, object.averagePrice ?? double.nan);
|
||||||
|
return object.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@isarProtected
|
||||||
|
Material deserializeMaterial(IsarReader reader) {
|
||||||
|
final object = Material();
|
||||||
|
object.name = IsarCore.readString(reader, 1);
|
||||||
|
{
|
||||||
|
final length = IsarCore.readList(reader, 2, IsarCore.readerPtrPtr);
|
||||||
|
{
|
||||||
|
final reader = IsarCore.readerPtr;
|
||||||
|
if (reader.isNull) {
|
||||||
|
object.sourceOfSupply = null;
|
||||||
|
} else {
|
||||||
|
final list =
|
||||||
|
List<IdValueColor>.filled(length, IdValueColor(), growable: true);
|
||||||
|
for (var i = 0; i < length; i++) {
|
||||||
|
{
|
||||||
|
final objectReader = IsarCore.readObject(reader, i);
|
||||||
|
if (objectReader.isNull) {
|
||||||
|
list[i] = IdValueColor();
|
||||||
|
} else {
|
||||||
|
final embedded = deserializeIdValueColor(objectReader);
|
||||||
|
IsarCore.freeReader(objectReader);
|
||||||
|
list[i] = embedded;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
IsarCore.freeReader(reader);
|
||||||
|
object.sourceOfSupply = list;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
final value = IsarCore.readDouble(reader, 3);
|
||||||
|
if (value.isNaN) {
|
||||||
|
object.averagePrice = null;
|
||||||
|
} else {
|
||||||
|
object.averagePrice = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
object.id = IsarCore.readId(reader);
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
@isarProtected
|
||||||
|
dynamic deserializeMaterialProp(IsarReader reader, int property) {
|
||||||
|
switch (property) {
|
||||||
|
case 1:
|
||||||
|
return IsarCore.readString(reader, 1);
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
final length = IsarCore.readList(reader, 2, IsarCore.readerPtrPtr);
|
||||||
|
{
|
||||||
|
final reader = IsarCore.readerPtr;
|
||||||
|
if (reader.isNull) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
final list = List<IdValueColor>.filled(length, IdValueColor(),
|
||||||
|
growable: true);
|
||||||
|
for (var i = 0; i < length; i++) {
|
||||||
|
{
|
||||||
|
final objectReader = IsarCore.readObject(reader, i);
|
||||||
|
if (objectReader.isNull) {
|
||||||
|
list[i] = IdValueColor();
|
||||||
|
} else {
|
||||||
|
final embedded = deserializeIdValueColor(objectReader);
|
||||||
|
IsarCore.freeReader(objectReader);
|
||||||
|
list[i] = embedded;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
IsarCore.freeReader(reader);
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
final value = IsarCore.readDouble(reader, 3);
|
||||||
|
if (value.isNaN) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 0:
|
||||||
|
return IsarCore.readId(reader);
|
||||||
|
default:
|
||||||
|
throw ArgumentError('Unknown property: $property');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sealed class _MaterialUpdate {
|
||||||
|
bool call({
|
||||||
|
required int id,
|
||||||
|
String? name,
|
||||||
|
double? averagePrice,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MaterialUpdateImpl implements _MaterialUpdate {
|
||||||
|
const _MaterialUpdateImpl(this.collection);
|
||||||
|
|
||||||
|
final IsarCollection<int, Material> collection;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool call({
|
||||||
|
required int id,
|
||||||
|
Object? name = ignore,
|
||||||
|
Object? averagePrice = ignore,
|
||||||
|
}) {
|
||||||
|
return collection.updateProperties([
|
||||||
|
id
|
||||||
|
], {
|
||||||
|
if (name != ignore) 1: name as String?,
|
||||||
|
if (averagePrice != ignore) 3: averagePrice as double?,
|
||||||
|
}) >
|
||||||
|
0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sealed class _MaterialUpdateAll {
|
||||||
|
int call({
|
||||||
|
required List<int> id,
|
||||||
|
String? name,
|
||||||
|
double? averagePrice,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MaterialUpdateAllImpl implements _MaterialUpdateAll {
|
||||||
|
const _MaterialUpdateAllImpl(this.collection);
|
||||||
|
|
||||||
|
final IsarCollection<int, Material> collection;
|
||||||
|
|
||||||
|
@override
|
||||||
|
int call({
|
||||||
|
required List<int> id,
|
||||||
|
Object? name = ignore,
|
||||||
|
Object? averagePrice = ignore,
|
||||||
|
}) {
|
||||||
|
return collection.updateProperties(id, {
|
||||||
|
if (name != ignore) 1: name as String?,
|
||||||
|
if (averagePrice != ignore) 3: averagePrice as double?,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension MaterialUpdate on IsarCollection<int, Material> {
|
||||||
|
_MaterialUpdate get update => _MaterialUpdateImpl(this);
|
||||||
|
|
||||||
|
_MaterialUpdateAll get updateAll => _MaterialUpdateAllImpl(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
sealed class _MaterialQueryUpdate {
|
||||||
|
int call({
|
||||||
|
String? name,
|
||||||
|
double? averagePrice,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MaterialQueryUpdateImpl implements _MaterialQueryUpdate {
|
||||||
|
const _MaterialQueryUpdateImpl(this.query, {this.limit});
|
||||||
|
|
||||||
|
final IsarQuery<Material> query;
|
||||||
|
final int? limit;
|
||||||
|
|
||||||
|
@override
|
||||||
|
int call({
|
||||||
|
Object? name = ignore,
|
||||||
|
Object? averagePrice = ignore,
|
||||||
|
}) {
|
||||||
|
return query.updateProperties(limit: limit, {
|
||||||
|
if (name != ignore) 1: name as String?,
|
||||||
|
if (averagePrice != ignore) 3: averagePrice as double?,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension MaterialQueryUpdate on IsarQuery<Material> {
|
||||||
|
_MaterialQueryUpdate get updateFirst =>
|
||||||
|
_MaterialQueryUpdateImpl(this, limit: 1);
|
||||||
|
|
||||||
|
_MaterialQueryUpdate get updateAll => _MaterialQueryUpdateImpl(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MaterialQueryBuilderUpdateImpl implements _MaterialQueryUpdate {
|
||||||
|
const _MaterialQueryBuilderUpdateImpl(this.query, {this.limit});
|
||||||
|
|
||||||
|
final QueryBuilder<Material, Material, QOperations> query;
|
||||||
|
final int? limit;
|
||||||
|
|
||||||
|
@override
|
||||||
|
int call({
|
||||||
|
Object? name = ignore,
|
||||||
|
Object? averagePrice = ignore,
|
||||||
|
}) {
|
||||||
|
final q = query.build();
|
||||||
|
try {
|
||||||
|
return q.updateProperties(limit: limit, {
|
||||||
|
if (name != ignore) 1: name as String?,
|
||||||
|
if (averagePrice != ignore) 3: averagePrice as double?,
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
q.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension MaterialQueryBuilderUpdate
|
||||||
|
on QueryBuilder<Material, Material, QOperations> {
|
||||||
|
_MaterialQueryUpdate get updateFirst =>
|
||||||
|
_MaterialQueryBuilderUpdateImpl(this, limit: 1);
|
||||||
|
|
||||||
|
_MaterialQueryUpdate get updateAll => _MaterialQueryBuilderUpdateImpl(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
extension MaterialQueryFilter
|
||||||
|
on QueryBuilder<Material, Material, QFilterCondition> {
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> nameIsNull() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(const IsNullCondition(property: 1));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> nameIsNotNull() {
|
||||||
|
return QueryBuilder.apply(not(), (query) {
|
||||||
|
return query.addFilterCondition(const IsNullCondition(property: 1));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> nameEqualTo(
|
||||||
|
String? value, {
|
||||||
|
bool caseSensitive = true,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
EqualCondition(
|
||||||
|
property: 1,
|
||||||
|
value: value,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> nameGreaterThan(
|
||||||
|
String? value, {
|
||||||
|
bool caseSensitive = true,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
GreaterCondition(
|
||||||
|
property: 1,
|
||||||
|
value: value,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition>
|
||||||
|
nameGreaterThanOrEqualTo(
|
||||||
|
String? value, {
|
||||||
|
bool caseSensitive = true,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
GreaterOrEqualCondition(
|
||||||
|
property: 1,
|
||||||
|
value: value,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> nameLessThan(
|
||||||
|
String? value, {
|
||||||
|
bool caseSensitive = true,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
LessCondition(
|
||||||
|
property: 1,
|
||||||
|
value: value,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> nameLessThanOrEqualTo(
|
||||||
|
String? value, {
|
||||||
|
bool caseSensitive = true,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
LessOrEqualCondition(
|
||||||
|
property: 1,
|
||||||
|
value: value,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> nameBetween(
|
||||||
|
String? lower,
|
||||||
|
String? upper, {
|
||||||
|
bool caseSensitive = true,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
BetweenCondition(
|
||||||
|
property: 1,
|
||||||
|
lower: lower,
|
||||||
|
upper: upper,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> nameStartsWith(
|
||||||
|
String value, {
|
||||||
|
bool caseSensitive = true,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
StartsWithCondition(
|
||||||
|
property: 1,
|
||||||
|
value: value,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> nameEndsWith(
|
||||||
|
String value, {
|
||||||
|
bool caseSensitive = true,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
EndsWithCondition(
|
||||||
|
property: 1,
|
||||||
|
value: value,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> nameContains(
|
||||||
|
String value,
|
||||||
|
{bool caseSensitive = true}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
ContainsCondition(
|
||||||
|
property: 1,
|
||||||
|
value: value,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> nameMatches(
|
||||||
|
String pattern,
|
||||||
|
{bool caseSensitive = true}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
MatchesCondition(
|
||||||
|
property: 1,
|
||||||
|
wildcard: pattern,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> nameIsEmpty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
const EqualCondition(
|
||||||
|
property: 1,
|
||||||
|
value: '',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> nameIsNotEmpty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
const GreaterCondition(
|
||||||
|
property: 1,
|
||||||
|
value: '',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition>
|
||||||
|
sourceOfSupplyIsNull() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(const IsNullCondition(property: 2));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition>
|
||||||
|
sourceOfSupplyIsNotNull() {
|
||||||
|
return QueryBuilder.apply(not(), (query) {
|
||||||
|
return query.addFilterCondition(const IsNullCondition(property: 2));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition>
|
||||||
|
sourceOfSupplyIsEmpty() {
|
||||||
|
return not().group(
|
||||||
|
(q) => q.sourceOfSupplyIsNull().or().sourceOfSupplyIsNotEmpty(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition>
|
||||||
|
sourceOfSupplyIsNotEmpty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
const GreaterOrEqualCondition(property: 2, value: null),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> averagePriceIsNull() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(const IsNullCondition(property: 3));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition>
|
||||||
|
averagePriceIsNotNull() {
|
||||||
|
return QueryBuilder.apply(not(), (query) {
|
||||||
|
return query.addFilterCondition(const IsNullCondition(property: 3));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> averagePriceEqualTo(
|
||||||
|
double? value, {
|
||||||
|
double epsilon = Filter.epsilon,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
EqualCondition(
|
||||||
|
property: 3,
|
||||||
|
value: value,
|
||||||
|
epsilon: epsilon,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition>
|
||||||
|
averagePriceGreaterThan(
|
||||||
|
double? value, {
|
||||||
|
double epsilon = Filter.epsilon,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
GreaterCondition(
|
||||||
|
property: 3,
|
||||||
|
value: value,
|
||||||
|
epsilon: epsilon,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition>
|
||||||
|
averagePriceGreaterThanOrEqualTo(
|
||||||
|
double? value, {
|
||||||
|
double epsilon = Filter.epsilon,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
GreaterOrEqualCondition(
|
||||||
|
property: 3,
|
||||||
|
value: value,
|
||||||
|
epsilon: epsilon,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> averagePriceLessThan(
|
||||||
|
double? value, {
|
||||||
|
double epsilon = Filter.epsilon,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
LessCondition(
|
||||||
|
property: 3,
|
||||||
|
value: value,
|
||||||
|
epsilon: epsilon,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition>
|
||||||
|
averagePriceLessThanOrEqualTo(
|
||||||
|
double? value, {
|
||||||
|
double epsilon = Filter.epsilon,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
LessOrEqualCondition(
|
||||||
|
property: 3,
|
||||||
|
value: value,
|
||||||
|
epsilon: epsilon,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> averagePriceBetween(
|
||||||
|
double? lower,
|
||||||
|
double? upper, {
|
||||||
|
double epsilon = Filter.epsilon,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
BetweenCondition(
|
||||||
|
property: 3,
|
||||||
|
lower: lower,
|
||||||
|
upper: upper,
|
||||||
|
epsilon: epsilon,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> idEqualTo(
|
||||||
|
int value,
|
||||||
|
) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
EqualCondition(
|
||||||
|
property: 0,
|
||||||
|
value: value,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> idGreaterThan(
|
||||||
|
int value,
|
||||||
|
) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
GreaterCondition(
|
||||||
|
property: 0,
|
||||||
|
value: value,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition>
|
||||||
|
idGreaterThanOrEqualTo(
|
||||||
|
int value,
|
||||||
|
) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
GreaterOrEqualCondition(
|
||||||
|
property: 0,
|
||||||
|
value: value,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> idLessThan(
|
||||||
|
int value,
|
||||||
|
) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
LessCondition(
|
||||||
|
property: 0,
|
||||||
|
value: value,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> idLessThanOrEqualTo(
|
||||||
|
int value,
|
||||||
|
) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
LessOrEqualCondition(
|
||||||
|
property: 0,
|
||||||
|
value: value,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterFilterCondition> idBetween(
|
||||||
|
int lower,
|
||||||
|
int upper,
|
||||||
|
) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(
|
||||||
|
BetweenCondition(
|
||||||
|
property: 0,
|
||||||
|
lower: lower,
|
||||||
|
upper: upper,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension MaterialQueryObject
|
||||||
|
on QueryBuilder<Material, Material, QFilterCondition> {}
|
||||||
|
|
||||||
|
extension MaterialQuerySortBy on QueryBuilder<Material, Material, QSortBy> {
|
||||||
|
QueryBuilder<Material, Material, QAfterSortBy> sortByName(
|
||||||
|
{bool caseSensitive = true}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addSortBy(
|
||||||
|
1,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterSortBy> sortByNameDesc(
|
||||||
|
{bool caseSensitive = true}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addSortBy(
|
||||||
|
1,
|
||||||
|
sort: Sort.desc,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterSortBy> sortByAveragePrice() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addSortBy(3);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterSortBy> sortByAveragePriceDesc() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addSortBy(3, sort: Sort.desc);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterSortBy> sortById() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addSortBy(0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterSortBy> sortByIdDesc() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addSortBy(0, sort: Sort.desc);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension MaterialQuerySortThenBy
|
||||||
|
on QueryBuilder<Material, Material, QSortThenBy> {
|
||||||
|
QueryBuilder<Material, Material, QAfterSortBy> thenByName(
|
||||||
|
{bool caseSensitive = true}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addSortBy(1, caseSensitive: caseSensitive);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterSortBy> thenByNameDesc(
|
||||||
|
{bool caseSensitive = true}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addSortBy(1, sort: Sort.desc, caseSensitive: caseSensitive);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterSortBy> thenByAveragePrice() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addSortBy(3);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterSortBy> thenByAveragePriceDesc() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addSortBy(3, sort: Sort.desc);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterSortBy> thenById() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addSortBy(0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterSortBy> thenByIdDesc() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addSortBy(0, sort: Sort.desc);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension MaterialQueryWhereDistinct
|
||||||
|
on QueryBuilder<Material, Material, QDistinct> {
|
||||||
|
QueryBuilder<Material, Material, QAfterDistinct> distinctByName(
|
||||||
|
{bool caseSensitive = true}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addDistinctBy(1, caseSensitive: caseSensitive);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, Material, QAfterDistinct> distinctByAveragePrice() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addDistinctBy(3);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension MaterialQueryProperty1
|
||||||
|
on QueryBuilder<Material, Material, QProperty> {
|
||||||
|
QueryBuilder<Material, String?, QAfterProperty> nameProperty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addProperty(1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, List<IdValueColor>?, QAfterProperty>
|
||||||
|
sourceOfSupplyProperty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addProperty(2);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, double?, QAfterProperty> averagePriceProperty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addProperty(3);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, int, QAfterProperty> idProperty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addProperty(0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension MaterialQueryProperty2<R>
|
||||||
|
on QueryBuilder<Material, R, QAfterProperty> {
|
||||||
|
QueryBuilder<Material, (R, String?), QAfterProperty> nameProperty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addProperty(1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, (R, List<IdValueColor>?), QAfterProperty>
|
||||||
|
sourceOfSupplyProperty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addProperty(2);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, (R, double?), QAfterProperty> averagePriceProperty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addProperty(3);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, (R, int), QAfterProperty> idProperty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addProperty(0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension MaterialQueryProperty3<R1, R2>
|
||||||
|
on QueryBuilder<Material, (R1, R2), QAfterProperty> {
|
||||||
|
QueryBuilder<Material, (R1, R2, String?), QOperations> nameProperty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addProperty(1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, (R1, R2, List<IdValueColor>?), QOperations>
|
||||||
|
sourceOfSupplyProperty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addProperty(2);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, (R1, R2, double?), QOperations>
|
||||||
|
averagePriceProperty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addProperty(3);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<Material, (R1, R2, int), QOperations> idProperty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addProperty(0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// JsonSerializableGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
Material _$MaterialFromJson(Map<String, dynamic> json) => Material()
|
||||||
|
..id = (json['id'] as num).toInt()
|
||||||
|
..name = json['Name Material'] as String?
|
||||||
|
..sourceOfSupply = (json['Bezugsquelle'] as List<dynamic>?)
|
||||||
|
?.map((e) => IdValueColor.fromJson(e as Map<String, dynamic>))
|
||||||
|
.toList()
|
||||||
|
..averagePrice = (json['Durchschnittlicher Preis'] as num?)?.toDouble();
|
||||||
|
|
||||||
|
Map<String, dynamic> _$MaterialToJson(Material instance) => <String, dynamic>{
|
||||||
|
'id': instance.id,
|
||||||
|
'Name Material': instance.name,
|
||||||
|
'Bezugsquelle': instance.sourceOfSupply?.map((e) => e.toJson()).toList(),
|
||||||
|
'Durchschnittlicher Preis': instance.averagePrice,
|
||||||
|
};
|
10
lib/src/entity/material/material_repository.dart
Normal file
10
lib/src/entity/material/material_repository.dart
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
|
import '../../../../main.dart';
|
||||||
|
|
||||||
|
class MaterialRepository extends BaseDB {
|
||||||
|
@override
|
||||||
|
IsarCollection collection = isar.materials;
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
import 'package:ambito/src/domain/entity/entities.dart';
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
|
@ -1,9 +1,10 @@
|
||||||
import 'package:ambito/src/domain/entity/entities.dart';
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
import '../../../../main.dart';
|
import '../../../../main.dart';
|
||||||
|
|
||||||
class MeasureRepository extends BaseDB {
|
class MeasureRepository extends BaseDB {
|
||||||
|
@override
|
||||||
IsarCollection collection = isar.measures;
|
IsarCollection collection = isar.measures;
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
import 'package:ambito/src/domain/entity/entities.dart';
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import 'package:ambito/src/domain/entity/entities.dart';
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
import '../../../../main.dart';
|
import '../../../../main.dart';
|
||||||
|
|
||||||
class MeasureCombinationRepository extends BaseDB {
|
class MeasureCombinationRepository extends BaseDB {
|
||||||
|
@override
|
||||||
IsarCollection collection = isar.measureCombinations;
|
IsarCollection collection = isar.measureCombinations;
|
||||||
}
|
}
|
30
lib/src/entity/number_factsheet/number_factsheet.dart
Normal file
30
lib/src/entity/number_factsheet/number_factsheet.dart
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
import 'package:ambito/src/entity/base_entity.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
part 'number_factsheet.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable(explicitToJson: true)
|
||||||
|
@collection
|
||||||
|
class NumberFactsheet extends BaseEntity with EntityWithId {
|
||||||
|
NumberFactsheet();
|
||||||
|
|
||||||
|
@JsonKey(name: 'Einzelmaßnahme(3. Ebene)')
|
||||||
|
@Index(unique: true, hash: true)
|
||||||
|
String? singleMeasure;
|
||||||
|
@JsonKey(name: '00 Maßnahmen_Main')
|
||||||
|
@Index()
|
||||||
|
String? measure;
|
||||||
|
@JsonKey(name: 'Formel')
|
||||||
|
String? formula;
|
||||||
|
@JsonKey(name: 'versandfertig als PDF abgelegt')
|
||||||
|
String? readyPDF;
|
||||||
|
@JsonKey(name: 'Nr.')
|
||||||
|
String? number;
|
||||||
|
@JsonKey(name: 'Priorität')
|
||||||
|
String? priority;
|
||||||
|
@JsonKey(
|
||||||
|
name:
|
||||||
|
'Maßnahmendatenblatt Qualitätskontrolle vollständig und ok (KM) (2402610)')
|
||||||
|
String? qmPassed;
|
||||||
|
}
|
2334
lib/src/entity/number_factsheet/number_factsheet.g.dart
Normal file
2334
lib/src/entity/number_factsheet/number_factsheet.g.dart
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,10 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
|
import '../../../../main.dart';
|
||||||
|
|
||||||
|
class NumberFactsheetRepository extends BaseDB {
|
||||||
|
@override
|
||||||
|
IsarCollection collection = isar.numberFactsheets;
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
import 'package:ambito/src/domain/entity/entities.dart';
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import 'package:ambito/src/domain/entity/entities.dart';
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
import '../../../../main.dart';
|
import '../../../../main.dart';
|
||||||
|
|
||||||
class OrganismRepository extends BaseDB {
|
class OrganismRepository extends BaseDB {
|
||||||
|
@override
|
||||||
IsarCollection collection = isar.organisms;
|
IsarCollection collection = isar.organisms;
|
||||||
}
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
part 'reference_implementation.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable()
|
||||||
|
@collection
|
||||||
|
class ReferenceImplementation extends BaseEntity with EntityWithId {
|
||||||
|
ReferenceImplementation();
|
||||||
|
|
||||||
|
@JsonKey(name: 'Liste aller Maßnahmen')
|
||||||
|
@Index()
|
||||||
|
String? listOfMeasures;
|
||||||
|
@JsonKey(name: 'Datum der Anlage')
|
||||||
|
String? dateStart;
|
||||||
|
@JsonKey(name: '06 Betriebsverzeichnis')
|
||||||
|
List<IdValue>? businessDirectory;
|
||||||
|
@JsonKey(name: '00 Maßnahmendatenbank')
|
||||||
|
List<IdValue>? measures;
|
||||||
|
@JsonKey(name: 'Größe in m²')
|
||||||
|
int? areaSize;
|
||||||
|
@JsonKey(name: 'Beschreibung')
|
||||||
|
String? description;
|
||||||
|
@JsonKey(name: 'Fotos')
|
||||||
|
List<FilePart> images = [];
|
||||||
|
@JsonKey(name: 'Gesamtkosten')
|
||||||
|
String? costsTotal;
|
||||||
|
@JsonKey(name: 'Link zum Geomarker')
|
||||||
|
String? linkToGeo;
|
||||||
|
@JsonKey(name: 'Status')
|
||||||
|
IdValueColor? status;
|
||||||
|
@JsonKey(name: 'Materialbezug ohne AmBiTo')
|
||||||
|
bool externalOrder = false;
|
||||||
|
@JsonKey(name: 'Anzahl Elemente')
|
||||||
|
String? elementCount;
|
||||||
|
@JsonKey(name: 'Bestellwert')
|
||||||
|
String? orderValue;
|
||||||
|
|
||||||
|
@JsonKey(name: 'Lieferung')
|
||||||
|
String? shippingCosts;
|
||||||
|
@JsonKey(name: 'Anlage')
|
||||||
|
String? constructionCosts;
|
||||||
|
@JsonKey(name: 'Sträucher Kosten')
|
||||||
|
String? shrubsCosts;
|
||||||
|
@JsonKey(name: 'Bäume Kosten')
|
||||||
|
String? treeCosts;
|
||||||
|
@JsonKey(name: 'Sträucher Pflanzkosten')
|
||||||
|
String? shrubsPlantingCosts;
|
||||||
|
@JsonKey(name: 'Bäume Pflanzkosten')
|
||||||
|
String? treePlantingCosts;
|
||||||
|
@JsonKey(name: 'Anzahl Sträucher')
|
||||||
|
String? shrubsCount;
|
||||||
|
@JsonKey(name: 'Anzahl Bäume')
|
||||||
|
String? treeCount;
|
||||||
|
@JsonKey(name: 'Anmerkung')
|
||||||
|
String? note;
|
||||||
|
@JsonKey(name: 'Bearbeitet von')
|
||||||
|
IdValue? editedBy;
|
||||||
|
|
||||||
|
factory ReferenceImplementation.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$ReferenceImplementationFromJson(json);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$ReferenceImplementationToJson(this);
|
||||||
|
}
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,10 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
|
import '../../../../main.dart';
|
||||||
|
|
||||||
|
class ReferenceImplementationRepository extends BaseDB {
|
||||||
|
@override
|
||||||
|
IsarCollection collection = isar.referenceImplementations;
|
||||||
|
}
|
40
lib/src/entity/service_provider/service_provider.dart
Normal file
40
lib/src/entity/service_provider/service_provider.dart
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
part 'service_provider.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable(explicitToJson: true)
|
||||||
|
@collection
|
||||||
|
class ServiceProvider extends BaseEntity with EntityWithId {
|
||||||
|
ServiceProvider();
|
||||||
|
|
||||||
|
@JsonKey(name: 'Name des Dienstleisters')
|
||||||
|
@Index()
|
||||||
|
String? name;
|
||||||
|
@JsonKey(name: 'Link Webseite')
|
||||||
|
String? website;
|
||||||
|
@JsonKey(name: 'Postleitzahl und Ort')
|
||||||
|
String? postalCodeAndCity;
|
||||||
|
@JsonKey(name: 'Telefonnummer')
|
||||||
|
String? phoneNumber;
|
||||||
|
@JsonKey(name: 'E-Mail')
|
||||||
|
String? email;
|
||||||
|
@JsonKey(name: 'Ansprechpersonen')
|
||||||
|
List<IdValue>? contactPerson;
|
||||||
|
@JsonKey(name: '00 Maßnahmen_Main')
|
||||||
|
List<IdValue>? measures;
|
||||||
|
@JsonKey(name: 'Straße und Hausnummer')
|
||||||
|
String? streetAddress;
|
||||||
|
@JsonKey(name: 'Region')
|
||||||
|
List<IdValueColor>? region;
|
||||||
|
@JsonKey(name: 'Art des Unternehmens')
|
||||||
|
List<IdValueColor>? businessType;
|
||||||
|
@JsonKey(name: 'Bio-zertifiziert?')
|
||||||
|
bool certifiedBio = false;
|
||||||
|
|
||||||
|
factory ServiceProvider.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$ServiceProviderFromJson(json);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$ServiceProviderToJson(this);
|
||||||
|
}
|
2648
lib/src/entity/service_provider/service_provider.g.dart
Normal file
2648
lib/src/entity/service_provider/service_provider.g.dart
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,27 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
part 'service_provider_contact_person.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable(explicitToJson: true)
|
||||||
|
@collection
|
||||||
|
class ServiceProviderContactPerson extends BaseEntity with EntityWithIdAndName {
|
||||||
|
ServiceProviderContactPerson();
|
||||||
|
|
||||||
|
@JsonKey(name: 'E-Mail')
|
||||||
|
String? email;
|
||||||
|
@JsonKey(name: 'Telefonnummer')
|
||||||
|
String? phoneNumber;
|
||||||
|
@JsonKey(name: 'Kurzbeschreibung')
|
||||||
|
String? description;
|
||||||
|
@JsonKey(name: '09 Dienstleister')
|
||||||
|
List<IdValue>? serviceProvider;
|
||||||
|
@JsonKey(name: '00 Maßnahmen_Main')
|
||||||
|
List<IdValue>? measures;
|
||||||
|
|
||||||
|
factory ServiceProviderContactPerson.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$ServiceProviderContactPersonFromJson(json);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$ServiceProviderContactPersonToJson(this);
|
||||||
|
}
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,10 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
|
import '../../../../main.dart';
|
||||||
|
|
||||||
|
class ServiceProviderContactPersonRepository extends BaseDB {
|
||||||
|
@override
|
||||||
|
IsarCollection collection = isar.serviceProviderContactPersons;
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
|
import '../../../../main.dart';
|
||||||
|
|
||||||
|
class ServiceProviderRepository extends BaseDB {
|
||||||
|
@override
|
||||||
|
IsarCollection collection = isar.serviceProviders;
|
||||||
|
}
|
43
lib/src/entity/source/source.dart
Normal file
43
lib/src/entity/source/source.dart
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
part 'source.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable(explicitToJson: true)
|
||||||
|
@collection
|
||||||
|
class Source extends BaseEntity with EntityWithId {
|
||||||
|
Source();
|
||||||
|
|
||||||
|
@JsonKey(name: 'Titel')
|
||||||
|
@Index()
|
||||||
|
String? title;
|
||||||
|
@JsonKey(name: '00 Maßnahmen_Main')
|
||||||
|
List<IdValue>? measures;
|
||||||
|
@JsonKey(name: 'Tag')
|
||||||
|
List<IdValueColor>? tags;
|
||||||
|
@JsonKey(name: 'Erscheinungsjahr')
|
||||||
|
String? publicationYear;
|
||||||
|
@JsonKey(name: 'Link Webseite')
|
||||||
|
String? url;
|
||||||
|
@JsonKey(name: 'DOI')
|
||||||
|
String? doi;
|
||||||
|
@JsonKey(name: 'Quellart')
|
||||||
|
List<IdValueColor>? typeOfSource;
|
||||||
|
@JsonKey(name: 'Datei')
|
||||||
|
List<FilePart>? files;
|
||||||
|
@JsonKey(name: 'Link zu Server')
|
||||||
|
String? serverUrl;
|
||||||
|
@JsonKey(name: 'Autor/in')
|
||||||
|
List<IdValueColor>? authors;
|
||||||
|
@JsonKey(name: 'Seiten')
|
||||||
|
String? pages;
|
||||||
|
@JsonKey(name: 'Verwendet in Maßnahmendatenblatt')
|
||||||
|
List<IdValue>? usedInFactsheet;
|
||||||
|
@JsonKey(name: 'Anmerkung')
|
||||||
|
String? note;
|
||||||
|
|
||||||
|
factory Source.fromJson(Map<String, dynamic> json) => _$SourceFromJson(json);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$SourceToJson(this);
|
||||||
|
}
|
2977
lib/src/entity/source/source.g.dart
Normal file
2977
lib/src/entity/source/source.g.dart
Normal file
File diff suppressed because it is too large
Load diff
10
lib/src/entity/source/source_repository.dart
Normal file
10
lib/src/entity/source/source_repository.dart
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:ambito/src/packages/ambito_db/base_db.dart';
|
||||||
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
|
import '../../../../main.dart';
|
||||||
|
|
||||||
|
class SourceRepository extends BaseDB {
|
||||||
|
@override
|
||||||
|
IsarCollection collection = isar.sources;
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
import 'package:ambito/src/domain/entity/entities.dart';
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import 'package:ambito/src/domain/entity/entities.dart';
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
import '../../../../main.dart';
|
import '../../../../main.dart';
|
||||||
import '../base_db.dart';
|
import '../../packages/ambito_db/base_db.dart';
|
||||||
|
|
||||||
class TreeTypeRepository extends BaseDB {
|
class TreeTypeRepository extends BaseDB {
|
||||||
|
@override
|
||||||
IsarCollection collection = isar.treeTypes;
|
IsarCollection collection = isar.treeTypes;
|
||||||
}
|
}
|
|
@ -1,65 +0,0 @@
|
||||||
import 'dart:convert';
|
|
||||||
|
|
||||||
import 'package:ambito/src/domain/entity/entities.dart';
|
|
||||||
import 'package:ambito/src/domain/entity/funding_program/funding_program.dart';
|
|
||||||
import 'package:ambito/src/packages/ambito_api/restclient.dart';
|
|
||||||
import 'package:ambito/src/packages/ambito_db/repositories/funding_program_repository.dart';
|
|
||||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
|
||||||
|
|
||||||
import '../ambito_db/base_db.dart';
|
|
||||||
|
|
||||||
class BaseApi {
|
|
||||||
Map tables = {};
|
|
||||||
|
|
||||||
init() {
|
|
||||||
tables = jsonDecode(dotenv.get('BASEROW_IDS'));
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<bool> getContent(String table) async {
|
|
||||||
init();
|
|
||||||
int tableId = tables[table] ?? 0;
|
|
||||||
if (tableId > 0) {
|
|
||||||
var response =
|
|
||||||
await RestClient().get('$tableId/?user_field_names=true&size=200');
|
|
||||||
if (response.statusCode == 200) {
|
|
||||||
var json = _jsonDecoded(response.body);
|
|
||||||
switch (table) {
|
|
||||||
case 'tree_type':
|
|
||||||
for (var treeType in json['results']) {
|
|
||||||
TreeTypeRepository().put(TreeType.fromJson(treeType));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'measure':
|
|
||||||
for (var measure in json['results']) {
|
|
||||||
MeasureRepository().put(Measure.fromJson(measure));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'measure_combination':
|
|
||||||
for (var measureCombination in json['results']) {
|
|
||||||
MeasureCombinationRepository()
|
|
||||||
.put(MeasureCombination.fromJson(measureCombination));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'organism':
|
|
||||||
for (var organism in json['results']) {
|
|
||||||
OrganismRepository().put(Organism.fromJson(organism));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'funding_program':
|
|
||||||
for (var fundingProgram in json['results']) {
|
|
||||||
FundingProgramRepository()
|
|
||||||
.put(FundingProgram.fromJson(fundingProgram));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
dynamic _jsonDecoded(String input) {
|
|
||||||
return jsonDecode(utf8.decode(input.runes.toList()));
|
|
||||||
}
|
|
||||||
}
|
|
103
lib/src/packages/ambito_api/base_api.dart
Normal file
103
lib/src/packages/ambito_api/base_api.dart
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:ambito/src/packages/ambito_api/restclient.dart';
|
||||||
|
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||||
|
|
||||||
|
import '../../../main.dart';
|
||||||
|
import '../ambito_db/base_db.dart';
|
||||||
|
|
||||||
|
class BaseApi {
|
||||||
|
Map tables = {};
|
||||||
|
|
||||||
|
init() {
|
||||||
|
// read table ids from .env file...
|
||||||
|
tables = jsonDecode(dotenv.get('BASEROW_IDS'));
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<bool> getContent(String table) async {
|
||||||
|
init();
|
||||||
|
int tableId = tables[table] ?? 0;
|
||||||
|
|
||||||
|
if (tableId <= 0) return false;
|
||||||
|
|
||||||
|
var response =
|
||||||
|
await RestClient().get('$tableId/?user_field_names=true&size=200');
|
||||||
|
if (response.statusCode != 200) return false;
|
||||||
|
|
||||||
|
var json = _jsonDecoded(response.body);
|
||||||
|
|
||||||
|
if (table == 'source') {
|
||||||
|
logger.d(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
var results = json['results'];
|
||||||
|
|
||||||
|
final repositoryMap = {
|
||||||
|
'tree_type': TreeTypeRepository().put,
|
||||||
|
'measure': MeasureRepository().put,
|
||||||
|
'measure_combination': MeasureCombinationRepository().put,
|
||||||
|
'organism': OrganismRepository().put,
|
||||||
|
'funding_program': FundingProgramRepository().put,
|
||||||
|
'location_requirements': LocationRequirementsRepository().put,
|
||||||
|
'reference_implementation': ReferenceImplementationRepository().put,
|
||||||
|
'business': BusinessRepository().put,
|
||||||
|
'service_provider': ServiceProviderRepository().put,
|
||||||
|
'service_provider_contact_person':
|
||||||
|
ServiceProviderContactPersonRepository().put,
|
||||||
|
'material': MaterialRepository().put,
|
||||||
|
'source': SourceRepository().put,
|
||||||
|
'experience_report': ExperienceReportRepository().put,
|
||||||
|
'approval_requirement': ApprovalRequirementRepository().put
|
||||||
|
};
|
||||||
|
|
||||||
|
var repositoryFunction = repositoryMap[table];
|
||||||
|
if (repositoryFunction == null) return false;
|
||||||
|
|
||||||
|
for (var item in results) {
|
||||||
|
var model = _createModelFromJson(table, item);
|
||||||
|
repositoryFunction(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
dynamic _createModelFromJson(String table, Map<String, dynamic> json) {
|
||||||
|
switch (table) {
|
||||||
|
case 'tree_type':
|
||||||
|
return TreeType.fromJson(json);
|
||||||
|
case 'measure':
|
||||||
|
return Measure.fromJson(json);
|
||||||
|
case 'measure_combination':
|
||||||
|
return MeasureCombination.fromJson(json);
|
||||||
|
case 'organism':
|
||||||
|
return Organism.fromJson(json);
|
||||||
|
case 'funding_program':
|
||||||
|
return FundingProgram.fromJson(json);
|
||||||
|
case 'location_requirements':
|
||||||
|
return LocationRequirements.fromJson(json);
|
||||||
|
case 'reference_implementation':
|
||||||
|
return ReferenceImplementation.fromJson(json);
|
||||||
|
case 'business':
|
||||||
|
return Business.fromJson(json);
|
||||||
|
case 'service_provider':
|
||||||
|
return ServiceProvider.fromJson(json);
|
||||||
|
case 'service_provider_contact_person':
|
||||||
|
return ServiceProviderContactPerson.fromJson(json);
|
||||||
|
case 'material':
|
||||||
|
return Material.fromJson(json);
|
||||||
|
case 'source':
|
||||||
|
return Source.fromJson(json);
|
||||||
|
case 'experience_report':
|
||||||
|
return ExperienceReport.fromJson(json);
|
||||||
|
case 'approval_requirement':
|
||||||
|
return ApprovalRequirement.fromJson(json);
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dynamic _jsonDecoded(String input) {
|
||||||
|
return jsonDecode(utf8.decode(input.runes.toList()));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,12 +1,42 @@
|
||||||
import 'package:ambito/src/domain/entity/entities.dart';
|
import 'package:ambito/src/entity/approval_requirement/approval_requirement.dart';
|
||||||
|
import 'package:ambito/src/entity/entities.dart';
|
||||||
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
|
||||||
import '../../../main.dart';
|
import '../../../main.dart';
|
||||||
|
|
||||||
export 'repositories/measure_combination_repository.dart';
|
export 'repositories/_repositories.dart';
|
||||||
export 'repositories/measure_repository.dart';
|
|
||||||
export 'repositories/organism_repository.dart';
|
class AmbitoIsarDB {
|
||||||
export 'repositories/tree_type_repository.dart';
|
init() async {
|
||||||
|
await Isar.initialize();
|
||||||
|
String dir = kIsWeb
|
||||||
|
? Isar.sqliteInMemory
|
||||||
|
: (await getApplicationDocumentsDirectory()).path;
|
||||||
|
const engine = kIsWeb ? IsarEngine.sqlite : IsarEngine.isar;
|
||||||
|
isar = Isar.open(
|
||||||
|
schemas: [
|
||||||
|
ApprovalRequirementSchema,
|
||||||
|
BusinessSchema,
|
||||||
|
FundingProgramSchema,
|
||||||
|
LocationRequirementsSchema,
|
||||||
|
MeasureSchema,
|
||||||
|
MeasureCombinationSchema,
|
||||||
|
NumberFactsheetSchema,
|
||||||
|
OrganismSchema,
|
||||||
|
ReferenceImplementationSchema,
|
||||||
|
ServiceProviderSchema,
|
||||||
|
ServiceProviderContactPersonSchema,
|
||||||
|
SourceSchema,
|
||||||
|
TreeTypeSchema,
|
||||||
|
],
|
||||||
|
directory: dir,
|
||||||
|
engine: engine,
|
||||||
|
inspector: true,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
abstract class BaseDB {
|
abstract class BaseDB {
|
||||||
abstract IsarCollection collection;
|
abstract IsarCollection collection;
|
||||||
|
@ -23,10 +53,12 @@ abstract class BaseDB {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
get(int id) {
|
// get entity by id
|
||||||
|
BaseEntity get(int id) {
|
||||||
return collection.get(id);
|
return collection.get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get all entities of selected collection
|
||||||
List<dynamic> getAll() {
|
List<dynamic> getAll() {
|
||||||
return collection.where().findAll();
|
return collection.where().findAll();
|
||||||
}
|
}
|
||||||
|
|
15
lib/src/packages/ambito_db/repositories/_repositories.dart
Normal file
15
lib/src/packages/ambito_db/repositories/_repositories.dart
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
export '../../../entity/approval_requirement/approval_requirement_repository.dart';
|
||||||
|
export '../../../entity/business/business_repository.dart';
|
||||||
|
export '../../../entity/experience_report/experience_report_repository.dart';
|
||||||
|
export '../../../entity/funding_program/funding_program_repository.dart';
|
||||||
|
export '../../../entity/location_requirements/location_requirements_repository.dart';
|
||||||
|
export '../../../entity/material/material_repository.dart';
|
||||||
|
export '../../../entity/measure/measure_repository.dart';
|
||||||
|
export '../../../entity/measure_combination/measure_combination_repository.dart';
|
||||||
|
export '../../../entity/number_factsheet/number_factsheet_repository.dart';
|
||||||
|
export '../../../entity/organism/organism_repository.dart';
|
||||||
|
export '../../../entity/reference_implementation/reference_implementation_repository.dart';
|
||||||
|
export '../../../entity/service_provider/service_provider_contact_person_repository.dart';
|
||||||
|
export '../../../entity/service_provider/service_provider_repository.dart';
|
||||||
|
export '../../../entity/source/source_repository.dart';
|
||||||
|
export '../../../entity/tree_type/tree_type_repository.dart';
|
|
@ -1,5 +1,4 @@
|
||||||
import 'package:ambito/src/extensions/extensions.dart';
|
import 'package:ambito/src/entity/measure/measure_repository.dart';
|
||||||
import 'package:ambito/src/packages/ambito_db/repositories/measure_repository.dart';
|
|
||||||
import 'package:ambito/src/widgets/form/fields/field_dropdown.dart';
|
import 'package:ambito/src/widgets/form/fields/field_dropdown.dart';
|
||||||
import 'package:ambito/src/widgets/form/fields/field_monthsrangepicker.dart';
|
import 'package:ambito/src/widgets/form/fields/field_monthsrangepicker.dart';
|
||||||
import 'package:ambito/src/widgets/form/form_widget.dart';
|
import 'package:ambito/src/widgets/form/form_widget.dart';
|
||||||
|
@ -10,7 +9,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_i18n/flutter_i18n.dart';
|
import 'package:flutter_i18n/flutter_i18n.dart';
|
||||||
|
|
||||||
import '../../../main.dart';
|
import '../../../main.dart';
|
||||||
import '../../domain/entity/entities.dart';
|
import '../../entity/entities.dart';
|
||||||
|
|
||||||
class ActionsPage extends StatefulWidget {
|
class ActionsPage extends StatefulWidget {
|
||||||
const ActionsPage({super.key});
|
const ActionsPage({super.key});
|
||||||
|
@ -46,8 +45,10 @@ class ActionsPageState extends State<ActionsPage> {
|
||||||
support = {};
|
support = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buildCards() {}
|
||||||
|
|
||||||
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
// Step 1: Collect all distinct values in each Set in a single loop
|
|
||||||
final updatedTypes = <String>{};
|
final updatedTypes = <String>{};
|
||||||
final updatedAreaTypes = <String>{};
|
final updatedAreaTypes = <String>{};
|
||||||
final updatedSupports = <String>{};
|
final updatedSupports = <String>{};
|
||||||
|
@ -71,7 +72,6 @@ class ActionsPageState extends State<ActionsPage> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 2: Update state with collected data in a single setState() call
|
|
||||||
setState(() {
|
setState(() {
|
||||||
type.addAll(updatedTypes);
|
type.addAll(updatedTypes);
|
||||||
areaType.addAll(updatedAreaTypes);
|
areaType.addAll(updatedAreaTypes);
|
||||||
|
@ -79,7 +79,6 @@ class ActionsPageState extends State<ActionsPage> {
|
||||||
months.addAll(updatedMonths);
|
months.addAll(updatedMonths);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Step 3: Generate the list of action cards with matching filters
|
|
||||||
final actionCards = massnahmen.map((massnahme) {
|
final actionCards = massnahmen.map((massnahme) {
|
||||||
final typeMatches =
|
final typeMatches =
|
||||||
filterType == null || massnahme.actionGroup?.value == filterType;
|
filterType == null || massnahme.actionGroup?.value == filterType;
|
||||||
|
@ -92,7 +91,6 @@ class ActionsPageState extends State<ActionsPage> {
|
||||||
?.any((aType) => aType.value == filterSupport) ??
|
?.any((aType) => aType.value == filterSupport) ??
|
||||||
false);
|
false);
|
||||||
|
|
||||||
// Update visibility in a single batch setState()
|
|
||||||
setState(() {
|
setState(() {
|
||||||
visible[massnahme.id] =
|
visible[massnahme.id] =
|
||||||
typeMatches && areaTypeMatches && supportMatches;
|
typeMatches && areaTypeMatches && supportMatches;
|
||||||
|
@ -101,21 +99,33 @@ class ActionsPageState extends State<ActionsPage> {
|
||||||
return getCard(context, massnahme);
|
return getCard(context, massnahme);
|
||||||
}).toList();
|
}).toList();
|
||||||
|
|
||||||
// Step 4: Return UI widget structure
|
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 32),
|
padding: const EdgeInsets.symmetric(horizontal: 32),
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
getSpacer(),
|
||||||
context.translate('page.actions.title'),
|
Center(
|
||||||
style: Theme.of(context).textTheme.headlineLarge,
|
child: SearchBar(
|
||||||
|
leading: const Icon(Icons.search),
|
||||||
|
onChanged: (value) {
|
||||||
|
for (Measure massnahme in massnahmen) {
|
||||||
|
if (!massnahme.name!.contains(value)) {
|
||||||
|
logger.d('$value not in ${massnahme.name}');
|
||||||
|
setState(() {
|
||||||
|
visible[massnahme.id] = false;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
logger.d('$value in ${massnahme.name}');
|
||||||
|
setState(() {
|
||||||
|
visible[massnahme.id] = true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
),
|
),
|
||||||
getSpacer(),
|
getSpacer(),
|
||||||
Text(
|
|
||||||
context.translate('page.actions.intro'),
|
|
||||||
style: Theme.of(context).textTheme.titleLarge,
|
|
||||||
),
|
|
||||||
getSpacer(),
|
getSpacer(),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Row(
|
child: Row(
|
||||||
|
@ -210,7 +220,7 @@ class ActionsPageState extends State<ActionsPage> {
|
||||||
|
|
||||||
for (int i = 1; i <= 12; i++) {
|
for (int i = 1; i <= 12; i++) {
|
||||||
monthsSorted
|
monthsSorted
|
||||||
.add(FlutterI18n.translate(context, 'general.lists.months.$i'));
|
.add(FlutterI18n.translate(context, '_general.lists.months.$i'));
|
||||||
}
|
}
|
||||||
|
|
||||||
fields.add(
|
fields.add(
|
||||||
|
@ -231,12 +241,12 @@ class ActionsPageState extends State<ActionsPage> {
|
||||||
|
|
||||||
Widget getCard(BuildContext context, Measure massnahme) {
|
Widget getCard(BuildContext context, Measure massnahme) {
|
||||||
final Map<String, Color> actionGroupColors = {
|
final Map<String, Color> actionGroupColors = {
|
||||||
'Baulelemente': const Color(0xffFFD269),
|
'Baulelemente': const Color(0xffFFD269).withOpacity(.4),
|
||||||
'Begrünung': const Color(0xff40DD74),
|
'Begrünung': const Color(0xff40DD74).withOpacity(.4),
|
||||||
'Bewirtschaftung': const Color(0xffBF72ED),
|
'Bewirtschaftung': const Color(0xffBF72ED).withOpacity(.4),
|
||||||
'Nisthilfe': const Color(0xffDAE3FD),
|
'Nisthilfe': const Color(0xffDAE3FD).withOpacity(.4),
|
||||||
'Pflanzung': const Color(0xff40D6E9),
|
'Pflanzung': const Color(0xff40D6E9).withOpacity(.4),
|
||||||
'Sondermaßnahmen': const Color(0xff689EF1),
|
'Sondermaßnahmen': const Color(0xff689EF1).withOpacity(.4),
|
||||||
};
|
};
|
||||||
|
|
||||||
Color background =
|
Color background =
|
||||||
|
@ -249,43 +259,65 @@ class ActionsPageState extends State<ActionsPage> {
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
width: 800,
|
width: 800,
|
||||||
child: Card(
|
child: Card(
|
||||||
color: background,
|
elevation: 2,
|
||||||
child: Padding(
|
color: Colors.white,
|
||||||
padding: const EdgeInsets.all(32),
|
child: ClipPath(
|
||||||
child: Row(
|
clipper: ShapeBorderClipper(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
shape: RoundedRectangleBorder(
|
||||||
children: [
|
borderRadius: BorderRadius.circular(8),
|
||||||
(image != null)
|
),
|
||||||
? image
|
),
|
||||||
: const SizedBox(
|
child: Container(
|
||||||
width: 300,
|
decoration: BoxDecoration(
|
||||||
height: 140,
|
border: Border(
|
||||||
),
|
left: BorderSide(
|
||||||
const SizedBox(
|
color: background,
|
||||||
width: 16,
|
width: 15,
|
||||||
),
|
|
||||||
Expanded(
|
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
Text(massnahme.name!,
|
|
||||||
style: Theme.of(context).textTheme.headlineSmall),
|
|
||||||
const SizedBox(
|
|
||||||
height: 8,
|
|
||||||
),
|
|
||||||
ExpandableText(
|
|
||||||
massnahme.factsheetDefinition ?? '',
|
|
||||||
maxLines: 3,
|
|
||||||
expandText: 'mehr',
|
|
||||||
collapseText: 'weniger',
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
)
|
),
|
||||||
],
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(32),
|
||||||
|
child: Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
(image != null)
|
||||||
|
? image
|
||||||
|
: const SizedBox(
|
||||||
|
width: 300,
|
||||||
|
height: 140,
|
||||||
|
),
|
||||||
|
const SizedBox(
|
||||||
|
width: 16,
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
massnahme.name!,
|
||||||
|
style: Theme.of(context).textTheme.headlineSmall,
|
||||||
|
),
|
||||||
|
const SizedBox(
|
||||||
|
height: 8,
|
||||||
|
),
|
||||||
|
ExpandableText(
|
||||||
|
style: Theme.of(context).textTheme.bodyLarge,
|
||||||
|
massnahme.factsheetDefinition ?? '',
|
||||||
|
maxLines: 4,
|
||||||
|
expandText: 'mehr',
|
||||||
|
collapseText: 'weniger',
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
/*child: ,*/
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -27,28 +27,21 @@ class StartPageState extends State<StartPage> {
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
leading: Row(
|
automaticallyImplyLeading: false,
|
||||||
children: [
|
leading: Padding(
|
||||||
const SizedBox(
|
padding: const EdgeInsets.all(8),
|
||||||
width: 30,
|
child: Hero(
|
||||||
|
tag: 'logo',
|
||||||
|
child: Image.asset(
|
||||||
|
'assets/images/logo_trans.png',
|
||||||
),
|
),
|
||||||
Hero(
|
),
|
||||||
tag: 'logo',
|
|
||||||
child: Image.asset(
|
|
||||||
'assets/images/logo_trans.png',
|
|
||||||
width: 50,
|
|
||||||
height: 50,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const SizedBox(
|
|
||||||
width: 30,
|
|
||||||
),
|
|
||||||
_linkButton('database'),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
leadingWidth: 400,
|
leadingWidth: 80,
|
||||||
toolbarHeight: 100,
|
centerTitle: true,
|
||||||
backgroundColor: Colors.white,
|
title: _linkButton('database'),
|
||||||
|
toolbarHeight: 80,
|
||||||
|
backgroundColor: Colors.grey.withOpacity(.4),
|
||||||
actions: [
|
actions: [
|
||||||
IconButton(onPressed: () {}, icon: const Icon(Icons.person)),
|
IconButton(onPressed: () {}, icon: const Icon(Icons.person)),
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
|
@ -75,12 +68,12 @@ class StartPageState extends State<StartPage> {
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _linkButton(String link) {
|
Widget _linkButton(String link) {
|
||||||
double fontSize = 24;
|
double fontSize = 20;
|
||||||
return TextButton(
|
return TextButton(
|
||||||
style: ButtonStyle(
|
style: ButtonStyle(
|
||||||
overlayColor:
|
overlayColor:
|
||||||
WidgetStateProperty.resolveWith<Color>((Set<WidgetState> states) {
|
WidgetStateProperty.resolveWith<Color>((Set<WidgetState> states) {
|
||||||
return Colors.white;
|
return Colors.transparent;
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
@ -93,9 +86,7 @@ class StartPageState extends State<StartPage> {
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: fontSize,
|
fontSize: fontSize,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
color: (activeLink == link)
|
color: (activeLink == link) ? Colors.grey.shade800 : Colors.black,
|
||||||
? Colors.grey.shade400
|
|
||||||
: Colors.grey.shade800,
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -19,6 +19,7 @@ class FieldDaterangepicker extends FormWidgetField {
|
||||||
final void Function(String?) onSelected;
|
final void Function(String?) onSelected;
|
||||||
final List<String> entries;
|
final List<String> entries;
|
||||||
|
|
||||||
|
@override
|
||||||
FormBuilderField get() {
|
FormBuilderField get() {
|
||||||
DateTime now = DateTime.now();
|
DateTime now = DateTime.now();
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ class FieldDropdown extends FormWidgetField {
|
||||||
final void Function(String?) onSelected;
|
final void Function(String?) onSelected;
|
||||||
final List<String> entries;
|
final List<String> entries;
|
||||||
|
|
||||||
|
@override
|
||||||
FormBuilderField get() {
|
FormBuilderField get() {
|
||||||
return FormBuilderDropdown<String>(
|
return FormBuilderDropdown<String>(
|
||||||
name: name,
|
name: name,
|
||||||
|
|
|
@ -19,6 +19,7 @@ class FieldMonthsRangepicker extends FormWidgetField {
|
||||||
final void Function(String?) onSelected;
|
final void Function(String?) onSelected;
|
||||||
final List<String> entries;
|
final List<String> entries;
|
||||||
|
|
||||||
|
@override
|
||||||
Widget get() {
|
Widget get() {
|
||||||
return SfDateRangePicker(
|
return SfDateRangePicker(
|
||||||
minDate: DateTime(2024, 1),
|
minDate: DateTime(2024, 1),
|
||||||
|
|
Loading…
Reference in a new issue