diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 7ef24ee..e1a9b28 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -43,7 +43,6 @@ "sidebar": { "dashboard": "داشبورد", "reports": "گزارشات", - "passenger-office-chief": "اداره مسافر", "admin-setting": "تنظیمات ", "machinery-expert": "کارتابل کارشناسی", "passenger-boss": "کارتابل کارگروه", @@ -67,7 +66,6 @@ "reserve-loan": "وام های رزرو" }, "secondary": { - "passenger-office": "توزیع درخواست", "passenger-boss": "کارگروه", "refahi-province-manager": "رفاهی", "refahi-loan-management": "رفاهی", @@ -115,9 +113,7 @@ "change_password": "تغییر رمز عبور", "province_manager_page": "بررسی وام های تبصره 18", "province_head_expert": "کارشناس ستادی", - "passenger_office_page": "اداره مسافر", "loan_management_page": "مدیریت وام", - "machinary_office_page": "کارتابل کارشناسی", "reserve_loans": "وام های رزرو", "development_assistant_page": "معاون توسعه", "inspector_expert_page": "بازدید کارشناس", @@ -182,25 +178,6 @@ "success_static_text": "عملیات شما با موفقیت انجام شد", "pending": "در حال انجام..." }, - "PassengerOffice": { - "name": "نام", - "shenase_meli": "شناسه ملی", - "is_legal_person": "نوع شخص", - "haghighi": "حقیقی", - "hoghoghi": "حقوقی", - "id": "کد یکتا", - "national_id": "کد ملی", - "phone_number": "موبایل", - "created_at": "تاریخ درخواست", - "updated_at": "تاریخ بروزرسانی", - "navgan_id": "کد ناوگان", - "vehicle_type": "نوع ماشین", - "state_name": "وضعیت درخواست", - "confirm": "ارجاع به کارشناس ماشین آلات", - "upload_file_unit": "فایل بارگذاری شده باید حداکثر 5Mb باشد", - "upload_file_format": "فرمت قابل قبول : png,jpg,pdf", - "excel_report": "گزارش اکسل" - }, "CommercialChief": { "name": "نام", "id": "کد یکتا", @@ -215,7 +192,14 @@ "NavganProvinceManager": { "name": "نام", "id": "کد یکتا", + "physical_progress": "درصد پیشرفت فیزیکی", + "repayment_period": "دوره باز پرداخت", + "committed_employment": "اشتغال ایجاد شده", + "existing_employment": "اشتغال موجود", "city_name": "شهرستان", + "facility_bank": "سهم بانک", + "facility_gov": "سهم دولت", + "facility_person": "سهم متقاضی", "plate_number": "پلاک", "statement_count": "تعداد صورت وضعیت", "shenase_meli": "شناسه ملی", @@ -228,7 +212,7 @@ "national_id": "کد ملی", "phone_number": "موبایل", "proposed_amount": "مبلغ پیشنهادی", - "approved_amount": "مبلغ تصویب شده", + "approved_amount": "مبلغ مصوب", "created_at": "تاریخ درخواست", "updated_at": "تاریخ بروزرسانی", "navgan_id": "کد ناوگان", @@ -312,6 +296,16 @@ "excel_report": "گزارش اکسل", "city_name": "شهرستان", "plate_number": "پلاک", + "existing_employment": "اشتغال موجود", + "bank_facility": "سهم بانک", + "facility_bank": "سهم بانک", + "government_facility": "سهم دولت", + "facility_gov": "سهم دولت", + "user_facility": "سهم متقاضی", + "facility_person": "سهم متقاضی", + "physical_progress": "درصد پیشرفت فیزیکی", + "repayment_period": "دوره باز پرداخت", + "committed_employment": "اشتغال ایجاد شده", "statement_count": "تعداد صورت وضعیت", "score": "اولویت", "navgan_capacity": "ظرفیت", @@ -326,7 +320,7 @@ "tanafos_period": "دوره تنفس", "province_name": "استان", "proposed_amount": "مبلغ پیشنهادی", - "approved_amount": "مبلغ تصویب شده", + "approved_amount": "مبلغ مصوب", "created_at": "تاریخ درخواست", "updated_at": "تاریخ بروزرسانی", "navgan_id": "کد ناوگان", @@ -360,6 +354,13 @@ "city_name": "شهرستان", "plate_number": "پلاک", "id": "کد یکتا", + "facility_bank": "سهم بانک", + "facility_gov": "سهم دولت", + "facility_person": "سهم متقاضی", + "physical_progress": "درصد پیشرفت فیزیکی", + "repayment_period": "دوره باز پرداخت", + "committed_employment": "اشتغال ایجاد شده", + "existing_employment": "اشتغال موجود", "statement_count": "تعداد صورت وضعیت", "shenase_meli": "شناسه ملی", "is_legal_person": "نوع شخص", @@ -371,7 +372,7 @@ "national_id": "کد ملی", "phone_number": "موبایل", "proposed_amount": "مبلغ پیشنهادی", - "approved_amount": "مبلغ تصویب شده", + "approved_amount": "مبلغ مصوب", "created_at": "تاریخ درخواست", "updated_at": "تاریخ بروزرسانی", "navgan_id": "کد ناوگان", @@ -394,12 +395,28 @@ "vehicle_type": "نوع ماشین", "state_name": "وضعیت درخواست" }, - "MachinaryOffice": { + "ReserveLoan": { "name": "نام", + "hoghoghi": "حقوقی", + "haghighi": "حقیقی", "city_name": "شهرستان", "plate_number": "پلاک", - "statement_count": "تعداد صورت وضعیت", "id": "کد یکتا", + "existing_employment": "اشتغال موجود", + "approved_amount": "مبلغ مصوب", + "sakht_period": "دوره ساخت", + "tanafos_period": "دوره تنفس", + "bank_facility": "سهم بانک", + "facility_bank": "سهم بانک", + "government_facility": "سهم دولت", + "facility_gov": "سهم دولت", + "user_facility": "سهم متقاضی", + "facility_person": "سهم متقاضی", + "physical_progress": "درصد پیشرفت فیزیکی", + "repayment_period": "دوره باز پرداخت", + "committed_employment": "اشتغال ایجاد شده", + "available_jobs": "اشتغال موجود", + "statement_count": "تعداد صورت وضعیت", "score": "اولویت", "navgan_capacity": "ظرفیت", "manufacture_date": "سال ساخت", @@ -427,9 +444,7 @@ "description-reserve-loan-first": "آیا از رزرو وام به کد یکتا", "description-reserve-loan-second": "اطمینان دارید؟", "button-reserve-cancel": "بستن", - "button-reserve-confirm": "رزرو" - }, - "ReserveLoan": { + "button-reserve-confirm": "رزرو", "title": "بازگردانی", "description-loan-first": "آیا از بازگردانی وام به کد یکتا", "description-loan-second": "اطمینان دارید؟", @@ -441,7 +456,7 @@ "id": "کد یکتا", "national_serial_number": "سریال پشت کارت ملی", "birthday": "تاریخ تولد", - "approved_amount": "مبلغ تصویب شده", + "approved_amount": "مبلغ مصوب", "branch_name": "نام شعبه", "bank_state": "وضعیت پیگیری بانک", "state_name": "وضعیت درخواست", @@ -478,12 +493,12 @@ "context": "آیا از تایید این آیتم اطمینان دارید؟", "button-cancel": "بستن", "button-confirm": "ارجاع", - "bank_facility": "تسهیلات سهم بانک", - "user_facility": "تسهیلات سهم متقاضی", - "government_facility": "تسهیلات سهم دولت", + "facility_bank": "تسهیلات سهم بانک", + "facility_person": "تسهیلات سهم متقاضی", + "facility_gov": "تسهیلات سهم دولت", "committed_employment": "تعداد اشتغال تعهد شده", "history_facilities": "سابقه استفاده از تسهیلات تکلیفی", - "available_jobs": "تعداد اشتغال موجود", + "existing_employment": "تعداد اشتغال موجود", "physical_progress": "درصد پیشرفت فیزیکی", "interest_rate": "نرخ بهره", "description_error": "وارد کردن توضیحات الزامی است!", @@ -493,32 +508,32 @@ "choose_file": "انتخاب فایل", "repayment_period": "دوره باز پرداخت", "participation_period": "دوره مشارکت", - "approved_amount": "مبلغ تصویب شده", + "approved_amount": "مبلغ مصوب", "sakht_period": "دوره ساخت", "tanafos_period": "دوره تنفس", - "approved_amount_error": "وارد کردن مبلغ تصویب شده الزامیست", - "bank_facility_error": "وارد کردن تسهیلات سهم بانک الزامیست", - "government_facility_error": "وارد کردن تسهیلات سهم دولت الزامیست", + "approved_amount_error": "وارد کردن مبلغ مصوب الزامیست", + "facility_bank_error": "وارد کردن تسهیلات سهم بانک الزامیست", + "facility_gov_error": "وارد کردن تسهیلات سهم دولت الزامیست", "committed_employment_error": "وارد کردن تعداد اشتغال تعهد شده الزامیست", "history_facilities_error": "وارد کردن سابقه استفاده از تسهیلات تکلیفی الزامیست", - "available_jobs_error": "وارد کردن تعداد اشتغال موجود الزامیست", + "existing_employment_error": "وارد کردن تعداد اشتغال موجود الزامیست", "sakht_period_error": "وارد کردن دوره ساخت الزامیست", "tanafos_period_error": "وارد کردن دوره تنفس الزامیست", - "approved_amount_positive": "مبلغ تصویب شده باید مثبت باشد", - "bank_facility_positive": "تسهیلات سهم بانک باید مثبت باشد", + "approved_amount_positive": "مبلغ مصوب باید مثبت باشد", + "facility_bank_positive": "تسهیلات سهم بانک باید مثبت باشد", "repayment_period_positive": "دوره باز پرداخت باید مثبت باشد", "participation_period_positive": "دوره مشارکت باید مثبت باشد", - "government_facility_positive": "تسهیلات سهم دولت باید مثبت باشد", + "facility_gov_positive": "تسهیلات سهم دولت باید مثبت باشد", "committed_employment_positive": "تعداد اشتغال تعهد شده باید مثبت باشد", "history_facilities_positive": "سابقه استفاده از تسهیلات تکلیفی باید مثبت باشد", - "available_jobs_positive": "تعدلد اشتغال موجود باید مثبت باشد", - "approved_amount_number": "مبلغ تصویب شده باید عدد باشد", - "bank_facility_number": "تسهیلات سهم بانک باید عدد باشد", + "existing_employment_positive": "تعدلد اشتغال موجود باید مثبت باشد", + "approved_amount_number": "مبلغ مصوب باید عدد باشد", + "facility_bank_number": "تسهیلات سهم بانک باید عدد باشد", "interest_rate_number": "نرخ بهره باید عدد باشد", - "government_facility_number": "تسهیلات سهم دولت باید عدد باشد", + "facility_gov_number": "تسهیلات سهم دولت باید عدد باشد", "committed_employment_number": "تعداد سابقه استفاده از تسهیلات تکلیفی باید عدد باشد", "history_facilities_number": "تعداد اشتغال تعهد شده باید عدد باشد", - "available_jobs_number": "تعداد اشتغال موجود باید عدد باشد", + "existing_employment_number": "تعداد اشتغال موجود باید عدد باشد", "sakht_period_positive": "دوره ساخت باید مثبت باشد", "interest_rate_positive": "نرخ بهره باید مثبت باشد", "tanafos_period_positive": "دوره تنفس باید مثبت باشد", @@ -527,11 +542,15 @@ "participation_period_number": "دوره مشارکت باید عدد باشد", "tanafos_period_number": "دوره تنفس باید عدد باشد", "toman": "میلیون تومان", - "bank_facility_max_amount": "جمع مبلغ سهم دولت و سهم بانک نباید از مبلغ تصویب شده بیشتر باشد .", - "government_facility_max_amount": "جمع مبلغ سهم دولت و سهم بانک نباید از مبلغ تصویب شده بیشتر باشد .", + "facility_bank_max_amount": "جمع مبلغ سهم دولت و سهم بانک نباید از مبلغ تصویب شده بیشتر باشد .", + "facility_gov_max_amount": "جمع مبلغ سهم دولت و سهم بانک نباید از مبلغ تصویب شده بیشتر باشد .", "tanafos_period_month": "ماه", - "approved_amount_title": "مبلغ تصویب شده کارگروه", - "sakht_period_day": "روز", + "repayment_period_month": "ماه", + "approved_amount_title": "مبلغ مصوب کارگروه", + "facility_bank_title": "سهم بانک", + "facility_gov_title": "سهم دولت", + "facility_person_title": "سهم متقاضی", + "sakht_period_day": "ماه", "proposed_amount_error": "وارد کردن مقدار پیشنهادی الزامیست", "repayment_period_error": "وارد کردن دوره باز پرداخت الزامیست", "participation_period_error": "وارد کردن دوره مشارکت الزامیست", @@ -562,18 +581,18 @@ "choose_file": "انتخاب فایل" }, "EditDialog": { - "edit_approved_amount": "ویرایش مبلغ تصویب شده", + "edit_approved_amount": "ویرایش مبلغ مصوب", "description_error": "وارد کردن توضیحات الزامی است!", "optional": " (اختیاری)", - "approved_amount": "مبلغ تصویب شده", + "approved_amount": "مبلغ مصوب", "button-cancel": "بستن", "button-edit": "ویرایش", - "edit_approved_amount_required": "وارد کردن مبلغ تصویب شده الزامیست", + "edit_approved_amount_required": "وارد کردن مبلغ مصوب الزامیست", "unit": " (میلیون ریال)", "button-revise": "ارسال", - "approved_amount_positive": "مبلغ تصویب شده باید مثبت باشد", - "max_amount": "حداکثر مبلغ تصویب شده {value} میلیون ریال می باشد", - "approved_amount_number": "مبلغ تصویب شده باید عدد باشد", + "approved_amount_positive": "مبلغ مصوب باید مثبت باشد", + "max_amount": "حداکثر مبلغ مصوب {value} میلیون ریال می باشد", + "approved_amount_number": "مبلغ مصوب باید عدد باشد", "description": "توضیحات خود را وارد نمائید" }, "UpdateDialog": { @@ -773,6 +792,16 @@ "statement_count": "تعداد صورت وضعیت", "name": "نام", "score": "اولویت", + "existing_employment": "اشتغال موجود", + "bank_facility": "سهم بانک", + "facility_bank": "سهم بانک", + "government_facility": "سهم دولت", + "facility_gov": "سهم دولت", + "user_facility": "سهم متقاضی", + "facility_person": "سهم متقاضی", + "physical_progress": "درصد پیشرفت فیزیکی", + "committed_employment": "اشتغال ایجاد شده", + "available_jobs": "اشتغال موجود", "navgan_capacity": "ظرفیت", "manufacture_date": "سال ساخت", "shenase_meli": "شناسه ملی", @@ -780,12 +809,13 @@ "haghighi": "حقیقی", "hoghoghi": "حقوقی", "tanafos_period": "دوره تنفس", + "repayment_period": "دوره بازپرداخت", "sakht_period": "دوره ساخت", "national_id": "کد ملی", "postal_code": "کد پستی", "phone_number": "موبایل", "proposed_amount": "مبلغ پیشنهادی", - "approved_amount": "مبلغ تصویب شده", + "approved_amount": "مبلغ مصوب", "created_at": "تاریخ درخواست", "updated_at": "تاریخ بروزرسانی", "navgan_id": "کد ناوگان", diff --git a/src/components/dashboard/loan-history/index.jsx b/src/components/dashboard/loan-history/index.jsx index 8b886a4..2a75e5f 100644 --- a/src/components/dashboard/loan-history/index.jsx +++ b/src/components/dashboard/loan-history/index.jsx @@ -304,25 +304,6 @@ function DashboardLoanHistoryComponent() { ), }, - { - accessorFn: (row) => row.proposed_amount, - id: "proposed_amount", - header: t("LoanHistory.proposed_amount"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue / 1000000} - ), - }, { accessorFn: (row) => row.approved_amount, id: "approved_amount", @@ -342,6 +323,101 @@ function DashboardLoanHistoryComponent() { {renderedCellValue / 1000000} ), }, + { + accessorFn: (row) => row.facility_bank, + id: "facility_bank", + header: t("LoanHistory.facility_bank"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.facility_gov, + id: "facility_gov", + header: t("LoanHistory.facility_gov"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.facility_person, + id: "facility_person", + header: t("LoanHistory.facility_person"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.physical_progress, + id: "physical_progress", + header: t("LoanHistory.physical_progress"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.repayment_period, + id: "repayment_period", + header: t("LoanHistory.repayment_period"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, { accessorFn: (row) => row.sakht_period, id: "sakht_period", @@ -370,6 +446,44 @@ function DashboardLoanHistoryComponent() { {renderedCellValue} ), }, + { + accessorFn: (row) => row.committed_employment, + id: "committed_employment", + header: t("LoanHistory.committed_employment"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.existing_employment, + id: "existing_employment", + header: t("LoanHistory.existing_employment"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, { accessorFn: (row) => row.state_name, id: "state_name", diff --git a/src/components/dashboard/machinary-office/Buttons/printExcel.jsx b/src/components/dashboard/machinary-office/Buttons/printExcel.jsx deleted file mode 100644 index f1333e0..0000000 --- a/src/components/dashboard/machinary-office/Buttons/printExcel.jsx +++ /dev/null @@ -1,67 +0,0 @@ -import {Button, CircularProgress} from "@mui/material"; -import {useTranslations} from "next-intl"; -import {useMemo, useState} from "react"; -import useRequest from "@/lib/app/hooks/useRequest"; -import {EXPORT_MACHINARY_OFFICE} from "@/core/data/apiRoutes"; -import moment from "jalali-moment"; -import FileSaver from 'file-saver'; -import DescriptionIcon from '@mui/icons-material/Description'; - -const PrintExcel = ({table}) => { - const t = useTranslations(); - const [loading, setLoading] = useState(false) - const requestServer = useRequest({auth: true, pending: false, success: {notification: {show: false}}}) - const {columnFilters, columnFilterFns, sorting} = table.getState() - const columns = table.getAllColumns() - - const filterParams = useMemo(() => { - const params = new URLSearchParams(); - const filters = columnFilters.map((filter) => { - let datatype; - for (const i in columns) { - if (columns[i].id == filter.id) { - datatype = columns[i].columnDef.datatype; - } - } - return { - ...filter, fn: columnFilterFns[filter.id], datatype: datatype, - }; - }); - params.set("start", '0'); - params.set("filters", JSON.stringify(filters ?? [])); - params.set("sorting", JSON.stringify(sorting ?? [])); - return params; - }, [columnFilters, columnFilterFns, sorting, columns,]); - - - const clickHandler = () => { - setLoading(true) - requestServer(`${EXPORT_MACHINARY_OFFICE}?${filterParams}`, 'get', { - auth: true, - requestOptions: {responseType: 'blob'} - }).then((response) => { - const filename = `خروجی کارتابل کارشناسی تاریخ_${moment().format('jYYYY_jMM_jDD')}.xlsx`; - FileSaver.saveAs(response.data, filename); - }).catch(() => { - }).finally(() => { - setLoading(false) - }) - } - - - return ( - - ) -} - -export default PrintExcel \ No newline at end of file diff --git a/src/components/dashboard/machinary-office/Buttons/printReport.jsx b/src/components/dashboard/machinary-office/Buttons/printReport.jsx deleted file mode 100644 index 47aab16..0000000 --- a/src/components/dashboard/machinary-office/Buttons/printReport.jsx +++ /dev/null @@ -1,48 +0,0 @@ -import PrintIcon from "@mui/icons-material/Print"; -import {Button, CircularProgress} from "@mui/material"; -import {useTranslations} from "next-intl"; -import {useRouter} from "next/router"; -import {useState} from "react"; -import useRequest from "@/lib/app/hooks/useRequest"; -import {GET_MACHINARY_OFFICE} from "@/core/data/apiRoutes"; -import usePrint from "@/lib/app/hooks/usePrint"; - -const PrintReport = () => { - const t = useTranslations(); - const router = useRouter() - const [loading, setLoading] = useState(false) - const requestServer = useRequest({auth: true, pending: false, success: {notification: {show: false}}}) - const {setPrintPage, setPrintTitle} = usePrint() - const clickHandler = () => { - setLoading(true) - const params = new URLSearchParams(); - params.set("start", '0'); - params.set("filters", '[]'); - params.set("sorting", '[]'); - requestServer(`${GET_MACHINARY_OFFICE}?${params}`, 'get').then((response) => { - const _data = response.data.data - setPrintPage(_data.length) - setPrintTitle(t('MachinaryOffice.print_report')) - sessionStorage.setItem('report-print', JSON.stringify(_data)) - router.push('/dashboard/machinery-expert/prints/report') - }).catch(() => { - setLoading(false) - }) - } - - return ( - - ) -} - -export default PrintReport \ No newline at end of file diff --git a/src/components/dashboard/machinary-office/Form/ConfirmForm/ConfirmContent.jsx b/src/components/dashboard/machinary-office/Form/ConfirmForm/ConfirmContent.jsx deleted file mode 100644 index a1a6b1f..0000000 --- a/src/components/dashboard/machinary-office/Form/ConfirmForm/ConfirmContent.jsx +++ /dev/null @@ -1,378 +0,0 @@ -import UploadSystem from "@/core/components/UploadSystem"; -import useNotification from "@/lib/app/hooks/useNotification"; -import useRequest from "@/lib/app/hooks/useRequest"; -import { - Button, - DialogActions, - DialogContent, - FormHelperText, - Grid, - LinearProgress, - Stack, - TextField, - Typography -} from "@mui/material" -import {useFormik} from "formik"; -import {useTranslations} from "next-intl"; -import {CONFIRM_MACHINARY_OFFICE, CONFIRM_MACHINARY_OFFICE_DETAILS} from "@/core/data/apiRoutes"; -import {useEffect, useState} from "react"; -import PriceField from "@/core/components/PriceField"; -import * as Yup from "yup"; -import CustomAccordion from "@/core/components/CustomAccordion"; -import ImageContent from "@/core/components/ImageContent"; -import SelectBox from "@/core/components/SelectBox"; - -const vehicle_amount = { - "اتوبوس": 7000, - "مینی بوس": 2000, -} -const ConfirmContent = ({mutate, setOpenConfirmDialog, rowId, vehicle_type, handleSizeChangeClick}) => { - const t = useTranslations(); - const [selectedImage, setSelectedImage] = useState(""); - const [fileType, setfileType] = useState(null); - const [fileName, setfileName] = useState(null); - const [showAddIcon, setShowAddIcon] = useState(true); - const requestServer = useRequest({auth: true, notification: false}) - const {update_notification} = useNotification() - const [accordionStates, setAccordionStates] = useState([]); - const [hasImageShown, setHasImageShown] = useState(false); - const [imageLink, setImageLink] = useState(null); - const [detailsList, setDetailsData] = useState(null); - const [loading, setLoading] = useState(true); - const [isSkeleton, setIsSkeleton] = useState(false); - - useEffect(() => { - requestServer(`${CONFIRM_MACHINARY_OFFICE_DETAILS}/${rowId}`, 'get') - .then((response) => { - const booleanData = Array.from({length: response.data.data.attachment_files.length}, () => false); - setAccordionStates(booleanData); - setDetailsData(response.data) - }) - .catch(() => { - }).finally(() => { - setLoading(false); - }); - }, []); - - const handleAccordionChange = (index) => { - const newAccordionStates = accordionStates.map((state, i) => i === index ? !state : false); - setAccordionStates(newAccordionStates); - - if (!newAccordionStates[index]) { - handleSizeChangeClick('sm'); - setHasImageShown(false); - setIsSkeleton(false) - } else { - handleSizeChangeClick('xl'); - setHasImageShown(true); - setImageLink(detailsList.data.attachment_files[index]) - setIsSkeleton(true) - } - }; - - const validationSchema = Yup.object().shape({ - proposed_amount: Yup.mixed() - .test( - "is-number", - `${t("ConfirmDialog.proposed_amount_number")}`, - (value) => !isNaN(value) - ) - .test("max-amount", `${t("MachinaryOffice.max_amount", {value: parseInt(vehicle_amount[vehicle_type]).toLocaleString('en')})}`, - (value) => value <= vehicle_amount[vehicle_type]) - .test("positive", `${t("ConfirmDialog.proposed_amount_positive")}`, (value) => value >= 0) - .required(t("ConfirmDialog.proposed_amount_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) - .required(t("ConfirmDialog.sakht_period_error")), - tanafos_period: Yup.mixed() - .test("is-number", `${t("ConfirmDialog.tanafos_period_number")}`, - (value) => !isNaN(value)) - .test("positive", `${t("ConfirmDialog.tanafos_period_positive")}`, (value) => value > 0) - .required(t("ConfirmDialog.tanafos_period_error")), - confirm_img: Yup.mixed() - .required(t("MachinaryOffice.upload_file_required")) - .test('fileSize', `${t("MachinaryOffice.upload_file_unit")}`, (value) => { - return value.size <= 5 * 1024 * 1024; - }) - .test('fileType', `${t("MachinaryOffice.upload_file_format")}`, (value) => { - const allowedTypes = ['image/jpg', 'image/jpeg', 'image/png', 'application/pdf']; - return allowedTypes.includes(value.type); - }) - }); - const formik = useFormik({ - initialValues: { - description: "", - proposed_amount: "", - sakht_period: "", - tanafos_period: "", - confirm_img: null - }, validationSchema, - onSubmit: (values, {setSubmitting}) => { - const formData = new FormData(); - formData.append("proposed_amount", values.proposed_amount); - formData.append("sakht_period", values.sakht_period); - formData.append("tanafos_period", values.tanafos_period); - if (values.description != "") formData.append("expert_description", values.description); - if (values.confirm_img != null) { - const attachments = [ - { - title: "فایل ضمیمه کارتابل قیمت گذاری", - file: values.confirm_img - } - ]; - attachments.forEach((attachment, index) => { - formData.append(`attachment[${index}][title]`, attachment.title); - formData.append(`attachment[${index}][file]`, attachment.file); - }); - } - requestServer(`${CONFIRM_MACHINARY_OFFICE}/${rowId}`, 'post', { - data: formData, - notification: true - }).then((response) => { - setOpenConfirmDialog(false) - mutate() - update_notification() - }).catch(() => { - }).finally(() => { - setSubmitting(false); - }); - }, - }); - - const handleDescriptionChange = (event) => { - formik.setFieldValue("description", event.target.value) - }; - - const handleUploadChange = (event) => { - const uploadedFile = event.target?.files?.[0]; - if (uploadedFile) { - const fileType = event.target?.files?.[0].type; - const fileName = event.target?.files?.[0].name; - setSelectedImage(URL.createObjectURL(uploadedFile)); - setfileType(fileType); - setfileName(fileName); - formik.setFieldValue("confirm_img", uploadedFile).then(() => { - formik.setFieldTouched("confirm_img", true); - }) - setShowAddIcon(false); - } - }; - const handleAmountChange = (event) => { - if (!isNaN(event.target.value)) { - formik.setFieldValue("proposed_amount", event.target.value) - } else { - formik.setFieldValue("proposed_amount", formik.values.proposed_amount) - } - }; - - const renderCustomAccordions = () => { - if (detailsList && detailsList.data && detailsList.data.attachment_files) { - return detailsList.data.attachment_files.map((file, index) => ( - handleAccordionChange(index)} - accordionIndex={index} - downloadFile={file.attachment} - /> - )); - } - return null; - }; - - return ( - <> - - - - {loading ? : renderCustomAccordions()} - - - - {t("ConfirmDialog.description")}{t("ConfirmDialog.optional")}} - value={formik.values.description} - onChange={handleDescriptionChange} - fullWidth - variant="outlined" - sx={{mt: 1}} - /> - - - - {t("ConfirmDialog.proposed_amount")}{t("ConfirmDialog.unit")}} - type="text" - inputProps={{ - inputMode: "number", - min: 0, - pattern: "[0-9]*", - }} - variant="outlined" - value={formik.values.proposed_amount} - onChange={handleAmountChange} - onBlur={formik.handleBlur("proposed_amount")} - error={ - formik.touched.proposed_amount && - Boolean(formik.errors.proposed_amount) - } - helperText={ - formik.touched.proposed_amount && formik.errors.proposed_amount - } - sx={{mt: 1}} - fullWidth - /> - - - { - formik.setFieldValue('sakht_period', event.target.value) - }} - setFieldTouched={formik.setFieldTouched} - error={formik.touched.sakht_period && Boolean(formik.errors.sakht_period)} - helperText={formik.touched.sakht_period && formik.errors.sakht_period} - onBlur={formik.handleBlur("sakht_period")} - /> - - - { - formik.setFieldValue('tanafos_period', event.target.value) - }} - setFieldTouched={formik.setFieldTouched} - error={formik.touched.tanafos_period && Boolean(formik.errors.tanafos_period)} - helperText={formik.touched.tanafos_period && formik.errors.tanafos_period} - onBlur={formik.handleBlur("tanafos_period")} - /> - - - {t("MachinaryOffice.upload_file")} - - - {formik.touched.confirm_img && formik.errors.confirm_img} - - - - - - - - - - - - - - - - - ) - -} -export default ConfirmContent \ No newline at end of file diff --git a/src/components/dashboard/machinary-office/Form/ConfirmForm/index.jsx b/src/components/dashboard/machinary-office/Form/ConfirmForm/index.jsx deleted file mode 100644 index febb675..0000000 --- a/src/components/dashboard/machinary-office/Form/ConfirmForm/index.jsx +++ /dev/null @@ -1,51 +0,0 @@ -import {Dialog, DialogTitle, IconButton, Tooltip} from "@mui/material"; -import {useTranslations} from "next-intl"; -import {useEffect, useState} from "react"; -import ConfirmContent from "./ConfirmContent"; -import CallMadeIcon from '@mui/icons-material/CallMade'; - -const Confirm = ({rowId, mutate, vehicle_type}) => { - const t = useTranslations(); - const [openConfirmDialog, setOpenConfirmDialog] = useState(false); - const [dialogSize, setDialogSize] = useState('sm'); - - useEffect(() => { - if (!openConfirmDialog) { - setDialogSize('sm'); - } - }, [openConfirmDialog]); - - const handleSizeChangeClick = (size) => { - setDialogSize(size); - }; - - - return ( - <> - - { - setOpenConfirmDialog(true) - }} - > - - - - - {t("MachinaryOffice.confirm")} - - - - ) - -} -export default Confirm; \ No newline at end of file diff --git a/src/components/dashboard/machinary-office/Form/RejectForm/RejectContent.jsx b/src/components/dashboard/machinary-office/Form/RejectForm/RejectContent.jsx deleted file mode 100644 index afec59e..0000000 --- a/src/components/dashboard/machinary-office/Form/RejectForm/RejectContent.jsx +++ /dev/null @@ -1,147 +0,0 @@ -import UploadSystem from "@/core/components/UploadSystem" -import useNotification from "@/lib/app/hooks/useNotification"; -import useRequest from "@/lib/app/hooks/useRequest"; -import {Button, DialogActions, DialogContent, FormHelperText, Stack, TextField, Typography} from "@mui/material" -import {useFormik} from "formik"; -import {useTranslations} from "next-intl"; -import {useState} from "react"; -import * as Yup from "yup"; -import {REJECT_MACHINARY_OFFICE} from "@/core/data/apiRoutes"; - -const RejectContent = ({rowId, mutate, setOpenRejectDialog}) => { - const [selectedImage, setSelectedImage] = useState(""); - const [fileType, setfileType] = useState(null); - const [fileName, setfileName] = useState(null); - const [showAddIcon, setShowAddIcon] = useState(true); - const t = useTranslations(); - const requestServer = useRequest({auth: true}) - const {update_notification} = useNotification() - - const validationSchema = Yup.object().shape({ - description: Yup.string().required(t("RejectDialog.description_error")), - reject_img: Yup.mixed().notRequired(t("RejectDialog.choose_file")) - .test('fileSize', `${t("MachinaryOffice.upload_file_unit")}`, (value) => { - return !value || (value.size && value.size <= 5 * 1024 * 1024); - }) - .test('fileType', `${t("MachinaryOffice.upload_file_format")}`, (value) => { - const allowedTypes = ['image/jpg', 'image/jpeg', 'image/png', 'application/pdf']; // Define your allowed file types - return !value || (value.type && allowedTypes.includes(value.type)); - }), - }); - - const formik = useFormik({ - initialValues: { - description: "", - reject_img: null - }, - validationSchema, - onSubmit: (values, {setSubmitting}) => { - const formData = new FormData(); - formData.append("expert_description", values.description); - if (values.reject_img != null) { - const attachments = [ - { - title: "فایل ضمیمه کارتابل قیمت گذاری", - file: values.reject_img - } - ]; - attachments.forEach((attachment, index) => { - formData.append(`attachment[${index}][title]`, attachment.title); - formData.append(`attachment[${index}][file]`, attachment.file); - }); - } - requestServer(`${REJECT_MACHINARY_OFFICE}/${rowId}`, 'post', { - data: formData, - }).then((response) => { - setOpenRejectDialog(false) - mutate() - update_notification() - }).catch(() => { - }).finally(() => { - setSubmitting(false); - }); - }, - }); - - const handleDescriptionChange = (event) => { - formik.setFieldValue("description", event.target.value); - formik.handleChange(event); - }; - const handleUploadChange = (event) => { - const uploadedFile = event.target?.files?.[0]; - if (uploadedFile) { - const fileType = event.target?.files?.[0].type; - const fileName = event.target?.files?.[0].name; - setSelectedImage(URL.createObjectURL(uploadedFile)); - setfileType(fileType); - setfileName(fileName); - formik.setFieldValue("reject_img", uploadedFile).then(() => { - formik.setFieldTouched("reject_img", true); - }) - setShowAddIcon(false); - } - }; - return ( - <> - - - - - - - {t("UploadSystem.upload_file")}{t("UploadSystem.optional")} - formik.handleBlur("reject_img")} - error={ - formik.touched.reject_img && - Boolean(formik.errors.reject_img) - } - /> - - {formik.touched.reject_img && formik.errors.reject_img} - - - - - - - - - - ) -} -export default RejectContent \ No newline at end of file diff --git a/src/components/dashboard/machinary-office/Form/RejectForm/index.jsx b/src/components/dashboard/machinary-office/Form/RejectForm/index.jsx deleted file mode 100644 index 06608f5..0000000 --- a/src/components/dashboard/machinary-office/Form/RejectForm/index.jsx +++ /dev/null @@ -1,25 +0,0 @@ -import {Dialog, DialogTitle, IconButton, Tooltip} from "@mui/material" -import {useTranslations} from "next-intl"; -import {useState} from "react"; -import RejectContent from "./RejectContent"; -import ThumbDownIcon from "@mui/icons-material/ThumbDown"; - -const Reject = ({rowId, mutate}) => { - const t = useTranslations(); - const [openRejectDialog, setOpenRejectDialog] = useState(false); - return ( - <> - - setOpenRejectDialog(true)}> - - - - - {t("RejectDialog.reject")} - - - - ) -} -export default Reject \ No newline at end of file diff --git a/src/components/dashboard/machinary-office/Form/ReserveForm/index.jsx b/src/components/dashboard/machinary-office/Form/ReserveForm/index.jsx deleted file mode 100644 index e7b08fb..0000000 --- a/src/components/dashboard/machinary-office/Form/ReserveForm/index.jsx +++ /dev/null @@ -1,75 +0,0 @@ -import { - Button, - Dialog, - DialogActions, - DialogContent, - DialogTitle, - IconButton, - Tooltip, Typography -} from "@mui/material"; -import {useTranslations} from "next-intl"; -import {useState} from "react"; -import RepartitionIcon from '@mui/icons-material/Repartition'; -import useRequest from "@/lib/app/hooks/useRequest"; -import useNotification from "@/lib/app/hooks/useNotification"; -import {RESERVE_MACHINARY_LOAN} from "@/core/data/apiRoutes"; - -const ReserveForm = ({rowId, mutate}) => { - const t = useTranslations(); - const [openConfirmDialog, setOpenConfirmDialog] = useState(false); - const requestServer = useRequest({auth: true, notification: true}); - const [isSubmitting, setIsSubmitting] = useState(false); - const {update_notification} = useNotification() - - const handleSubmit = () => { - setIsSubmitting(true) - requestServer(`${RESERVE_MACHINARY_LOAN}/${rowId}`, 'post').then((response) => { - setOpenConfirmDialog(false) - mutate() - update_notification() - }).catch(() => { - }).finally(() => { - setIsSubmitting(false) - }); - } - - return ( - <> - - { - setOpenConfirmDialog(true) - }} - > - - - - - - {t("MachinaryOffice.reserve-loan-title")} - - - {t("MachinaryOffice.description-reserve-loan-first")} {rowId} {t("MachinaryOffice.description-reserve-loan-second")} - - - - - - - - ) - -} -export default ReserveForm; \ No newline at end of file diff --git a/src/components/dashboard/machinary-office/Prints/report/Content.jsx b/src/components/dashboard/machinary-office/Prints/report/Content.jsx deleted file mode 100644 index 8098ecb..0000000 --- a/src/components/dashboard/machinary-office/Prints/report/Content.jsx +++ /dev/null @@ -1,96 +0,0 @@ -import PrintablePage from "@/core/components/PrintablePage"; -import {Box, Stack, Typography} from "@mui/material"; - -const Content = ({data}) => { - return ( - <> - - - {'گزارش کارشناسی ماشین آلات'} - - - {'با توجه به نامه شماره'} - 35482 - {'مورخ'} - 1402/08/20 - {'معاون محترم برنامه ریزی سازمان راهداری و حمل و نقل جاده ای در خصوص تسهیلات بند (الف) تبصره (18) قانون بودجه سال'} - 1402 - {'موضوع بازسازی ناوگان اتوبوس و مینی بوس و نیز تصویب آن درشورای برنامه ریزی و توسعه استان'} - تهران - {'و نامه شماره'} - 35482 - {'مورخ'} - 1402/08/20 - {'اداره کل راهداری و حمل و نقل جاده ای'} - تهران - {'در خصوص استفاده از ظرفیت انجمن های صنفی رانندگان در تاریخ'} - 1402/08/20 - {'از ناوگان اتوبوس/مینی بوس به شماره پلاک انتظامی'} - 25پ4582 - {'و شماره هوشمند ناوگان'} - 5875698725 - {'به مالکیت آقای'} - امیرحسین محمودی - {'با کد ملی'} - 0311318897 - {'و شماره تماس'} - 09120630655 - {'ساکن شهرستان'} - تهران - {'در جلسه مطرح شد که نتیجه آن به شرح ذیل مورد تایید می باشد.'} - - - {'مبلغ پیشنهادی به عدد .............................................. ریال و به حروف ...................................................................... ریال می باشد.'} - {'توضیحات : ................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................'} - - {'نام و نام خانوادگی کارشناس:'} - {'تاریخ و امضاء'} - - - - - ) -} - -export default Content \ No newline at end of file diff --git a/src/components/dashboard/machinary-office/Prints/report/index.jsx b/src/components/dashboard/machinary-office/Prints/report/index.jsx deleted file mode 100644 index 54dca24..0000000 --- a/src/components/dashboard/machinary-office/Prints/report/index.jsx +++ /dev/null @@ -1,60 +0,0 @@ -import {useEffect, useState} from "react"; -import CenterLayout from "@/layouts/CenterLayout"; -import {useTranslations} from "next-intl"; -import {Stack, Typography} from "@mui/material"; -import Content from "@/components/dashboard/machinary-office/Prints/report/Content"; - -const ReportComponent = () => { - const t = useTranslations() - const [data, setData] = useState(null) - const [loading, setLoading] = useState(true) - const [isNotData, setIsNotData] = useState(true) - - useEffect(() => { - if (sessionStorage.getItem('report-print') === null) { - setLoading(false) - setIsNotData(true) - sessionStorage.setItem('report-print', 'seen') - } else if (sessionStorage.getItem('report-print') === 'seen') { - setLoading(false) - setData(null) - setIsNotData(true) - } else if (data) { - setLoading(false) - sessionStorage.setItem('report-print', 'seen') - setIsNotData(false) - } else { - setLoading(true) - setData(JSON.parse(sessionStorage.getItem('report-print'))) - setIsNotData(true) - } - }, [data]); - - return ( - - {loading ? ( - - - - {t('print_loading')} - - - - ) : !data ? ( - - - {t('data_not_found')} - - - ) : !data.length ? ( - - - {t('data_not_found')} - - - ) : data.map(item => )} - - ) -} - -export default ReportComponent \ No newline at end of file diff --git a/src/components/dashboard/machinary-office/TableRowActions.jsx b/src/components/dashboard/machinary-office/TableRowActions.jsx deleted file mode 100644 index 0e111cb..0000000 --- a/src/components/dashboard/machinary-office/TableRowActions.jsx +++ /dev/null @@ -1,26 +0,0 @@ -import {Box} from "@mui/material"; -import Confirm from "./Form/ConfirmForm"; -import Reject from "./Form/RejectForm"; -import ReserveForm from "@/components/dashboard/machinary-office/Form/ReserveForm"; - -const TableRow = ({row, mutate}) => { - return ( - - - - - - ); -}; - -export default TableRow; diff --git a/src/components/dashboard/machinary-office/TableToolbar.jsx b/src/components/dashboard/machinary-office/TableToolbar.jsx deleted file mode 100644 index c1e6672..0000000 --- a/src/components/dashboard/machinary-office/TableToolbar.jsx +++ /dev/null @@ -1,13 +0,0 @@ -import {Stack} from "@mui/material"; -import PrintExcel from "@/components/dashboard/machinary-office/Buttons/printExcel"; - -const TableToolbar = ({table}) => { - return ( - - {/**/} - - - ) -} - -export default TableToolbar \ No newline at end of file diff --git a/src/components/dashboard/machinary-office/index.jsx b/src/components/dashboard/machinary-office/index.jsx deleted file mode 100644 index dbf72f0..0000000 --- a/src/components/dashboard/machinary-office/index.jsx +++ /dev/null @@ -1,331 +0,0 @@ -import {Box, Stack, Typography} from "@mui/material"; -import {useMemo} from "react"; -import {GET_MACHINARY_OFFICE} from "@/core/data/apiRoutes"; -import {useTranslations} from "next-intl"; -import TableRowActions from "./TableRowActions"; -import moment from "jalali-moment"; -import DataTable from "@/core/components/DataTable"; -import MuiDatePicker from "@/core/components/MuiDatePicker"; -import TableToolbar from "@/components/dashboard/machinary-office/TableToolbar"; - -function DashboardMachinaryOfficeComponent() { - const t = useTranslations(); - const columns = useMemo( - () => [ - { - accessorFn: (row) => row.id, - id: "id", - header: t("MachinaryOffice.id"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.score, - id: "score", - header: t("MachinaryOffice.score"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.is_legal_person, - id: "is_legal_person", - header: t("MachinaryOffice.is_legal_person"), - enableColumnFilter: false, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: ["equals"], - Cell: ({renderedCellValue}) => ( - {renderedCellValue === 1 ? `${t("MachinaryOffice.hoghoghi")}` : `${t("MachinaryOffice.haghighi")}`} - ), - }, - { - accessorFn: (row) => row.navgan_id, - id: "navgan_id", - header: t("MachinaryOffice.navgan_id"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.name, - id: "name", - header: t("MachinaryOffice.name"), - enableColumnFilter: true, - datatype: "text", - filterFn: "contains", - columnFilterModeOptions: ["contains", "equals", "notEquals"], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.national_id, - id: "national_id", - header: t("MachinaryOffice.national_id"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.shenase_meli, - id: "shenase_meli", - header: t("MachinaryOffice.shenase_meli"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.province_name, - id: "province_name", - header: t("MachinaryOffice.province_name"), - enableColumnFilter: true, - datatype: "text", - filterFn: "contains", - columnFilterModeOptions: ["contains", "equals", "notEquals"], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.city_name, - id: "city_name", - header: t("MachinaryOffice.city_name"), - enableColumnFilter: true, - datatype: "text", - filterFn: "contains", - columnFilterModeOptions: ["contains", "equals", "notEquals"], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => - moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"), - id: "created_at", - header: t("MachinaryOffice.created_at"), - enableColumnFilter: true, - datatype: "date", - filterFn: "lessThan", - columnFilterModeOptions: ["lessThan", "greaterThan"], - Cell: ({renderedCellValue}) => { - return {renderedCellValue}; - }, - Header: ({column}) => <>{column.columnDef.header}, - Filter: ({column}) => { - return ( - - ); - }, - }, - { - accessorFn: (row) => row.phone_number, - id: "phone_number", - header: t("MachinaryOffice.phone_number"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.statement_count, - id: "statement_count", - header: t("MachinaryOffice.statement_count"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.navgan_capacity, - id: "navgan_capacity", - header: t("MachinaryOffice.navgan_capacity"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.manufacture_date, - id: "manufacture_date", - header: t("MachinaryOffice.manufacture_date"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.vehicle_type, - id: "vehicle_type", - header: t("MachinaryOffice.vehicle_type"), - enableColumnFilter: true, - datatype: "text", - filterFn: "contains", - columnFilterModeOptions: ["contains", "equals", "notEquals"], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.plate_number, - id: "plate_number", - header: t("MachinaryOffice.plate_number"), - enableColumnFilter: false, - datatype: "text", - filterFn: "contains", - columnFilterModeOptions: ["contains", "equals", "notEquals"], - Cell: ({renderedCellValue}) => ( - - - {renderedCellValue.split('-')[3]} - - - {renderedCellValue.split('-')[2]} - {renderedCellValue.split('-')[1]} - {renderedCellValue.split('-')[0]} - - - ), - }, - { - accessorFn: (row) => row.state_name, - id: "state_id", - header: t("MachinaryOffice.state_name"), - enableColumnFilter: false, - datatype: "numeric", - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - ], - [] - ); - return ( - - - - ); -} - -export default DashboardMachinaryOfficeComponent; diff --git a/src/components/dashboard/navgan-loan-management/index.jsx b/src/components/dashboard/navgan-loan-management/index.jsx index 03b5242..9777746 100644 --- a/src/components/dashboard/navgan-loan-management/index.jsx +++ b/src/components/dashboard/navgan-loan-management/index.jsx @@ -289,25 +289,6 @@ function DashboardNavganLoanManagementComponent() { ), }, - { - accessorFn: (row) => row.proposed_amount, - id: "proposed_amount", - header: t("NavganLoanManagement.proposed_amount"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue / 1000000} - ), - }, { accessorFn: (row) => row.approved_amount, id: "approved_amount", @@ -327,6 +308,101 @@ function DashboardNavganLoanManagementComponent() { {renderedCellValue / 1000000} ), }, + { + accessorFn: (row) => row.facility_bank, + id: "facility_bank", + header: t("NavganLoanManagement.facility_bank"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.facility_gov, + id: "facility_gov", + header: t("NavganLoanManagement.facility_gov"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.facility_person, + id: "facility_person", + header: t("NavganLoanManagement.facility_person"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.physical_progress, + id: "physical_progress", + header: t("NavganLoanManagement.physical_progress"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.repayment_period, + id: "repayment_period", + header: t("NavganLoanManagement.repayment_period"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, { accessorFn: (row) => row.sakht_period, id: "sakht_period", @@ -355,6 +431,44 @@ function DashboardNavganLoanManagementComponent() { {renderedCellValue} ), }, + { + accessorFn: (row) => row.committed_employment, + id: "committed_employment", + header: t("NavganLoanManagement.committed_employment"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.existing_employment, + id: "existing_employment", + header: t("NavganLoanManagement.existing_employment"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, { accessorFn: (row) => row.state_name, id: "state_name", diff --git a/src/components/dashboard/navgan-province-manager/Form/ConfirmForm/ConfirmContent.jsx b/src/components/dashboard/navgan-province-manager/Form/ConfirmForm/ConfirmContent.jsx index a7ce958..9e14fcc 100644 --- a/src/components/dashboard/navgan-province-manager/Form/ConfirmForm/ConfirmContent.jsx +++ b/src/components/dashboard/navgan-province-manager/Form/ConfirmForm/ConfirmContent.jsx @@ -169,13 +169,23 @@ const ConfirmContent = ({rowId, mutate, setOpenConfirmDialog, handleSizeChangeCl {loading ? : <> + + + {renderCustomAccordions()} } diff --git a/src/components/dashboard/navgan-province-manager/index.jsx b/src/components/dashboard/navgan-province-manager/index.jsx index ea4a568..b39cf90 100644 --- a/src/components/dashboard/navgan-province-manager/index.jsx +++ b/src/components/dashboard/navgan-province-manager/index.jsx @@ -232,25 +232,6 @@ function DashboardNavganProvinceManagerComponent() { ), }, - { - accessorFn: (row) => row.proposed_amount, - id: "proposed_amount", - header: t("NavganProvinceManager.proposed_amount"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue / 1000000} - ), - }, { accessorFn: (row) => row.approved_amount, id: "approved_amount", @@ -270,6 +251,101 @@ function DashboardNavganProvinceManagerComponent() { {renderedCellValue / 1000000} ), }, + { + accessorFn: (row) => row.facility_bank, + id: "facility_bank", + header: t("NavganProvinceManager.facility_bank"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.facility_gov, + id: "facility_gov", + header: t("NavganProvinceManager.facility_gov"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.facility_person, + id: "facility_person", + header: t("NavganProvinceManager.facility_person"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.physical_progress, + id: "physical_progress", + header: t("NavganProvinceManager.physical_progress"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.repayment_period, + id: "repayment_period", + header: t("NavganProvinceManager.repayment_period"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, { accessorFn: (row) => row.sakht_period, id: "sakht_period", @@ -298,6 +374,44 @@ function DashboardNavganProvinceManagerComponent() { {renderedCellValue} ), }, + { + accessorFn: (row) => row.committed_employment, + id: "committed_employment", + header: t("NavganProvinceManager.committed_employment"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.existing_employment, + id: "existing_employment", + header: t("NavganProvinceManager.existing_employment"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, { accessorFn: (row) => row.state_name, id: "state_id", diff --git a/src/components/dashboard/passenger-boss/Form/ConfirmForm/ConfirmContent.jsx b/src/components/dashboard/passenger-boss/Form/ConfirmForm/ConfirmContent.jsx index b9dbf5f..7f15fed 100644 --- a/src/components/dashboard/passenger-boss/Form/ConfirmForm/ConfirmContent.jsx +++ b/src/components/dashboard/passenger-boss/Form/ConfirmForm/ConfirmContent.jsx @@ -17,6 +17,7 @@ import {useState} from "react"; import PriceField from "@/core/components/PriceField"; import * as Yup from "yup"; import SelectBox from "@/core/components/SelectBox"; +import {useConfig} from "@/lib/app/hooks/useConfig"; const vehicle_amount = { "اتوبوس": 7000, @@ -25,17 +26,13 @@ const vehicle_amount = { const ConfirmContent = ({rowId, mutate, setOpenConfirmDialog, vehicle_type}) => { const t = useTranslations(); - const [selectedImage, setSelectedImage] = useState(""); const [expertImg, setExpertImg] = useState(""); - const [fileType, setFileType] = useState(null); - const [fileName, setFileName] = useState(null); - const [showAddIcon, setShowAddIcon] = useState(true); const [expertFileType, setExpertFileType] = useState(null); const [expertFileName, setExpertFileName] = useState(null); const [showExpertAddIcon, setShowExpertAddIcon] = useState(true); const requestServer = useRequest({auth: true, notification: false}) const {update_notification} = useNotification(); - const [showFacility, setShowFacility] = useState(false) + const {config} = useConfig() const validationSchema = Yup.object().shape({ approved_amount: Yup.mixed().test( @@ -46,55 +43,24 @@ const ConfirmContent = ({rowId, mutate, setOpenConfirmDialog, vehicle_type}) => (value) => value <= vehicle_amount[vehicle_type]) .test("positive", `${t("ConfirmDialog.approved_amount_positive")}`, (value) => value >= 0) .required(t("ConfirmDialog.approved_amount_error")), - bank_facility: Yup.mixed().test( - "is-number", - `${t("ConfirmDialog.bank_facility_number")}`, - (value) => !isNaN(value) - ).test("positive", `${t("ConfirmDialog.bank_facility_positive")}`, (value) => value >= 0) - .test("max_bank", `${t("ConfirmDialog.bank_facility_max_amount")}`, function (value) { - const government_facility = this.parent.government_facility || 0; - const max_amount = (this.parent.approved_amount || 0) - government_facility; - return value <= max_amount; - }) - .required(t("ConfirmDialog.bank_facility_error")), - government_facility: Yup.mixed() - .test( - "is-number", - `${t("ConfirmDialog.government_facility_number")}`, - (value) => !isNaN(value) - ) - .test("positive", `${t("ConfirmDialog.government_facility_positive")}`, (value) => value >= 0) - .test("max_government", `${t("ConfirmDialog.government_facility_max_amount")}`, function (value) { - const bank_facility = this.parent.bank_facility || 0; - const max_amount = (this.parent.approved_amount || 0) - bank_facility; - return value <= max_amount; - }) - .required(t("ConfirmDialog.government_facility_error")), repayment_period: Yup.mixed().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")), - participation_period: Yup.mixed().test( - "is-number", - `${t("ConfirmDialog.participation_period_number")}`, - (value) => !isNaN(value) - ).test("positive", `${t("ConfirmDialog.participation_period_positive")}`, (value) => value >= 0) - .required(t("ConfirmDialog.participation_period_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) .required(t("ConfirmDialog.committed_employment_error")), - available_jobs: Yup.mixed().test( + existing_employment: Yup.mixed().test( "is-number", - `${t("ConfirmDialog.available_jobs_number")}`, + `${t("ConfirmDialog.existing_employment_number")}`, (value) => !isNaN(value) - ).test("positive", `${t("ConfirmDialog.available_jobs_positive")}`, (value) => value >= 0) - .required(t("ConfirmDialog.available_jobs_error")), + ).test("positive", `${t("ConfirmDialog.existing_employment_positive")}`, (value) => value >= 0) + .required(t("ConfirmDialog.existing_employment_error")), sakht_period: Yup.mixed() .test("is-number", `${t("ConfirmDialog.sakht_period_number")}`, (value) => !isNaN(value)) @@ -105,21 +71,6 @@ const ConfirmContent = ({rowId, mutate, setOpenConfirmDialog, vehicle_type}) => (value) => !isNaN(value)) .test("positive", `${t("ConfirmDialog.tanafos_period_positive")}`, (value) => value > 0) .required(t("ConfirmDialog.tanafos_period_error")), - interest_rate: Yup.mixed() - .test("is-number", `${t("ConfirmDialog.interest_rate_number")}`, - (value) => !isNaN(value)) - .test("positive", `${t("ConfirmDialog.interest_rate_positive")}`, (value) => value > 0) - .required(t("ConfirmDialog.interest_rate_error")), - confirm_img: Yup.mixed().notRequired(t("ConfirmDialog.approved_amount_error")) - .test('fileSize', `${t("PassengerBoss.upload_file_unit")}`, (value) => { - if (!value) return true - return value.size <= 5 * 1024 * 1024; - }) - .test('fileType', `${t("PassengerBoss.upload_file_format")}`, (value) => { - if (!value) return true - const allowedTypes = ['image/jpg', 'image/jpeg', 'image/png', 'application/pdf']; - return allowedTypes.includes(value.type); - }), expert_img: Yup.mixed() .required(t("PassengerBoss.upload_expert_file_required")) .test('fileSize', `${t("PassengerBoss.upload_expert_file_unit")}`, (value) => { @@ -135,50 +86,31 @@ const ConfirmContent = ({rowId, mutate, setOpenConfirmDialog, vehicle_type}) => initialValues: { description: "", approved_amount: "", - bank_facility: "0", - government_facility: "0", - user_facility: "0", + facility_bank: "", + facility_gov: "", + facility_person: "", physical_progress: "", repayment_period: "", - participation_period: "", - interest_rate: "", committed_employment: "", sakht_period: "", tanafos_period: "", - history_facilities: "0", - available_jobs: "", + existing_employment: "", expert_img: null, - confirm_img: null, }, validationSchema, onSubmit: (values, {setSubmitting}) => { const formData = new FormData(); - formData.append("approved_amount", values.approved_amount); - formData.append("bank_facility", values.bank_facility); - formData.append("government_facility", values.government_facility); - formData.append("user_facility", values.user_facility); + formData.append("approved_amount", Number(values.approved_amount) * 1000000); + formData.append("facility_bank", Number(values.facility_bank) * 1000000); + formData.append("facility_gov", Number(values.facility_gov) * 1000000); + formData.append("facility_person", Number(values.facility_person) * 1000000); formData.append("repayment_period", values.repayment_period); - formData.append("participation_period", values.participation_period); - formData.append("interest_rate", values.interest_rate); formData.append("committed_employment", values.committed_employment); - formData.append("available_jobs", values.available_jobs); + formData.append("existing_employment", values.existing_employment); formData.append("sakht_period", values.sakht_period); formData.append("tanafos_period", values.tanafos_period); - formData.append("history_facilities", values.history_facilities); if (values.description != "") formData.append("expert_description", values.description); if (values.physical_progress != "") formData.append("physical_progress", values.physical_progress); - if (values.confirm_img != null) { - const attachments = [ - { - title: "فایل ضمیمه کارتابل کارگروه", - file: values.confirm_img - } - ]; - attachments.forEach((attachment, index) => { - formData.append(`attachment[${index}][title]`, attachment.title); - formData.append(`attachment[${index}][file]`, attachment.file); - }); - } if (values.expert_img != null) { const attachments = [ { @@ -206,20 +138,6 @@ const ConfirmContent = ({rowId, mutate, setOpenConfirmDialog, vehicle_type}) => }, }); - const handleUploadChange = (event) => { - const uploadedFile = event.target?.files?.[0]; - if (uploadedFile) { - const fileType = event.target?.files?.[0].type; - const fileName = event.target?.files?.[0].name; - setSelectedImage(URL.createObjectURL(uploadedFile)); - setFileType(fileType); - setFileName(fileName); - formik.setFieldValue("confirm_img", uploadedFile).then(() => { - formik.setFieldTouched("confirm_img", true); - }) - setShowAddIcon(false); - } - }; const handleExpertFileChange = (event) => { const uploadedFile = event.target?.files?.[0]; if (uploadedFile) { @@ -237,12 +155,12 @@ const ConfirmContent = ({rowId, mutate, setOpenConfirmDialog, vehicle_type}) => const handleAmountChange = (event) => { if (!isNaN(event.target.value)) { formik.setFieldValue("approved_amount", event.target.value).then(() => { - formik.setFieldValue("user_facility", Number(event.target.value) - (Number(formik.values.bank_facility) + Number(formik.values.government_facility))) + formik.setFieldValue("facility_bank", (config.facility_bank / 100) * event.target.value) + formik.setFieldValue("facility_gov", (config.facility_gov / 100) * event.target.value) + formik.setFieldValue("facility_person", (config.facility_person / 100) * event.target.value) }) - event.target.value !== "" ? setShowFacility(true) : setShowFacility(false) } else { formik.setFieldValue("approved_amount", formik.values.approved_amount) - setShowFacility(false) } }; @@ -292,9 +210,9 @@ const ConfirmContent = ({rowId, mutate, setOpenConfirmDialog, vehicle_type}) => - {t("ConfirmDialog.bank_facility")}{t("ConfirmDialog.unit")}} + {t("ConfirmDialog.facility_bank")}{t("ConfirmDialog.unit")}} type="text" inputProps={{ inputMode: "number", @@ -302,33 +220,16 @@ const ConfirmContent = ({rowId, mutate, setOpenConfirmDialog, vehicle_type}) => pattern: "[0-9]*", }} variant="outlined" - value={formik.values.bank_facility} - onChange={(event) => { - if (!isNaN(event.target.value)) { - formik.setFieldValue("bank_facility", event.target.value).then(() => { - formik.setFieldValue("user_facility", Number(formik.values.approved_amount) - (Number(event.target.value) + Number(formik.values.government_facility))) - }) - } else { - formik.setFieldValue("bank_facility", formik.values.bank_facility) - } - }} - onBlur={formik.handleBlur("bank_facility")} - error={ - formik.touched.bank_facility && - Boolean(formik.errors.bank_facility) - } - helperText={ - formik.touched.bank_facility && formik.errors.bank_facility - } + value={formik.values.facility_bank} fullWidth - disabled={!showFacility} + disabled /> - {t("ConfirmDialog.government_facility")}{t("ConfirmDialog.unit")}} + {t("ConfirmDialog.facility_gov")}{t("ConfirmDialog.unit")}} type="text" inputProps={{ inputMode: "number", @@ -336,35 +237,18 @@ const ConfirmContent = ({rowId, mutate, setOpenConfirmDialog, vehicle_type}) => pattern: "[0-9]*", }} variant="outlined" - value={formik.values.government_facility} - onChange={(event) => { - if (!isNaN(event.target.value)) { - formik.setFieldValue("government_facility", event.target.value).then(() => { - formik.setFieldValue("user_facility", Number(formik.values.approved_amount) - (Number(formik.values.bank_facility) + Number(event.target.value))) - }) - } else { - formik.setFieldValue("government_facility", formik.values.government_facility) - } - }} - onBlur={formik.handleBlur("government_facility")} - error={ - formik.touched.government_facility && - Boolean(formik.errors.government_facility) - } - helperText={ - formik.touched.government_facility && formik.errors.government_facility - } - disabled={!showFacility} + value={formik.values.facility_gov} + disabled fullWidth /> - {t("ConfirmDialog.user_facility")}{t("ConfirmDialog.unit")}} + {t("ConfirmDialog.facility_person")}{t("ConfirmDialog.unit")}} variant="outlined" - value={formik.values.user_facility} + value={formik.values.facility_person} disabled fullWidth /> @@ -394,93 +278,28 @@ const ConfirmContent = ({rowId, mutate, setOpenConfirmDialog, vehicle_type}) => /> - { - if (isNaN(event.target.value) || event.target.value > 100) formik.setFieldValue("interest_rate", formik.values.interest_rate) - else - formik.setFieldValue("interest_rate", event.target.value) - }} - onBlur={formik.handleBlur("interest_rate")} - error={ - formik.touched.interest_rate && - Boolean(formik.errors.interest_rate) - } - helperText={ - formik.touched.interest_rate && formik.errors.interest_rate - } - fullWidth - /> - - - {t("ConfirmDialog.repayment_period")} {t("ConfirmDialog.month")}} - type="text" - inputProps={{ - inputMode: "number", - min: 0, - pattern: "[0-9]*", - }} - variant="outlined" + selectType="repayment_period" + selectors={[ + {id : 0, value : "12", name : "12 ماه"}, + {id : 1, value : "24", name : "24 ماه"}, + {id : 2, value : "36", name : "36 ماه"}, + {id : 3, value : "48", name : "48 ماه"}, + {id : 4, value : "60", name : "60 ماه"} + ]} + schema={{value: "value", name: "name"}} + select={formik.values.repayment_period} value={formik.values.repayment_period} - onChange={(event) => { - if (!isNaN(event.target.value)) { - formik.setFieldValue("repayment_period", event.target.value) - } else { - formik.setFieldValue("repayment_period", formik.values.repayment_period) - } + handleChange={(event) => { + formik.setFieldValue("repayment_period", event.target.value); }} + setFieldTouched={formik.setFieldTouched} + error={formik.touched.repayment_period && Boolean(formik.errors.repayment_period)} + helperText={formik.touched.repayment_period && formik.errors.repayment_period} onBlur={formik.handleBlur("repayment_period")} - error={ - formik.touched.repayment_period && - Boolean(formik.errors.repayment_period) - } - helperText={ - formik.touched.repayment_period && formik.errors.repayment_period - } - fullWidth - /> - - - - {t("ConfirmDialog.participation_period")} {t("ConfirmDialog.month")}} - type="text" - inputProps={{ - inputMode: "number", - min: 0, - pattern: "[0-9]*", - }} - variant="outlined" - value={formik.values.participation_period} - onChange={(event) => { - if (!isNaN(event.target.value)) { - formik.setFieldValue("participation_period", event.target.value) - } else { - formik.setFieldValue("participation_period", formik.values.participation_period) - } - }} - onBlur={formik.handleBlur("participation_period")} - error={ - formik.touched.participation_period && - Boolean(formik.errors.participation_period) - } - helperText={ - formik.touched.participation_period && formik.errors.participation_period - } - fullWidth /> @@ -605,8 +424,8 @@ const ConfirmContent = ({rowId, mutate, setOpenConfirmDialog, vehicle_type}) => pattern: "[0-9]*", }} variant="outlined" - value={formik.values.available_jobs} + value={formik.values.existing_employment} onChange={(event) => { if (!isNaN(event.target.value)) { - formik.setFieldValue("available_jobs", event.target.value) + formik.setFieldValue("existing_employment", event.target.value) } else { - formik.setFieldValue("available_jobs", formik.values.available_jobs) + formik.setFieldValue("existing_employment", formik.values.existing_employment) } }} - onBlur={formik.handleBlur("available_jobs")} + onBlur={formik.handleBlur("existing_employment")} error={ - formik.touched.available_jobs && - Boolean(formik.errors.available_jobs) + formik.touched.existing_employment && + Boolean(formik.errors.existing_employment) } helperText={ - formik.touched.available_jobs && formik.errors.available_jobs + formik.touched.existing_employment && formik.errors.existing_employment } fullWidth /> - - { - formik.setFieldValue('history_facilities', event.target.value) - }} - setFieldTouched={formik.setFieldTouched} - error={formik.touched.history_facilities && Boolean(formik.errors.history_facilities)} - helperText={formik.touched.history_facilities && formik.errors.history_facilities} - onBlur={formik.handleBlur("history_facilities")} - /> - {t("PassengerBoss.upload_expert_img")} {formik.touched.expert_img && formik.errors.expert_img} - - {t("PassengerBoss.upload_file")} - - - {formik.touched.confirm_img && formik.errors.confirm_img} - - diff --git a/src/components/dashboard/passenger-office/Buttons/printExcel.jsx b/src/components/dashboard/passenger-office/Buttons/printExcel.jsx deleted file mode 100644 index c78075a..0000000 --- a/src/components/dashboard/passenger-office/Buttons/printExcel.jsx +++ /dev/null @@ -1,68 +0,0 @@ -import {Button, CircularProgress} from "@mui/material"; -import {useTranslations} from "next-intl"; -import {useMemo, useState} from "react"; -import useRequest from "@/lib/app/hooks/useRequest"; -import {EXPORT_PASSENGER_OFFICE} from "@/core/data/apiRoutes"; -import moment from "jalali-moment"; -import FileSaver from 'file-saver'; -import DescriptionIcon from '@mui/icons-material/Description'; - -const PrintExcel = ({table}) => { - const t = useTranslations(); - const [loading, setLoading] = useState(false) - const requestServer = useRequest({auth: true, pending: false, success: {notification: {show: false}}}) - const {columnFilters, columnFilterFns, sorting} = table.getState() - const columns = table.getAllColumns() - - const filterParams = useMemo(() => { - const params = new URLSearchParams(); - const filters = columnFilters.map((filter) => { - let datatype; - for (const i in columns) { - if (columns[i].id == filter.id) { - datatype = columns[i].columnDef.datatype; - } - } - return { - ...filter, fn: columnFilterFns[filter.id], datatype: datatype, - }; - }); - params.set("start", '0'); - params.set("filters", JSON.stringify(filters ?? [])); - params.set("sorting", JSON.stringify(sorting ?? [])); - return params; - }, [columnFilters, columnFilterFns, sorting, columns,]); - - - const clickHandler = () => { - setLoading(true) - requestServer(`${EXPORT_PASSENGER_OFFICE}?${filterParams}`, 'get', { - auth: true, - notification: false, - requestOptions: {responseType: 'blob'} - }).then((response) => { - const filename = `گزارش اداره مسافر تاریخ_${moment().format('jYYYY_jMM_jDD')}.xlsx`; - FileSaver.saveAs(response.data, filename); - }).catch(() => { - }).finally(() => { - setLoading(false) - }) - } - - - return ( - - ) -} - -export default PrintExcel \ No newline at end of file diff --git a/src/components/dashboard/passenger-office/Form/ConfirmForm/ConfirmContent.jsx b/src/components/dashboard/passenger-office/Form/ConfirmForm/ConfirmContent.jsx deleted file mode 100644 index 846291b..0000000 --- a/src/components/dashboard/passenger-office/Form/ConfirmForm/ConfirmContent.jsx +++ /dev/null @@ -1,135 +0,0 @@ -import UploadSystem from "@/core/components/UploadSystem"; -import useNotification from "@/lib/app/hooks/useNotification"; -import useRequest from "@/lib/app/hooks/useRequest"; -import {Button, DialogActions, DialogContent, FormHelperText, Stack, TextField, Typography} from "@mui/material" -import {useFormik} from "formik"; -import {useTranslations} from "next-intl"; -import {CONFIRM_PASSENGER_OFFICE} from "@/core/data/apiRoutes"; -import {useState} from "react"; -import * as Yup from "yup"; - -const ConfirmContent = ({rowId, mutate, setOpenConfirmDialog}) => { - const t = useTranslations(); - const [selectedImage, setSelectedImage] = useState(""); - const [fileType, setfileType] = useState(null); - const [fileName, setfileName] = useState(null); - const [showAddIcon, setShowAddIcon] = useState(true); - const requestServer = useRequest({auth: true}) - const {update_notification} = useNotification() - - const validationSchema = Yup.object().shape({ - confirm_img: Yup.mixed().notRequired(t("ConfirmDialog.approved_amount_error")) - .test('fileSize', `${t("PassengerOffice.upload_file_unit")}`, (value) => { - if (!value) return true - return value.size <= 5 * 1024 * 1024; - }) - .test('fileType', `${t("PassengerOffice.upload_file_format")}`, (value) => { - if (!value) return true - const allowedTypes = ['image/jpg', 'image/jpeg', 'image/png', 'application/pdf']; // Define your allowed file types - return allowedTypes.includes(value.type); - }) - }) - - const formik = useFormik({ - initialValues: { - description: "", - confirm_img: null - }, validationSchema, - onSubmit: (values, {setSubmitting}) => { - const formData = new FormData(); - if (values.description != "") formData.append("description", values.description); - if (values.confirm_img != null) formData.append("attachment", values.confirm_img); - - requestServer(`${CONFIRM_PASSENGER_OFFICE}/${rowId}`, 'post', { - data: formData, - }).then((response) => { - setOpenConfirmDialog(false) - mutate() - update_notification() - }).catch(() => { - }).finally(() => { - setSubmitting(false); - }); - }, - }); - - const handleDescriptionChange = (event) => { - formik.setFieldValue("description", event.target.value) - }; - - const handleUploadChange = (event) => { - const uploadedFile = event.target?.files?.[0]; - if (uploadedFile) { - const fileType = event.target?.files?.[0].type; - const fileName = event.target?.files?.[0].name; - setSelectedImage(URL.createObjectURL(uploadedFile)); - setfileType(fileType); - setfileName(fileName); - formik.setFieldValue("confirm_img", uploadedFile).then(() => { - formik.setFieldTouched("confirm_img", true); - }) - setShowAddIcon(false); - } - }; - - return ( - <> - - - - - {t("ConfirmDialog.description")}{t("ConfirmDialog.optional")}} - value={formik.values.description} - onChange={handleDescriptionChange} - fullWidth - variant="outlined" - sx={{mt: 1}} - /> - - - {t("UploadSystem.upload_file")}{t("UploadSystem.optional")} - formik.handleBlur("confirm_img")} - error={ - formik.touched.confirm_img && - Boolean(formik.errors.confirm_img) - } - /> - - {formik.touched.confirm_img && formik.errors.confirm_img} - - - - - - - - - - ) - -} -export default ConfirmContent \ No newline at end of file diff --git a/src/components/dashboard/passenger-office/Form/ConfirmForm/index.jsx b/src/components/dashboard/passenger-office/Form/ConfirmForm/index.jsx deleted file mode 100644 index fa47fcf..0000000 --- a/src/components/dashboard/passenger-office/Form/ConfirmForm/index.jsx +++ /dev/null @@ -1,30 +0,0 @@ -import {Dialog, DialogTitle, IconButton, Tooltip} from "@mui/material"; -import {useTranslations} from "next-intl"; -import {useState} from "react"; -import ConfirmContent from "./ConfirmContent"; -import CallMadeIcon from '@mui/icons-material/CallMade'; -const Confirm = ({rowId, mutate}) => { - const t = useTranslations(); - const [openConfirmDialog, setOpenConfirmDialog] = useState(false); - return ( - <> - - { - setOpenConfirmDialog(true) - }} - > - - - - - {t("PassengerOffice.confirm")} - - - - ) - -} -export default Confirm; \ No newline at end of file diff --git a/src/components/dashboard/passenger-office/Form/RejectForm/RejectContent.jsx b/src/components/dashboard/passenger-office/Form/RejectForm/RejectContent.jsx deleted file mode 100644 index 2a8a82d..0000000 --- a/src/components/dashboard/passenger-office/Form/RejectForm/RejectContent.jsx +++ /dev/null @@ -1,123 +0,0 @@ -import UploadSystem from "@/core/components/UploadSystem" -import useNotification from "@/lib/app/hooks/useNotification"; -import useRequest from "@/lib/app/hooks/useRequest"; -import {Button, DialogActions, DialogContent, Stack, TextField, Typography} from "@mui/material" -import {useFormik} from "formik"; -import {useTranslations} from "next-intl"; -import {useState} from "react"; -import * as Yup from "yup"; -import {REJECT_PASSENGER_OFFICE} from "@/core/data/apiRoutes"; - -const RejectContent = ({rowId, mutate, setOpenRejectDialog}) => { - const [selectedImage, setSelectedImage] = useState(""); - const [fileType, setfileType] = useState(null); - const [fileName, setfileName] = useState(null); - const [showAddIcon, setShowAddIcon] = useState(true); - const t = useTranslations(); - const requestServer = useRequest({auth: true}) - const {update_notification} = useNotification() - - const validationSchema = Yup.object().shape({ - description: Yup.string().required(t("RejectDialog.description_error")), - }); - - const formik = useFormik({ - initialValues: { - description: "", - reject_img: null - }, - validationSchema, - onSubmit: (values, {setSubmitting}) => { - const formData = new FormData(); - formData.append("expert_description", values.description); - if (values.reject_img != null) formData.append("attachment", values.reject_img); - - requestServer(`${REJECT_PASSENGER_OFFICE}/${rowId}`, 'post', { - data: formData, - }).then((response) => { - setOpenRejectDialog(false) - mutate() - update_notification() - }).catch(() => { - }).finally(() => { - setSubmitting(false); - }); - }, - }); - - const handleDescriptionChange = (event) => { - formik.setFieldValue("description", event.target.value); - formik.handleChange(event); - }; - const handleUploadChange = (event) => { - const uploadedFile = event.target?.files?.[0]; - if (uploadedFile) { - const maxFileSize = 2 * 1024 * 1024; - if (uploadedFile.size > maxFileSize) { - UploadFileNotification(t); - event.target.value = ""; - return; - } - const fileType = event.target?.files?.[0].type; - const fileName = event.target?.files?.[0].name; - setSelectedImage(URL.createObjectURL(uploadedFile)); - setfileType(fileType); - setfileName(fileName); - formik.setFieldValue("reject_img", uploadedFile); - setShowAddIcon(false); - } - }; - return ( - <> - - - - - - - {t("UploadSystem.upload_file")}{t("UploadSystem.optional")} - - - - - - - - - - ) -} -export default RejectContent \ No newline at end of file diff --git a/src/components/dashboard/passenger-office/Form/RejectForm/index.jsx b/src/components/dashboard/passenger-office/Form/RejectForm/index.jsx deleted file mode 100644 index 06608f5..0000000 --- a/src/components/dashboard/passenger-office/Form/RejectForm/index.jsx +++ /dev/null @@ -1,25 +0,0 @@ -import {Dialog, DialogTitle, IconButton, Tooltip} from "@mui/material" -import {useTranslations} from "next-intl"; -import {useState} from "react"; -import RejectContent from "./RejectContent"; -import ThumbDownIcon from "@mui/icons-material/ThumbDown"; - -const Reject = ({rowId, mutate}) => { - const t = useTranslations(); - const [openRejectDialog, setOpenRejectDialog] = useState(false); - return ( - <> - - setOpenRejectDialog(true)}> - - - - - {t("RejectDialog.reject")} - - - - ) -} -export default Reject \ No newline at end of file diff --git a/src/components/dashboard/passenger-office/TableRowActions.jsx b/src/components/dashboard/passenger-office/TableRowActions.jsx deleted file mode 100644 index 985dd67..0000000 --- a/src/components/dashboard/passenger-office/TableRowActions.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import {Box} from "@mui/material"; -import Confirm from "./Form/ConfirmForm"; -import Reject from "./Form/RejectForm"; - -const TableRow = ({row, mutate, fetchUrl}) => { - - return ( - - - - - ); -}; - -export default TableRow; diff --git a/src/components/dashboard/passenger-office/TableToolbar.jsx b/src/components/dashboard/passenger-office/TableToolbar.jsx deleted file mode 100644 index 23f3c20..0000000 --- a/src/components/dashboard/passenger-office/TableToolbar.jsx +++ /dev/null @@ -1,13 +0,0 @@ -import {Stack} from "@mui/material"; -import PrintExcel from "@/components/dashboard/passenger-office/Buttons/printExcel"; - -const TableToolbar = ({table}) => { - - return ( - - - - ) -} - -export default TableToolbar \ No newline at end of file diff --git a/src/components/dashboard/passenger-office/index.jsx b/src/components/dashboard/passenger-office/index.jsx deleted file mode 100644 index 1e4f705..0000000 --- a/src/components/dashboard/passenger-office/index.jsx +++ /dev/null @@ -1,186 +0,0 @@ -import {Box, Typography} from "@mui/material"; -import {useMemo} from "react"; -import {GET_PASSENGER_OFFICE} from "@/core/data/apiRoutes"; -import {useTranslations} from "next-intl"; -import TableRowActions from "./TableRowActions"; -import moment from "jalali-moment"; -import DataTable from "@/core/components/DataTable"; -import MuiDatePicker from "@/core/components/MuiDatePicker"; -import TableToolbar from "@/components/dashboard/passenger-office/TableToolbar"; - -function DashboardPassengerOfficeComponent() { - const t = useTranslations(); - - const columns = useMemo( - () => [ - { - accessorFn: (row) => row.id, - id: "id", - header: t("PassengerOffice.id"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.name, - id: "name", - header: t("PassengerOffice.name"), - enableColumnFilter: true, - datatype: "text", - filterFn: "contains", - columnFilterModeOptions: ["contains", "equals", "notEquals"], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.national_id, - id: "national_id", - header: t("PassengerOffice.national_id"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.phone_number, - id: "phone_number", - header: t("PassengerOffice.phone_number"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => - moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"), - id: "created_at", - header: t("PassengerOffice.created_at"), - enableColumnFilter: true, - datatype: "date", - filterFn: "lessThan", - columnFilterModeOptions: ["lessThan", "greaterThan"], - Cell: ({renderedCellValue}) => { - return {renderedCellValue}; - }, - Header: ({column}) => <>{column.columnDef.header}, - Filter: ({column}) => { - return ( - - ); - }, - }, - { - accessorFn: (row) => - moment(row.updated_at).locale("fa").format("HH:mm | YYYY/MM/DD"), - id: "updated_at", - header: t("PassengerOffice.updated_at"), - enableColumnFilter: false, - datatype: "numeric", - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.navgan_id, - id: "navgan_id", - header: t("PassengerOffice.navgan_id"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.vehicle_type, - id: "vehicle_type", - header: t("PassengerOffice.vehicle_type"), - enableColumnFilter: true, - datatype: "text", - filterFn: "contains", - columnFilterModeOptions: ["contains", "equals", "notEquals"], - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - { - accessorFn: (row) => row.state_name, - id: "state_id", - header: t("PassengerOffice.state_name"), - enableColumnFilter: false, - datatype: "numeric", - Cell: ({renderedCellValue}) => ( - {renderedCellValue} - ), - }, - ], - [] - ); - return ( - - - - ); -} - -export default DashboardPassengerOfficeComponent; diff --git a/src/components/dashboard/reserve-loan/index.jsx b/src/components/dashboard/reserve-loan/index.jsx index 06095b5..36e6a32 100644 --- a/src/components/dashboard/reserve-loan/index.jsx +++ b/src/components/dashboard/reserve-loan/index.jsx @@ -15,7 +15,7 @@ function DashboardReserveLoan() { { accessorFn: (row) => row.id, id: "id", - header: t("MachinaryOffice.id"), + header: t("ReserveLoan.id"), enableColumnFilter: true, datatype: "numeric", filterFn: "equals", @@ -34,7 +34,7 @@ function DashboardReserveLoan() { { accessorFn: (row) => row.score, id: "score", - header: t("MachinaryOffice.score"), + header: t("ReserveLoan.score"), enableColumnFilter: true, datatype: "numeric", filterFn: "equals", @@ -53,20 +53,20 @@ function DashboardReserveLoan() { { accessorFn: (row) => row.is_legal_person, id: "is_legal_person", - header: t("MachinaryOffice.is_legal_person"), + header: t("ReserveLoan.is_legal_person"), enableColumnFilter: false, datatype: "numeric", filterFn: "equals", columnFilterModeOptions: ["equals"], Cell: ({renderedCellValue}) => ( {renderedCellValue === 1 ? `${t("MachinaryOffice.hoghoghi")}` : `${t("MachinaryOffice.haghighi")}`} + variant="body2">{renderedCellValue === 1 ? `${t("ReserveLoan.hoghoghi")}` : `${t("ReserveLoan.haghighi")}`} ), }, { accessorFn: (row) => row.navgan_id, id: "navgan_id", - header: t("MachinaryOffice.navgan_id"), + header: t("ReserveLoan.navgan_id"), enableColumnFilter: true, datatype: "numeric", filterFn: "equals", @@ -85,7 +85,7 @@ function DashboardReserveLoan() { { accessorFn: (row) => row.name, id: "name", - header: t("MachinaryOffice.name"), + header: t("ReserveLoan.name"), enableColumnFilter: true, datatype: "text", filterFn: "contains", @@ -97,7 +97,7 @@ function DashboardReserveLoan() { { accessorFn: (row) => row.national_id, id: "national_id", - header: t("MachinaryOffice.national_id"), + header: t("ReserveLoan.national_id"), enableColumnFilter: true, datatype: "numeric", filterFn: "equals", @@ -116,7 +116,7 @@ function DashboardReserveLoan() { { accessorFn: (row) => row.shenase_meli, id: "shenase_meli", - header: t("MachinaryOffice.shenase_meli"), + header: t("ReserveLoan.shenase_meli"), enableColumnFilter: true, datatype: "numeric", filterFn: "equals", @@ -135,7 +135,7 @@ function DashboardReserveLoan() { { accessorFn: (row) => row.province_name, id: "province_name", - header: t("MachinaryOffice.province_name"), + header: t("ReserveLoan.province_name"), enableColumnFilter: true, datatype: "text", filterFn: "contains", @@ -147,7 +147,7 @@ function DashboardReserveLoan() { { accessorFn: (row) => row.city_name, id: "city_name", - header: t("MachinaryOffice.city_name"), + header: t("ReserveLoan.city_name"), enableColumnFilter: true, datatype: "text", filterFn: "contains", @@ -160,7 +160,7 @@ function DashboardReserveLoan() { accessorFn: (row) => moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"), id: "created_at", - header: t("MachinaryOffice.created_at"), + header: t("ReserveLoan.created_at"), enableColumnFilter: true, datatype: "date", filterFn: "lessThan", @@ -178,7 +178,7 @@ function DashboardReserveLoan() { { accessorFn: (row) => row.phone_number, id: "phone_number", - header: t("MachinaryOffice.phone_number"), + header: t("ReserveLoan.phone_number"), enableColumnFilter: true, datatype: "numeric", filterFn: "equals", @@ -197,7 +197,7 @@ function DashboardReserveLoan() { { accessorFn: (row) => row.statement_count, id: "statement_count", - header: t("MachinaryOffice.statement_count"), + header: t("ReserveLoan.statement_count"), enableColumnFilter: true, datatype: "numeric", filterFn: "equals", @@ -211,7 +211,7 @@ function DashboardReserveLoan() { { accessorFn: (row) => row.navgan_capacity, id: "navgan_capacity", - header: t("MachinaryOffice.navgan_capacity"), + header: t("ReserveLoan.navgan_capacity"), enableColumnFilter: true, datatype: "numeric", filterFn: "equals", @@ -230,7 +230,7 @@ function DashboardReserveLoan() { { accessorFn: (row) => row.manufacture_date, id: "manufacture_date", - header: t("MachinaryOffice.manufacture_date"), + header: t("ReserveLoan.manufacture_date"), enableColumnFilter: true, datatype: "numeric", filterFn: "equals", @@ -249,7 +249,7 @@ function DashboardReserveLoan() { { accessorFn: (row) => row.vehicle_type, id: "vehicle_type", - header: t("MachinaryOffice.vehicle_type"), + header: t("ReserveLoan.vehicle_type"), enableColumnFilter: true, datatype: "text", filterFn: "contains", @@ -261,7 +261,7 @@ function DashboardReserveLoan() { { accessorFn: (row) => row.plate_number, id: "plate_number", - header: t("MachinaryOffice.plate_number"), + header: t("ReserveLoan.plate_number"), enableColumnFilter: false, datatype: "text", filterFn: "contains", @@ -288,10 +288,190 @@ function DashboardReserveLoan() { ), }, + { + accessorFn: (row) => row.approved_amount, + id: "approved_amount", + header: t("ReserveLoan.approved_amount"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.facility_bank, + id: "facility_bank", + header: t("ReserveLoan.facility_bank"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.facility_gov, + id: "facility_gov", + header: t("ReserveLoan.facility_gov"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.facility_person, + id: "facility_person", + header: t("ReserveLoan.facility_person"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.physical_progress, + id: "physical_progress", + header: t("ReserveLoan.physical_progress"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.repayment_period, + id: "repayment_period", + header: t("ReserveLoan.repayment_period"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.sakht_period, + id: "sakht_period", + header: t("ReserveLoan.sakht_period"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals" + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.tanafos_period, + id: "tanafos_period", + header: t("ReserveLoan.tanafos_period"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals" + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.committed_employment, + id: "committed_employment", + header: t("ReserveLoan.committed_employment"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.existing_employment, + id: "existing_employment", + header: t("ReserveLoan.existing_employment"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, { accessorFn: (row) => row.state_name, id: "state_id", - header: t("MachinaryOffice.state_name"), + header: t("ReserveLoan.state_name"), enableColumnFilter: false, datatype: "numeric", Cell: ({renderedCellValue}) => ( diff --git a/src/components/dashboard/transportation-assistance/Form/ConfirmForm/ConfirmContent.jsx b/src/components/dashboard/transportation-assistance/Form/ConfirmForm/ConfirmContent.jsx index 427d3a3..c3b04b4 100644 --- a/src/components/dashboard/transportation-assistance/Form/ConfirmForm/ConfirmContent.jsx +++ b/src/components/dashboard/transportation-assistance/Form/ConfirmForm/ConfirmContent.jsx @@ -180,13 +180,23 @@ const ConfirmContent = ({rowId, mutate, setOpenConfirmDialog, handleSizeChangeCl {loading ? : <> + + + {renderCustomAccordions()} } diff --git a/src/components/dashboard/transportation-assistance/index.jsx b/src/components/dashboard/transportation-assistance/index.jsx index 2890c68..2d00fe8 100644 --- a/src/components/dashboard/transportation-assistance/index.jsx +++ b/src/components/dashboard/transportation-assistance/index.jsx @@ -232,25 +232,6 @@ function DashboardTransportationAssistanceComponent() { ), }, - { - accessorFn: (row) => row.proposed_amount, - id: "proposed_amount", - header: t("TransportationAssistance.proposed_amount"), - enableColumnFilter: true, - datatype: "numeric", - filterFn: "equals", - columnFilterModeOptions: [ - "equals", - "notEquals", - "contains", - "lessThan", - "greaterThan", - "between", - ], - Cell: ({renderedCellValue}) => ( - {renderedCellValue / 1000000} - ), - }, { accessorFn: (row) => row.approved_amount, id: "approved_amount", @@ -270,6 +251,101 @@ function DashboardTransportationAssistanceComponent() { {renderedCellValue / 1000000} ), }, + { + accessorFn: (row) => row.facility_bank, + id: "facility_bank", + header: t("TransportationAssistance.facility_bank"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.facility_gov, + id: "facility_gov", + header: t("TransportationAssistance.facility_gov"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.facility_person, + id: "facility_person", + header: t("TransportationAssistance.facility_person"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue / 1000000} + ), + }, + { + accessorFn: (row) => row.physical_progress, + id: "physical_progress", + header: t("TransportationAssistance.physical_progress"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.repayment_period, + id: "repayment_period", + header: t("TransportationAssistance.repayment_period"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, { accessorFn: (row) => row.sakht_period, id: "sakht_period", @@ -298,6 +374,44 @@ function DashboardTransportationAssistanceComponent() { {renderedCellValue} ), }, + { + accessorFn: (row) => row.committed_employment, + id: "committed_employment", + header: t("TransportationAssistance.committed_employment"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.existing_employment, + id: "existing_employment", + header: t("TransportationAssistance.existing_employment"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, { accessorFn: (row) => row.state_name, id: "state_id", diff --git a/src/core/components/NumberShowBox.jsx b/src/core/components/NumberShowBox.jsx index b8e45b1..264a7f4 100644 --- a/src/core/components/NumberShowBox.jsx +++ b/src/core/components/NumberShowBox.jsx @@ -8,7 +8,7 @@ const NumberShowBox = ({showNumber, headerTitle, unitTitle}) => { sx={{color: "primary.main", fontWeight: 500}}>{headerTitle} {isNaN(showNumber) || showNumber === null - ? "" + ? "0" : (showNumber).toLocaleString()}{" "} {unitTitle} diff --git a/src/core/data/sidebarMenu.jsx b/src/core/data/sidebarMenu.jsx index c9b10f1..646a82e 100644 --- a/src/core/data/sidebarMenu.jsx +++ b/src/core/data/sidebarMenu.jsx @@ -1,6 +1,4 @@ import SpaceDashboardIcon from "@mui/icons-material/SpaceDashboard"; -import DirectionsCarFilledIcon from "@mui/icons-material/DirectionsCarFilled"; -import AirlineSeatReclineNormalIcon from "@mui/icons-material/AirlineSeatReclineNormal"; import DirectionsRailwayIcon from "@mui/icons-material/DirectionsRailway"; import AssignmentIndIcon from "@mui/icons-material/AssignmentInd"; import DesktopWindowsIcon from "@mui/icons-material/DesktopWindows"; @@ -48,26 +46,6 @@ const sidebarMenu = [ permissions: ["view_navgan_loans", "view_navgan_loans_province"], }, ], [ - { - key: "sidebar.passenger-office-chief", - secondary: "secondary.navgan-province-manager", - name: "passenger_office_chief", - type: "page", - route: "/dashboard/passenger-office-chief", - icon: , - selected: false, - permissions: ["manage_passenger_office_navgan"], - }, - { - key: "sidebar.machinery-expert", - secondary: "secondary.navgan-province-manager", - name: "machinery_expert", - type: "page", - route: "/dashboard/machinery-expert", - icon: , - selected: false, - permissions: ["manage_machinery_navgan"], - }, { key: "sidebar.reserve-loan", secondary: "secondary.navgan-province-manager", diff --git a/src/pages/dashboard/machinery-expert/index.jsx b/src/pages/dashboard/machinery-expert/index.jsx deleted file mode 100644 index df23f2e..0000000 --- a/src/pages/dashboard/machinery-expert/index.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import DashboardMachineryOfficeComponent from "@/components/dashboard/machinary-office"; -import {parse} from "next-useragent"; - -export default function PassengerOffice() { - return ( - - ); -} - -export async function getServerSideProps({req, locale}) { - const {isBot} = parse(req.headers["user-agent"]); - return { - props: { - messages: (await import(`&/locales/${locale}/app.json`)).default, - title: "Dashboard.machinary_office_page", - isBot, - locale, - layout: {name: 'DashboardLayout', props: {permissions: ["manage_machinery_navgan"]}} - }, - }; -} diff --git a/src/pages/dashboard/machinery-expert/prints/report.jsx b/src/pages/dashboard/machinery-expert/prints/report.jsx deleted file mode 100644 index 526851b..0000000 --- a/src/pages/dashboard/machinery-expert/prints/report.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import {parse} from "next-useragent"; -import ReportComponent from "@/components/dashboard/machinary-office/Prints/report"; - -export default function Report() { - return ( - - ) -} - -export async function getServerSideProps({req, locale}) { - const {isBot} = parse(req.headers["user-agent"]); - return { - props: { - messages: (await import(`&/locales/${locale}/app.json`)).default, - title: "Dashboard.machinary_office_page", - isBot, - locale, - layout: {name: 'PrintLayout'} - }, - }; -} \ No newline at end of file diff --git a/src/pages/dashboard/passenger-office-chief/index.jsx b/src/pages/dashboard/passenger-office-chief/index.jsx deleted file mode 100644 index 5ca084e..0000000 --- a/src/pages/dashboard/passenger-office-chief/index.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import DashboardPassengerOfficeComponent from "@/components/dashboard/passenger-office"; -import {parse} from "next-useragent"; - -export default function PassengerOffice() { - return ( - - ); -} - -export async function getServerSideProps({req, locale}) { - const {isBot} = parse(req.headers["user-agent"]); - return { - props: { - messages: (await import(`&/locales/${locale}/app.json`)).default, - title: "Dashboard.passenger_office_page", - isBot, - locale, - layout: {name: 'DashboardLayout', props: {permissions: ["manage_passenger_office_navgan"]}} - }, - }; -}