title
deploy to danak / build_and_deploy (push) Has been cancelled

This commit is contained in:
hamid zarghami
2026-02-18 09:26:29 +03:30
parent fcb5681d85
commit 8989d67454
7 changed files with 46 additions and 3 deletions
+2 -1
View File
@@ -870,7 +870,8 @@
"business": "کسب‌وکار", "business": "کسب‌وکار",
"invoice_count": "تعداد صورتحساب", "invoice_count": "تعداد صورتحساب",
"water_bill": "قبض آب", "water_bill": "قبض آب",
"monthly_charge": "شارژ ماهانه" "monthly_charge": "شارژ ماهانه",
"title": "عنوان"
}, },
"request": { "request": {
"request_list": "لیست درخواست ها", "request_list": "لیست درخواست ها",
+16 -1
View File
@@ -39,12 +39,14 @@ const CreateBill: FC = () => {
const formik = useFormik<CreateBillType>({ const formik = useFormik<CreateBillType>({
initialValues: { initialValues: {
title: '',
waterRate: 0, waterRate: 0,
dueDays: 0, dueDays: 0,
values: [], values: [],
}, },
enableReinitialize: true, enableReinitialize: true,
validationSchema: Yup.object({ validationSchema: Yup.object({
title: Yup.string().trim(),
waterRate: Yup.number().min(0, 'نرخ آب باید عدد مثبت باشد').required('نرخ آب الزامی است'), waterRate: Yup.number().min(0, 'نرخ آب باید عدد مثبت باشد').required('نرخ آب الزامی است'),
dueDays: Yup.number().min(0, 'تعداد روز مهلت باید عدد مثبت باشد').required('تعداد روز مهلت الزامی است'), dueDays: Yup.number().min(0, 'تعداد روز مهلت باید عدد مثبت باشد').required('تعداد روز مهلت الزامی است'),
values: Yup.array() values: Yup.array()
@@ -125,7 +127,7 @@ const CreateBill: FC = () => {
return return
} }
createBillWithExcel.mutate( createBillWithExcel.mutate(
{ waterRate, dueDays, file: excelFile }, { title: formik.values.title?.trim() || undefined, waterRate, dueDays, file: excelFile },
{ {
onSuccess: () => { onSuccess: () => {
toast.success('قبض آب با موفقیت از طریق اکسل ثبت شد') toast.success('قبض آب با موفقیت از طریق اکسل ثبت شد')
@@ -187,6 +189,19 @@ const CreateBill: FC = () => {
<div className="mt-10 bg-white py-8 xl:px-10 px-4 rounded-3xl"> <div className="mt-10 bg-white py-8 xl:px-10 px-4 rounded-3xl">
<div className="text-base font-medium mb-6">اطلاعات قبض</div> <div className="text-base font-medium mb-6">اطلاعات قبض</div>
<div className="mt-6">
<Input
label="عنوان"
name="title"
type="text"
value={formik.values.title ?? ''}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
error_text={formik.touched.title && formik.errors.title ? String(formik.errors.title) : ''}
placeholder="عنوان اختیاری برای قبض"
/>
</div>
<div className="rowTwoInput mt-6"> <div className="rowTwoInput mt-6">
<Input <Input
label="نرخ آب (تومان)" label="نرخ آب (تومان)"
+20
View File
@@ -17,10 +17,12 @@ const CreateCharge: FC = () => {
const formik = useFormik<CreateBillChargeType>({ const formik = useFormik<CreateBillChargeType>({
initialValues: { initialValues: {
title: '',
chargeRate: 0, chargeRate: 0,
dueDays: 0, dueDays: 0,
}, },
validationSchema: Yup.object({ validationSchema: Yup.object({
title: Yup.string().trim(),
chargeRate: Yup.number() chargeRate: Yup.number()
.min(0, 'نرخ شارژ باید عدد مثبت باشد') .min(0, 'نرخ شارژ باید عدد مثبت باشد')
.required('نرخ شارژ الزامی است'), .required('نرخ شارژ الزامی است'),
@@ -30,6 +32,7 @@ const CreateCharge: FC = () => {
}), }),
onSubmit: async (values) => { onSubmit: async (values) => {
const payload = { const payload = {
title: values.title?.trim() || undefined,
chargeRate: Math.floor(Number(values.chargeRate)) || 0, chargeRate: Math.floor(Number(values.chargeRate)) || 0,
dueDays: Math.floor(Number(values.dueDays)) || 0, dueDays: Math.floor(Number(values.dueDays)) || 0,
} }
@@ -66,6 +69,23 @@ const CreateCharge: FC = () => {
<div className="mt-10 bg-white py-8 xl:px-10 px-4 rounded-3xl"> <div className="mt-10 bg-white py-8 xl:px-10 px-4 rounded-3xl">
<div className="text-base font-medium mb-6">اطلاعات قبض شارژ</div> <div className="text-base font-medium mb-6">اطلاعات قبض شارژ</div>
<div className="mt-6">
<Input
label="عنوان"
name="title"
type="text"
value={formik.values.title ?? ''}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
error_text={
formik.touched.title && formik.errors.title
? String(formik.errors.title)
: ''
}
placeholder="عنوان اختیاری برای قبض شارژ"
/>
</div>
<div className="rowTwoInput mt-6"> <div className="rowTwoInput mt-6">
<Input <Input
label="نرخ شارژ (تومان)" label="نرخ شارژ (تومان)"
+2
View File
@@ -33,6 +33,7 @@ const BillsList: FC = () => {
<thead className="thead"> <thead className="thead">
<tr> <tr>
<Td text={t('bill.row')} /> <Td text={t('bill.row')} />
<Td text={t('bill.title')} />
<Td text={t('bill.created_at')} /> <Td text={t('bill.created_at')} />
<Td text={t('bill.type')} /> <Td text={t('bill.type')} />
<Td text={t('bill.invoice_count')} /> <Td text={t('bill.invoice_count')} />
@@ -43,6 +44,7 @@ const BillsList: FC = () => {
{data?.data?.bills?.map((item: BillItemType, index: number) => ( {data?.data?.bills?.map((item: BillItemType, index: number) => (
<tr key={item.id} className="tr hover:bg-gray-50"> <tr key={item.id} className="tr hover:bg-gray-50">
<Td text={String((page - 1) * 10 + index + 1)} /> <Td text={String((page - 1) * 10 + index + 1)} />
<Td text={item.title ?? '—'} />
<Td text={moment(item.createdAt).format('jYYYY/jMM/jDD')} /> <Td text={moment(item.createdAt).format('jYYYY/jMM/jDD')} />
<Td text={getBillTypeLabel(item.type)} /> <Td text={getBillTypeLabel(item.type)} />
<Td text={''}> <Td text={''}>
+1
View File
@@ -22,6 +22,7 @@ export const getBills = async (page: number = 1) => {
export const createBillWithExcel = async (params: CreateBillWithExcelType) => { export const createBillWithExcel = async (params: CreateBillWithExcelType) => {
const formData = new FormData(); const formData = new FormData();
if (params.title) formData.append("title", params.title);
formData.append("waterRate", String(params.waterRate)); formData.append("waterRate", String(params.waterRate));
formData.append("dueDays", String(params.dueDays)); formData.append("dueDays", String(params.dueDays));
formData.append("file", params.file); formData.append("file", params.file);
+4
View File
@@ -1,4 +1,5 @@
export type CreateBillType = { export type CreateBillType = {
title?: string;
waterRate: number; waterRate: number;
dueDays: number; dueDays: number;
values: { values: {
@@ -8,11 +9,13 @@ export type CreateBillType = {
}; };
export type CreateBillChargeType = { export type CreateBillChargeType = {
title?: string;
chargeRate: number; chargeRate: number;
dueDays: number; dueDays: number;
}; };
export type CreateBillWithExcelType = { export type CreateBillWithExcelType = {
title?: string;
waterRate: number; waterRate: number;
dueDays: number; dueDays: number;
file: File; file: File;
@@ -24,6 +27,7 @@ export type BillItemType = {
updatedAt: string; updatedAt: string;
deletedAt: string | null; deletedAt: string | null;
type: 'water_bill' | 'monthly_charge'; type: 'water_bill' | 'monthly_charge';
title?: string;
business: string; business: string;
invoiceCount: number; invoiceCount: number;
}; };
+1 -1
View File
@@ -35,7 +35,7 @@ const ReceiptSubMenu: FC = () => {
/> />
<SubMenuItem <SubMenuItem
title={t('receip.add_receip')} title={t('receip.add_receip')}
isActive={isActive('create')} isActive={isActive('receipts/create')}
link={Pages.receipts.create} link={Pages.receipts.create}
/> />