diff --git a/front_end/src/Apps/Payroll.jsx b/front_end/src/Apps/Payroll.jsx index 395d44fa..fe7e136b 100644 --- a/front_end/src/Apps/Payroll.jsx +++ b/front_end/src/Apps/Payroll.jsx @@ -17,6 +17,12 @@ const initialVacanciesState = []; const initialPayModifiersState = []; const initialPreviousMonthsState = []; +// const initialPayrollState = { +// employees: [], +// vacancies: [], +// pay_modifiers: [], +// }; + export default function Payroll() { const [allPayroll, dispatch] = useReducer( payrollReducer, @@ -73,13 +79,11 @@ export default function Payroll() { localStorage.removeItem("editPayroll.saveSuccess"); } - api.getPayrollData().then((data) => dispatch({ type: "fetched", data })); - api - .getVacancyData() - .then((data) => dispatchVacancies({ type: "fetched", data })); - api - .getPayModifierData() - .then((data) => dispatchPayModifiers({ type: "fetched", data })); + api.getPayrollData().then((data) => { + dispatch({ type: "fetched", data: data.employees }); + dispatchVacancies({ type: "fetched", data: data.vacancies }); + dispatchPayModifiers({ type: "fetched", data: data.pay_modifiers }); + }); }, []); // Computed properties diff --git a/front_end/src/Components/EditPayroll/api.js b/front_end/src/Components/EditPayroll/api.js index 3e06fdd5..3913e28a 100644 --- a/front_end/src/Components/EditPayroll/api.js +++ b/front_end/src/Components/EditPayroll/api.js @@ -2,16 +2,12 @@ import { getData, postData } from "../../Util"; import * as types from "./types"; -const vacanciesSlug = "vacancies/"; -const payModifiersSlug = "pay_modifiers/"; -const previousMonthsSlug = "previous_months/"; - /** * Fetch payroll data and return it as a promise. * @returns {Promise} A promise resolving to an array of objects containing employee information. */ export function getPayrollData() { - return getData(getPayrollApiUrl()).then((data) => data.data); + return getData(getPayrollApiUrl()); } /** @@ -24,60 +20,6 @@ export function postPayrollData(payrollData) { return postData(getPayrollApiUrl(), JSON.stringify(payrollData)); } -/** - * Fetch vacancy data and return it as a promise. - * @returns {Promise} A promise resolving to an array of objects containing vacancy information. - */ -export function getVacancyData() { - return getData(getPayrollApiUrl() + vacanciesSlug).then((data) => data.data); -} - -/** - * Post modified vacancy data. - * - * @param {types.VacancyData[]} vacancyData - Vacancy data to be sent. - * @returns {import("../../Util").PostDataResponse} Updated vacancy data received. - */ -export function postVacancyData(vacancyData) { - return postData( - getPayrollApiUrl() + vacanciesSlug, - JSON.stringify(vacancyData), - ); -} - -/** - * Fetch pay modifier data and return it as a promise. - * @returns {Promise} A promise resolving to an array of objects containing pay modifier information. - */ -export function getPayModifierData() { - return getData(getPayrollApiUrl() + payModifiersSlug).then( - (data) => data.data, - ); -} - -/** - * Post modified pay modifiers data. - * - * @param {types.PayModifierData[]} payModifierData - Pay modifier data to be sent. - * @returns {import("../../Util").PostDataResponse} Updated pay modifier data received. - */ -export function postPayModifierData(payModifierData) { - return postData( - getPayrollApiUrl() + payModifiersSlug, - JSON.stringify(payModifierData), - ); -} - -/** - * Fetch previous months data and return it as a promise. - * @returns {Promise} A promise resolving to an array of objects containing previous months information. - */ -export function getPreviousMonthsData() { - return getData(getPayrollApiUrl() + previousMonthsSlug).then( - (data) => data.data, - ); -} - /** * Return the payroll API URL. * diff --git a/payroll/api.py b/payroll/api.py new file mode 100644 index 00000000..4f5ed159 --- /dev/null +++ b/payroll/api.py @@ -0,0 +1,47 @@ +import json + +from django.http import JsonResponse + +from payroll.views import EditPayrollBaseView + +from .services import payroll as payroll_service + + +class EditPayrollApiView(EditPayrollBaseView): + def post_data(self, data): + raise NotImplementedError + + def get(self, request, *args, **kwargs): + employees = list( + payroll_service.get_payroll_data( + self.cost_centre, + self.financial_year, + ) + ) + vacancies = list( + payroll_service.get_vacancies_data( + self.cost_centre, + self.financial_year, + ) + ) + pay_modifiers = list( + payroll_service.get_pay_modifiers_data( + self.cost_centre, + self.financial_year, + ) + ) + + return JsonResponse( + { + "employees": employees, + "vacancies": vacancies, + "pay_modifiers": pay_modifiers, + } + ) + + def post(self, request, *args, **kwargs): + data = json.loads(request.body) + self.post_data( + data, + ) + return JsonResponse({}) diff --git a/payroll/urls.py b/payroll/urls.py index 6b9e293c..45424954 100644 --- a/payroll/urls.py +++ b/payroll/urls.py @@ -1,6 +1,7 @@ from django.urls import path from forecast.views.edit_select_cost_centre import ChooseCostCentreView +from payroll.api import EditPayrollApiView from . import views @@ -15,14 +16,9 @@ ), path( "api///", - views.EmployeeApiView.as_view(), + EditPayrollApiView.as_view(), name="api", ), - path( - "api///vacancies/", - views.VacancyApiView.as_view(), - name="api_vacancies", - ), path( "edit/choose-cost-centre/", ChooseCostCentreView.as_view(next_page="payroll"), @@ -43,9 +39,4 @@ views.DeleteVacancyView.as_view(), name="delete_vacancy", ), - path( - "api///pay_modifiers/", - views.PayModifierApiView.as_view(), - name="api_pay_modifiers", - ), ] diff --git a/payroll/views.py b/payroll/views.py index db493f10..da73e5da 100644 --- a/payroll/views.py +++ b/payroll/views.py @@ -1,7 +1,5 @@ -import json - from django.contrib.auth.mixins import PermissionRequiredMixin, UserPassesTestMixin -from django.http import HttpResponse, JsonResponse +from django.http import HttpResponse from django.shortcuts import get_object_or_404 from django.template.response import TemplateResponse from django.urls import reverse @@ -39,70 +37,6 @@ def setup(self, request, *args, **kwargs) -> None: ) -class EditPayrollApiView(EditPayrollBaseView): - def get_data(self): - raise NotImplementedError - - def post_data(self, data): - raise NotImplementedError - - def get(self, request, *args, **kwargs): - data = list(self.get_data()) - return JsonResponse({"data": data}) - - def post(self, request, *args, **kwargs): - data = json.loads(request.body) - self.post_data( - data, - ) - return JsonResponse({}) - - -class EmployeeApiView(EditPayrollApiView): - def get_data(self): - return payroll_service.get_payroll_data( - self.cost_centre, - self.financial_year, - ) - - def post_data(self, data): - return payroll_service.update_payroll_data( - self.cost_centre, - self.financial_year, - data, - ) - - -class VacancyApiView(EditPayrollApiView): - def get_data(self): - return payroll_service.get_vacancies_data( - self.cost_centre, - self.financial_year, - ) - - def post_data(self, data): - return payroll_service.update_vacancies_data( - self.cost_centre, - self.financial_year, - data, - ) - - -class PayModifierApiView(EditPayrollApiView): - def get_data(self): - return payroll_service.get_pay_modifiers_data( - self.cost_centre, - self.financial_year, - ) - - def post_data(self, data): - return payroll_service.update_pay_modifiers_data( - self.cost_centre, - self.financial_year, - data, - ) - - class EditPayrollPage(EditPayrollBaseView): def get(self, *args, **kwargs) -> HttpResponse: payroll_forecast_report_data = payroll_service.payroll_forecast_report(