Skip to content

Commit

Permalink
Refactor into one single endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
CaitBarnard committed Jan 9, 2025
1 parent 1031295 commit c87cd2d
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 144 deletions.
18 changes: 11 additions & 7 deletions front_end/src/Apps/Payroll.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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
Expand Down
60 changes: 1 addition & 59 deletions front_end/src/Components/EditPayroll/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -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<types.PayrollData[]>} A promise resolving to an array of objects containing employee information.
*/
export function getPayrollData() {
return getData(getPayrollApiUrl()).then((data) => data.data);
return getData(getPayrollApiUrl());
}

/**
Expand All @@ -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<types.VacancyData[]>} 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<types.PayModifierData[]>} 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<types.PreviousMonthsData[]>} 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.
*
Expand Down
47 changes: 47 additions & 0 deletions payroll/api.py
Original file line number Diff line number Diff line change
@@ -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({})
13 changes: 2 additions & 11 deletions payroll/urls.py
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -15,14 +16,9 @@
),
path(
"api/<str:cost_centre_code>/<int:financial_year>/",
views.EmployeeApiView.as_view(),
EditPayrollApiView.as_view(),
name="api",
),
path(
"api/<str:cost_centre_code>/<int:financial_year>/vacancies/",
views.VacancyApiView.as_view(),
name="api_vacancies",
),
path(
"edit/choose-cost-centre/",
ChooseCostCentreView.as_view(next_page="payroll"),
Expand All @@ -43,9 +39,4 @@
views.DeleteVacancyView.as_view(),
name="delete_vacancy",
),
path(
"api/<str:cost_centre_code>/<int:financial_year>/pay_modifiers/",
views.PayModifierApiView.as_view(),
name="api_pay_modifiers",
),
]
68 changes: 1 addition & 67 deletions payroll/views.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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(
Expand Down

0 comments on commit c87cd2d

Please sign in to comment.