Expenses
This commit is contained in:
parent
48b1c5e14a
commit
d40cc06b7d
|
|
@ -120,6 +120,8 @@ abstract class CurrencyEntity extends Object
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => null;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static Serializer<CurrencyEntity> get serializer =>
|
static Serializer<CurrencyEntity> get serializer =>
|
||||||
_$currencyEntitySerializer;
|
_$currencyEntitySerializer;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -156,11 +156,15 @@ abstract class AppState implements Built<AppState, AppStateBuilder> {
|
||||||
|
|
||||||
// STARTER: state getters - do not remove comment
|
// STARTER: state getters - do not remove comment
|
||||||
ExpenseState get expenseState => selectedCompanyState.expenseState;
|
ExpenseState get expenseState => selectedCompanyState.expenseState;
|
||||||
|
|
||||||
ListUIState get expenseListState => uiState.expenseUIState.listUIState;
|
ListUIState get expenseListState => uiState.expenseUIState.listUIState;
|
||||||
|
|
||||||
ExpenseUIState get expenseUIState => uiState.expenseUIState;
|
ExpenseUIState get expenseUIState => uiState.expenseUIState;
|
||||||
|
|
||||||
VendorState get vendorState => selectedCompanyState.vendorState;
|
VendorState get vendorState => selectedCompanyState.vendorState;
|
||||||
|
|
||||||
ListUIState get vendorListState => uiState.vendorUIState.listUIState;
|
ListUIState get vendorListState => uiState.vendorUIState.listUIState;
|
||||||
|
|
||||||
VendorUIState get vendorUIState => uiState.vendorUIState;
|
VendorUIState get vendorUIState => uiState.vendorUIState;
|
||||||
|
|
||||||
TaskState get taskState => selectedCompanyState.taskState;
|
TaskState get taskState => selectedCompanyState.taskState;
|
||||||
|
|
@ -191,6 +195,7 @@ abstract class AppState implements Built<AppState, AppStateBuilder> {
|
||||||
String toString() {
|
String toString() {
|
||||||
//return 'Is Loading: ${this.isLoading}, Invoice: ${this.invoiceUIState.selected}';
|
//return 'Is Loading: ${this.isLoading}, Invoice: ${this.invoiceUIState.selected}';
|
||||||
//return 'Expense Categories: ${selectedCompany.expenseCategories}';
|
//return 'Expense Categories: ${selectedCompany.expenseCategories}';
|
||||||
|
return 'Expense: ${uiState.expenseUIState.editing.expenseCurrencyId} - Invoice: ${uiState.expenseUIState.editing.invoiceCurrencyId}';
|
||||||
return 'Route: ${uiState.currentRoute}';
|
return 'Route: ${uiState.currentRoute}';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import 'package:invoiceninja_flutter/utils/formatting.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
|
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/static/static_selectors.dart';
|
import 'package:invoiceninja_flutter/redux/static/static_selectors.dart';
|
||||||
|
import 'package:invoiceninja_flutter/utils/money.dart';
|
||||||
|
|
||||||
class ExpenseEditSettings extends StatefulWidget {
|
class ExpenseEditSettings extends StatefulWidget {
|
||||||
const ExpenseEditSettings({
|
const ExpenseEditSettings({
|
||||||
|
|
@ -184,9 +185,17 @@ class ExpenseEditSettingsState extends State<ExpenseEditSettings> {
|
||||||
initialValue: staticState
|
initialValue: staticState
|
||||||
.currencyMap[viewModel.expense.invoiceCurrencyId]
|
.currencyMap[viewModel.expense.invoiceCurrencyId]
|
||||||
?.name,
|
?.name,
|
||||||
onSelected: (SelectableEntity currency) =>
|
onSelected: (SelectableEntity currency) {
|
||||||
viewModel.onChanged(viewModel.expense.rebuild(
|
final exchangeRate = getExchangeRate(context,
|
||||||
(b) => b..invoiceCurrencyId = currency.id)),
|
fromCurrencyId: expense.expenseCurrencyId,
|
||||||
|
toCurrencyId: currency.id);
|
||||||
|
viewModel.onChanged(expense.rebuild((b) => b
|
||||||
|
..invoiceCurrencyId = currency.id
|
||||||
|
..exchangeRate = exchangeRate));
|
||||||
|
_exchangeRateController.text = formatNumber(
|
||||||
|
exchangeRate, context,
|
||||||
|
formatNumberType: FormatNumberType.input);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
TextFormField(
|
TextFormField(
|
||||||
controller: _exchangeRateController,
|
controller: _exchangeRateController,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_redux/flutter_redux.dart';
|
||||||
|
import 'package:invoiceninja_flutter/constants.dart';
|
||||||
|
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||||
|
|
||||||
|
double getExchangeRate(BuildContext context,
|
||||||
|
{int fromCurrencyId, int toCurrencyId}) {
|
||||||
|
final state = StoreProvider.of<AppState>(context).state;
|
||||||
|
final currencyMap = state.staticState.currencyMap;
|
||||||
|
final fromCurrency = currencyMap[fromCurrencyId];
|
||||||
|
final toCurrency = currencyMap[toCurrencyId];
|
||||||
|
// TODO replace with data from server
|
||||||
|
final baseCurrency = currencyMap[kCurrencyUSDollar];
|
||||||
|
|
||||||
|
if (fromCurrency == baseCurrency) {
|
||||||
|
return toCurrency.exchangeRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (toCurrency == baseCurrency) {
|
||||||
|
return 1 / fromCurrency.exchangeRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
return toCurrency.exchangeRate * (1 / fromCurrency.exchangeRate);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue