diff --git a/epictrack-api/src/api/__init__.py b/epictrack-api/src/api/__init__.py index 743977f7f..f4ba6e145 100644 --- a/epictrack-api/src/api/__init__.py +++ b/epictrack-api/src/api/__init__.py @@ -25,8 +25,7 @@ from api import config from api.config import _Config -from api.exceptions import ( - PermissionDeniedError, ResourceExistsError, ResourceNotFoundError, UnprocessableEntityError) +from api.exceptions import PermissionDeniedError, ResourceExistsError, ResourceNotFoundError, UnprocessableEntityError from api.models import db from api.utils.auth import jwt from api.utils.caching import AppCache @@ -48,7 +47,6 @@ def create_app(run_mode=os.getenv('FLASK_ENV', 'production')): db.init_app(app) if run_mode != 'migration': - AppCache.configure_cache(run_mode, app) # pylint: disable=import-outside-toplevel from api.resources import API_BLUEPRINT, OPS_BLUEPRINT diff --git a/epictrack-api/src/api/models/staff.py b/epictrack-api/src/api/models/staff.py index b18ca77cc..2e9c34983 100644 --- a/epictrack-api/src/api/models/staff.py +++ b/epictrack-api/src/api/models/staff.py @@ -71,9 +71,12 @@ def find_all_active_staff(cls): return cls.query.filter_by(is_active=True, is_deleted=False) @classmethod - def find_all_non_deleted_staff(cls): + def find_all_non_deleted_staff(cls, is_active=False): """Return all non-deleted staff""" - return cls.query.filter_by(is_deleted=False) + query = {"is_deleted": False} + if is_active: + query["is_active"] = is_active + return cls.query.filter_by(**query) @classmethod def check_existence(cls, email, staff_id): diff --git a/epictrack-api/src/api/resources/indigenous_nation.py b/epictrack-api/src/api/resources/indigenous_nation.py index ad91f2be3..bd8e9e81e 100644 --- a/epictrack-api/src/api/resources/indigenous_nation.py +++ b/epictrack-api/src/api/resources/indigenous_nation.py @@ -13,6 +13,7 @@ # limitations under the License. """Resource for indigenous nation endpoints.""" from http import HTTPStatus + from flask import jsonify, request from flask_restx import Namespace, Resource, cors @@ -99,7 +100,8 @@ class IndigenousNations(Resource): @profiletime def get(): """Return all indigenous nations.""" - indigenous_nations = IndigenousNationService.find_all_indigenous_nations() + args = req.BasicRequestQueryParameterSchema().load(request.args) + indigenous_nations = IndigenousNationService.find_all_indigenous_nations(args.get("is_active")) return jsonify(res.IndigenousResponseNationSchema(many=True).dump(indigenous_nations)), HTTPStatus.OK @staticmethod diff --git a/epictrack-api/src/api/resources/staff.py b/epictrack-api/src/api/resources/staff.py index 3a851c8d9..53774f5c3 100644 --- a/epictrack-api/src/api/resources/staff.py +++ b/epictrack-api/src/api/resources/staff.py @@ -42,8 +42,9 @@ def get(): current_app.logger.info('Getting staffs') args = req.StaffByPositionsQueryParamSchema().load(request.args) positions = args.get('positions') + is_active = args.get('is_active') if not positions: - staffs = StaffService.find_all_non_deleted_staff() + staffs = StaffService.find_all_non_deleted_staff(is_active) if positions: current_app.logger.info(f'Position ids are {positions}') staffs = StaffService.find_by_position_ids(positions) diff --git a/epictrack-api/src/api/schemas/request/staff_request.py b/epictrack-api/src/api/schemas/request/staff_request.py index 6079c0902..1e509de7b 100644 --- a/epictrack-api/src/api/schemas/request/staff_request.py +++ b/epictrack-api/src/api/schemas/request/staff_request.py @@ -16,7 +16,9 @@ from api.schemas.validators import Phone -from .base import RequestBodyParameterSchema, RequestPathParameterSchema, RequestQueryParameterSchema +from .base import ( + BasicRequestQueryParameterSchema, RequestBodyParameterSchema, RequestPathParameterSchema, + RequestQueryParameterSchema) from .custom_fields import IntegerList @@ -46,7 +48,7 @@ class StaffExistanceQueryParamSchema(RequestQueryParameterSchema): ) -class StaffByPositionsQueryParamSchema(RequestQueryParameterSchema): +class StaffByPositionsQueryParamSchema(BasicRequestQueryParameterSchema): """Staff by positions query parameter""" positions = IntegerList(metadata={"description": "comma separated position ids"}) diff --git a/epictrack-api/src/api/services/indigenous_nation.py b/epictrack-api/src/api/services/indigenous_nation.py index 824c0cd7e..267447f27 100644 --- a/epictrack-api/src/api/services/indigenous_nation.py +++ b/epictrack-api/src/api/services/indigenous_nation.py @@ -25,9 +25,9 @@ def check_existence(cls, name, indigenous_nation_id=None): return IndigenousNation.check_existence(name, indigenous_nation_id) @classmethod - def find_all_indigenous_nations(cls): + def find_all_indigenous_nations(cls, is_active): """Find all active indigenous nations""" - indigenous_nations = IndigenousNation.find_all(default_filters=False) + indigenous_nations = IndigenousNation.find_all(default_filters=is_active) return indigenous_nations @classmethod diff --git a/epictrack-api/src/api/services/staff.py b/epictrack-api/src/api/services/staff.py index 30ff6e9ca..64b6a789e 100644 --- a/epictrack-api/src/api/services/staff.py +++ b/epictrack-api/src/api/services/staff.py @@ -14,8 +14,8 @@ """Service to manage Staffs.""" from flask import current_app -from api.exceptions import ResourceExistsError, ResourceNotFoundError +from api.exceptions import ResourceExistsError, ResourceNotFoundError from api.models import Staff from api.schemas.response import StaffResponseSchema @@ -48,9 +48,9 @@ def find_all_active_staff(cls): return response @classmethod - def find_all_non_deleted_staff(cls): + def find_all_non_deleted_staff(cls, is_active=False): """Find all non-deleted staff""" - staffs = Staff.find_all_non_deleted_staff() + staffs = Staff.find_all_non_deleted_staff(is_active) return staffs @classmethod diff --git a/epictrack-api/src/api/services/work.py b/epictrack-api/src/api/services/work.py index 283a79ab0..87c735d0e 100644 --- a/epictrack-api/src/api/services/work.py +++ b/epictrack-api/src/api/services/work.py @@ -628,7 +628,6 @@ def import_first_nations(cls, work_id: int, indigenous_nation_ids: [int]): ) # Mark removed entries as inactive - # TODO:CHECK THIS LOGIC disabled_count = existing_first_nations_qry.filter( IndigenousWork.is_active.is_(True), IndigenousWork.indigenous_nation_id.notin_(indigenous_nation_ids), diff --git a/epictrack-web/src/components/workPlan/firstNations/FirstNationContainer.tsx b/epictrack-web/src/components/workPlan/firstNations/FirstNationContainer.tsx index 29c013e22..0e634ec2e 100644 --- a/epictrack-web/src/components/workPlan/firstNations/FirstNationContainer.tsx +++ b/epictrack-web/src/components/workPlan/firstNations/FirstNationContainer.tsx @@ -25,7 +25,7 @@ const useStyle = makeStyles({ paddingBottom: "0.5rem", }, tabPanel: { - padding: "1.5rem 1rem 1rem 1rem", + padding: "1.5rem 0px 1rem 1rem", minHeight: "0px", }, tab: { diff --git a/epictrack-web/src/components/workPlan/firstNations/FirstNationForm.tsx b/epictrack-web/src/components/workPlan/firstNations/FirstNationForm.tsx index 7e7802b5b..3d8659378 100644 --- a/epictrack-web/src/components/workPlan/firstNations/FirstNationForm.tsx +++ b/epictrack-web/src/components/workPlan/firstNations/FirstNationForm.tsx @@ -92,7 +92,7 @@ const FirstNationForm = ({ onSave, workNationId }: FirstNationFormProps) => { const getAllFirstNations = async () => { try { - const result = await indigenousNationService.getAll(); + const result = await indigenousNationService.getAll(true); if (result.status === 200) { const firstNations = result.data as FirstNation[]; setFirstNations(sort(firstNations, "name")); diff --git a/epictrack-web/src/components/workPlan/firstNations/FirstNationList.tsx b/epictrack-web/src/components/workPlan/firstNations/FirstNationList.tsx index 4dc9a8808..7190f4c6a 100644 --- a/epictrack-web/src/components/workPlan/firstNations/FirstNationList.tsx +++ b/epictrack-web/src/components/workPlan/firstNations/FirstNationList.tsx @@ -103,6 +103,8 @@ const FirstNationList = () => { const [firstNationAvailable, setFirstNationAvailable] = React.useState(false); + const [menuRowIndex, setMenuRowIndex] = React.useState(-1); + React.useEffect(() => { if (workFirstNationId === undefined) { setModalTitle("Add Nation"); @@ -213,16 +215,34 @@ const FirstNationList = () => { const user = row.original.indigenous_nation.relationship_holder; if (user === undefined || user === null) return <>; return ( - handleOpenUserMenu(event, row.original)} - onMouseLeave={handleCloseUserMenu} - sx={{ height: "100%" }} - > - + + { + event.stopPropagation(); + event.preventDefault(); + handleOpenUserMenu(event, row.original); + }} + onMouseLeave={handleCloseUserMenu} + > {`${user?.first_name[0]}${user?.last_name[0]}`} + { > {user.full_name} - ); }, @@ -425,7 +430,7 @@ const FirstNationList = () => { gap: "0.5rem", }} > - + setShowImportNationForm(true)} disabled={!firstNationAvailable} @@ -448,6 +453,9 @@ const FirstNationList = () => { isLoading: loading, showGlobalFilter: true, }} + onHoveredRowChange={({ ...params }) => { + debugger; + }} /> diff --git a/epictrack-web/src/components/workPlan/team/TeamForm.tsx b/epictrack-web/src/components/workPlan/team/TeamForm.tsx index 6658c8fed..2210b59ec 100644 --- a/epictrack-web/src/components/workPlan/team/TeamForm.tsx +++ b/epictrack-web/src/components/workPlan/team/TeamForm.tsx @@ -95,7 +95,7 @@ const TeamForm = ({ onSave, workStaffId }: TeamFormProps) => { const getAllStaff = async () => { try { - const result = await staffService.getAll(); + const result = await staffService.getAll(true); if (result.status === 200) { const staff = result.data as Staff[]; setStaff(sort(staff, "full_name")); diff --git a/epictrack-web/src/services/indigenousNationService/indigenousNationService.ts b/epictrack-web/src/services/indigenousNationService/indigenousNationService.ts index 93f304dfe..1b2467648 100644 --- a/epictrack-web/src/services/indigenousNationService/indigenousNationService.ts +++ b/epictrack-web/src/services/indigenousNationService/indigenousNationService.ts @@ -4,9 +4,10 @@ import ServiceBase from "../common/serviceBase"; import { MasterBase } from "../../models/type"; class IndigenousNationService implements ServiceBase { - async getAll() { + async getAll(is_active = false) { return await http.GetRequest( - Endpoints.IndigenousNations.INDIGENOUS_NATIONS + Endpoints.IndigenousNations.INDIGENOUS_NATIONS, + { is_active } ); } diff --git a/epictrack-web/src/services/staffService/staffService.ts b/epictrack-web/src/services/staffService/staffService.ts index d51f3f276..f091f5730 100644 --- a/epictrack-web/src/services/staffService/staffService.ts +++ b/epictrack-web/src/services/staffService/staffService.ts @@ -4,8 +4,8 @@ import { MasterBase } from "../../models/type"; import ServiceBase from "../common/serviceBase"; class StaffService implements ServiceBase { - async getAll() { - return await http.GetRequest(Endpoints.Staffs.STAFFS); + async getAll(is_active = false) { + return await http.GetRequest(Endpoints.Staffs.STAFFS, { is_active }); } async getById(id: string) {