Merge branch 'develop'

This commit is contained in:
Hillel Coren 2024-01-15 13:52:43 +02:00
commit 50f76f914e
11 changed files with 23 additions and 19 deletions

View File

@ -432,8 +432,7 @@ abstract class ClientEntity extends Object
response = clientA!.idNumber.compareTo(clientB!.idNumber); response = clientA!.idNumber.compareTo(clientB!.idNumber);
break; break;
case ClientFields.number: case ClientFields.number:
response = compareNatural( response = compareNatural(clientA!.number, clientB!.number);
clientA!.number.toLowerCase(), clientB!.number.toLowerCase());
break; break;
case ClientFields.website: case ClientFields.website:
response = clientA!.website response = clientA!.website

View File

@ -468,8 +468,7 @@ abstract class ExpenseEntity extends Object
expenseA!.documents.length.compareTo(expenseB!.documents.length); expenseA!.documents.length.compareTo(expenseB!.documents.length);
break; break;
case ExpenseFields.number: case ExpenseFields.number:
response = compareNatural( response = compareNatural(expenseA!.number, expenseB!.number);
expenseA!.number.toLowerCase(), expenseB!.number.toLowerCase());
break; break;
case ExpenseFields.privateNotes: case ExpenseFields.privateNotes:
response = expenseA!.privateNotes.compareTo(expenseB!.privateNotes); response = expenseA!.privateNotes.compareTo(expenseB!.privateNotes);

View File

@ -728,8 +728,7 @@ abstract class InvoiceEntity extends Object
invoiceBNumber.startsWith(recurringPrefix!) invoiceBNumber.startsWith(recurringPrefix!)
? invoiceBNumber.replaceFirst(recurringPrefix, '') ? invoiceBNumber.replaceFirst(recurringPrefix, '')
: invoiceBNumber; : invoiceBNumber;
response = compareNatural( response = compareNatural(invoiceANumber, invoiceBNumber);
invoiceANumber.toLowerCase(), invoiceBNumber.toLowerCase());
break; break;
case InvoiceFields.amount: case InvoiceFields.amount:
response = invoiceA.amount.compareTo(invoiceB.amount); response = invoiceA.amount.compareTo(invoiceB.amount);

View File

@ -4,7 +4,8 @@ import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart'; import 'package:built_value/serializer.dart';
// Project imports: // Project imports:
import 'package:collection/collection.dart' show IterableExtension; import 'package:collection/collection.dart'
show IterableExtension, compareNatural;
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
@ -267,9 +268,7 @@ abstract class PaymentEntity extends Object
response = paymentA!.refunded.compareTo(paymentB!.refunded); response = paymentA!.refunded.compareTo(paymentB!.refunded);
break; break;
case PaymentFields.number: case PaymentFields.number:
response = paymentA!.number response = compareNatural(paymentA!.number, paymentB!.number);
.toLowerCase()
.compareTo(paymentB!.number.toLowerCase());
break; break;
case PaymentFields.transactionReference: case PaymentFields.transactionReference:
response = paymentA!.transactionReference response = paymentA!.transactionReference

View File

@ -2,6 +2,7 @@
import 'package:built_collection/built_collection.dart'; import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart'; import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart'; import 'package:built_value/serializer.dart';
import 'package:collection/collection.dart';
import 'package:diacritic/diacritic.dart'; import 'package:diacritic/diacritic.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
@ -307,7 +308,7 @@ abstract class ProjectEntity extends Object
projectA.documents.length.compareTo(projectB.documents.length); projectA.documents.length.compareTo(projectB.documents.length);
break; break;
case ProjectFields.number: case ProjectFields.number:
response = projectA.number.compareTo(projectB.number); response = compareNatural(projectA.number, projectB.number);
break; break;
case ProjectFields.customValue1: case ProjectFields.customValue1:
response = projectA.customValue1.compareTo(projectB.customValue1); response = projectA.customValue1.compareTo(projectB.customValue1);

View File

@ -790,8 +790,7 @@ abstract class TaskEntity extends Object
response = taskA.documents.length.compareTo(taskB.documents.length); response = taskA.documents.length.compareTo(taskB.documents.length);
break; break;
case TaskFields.number: case TaskFields.number:
response = compareNatural( response = compareNatural(taskA.number, taskB.number);
taskA.number.toLowerCase(), taskB.number.toLowerCase());
break; break;
case TaskFields.createdBy: case TaskFields.createdBy:
final userA = userMap[taskA.createdUserId] ?? UserEntity(); final userA = userMap[taskA.createdUserId] ?? UserEntity();

View File

@ -327,8 +327,7 @@ abstract class VendorEntity extends Object
vendorA!.documents.length.compareTo(vendorB!.documents.length); vendorA!.documents.length.compareTo(vendorB!.documents.length);
break; break;
case VendorFields.number: case VendorFields.number:
response = compareNatural( response = compareNatural(vendorA!.number, vendorB!.number);
vendorA!.number.toLowerCase(), vendorB!.number.toLowerCase());
break; break;
case VendorFields.address1: case VendorFields.address1:
response = vendorA!.address1.compareTo(vendorB!.address1); response = vendorA!.address1.compareTo(vendorB!.address1);

View File

@ -29,10 +29,11 @@ Middleware<AppState> _createViewDashboard() {
store: store, store: store,
force: action.force, force: action.force,
callback: () { callback: () {
if (!store.state.userCompany.canViewDashboard) { final state = store.state;
if (state.isLoaded && !state.userCompany.canViewDashboard) {
store.dispatch(ViewClientList()); store.dispatch(ViewClientList());
} else { } else {
if (store.state.isStale) { if (state.isStale) {
store.dispatch(RefreshData()); store.dispatch(RefreshData());
} }

View File

@ -99,6 +99,13 @@ List<String> filteredTransactionsSelector(
return true; return true;
} }
final bankAccount =
bankAccountMap[transaction.bankAccountId] ?? BankAccountEntity();
if (!bankAccount.isActive &&
!bankAccount.matchesEntityFilter(filterEntityType, filterEntityId)) {
return false;
}
if (filterEntityType != null) { if (filterEntityType != null) {
if (filterEntityType == EntityType.expenseCategory && if (filterEntityType == EntityType.expenseCategory &&
transaction.categoryId != filterEntityId) { transaction.categoryId != filterEntityId) {

View File

@ -59,7 +59,7 @@ class _BankAccountViewState extends State<BankAccountView> {
FieldGrid({ FieldGrid({
localization.type: toTitleCase(bankAccount.type), localization.type: toTitleCase(bankAccount.type),
localization.status: toTitleCase(bankAccount.status), localization.status: toTitleCase(bankAccount.status),
localization.provider: toTitleCase(bankAccount.provider), localization.provider: bankAccount.provider,
if (bankAccount.isConnected) if (bankAccount.isConnected)
localization.autoSync: bankAccount.autoSync localization.autoSync: bankAccount.autoSync
? localization.enabled ? localization.enabled

View File

@ -1277,7 +1277,8 @@ class _MatchWithdrawalsState extends State<_MatchWithdrawals> {
) )
: AppButton( : AppButton(
label: localization.createExpense, label: localization.createExpense,
onPressed: viewModel.state.isSaving onPressed: viewModel.state.isSaving ||
(_selectedVendor == null && _selectedCategory == null)
? null ? null
: () { : () {
final viewModel = widget.viewModel; final viewModel = widget.viewModel;