Fixes asn not being assigned

This commit is contained in:
Anton Stubenbord
2022-10-30 15:06:47 +01:00
parent c4ca344780
commit f522991059
12 changed files with 66 additions and 61 deletions

View File

@@ -3,7 +3,7 @@
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:flutter_paperless_mobile/core/type/json.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/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 { class DocumentModel extends Equatable {
static const idKey = 'id'; static const idKey = 'id';
@@ -86,7 +86,7 @@ class DocumentModel extends Equatable {
DocumentModel copyWith({ DocumentModel copyWith({
String? title, String? title,
String? content, String? content,
IdsQueryParameter? tags, TagsQuery? tags,
IdQueryParameter? documentType, IdQueryParameter? documentType,
IdQueryParameter? correspondent, IdQueryParameter? correspondent,
IdQueryParameter? storagePath, IdQueryParameter? storagePath,
@@ -121,7 +121,7 @@ class DocumentModel extends Equatable {
return query.id; return query.id;
} }
List<int> fromListQuery(IdsQueryParameter? query, List<int> previous) { List<int> fromListQuery(TagsQuery? query, List<int> previous) {
if (query == null) { if (query == null) {
return previous; return previous;
} }

View File

@@ -4,6 +4,7 @@ class AsnQuery extends IdQueryParameter {
const AsnQuery.fromId(super.id) : super.fromId(); const AsnQuery.fromId(super.id) : super.fromId();
const AsnQuery.unset() : super.unset(); const AsnQuery.unset() : super.unset();
const AsnQuery.notAssigned() : super.notAssigned(); const AsnQuery.notAssigned() : super.notAssigned();
const AsnQuery.anyAssigned() : super.anyAssigned();
@override @override
String get queryParameterKey => 'archive_serial_number'; String get queryParameterKey => 'archive_serial_number';

View File

@@ -4,6 +4,7 @@ class CorrespondentQuery extends IdQueryParameter {
const CorrespondentQuery.fromId(super.id) : super.fromId(); const CorrespondentQuery.fromId(super.id) : super.fromId();
const CorrespondentQuery.unset() : super.unset(); const CorrespondentQuery.unset() : super.unset();
const CorrespondentQuery.notAssigned() : super.notAssigned(); const CorrespondentQuery.notAssigned() : super.notAssigned();
const CorrespondentQuery.anyAssigned() : super.anyAssigned();
@override @override
String get queryParameterKey => 'correspondent'; String get queryParameterKey => 'correspondent';

View File

@@ -4,6 +4,7 @@ class DocumentTypeQuery extends IdQueryParameter {
const DocumentTypeQuery.fromId(super.id) : super.fromId(); const DocumentTypeQuery.fromId(super.id) : super.fromId();
const DocumentTypeQuery.unset() : super.unset(); const DocumentTypeQuery.unset() : super.unset();
const DocumentTypeQuery.notAssigned() : super.notAssigned(); const DocumentTypeQuery.notAssigned() : super.notAssigned();
const DocumentTypeQuery.anyAssigned() : super.anyAssigned();
@override @override
String get queryParameterKey => 'document_type'; String get queryParameterKey => 'document_type';

View File

@@ -2,24 +2,30 @@ import 'package:equatable/equatable.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
abstract class IdQueryParameter extends Equatable { abstract class IdQueryParameter extends Equatable {
final bool _onlyNotAssigned; final int? _assignmentStatus;
final int? _id; final int? _id;
const IdQueryParameter.notAssigned() const IdQueryParameter.notAssigned()
: _onlyNotAssigned = true, : _assignmentStatus = 1,
_id = null;
const IdQueryParameter.anyAssigned()
: _assignmentStatus = 0,
_id = null; _id = null;
const IdQueryParameter.fromId(int? id) const IdQueryParameter.fromId(int? id)
: _onlyNotAssigned = false, : _assignmentStatus = null,
_id = id; _id = id;
const IdQueryParameter.unset() : this.fromId(null); 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; int? get id => _id;
@@ -27,13 +33,15 @@ abstract class IdQueryParameter extends Equatable {
String get queryParameterKey; String get queryParameterKey;
String toQueryParameter() { String toQueryParameter() {
if (onlyNotAssigned) { if (onlyNotAssigned || onlyAssigned) {
return "&${queryParameterKey}__isnull=1"; return "&${queryParameterKey}__isnull=$_assignmentStatus";
} }
if (isSet) {
return isUnset ? "" : "&${queryParameterKey}__id=$id"; return "${queryParameterKey}__id=$id";
}
return "";
} }
@override @override
List<Object?> get props => [_onlyNotAssigned, _id]; List<Object?> get props => [_assignmentStatus, _id];
} }

View File

@@ -1,29 +0,0 @@
import 'package:equatable/equatable.dart';
abstract class IdsQueryParameter with EquatableMixin {
final List<int> _ids;
final bool onlyNotAssigned;
const IdsQueryParameter.fromIds(List<int> 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<int> get ids => _ids;
String toQueryParameter();
@override
List<Object?> get props => [onlyNotAssigned, _ids];
}

View File

@@ -4,6 +4,7 @@ class StoragePathQuery extends IdQueryParameter {
const StoragePathQuery.fromId(super.id) : super.fromId(); const StoragePathQuery.fromId(super.id) : super.fromId();
const StoragePathQuery.unset() : super.unset(); const StoragePathQuery.unset() : super.unset();
const StoragePathQuery.notAssigned() : super.notAssigned(); const StoragePathQuery.notAssigned() : super.notAssigned();
const StoragePathQuery.anyAssigned() : super.anyAssigned();
@override @override
String get queryParameterKey => 'storage_path'; String get queryParameterKey => 'storage_path';

View File

@@ -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 { class TagsQuery with EquatableMixin {
const TagsQuery.fromIds(super.ids) : super.fromIds(); final List<int> _ids;
const TagsQuery.unset() : super.unset(); final bool? _isTagged;
const TagsQuery.notAssigned() : super.notAssigned();
const TagsQuery.fromIds(List<int> 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<int> get ids => _ids;
@override
String toQueryParameter() { String toQueryParameter() {
if (onlyNotAssigned) { if (onlyNotAssigned || onlyAssigned) {
return '&is_tagged=false'; return '&is_tagged=$_isTagged';
} }
return isUnset ? "" : '&tags__id__all=${ids.join(',')}'; return isUnset ? "" : '&tags__id__all=${ids.join(',')}';
} }
@override
List<Object?> get props => [_isTagged, _ids];
} }

View File

@@ -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.model.dart';
import 'package:flutter_paperless_mobile/features/documents/model/document_filter.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/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/paged_search_result.dart';
import 'package:flutter_paperless_mobile/features/documents/model/similar_document.model.dart'; import 'package:flutter_paperless_mobile/features/documents/model/similar_document.model.dart';

View File

@@ -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_filter.dart';
import 'package:flutter_paperless_mobile/features/documents/model/document_meta_data.model.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/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_field.dart';
import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/sort_order.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'; import 'package:flutter_paperless_mobile/features/documents/model/similar_document.model.dart';
@@ -188,6 +189,7 @@ class DocumentRepositoryImpl implements DocumentRepository {
const DocumentFilter asnQueryFilter = DocumentFilter( const DocumentFilter asnQueryFilter = DocumentFilter(
sortField: SortField.archiveSerialNumber, sortField: SortField.archiveSerialNumber,
sortOrder: SortOrder.descending, sortOrder: SortOrder.descending,
asn: AsnQuery.anyAssigned(),
page: 1, page: 1,
pageSize: 1, pageSize: 1,
); );

View File

@@ -5,19 +5,18 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:flutter_paperless_mobile/di_initializer.dart'; import 'package:flutter_paperless_mobile/di_initializer.dart';
import 'package:flutter_paperless_mobile/extensions/flutter_extensions.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/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/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/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/storage_path_query.dart';
import 'package:flutter_paperless_mobile/features/documents/model/query_parameters/tags_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/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/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/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/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/document_type/view/pages/add_document_type_page.dart';
import 'package:flutter_paperless_mobile/features/labels/storage_path/bloc/storage_path_cubit.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/generated/l10n.dart';
import 'package:flutter_paperless_mobile/util.dart'; import 'package:flutter_paperless_mobile/util.dart';
import 'package:form_builder_validators/form_builder_validators.dart'; import 'package:form_builder_validators/form_builder_validators.dart';
import 'package:image/image.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
class DocumentEditPage extends StatefulWidget { class DocumentEditPage extends StatefulWidget {
@@ -73,7 +71,7 @@ class _DocumentEditPageState extends State<DocumentEditPage> {
documentType: values[fkDocumentType] as IdQueryParameter, documentType: values[fkDocumentType] as IdQueryParameter,
correspondent: values[fkCorrespondent] as IdQueryParameter, correspondent: values[fkCorrespondent] as IdQueryParameter,
storagePath: values[fkStoragePath] as IdQueryParameter, storagePath: values[fkStoragePath] as IdQueryParameter,
tags: values[fkTags] as IdsQueryParameter, tags: values[fkTags] as TagsQuery,
); );
setState(() { setState(() {
_isSubmitLoading = true; _isSubmitLoading = true;

View File

@@ -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/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/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/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/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/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/bloc/documents_cubit.dart';
@@ -199,7 +199,7 @@ class _DocumentUploadPageState extends State<DocumentUploadPage> {
(_formKey.currentState?.value[DocumentModel.documentTypeKey] as IdQueryParameter).id, (_formKey.currentState?.value[DocumentModel.documentTypeKey] as IdQueryParameter).id,
correspondent: correspondent:
(_formKey.currentState?.value[DocumentModel.correspondentKey] as IdQueryParameter).id, (_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?), createdAt: (_formKey.currentState?.value[DocumentModel.createdKey] as DateTime?),
); );
setState(() { setState(() {