@axelor/aos-mobile-hr 7.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -0
- package/lib/api/currency-api.d.ts +4 -0
- package/lib/api/currency-api.js +32 -0
- package/lib/api/currency-api.js.map +1 -0
- package/lib/api/distance-api.d.ts +4 -0
- package/lib/api/distance-api.js +40 -0
- package/lib/api/distance-api.js.map +1 -0
- package/lib/api/expense-api.d.ts +37 -0
- package/lib/api/expense-api.js +136 -0
- package/lib/api/expense-api.js.map +1 -0
- package/lib/api/expense-config-api.d.ts +1 -0
- package/lib/api/expense-config-api.js +23 -0
- package/lib/api/expense-config-api.js.map +1 -0
- package/lib/api/expense-line-api.d.ts +24 -0
- package/lib/api/expense-line-api.js +111 -0
- package/lib/api/expense-line-api.js.map +1 -0
- package/lib/api/expense-type-api.d.ts +5 -0
- package/lib/api/expense-type-api.js +56 -0
- package/lib/api/expense-type-api.js.map +1 -0
- package/lib/api/index.d.ts +6 -0
- package/lib/api/index.js +24 -0
- package/lib/api/index.js.map +1 -0
- package/lib/api/kilometric-allow-param-api.d.ts +5 -0
- package/lib/api/kilometric-allow-param-api.js +44 -0
- package/lib/api/kilometric-allow-param-api.js.map +1 -0
- package/lib/api/project-api.d.ts +5 -0
- package/lib/api/project-api.js +39 -0
- package/lib/api/project-api.js.map +1 -0
- package/lib/components/atoms/ExpenseCard/ExpenseCard.d.ts +15 -0
- package/lib/components/atoms/ExpenseCard/ExpenseCard.js +130 -0
- package/lib/components/atoms/ExpenseCard/ExpenseCard.js.map +1 -0
- package/lib/components/atoms/ExpenseLineCard/ExpenseLineCard.d.ts +12 -0
- package/lib/components/atoms/ExpenseLineCard/ExpenseLineCard.js +106 -0
- package/lib/components/atoms/ExpenseLineCard/ExpenseLineCard.js.map +1 -0
- package/lib/components/atoms/index.d.ts +2 -0
- package/lib/components/atoms/index.js +20 -0
- package/lib/components/atoms/index.js.map +1 -0
- package/lib/components/index.d.ts +3 -0
- package/lib/components/index.js +21 -0
- package/lib/components/index.js.map +1 -0
- package/lib/components/molecules/ExpenseAddPopup/ExpenseAddPopup.d.ts +7 -0
- package/lib/components/molecules/ExpenseAddPopup/ExpenseAddPopup.js +78 -0
- package/lib/components/molecules/ExpenseAddPopup/ExpenseAddPopup.js.map +1 -0
- package/lib/components/molecules/ExpenseDetailsValidationButton/ExpenseDetailsValidationButton.d.ts +5 -0
- package/lib/components/molecules/ExpenseDetailsValidationButton/ExpenseDetailsValidationButton.js +76 -0
- package/lib/components/molecules/ExpenseDetailsValidationButton/ExpenseDetailsValidationButton.js.map +1 -0
- package/lib/components/molecules/ExpenseLineDetailCard/ExpenseLineDetailCard.d.ts +11 -0
- package/lib/components/molecules/ExpenseLineDetailCard/ExpenseLineDetailCard.js +131 -0
- package/lib/components/molecules/ExpenseLineDetailCard/ExpenseLineDetailCard.js.map +1 -0
- package/lib/components/molecules/ExpenseLineValidationButton/ExpenseLineValidationButton.d.ts +6 -0
- package/lib/components/molecules/ExpenseLineValidationButton/ExpenseLineValidationButton.js +37 -0
- package/lib/components/molecules/ExpenseLineValidationButton/ExpenseLineValidationButton.js.map +1 -0
- package/lib/components/molecules/ExpenseRefusalPopup/ExpenseRefusalPopup.d.ts +9 -0
- package/lib/components/molecules/ExpenseRefusalPopup/ExpenseRefusalPopup.js +39 -0
- package/lib/components/molecules/ExpenseRefusalPopup/ExpenseRefusalPopup.js.map +1 -0
- package/lib/components/molecules/index.d.ts +5 -0
- package/lib/components/molecules/index.js +23 -0
- package/lib/components/molecules/index.js.map +1 -0
- package/lib/components/templates/BillableSwitchCard/BillableSwitchCard.d.ts +7 -0
- package/lib/components/templates/BillableSwitchCard/BillableSwitchCard.js +26 -0
- package/lib/components/templates/BillableSwitchCard/BillableSwitchCard.js.map +1 -0
- package/lib/components/templates/CityFormInput/CityFormInput.d.ts +9 -0
- package/lib/components/templates/CityFormInput/CityFormInput.js +76 -0
- package/lib/components/templates/CityFormInput/CityFormInput.js.map +1 -0
- package/lib/components/templates/CurrencySearchBar/CurrencySearchBar.d.ts +9 -0
- package/lib/components/templates/CurrencySearchBar/CurrencySearchBar.js +38 -0
- package/lib/components/templates/CurrencySearchBar/CurrencySearchBar.js.map +1 -0
- package/lib/components/templates/DistanceIncrement/DistanceIncrement.d.ts +9 -0
- package/lib/components/templates/DistanceIncrement/DistanceIncrement.js +46 -0
- package/lib/components/templates/DistanceIncrement/DistanceIncrement.js.map +1 -0
- package/lib/components/templates/ExpenseHeader/ExpenseHeader.d.ts +2 -0
- package/lib/components/templates/ExpenseHeader/ExpenseHeader.js +52 -0
- package/lib/components/templates/ExpenseHeader/ExpenseHeader.js.map +1 -0
- package/lib/components/templates/ExpenseLineTypeSwitch/ExpenseLineTypeSwitch.d.ts +4 -0
- package/lib/components/templates/ExpenseLineTypeSwitch/ExpenseLineTypeSwitch.js +63 -0
- package/lib/components/templates/ExpenseLineTypeSwitch/ExpenseLineTypeSwitch.js.map +1 -0
- package/lib/components/templates/ExpenseTypeSearchBar/ExpenseTypeSearchBar.d.ts +5 -0
- package/lib/components/templates/ExpenseTypeSearchBar/ExpenseTypeSearchBar.js +40 -0
- package/lib/components/templates/ExpenseTypeSearchBar/ExpenseTypeSearchBar.js.map +1 -0
- package/lib/components/templates/ExpenseWaitingValidationSearchBar/ExpenseWaitingValidationSearchBar.d.ts +12 -0
- package/lib/components/templates/ExpenseWaitingValidationSearchBar/ExpenseWaitingValidationSearchBar.js +33 -0
- package/lib/components/templates/ExpenseWaitingValidationSearchBar/ExpenseWaitingValidationSearchBar.js.map +1 -0
- package/lib/components/templates/KilometricAllowParamSearchBar/KilometricAllowParamSearchBar.d.ts +9 -0
- package/lib/components/templates/KilometricAllowParamSearchBar/KilometricAllowParamSearchBar.js +81 -0
- package/lib/components/templates/KilometricAllowParamSearchBar/KilometricAllowParamSearchBar.js.map +1 -0
- package/lib/components/templates/KilometricTypeSelectPicker/KilometricTypeSelectPicker.d.ts +8 -0
- package/lib/components/templates/KilometricTypeSelectPicker/KilometricTypeSelectPicker.js +37 -0
- package/lib/components/templates/KilometricTypeSelectPicker/KilometricTypeSelectPicker.js.map +1 -0
- package/lib/components/templates/ProjectSearchBar/ProjectSearchBar.d.ts +9 -0
- package/lib/components/templates/ProjectSearchBar/ProjectSearchBar.js +38 -0
- package/lib/components/templates/ProjectSearchBar/ProjectSearchBar.js.map +1 -0
- package/lib/components/templates/ToggleSwitchMode/ToggleSwitchMode.d.ts +6 -0
- package/lib/components/templates/ToggleSwitchMode/ToggleSwitchMode.js +34 -0
- package/lib/components/templates/ToggleSwitchMode/ToggleSwitchMode.js.map +1 -0
- package/lib/components/templates/index.d.ts +12 -0
- package/lib/components/templates/index.js +30 -0
- package/lib/components/templates/index.js.map +1 -0
- package/lib/features/asyncFunctions-index.d.ts +6 -0
- package/lib/features/asyncFunctions-index.js +24 -0
- package/lib/features/asyncFunctions-index.js.map +1 -0
- package/lib/features/currencySlice.d.ts +16 -0
- package/lib/features/currencySlice.js +49 -0
- package/lib/features/currencySlice.js.map +1 -0
- package/lib/features/distanceSlice.d.ts +22 -0
- package/lib/features/distanceSlice.js +76 -0
- package/lib/features/distanceSlice.js.map +1 -0
- package/lib/features/expenseConfigSlice.d.ts +14 -0
- package/lib/features/expenseConfigSlice.js +48 -0
- package/lib/features/expenseConfigSlice.js.map +1 -0
- package/lib/features/expenseLineSlice.d.ts +76 -0
- package/lib/features/expenseLineSlice.js +180 -0
- package/lib/features/expenseLineSlice.js.map +1 -0
- package/lib/features/expenseSlice.d.ts +105 -0
- package/lib/features/expenseSlice.js +314 -0
- package/lib/features/expenseSlice.js.map +1 -0
- package/lib/features/expenseTypeSlice.d.ts +16 -0
- package/lib/features/expenseTypeSlice.js +49 -0
- package/lib/features/expenseTypeSlice.js.map +1 -0
- package/lib/features/index.d.ts +8 -0
- package/lib/features/index.js +26 -0
- package/lib/features/index.js.map +1 -0
- package/lib/features/kilometricAllowParamSlice.d.ts +18 -0
- package/lib/features/kilometricAllowParamSlice.js +56 -0
- package/lib/features/kilometricAllowParamSlice.js.map +1 -0
- package/lib/features/projectSlice.d.ts +16 -0
- package/lib/features/projectSlice.js +49 -0
- package/lib/features/projectSlice.js.map +1 -0
- package/lib/hooks/use-hr-header-actions.d.ts +1 -0
- package/lib/hooks/use-hr-header-actions.js +53 -0
- package/lib/hooks/use-hr-header-actions.js.map +1 -0
- package/lib/i18n/en.json +68 -0
- package/lib/i18n/fr.json +68 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.js +66 -0
- package/lib/index.js.map +1 -0
- package/lib/models/forms.d.ts +2 -0
- package/lib/models/forms.js +183 -0
- package/lib/models/forms.js.map +1 -0
- package/lib/models/index.d.ts +4 -0
- package/lib/models/index.js +22 -0
- package/lib/models/index.js.map +1 -0
- package/lib/models/objectFields.d.ts +2 -0
- package/lib/models/objectFields.js +87 -0
- package/lib/models/objectFields.js.map +1 -0
- package/lib/models/searchFields.d.ts +2 -0
- package/lib/models/searchFields.js +26 -0
- package/lib/models/searchFields.js.map +1 -0
- package/lib/models/sortFields.d.ts +2 -0
- package/lib/models/sortFields.js +26 -0
- package/lib/models/sortFields.js.map +1 -0
- package/lib/screens/ExpenseDetailsScreen.d.ts +5 -0
- package/lib/screens/ExpenseDetailsScreen.js +85 -0
- package/lib/screens/ExpenseDetailsScreen.js.map +1 -0
- package/lib/screens/ExpenseLineFormScreen.d.ts +5 -0
- package/lib/screens/ExpenseLineFormScreen.js +202 -0
- package/lib/screens/ExpenseLineFormScreen.js.map +1 -0
- package/lib/screens/ExpenseLinesListScreen.d.ts +4 -0
- package/lib/screens/ExpenseLinesListScreen.js +91 -0
- package/lib/screens/ExpenseLinesListScreen.js.map +1 -0
- package/lib/screens/ExpenseListScreen.d.ts +4 -0
- package/lib/screens/ExpenseListScreen.js +138 -0
- package/lib/screens/ExpenseListScreen.js.map +1 -0
- package/lib/screens/index.d.ts +38 -0
- package/lib/screens/index.js +52 -0
- package/lib/screens/index.js.map +1 -0
- package/lib/types/expense.d.ts +27 -0
- package/lib/types/expense.js +80 -0
- package/lib/types/expense.js.map +1 -0
- package/lib/types/expenseLine.d.ts +21 -0
- package/lib/types/expenseLine.js +57 -0
- package/lib/types/expenseLine.js.map +1 -0
- package/lib/types/index.d.ts +2 -0
- package/lib/types/index.js +20 -0
- package/lib/types/index.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Axelor Business Solutions
|
|
3
|
+
*
|
|
4
|
+
* Copyright (C) 2023 Axelor (<http://axelor.com>).
|
|
5
|
+
*
|
|
6
|
+
* This program is free software: you can redistribute it and/or modify
|
|
7
|
+
* it under the terms of the GNU Affero General Public License, version 3,
|
|
8
|
+
* as published by the Free Software Foundation.
|
|
9
|
+
*
|
|
10
|
+
* This program is distributed in the hope that it will be useful,
|
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
* GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
19
|
+
import { View } from 'react-native';
|
|
20
|
+
import { Screen, ScrollList, HeaderContainer } from '@axelor/aos-mobile-ui';
|
|
21
|
+
import { AnomalyList, useDispatch, useSelector, useTranslator, } from '@axelor/aos-mobile-core';
|
|
22
|
+
import { ExpenseDetailsValidationButton, ExpenseHeader, ExpenseLineDetailCard, ExpenseLineTypeSwitch, } from '../components';
|
|
23
|
+
import { fetchExpenseById } from '../features/expenseSlice';
|
|
24
|
+
import { searchGeneralExpenseLines, searchKilometricExpenseLines, } from '../features/expenseLineSlice';
|
|
25
|
+
import { ExpenseLine } from '../types';
|
|
26
|
+
const ExpenseDetailsScreen = ({ route, navigation }) => {
|
|
27
|
+
const { idExpense, expenseMode } = route.params;
|
|
28
|
+
const I18n = useTranslator();
|
|
29
|
+
const dispatch = useDispatch();
|
|
30
|
+
const { expense } = useSelector(state => state.expense);
|
|
31
|
+
const { loadingGeneralExpenseLine, moreLoadingGeneralExpenseLine, isListEndGeneralExpenseLine, generalExpenseLineList, loadingKilometricExpenseLine, moreLoadingKilometricExpenseLine, isListEndKilometricExpenseLine, kilometricExpenseLineList, } = useSelector(state => state.expenseLine);
|
|
32
|
+
const [mode, setMode] = useState(ExpenseLine.modes.general);
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
dispatch(fetchExpenseById({ ExpenseId: idExpense }));
|
|
35
|
+
}, [dispatch, idExpense]);
|
|
36
|
+
const ObjectToDisplay = useMemo(() => {
|
|
37
|
+
if (mode === ExpenseLine.modes.general) {
|
|
38
|
+
return {
|
|
39
|
+
loading: loadingGeneralExpenseLine,
|
|
40
|
+
moreLoading: moreLoadingGeneralExpenseLine,
|
|
41
|
+
isListEnd: isListEndGeneralExpenseLine,
|
|
42
|
+
list: generalExpenseLineList,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
return {
|
|
47
|
+
loading: loadingKilometricExpenseLine,
|
|
48
|
+
moreLoading: moreLoadingKilometricExpenseLine,
|
|
49
|
+
isListEnd: isListEndKilometricExpenseLine,
|
|
50
|
+
list: kilometricExpenseLineList,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}, [
|
|
54
|
+
generalExpenseLineList,
|
|
55
|
+
isListEndGeneralExpenseLine,
|
|
56
|
+
isListEndKilometricExpenseLine,
|
|
57
|
+
kilometricExpenseLineList,
|
|
58
|
+
loadingGeneralExpenseLine,
|
|
59
|
+
loadingKilometricExpenseLine,
|
|
60
|
+
mode,
|
|
61
|
+
moreLoadingGeneralExpenseLine,
|
|
62
|
+
moreLoadingKilometricExpenseLine,
|
|
63
|
+
]);
|
|
64
|
+
const fetchExpenseLineAPI = useCallback((page = 0) => {
|
|
65
|
+
dispatch((mode === ExpenseLine.modes.general
|
|
66
|
+
? searchGeneralExpenseLines
|
|
67
|
+
: searchKilometricExpenseLines)({ expenseId: expense?.id, page: page }));
|
|
68
|
+
}, [dispatch, expense, mode]);
|
|
69
|
+
if (expense?.id !== idExpense) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
return (<Screen removeSpaceOnTop={true} fixedItems={<ExpenseDetailsValidationButton expense={expense} mode={expenseMode}/>}>
|
|
73
|
+
<HeaderContainer expandableFilter={false} fixedItems={<View>
|
|
74
|
+
<ExpenseHeader />
|
|
75
|
+
<ExpenseLineTypeSwitch onChange={setMode}/>
|
|
76
|
+
</View>}/>
|
|
77
|
+
<AnomalyList objectName="expense" objectId={expense.id}/>
|
|
78
|
+
<ScrollList loadingList={ObjectToDisplay.loading} data={ObjectToDisplay.list} renderItem={({ item }) => (<ExpenseLineDetailCard expense={expense} item={item} onEdit={() => navigation.navigate('ExpenseLineFormScreen', {
|
|
79
|
+
expenseLine: item,
|
|
80
|
+
idExpense: idExpense,
|
|
81
|
+
})}/>)} fetchData={fetchExpenseLineAPI} moreLoading={ObjectToDisplay.moreLoading} isListEnd={ObjectToDisplay.isListEnd} translator={I18n.t}/>
|
|
82
|
+
</Screen>);
|
|
83
|
+
};
|
|
84
|
+
export default ExpenseDetailsScreen;
|
|
85
|
+
//# sourceMappingURL=ExpenseDetailsScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExpenseDetailsScreen.js","sourceRoot":"","sources":["../../src/screens/ExpenseDetailsScreen.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Axelor Business Solutions
|
|
3
|
+
*
|
|
4
|
+
* Copyright (C) 2023 Axelor (<http://axelor.com>).
|
|
5
|
+
*
|
|
6
|
+
* This program is free software: you can redistribute it and/or modify
|
|
7
|
+
* it under the terms of the GNU Affero General Public License, version 3,
|
|
8
|
+
* as published by the Free Software Foundation.
|
|
9
|
+
*
|
|
10
|
+
* This program is distributed in the hope that it will be useful,
|
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
* GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import React, { useCallback, useEffect, useMemo } from 'react';
|
|
19
|
+
import { FormView, fetchCompanies, useDispatch } from '@axelor/aos-mobile-core';
|
|
20
|
+
import { createExpenseLine, updateExpenseLine, } from '../features/expenseLineSlice';
|
|
21
|
+
import { useSelector, useTranslator } from '@axelor/aos-mobile-core';
|
|
22
|
+
import { ExpenseLine } from '../types';
|
|
23
|
+
import { updateExpenseDate } from '../features/kilometricAllowParamSlice';
|
|
24
|
+
import { fetchExpenseConfig } from '../features/expenseConfigSlice';
|
|
25
|
+
import { needUpdateDistance, resetDistance, updateFromCity, updateToCity, } from '../features/distanceSlice';
|
|
26
|
+
const ExpenseLineFormScreen = ({ route, navigation }) => {
|
|
27
|
+
const { expenseLine, idExpense, justificationMetaFile } = route?.params;
|
|
28
|
+
const I18n = useTranslator();
|
|
29
|
+
const _dispatch = useDispatch();
|
|
30
|
+
const { user } = useSelector(state => state.user);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
_dispatch(fetchCompanies());
|
|
33
|
+
_dispatch(fetchExpenseConfig());
|
|
34
|
+
_dispatch(resetDistance());
|
|
35
|
+
}, [_dispatch]);
|
|
36
|
+
const createExpenseLineAPI = useCallback((_expenseLine, dispatch) => {
|
|
37
|
+
dispatch(needUpdateDistance(false));
|
|
38
|
+
const dataToSend = {
|
|
39
|
+
projectId: _expenseLine.project?.id,
|
|
40
|
+
toInvoice: _expenseLine.toInvoice,
|
|
41
|
+
expenseProductId: _expenseLine.expenseProduct?.id,
|
|
42
|
+
expenseDate: _expenseLine.expenseDate,
|
|
43
|
+
employeeId: user?.employee?.id,
|
|
44
|
+
totalAmount: _expenseLine.totalAmount,
|
|
45
|
+
totalTax: _expenseLine.totalTax,
|
|
46
|
+
currencyId: _expenseLine.currency?.id,
|
|
47
|
+
comments: _expenseLine.comments,
|
|
48
|
+
justificationFileId: _expenseLine.justificationMetaFile?.id,
|
|
49
|
+
kilometricAllowParamId: _expenseLine.kilometricAllowParam?.id,
|
|
50
|
+
kilometricTypeSelect: _expenseLine.kilometricTypeSelect?.key,
|
|
51
|
+
distance: _expenseLine.distance,
|
|
52
|
+
fromCity: _expenseLine.fromCity,
|
|
53
|
+
toCity: _expenseLine.toCity,
|
|
54
|
+
expenseLineType: _expenseLine.manageMode,
|
|
55
|
+
companyId: user?.activeCompany?.id,
|
|
56
|
+
};
|
|
57
|
+
dispatch(createExpenseLine({ expenseLine: dataToSend, userId: user?.id }));
|
|
58
|
+
navigation.navigate('ExpenseLinesListScreen');
|
|
59
|
+
}, [navigation, user?.activeCompany?.id, user?.employee?.id, user?.id]);
|
|
60
|
+
const updateExpenseLineAPI = useCallback((_expenseLine, dispatch) => {
|
|
61
|
+
dispatch(needUpdateDistance(false));
|
|
62
|
+
const mode = ExpenseLine.getExpenseMode(expenseLine);
|
|
63
|
+
const dataToSend = {
|
|
64
|
+
id: expenseLine?.id,
|
|
65
|
+
version: expenseLine?.version,
|
|
66
|
+
project: _expenseLine.project,
|
|
67
|
+
toInvoice: _expenseLine.toInvoice,
|
|
68
|
+
expenseProduct: _expenseLine.expenseProduct,
|
|
69
|
+
expenseDate: _expenseLine.expenseDate,
|
|
70
|
+
employeeId: user?.employee?.id,
|
|
71
|
+
totalAmount: _expenseLine.totalAmount,
|
|
72
|
+
totalTax: _expenseLine.totalTax,
|
|
73
|
+
currency: _expenseLine.currency,
|
|
74
|
+
comments: _expenseLine.comments,
|
|
75
|
+
justificationMetaFile: mode === ExpenseLine.modes.general
|
|
76
|
+
? _expenseLine.justificationMetaFile
|
|
77
|
+
: null,
|
|
78
|
+
kilometricAllowParam: _expenseLine.kilometricAllowParam,
|
|
79
|
+
kilometricTypeSelect: _expenseLine.kilometricTypeSelect?.key,
|
|
80
|
+
distance: _expenseLine.distance,
|
|
81
|
+
fromCity: _expenseLine.fromCity,
|
|
82
|
+
toCity: _expenseLine.toCity,
|
|
83
|
+
expenseLineType: _expenseLine.manageMode,
|
|
84
|
+
companyId: user?.activeCompany?.id,
|
|
85
|
+
};
|
|
86
|
+
dispatch(updateExpenseLine({
|
|
87
|
+
expenseLine: dataToSend,
|
|
88
|
+
expenseId: idExpense,
|
|
89
|
+
mode: mode,
|
|
90
|
+
userId: user?.id,
|
|
91
|
+
}));
|
|
92
|
+
if (idExpense == null) {
|
|
93
|
+
navigation.navigate('ExpenseLinesListScreen');
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
navigation.navigate('ExpenseDetailsScreen', { idExpense });
|
|
97
|
+
}
|
|
98
|
+
}, [
|
|
99
|
+
expenseLine,
|
|
100
|
+
idExpense,
|
|
101
|
+
navigation,
|
|
102
|
+
user?.activeCompany?.id,
|
|
103
|
+
user?.employee?.id,
|
|
104
|
+
user?.id,
|
|
105
|
+
]);
|
|
106
|
+
const defaultValue = useMemo(() => {
|
|
107
|
+
const _defaultDate = new Date().toISOString().split('T')[0];
|
|
108
|
+
const _default = {
|
|
109
|
+
manageMode: ExpenseLine.modes.general,
|
|
110
|
+
hideToggle: false,
|
|
111
|
+
expenseDate: _defaultDate,
|
|
112
|
+
companyName: user.activeCompany?.name,
|
|
113
|
+
totalAmount: 0,
|
|
114
|
+
totalTax: 0,
|
|
115
|
+
distance: 0,
|
|
116
|
+
};
|
|
117
|
+
if (justificationMetaFile != null) {
|
|
118
|
+
return {
|
|
119
|
+
..._default,
|
|
120
|
+
hideToggle: true,
|
|
121
|
+
justificationMetaFile,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
else if (expenseLine != null) {
|
|
125
|
+
const mode = ExpenseLine.getExpenseMode(expenseLine);
|
|
126
|
+
if (mode === ExpenseLine.modes.general) {
|
|
127
|
+
return {
|
|
128
|
+
..._default,
|
|
129
|
+
manageMode: mode,
|
|
130
|
+
hideToggle: true,
|
|
131
|
+
expenseDate: expenseLine.expenseDate,
|
|
132
|
+
project: expenseLine.project,
|
|
133
|
+
toInvoice: expenseLine.toInvoice,
|
|
134
|
+
expenseProduct: expenseLine.expenseProduct,
|
|
135
|
+
totalAmount: expenseLine.totalAmount || 0,
|
|
136
|
+
totalTax: expenseLine.totalTax || 0,
|
|
137
|
+
currency: expenseLine.currency,
|
|
138
|
+
justificationMetaFile: expenseLine.justificationMetaFile,
|
|
139
|
+
comments: expenseLine.comments,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
else if (mode === ExpenseLine.modes.kilometric) {
|
|
143
|
+
_dispatch(updateExpenseDate(expenseLine?.expenseDate));
|
|
144
|
+
_dispatch(updateFromCity(expenseLine?.fromCity));
|
|
145
|
+
_dispatch(updateToCity(expenseLine?.toCity));
|
|
146
|
+
return {
|
|
147
|
+
..._default,
|
|
148
|
+
manageMode: mode,
|
|
149
|
+
hideToggle: true,
|
|
150
|
+
expenseDate: expenseLine.expenseDate,
|
|
151
|
+
project: expenseLine.project,
|
|
152
|
+
toInvoice: expenseLine.toInvoice,
|
|
153
|
+
fromCity: expenseLine.fromCity,
|
|
154
|
+
toCity: expenseLine.toCity,
|
|
155
|
+
distance: expenseLine.distance || 0,
|
|
156
|
+
kilometricAllowParam: expenseLine.kilometricAllowParam,
|
|
157
|
+
kilometricTypeSelect: {
|
|
158
|
+
key: expenseLine.kilometricTypeSelect,
|
|
159
|
+
title: ExpenseLine.getKilomectricTypeSelect(expenseLine.kilometricTypeSelect, I18n),
|
|
160
|
+
},
|
|
161
|
+
comments: expenseLine.comments,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
_dispatch(updateExpenseDate(_defaultDate));
|
|
167
|
+
_dispatch(updateFromCity(null));
|
|
168
|
+
_dispatch(updateToCity(null));
|
|
169
|
+
}
|
|
170
|
+
return _default;
|
|
171
|
+
}, [
|
|
172
|
+
I18n,
|
|
173
|
+
_dispatch,
|
|
174
|
+
expenseLine,
|
|
175
|
+
justificationMetaFile,
|
|
176
|
+
user.activeCompany?.name,
|
|
177
|
+
]);
|
|
178
|
+
return (<FormView defaultValue={defaultValue} actions={[
|
|
179
|
+
{
|
|
180
|
+
key: 'create-expenseLine',
|
|
181
|
+
type: 'create',
|
|
182
|
+
needValidation: true,
|
|
183
|
+
needRequiredFields: true,
|
|
184
|
+
hideIf: () => expenseLine != null,
|
|
185
|
+
customAction: ({ dispatch, objectState }) => {
|
|
186
|
+
return createExpenseLineAPI(objectState, dispatch);
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
key: 'update-expenseLine',
|
|
191
|
+
type: 'update',
|
|
192
|
+
needValidation: true,
|
|
193
|
+
needRequiredFields: true,
|
|
194
|
+
hideIf: () => expenseLine == null,
|
|
195
|
+
customAction: ({ dispatch, objectState }) => {
|
|
196
|
+
return updateExpenseLineAPI(objectState, dispatch);
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
]} formKey="hr_Expenseline"/>);
|
|
200
|
+
};
|
|
201
|
+
export default ExpenseLineFormScreen;
|
|
202
|
+
//# sourceMappingURL=ExpenseLineFormScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExpenseLineFormScreen.js","sourceRoot":"","sources":["../../src/screens/ExpenseLineFormScreen.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Axelor Business Solutions
|
|
3
|
+
*
|
|
4
|
+
* Copyright (C) 2023 Axelor (<http://axelor.com>).
|
|
5
|
+
*
|
|
6
|
+
* This program is free software: you can redistribute it and/or modify
|
|
7
|
+
* it under the terms of the GNU Affero General Public License, version 3,
|
|
8
|
+
* as published by the Free Software Foundation.
|
|
9
|
+
*
|
|
10
|
+
* This program is distributed in the hope that it will be useful,
|
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
* GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import React, { useCallback, useEffect, useState } from 'react';
|
|
19
|
+
import { Screen, ScrollList, useThemeColor } from '@axelor/aos-mobile-ui';
|
|
20
|
+
import { CameraButton, headerActionsProvider, useDispatch, useSelector, useTranslator, } from '@axelor/aos-mobile-core';
|
|
21
|
+
import { fetchExpenseLine } from '../features/expenseLineSlice';
|
|
22
|
+
import { ExpenseAddPopup, ExpenseLineDetailCard, ExpenseLineValidationButton, } from '../components';
|
|
23
|
+
const ExpenseLinesListScreen = ({ navigation }) => {
|
|
24
|
+
const Colors = useThemeColor();
|
|
25
|
+
const I18n = useTranslator();
|
|
26
|
+
const dispatch = useDispatch();
|
|
27
|
+
const { expenseLineList, loadingExpenseLine, moreLoading, isListEnd } = useSelector(state => state.expenseLine);
|
|
28
|
+
const { userId } = useSelector(state => state.auth);
|
|
29
|
+
const [isSelectionMode, setIsSelectionMode] = useState(false);
|
|
30
|
+
const [selectedItems, setSelectedItems] = useState([]);
|
|
31
|
+
const [addPopupIsVisible, setAddPopupIsVisible] = useState(false);
|
|
32
|
+
const handleItemSelection = itemId => {
|
|
33
|
+
setSelectedItems(_current => {
|
|
34
|
+
if (_current.includes(itemId)) {
|
|
35
|
+
return _current.filter(id => id !== itemId);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
return [..._current, itemId];
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
const handleCancelButton = () => {
|
|
43
|
+
setSelectedItems([]);
|
|
44
|
+
setIsSelectionMode(false);
|
|
45
|
+
};
|
|
46
|
+
const fetchExpenseLineAPI = useCallback((page = 0) => {
|
|
47
|
+
dispatch(fetchExpenseLine({ userId: userId, page: page }));
|
|
48
|
+
}, [dispatch, userId]);
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
headerActionsProvider.registerModel('hr_expenseLine_list', {
|
|
51
|
+
actions: [
|
|
52
|
+
{
|
|
53
|
+
key: 'newExpenseLines',
|
|
54
|
+
order: 10,
|
|
55
|
+
iconName: 'plus',
|
|
56
|
+
hideIf: isSelectionMode,
|
|
57
|
+
title: I18n.t('Hr_NewExpenseLine'),
|
|
58
|
+
iconColor: Colors.primaryColor.background,
|
|
59
|
+
onPress: () => navigation.navigate('ExpenseLineFormScreen', {}),
|
|
60
|
+
showInHeader: true,
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
});
|
|
64
|
+
}, [Colors, I18n, navigation, isSelectionMode]);
|
|
65
|
+
const handleModeChange = itemId => {
|
|
66
|
+
setIsSelectionMode(current => {
|
|
67
|
+
const mode = !current;
|
|
68
|
+
if (mode) {
|
|
69
|
+
setSelectedItems([itemId]);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
setSelectedItems([]);
|
|
73
|
+
}
|
|
74
|
+
return mode;
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
return (<Screen removeSpaceOnTop={true} fixedItems={isSelectionMode && (<ExpenseLineValidationButton onOpen={() => setAddPopupIsVisible(true)} selectedItems={selectedItems} onChangeMode={handleCancelButton}/>)}>
|
|
78
|
+
<ScrollList loadingList={loadingExpenseLine} data={expenseLineList} disabledRefresh={isSelectionMode} renderItem={({ item }) => (<ExpenseLineDetailCard item={item} onEdit={() => navigation.navigate('ExpenseLineFormScreen', {
|
|
79
|
+
expenseLine: item,
|
|
80
|
+
})} onLongPress={() => handleModeChange(item.id)} onItemSelection={() => handleItemSelection(item.id)} isSelectionMode={isSelectionMode} isSelected={selectedItems.includes(item.id)}/>)} fetchData={fetchExpenseLineAPI} moreLoading={moreLoading} isListEnd={isListEnd} translator={I18n.t}/>
|
|
81
|
+
{!isSelectionMode && (<CameraButton cameraKey="expense-line_justication_picture" onUpload={_file => navigation.navigate('ExpenseLineFormScreen', {
|
|
82
|
+
justificationMetaFile: _file,
|
|
83
|
+
})} getFileName={({ user, extension, dateTime }) => `Expense_${user.name}_${dateTime}.${extension}`}/>)}
|
|
84
|
+
<ExpenseAddPopup visible={addPopupIsVisible} onClose={() => {
|
|
85
|
+
setAddPopupIsVisible(false);
|
|
86
|
+
handleCancelButton();
|
|
87
|
+
}} selectedItems={selectedItems}/>
|
|
88
|
+
</Screen>);
|
|
89
|
+
};
|
|
90
|
+
export default ExpenseLinesListScreen;
|
|
91
|
+
//# sourceMappingURL=ExpenseLinesListScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExpenseLinesListScreen.js","sourceRoot":"","sources":["../../src/screens/ExpenseLinesListScreen.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Axelor Business Solutions
|
|
3
|
+
*
|
|
4
|
+
* Copyright (C) 2023 Axelor (<http://axelor.com>).
|
|
5
|
+
*
|
|
6
|
+
* This program is free software: you can redistribute it and/or modify
|
|
7
|
+
* it under the terms of the GNU Affero General Public License, version 3,
|
|
8
|
+
* as published by the Free Software Foundation.
|
|
9
|
+
*
|
|
10
|
+
* This program is distributed in the hope that it will be useful,
|
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
* GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
19
|
+
import { View, StyleSheet } from 'react-native';
|
|
20
|
+
import { Screen, ScrollList, HeaderContainer, ToggleSwitch, getCommonStyles, useThemeColor, Picker, NumberBubble, } from '@axelor/aos-mobile-ui';
|
|
21
|
+
import { useDispatch, useSelector, useTranslator } from '@axelor/aos-mobile-core';
|
|
22
|
+
import { ExpenseCard, ExpenseWaitingValidationSearchBar } from '../components';
|
|
23
|
+
import { searchExpenseToValidate, searchMyExpense, sendExpense, validateExpense, } from '../features/expenseSlice';
|
|
24
|
+
import { Expense } from '../types';
|
|
25
|
+
const ExpenseListScreen = ({ navigation }) => {
|
|
26
|
+
const I18n = useTranslator();
|
|
27
|
+
const Colors = useThemeColor();
|
|
28
|
+
const dispatch = useDispatch();
|
|
29
|
+
const { user } = useSelector(state => state.user);
|
|
30
|
+
const { myExpenseList, loadingMyExpense, moreLoadingMyExpense, isListEndMyExpense, loadingExpenseToValidate, moreLoadingExpenseToValidate, isListEndExpenseToValidate, expenseToValidateList, totalNumberExpenseToValidate, } = useSelector(state => state.expense);
|
|
31
|
+
const [mode, setMode] = useState(Expense.mode.personnal);
|
|
32
|
+
const [selectedStatus, setSelectedStatus] = useState(null);
|
|
33
|
+
const commonStyles = useMemo(() => getCommonStyles(Colors), [Colors]);
|
|
34
|
+
const expenseStatusListItems = useMemo(() => {
|
|
35
|
+
return Expense.getStatusList(Colors, I18n);
|
|
36
|
+
}, [Colors, I18n]);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
dispatch(searchExpenseToValidate({ page: 0, user: user }));
|
|
39
|
+
}, [dispatch, user]);
|
|
40
|
+
const fetchMyExpenseAPI = useCallback((page = 0) => {
|
|
41
|
+
dispatch(searchMyExpense({ page: page, userId: user.id }));
|
|
42
|
+
}, [dispatch, user.id]);
|
|
43
|
+
const fetchExpenseToValidateAPI = useCallback((page = 0) => {
|
|
44
|
+
dispatch(searchExpenseToValidate({ page: page, user: user }));
|
|
45
|
+
}, [dispatch, user]);
|
|
46
|
+
const sendExpenseAPI = useCallback((expenseId, version) => {
|
|
47
|
+
dispatch(sendExpense({ expenseId: expenseId, version: version, userId: user?.id }));
|
|
48
|
+
}, [dispatch, user]);
|
|
49
|
+
const validateExpenseAPI = useCallback((expenseId, version) => {
|
|
50
|
+
dispatch(validateExpense({
|
|
51
|
+
expenseId: expenseId,
|
|
52
|
+
version: version,
|
|
53
|
+
userId: user?.id,
|
|
54
|
+
user: user,
|
|
55
|
+
mode: mode,
|
|
56
|
+
}));
|
|
57
|
+
}, [dispatch, user, mode]);
|
|
58
|
+
const ObjectToDisplay = useMemo(() => {
|
|
59
|
+
if (mode === Expense.mode.personnal) {
|
|
60
|
+
return {
|
|
61
|
+
list: myExpenseList,
|
|
62
|
+
loading: loadingMyExpense,
|
|
63
|
+
moreLoading: moreLoadingMyExpense,
|
|
64
|
+
isListEnd: isListEndMyExpense,
|
|
65
|
+
functionApi: fetchMyExpenseAPI,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
return {
|
|
70
|
+
list: expenseToValidateList,
|
|
71
|
+
loading: loadingExpenseToValidate,
|
|
72
|
+
moreLoading: moreLoadingExpenseToValidate,
|
|
73
|
+
isListEnd: isListEndExpenseToValidate,
|
|
74
|
+
functionApi: fetchExpenseToValidateAPI,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}, [
|
|
78
|
+
myExpenseList,
|
|
79
|
+
expenseToValidateList,
|
|
80
|
+
fetchExpenseToValidateAPI,
|
|
81
|
+
fetchMyExpenseAPI,
|
|
82
|
+
isListEndExpenseToValidate,
|
|
83
|
+
isListEndMyExpense,
|
|
84
|
+
loadingExpenseToValidate,
|
|
85
|
+
loadingMyExpense,
|
|
86
|
+
mode,
|
|
87
|
+
moreLoadingExpenseToValidate,
|
|
88
|
+
moreLoadingMyExpense,
|
|
89
|
+
]);
|
|
90
|
+
const filterOnStatus = useCallback(list => {
|
|
91
|
+
if (!Array.isArray(list) || list.length === 0) {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
if (selectedStatus != null) {
|
|
96
|
+
return list?.filter(item => item?.statusSelect === selectedStatus);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
return list;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}, [selectedStatus]);
|
|
103
|
+
const filteredList = useMemo(() => filterOnStatus(ObjectToDisplay.list), [ObjectToDisplay.list, filterOnStatus]);
|
|
104
|
+
return (<Screen removeSpaceOnTop={true}>
|
|
105
|
+
<HeaderContainer expandableFilter={false} fixedItems={<View style={styles.headerContainer}>
|
|
106
|
+
<ToggleSwitch styleContainer={[commonStyles.filter, commonStyles.filterSize]} styleToogle={styles.toggle} leftTitle={I18n.t('Hr_MyExpenses')} rightTitle={I18n.t('Hr_ToValidate')} rigthElement={<NumberBubble style={styles.indicator} number={totalNumberExpenseToValidate} color={Colors.cautionColor} isNeutralBackground={true}/>} onSwitch={() => setMode(_mode => {
|
|
107
|
+
setSelectedStatus(null);
|
|
108
|
+
return _mode === Expense.mode.personnal
|
|
109
|
+
? Expense.mode.validation
|
|
110
|
+
: Expense.mode.personnal;
|
|
111
|
+
})}/>
|
|
112
|
+
{mode === Expense.mode.personnal ? (<Picker listItems={expenseStatusListItems} title={I18n.t('Hr_Status')} onValueChange={setSelectedStatus} labelField="title" valueField="key"/>) : (<ExpenseWaitingValidationSearchBar showDetailsPopup={false} oneFilter={true} isFocus={true}/>)}
|
|
113
|
+
</View>}/>
|
|
114
|
+
<ScrollList loadingList={ObjectToDisplay.loading} data={filteredList} renderItem={({ item }) => (<ExpenseCard onPress={() => navigation.navigate('ExpenseDetailsScreen', {
|
|
115
|
+
idExpense: item.id,
|
|
116
|
+
expenseMode: mode,
|
|
117
|
+
})} style={styles.item} statusSelect={item.statusSelect} expenseId={item.id} expenseSeq={item.expenseSeq} periodeCode={item?.period?.code} inTaxTotal={item.inTaxTotal} employeeManagerId={item.employee?.managerUser?.id} employeeName={mode === Expense.mode.validation ? item.employee?.name : null} onSend={() => sendExpenseAPI(item.id, item.version)} onValidate={() => validateExpenseAPI(item.id, item.version)}/>)} fetchData={ObjectToDisplay.functionApi} moreLoading={ObjectToDisplay.moreLoading} isListEnd={ObjectToDisplay.isListEnd} translator={I18n.t}/>
|
|
118
|
+
</Screen>);
|
|
119
|
+
};
|
|
120
|
+
const styles = StyleSheet.create({
|
|
121
|
+
item: {
|
|
122
|
+
marginVertical: 4,
|
|
123
|
+
},
|
|
124
|
+
headerContainer: {
|
|
125
|
+
alignItems: 'center',
|
|
126
|
+
},
|
|
127
|
+
toggle: {
|
|
128
|
+
width: '54%',
|
|
129
|
+
height: 38,
|
|
130
|
+
borderRadius: 13,
|
|
131
|
+
},
|
|
132
|
+
indicator: {
|
|
133
|
+
position: 'absolute',
|
|
134
|
+
right: '5%',
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
export default ExpenseListScreen;
|
|
138
|
+
//# sourceMappingURL=ExpenseListScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExpenseListScreen.js","sourceRoot":"","sources":["../../src/screens/ExpenseListScreen.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
declare namespace _default {
|
|
2
|
+
namespace ExpenseLinesListScreen {
|
|
3
|
+
export let title: string;
|
|
4
|
+
export { ExpenseLinesListScreen as component };
|
|
5
|
+
export let actionID: string;
|
|
6
|
+
}
|
|
7
|
+
namespace ExpenseListScreen {
|
|
8
|
+
let title_1: string;
|
|
9
|
+
export { title_1 as title };
|
|
10
|
+
export { ExpenseListScreen as component };
|
|
11
|
+
export namespace options {
|
|
12
|
+
let shadedHeader: boolean;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
namespace ExpenseDetailsScreen {
|
|
16
|
+
let title_2: string;
|
|
17
|
+
export { title_2 as title };
|
|
18
|
+
export { ExpenseDetailsScreen as component };
|
|
19
|
+
export namespace options_1 {
|
|
20
|
+
let shadedHeader_1: boolean;
|
|
21
|
+
export { shadedHeader_1 as shadedHeader };
|
|
22
|
+
}
|
|
23
|
+
export { options_1 as options };
|
|
24
|
+
let actionID_1: string;
|
|
25
|
+
export { actionID_1 as actionID };
|
|
26
|
+
}
|
|
27
|
+
namespace ExpenseLineFormScreen {
|
|
28
|
+
let title_3: string;
|
|
29
|
+
export { title_3 as title };
|
|
30
|
+
export { ExpenseLineFormScreen as component };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export default _default;
|
|
34
|
+
import ExpenseLinesListScreen_1 from './ExpenseLinesListScreen';
|
|
35
|
+
import ExpenseListScreen_1 from './ExpenseListScreen';
|
|
36
|
+
import ExpenseDetailsScreen_1 from './ExpenseDetailsScreen';
|
|
37
|
+
import ExpenseLineFormScreen_1 from './ExpenseLineFormScreen';
|
|
38
|
+
export { ExpenseLinesListScreen_1 as ExpenseLinesListScreen, ExpenseListScreen_1 as ExpenseListScreen, ExpenseDetailsScreen_1 as ExpenseDetailsScreen, ExpenseLineFormScreen_1 as ExpenseLineFormScreen };
|