From a2a90b1184f75b76d4c19b0b27eb9a47a91a8980 Mon Sep 17 00:00:00 2001 From: Dilmurod Date: Wed, 3 Sep 2025 19:01:22 +0500 Subject: [PATCH] shify ,cycle , co-driver (date and time) --- package.json | 1 + src/Components/Accounting/AccountingLast.tsx | 1 + .../ShiftInfo/ShiftAndCoDriverCreateModal.tsx | 145 +++++++++++------- .../ShiftInfo/ShiftAndCoDriverEditModal.tsx | 120 +++++++-------- .../Tasks/ShiftInfo/ShiftDataTab.tsx | 20 +-- src/Components/Tasks/TaskModal.tsx | 38 ++--- src/Components/Tasks/TaskTable.tsx | 53 ++++--- yarn.lock | 5 + 8 files changed, 204 insertions(+), 179 deletions(-) diff --git a/package.json b/package.json index 1e58400..4fd7e3b 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "lodash": "^4.17.21", "moment-timezone": "^0.5.43", "react": "^18.2.0", + "react-country-flag": "^3.1.0", "react-dom": "^18.2.0", "react-final-form": "^6.5.9", "react-icons": "^4.11.0", diff --git a/src/Components/Accounting/AccountingLast.tsx b/src/Components/Accounting/AccountingLast.tsx index 22fbde9..fa91fd3 100644 --- a/src/Components/Accounting/AccountingLast.tsx +++ b/src/Components/Accounting/AccountingLast.tsx @@ -638,6 +638,7 @@ const AccountingCurrent: React.FC = () => { placeholder="Team" onChange={(value: any) => setTeam(value)} options={teamOptions} + allowClear /> - + { setNeedsPickUp(checked); if (!checked) { - form.resetFields(["pickup_date", "cycle_location"]); + form.resetFields([ + "pickup_date", + "pickup_location", + "pickup_time", + ]); } }} /> @@ -109,21 +98,30 @@ const ShiftAndCoDriverCreateModal: React.FC< {needsPickUp && ( <> - - - + + + + + + + + + + + + @@ -133,7 +131,7 @@ const ShiftAndCoDriverCreateModal: React.FC< {/* DRIVER INFO */} - + { @@ -143,8 +141,10 @@ const ShiftAndCoDriverCreateModal: React.FC< "driver_name", "co_driver_name", "co_driver_pickup_date", + "co_driver_pickup_time", "co_driver_pickup_location", "co_driver_drop_date", + "co_driver_drop_time", "co_driver_drop_location", ]); } @@ -154,26 +154,45 @@ const ShiftAndCoDriverCreateModal: React.FC< {needsDriver && ( <> - + - - - - - + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + = ({ useEffect(() => { if (recordTask) { form.setFieldsValue({ - shift_date: recordTask.shift_date ? dayjs(recordTask.shift_date) : null, + shift_date: recordTask.shift_date, shift_location: recordTask.shift_location, - cycle_date: recordTask.cycle_date ? dayjs(recordTask.cycle_date) : null, + cycle_date: recordTask.cycle_date, cycle_location: recordTask.cycle_location, - pickup_date: recordTask.pickup_date - ? dayjs(recordTask.pickup_date) - : null, + pickup_date: recordTask.pickup_date, + pickup_time: recordTask.pickup_time, pickup_location: recordTask.pickup_location, driver_name: recordTask.driver_name, co_driver_name: recordTask.co_driver_name, + co_driver_pickup_date: recordTask.co_driver_pickup_date, + co_driver_pickup_time: recordTask.co_driver_pickup_time, co_driver_pickup_location: recordTask.co_driver_pickup_location, - co_driver_pickup_date: recordTask.co_driver_pickup_date - ? dayjs(recordTask.co_driver_pickup_date) - : null, - co_driver_drop_date: recordTask.co_driver_drop_date - ? dayjs(recordTask.co_driver_drop_date) - : null, + co_driver_drop_date: recordTask.co_driver_drop_date, + co_driver_drop_time: recordTask.co_driver_drop_time, co_driver_drop_location: recordTask.co_driver_drop_location, }); } @@ -47,22 +44,7 @@ const ShiftAndCoDriverEditModal: React.FC = ({ const handleOk = async () => { try { const values = await form.validateFields(); - // Date fieldlarni string formatga o'tkazib yuboramiz - const formattedValues = { - ...values, - shift_date: values.shift_date ? values.shift_date.toISOString() : null, - pickup_date: values.pickup_date - ? values.pickup_date.toISOString() - : null, - cycle_date: values.cycle_date ? values.cycle_date.toISOString() : null, - co_driver_pickup_date: values.co_driver_pickup_date - ? values.co_driver_pickup_date.toISOString() - : null, - co_driver_drop_date: values.co_driver_drop_date - ? values.co_driver_drop_date.toISOString() - : null, - }; - taskController.taskPatch(formattedValues, recordTask.id); + taskController.taskPatch(values, recordTask.id); onCancel(); form.resetFields(); } catch (error) { @@ -83,11 +65,7 @@ const ShiftAndCoDriverEditModal: React.FC = ({
{/* shift */} - + @@ -97,11 +75,7 @@ const ShiftAndCoDriverEditModal: React.FC = ({ {/* cycle */} - + @@ -110,15 +84,20 @@ const ShiftAndCoDriverEditModal: React.FC = ({ {/* pick up */} - - - - - + + + + + + + + + + + + + + @@ -132,13 +111,24 @@ const ShiftAndCoDriverEditModal: React.FC = ({ - - - + + + + + + + + + + + + = ({ - - - + + + + + + + + + + + + + = ({ recordTask }) => { const [isModalOpen, setIsModalOpen] = useState(false); - const formatDateTime = (date?: string) => - date ? dayjs(date).format("MM-DD-YYYY hh:mm:ss A") : null; - - const displayValue = (val?: string | null) => val ?? "—"; - const shiftInfo = { - pickUpDate: formatDateTime(recordTask?.pickup_date), + pickUpDate: recordTask?.pickup_date, pickUpLocation: recordTask?.pickup_location ?? null, - shiftDate: formatDateTime(recordTask?.shift_date), + shiftDate: recordTask?.shift_date, shiftLocation: recordTask?.shift_location ?? null, - cycleDate: formatDateTime(recordTask?.cycle_date), + cycleDate: recordTask?.cycle_date, cycleLocation: recordTask?.cycle_location ?? null, }; @@ -29,9 +23,9 @@ const ShiftDataTab: React.FC = ({ recordTask }) => { driverName: recordTask?.driver_name ?? null, coDriverName: recordTask?.co_driver_name ?? null, coDriverPickUpLocation: recordTask?.co_driver_pickup_location ?? null, - coDriverPickUpDate: formatDateTime(recordTask?.co_driver_pickup_date), + coDriverPickUpDate: recordTask?.co_driver_pickup_date, coDriverDropLocation: recordTask?.co_driver_drop_location ?? null, - coDriverDropDate: formatDateTime(recordTask?.co_driver_drop_date), + coDriverDropDate: recordTask?.co_driver_drop_date, }; const buildTextBlock = (title: string, items: [string, string | null][]) => { @@ -75,7 +69,7 @@ const ShiftDataTab: React.FC = ({ recordTask }) => { ["Дата сайкла", shiftInfo.cycleDate], ["Место сайкла", shiftInfo.cycleLocation], ]), - buildTextBlock("ИНФОРМАЦИЯ О СО-ВОДИТЕЛЕ", [ + buildTextBlock("ИНФОРМАЦИЯ О КО-ДРАЙВЕРЕ", [ ["Имя драйвера", coDriverInfo.driverName], ["Имя ко-драйвера", coDriverInfo.coDriverName], ["Время пикапа ко-драйвера", coDriverInfo.coDriverPickUpDate], @@ -154,7 +148,7 @@ const ShiftDataTab: React.FC = ({ recordTask }) => {

Дата пикапа: {shiftInfo.pickUpDate}

Место пикапа: {shiftInfo.pickUpLocation}

-

ИНФОРМАЦИЯ О СО-ВОДИТЕЛЕ

+

ИНФОРМАЦИЯ О КО-ДРАЙВЕРЕ

Имя драйвера: {coDriverInfo.driverName}

Имя ко-драйвера: {coDriverInfo.coDriverName}

Место пикапа ко-драйвера: {coDriverInfo.coDriverPickUpLocation}

diff --git a/src/Components/Tasks/TaskModal.tsx b/src/Components/Tasks/TaskModal.tsx index de6b9f7..4eb4338 100644 --- a/src/Components/Tasks/TaskModal.tsx +++ b/src/Components/Tasks/TaskModal.tsx @@ -19,52 +19,40 @@ import { useTeamData } from "../../Hooks/Teams"; import { TTeam } from "../../types/Team/TTeam"; import { ArrowRightOutlined, - CaretRightOutlined, CloseOutlined, - CopyOutlined, DatabaseOutlined, EditOutlined, - ForwardOutlined, - RotateRightOutlined, UploadOutlined, } from "@ant-design/icons"; import ShiftAndCoDriverCreateModal from "./ShiftInfo/ShiftAndCoDriverCreateModal"; import { TSocket } from "../../types/common/TSocket"; -// @ts-ignore -import closeIcon from "../../assets/closeIcon.png"; -// @ts-ignore -import editIcon from "../../assets/editIcon.png"; -// @ts-ignore + import historyIcon from "../../assets/hisoryIcon.png"; -// @ts-ignore + import attachmentIcon from "../../assets/attachmentIcon.png"; -// @ts-ignore + import infoIcon from "../../assets/infoIcon.png"; -// @ts-ignore -import uploadIcon from "../../assets/uploadIcon.png"; -// @ts-ignore + import pdficon from "../../assets/pdficon.png"; -// @ts-ignore + import letssee from "../../assets/letssee.png"; -// @ts-ignore + import svgicon from "../../assets/svgicon.png"; -// @ts-ignore + import pngicon from "../../assets/pngicon.png"; -// @ts-ignore + import jpgicon from "../../assets/jpgicon.png"; -// @ts-ignore + import jpegicon from "../../assets/jpegicon.png"; -// @ts-ignore + import xlsicon from "../../assets/xlsicon.png"; -// @ts-ignore + import docicon from "../../assets/docicon.png"; -// @ts-ignore -import forwardIcon from "../../assets/forward.png"; -// @ts-ignore + import driverIcon from "../../assets/drivericon.png"; -// @ts-ignore + import userIcon from "../../assets/userIcon.png"; import ShiftDataTab from "./ShiftInfo/ShiftDataTab"; diff --git a/src/Components/Tasks/TaskTable.tsx b/src/Components/Tasks/TaskTable.tsx index dbe3264..fe1d2ef 100644 --- a/src/Components/Tasks/TaskTable.tsx +++ b/src/Components/Tasks/TaskTable.tsx @@ -1,4 +1,5 @@ import { Button, message, Modal, Space, Table, Tooltip } from "antd"; +import ReactCountryFlag from "react-country-flag"; import "../../App.css"; import { useEffect, useMemo, useState } from "react"; import { taskController } from "../../API/LayoutApi/tasks"; @@ -18,13 +19,13 @@ import tt from "../../assets/tticon.svg"; import tagIcon from "../../assets/tagIcon.svg"; // @ts-ignore import tgIcon from "../../assets/telegram.png"; -// + import webIcon from "../../assets/web.png"; -// + import { isMobile, role } from "../../App"; import { theme } from "antd"; -import dayjs from "dayjs"; + import ShiftAndCoDriverCreateModal from "./ShiftInfo/ShiftAndCoDriverCreateModal"; const admin_id = localStorage.getItem("admin_id"); @@ -58,7 +59,7 @@ const TaskTable = ({ status: "Checking", }; taskController.taskPatch(value, record?.id).then((response: any) => { - if (response?.status == 403) { + if (response?.status === 403) { showErrorModal(response); } }); @@ -81,7 +82,7 @@ const TaskTable = ({ // } if (record.status === "Checking") { - // 1) Break / PTI holati + // 1) Break / PTI if ( record?.service?.title === "Break" || record?.service?.title === "PTI" @@ -92,12 +93,12 @@ const TaskTable = ({ ); if (response?.status === 400) { setRecordTask(record); - setIsModalOpen(true); // ❌ error qaytsa modal ochiladi + setIsModalOpen(true); } return; } - // 2) needs_extra_info false bo‘lsa + // 2) needs_extra_info false if (record?.company?.needs_extra_info === false) { const response = await taskController.taskPatch( { status: "Done" }, @@ -105,12 +106,11 @@ const TaskTable = ({ ); if (response?.status === 400) { setRecordTask(record); - setIsModalOpen(true); // ❌ error qaytsa modal ochiladi + setIsModalOpen(true); } return; } - // 3) boshqa hollarda -> bevosita modal setRecordTask(record); setIsModalOpen(true); } @@ -180,16 +180,13 @@ const TaskTable = ({ return ""; }; - const formatDateTime = (date?: string) => - date ? dayjs(date).format("MM-DD-YYYY hh:mm:ss A") : null; - const handleCopy = (record: any, lang: "en" | "ru") => { const shiftInfo = { - pickUpDate: formatDateTime(record?.pickup_date), + pickUpDate: record?.pickup_date, pickUpLocation: record?.pickup_location ?? null, - shiftDate: formatDateTime(record?.shift_date), + shiftDate: record?.shift_date, shiftLocation: record?.shift_location ?? null, - cycleDate: formatDateTime(record?.cycle_date), + cycleDate: record?.cycle_date, cycleLocation: record?.cycle_location ?? null, }; @@ -197,9 +194,9 @@ const TaskTable = ({ driverName: record?.driver_name ?? null, coDriverName: record?.co_driver_name ?? null, coDriverPickUpLocation: record?.co_driver_pickup_location ?? null, - coDriverPickUpDate: formatDateTime(record?.co_driver_pickup_date), + coDriverPickUpDate: record?.co_driver_pickup_date, coDriverDropLocation: record?.co_driver_drop_location ?? null, - coDriverDropDate: formatDateTime(record?.co_driver_drop_date), + coDriverDropDate: record?.co_driver_drop_date, }; const buildTextBlock = ( @@ -245,7 +242,7 @@ const TaskTable = ({ ["Дата сайкла", shiftInfo.cycleDate], ["Место сайкла", shiftInfo.cycleLocation], ]), - buildTextBlock("ИНФОРМАЦИЯ О СО-ВОДИТЕЛЕ", [ + buildTextBlock("ИНФОРМАЦИЯ О КО-ДРАЙВЕРЕ", [ ["Имя драйвера", coDriverInfo.driverName], ["Имя ко-драйвера", coDriverInfo.coDriverName], ["Время пикапа ко-драйвера", coDriverInfo.coDriverPickUpDate], @@ -511,7 +508,14 @@ const TaskTable = ({ placement="topLeft" title={"Copy shift data in English"} > - 🇬🇧 + @@ -633,7 +644,7 @@ const TaskTable = ({ taskController .taskPatch(payload, recordTask.id) .then((response: any) => { - if (response?.status == 403) { + if (response?.status === 403) { showErrorModal(response); } else { setIsModalOpen(false); diff --git a/yarn.lock b/yarn.lock index cad273f..25503e7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8610,6 +8610,11 @@ react-app-polyfill@^3.0.0: regenerator-runtime "^0.13.9" whatwg-fetch "^3.6.2" +react-country-flag@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/react-country-flag/-/react-country-flag-3.1.0.tgz#f0c4c332934a77d3e894ba4800634f7a887e53d4" + integrity sha512-JWQFw1efdv9sTC+TGQvTKXQg1NKbDU2mBiAiRWcKM9F1sK+/zjhP2yGmm8YDddWyZdXVkR8Md47rPMJmo4YO5g== + react-dev-utils@^12.0.1: version "12.0.1" resolved "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz"