diff --git a/src/app/protected/settings/locations/page.tsx b/src/app/protected/settings/locations/page.tsx
index 279d0c3..9f14f78 100644
--- a/src/app/protected/settings/locations/page.tsx
+++ b/src/app/protected/settings/locations/page.tsx
@@ -1,7 +1,7 @@
import { revalidatePath } from "next/cache"
import { headers } from "next/headers"
import { LocationTable } from "@/components/settings/locations/LocationTable"
-import type { Counter } from "@/generated/prisma/client"
+import { getAllCounters } from "@/lib/prisma/counter/getAllCounters"
import { doesLocationCodeExist } from "@/lib/prisma/location/doesLocationCodeExist"
import { getAllLocations } from "@/lib/prisma/location/getAllLocations"
import { insertLocation } from "@/lib/prisma/location/insertLocation"
@@ -22,7 +22,7 @@ export default async function Page() {
const currentUser = await getStaffUserBySub(user?.sub ?? "")
const locations = await getAllLocations()
const services = await getAllServices()
- const counters = [] as Counter[]
+ const counters = await getAllCounters()
const staffUsers = await getAllStaffUsers()
const revalidateTable = async () => {
diff --git a/src/app/protected/settings/users/page.tsx b/src/app/protected/settings/users/page.tsx
index 71a2faf..81f25a3 100644
--- a/src/app/protected/settings/users/page.tsx
+++ b/src/app/protected/settings/users/page.tsx
@@ -1,6 +1,7 @@
import { revalidatePath } from "next/cache"
import { headers } from "next/headers"
import { StaffUserTable } from "@/components/settings/users/StaffUserTable"
+import { getAllCounters } from "@/lib/prisma/counter/getAllCounters"
import { getAllLocations } from "@/lib/prisma/location/getAllLocations"
import { getAllStaffUsers } from "@/lib/prisma/staff_user/getAllStaffUsers"
import { getStaffUserBySub } from "@/lib/prisma/staff_user/getStaffUserBySub"
@@ -23,6 +24,7 @@ export default async function Page() {
const currentUser = await getStaffUserBySub(user?.sub ?? "")
const users = await getAllStaffUsers()
const locations = await getAllLocations()
+ const counters = await getAllCounters()
return (
@@ -31,6 +33,7 @@ export default async function Page() {
currentUser={currentUser}
users={users}
locations={locations}
+ counters={counters}
updateStaffUser={updateStaffUser}
revalidateTable={revalidateTable}
/>
diff --git a/src/components/common/header/locationCounterSwitch/LocationCounterSwitch.tsx b/src/components/common/header/locationCounterSwitch/LocationCounterSwitch.tsx
index a589254..2b4219b 100644
--- a/src/components/common/header/locationCounterSwitch/LocationCounterSwitch.tsx
+++ b/src/components/common/header/locationCounterSwitch/LocationCounterSwitch.tsx
@@ -118,6 +118,8 @@ export const LocationCounterSwitch = ({
const handleLocationChange = (locationCode: string) => {
const loc = locations?.find((l) => l?.code === locationCode) || null
setSelectedLocation(loc)
+ const defaultCounter = loc?.counters?.find((c) => c?.name === "Counter") || null
+ setSelectedCounter(defaultCounter)
}
const handleCounterChange = (counterId: string) => {
diff --git a/src/components/common/select/MultiSelect.tsx b/src/components/common/select/MultiSelect.tsx
index 32ada00..b2c0c5c 100644
--- a/src/components/common/select/MultiSelect.tsx
+++ b/src/components/common/select/MultiSelect.tsx
@@ -16,6 +16,7 @@ type MultiSelectProps = {
onChange: (selected: string[]) => void
placeholder?: string
disabled?: boolean
+ locked?: string[]
}
export const MultiSelect = ({
@@ -26,6 +27,7 @@ export const MultiSelect = ({
onChange,
placeholder = "Search...",
disabled = false,
+ locked = [],
}: MultiSelectProps) => {
const [query, setQuery] = useState("")
const [focusedWithin, setFocusedWithin] = useState(false)
@@ -47,14 +49,14 @@ export const MultiSelect = ({
const isSelected = (key: string) => selected.includes(key)
const toggle = (key: string) => {
- if (disabled) return
+ if (disabled || locked.includes(key)) return
if (isSelected(key)) onChange(selected.filter((s) => s !== key))
else onChange([...selected, key])
}
const remove = (e: React.MouseEvent, key: string) => {
e.stopPropagation()
- if (disabled) return
+ if (disabled || locked.includes(key)) return
onChange(selected.filter((s) => s !== key))
}
@@ -251,7 +253,7 @@ export const MultiSelect = ({
>
{o.label}
- {!disabled && (
+ {!disabled && !locked.includes(o.key) && (
diff --git a/src/components/settings/users/EditStaffUserModal/EditStaffUserModal.tsx b/src/components/settings/users/EditStaffUserModal/EditStaffUserModal.tsx
index 22d3040..ec0200a 100644
--- a/src/components/settings/users/EditStaffUserModal/EditStaffUserModal.tsx
+++ b/src/components/settings/users/EditStaffUserModal/EditStaffUserModal.tsx
@@ -8,8 +8,11 @@ import {
DialogTitle,
Modal,
} from "@/components/common/dialog"
-import type { Location, Role, StaffUser } from "@/generated/prisma/client"
+import type { Role } from "@/generated/prisma/client"
import { useEditStaffUserModal } from "@/hooks/settings/users/useEditStaffUserModal"
+import type { CounterWithRelations } from "@/lib/prisma/counter/types"
+import type { LocationWithRelations } from "@/lib/prisma/location/types"
+import type { StaffUserWithRelations } from "@/lib/prisma/staff_user/types"
import { PermissionsSection } from "./sections/PermissionsSection"
import { RoleAndAssignmentSection } from "./sections/RoleAndAssignmentSection"
import { UserInformationSection } from "./sections/UserInformationSection"
@@ -17,17 +20,18 @@ import { UserInformationSection } from "./sections/UserInformationSection"
type EditStaffUserModalProps = {
open: boolean
onClose: () => void
- user: StaffUser | null
+ user: StaffUserWithRelations | null
canEdit: boolean
canArchive: boolean
canEditLocation: boolean
availableRoles: Role[]
- locations: Location[]
+ locations: LocationWithRelations[]
+ counters: CounterWithRelations[]
updateStaffUser: (
- user: Partial,
- prevUser: Partial,
+ user: Partial,
+ prevUser: Partial,
availableRoles: Role[]
- ) => Promise
+ ) => Promise
revalidateTable: () => Promise
openConfirmArchiveUserModal: () => void
}
@@ -40,6 +44,7 @@ export const EditStaffUserModal = ({
canArchive,
canEditLocation,
locations,
+ counters,
availableRoles,
updateStaffUser,
revalidateTable,
@@ -105,6 +110,7 @@ export const EditStaffUserModal = ({
>
+ user: StaffUserWithRelations
+ setFormData: Dispatch>
disabled?: boolean
}
diff --git a/src/components/settings/users/EditStaffUserModal/sections/RoleAndAssignmentSection.tsx b/src/components/settings/users/EditStaffUserModal/sections/RoleAndAssignmentSection.tsx
index 43a1ddb..43a5877 100644
--- a/src/components/settings/users/EditStaffUserModal/sections/RoleAndAssignmentSection.tsx
+++ b/src/components/settings/users/EditStaffUserModal/sections/RoleAndAssignmentSection.tsx
@@ -1,12 +1,16 @@
import type { Dispatch, SetStateAction } from "react"
import { SelectInput } from "@/components/common/select"
-import type { Location, Role, StaffUser } from "@/generated/prisma/client"
+import type { Role } from "@/generated/prisma/client"
+import type { CounterWithRelations } from "@/lib/prisma/counter/types"
+import type { LocationWithRelations } from "@/lib/prisma/location/types"
+import type { StaffUserWithRelations } from "@/lib/prisma/staff_user/types"
import { Section } from "./Section"
type RoleAndAssignmentSectionProps = {
- user: StaffUser
- locations: Location[]
- setFormData: Dispatch>
+ user: StaffUserWithRelations
+ locations: LocationWithRelations[]
+ counters: CounterWithRelations[]
+ setFormData: Dispatch>
availableRoles: Role[]
canEditLocation: boolean
disabled?: boolean
@@ -15,13 +19,26 @@ type RoleAndAssignmentSectionProps = {
export const RoleAndAssignmentSection = ({
user,
locations,
+ counters,
setFormData,
availableRoles,
canEditLocation,
disabled = false,
}: RoleAndAssignmentSectionProps) => {
+ const locationCounters = counters.filter((c) =>
+ c.locations.some((l) => l.code === user.locationCode)
+ )
+
+ const defaultCounter = counters.find((c) => c.name === "Counter") ?? null
+
+ const handleLocationChange = (value: string) => {
+ setFormData(
+ (prev) => prev && { ...prev, locationCode: value, counterId: defaultCounter?.id ?? null }
+ )
+ }
+
return (
-
+
setFormData((prev) => prev && { ...prev, locationCode: value })}
+ onChange={handleLocationChange}
disabled={!canEditLocation || disabled}
options={locations
.filter((location) => location.deletedAt === null)
@@ -44,6 +61,15 @@ export const RoleAndAssignmentSection = ({
label: `${location.name} (${location.code})`,
}))}
/>
+
+ setFormData((prev) => prev && { ...prev, counterId: value })}
+ disabled={disabled || !user.locationCode || locationCounters.length === 0}
+ options={locationCounters.map((counter) => ({ value: counter.id, label: counter.name }))}
+ />
)
}
diff --git a/src/components/settings/users/StaffUserTable/StaffUserTable.tsx b/src/components/settings/users/StaffUserTable/StaffUserTable.tsx
index 432e5cf..370dc10 100644
--- a/src/components/settings/users/StaffUserTable/StaffUserTable.tsx
+++ b/src/components/settings/users/StaffUserTable/StaffUserTable.tsx
@@ -2,8 +2,10 @@
import { DataTable } from "@/components/common/datatable"
import { Switch } from "@/components/common/switch"
-import type { Location, Role, StaffUser } from "@/generated/prisma/client"
+import type { Role } from "@/generated/prisma/client"
import { useStaffUserTable } from "@/hooks/settings/users/useStaffUserTable"
+import type { CounterWithRelations } from "@/lib/prisma/counter/types"
+import type { LocationWithRelations } from "@/lib/prisma/location/types"
import type { StaffUserWithRelations } from "@/lib/prisma/staff_user/types"
import { ConfirmArchiveUserModal } from "../ConfirmArchiveUserModal"
import { EditStaffUserModal } from "../EditStaffUserModal"
@@ -11,13 +13,14 @@ import { columns } from "./columns"
export type UserTableProps = {
currentUser: StaffUserWithRelations | null
- users: StaffUser[]
- locations: Location[]
+ users: StaffUserWithRelations[]
+ locations: LocationWithRelations[]
+ counters: CounterWithRelations[]
updateStaffUser: (
- user: Partial,
- prevUser: Partial,
+ user: Partial,
+ prevUser: Partial,
availableRoles?: Role[]
- ) => Promise
+ ) => Promise
revalidateTable: () => Promise
}
@@ -25,6 +28,7 @@ export const StaffUserTable = ({
currentUser,
users,
locations,
+ counters,
updateStaffUser,
revalidateTable,
}: UserTableProps) => {
@@ -75,6 +79,7 @@ export const StaffUserTable = ({
canEditLocation={canEditLocationSelectedUser}
availableRoles={availableRolesForSelectedUser}
locations={locations}
+ counters={counters}
updateStaffUser={updateStaffUser}
revalidateTable={revalidateTable}
openConfirmArchiveUserModal={openConfirmArchiveUserModal}
diff --git a/src/components/settings/users/StaffUserTable/columns.tsx b/src/components/settings/users/StaffUserTable/columns.tsx
index 4bb96c4..0c87504 100644
--- a/src/components/settings/users/StaffUserTable/columns.tsx
+++ b/src/components/settings/users/StaffUserTable/columns.tsx
@@ -1,7 +1,7 @@
import type { ColumnConfig } from "@/components/common/datatable"
-import type { StaffUser } from "@/generated/prisma/client"
+import type { StaffUserWithRelations } from "@/lib/prisma/staff_user/types"
-export const columns: ColumnConfig[] = [
+export const columns: ColumnConfig[] = [
{
key: "displayName",
label: "Name",
diff --git a/src/hooks/settings/locations/useLocationForm/useLocationForm.ts b/src/hooks/settings/locations/useLocationForm/useLocationForm.ts
index d3d4d3e..14a6c12 100644
--- a/src/hooks/settings/locations/useLocationForm/useLocationForm.ts
+++ b/src/hooks/settings/locations/useLocationForm/useLocationForm.ts
@@ -65,6 +65,12 @@ export const useLocationForm = ({
[staffUsers]
)
+ // IDs of counters named "Counter" that are currently assigned to this location
+ const lockedCounterIds = useMemo(
+ () => (location.counters ?? []).filter((c) => c.name === "Counter").map((c) => c.id),
+ [location.counters]
+ )
+
// biome-ignore lint/correctness/useExhaustiveDependencies: <>
useEffect(() => {
// when the location changes (new location loaded) reset initial code and state
@@ -153,11 +159,13 @@ export const useLocationForm = ({
}
const handleCountersChange = (selected: string[]) => {
+ // Ensure locked counters (named "Counter") are never removed
+ const withLocked = Array.from(new Set([...lockedCounterIds, ...selected]))
setFormData((s) =>
s
? {
...s,
- counters: selected.map((id) => counters.find((c) => c.id === id) as Counter),
+ counters: withLocked.map((id) => counters.find((c) => c.id === id) as Counter),
}
: s
)
@@ -181,6 +189,7 @@ export const useLocationForm = ({
selectedStaffUserIds,
serviceOptions,
counterOptions,
+ lockedCounterIds,
staffUserOptions,
handleCodeChange,
handleNameChange,
diff --git a/src/hooks/settings/users/useEditStaffUserModal/useEditStaffUserModal.ts b/src/hooks/settings/users/useEditStaffUserModal/useEditStaffUserModal.ts
index c4fbf7c..04d4c43 100644
--- a/src/hooks/settings/users/useEditStaffUserModal/useEditStaffUserModal.ts
+++ b/src/hooks/settings/users/useEditStaffUserModal/useEditStaffUserModal.ts
@@ -1,18 +1,19 @@
import { useRouter } from "next/navigation"
import { useEffect, useState } from "react"
-import type { Role, StaffUser } from "@/generated/prisma/client"
+import type { Role } from "@/generated/prisma/client"
+import type { StaffUserWithRelations } from "@/lib/prisma/staff_user/types"
type UseEditStaffUserModalProps = {
open: boolean
onClose: () => void
- user: StaffUser | null
+ user: StaffUserWithRelations | null
canEdit: boolean
canArchive: boolean
updateStaffUser: (
- user: Partial,
- prevUser: Partial,
+ user: Partial,
+ prevUser: Partial,
availableRoles: Role[]
- ) => Promise
+ ) => Promise
availableRoles: Role[]
revalidateTable: () => Promise
openConfirmArchiveUserModal: () => void
@@ -46,8 +47,8 @@ export const useEditStaffUserModal = ({
const router = useRouter()
const [isSaving, setIsSaving] = useState(false)
const [error, setError] = useState(null)
- const [formData, setFormData] = useState(null)
- const [previousUser, setPreviousUser] = useState(null)
+ const [formData, setFormData] = useState(null)
+ const [previousUser, setPreviousUser] = useState(null)
useEffect(() => {
if (open && user) {
diff --git a/src/hooks/settings/users/useStaffUserTable/useStaffUserTable.ts b/src/hooks/settings/users/useStaffUserTable/useStaffUserTable.ts
index 8535927..41186a3 100644
--- a/src/hooks/settings/users/useStaffUserTable/useStaffUserTable.ts
+++ b/src/hooks/settings/users/useStaffUserTable/useStaffUserTable.ts
@@ -1,15 +1,16 @@
import { useEffect, useMemo, useState } from "react"
-import type { Location, Role, StaffUser } from "@/generated/prisma/client"
+import type { Role } from "@/generated/prisma/client"
import { useAuth } from "@/hooks/useAuth"
import { useDialog } from "@/hooks/useDialog"
+import type { LocationWithRelations } from "@/lib/prisma/location/types"
import type { StaffUserWithRelations } from "@/lib/prisma/staff_user/types"
import { resolvePolicy } from "@/utils/policies/resolvePolicy"
import type { UserContext } from "@/utils/policies/types"
type UseStaffUserTableProps = {
currentUser: StaffUserWithRelations | null
- users: StaffUser[]
- locations: Location[]
+ users: StaffUserWithRelations[]
+ locations: LocationWithRelations[]
revalidateTable: () => Promise
}
@@ -46,7 +47,7 @@ export const useStaffUserTable = ({ currentUser, users }: UseStaffUserTableProps
[idir_user_guid, role, currentUser?.locationCode]
)
- const [selectedUser, setSelectedUser] = useState(null)
+ const [selectedUser, setSelectedUser] = useState(null)
const [canEditSelectedUser, setCanEditSelectedUser] = useState(false)
const [canArchiveSelectedUser, setCanArchiveSelectedUser] = useState(false)
const [canEditLocationSelectedUser, setCanEditLocationSelectedUser] = useState(false)
@@ -75,12 +76,12 @@ export const useStaffUserTable = ({ currentUser, users }: UseStaffUserTableProps
}
}, [selectedUser, userContext])
- const handleRowClick = (user: StaffUser) => {
+ const handleRowClick = (user: StaffUserWithRelations) => {
setSelectedUser(user)
openEditUserModal()
}
- const usersToShow = users.filter((user) => {
+ const usersToShow = users.filter((user: StaffUserWithRelations) => {
if (!showArchived && user.deletedAt !== null) return false
const actions = resolvePolicy("staff_user", userContext, user)
return actions.includes("view")
diff --git a/src/lib/prisma/location/insertLocation.test.ts b/src/lib/prisma/location/insertLocation.test.ts
index 781262a..cb7e635 100644
--- a/src/lib/prisma/location/insertLocation.test.ts
+++ b/src/lib/prisma/location/insertLocation.test.ts
@@ -3,8 +3,13 @@ import { prisma } from "@/utils/db/prisma"
import { insertLocation } from "./insertLocation"
import type { LocationWithRelations } from "./types"
+const mockDefaultCounter = { id: "default-counter-id", name: "Counter" }
+
vi.mock("@/utils/db/prisma", () => ({
prisma: {
+ counter: {
+ findUniqueOrThrow: vi.fn(),
+ },
location: {
create: vi.fn(),
},
@@ -14,6 +19,7 @@ vi.mock("@/utils/db/prisma", () => ({
describe("insertLocation", () => {
beforeEach(() => {
vi.clearAllMocks()
+ vi.mocked(prisma.counter.findUniqueOrThrow).mockResolvedValue(mockDefaultCounter as never)
})
it("inserts and returns the created location when name is provided with relations", async () => {
@@ -35,18 +41,21 @@ describe("insertLocation", () => {
staffUsers: [{ guid: "u1" }],
}
- vi.mocked(prisma.location.create).mockResolvedValueOnce(mockLocation as LocationWithRelations)
+ vi.mocked(prisma.location.create).mockResolvedValueOnce(
+ mockLocation as unknown as LocationWithRelations
+ )
const result = await insertLocation(input as Partial)
expect(result).toEqual(mockLocation)
+ expect(prisma.counter.findUniqueOrThrow).toHaveBeenCalledWith({ where: { name: "Counter" } })
expect(prisma.location.create).toHaveBeenCalledWith({
data: {
name: "New Office",
timezone: "UTC",
streetAddress: "456 Main St",
services: { connect: [{ code: "SVC1" }] },
- counters: { connect: [{ id: "c1" }] },
+ counters: { connect: [{ id: "default-counter-id" }, { id: "c1" }] },
staffUsers: { connect: [{ guid: "u1" }] },
},
include: { services: true, counters: true, staffUsers: true },
@@ -70,8 +79,12 @@ describe("insertLocation", () => {
const result = await insertLocation(input as Partial)
expect(result).toEqual(mockLocation)
+ expect(prisma.counter.findUniqueOrThrow).toHaveBeenCalledWith({ where: { name: "Counter" } })
expect(prisma.location.create).toHaveBeenCalledWith({
- data: { name: "Simple Office" },
+ data: {
+ name: "Simple Office",
+ counters: { connect: [{ id: "default-counter-id" }] },
+ },
include: { services: true, counters: true, staffUsers: true },
})
})
@@ -83,6 +96,7 @@ describe("insertLocation", () => {
/Name is required to insert a location/
)
+ expect(prisma.counter.findUniqueOrThrow).not.toHaveBeenCalled()
expect(prisma.location.create).not.toHaveBeenCalled()
})
})
diff --git a/src/lib/prisma/location/insertLocation.ts b/src/lib/prisma/location/insertLocation.ts
index 642bf37..ff3017d 100644
--- a/src/lib/prisma/location/insertLocation.ts
+++ b/src/lib/prisma/location/insertLocation.ts
@@ -18,15 +18,18 @@ export const insertLocation = async (
const { services, counters, staffUsers, ...rest } = location
+ // Always link the default "Counter" counter to the new location
+ const defaultCounter = await prisma.counter.findUniqueOrThrow({ where: { name: "Counter" } })
+
+ const counterIds = new Set([defaultCounter.id, ...(counters ?? []).map((c) => c.id)])
+
// map services to Prisma connect shape when provided
const data: Prisma.LocationCreateInput = {
...(rest as Prisma.LocationCreateInput),
...(services && services.length > 0
? { services: { connect: services.map((s) => ({ code: s.code })) } }
: {}),
- ...(counters && counters.length > 0
- ? { counters: { connect: counters.map((c) => ({ id: c.id })) } }
- : {}),
+ counters: { connect: Array.from(counterIds).map((id) => ({ id })) },
...(staffUsers && staffUsers.length > 0
? { staffUsers: { connect: staffUsers.map((u) => ({ guid: u.guid })) } }
: {}),
diff --git a/src/lib/prisma/location/updateLocation.test.ts b/src/lib/prisma/location/updateLocation.test.ts
index f971e68..64fb804 100644
--- a/src/lib/prisma/location/updateLocation.test.ts
+++ b/src/lib/prisma/location/updateLocation.test.ts
@@ -3,8 +3,16 @@ import { prisma } from "@/utils/db/prisma"
import type { LocationWithRelations } from "./types"
import { updateLocation } from "./updateLocation"
+const mockDefaultCounter = { id: "default-counter-id", name: "Counter" }
+
vi.mock("@/utils/db/prisma", () => ({
prisma: {
+ counter: {
+ findUniqueOrThrow: vi.fn(),
+ },
+ staffUser: {
+ updateMany: vi.fn(),
+ },
location: {
update: vi.fn(),
},
@@ -67,6 +75,7 @@ describe("updateLocation", () => {
isPesticideDesignate: false,
isFinanceDesignate: false,
isIta2Designate: false,
+ isDeveloper: false,
}
const mockLocationWithRelations: LocationWithRelations = {
@@ -78,6 +87,8 @@ describe("updateLocation", () => {
beforeEach(() => {
vi.clearAllMocks()
+ vi.mocked(prisma.counter.findUniqueOrThrow).mockResolvedValue(mockDefaultCounter as never)
+ vi.mocked(prisma.staffUser.updateMany).mockResolvedValue({ count: 0 })
})
it("returns null when neither code nor prevLocation.code is provided", async () => {
@@ -248,6 +259,11 @@ describe("updateLocation", () => {
}),
include: { services: true, counters: true, staffUsers: true },
})
+ expect(prisma.counter.findUniqueOrThrow).toHaveBeenCalledWith({ where: { name: "Counter" } })
+ expect(prisma.staffUser.updateMany).toHaveBeenCalledWith({
+ where: { guid: { in: ["user-guid-2"] } },
+ data: { counterId: "default-counter-id" },
+ })
})
it("updates multiple fields and relations together", async () => {
diff --git a/src/lib/prisma/location/updateLocation.ts b/src/lib/prisma/location/updateLocation.ts
index b83a2e1..608af76 100644
--- a/src/lib/prisma/location/updateLocation.ts
+++ b/src/lib/prisma/location/updateLocation.ts
@@ -58,5 +58,25 @@ export const updateLocation = async (
include: { services: true, counters: true, staffUsers: true },
})
+ // Reset counter to default for users whose location membership changed
+ if (staffUsers) {
+ const defaultCounter = await prisma.counter.findUniqueOrThrow({ where: { name: "Counter" } })
+
+ const prevGuids = new Set((prevLocation.staffUsers ?? []).map((u) => u.guid))
+ const newGuids = new Set(staffUsers.map((u) => u.guid))
+
+ const changedGuids = [
+ ...Array.from(prevGuids).filter((g) => !newGuids.has(g)), // removed
+ ...Array.from(newGuids).filter((g) => !prevGuids.has(g)), // added
+ ]
+
+ if (changedGuids.length > 0) {
+ await prisma.staffUser.updateMany({
+ where: { guid: { in: changedGuids } },
+ data: { counterId: defaultCounter.id },
+ })
+ }
+ }
+
return newLocation
}