diff --git a/app/panel/(layout)/add-doctor/page.js b/app/panel/(layout)/add-doctor/page.js index 08d6a9c..3b332be 100644 --- a/app/panel/(layout)/add-doctor/page.js +++ b/app/panel/(layout)/add-doctor/page.js @@ -1,8 +1,7 @@ import AddDoctorPage from "@/components/panel/addDoctor"; -import Information from "@/data/information.json"; function AddDoctor() { - return ; + return ; } export default AddDoctor; diff --git a/app/panel/(layout)/dashboard/page.js b/app/panel/(layout)/dashboard/page.js index 48322bc..199417a 100644 --- a/app/panel/(layout)/dashboard/page.js +++ b/app/panel/(layout)/dashboard/page.js @@ -2,7 +2,7 @@ import DashboardPage from "@/components/panel/dashboard"; import { cookies } from "next/headers"; import { fetchReq } from "@/lib/req"; import { safeJsonParse } from "@/lib/sanitize"; -import { adaptRepresentationDashboard } from "@/helper"; +import { adaptRepresentationDashboard } from "@/lib/representationAdapters"; export const dynamic = "force-dynamic"; diff --git a/app/panel/(layout)/turns/page.js b/app/panel/(layout)/turns/page.js index c87d470..f3a473e 100644 --- a/app/panel/(layout)/turns/page.js +++ b/app/panel/(layout)/turns/page.js @@ -1,8 +1,40 @@ import TurnsPage from "@/components/panel/turns"; -import Information from "@/data/information.json"; +import { cookies } from "next/headers"; +import { fetchReq } from "@/lib/req"; +import { safeJsonParse } from "@/lib/sanitize"; +import { adaptRepresentationDashboard } from "@/lib/representationAdapters"; -function page() { - return ; +export const dynamic = "force-dynamic"; + +async function page() { + const API_URL = process.env.NEXT_PUBLIC_API_URL; + let dashboard = null; + + try { + const cookieStore = await cookies(); + const userInfo = cookieStore.get("userInfo"); + const accessToken = cookieStore.get("access_token"); + + if (userInfo && accessToken) { + const parsedUserInfo = safeJsonParse(userInfo.value); + const representationUuid = parsedUserInfo?.representation_uuid; + + if (representationUuid) { + const now = new Date(); + const year = now.getFullYear(); + const month = now.getMonth() + 1; + + dashboard = await fetchReq( + `${API_URL}/api/v1/representation/${representationUuid}/dashboard/monthly?year=${year}&month=${month}`, + { headers: { Authorization: `Bearer ${accessToken.value}` } } + ); + } + } + } catch (error) { + console.error("Error fetching representation turns:", error); + } + + return ; } export default page; diff --git a/app/panel/(layout)/user-account/page.js b/app/panel/(layout)/user-account/page.js index 56c3b25..5ffcf1b 100644 --- a/app/panel/(layout)/user-account/page.js +++ b/app/panel/(layout)/user-account/page.js @@ -1,9 +1,38 @@ import UserAccountPage from "@/components/panel/userAccount"; -import Information from "@/data/information.json"; -import Bank from "@/data/bank.json"; +import { cookies } from "next/headers"; +import { fetchReq } from "@/lib/req"; +import { safeJsonParse } from "@/lib/sanitize"; +import { adaptBankAccount } from "@/lib/representationAdapters"; -function UserAccount() { - return ; +export const dynamic = "force-dynamic"; + +async function UserAccount() { + const API_URL = process.env.NEXT_PUBLIC_API_URL; + let representation = null; + + try { + const cookieStore = await cookies(); + const userInfo = cookieStore.get("userInfo"); + const accessToken = cookieStore.get("access_token"); + + if (userInfo && accessToken) { + const parsedUserInfo = safeJsonParse(userInfo.value); + const representationUuid = parsedUserInfo?.representation_uuid; + + if (representationUuid) { + representation = await fetchReq( + `${API_URL}/api/v1/representation/${representationUuid}`, + { headers: { Authorization: `Bearer ${accessToken.value}` } } + ); + } + } + } catch (error) { + console.error("Error fetching representation account:", error); + } + + const bank = adaptBankAccount(representation?.data?.bank_account); + + return ; } export default UserAccount; diff --git a/components/clinic/components/doctors/index.js b/components/clinic/components/doctors/index.js index 3e35fbe..dad74f1 100644 --- a/components/clinic/components/doctors/index.js +++ b/components/clinic/components/doctors/index.js @@ -3,7 +3,6 @@ import { useState } from "react"; import List from "./List"; import Head from "./head"; -import page from "@/app/panel/(layout)/turns/page"; function Doctors({ slug, doctors, pages }) { const [page, setPage] = useState(pages?.current || 1); diff --git a/components/panel/Content.js b/components/panel/Content.js index 85f67f2..adf8516 100644 --- a/components/panel/Content.js +++ b/components/panel/Content.js @@ -6,7 +6,7 @@ import Sidebar from "@/components/layoutPanel/sidebar"; import UserDetail from "@/components/layoutPanel/userDetail"; import { usePathname } from "next/navigation"; import BgGray from "@/components/layoutPanel/sidebar/BgGray"; -import { adaptRepresentationInfo } from "@/helper"; +import { adaptRepresentationInfo } from "@/lib/representationAdapters"; function Content({ children, representationInfo }) { const pathname = usePathname(); diff --git a/helper/index.js b/helper/index.js index 9a6ec32..6ade467 100644 --- a/helper/index.js +++ b/helper/index.js @@ -675,39 +675,3 @@ export function changeNumToDefault(str) { .replace(/[٠-٩]/g, d => "٠١٢٣٤٥٦٧٨٩".indexOf(d)); } -export function adaptRepresentationInfo(representationInfo) { - const data = representationInfo?.data ?? representationInfo ?? {}; - - return { - name: data.full_name ?? "", - src: data.avatar ?? "/assets/images/doctor.png", - detail: data.city_name ? `نماینده شهر ${data.city_name}` : "نماینده", - mobile_number: data.mobile_number ?? "", - commission_percent: data.commission_percent ?? null, - bank_account: data.bank_account ?? null, - city: { label: data.city_name ?? "" }, - all_patients: null, - total_turns: null, - number_of_patients: null, - today_turns: null, - payments: null, - todays_activities: [], - list_of_doctors_appointments: [], - chart_amount_income: [], - }; -} - -export function adaptRepresentationDashboard(dashboard) { - const stats = dashboard?.data?.stats ?? dashboard?.stats ?? {}; - const daily = Array.isArray(stats.daily) ? stats.daily : []; - - return { - number_of_patients: stats.total_appointments ?? 0, - today_turns: daily.length ? daily[daily.length - 1].appointments ?? 0 : 0, - payments: stats.total_revenue_rials ?? 0, - commission_rials: stats.commission_rials ?? 0, - chart_amount_income: daily.map((d) => d.revenue ?? 0), - list_of_doctors_appointments: [], - todays_activities: [], - }; -} diff --git a/lib/representationAdapters.js b/lib/representationAdapters.js new file mode 100644 index 0000000..aec5e17 --- /dev/null +++ b/lib/representationAdapters.js @@ -0,0 +1,66 @@ +import moment from "moment-jalaali"; + +const DEFAULT_AVATAR = "/assets/images/doctor.png"; + +function toJalali(date) { + if (!date) return "--"; + return moment(date).format("jYYYY/jM/jD"); +} + +export function adaptRepresentationInfo(representationInfo) { + const data = representationInfo?.data ?? representationInfo ?? {}; + + return { + name: data.full_name ?? "", + src: data.avatar ?? DEFAULT_AVATAR, + detail: data.city_name ? `نماینده شهر ${data.city_name}` : "نماینده", + mobile_number: data.mobile_number ?? "", + commission_percent: data.commission_percent ?? null, + bank_account: data.bank_account ?? null, + city: { label: data.city_name ?? "" }, + all_patients: null, + total_turns: null, + number_of_patients: null, + today_turns: null, + payments: null, + todays_activities: [], + list_of_doctors_appointments: [], + chart_amount_income: [], + }; +} + +export function adaptRepresentationDashboard(dashboard) { + const stats = dashboard?.data?.stats ?? dashboard?.stats ?? {}; + const daily = Array.isArray(stats.daily) ? stats.daily : []; + + return { + number_of_patients: stats.total_appointments ?? 0, + today_turns: daily.length ? daily[daily.length - 1].appointments ?? 0 : 0, + payments: stats.total_revenue_rials ?? 0, + commission_rials: stats.commission_rials ?? 0, + chart_amount_income: daily.map((d) => d.revenue ?? 0), + list_of_doctors_appointments: daily.map((d) => ({ + name: "", + expertise: "", + image: DEFAULT_AVATAR, + date: toJalali(d.date), + hour: "", + number_of_turns: d.appointments ?? 0, + })), + todays_activities: [], + }; +} + +export function adaptBankAccount(bankAccount) { + if (!bankAccount) return []; + return [ + { + id: 1, + card_number: bankAccount.account_number ?? "", + shaba_number: bankAccount.iban ?? "", + bank: bankAccount.bank_name ?? "", + owner_name: bankAccount.owner_name ?? "", + status: true, + }, + ]; +}