From f522991059ec450f90966a23a04c4f1f9578052f Mon Sep 17 00:00:00 2001 From: Anton Stubenbord Date: Sun, 30 Oct 2022 15:06:47 +0100 Subject: [PATCH] Fixes asn not being assigned --- .../documents/model/document.model.dart | 6 +-- .../model/query_parameters/asn_query.dart | 1 + .../query_parameters/correspondent_query.dart | 1 + .../query_parameters/document_type_query.dart | 1 + .../query_parameters/id_query_parameter.dart | 30 ++++++++------ .../query_parameters/ids_query_parameter.dart | 29 -------------- .../query_parameters/storage_path_query.dart | 1 + .../model/query_parameters/tags_query.dart | 39 +++++++++++++++---- .../repository/document_repository.dart | 1 - .../repository/document_repository_impl.dart | 2 + .../view/pages/document_edit_page.dart | 12 +++--- .../scan/view/document_upload_page.dart | 4 +- 12 files changed, 66 insertions(+), 61 deletions(-) delete mode 100644 lib/features/documents/model/query_parameters/ids_query_parameter.dart diff --git a/lib/features/documents/model/document.model.dart b/lib/features/documents/model/document.model.dart index 8eae4f1..b180deb 100644 --- a/lib/features/documents/model/document.model.dart +++ b/lib/features/documents/model/document.model.dart @@ -3,7 +3,7 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_paperless_mobile/core/type/json.dart'; import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/id_query_parameter.dart'; -import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/ids_query_parameter.dart'; +import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/tags_query.dart'; class DocumentModel extends Equatable { static const idKey = 'id'; @@ -86,7 +86,7 @@ class DocumentModel extends Equatable { DocumentModel copyWith({ String? title, String? content, - IdsQueryParameter? tags, + TagsQuery? tags, IdQueryParameter? documentType, IdQueryParameter? correspondent, IdQueryParameter? storagePath, @@ -121,7 +121,7 @@ class DocumentModel extends Equatable { return query.id; } - List fromListQuery(IdsQueryParameter? query, List previous) { + List fromListQuery(TagsQuery? query, List previous) { if (query == null) { return previous; } diff --git a/lib/features/documents/model/query_parameters/asn_query.dart b/lib/features/documents/model/query_parameters/asn_query.dart index 364bb8d..9379428 100644 --- a/lib/features/documents/model/query_parameters/asn_query.dart +++ b/lib/features/documents/model/query_parameters/asn_query.dart @@ -4,6 +4,7 @@ class AsnQuery extends IdQueryParameter { const AsnQuery.fromId(super.id) : super.fromId(); const AsnQuery.unset() : super.unset(); const AsnQuery.notAssigned() : super.notAssigned(); + const AsnQuery.anyAssigned() : super.anyAssigned(); @override String get queryParameterKey => 'archive_serial_number'; diff --git a/lib/features/documents/model/query_parameters/correspondent_query.dart b/lib/features/documents/model/query_parameters/correspondent_query.dart index 2704fc7..0369590 100644 --- a/lib/features/documents/model/query_parameters/correspondent_query.dart +++ b/lib/features/documents/model/query_parameters/correspondent_query.dart @@ -4,6 +4,7 @@ class CorrespondentQuery extends IdQueryParameter { const CorrespondentQuery.fromId(super.id) : super.fromId(); const CorrespondentQuery.unset() : super.unset(); const CorrespondentQuery.notAssigned() : super.notAssigned(); + const CorrespondentQuery.anyAssigned() : super.anyAssigned(); @override String get queryParameterKey => 'correspondent'; diff --git a/lib/features/documents/model/query_parameters/document_type_query.dart b/lib/features/documents/model/query_parameters/document_type_query.dart index 874324e..0a88595 100644 --- a/lib/features/documents/model/query_parameters/document_type_query.dart +++ b/lib/features/documents/model/query_parameters/document_type_query.dart @@ -4,6 +4,7 @@ class DocumentTypeQuery extends IdQueryParameter { const DocumentTypeQuery.fromId(super.id) : super.fromId(); const DocumentTypeQuery.unset() : super.unset(); const DocumentTypeQuery.notAssigned() : super.notAssigned(); + const DocumentTypeQuery.anyAssigned() : super.anyAssigned(); @override String get queryParameterKey => 'document_type'; diff --git a/lib/features/documents/model/query_parameters/id_query_parameter.dart b/lib/features/documents/model/query_parameters/id_query_parameter.dart index 2348b89..8605d94 100644 --- a/lib/features/documents/model/query_parameters/id_query_parameter.dart +++ b/lib/features/documents/model/query_parameters/id_query_parameter.dart @@ -2,24 +2,30 @@ import 'package:equatable/equatable.dart'; import 'package:flutter/widgets.dart'; abstract class IdQueryParameter extends Equatable { - final bool _onlyNotAssigned; + final int? _assignmentStatus; final int? _id; const IdQueryParameter.notAssigned() - : _onlyNotAssigned = true, + : _assignmentStatus = 1, + _id = null; + + const IdQueryParameter.anyAssigned() + : _assignmentStatus = 0, _id = null; const IdQueryParameter.fromId(int? id) - : _onlyNotAssigned = false, + : _assignmentStatus = null, _id = id; const IdQueryParameter.unset() : this.fromId(null); - bool get isUnset => _id == null && _onlyNotAssigned == false; + bool get isUnset => _id == null && _assignmentStatus == null; - bool get isSet => _id != null && _onlyNotAssigned == false; + bool get isSet => _id != null && _assignmentStatus == null; - bool get onlyNotAssigned => _onlyNotAssigned; + bool get onlyNotAssigned => _assignmentStatus == 1; + + bool get onlyAssigned => _assignmentStatus == 0; int? get id => _id; @@ -27,13 +33,15 @@ abstract class IdQueryParameter extends Equatable { String get queryParameterKey; String toQueryParameter() { - if (onlyNotAssigned) { - return "&${queryParameterKey}__isnull=1"; + if (onlyNotAssigned || onlyAssigned) { + return "&${queryParameterKey}__isnull=$_assignmentStatus"; } - - return isUnset ? "" : "&${queryParameterKey}__id=$id"; + if (isSet) { + return "${queryParameterKey}__id=$id"; + } + return ""; } @override - List get props => [_onlyNotAssigned, _id]; + List get props => [_assignmentStatus, _id]; } diff --git a/lib/features/documents/model/query_parameters/ids_query_parameter.dart b/lib/features/documents/model/query_parameters/ids_query_parameter.dart deleted file mode 100644 index ae3e56c..0000000 --- a/lib/features/documents/model/query_parameters/ids_query_parameter.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:equatable/equatable.dart'; - -abstract class IdsQueryParameter with EquatableMixin { - final List _ids; - final bool onlyNotAssigned; - - const IdsQueryParameter.fromIds(List ids) - : onlyNotAssigned = false, - _ids = ids; - - const IdsQueryParameter.notAssigned() - : onlyNotAssigned = true, - _ids = const []; - - const IdsQueryParameter.unset() - : onlyNotAssigned = false, - _ids = const []; - - bool get isUnset => _ids.isEmpty && onlyNotAssigned == false; - - bool get isSet => _ids.isNotEmpty && onlyNotAssigned == false; - - List get ids => _ids; - - String toQueryParameter(); - - @override - List get props => [onlyNotAssigned, _ids]; -} diff --git a/lib/features/documents/model/query_parameters/storage_path_query.dart b/lib/features/documents/model/query_parameters/storage_path_query.dart index 3f703a1..4becd0d 100644 --- a/lib/features/documents/model/query_parameters/storage_path_query.dart +++ b/lib/features/documents/model/query_parameters/storage_path_query.dart @@ -4,6 +4,7 @@ class StoragePathQuery extends IdQueryParameter { const StoragePathQuery.fromId(super.id) : super.fromId(); const StoragePathQuery.unset() : super.unset(); const StoragePathQuery.notAssigned() : super.notAssigned(); + const StoragePathQuery.anyAssigned() : super.anyAssigned(); @override String get queryParameterKey => 'storage_path'; diff --git a/lib/features/documents/model/query_parameters/tags_query.dart b/lib/features/documents/model/query_parameters/tags_query.dart index 0ea7a95..c92a7da 100644 --- a/lib/features/documents/model/query_parameters/tags_query.dart +++ b/lib/features/documents/model/query_parameters/tags_query.dart @@ -1,15 +1,38 @@ -import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/ids_query_parameter.dart'; +import 'package:equatable/equatable.dart'; -class TagsQuery extends IdsQueryParameter { - const TagsQuery.fromIds(super.ids) : super.fromIds(); - const TagsQuery.unset() : super.unset(); - const TagsQuery.notAssigned() : super.notAssigned(); +class TagsQuery with EquatableMixin { + final List _ids; + final bool? _isTagged; + + const TagsQuery.fromIds(List ids) + : _isTagged = null, + _ids = ids; + + const TagsQuery.anyAssigned() + : _isTagged = true, + _ids = const []; + + const TagsQuery.notAssigned() + : _isTagged = false, + _ids = const []; + + const TagsQuery.unset() : this.fromIds(const []); + + bool get onlyNotAssigned => _isTagged == false; + bool get onlyAssigned => _isTagged == true; + + bool get isUnset => _ids.isEmpty && _isTagged == null; + bool get isSet => _ids.isNotEmpty && _isTagged == null; + + List get ids => _ids; - @override String toQueryParameter() { - if (onlyNotAssigned) { - return '&is_tagged=false'; + if (onlyNotAssigned || onlyAssigned) { + return '&is_tagged=$_isTagged'; } return isUnset ? "" : '&tags__id__all=${ids.join(',')}'; } + + @override + List get props => [_isTagged, _ids]; } diff --git a/lib/features/documents/repository/document_repository.dart b/lib/features/documents/repository/document_repository.dart index 1a72abb..eefbcc5 100644 --- a/lib/features/documents/repository/document_repository.dart +++ b/lib/features/documents/repository/document_repository.dart @@ -3,7 +3,6 @@ import 'dart:typed_data'; import 'package:flutter_paperless_mobile/features/documents/model/document.model.dart'; import 'package:flutter_paperless_mobile/features/documents/model/document_filter.dart'; import 'package:flutter_paperless_mobile/features/documents/model/document_meta_data.model.dart'; -import 'package:flutter_paperless_mobile/features/documents/model/saved_view.model.dart'; import 'package:flutter_paperless_mobile/features/documents/model/paged_search_result.dart'; import 'package:flutter_paperless_mobile/features/documents/model/similar_document.model.dart'; diff --git a/lib/features/documents/repository/document_repository_impl.dart b/lib/features/documents/repository/document_repository_impl.dart index 398ea7e..bb9d649 100644 --- a/lib/features/documents/repository/document_repository_impl.dart +++ b/lib/features/documents/repository/document_repository_impl.dart @@ -16,6 +16,7 @@ import 'package:flutter_paperless_mobile/features/documents/model/document.model import 'package:flutter_paperless_mobile/features/documents/model/document_filter.dart'; import 'package:flutter_paperless_mobile/features/documents/model/document_meta_data.model.dart'; import 'package:flutter_paperless_mobile/features/documents/model/paged_search_result.dart'; +import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/asn_query.dart'; import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/sort_field.dart'; import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/sort_order.dart'; import 'package:flutter_paperless_mobile/features/documents/model/similar_document.model.dart'; @@ -188,6 +189,7 @@ class DocumentRepositoryImpl implements DocumentRepository { const DocumentFilter asnQueryFilter = DocumentFilter( sortField: SortField.archiveSerialNumber, sortOrder: SortOrder.descending, + asn: AsnQuery.anyAssigned(), page: 1, pageSize: 1, ); diff --git a/lib/features/documents/view/pages/document_edit_page.dart b/lib/features/documents/view/pages/document_edit_page.dart index c07f6d5..201a074 100644 --- a/lib/features/documents/view/pages/document_edit_page.dart +++ b/lib/features/documents/view/pages/document_edit_page.dart @@ -5,19 +5,18 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart'; import 'package:flutter_paperless_mobile/di_initializer.dart'; import 'package:flutter_paperless_mobile/extensions/flutter_extensions.dart'; +import 'package:flutter_paperless_mobile/features/documents/bloc/documents_cubit.dart'; +import 'package:flutter_paperless_mobile/features/documents/model/document.model.dart'; import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/correspondent_query.dart'; import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/document_type_query.dart'; import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/id_query_parameter.dart'; -import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/ids_query_parameter.dart'; import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/storage_path_query.dart'; import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/tags_query.dart'; -import 'package:flutter_paperless_mobile/features/labels/correspondent/bloc/correspondents_cubit.dart'; -import 'package:flutter_paperless_mobile/features/labels/document_type/bloc/document_type_cubit.dart'; -import 'package:flutter_paperless_mobile/features/documents/bloc/documents_cubit.dart'; -import 'package:flutter_paperless_mobile/features/documents/model/document.model.dart'; import 'package:flutter_paperless_mobile/features/documents/repository/document_repository.dart'; +import 'package:flutter_paperless_mobile/features/labels/correspondent/bloc/correspondents_cubit.dart'; import 'package:flutter_paperless_mobile/features/labels/correspondent/model/correspondent.model.dart'; import 'package:flutter_paperless_mobile/features/labels/correspondent/view/pages/add_correspondent_page.dart'; +import 'package:flutter_paperless_mobile/features/labels/document_type/bloc/document_type_cubit.dart'; import 'package:flutter_paperless_mobile/features/labels/document_type/model/document_type.model.dart'; import 'package:flutter_paperless_mobile/features/labels/document_type/view/pages/add_document_type_page.dart'; import 'package:flutter_paperless_mobile/features/labels/storage_path/bloc/storage_path_cubit.dart'; @@ -28,7 +27,6 @@ import 'package:flutter_paperless_mobile/features/labels/view/widgets/label_form import 'package:flutter_paperless_mobile/generated/l10n.dart'; import 'package:flutter_paperless_mobile/util.dart'; import 'package:form_builder_validators/form_builder_validators.dart'; -import 'package:image/image.dart'; import 'package:intl/intl.dart'; class DocumentEditPage extends StatefulWidget { @@ -73,7 +71,7 @@ class _DocumentEditPageState extends State { documentType: values[fkDocumentType] as IdQueryParameter, correspondent: values[fkCorrespondent] as IdQueryParameter, storagePath: values[fkStoragePath] as IdQueryParameter, - tags: values[fkTags] as IdsQueryParameter, + tags: values[fkTags] as TagsQuery, ); setState(() { _isSubmitLoading = true; diff --git a/lib/features/scan/view/document_upload_page.dart b/lib/features/scan/view/document_upload_page.dart index 340997f..6b487ca 100644 --- a/lib/features/scan/view/document_upload_page.dart +++ b/lib/features/scan/view/document_upload_page.dart @@ -10,7 +10,7 @@ import 'package:flutter_paperless_mobile/features/documents/model/document.model import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/correspondent_query.dart'; import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/document_type_query.dart'; import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/id_query_parameter.dart'; -import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/ids_query_parameter.dart'; +import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/tags_query.dart'; import 'package:flutter_paperless_mobile/features/labels/correspondent/bloc/correspondents_cubit.dart'; import 'package:flutter_paperless_mobile/features/labels/document_type/bloc/document_type_cubit.dart'; import 'package:flutter_paperless_mobile/features/documents/bloc/documents_cubit.dart'; @@ -199,7 +199,7 @@ class _DocumentUploadPageState extends State { (_formKey.currentState?.value[DocumentModel.documentTypeKey] as IdQueryParameter).id, correspondent: (_formKey.currentState?.value[DocumentModel.correspondentKey] as IdQueryParameter).id, - tags: (_formKey.currentState?.value[DocumentModel.tagsKey] as IdsQueryParameter).ids, + tags: (_formKey.currentState?.value[DocumentModel.tagsKey] as TagsQuery).ids, createdAt: (_formKey.currentState?.value[DocumentModel.createdKey] as DateTime?), ); setState(() {