diff --git a/src/langs/fa.json b/src/langs/fa.json
index dff0a88..f11f3b2 100644
--- a/src/langs/fa.json
+++ b/src/langs/fa.json
@@ -168,7 +168,8 @@
"HIGH": "بالا",
"PENDING": "در انتظار",
"ANSWERED": "پاسخ داده شده",
- "CLOSED": "بسته شده"
+ "CLOSED": "بسته شده",
+ "service": "سرویس"
},
"date": "تاریخ",
"receip": {
@@ -373,7 +374,8 @@
"enter_address": " آدرس خود را با دقت وارد کنید.",
"state": "استان",
"city": "شهر",
- "notice_cannot_edit": "ویرایش مشخصات فردی بعد از تکمیل اطلاعات امکان پذیر نیست"
+ "notice_cannot_edit": "ویرایش مشخصات فردی بعد از تکمیل اطلاعات امکان پذیر نیست",
+ "notice_cannot_edit_legal": "ویرایش مشخصات حقوقی بعد از تکمیل اطلاعات امکان پذیر نیست"
},
"man": "مرد",
"woman": "زن",
diff --git a/src/pages/annoncement/Detail.tsx b/src/pages/annoncement/Detail.tsx
index 60ea2e4..4ded27e 100644
--- a/src/pages/annoncement/Detail.tsx
+++ b/src/pages/annoncement/Detail.tsx
@@ -1,13 +1,17 @@
import { FC } from 'react'
import { useTranslation } from 'react-i18next'
import StatusWithText from '../../components/StatusWithText'
-import { useNavigate } from 'react-router-dom'
+import { useNavigate, useParams } from 'react-router-dom'
import { ArrowLeft2 } from 'iconsax-react'
+import { useGetAnnoncementDetail } from './hooks/useAnnoncementData'
+import PageLoading from '../../components/PageLoading'
const AnnouncementDetail: FC = () => {
+ const { id } = useParams()
const { t } = useTranslation('global')
const navigate = useNavigate()
+ const getAnnoncementDetail = useGetAnnoncementDetail(id ? id : '')
return (
@@ -21,21 +25,29 @@ const AnnouncementDetail: FC = () => {
-
-
-
- لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ
-
-
-
+ {
+ getAnnoncementDetail.isPending ?
+
+ :
+
+
+
+ {getAnnoncementDetail.data?.data?.announcement?.title}
+
+ {
+ getAnnoncementDetail.data?.data?.announcement.isImportant &&
+
+ }
+
-
- لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.
-
-
+
+
+
+
+ }
)
}
diff --git a/src/pages/annoncement/List.tsx b/src/pages/annoncement/List.tsx
index 89fea83..f395ee0 100644
--- a/src/pages/annoncement/List.tsx
+++ b/src/pages/annoncement/List.tsx
@@ -1,23 +1,28 @@
-import { FC, Fragment } from 'react'
+import { FC, Fragment, useState } from 'react'
import { useTranslation } from 'react-i18next'
import Input from '../../components/Input'
-import Select from '../../components/Select'
import StatusWithText from '../../components/StatusWithText'
import { clx } from '../../helpers/utils'
import { useNavigate } from 'react-router-dom'
import { Pages } from '../../config/Pages'
import { useGetAnnoncement } from './hooks/useAnnoncementData'
import PageLoading from '../../components/PageLoading'
+import { AnnoncementItemType } from './types/AnnoncementTypes'
+import moment from 'moment-jalaali'
const AnnouncementtList: FC = () => {
- const getAnnoncements = useGetAnnoncement()
- const { t } = useTranslation('global')
const navigate = useNavigate()
+ const { t } = useTranslation('global')
+ const [search, setSearch] = useState('')
+ const [itemSelected, setItemSelected] = useState()
+ const getAnnoncements = useGetAnnoncement(search)
- const handleChange = () => {
+ const handleChange = (item: AnnoncementItemType) => {
if (window.innerWidth < 1280) {
- navigate(Pages.announcement.detail + '1')
+ navigate(Pages.announcement.detail + item.id)
+ } else {
+ setItemSelected(item)
}
}
@@ -35,10 +40,11 @@ const AnnouncementtList: FC = () => {
variant='search'
placeholder={t('announcement.search')}
className='-mt-1'
+ onChangeSearchFinal={(value) => setSearch(value)}
/>
-
+ {/*
{
]}
className='bg-[#EEF0F7] w-[68px]'
/>
-
+
*/}
{
getAnnoncements.isPending ?
-
+
:
-
-
-
- لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ
-
+ {
+ getAnnoncements.data?.data?.announcements?.map((item: AnnoncementItemType) => {
+ return (
+
handleChange(item)} className={clx(
+ 'p-4 rounded-2xl',
+ item.id === itemSelected?.id && 'bg-[#F8F9FB]'
+ )}>
+
+
+ {item.title}
+
-
-
-
-
-
+
+ {
+ item.isImportant &&
+
+ }
+ {/* */}
+
+
-
-
- لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ
-
-
- ۱۴۰۳/۰۹/۲۴
-
-
-
-
-
-
- لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ
-
+
+
+
+
+ {moment(item.publishAt, 'jYYYY/jMM/jDD').format('jYYYY/jMM/jDD')}
+
+
+
+ )
+ })
+ }
-
-
-
-
-
-
-
-
- لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ
-
-
- ۱۴۰۳/۰۹/۲۴
-
-
-
}
-
-
-
- متن اطلاعیه
+ {
+ itemSelected &&
+
+
+
+ متن اطلاعیه
+
+ {
+ itemSelected.isImportant &&
+
+ }
-
-
-
- لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ
-
+
+ {itemSelected.title}
+
-
- لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.
+
+
+
-
+ }
diff --git a/src/pages/annoncement/hooks/useAnnoncementData.ts b/src/pages/annoncement/hooks/useAnnoncementData.ts
index 4e28797..87ab3e5 100644
--- a/src/pages/annoncement/hooks/useAnnoncementData.ts
+++ b/src/pages/annoncement/hooks/useAnnoncementData.ts
@@ -1,9 +1,17 @@
import * as api from "../service/AnnoncementService";
import { useQuery } from "@tanstack/react-query";
-export const useGetAnnoncement = () => {
+export const useGetAnnoncement = (search: string) => {
return useQuery({
- queryKey: ["announcements"],
- queryFn: () => api.getAnnoncements(),
+ queryKey: ["announcements", search],
+ queryFn: () => api.getAnnoncements(search),
+ });
+};
+
+export const useGetAnnoncementDetail = (id: string) => {
+ return useQuery({
+ queryKey: ["announcement", id],
+ queryFn: () => api.getAnnoncementDetail(id),
+ enabled: !!id,
});
};
diff --git a/src/pages/annoncement/service/AnnoncementService.ts b/src/pages/annoncement/service/AnnoncementService.ts
index 69696b4..d49a4df 100644
--- a/src/pages/annoncement/service/AnnoncementService.ts
+++ b/src/pages/annoncement/service/AnnoncementService.ts
@@ -1,6 +1,11 @@
import axios from "../../../config/axios";
-export const getAnnoncements = async () => {
- const { data } = await axios.get(`/announcements/user`);
+export const getAnnoncements = async (search: string) => {
+ const { data } = await axios.get(`/announcements/user?q=${search}`);
+ return data;
+};
+
+export const getAnnoncementDetail = async (id: string) => {
+ const { data } = await axios.get(`/announcements/${id}`);
return data;
};
diff --git a/src/pages/annoncement/types/AnnoncementTypes.ts b/src/pages/annoncement/types/AnnoncementTypes.ts
new file mode 100644
index 0000000..ef97d3a
--- /dev/null
+++ b/src/pages/annoncement/types/AnnoncementTypes.ts
@@ -0,0 +1,16 @@
+export type AnnoncementItemType = {
+ content: string;
+ createdAt: string;
+ id: string;
+ isImportant: boolean;
+ isPublic: boolean;
+ isRead: boolean;
+ publishAt: string;
+ service: {
+ id: string;
+ name: string;
+ };
+ targetGroups: any[];
+ title: string;
+ updatedAt: string;
+};
diff --git a/src/pages/financial/components/Legal.tsx b/src/pages/financial/components/Legal.tsx
index b8678d5..e233b2a 100644
--- a/src/pages/financial/components/Legal.tsx
+++ b/src/pages/financial/components/Legal.tsx
@@ -191,7 +191,7 @@ const Legal: FC = () => {
size={18}
color='#DB0105'
/>
- {t('financial.notice_cannot_edit')}
+ {t('financial.notice_cannot_edit_legal')}
{
diff --git a/src/pages/receipts/Detail.tsx b/src/pages/receipts/Detail.tsx
index e1739de..3398ab1 100644
--- a/src/pages/receipts/Detail.tsx
+++ b/src/pages/receipts/Detail.tsx
@@ -1,15 +1,20 @@
import { FC } from 'react'
import { useTranslation } from 'react-i18next'
import { Edit } from 'iconsax-react'
-import StatusCircle from '../../components/StatusCircle'
import SamanImage from '../../assets/images/saman.png'
import { useParams } from 'react-router-dom'
import { useGetInvoiceDetail } from './hooks/useReceiptData'
+import { useGetFinancialInfo } from '../financial/hooks/useFinancialData'
+import { ReceiptDetailItemType } from './types/ReceiptTypes'
+import { NumberFormat } from '../../config/func'
+import moment from 'moment-jalaali'
+import PageLoading from '../../components/PageLoading'
const ReceiptsDetail: FC = () => {
const { id } = useParams()
const { t } = useTranslation('global')
+ const getProfile = useGetFinancialInfo()
const getInvoce = useGetInvoiceDetail(id ? id : '')
return (
@@ -19,241 +24,244 @@ const ReceiptsDetail: FC = () => {
۱۲۳۱۲
-
-
-
-
-
- {t('receip.personal_information')}
+ {
+ getInvoce.isPending || getProfile.isPending ?
+
+ :
+
+
+
+
+
+ {t('receip.personal_information')}
+
+
+
+
+
+
+
+ {t('receip.type_person')}
+
+
+ {t('receip.company')}
+
+
+
+
+
+ {t('receip.representativeـname')}
+
+
+ مهرداد مظفری
+
+
+
+
+
+ {t('receip.company_name')}
+
+
+ داناک
+
+
+
+
+ {t('receip.registration_number')}
+
+
+ ۱۲۳۴
+
+
+
+
+
+
+
+ {t('receip.tel_company')}
+
+
+ ۰۰۱۲۳۴۵۶۷۸
+
+
+
+
+
+ {t('receip.national_code')}
+
+
+ ۰۰۱۲۳۴۵۶۷۸
+
+
+
+
+
+ {t('receip.postal_code')}
+
+
+ ۳۸۲۱۳۵۸۸۹۲
+
+
+
+
+
+
+
+
+ {t('receip.state')}
+
+
+ مرکزی
+
+
+
+
+ {t('receip.state')}
+
+
+ مرکزی
+
+
+
+
+ {t('receip.city')}
+
+
+ اراک
+
+
+
+
+ {t('receip.address')}
+
+
+ اراک -خیابان شریعتی-خیابان جنت
+
+
+
+
-
-
-
- {t('edit')}
+
+
+
+
+ {t('receip.detail_receip')}
+
+
+
+
+
+
+ {t('receip.description')}
+
+
+ {t('receip.price')}
+
+
+ {
+ getInvoce.data?.data?.invoice?.items?.map((item: ReceiptDetailItemType) => {
+ return (
+
+
+ {item.name}
+ {item.count}
+ عدد
+
+
+ {NumberFormat(item.totalPrice)} ریال
+
+
+ )
+ })
+ }
+
+
+
+ ۱۰٪ ارزش افزوده
+
+
+ {NumberFormat(getInvoce.data?.data?.invoice?.tax)} ریال
+
+
+
+
+ جمع کل
+
+
+ {NumberFormat(getInvoce.data?.data?.invoice?.totalPrice)} ریال
+
+
-
-
-
- {t('receip.type_person')}
-
+
+
- {t('receip.company')}
+ {t('receip.receip_information')}
+
+
-
-
- {t('receip.representativeـname')}
+
+
+
+ {t('receip.date_factor')}
+
+
+ {moment(getInvoce.data?.data?.invoice?.createdAt).format('jYYYY-jMM-jDD')}
+
-
- مهرداد مظفری
+
+
+ {t('receip.due_date')}
+
+
+ {moment(getInvoce.data?.data?.invoice?.dueDate).format('jYYYY-jMM-jDD')}
+
+
+
+
+ {t('receip.factor_number')}
+
+
+ {getInvoce.data?.data?.invoice.id}
+
+
+
+
+ {t('receip.status_factor')}
+
+
+ {t(`receip.${getInvoce.data?.data?.invoice?.status}`)}
+
-
-
- {t('receip.company_name')}
+
+
+
+
+ بانک سامان
+
-
- داناک
-
-
-
-
- {t('receip.registration_number')}
-
-
- ۱۲۳۴
-
-
-
-
-
-
-
- {t('receip.tel_company')}
-
-
- ۰۰۱۲۳۴۵۶۷۸
-
-
-
-
-
- {t('receip.national_code')}
-
-
- ۰۰۱۲۳۴۵۶۷۸
-
-
-
-
-
- {t('receip.postal_code')}
-
-
- ۳۸۲۱۳۵۸۸۹۲
-
-
-
-
-
-
-
-
- {t('receip.state')}
-
-
- مرکزی
-
-
-
-
- {t('receip.state')}
-
-
- مرکزی
-
-
-
-
- {t('receip.city')}
-
-
- اراک
-
-
-
-
- {t('receip.address')}
-
-
- اراک -خیابان شریعتی-خیابان جنت
-
-
-
-
-
-
-
-
-
- {t('receip.detail_receip')}
-
-
-
-
- {t('receip.not_paid')}
-
-
-
-
-
-
-
- {t('receip.description')}
-
-
- {t('receip.price')}
-
-
-
-
- اکانت یکساله با دسترسی
-
-
- ۱۰,۰۰۰,۰۰۰ ریال
-
-
-
-
- ۱۰٪ ارزش افزوده
-
-
- ۱۰,۰۰۰,۰۰۰ ریال
-
-
-
-
- جمع کل
-
-
- ۱۰,۰۰۰,۰۰۰ ریال
+
+
+
+ بانک سامان
+
-
-
-
-
-
- {t('receip.receip_information')}
-
-
-
-
-
-
-
- {t('receip.date_factor')}
-
-
- ۱۴۰۲/۱۰/۰۴
-
-
-
-
- {t('receip.due_date')}
-
-
- ۱۴۰۲/۱۰/۰۴
-
-
-
-
- {t('receip.factor_number')}
-
-
- ۱۲۳۱
-
-
-
-
- {t('receip.status_factor')}
-
-
- تایید شده
-
-
-
-
-
-
-
-
- بانک سامان
-
-
-
-
-
- بانک سامان
-
-
-
-
-
+ }
)
diff --git a/src/pages/receipts/types/ReceiptTypes.ts b/src/pages/receipts/types/ReceiptTypes.ts
index b9962cd..69f480f 100644
--- a/src/pages/receipts/types/ReceiptTypes.ts
+++ b/src/pages/receipts/types/ReceiptTypes.ts
@@ -17,3 +17,15 @@ export type ReceiptItemType = {
status: "PENDING" | "PAID" | "CANCELED" | "EXPIRED";
paidAt: string;
};
+
+export type ReceiptDetailItemType = {
+ id: string;
+ createdAt: string;
+ updatedAt: string;
+ name: string;
+ count: string | number;
+ unitPrice: string | number;
+ discount: string | number;
+ totalPrice: number;
+ subscriptionPlan?: string | null;
+};
diff --git a/src/pages/ticket/CreateTicket.tsx b/src/pages/ticket/CreateTicket.tsx
index ac21398..2ffa687 100644
--- a/src/pages/ticket/CreateTicket.tsx
+++ b/src/pages/ticket/CreateTicket.tsx
@@ -16,6 +16,8 @@ import { toast } from 'react-toastify'
import { ErrorType } from '../../helpers/types'
import { useNavigate } from 'react-router-dom'
import { Pages } from '../../config/Pages'
+import { useGetMyServices } from '../service/hooks/useServiceData'
+import { MyServicesItem } from '../service/types/ServiecTypes'
const CreateTicket: FC = () => {
@@ -26,6 +28,7 @@ const CreateTicket: FC = () => {
const getCategories = useGetCategoriesTicket()
const multiUpload = useMultiUpload()
const createTicket = useCreateTicket()
+ const getMyservice = useGetMyServices('')
const formik = useFormik
({
initialValues: {
@@ -143,15 +146,16 @@ const CreateTicket: FC = () => {
({
+ label: item.plan?.service?.name,
+ value: item.plan?.service.id
+ })
+ )}
+ onChange={formik.handleChange}
+ error_text={formik.touched.danakServiceId && formik.errors.danakServiceId ? formik.errors.danakServiceId : ''}
/>
{
-
+
+
@@ -86,6 +87,7 @@ const TicketList: FC = () => {
+
{moment(item.updatedAt).format('jYYYY-jMM-jDD HH:mm')}