TSK-897: Allow team-leads and managers to edit descendant departments (#2825)

Signed-off-by: Vyacheslav Tumanov <me@slavatumanov.me>
This commit is contained in:
Vyacheslav Tumanov 2023-03-24 14:37:50 +05:00 committed by GitHub
parent b63fea06d3
commit b7e4b8b8dc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -129,7 +129,7 @@
descendants: Map<Ref<Department>, Department[]> descendants: Map<Ref<Department>, Department[]>
): void { ): void {
const staff = departmentStaff.filter((p) => p.department === department) const staff = departmentStaff.filter((p) => p.department === department)
editableList.push(...staff.map((p) => p._id)) editableList.push(...staff.filter((p) => !editableList.includes(p._id)).map((p) => p._id))
const desc = descendants.get(department) ?? [] const desc = descendants.get(department) ?? []
for (const des of desc) { for (const des of desc) {
pushChilds(des._id, departmentStaff, descendants) pushChilds(des._id, departmentStaff, descendants)
@ -147,10 +147,11 @@
descendants: Map<Ref<Department>, Department[]> descendants: Map<Ref<Department>, Department[]>
) { ) {
const dep = departmentById.get(department) const dep = departmentById.get(department)
if (dep !== undefined && isEditable(dep)) { if (dep === undefined) return
if (isEditable(dep)) {
pushChilds(dep._id, departmentStaff, descendants) pushChilds(dep._id, departmentStaff, descendants)
} else { } else {
const descendantDepartments = descendants.get(department) const descendantDepartments = descendants.get(dep._id)
if (descendantDepartments !== undefined) { if (descendantDepartments !== undefined) {
for (const department of descendantDepartments) { for (const department of descendantDepartments) {
if (isEditable(department)) { if (isEditable(department)) {
@ -165,12 +166,11 @@
function updateEditableList ( function updateEditableList (
departmentById: Map<Ref<Department>, Department>, departmentById: Map<Ref<Department>, Department>,
department: Ref<Department>,
departmentStaff: Staff[], departmentStaff: Staff[],
descendants: Map<Ref<Department>, Department[]> descendants: Map<Ref<Department>, Department[]>
) { ) {
editableList = [currentEmployee] editableList = [currentEmployee]
checkDepartmentEditable(departmentById, department, departmentStaff, descendants) checkDepartmentEditable(departmentById, hr.ids.Head, departmentStaff, descendants)
editableList = editableList editableList = editableList
} }
@ -178,15 +178,14 @@
staff: Staff[], staff: Staff[],
departments: Ref<Department>[], departments: Ref<Department>[],
employeeRequests: Map<Ref<Staff>, Request[]>, employeeRequests: Map<Ref<Staff>, Request[]>,
department: Ref<Department>,
descendants: Map<Ref<Department>, Department[]>, descendants: Map<Ref<Department>, Department[]>,
departmentById: Map<Ref<Department>, Department> departmentById: Map<Ref<Department>, Department>
) { ) {
departmentStaff = staff.filter((p) => departments.includes(p.department) || employeeRequests.has(p._id)) departmentStaff = staff.filter((p) => departments.includes(p.department) || employeeRequests.has(p._id))
updateEditableList(departmentById, department, departmentStaff, descendants) updateEditableList(departmentById, departmentStaff, descendants)
} }
$: updateStaff(staff, departments, employeeRequests, department, descendants, departmentById) $: updateStaff(staff, departments, employeeRequests, descendants, departmentById)
const reportQuery = createQuery() const reportQuery = createQuery()