forked from baron/baron-sso
fix(adminfront): guard employee ID metadata in GPO priority swap
This commit is contained in:
@@ -23,7 +23,6 @@ import { ScrollArea } from "../../../components/ui/scroll-area";
|
||||
import {
|
||||
type BulkUserItem,
|
||||
type BulkUserResult,
|
||||
type TenantSummary,
|
||||
bulkCreateUsers,
|
||||
createTenant,
|
||||
fetchAllTenants,
|
||||
@@ -41,6 +40,7 @@ import {
|
||||
type HanmacImportEmailPreview,
|
||||
buildHanmacImportEmailPreview,
|
||||
} from "../utils/hanmacImportEmail";
|
||||
import { applyGeneralPlanningOfficePriority } from "../utils/generalPlanningOfficePriority";
|
||||
|
||||
interface UserBulkUploadModalProps {
|
||||
onSuccess?: () => void;
|
||||
@@ -125,19 +125,6 @@ function hanmacEmailStatusClass(preview?: HanmacImportEmailPreview) {
|
||||
return "text-muted-foreground";
|
||||
}
|
||||
|
||||
function isUnderGeneralPlanningOffice(
|
||||
tenantSlug: string,
|
||||
tenants: TenantSummary[],
|
||||
): boolean {
|
||||
let current = tenants.find((t) => t.slug === tenantSlug);
|
||||
while (current) {
|
||||
if (current.name === "총괄기획실") return true;
|
||||
if (!current.parentId) break;
|
||||
current = tenants.find((t) => t.id === current?.parentId);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
export const downloadUserTemplate = () => {
|
||||
const headers =
|
||||
"email,name,phone,role,tenant_slug,department,grade,position,jobTitle,employee_id,tenant_slug1,department1,grade1,position1,jobTitle1,employee_id1";
|
||||
@@ -292,68 +279,7 @@ export function UserBulkUploadModal({
|
||||
}
|
||||
|
||||
return previewData.map((user, index) => {
|
||||
let finalUser = { ...user };
|
||||
|
||||
// [Issue 868] Swap logic for '총괄기획실' (General Planning Office)
|
||||
// 만약 두 번째 테넌트가 '총괄기획실' 산하이고, 첫 번째 테넌트가 아니면 서로 맞바꿉니다.
|
||||
if (
|
||||
finalUser.additionalAppointments &&
|
||||
finalUser.additionalAppointments.length > 0
|
||||
) {
|
||||
const firstAdditional = finalUser.additionalAppointments[0];
|
||||
const secondarySlug = firstAdditional.tenantSlug;
|
||||
|
||||
if (
|
||||
secondarySlug &&
|
||||
isUnderGeneralPlanningOffice(secondarySlug, tenants)
|
||||
) {
|
||||
if (!isUnderGeneralPlanningOffice(finalUser.tenantSlug || "", tenants)) {
|
||||
// Perform swap
|
||||
const primary = {
|
||||
tenantSlug: finalUser.tenantSlug,
|
||||
tenantImport: finalUser.tenantImport,
|
||||
department: finalUser.department,
|
||||
grade: finalUser.grade,
|
||||
position: finalUser.position,
|
||||
jobTitle: finalUser.jobTitle,
|
||||
employee_id: finalUser.metadata?.employee_id,
|
||||
};
|
||||
|
||||
finalUser.tenantSlug = firstAdditional.tenantSlug;
|
||||
if (finalUser.tenantImport) {
|
||||
finalUser.tenantImport = {
|
||||
...finalUser.tenantImport,
|
||||
slug: firstAdditional.tenantSlug || "",
|
||||
name: firstAdditional.tenantName || firstAdditional.tenantSlug || "",
|
||||
};
|
||||
}
|
||||
finalUser.department = firstAdditional.department;
|
||||
finalUser.grade = firstAdditional.grade;
|
||||
finalUser.position = firstAdditional.position;
|
||||
finalUser.jobTitle = firstAdditional.jobTitle;
|
||||
if (finalUser.metadata) {
|
||||
finalUser.metadata.employee_id =
|
||||
firstAdditional.metadata?.employee_id;
|
||||
}
|
||||
|
||||
finalUser.additionalAppointments = [
|
||||
{
|
||||
...firstAdditional,
|
||||
tenantSlug: primary.tenantSlug,
|
||||
department: primary.department,
|
||||
grade: primary.grade,
|
||||
position: primary.position,
|
||||
jobTitle: primary.jobTitle,
|
||||
metadata: {
|
||||
...firstAdditional.metadata,
|
||||
employee_id: primary.employee_id,
|
||||
},
|
||||
},
|
||||
...finalUser.additionalAppointments.slice(1),
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
const finalUser = applyGeneralPlanningOfficePriority(user, tenants);
|
||||
|
||||
const key = tenantImportKeyFromUser(finalUser);
|
||||
const resolvedTenant = key ? tenantByKey.get(key) : undefined;
|
||||
|
||||
Reference in New Issue
Block a user