From 68361ed5683892e47df88b2efc493acbe44235a0 Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 8 Feb 2024 10:34:28 +0100 Subject: [PATCH 1/4] CM-487: move picker to pickers folder --- src/components/payroll/PayrollFilter.js | 2 +- src/components/payroll/PayrollHeadPanel.js | 2 +- src/{components/payroll => pickers}/PaymentMethodPicker.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename src/{components/payroll => pickers}/PaymentMethodPicker.js (96%) diff --git a/src/components/payroll/PayrollFilter.js b/src/components/payroll/PayrollFilter.js index 845f85e..911b2f0 100644 --- a/src/components/payroll/PayrollFilter.js +++ b/src/components/payroll/PayrollFilter.js @@ -19,7 +19,7 @@ import { MODULE_NAME, } from '../../constants'; import PayrollStatusPicker from './PayrollStatusPicker'; -import PaymentMethodPicker from './PaymentMethodPicker'; +import PaymentMethodPicker from '../../pickers/PaymentMethodPicker'; const useStyles = makeStyles((theme) => ({ form: { diff --git a/src/components/payroll/PayrollHeadPanel.js b/src/components/payroll/PayrollHeadPanel.js index 183e4af..aa8f6f9 100644 --- a/src/components/payroll/PayrollHeadPanel.js +++ b/src/components/payroll/PayrollHeadPanel.js @@ -16,7 +16,7 @@ import { import AdvancedFiltersDialog from './AdvancedFiltersDialog'; import { CLEARED_STATE_FILTER } from '../../constants'; import PayrollStatusPicker from './PayrollStatusPicker'; -import PaymentMethodPicker from './PaymentMethodPicker'; +import PaymentMethodPicker from '../../pickers/PaymentMethodPicker'; const styles = (theme) => ({ tableTitle: theme.table.title, diff --git a/src/components/payroll/PaymentMethodPicker.js b/src/pickers/PaymentMethodPicker.js similarity index 96% rename from src/components/payroll/PaymentMethodPicker.js rename to src/pickers/PaymentMethodPicker.js index 95b5ad3..5ec477c 100644 --- a/src/components/payroll/PaymentMethodPicker.js +++ b/src/pickers/PaymentMethodPicker.js @@ -2,7 +2,7 @@ import React, { useEffect } from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import { SelectInput } from '@openimis/fe-core'; -import { fetchPaymentMethods } from '../../actions'; +import { fetchPaymentMethods } from '../actions'; function PaymentMethodPicker({ value, From a3fd7bdd9824543d0aa81fad846446f777d30b5d Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 8 Feb 2024 15:28:25 +0100 Subject: [PATCH 2/4] CM-487: add task tab to payroll --- src/actions.js | 2 +- src/components/payroll/PayrollFilter.js | 11 ++-- src/components/payroll/PayrollHeadPanel.js | 5 +- src/components/payroll/PayrollTab.js | 5 +- src/components/payroll/PayrollTaskTabPanel.js | 59 +++++++++++++++++++ src/constants.js | 7 ++- src/index.js | 7 ++- src/pages/payroll/PayrollPage.js | 4 +- src/translations/en.json | 2 +- 9 files changed, 85 insertions(+), 17 deletions(-) create mode 100644 src/components/payroll/PayrollTaskTabPanel.js diff --git a/src/actions.js b/src/actions.js index 04f3aa4..8d48126 100644 --- a/src/actions.js +++ b/src/actions.js @@ -46,7 +46,7 @@ const PAYROLL_PROJECTION = (modulesManager) => [ 'id', 'name', 'paymentMethod', - 'paymentPlan { code }', + 'paymentPlan { code, id, name }', `paymentPoint { ${PAYMENT_POINT_PROJECTION(modulesManager).join(' ')} }`, 'paymentCycle { runYear, runMonth }', 'benefitConsumption{id, code,individual {firstName, lastName}, benefitAttachment{bill{id, code, terms}}}', diff --git a/src/components/payroll/PayrollFilter.js b/src/components/payroll/PayrollFilter.js index 911b2f0..b2f21a0 100644 --- a/src/components/payroll/PayrollFilter.js +++ b/src/components/payroll/PayrollFilter.js @@ -13,10 +13,11 @@ import { decodeId, } from '@openimis/fe-core'; import { - CONTAINS_LOOKUP, - DEFAULT_DEBOUNCE_TIME, - EMPTY_STRING, - MODULE_NAME, + BENEFIT_PLAN_CONTENT_TYPE_ID, + CONTAINS_LOOKUP, + DEFAULT_DEBOUNCE_TIME, + EMPTY_STRING, + MODULE_NAME, } from '../../constants'; import PayrollStatusPicker from './PayrollStatusPicker'; import PaymentMethodPicker from '../../pickers/PaymentMethodPicker'; @@ -130,7 +131,7 @@ function PayrollFilter({ { id: 'status', value, - filter: `status: ${value}`, + filter: value ? `status: ${value}` : EMPTY_STRING, }, ])} /> diff --git a/src/components/payroll/PayrollHeadPanel.js b/src/components/payroll/PayrollHeadPanel.js index aa8f6f9..861d288 100644 --- a/src/components/payroll/PayrollHeadPanel.js +++ b/src/components/payroll/PayrollHeadPanel.js @@ -2,16 +2,16 @@ import React from 'react'; import { injectIntl } from 'react-intl'; -import { Checkbox, FormControlLabel, Grid } from '@material-ui/core'; +import { Grid } from '@material-ui/core'; import { withStyles, withTheme } from '@material-ui/core/styles'; import { - ControlledField, formatMessage, FormPanel, PublishedComponent, TextInput, withModulesManager, + decodeId, } from '@openimis/fe-core'; import AdvancedFiltersDialog from './AdvancedFiltersDialog'; import { CLEARED_STATE_FILTER } from '../../constants'; @@ -104,7 +104,6 @@ class PayrollHeadPanel extends FormPanel { this.updateAttribute('paymentPlan', paymentPlan)} diff --git a/src/components/payroll/PayrollTab.js b/src/components/payroll/PayrollTab.js index 62c650e..8cbb06a 100644 --- a/src/components/payroll/PayrollTab.js +++ b/src/components/payroll/PayrollTab.js @@ -29,7 +29,7 @@ const useStyles = makeStyles((theme) => ({ }, })); -function PayrollTab({ rights, setConfirmedAction, payrollUuid }) { +function PayrollTab({ rights, setConfirmedAction, payrollUuid, isInTask }) { const classes = useStyles(); const [activeTab, setActiveTab] = useState(BENEFIT_CONSUMPTION_LIST_TAB_VALUE); @@ -50,6 +50,8 @@ function PayrollTab({ rights, setConfirmedAction, payrollUuid }) { onChange={handleChange} isSelected={isSelected} tabStyle={tabStyle} + payrollUuid={payrollUuid} + isInTask={isInTask} /> ); diff --git a/src/components/payroll/PayrollTaskTabPanel.js b/src/components/payroll/PayrollTaskTabPanel.js new file mode 100644 index 0000000..12f466e --- /dev/null +++ b/src/components/payroll/PayrollTaskTabPanel.js @@ -0,0 +1,59 @@ +import React, { useEffect } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { Tab } from '@material-ui/core'; +import { PublishedComponent, useTranslations, useModulesManager } from '@openimis/fe-core'; +import { + MODULE_NAME, PAYROLL_TASK_TAB_VALUE, +} from '../../constants'; + +function PayrollTaskTabLabel({ + onChange, tabStyle, isSelected, modulesManager, payrollUuid, isInTask, +}) { + const { formatMessage } = useTranslations(MODULE_NAME, modulesManager); + if (!payrollUuid || isInTask) { + return null; + } + return ( + + ); +} + +function PayrollTaskTabPanel({ value, payrollUuid, isInTask }) { + const modulesManager = useModulesManager(); + const dispatch = useDispatch(); + const fetchTask = modulesManager.getRef('tasksManagement.fetchTask'); + const task = useSelector((state) => state.tasksManagement?.task); + useEffect(() => { + dispatch(fetchTask(modulesManager, ['entityType: "Payroll"', `entityId: "${payrollUuid}"`])); + }, [payrollUuid]); + + if (isInTask) return null; + + return ( + + { + payrollUuid && ( + + ) + } + + ); +} + +export { PayrollTaskTabLabel, PayrollTaskTabPanel }; diff --git a/src/constants.js b/src/constants.js index 03a234e..cbabb99 100644 --- a/src/constants.js +++ b/src/constants.js @@ -23,6 +23,7 @@ export const MAX_LENGTH = { export const MODULE_NAME = 'payroll'; export const BENEFIT_CONSUMPTION_LIST_TAB_VALUE = 'benefitConsumptionsTab'; +export const PAYROLL_TASK_TAB_VALUE = 'payrollTaskTab'; export const PAYROLL_TABS_LABEL_CONTRIBUTION_KEY = 'payroll.TabPanel.label'; export const PAYROLL_TABS_PANEL_CONTRIBUTION_KEY = 'payroll.TabPanel.panel'; @@ -62,14 +63,14 @@ export const PAYROLL_STATUS = { PENDING_APPROVAL: 'PENDING_APPROVAL', APPROVE_FOR_PAYMENT: 'APPROVE_FOR_PAYMENT', REJECTED: 'REJECTED', - RECONCILIATED: 'RECONCILIATED', + RECONCILED: 'RECONCILED', }; export const PAYROLL_STATUS_LIST = [ PAYROLL_STATUS.PENDING_APPROVAL, PAYROLL_STATUS.APPROVE_FOR_PAYMENT, PAYROLL_STATUS.REJECTED, - PAYROLL_STATUS.RECONCILIATED, + PAYROLL_STATUS.RECONCILED, ]; export const BENEFIT_CONSUMPTION_STATUS = { @@ -86,3 +87,5 @@ export const BENEFIT_CONSUMPTION_STATUS_LIST = [ BENEFIT_CONSUMPTION_STATUS.APPROVE_FOR_PAYMENT, BENEFIT_CONSUMPTION_STATUS.REJECTED, BENEFIT_CONSUMPTION_STATUS.DUPLICATE, BENEFIT_CONSUMPTION_STATUS.RECONCILED, ]; + +export const BENEFIT_PLAN_CONTENT_TYPE_ID = 175; diff --git a/src/index.js b/src/index.js index aa792d1..ea90ebc 100644 --- a/src/index.js +++ b/src/index.js @@ -22,7 +22,8 @@ import { PayrollReconciliationTaskItemFormatters, PayrollReconciliationTaskTableHeaders, } from './components/tasks/PayrollReconciliationTasks'; -import {BenefitConsumptionsTabLabel, BenefitConsumptionsTabPanel} from "./components/payroll/BenefitConsumptionTabPanel"; +import { BenefitConsumptionsTabLabel, BenefitConsumptionsTabPanel } from './components/payroll/BenefitConsumptionTabPanel'; +import { PayrollTaskTabLabel, PayrollTaskTabPanel } from './components/payroll/PayrollTaskTabPanel'; const ROUTE_PAYMENT_POINTS = 'paymentPoints'; const ROUTE_PAYMENT_POINT = 'paymentPoints/paymentPoint'; @@ -60,8 +61,8 @@ const DEFAULT_CONFIG = { filter: (rights) => rights.includes(RIGHT_PAYROLL_SEARCH), }, ], - 'payroll.TabPanel.label': [BenefitConsumptionsTabLabel], - 'payroll.TabPanel.panel': [BenefitConsumptionsTabPanel], + 'payroll.TabPanel.label': [BenefitConsumptionsTabLabel, PayrollTaskTabLabel], + 'payroll.TabPanel.panel': [BenefitConsumptionsTabPanel, PayrollTaskTabPanel], 'tasksManagement.tasks': [{ text: , tableHeaders: PayrollTaskTableHeaders, diff --git a/src/pages/payroll/PayrollPage.js b/src/pages/payroll/PayrollPage.js index 901fd07..02edac5 100644 --- a/src/pages/payroll/PayrollPage.js +++ b/src/pages/payroll/PayrollPage.js @@ -151,10 +151,11 @@ function PayrollPage({ rights.includes(RIGHT_PAYROLL_CREATE) && (
) diff --git a/src/translations/en.json b/src/translations/en.json index 3345b54..5e291f5 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -75,7 +75,7 @@ "payroll.payroll.payrollStatusPicker.PENDING_APPROVAL": "PENDING APPROVAL", "payroll.payroll.payrollStatusPicker.APPROVE_FOR_PAYMENT": "APPROVE FOR PAYMENT", "payroll.payroll.payrollStatusPicker.REJECTED": "REJECTED", - "payroll.payroll.payrollStatusPicker.RECONCILIATED": "RECONCILIATED", + "payroll.payroll.payrollStatusPicker.RECONCILED": "RECONCILED", "payroll.paymentMethod": "Payment Method", "payroll.tasks.update.title": "Approve Payroll Tasks", "payroll.tasks.reconciliation.title": "Payroll Reconciliation Tasks", From aace0166d8fb915a218fcdd9bb838337a0eaabbf Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 8 Feb 2024 16:00:35 +0100 Subject: [PATCH 3/4] CM-487: fix eslint --- src/components/payroll/PayrollFilter.js | 9 ++++----- src/components/payroll/PayrollTab.js | 4 +++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/components/payroll/PayrollFilter.js b/src/components/payroll/PayrollFilter.js index b2f21a0..0891394 100644 --- a/src/components/payroll/PayrollFilter.js +++ b/src/components/payroll/PayrollFilter.js @@ -13,11 +13,10 @@ import { decodeId, } from '@openimis/fe-core'; import { - BENEFIT_PLAN_CONTENT_TYPE_ID, - CONTAINS_LOOKUP, - DEFAULT_DEBOUNCE_TIME, - EMPTY_STRING, - MODULE_NAME, + CONTAINS_LOOKUP, + DEFAULT_DEBOUNCE_TIME, + EMPTY_STRING, + MODULE_NAME, } from '../../constants'; import PayrollStatusPicker from './PayrollStatusPicker'; import PaymentMethodPicker from '../../pickers/PaymentMethodPicker'; diff --git a/src/components/payroll/PayrollTab.js b/src/components/payroll/PayrollTab.js index 8cbb06a..01c4acf 100644 --- a/src/components/payroll/PayrollTab.js +++ b/src/components/payroll/PayrollTab.js @@ -29,7 +29,9 @@ const useStyles = makeStyles((theme) => ({ }, })); -function PayrollTab({ rights, setConfirmedAction, payrollUuid, isInTask }) { +function PayrollTab({ + rights, setConfirmedAction, payrollUuid, isInTask, +}) { const classes = useStyles(); const [activeTab, setActiveTab] = useState(BENEFIT_CONSUMPTION_LIST_TAB_VALUE); From 4f7f1d0aa1bdfcbb32f540dd672982c6d65a51b7 Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 8 Feb 2024 16:34:31 +0100 Subject: [PATCH 4/4] CM-478: fix custom filters --- src/actions.js | 2 +- src/components/payroll/PayrollHeadPanel.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/actions.js b/src/actions.js index 8d48126..b13a050 100644 --- a/src/actions.js +++ b/src/actions.js @@ -46,7 +46,7 @@ const PAYROLL_PROJECTION = (modulesManager) => [ 'id', 'name', 'paymentMethod', - 'paymentPlan { code, id, name }', + 'paymentPlan { code, id, name, benefitPlan }', `paymentPoint { ${PAYMENT_POINT_PROJECTION(modulesManager).join(' ')} }`, 'paymentCycle { runYear, runMonth }', 'benefitConsumption{id, code,individual {firstName, lastName}, benefitAttachment{bill{id, code, terms}}}', diff --git a/src/components/payroll/PayrollHeadPanel.js b/src/components/payroll/PayrollHeadPanel.js index 861d288..421fe0b 100644 --- a/src/components/payroll/PayrollHeadPanel.js +++ b/src/components/payroll/PayrollHeadPanel.js @@ -78,7 +78,9 @@ class PayrollHeadPanel extends FormPanel { return ( <>