Skip to content
Extraits de code Groupes Projets
Valider ff1bc4dd rédigé par yassine.chhirou's avatar yassine.chhirou
Parcourir les fichiers

tegrate changing status of submitted roadmap

parent d279ed61
Branches
Étiquettes
1 requête de fusion!298VSN-1170/integrate changing status of submitted roadmap
Pipeline #22120 réussi avec l'étape
in 3 minutes et 24 secondes
......@@ -29,6 +29,7 @@ export const roadMapEndpoints = {
getOldSubmittedRoadmaps: endpointPrefix + '/submittedRoadMaps/old',
getOldSubmittedRoadmapDetails: (id: number) => `${endpointPrefix}/submittedRoadMaps/${id}`,
create: `${endpointPrefix}/create`,
updateStatus: (id: number | boolean) => `${endpointPrefix}/submittedRoadMaps/${id}/status`,
},
statistics: {
getStatistics: `${endpointPrefix}/statistics`,
......
......@@ -73,6 +73,7 @@ type RoadMapStore = {
type: string;
}[]
) => Promise<void>;
updateSubmittedRoadMapStatus: (id: number, isSubmitted: boolean) => Promise<void>;
};
export const useRoadMapStore = create<RoadMapStore>((set) => ({
......@@ -361,4 +362,18 @@ export const useRoadMapStore = create<RoadMapStore>((set) => ({
set({ error: error.message || 'Failed to create/update roadmap', loading: false });
}
},
updateSubmittedRoadMapStatus: async (id: number, isSubmitted: boolean) => {
set({ loading: true, error: null });
try {
await axiosInstance.put(roadMapEndpoints.roadMap.submittedRoadMap.updateStatus(id), {
isSubmitted: isSubmitted,
});
set({ loading: false });
} catch (error: any) {
set({
error: error.response?.data?.message || 'Erreur lors de la mise à jour du statut',
loading: false,
});
}
},
}));
......@@ -19,16 +19,19 @@ type Props = {
activeTabData: SubmittedRoadMapDTO
setWorkedDay: (workedDay: WorkedDayDTO) => void;
setSelectedDate: (date: Dayjs) => void;
initialDate?: string | Dayjs;
};
export default function UserInformationCard({ handleOnClick,activeTabData , setWorkedDay,setSelectedDate}: Props) {
export default function UserInformationCard({ handleOnClick,activeTabData , setWorkedDay,setSelectedDate,initialDate}: Props) {
const today = dayjs();
const startOfMonth = today.startOf('month');
const endOfMonth = today.endOf('month');
const [selectedDate, setLocalSelectedDate] = useState<Dayjs | null>(today);
const [selectedDate, setLocalSelectedDate] = useState<Dayjs | null>(() =>
initialDate && dayjs(initialDate).isValid() ? dayjs(initialDate) : today
);
const { driverInfo, getDriverInfos } = useWorkedDayStore();
const { getWorkedDay } = useWorkedDayStore();
......
......@@ -75,6 +75,7 @@ export default function CreatRoadMapPage({ activeTabData }: Props) {
activeTabData={activeTabData}
setWorkedDay={setWorkedDay}
setSelectedDate={setSelectedDate}
initialDate={activeTabData.date}
/>
<Formik
......
......@@ -6,7 +6,7 @@ import TableCell from '@mui/material/TableCell';
import { useTheme } from '@mui/material/styles';
import SvgColor from '@/shared/components/svg-color';
import { TableColumn } from '@/shared/types/common';
import { ContratStyledRow, getStatusColor } from '@/shared/sections/contract/styles';
import { ContratStyledRow, getStatusColor, StatusChip } from '@/shared/sections/contract/styles';
import { ISubmittedRoadmap, SubmittedRoadMapStatus } from '@/shared/types/driver';
import { Button, IconButton } from '@mui/material';
import CustomTooltip from '@/shared/components/tooltips/tooltip-custom';
......@@ -17,6 +17,7 @@ import { ActionsIconButton } from '@/shared/theme/css';
import FontAwesome from '@/shared/components/fontawesome';
import ConditionalComponent from '@/shared/components/table/ConditionalComponent';
import { SubmittedRoadMapDTO } from '@/shared/types/roadMap';
import StatusMenu from '@/shared/components/table/StatusMenu';
type Props = {
handleEdit: (roadmap: SubmittedRoadMapDTO) => void;
......@@ -29,8 +30,23 @@ type Props = {
columns: TableColumn[];
onClickOldRoadMaps: (roadmap: SubmittedRoadMapDTO) => void;
onClickContact: (roadmap: SubmittedRoadMapDTO) => void;
onStatusChange: (row: SubmittedRoadMapDTO, newStatus: boolean, field: keyof SubmittedRoadMapDTO) => void;
};
const SUBMISSION_OPTIONS: any[] = [
{
value: 'true',
label: 'Soumise',
color: '#36B37E',
backgroundColor: '#E9FBF0',
},
{
value: 'false',
label: 'Non soumise',
color: '#FF3434',
backgroundColor: '#FFE1E1',
},
];
export default function SubmittedRoaMapTableRow({
row,
handleEdit,
......@@ -38,6 +54,7 @@ export default function SubmittedRoaMapTableRow({
handleCopy,
selected,
dense,
onStatusChange,
onSelectRow,
columns,
onClickOldRoadMaps,
......@@ -50,19 +67,18 @@ export default function SubmittedRoaMapTableRow({
const renderCellContent = (column: any, value: any) => {
switch (column.id) {
case 'isSubmitted':
return (
<Button
size="small"
sx={{
borderRadius: 2.5,
textTransform: 'capitalize',
backgroundColor:
row.isSubmitted ? '#E9FBF0' : '#FFE1E1',
color: row.isSubmitted ? '#36B37E' : '#FF3434',
}}
>
{row.isSubmitted ? 'Soumise' : 'Non soumise'}
</Button>
<StatusMenu
value={String(value)} // 👈 Convertit booléen vers 'true' / 'false'
options={SUBMISSION_OPTIONS}
onChange={(newValue: string) => {
const booleanValue = newValue === 'true';
onStatusChange(row, booleanValue, 'isSubmitted');
}}
chipComponent={StatusChip}
sx={{ width: '140px' }}
/>
);
default:
return value;
......
......@@ -23,6 +23,7 @@ interface SubmittedRoadMapTableProps {
handleCopy: (row: SubmittedRoadMapDTO) => void;
handleView: (row: SubmittedRoadMapDTO) => void;
handleOldRoadMapsClick: (roadmap: SubmittedRoadMapDTO) => void;
onStatusChange: (row: SubmittedRoadMapDTO, newStatus: boolean, field: keyof SubmittedRoadMapDTO) => void;
handleContact: (row: SubmittedRoadMapDTO) => void;
activeTabData : SubmittedRoadMapDTO;
}
......@@ -40,6 +41,7 @@ export default function SubmittedRoadMapTable({
onResetFilters,
onResetColumns,
onColumnsChange,
onStatusChange,
handleEdit,
handleCopy,
handleView,
......@@ -70,6 +72,7 @@ export default function SubmittedRoadMapTable({
columns={tableHead.slice(0, -2)}
onClickOldRoadMaps={handleOldRoadMapsClick}
onClickContact={handleContact}
onStatusChange={onStatusChange}
/>
);
......
......@@ -31,6 +31,7 @@ export default function SubmittedRoadMapView() {
const {
submittedRoadMaps,
getAllSubmittedRoadMaps,
updateSubmittedRoadMapStatus,
loading,
error,
} = useRoadMapStore();
......@@ -48,7 +49,7 @@ export default function SubmittedRoadMapView() {
listTitle: 'Liste de feuilles de route',
newItemTitle: 'Anciennes feuilles de route',
initialData: INITIAL_SUBMITTED_ROADMAP_DATA,
getItemCode: (roadmap) => roadmap.id,
getItemCode: (roadmap) => roadmap.driverName,
};
const {
......@@ -150,6 +151,14 @@ export default function SubmittedRoadMapView() {
const activeTabData = React.useMemo(() => {
return tabs.find(tab => tab.id === activeTab);
}, [tabs, activeTab]);
const handleStatusChange = async (row: SubmittedRoadMapDTO, newStatus: boolean, field: string) => {
try {
await updateSubmittedRoadMapStatus(Number(row.id), newStatus);
getAllSubmittedRoadMaps(params);
} catch (e) {
}
};
return (
<>
......@@ -238,6 +247,7 @@ export default function SubmittedRoadMapView() {
handleView={handleView}
handleOldRoadMapsClick={handleOldRoadMapsClick}
handleContact={handleContactClick}
onStatusChange={handleStatusChange}
/>
</ConditionalComponent>
</Box>
......
......@@ -131,6 +131,14 @@ export const StatusChip = styled(Chip)(({ status, theme }: { status: string; the
backgroundColor: alpha('#FF3434', 0.1),
color: '#FF3434',
}),
...(status === 'true' || status === 'Soumise') && {
backgroundColor: '#E9FBF0',
color: '#36B37E',
},
...(status === 'false' || status === 'Non soumise') && {
backgroundColor: '#FFE1E1',
color: '#FF3434',
},
},
}));
......
......@@ -56,8 +56,9 @@ export interface SubmittedRoadMapDTO {
driverName: string;
departementId: number;
departementName: string;
email: string;
phone: string;
email : string;
phone:string;
date:string;
}
export interface SubmittedRoadMapFilterParams {
......@@ -79,7 +80,8 @@ export const INITIAL_SUBMITTED_ROADMAP_DATA: SubmittedRoadMapDTO = {
departementName: '',
email: '',
phone: '',
};
date: '',
};
export interface DriverRoadMapDetailsDTO {
id: number;
......
0% ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter