ENCOA-96: License Distribuition system from Master Corporate to Corporate

This commit is contained in:
Tiago Ribeiro
2024-08-24 01:02:34 +01:00
parent 3e21538d02
commit 032d20b4b2
10 changed files with 235 additions and 194 deletions

View File

@@ -49,6 +49,7 @@ import {createColumnHelper} from "@tanstack/react-table";
import Checkbox from "@/components/Low/Checkbox";
import List from "@/components/List";
import {getUserCompanyName} from "@/resources/user";
import useUserBalance from "@/hooks/useUserBalance";
interface Props {
user: CorporateUser;
@@ -159,13 +160,13 @@ export default function CorporateDashboard({user}: Props) {
const [corporateUserToShow, setCorporateUserToShow] = useState<CorporateUser>();
const [selectedAssignment, setSelectedAssignment] = useState<Assignment>();
const [isCreatingAssignment, setIsCreatingAssignment] = useState(false);
const [userBalance, setUserBalance] = useState(0);
const {stats} = useStats();
const {users, reload, isLoading} = useUsers();
const {codes} = useCodes(user.id);
const {groups} = useGroups({admin: user.id});
const {assignments, isLoading: isAssignmentsLoading, reload: reloadAssignments} = useAssignments({corporate: user.id});
const {balance} = useUserBalance();
const appendUserFilters = useFilterStore((state) => state.appendUserFilter);
const router = useRouter();
@@ -174,14 +175,6 @@ export default function CorporateDashboard({user}: Props) {
setShowModal(!!selectedUser && page === "");
}, [selectedUser, page]);
useEffect(() => {
const relatedGroups = groups.filter((x) => x.name === "Students" || x.name === "Teachers" || x.name === "Corporate");
const usersInGroups = relatedGroups.map((x) => x.participants).flat();
const filteredCodes = codes.filter((x) => !x.userId || !usersInGroups.includes(x.userId));
setUserBalance(usersInGroups.length + filteredCodes.length);
}, [codes, groups]);
useEffect(() => {
// in this case it fetches the master corporate account
getUserCorporate(user.id).then(setCorporateUserToShow);
@@ -496,7 +489,7 @@ export default function CorporateDashboard({user}: Props) {
<IconCard
Icon={BsPersonCheck}
label="User Balance"
value={`${userBalance}/${user.corporateInformation?.companyInformation?.userAmount || 0}`}
value={`${balance}/${user.corporateInformation?.companyInformation?.userAmount || 0}`}
color="purple"
/>
<IconCard

View File

@@ -52,6 +52,7 @@ import Select from "@/components/Low/Select";
import {Menu, MenuButton, MenuItem, MenuItems} from "@headlessui/react";
import {Popover, PopoverContent, PopoverTrigger} from "@/components/ui/popover";
import MasterStatistical from "./MasterStatistical";
import useUserBalance from "@/hooks/useUserBalance";
interface Props {
user: MasterCorporateUser;
@@ -306,8 +307,8 @@ export default function MasterCorporateDashboard({user}: Props) {
const {stats} = useStats();
const {users, reload} = useUsers();
const {codes} = useCodes(user.id);
const {groups} = useGroups({admin: user.id, userType: user.type});
const {balance} = useUserBalance();
const masterCorporateUserGroups = [...new Set(groups.filter((u) => u.admin === user.id).flatMap((g) => g.participants))];
@@ -671,7 +672,7 @@ export default function MasterCorporateDashboard({user}: Props) {
<IconCard
Icon={BsPersonCheck}
label="User Balance"
value={`${codes.length}/${user.corporateInformation?.companyInformation?.userAmount || 0}`}
value={`${balance}/${user.corporateInformation?.companyInformation?.userAmount || 0}`}
color="purple"
/>
<IconCard
@@ -774,6 +775,11 @@ export default function MasterCorporateDashboard({user}: Props) {
{selectedUser && (
<div className="w-full flex flex-col gap-8">
<UserCard
maxUserAmount={
user.type === "mastercorporate"
? (user.corporateInformation?.companyInformation?.userAmount || 0) - balance
: undefined
}
loggedInUser={user}
onClose={(shouldReload) => {
setSelectedUser(undefined);