Merge branch 'feature/field_correction' into 'develop'

refer text

See merge request witel-front-end/loan-facilities/expert-v2!18
This commit is contained in:
AmirHossein Mahmoodi
2024-11-20 06:47:41 +00:00
9 changed files with 129 additions and 41 deletions

View File

@@ -6,8 +6,8 @@ NEXT_PUBLIC_DEFAULT_DIRECTION = "rtl"
NEXT_PUBLIC_PRIMARY_MAIN = "#084070"
NEXT_PUBLIC_SECONDARY_MAIN = "#FF4E00"
NEXT_PUBLIC_FACILITY_BANK = 33
NEXT_PUBLIC_FACILITY_PERSON = 10
NEXT_PUBLIC_FACILITY_BANK = 66
NEXT_PUBLIC_FACILITY_PERSON = 20
NEXT_PUBLIC_BUS_AMOUNT=10000
NEXT_PUBLIC_MINIBUS_AMOUNT=4000

View File

@@ -195,6 +195,7 @@
"NavganProvinceManager": {
"name": "نام",
"id": "کد یکتا",
"interest_rate": "نرخ بهره وام(درصد)",
"physical_progress": "درصد پیشرفت فیزیکی",
"repayment_period": "دوره باز پرداخت",
"committed_employment": "اشتغال ایجاد شده",
@@ -221,7 +222,7 @@
"navgan_id": "کد ناوگان",
"vehicle_type": "نوع ماشین",
"state_name": "وضعیت درخواست",
"revert": "ارجاع به معاون حمل و نقل",
"revert": "بازگشت به معاون حمل و نقل",
"confirm": "تایید نهایی و ارجاع به بانک",
"upload_file_unit": "فایل بارگذاری شده باید حداکثر 5Mb باشد",
"upload_file_format": "فرمت قابل قبول : png,jpg,pdf",
@@ -258,7 +259,7 @@
"navgan_id": "کد ناوگان",
"vehicle_type": "نوع ماشین",
"state_name": "وضعیت درخواست",
"confirm": "تایید و ارجاع به معاون حمل و نقل",
"confirm": "ارجاع به معاون حمل و نقل",
"upload_file": "فایل خود را بارگذاری کنید(اختیاری)",
"upload_expert_img": "فایل گزارش کارشناسی را بارگذاری کنید",
"upload_file_required": "وارد کردن گزارش کارشناسی الزامیست",
@@ -410,6 +411,7 @@
"refer_reason": "علت ارجاع",
"plate_number": "پلاک",
"id": "کد یکتا",
"interest_rate": "نرخ بهره وام(درصد)",
"facility_bank": "سهم بانک",
"facility_gov": "سهم دولت",
"facility_person": "سهم متقاضی",
@@ -434,8 +436,8 @@
"navgan_id": "کد ناوگان",
"vehicle_type": "نوع ماشین",
"state_name": "وضعیت درخواست",
"confirm": "تایید و ارجاع به مدیر کل",
"revert": "ارجاع به کارتابل کارگروه",
"confirm": "ارجاع به مدیر کل",
"revert": "بازگشت به کارتابل کارگروه",
"upload_file_unit": "فایل بارگذاری شده باید حداکثر 5Mb باشد",
"upload_file_format": "فرمت قابل قبول : png,jpg,pdf",
"excel_report": "گزارش اکسل",
@@ -545,10 +547,12 @@
"updated_at": "تاریخ بروزرسانی"
},
"ConfirmDialog": {
"confirm": "تایید",
"confirm": "ارجاع",
"month": "(ماه)",
"confirm_reason": "علت تایید",
"context": "آیا از تایید این آیتم اطمینان دارید؟",
"button-cancel": "بستن",
"loan_interest": "نرخ بهره وام",
"button-confirm": "ارجاع",
"facility_bank": "تسهیلات سهم بانک",
"facility_person": "تسهیلات سهم متقاضی",
@@ -558,6 +562,9 @@
"existing_employment": "تعداد اشتغال موجود",
"physical_progress": "درصد پیشرفت فیزیکی",
"interest_rate": "نرخ بهره",
"interest_rate_percentage": "درصد",
"confirmation_reason": "علت تایید کارگروه",
"no_info": "اطلاعاتی یافت نشد!!!",
"description_error": "وارد کردن توضیحات الزامی است!",
"optional": " (اختیاری)",
"unit": " (میلیون ریال)",
@@ -572,6 +579,7 @@
"approved_amount_error": "وارد کردن مبلغ مصوب الزامیست",
"facility_bank_error": "وارد کردن تسهیلات سهم بانک الزامیست",
"facility_gov_error": "وارد کردن تسهیلات سهم دولت الزامیست",
"confirm_reason_error": "وارد کردن علت تایید الزامیست",
"committed_employment_error": "وارد کردن تعداد اشتغال تعهد شده الزامیست",
"history_facilities_error": "وارد کردن سابقه استفاده از تسهیلات تکلیفی الزامیست",
"existing_employment_error": "وارد کردن تعداد اشتغال موجود الزامیست",
@@ -588,12 +596,14 @@
"approved_amount_number": "مبلغ مصوب باید عدد باشد",
"facility_bank_number": "تسهیلات سهم بانک باید عدد باشد",
"interest_rate_number": "نرخ بهره باید عدد باشد",
"loan_interest_number": "نرخ بهره باید عدد باشد",
"facility_gov_number": "تسهیلات سهم دولت باید عدد باشد",
"committed_employment_number": "تعداد سابقه استفاده از تسهیلات تکلیفی باید عدد باشد",
"history_facilities_number": "تعداد اشتغال تعهد شده باید عدد باشد",
"existing_employment_number": "تعداد اشتغال موجود باید عدد باشد",
"sakht_period_positive": "دوره ساخت باید مثبت باشد",
"interest_rate_positive": "نرخ بهره باید مثبت باشد",
"loan_interest_positive": "نرخ بهره باید مثبت باشد",
"tanafos_period_positive": "دوره تنفس باید مثبت باشد",
"sakht_period_number": "دوره ساخت باید عدد باشد",
"repayment_period_number": "دوره باز پرداخت باید عدد باشد",
@@ -614,6 +624,7 @@
"repayment_period_error": "وارد کردن دوره باز پرداخت الزامیست",
"participation_period_error": "وارد کردن دوره مشارکت الزامیست",
"interest_rate_error": "وارد کردن نرخ بهره الزامیست",
"loan_interest_error": "وارد کردن نرخ بهره وام الزامیست",
"proposed_amount": "مبلغ پیشنهادی",
"proposed_amount_positive": "مقدار پیشنهادی باید مثبت باشد",
"proposed_amount_number": "مقدار پیشنهادی باید عدد باشد"
@@ -646,10 +657,10 @@
},
"RevertDialog": {
"typography": "آیا میخواهید این درخواست را رد کنید ؟",
"revert": "ارجاع",
"revert": "بازگشت",
"context": "آیا از عدم تایید این آیتم اطمینان دارید؟",
"button-cancel": "بستن",
"button-revert": "ارجاع",
"button-revert": "بازگشت",
"description": "توضیحات خود را وارد نمائید",
"description_error": "وارد کردن توضیحات الزامی است!"
},
@@ -794,7 +805,7 @@
"phone_number": "شماره تلفن",
"requested_facilities" : "تسهیلات مورد تقاضا",
"physical_progress" : "درصد پیشرفت فیزیکی",
"investment" : "سرمایه گذاری انجام شده",
"investment" : "ارزش ناوگان",
"no_info" : "اطلاعاتی موجود نیست !!!",
"is_legal_person": "نوع شخص",
"legal_person" : "شخص حقوقی",
@@ -837,8 +848,8 @@
"button-cancel": "بستن"
},
"ReferDialog": {
"refer-passenger-boss": "ارجاع به کارگروه",
"refer-user": "ارجاع به کاربر",
"refer-passenger-boss": "بازگشت به کارگروه",
"refer-user": "بازگشت به کاربر",
"refer-confirmation": "آیا از ارجاع این مورد اطمینان دارید ؟",
"button-cancel": "انصراف",
"typography": "آیا از ارجاع این مورد اطمینان دارید ؟",

View File

@@ -105,16 +105,27 @@ const TableContent = ({ rowId }) => {
"&:last-child td, &:last-child th": { border: 0 },
}}
>
<TableCell> {latest_history.expert.name}</TableCell>
<TableCell>
{" "}
{latest_history?.expert?.name ? latest_history.expert.name : null}
</TableCell>
<TableCell>
{moment(latest_history.created_at)
.locale("fa")
.format("HH:mm | yyyy/MM/DD")}
</TableCell>
<TableCell>{latest_history.expert.position}</TableCell>
<TableCell>{latest_history.previous_state_name}</TableCell>
<TableCell>{action_name[latest_history.action]}</TableCell>
<TableCell>{latest_history.expert_description}</TableCell>
<TableCell>
{latest_history?.expert?.position
? latest_history.expert.position
: null}
</TableCell>
<TableCell>
{latest_history?.previous_state_name
? latest_history.previous_state_name
: null}
</TableCell>
<TableCell>{action_name[latest_history?.action]}</TableCell>
<TableCell>{latest_history?.expert_description}</TableCell>
<TableCell>
{latest_history.attachments.map((attachment, index) => (
<PrintHistory key={index} attachment={attachment} />

View File

@@ -267,6 +267,16 @@ function DashboardNavganProvinceManagerComponent() {
columnFilterModeOptions: ["equals"],
Cell: ({ renderedCellValue }) => <Typography variant="body2">{renderedCellValue}</Typography>,
},
{
accessorFn: (row) => row.interest_rate,
id: "interest_rate",
header: t("NavganProvinceManager.interest_rate"),
enableColumnFilter: true,
datatype: "numeric",
filterFn: "equals",
columnFilterModeOptions: ["equals"],
Cell: ({ renderedCellValue }) => <Typography variant="body2">{renderedCellValue}</Typography>,
},
{
accessorFn: (row) => row.committed_employment,
id: "committed_employment",

View File

@@ -54,6 +54,7 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, vehicle_type, row
.test("is-number", `${t("ConfirmDialog.repayment_period_number")}`, (value) => !isNaN(value))
.test("positive", `${t("ConfirmDialog.repayment_period_positive")}`, (value) => value >= 0)
.required(t("ConfirmDialog.repayment_period_error")),
confirm_reason: Yup.string().required(t("ConfirmDialog.confirm_reason_error")),
committed_employment: Yup.mixed()
.test("is-number", `${t("ConfirmDialog.committed_employment_number")}`, (value) => !isNaN(value))
.test("positive", `${t("ConfirmDialog.committed_employment_positive")}`, (value) => value >= 0)
@@ -62,6 +63,10 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, vehicle_type, row
.test("is-number", `${t("ConfirmDialog.existing_employment_number")}`, (value) => !isNaN(value))
.test("positive", `${t("ConfirmDialog.existing_employment_positive")}`, (value) => value >= 0)
.required(t("ConfirmDialog.existing_employment_error")),
loan_interest: Yup.mixed()
.test("is-number", `${t("ConfirmDialog.loan_interest_number")}`, (value) => !isNaN(value))
.test("positive", `${t("ConfirmDialog.loan_interest_positive")}`, (value) => value >= 0)
.required(t("ConfirmDialog.loan_interest_error")),
sakht_period: Yup.mixed()
.test("is-number", `${t("ConfirmDialog.sakht_period_number")}`, (value) => !isNaN(value))
.test("positive", `${t("ConfirmDialog.sakht_period_positive")}`, (value) => value > 0)
@@ -83,7 +88,7 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, vehicle_type, row
const formik = useFormik({
initialValues: {
description: row.original.description || "",
confirm_reason: row.original.confirmation_reason || "",
approved_amount: row.original.approved_amount / 1000000 || "",
facility_bank: row.original.facility_bank / 1000000 || "",
facility_gov: row.original.facility_gov / 1000000 || "",
@@ -94,6 +99,7 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, vehicle_type, row
sakht_period: row.original.sakht_period || "",
tanafos_period: row.original.tanafos_period || "",
existing_employment: row.original.existing_employment || "",
loan_interest: row.original.interest_rate || "",
expert_img: null,
},
validationSchema,
@@ -106,10 +112,10 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, vehicle_type, row
formData.append("repayment_period", values.repayment_period);
formData.append("committed_employment", values.committed_employment);
formData.append("existing_employment", values.existing_employment);
formData.append("interest_rate", values.loan_interest);
formData.append("sakht_period", values.sakht_period);
formData.append("tanafos_period", values.tanafos_period);
if (values.description != "") formData.append("expert_description", values.description);
formData.append("confirmation_reason", values.confirm_reason);
if (values.physical_progress != "") formData.append("physical_progress", values.physical_progress);
if (values.expert_img != null) {
const attachments = [
@@ -179,24 +185,6 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, vehicle_type, row
<>
<DialogContent>
<Stack spacing={2}>
<Stack>
<TextField
name="description"
multiline
rows={8}
label={
<>
<span>{t("ConfirmDialog.description")}</span>
<small>{t("ConfirmDialog.optional")}</small>
</>
}
value={formik.values.description}
onChange={formik.handleChange}
fullWidth
variant="outlined"
sx={{ mt: 1 }}
/>
</Stack>
<Stack>
<PriceField
name="approved_amount"
@@ -426,6 +414,36 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, vehicle_type, row
onBlur={formik.handleBlur("tanafos_period")}
/>
</Stack>
<Stack>
<SelectBox
name="loan_interest"
label={t("ConfirmDialog.loan_interest")}
size="small"
value={formik.values.loan_interest}
selectType="loan_interest"
selectors={[
{
id: 1,
value: "13",
name: "13 درصد",
},
{
id: 2,
value: "15",
name: "15 درصد",
},
]}
schema={{ value: "value", name: "name" }}
select={formik.values.loan_interest}
handleChange={(event) => {
formik.setFieldValue("loan_interest", event.target.value);
}}
setFieldTouched={formik.setFieldTouched}
error={formik.touched.loan_interest && Boolean(formik.errors.loan_interest)}
helperText={formik.touched.loan_interest && formik.errors.loan_interest}
onBlur={formik.handleBlur("loan_interest")}
/>
</Stack>
<Stack>
<TextField
name="committed_employment"
@@ -476,6 +494,22 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, vehicle_type, row
fullWidth
/>
</Stack>
<Stack>
<TextField
name="confirm_reason"
multiline
rows={4}
label={t("ConfirmDialog.confirm_reason")}
value={formik.values.confirm_reason}
onChange={formik.handleChange}
onBlur={formik.handleBlur("confirm_reason")}
error={formik.touched.confirm_reason && Boolean(formik.errors.confirm_reason)}
helperText={formik.touched.confirm_reason && formik.errors.confirm_reason}
fullWidth
variant="outlined"
sx={{ mt: 1 }}
/>
</Stack>
<Stack>
<Typography>{t("PassengerBoss.upload_expert_img")}</Typography>
<UploadSystem

View File

@@ -2,6 +2,7 @@ import UploadSystem from "@/core/components/UploadSystem";
import useNotification from "@/lib/app/hooks/useNotification";
import useRequest from "@/lib/app/hooks/useRequest";
import {
Box,
Button,
Checkbox,
DialogActions,
@@ -23,7 +24,7 @@ import CustomAccordion from "@/core/components/CustomAccordion";
import ImageContent from "@/core/components/ImageContent";
import NumberShowBox from "@/core/components/NumberShowBox";
const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, handleSizeChangeClick }) => {
const ConfirmContent = ({ rowId, row, mutate, setOpenConfirmDialog, handleSizeChangeClick }) => {
const t = useTranslations();
const [selectedImage, setSelectedImage] = useState("");
const [fileType, setfileType] = useState(null);
@@ -256,6 +257,16 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, handleSizeChangeC
headerTitle={t("ConfirmDialog.repayment_period")}
unitTitle={t("ConfirmDialog.repayment_period_month")}
/>
<Box sx={{ border: "1px solid #ccc", p: 2, mb: 2, borderRadius: "8px" }}>
<Typography sx={{ color: "primary.main", fontWeight: 500 }}>
{t("ConfirmDialog.confirmation_reason")}
</Typography>
<Typography pt={1}>
{row.original.confirmation_reason
? row.original.confirmation_reason
: t("ConfirmDialog.no_info")}
</Typography>
</Box>
{renderCustomAccordions()}
</>
)}

View File

@@ -3,7 +3,7 @@ import { useTranslations } from "next-intl";
import { useState, useEffect } from "react";
import ConfirmContent from "./ConfirmContent";
import CallMadeIcon from "@mui/icons-material/CallMade";
const Confirm = ({ rowId, mutate }) => {
const Confirm = ({ rowId, mutate, row }) => {
const t = useTranslations();
const [openConfirmDialog, setOpenConfirmDialog] = useState(false);
const [dialogSize, setDialogSize] = useState("sm");
@@ -45,6 +45,7 @@ const Confirm = ({ rowId, mutate }) => {
<ConfirmContent
mutate={mutate}
rowId={rowId}
row={row}
setOpenConfirmDialog={setOpenConfirmDialog}
handleSizeChangeClick={handleSizeChangeClick}
/>

View File

@@ -10,7 +10,7 @@ const TableRow = ({ row, mutate }) => {
<Box sx={{ display: "flex", flexWrap: "nowrap", gap: "8px" }}>
{row.original.latest_history?.action === "refer" ? <ReferReason row={row} /> : null}
<UserInfoForm rowId={row.getValue("id")} row={row} />
<Confirm rowId={row.getValue("id")} mutate={mutate} />
<Confirm row={row} rowId={row.getValue("id")} mutate={mutate} />
<Revert rowId={row.getValue("id")} mutate={mutate} />
<Reject rowId={row.getValue("id")} mutate={mutate} />
</Box>

View File

@@ -265,6 +265,16 @@ function DashboardTransportationAssistanceComponent() {
columnFilterModeOptions: ["equals"],
Cell: ({ renderedCellValue }) => <Typography variant="body2">{renderedCellValue}</Typography>,
},
{
accessorFn: (row) => row.interest_rate,
id: "interest_rate",
header: t("TransportationAssistance.interest_rate"),
enableColumnFilter: true,
datatype: "numeric",
filterFn: "equals",
columnFilterModeOptions: ["equals"],
Cell: ({ renderedCellValue }) => <Typography variant="body2">{renderedCellValue}</Typography>,
},
{
accessorFn: (row) => row.committed_employment,
id: "committed_employment",