mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-09 01:18:18 +00:00
Merge pull request #284 from Tria-plc/freight/feature/vehicle_2
Freight/feature/vehicle 2
This commit is contained in:
@@ -59,7 +59,7 @@ export class FirstMileController {
|
|||||||
@TrainSchedulingManage()
|
@TrainSchedulingManage()
|
||||||
@ApiOperation({ summary: 'Accept a paid booking and create a first-mile leg' })
|
@ApiOperation({ summary: 'Accept a paid booking and create a first-mile leg' })
|
||||||
acceptBooking(@Param('reference') reference: string) {
|
acceptBooking(@Param('reference') reference: string) {
|
||||||
return this.firstMileService.acceptBooking(reference);
|
return this.firstMileService.acceptBookingByReference(reference);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Post()
|
@Post()
|
||||||
|
|||||||
@@ -44,8 +44,8 @@ export class FirstMileService {
|
|||||||
* paid before any first-mile work proceeds. Throws if the reference is
|
* paid before any first-mile work proceeds. Throws if the reference is
|
||||||
* unknown or the booking has not reached PAID status.
|
* unknown or the booking has not reached PAID status.
|
||||||
*/
|
*/
|
||||||
async acceptBooking(bookingReference: string): Promise<FirstMile | null> {
|
async acceptBooking(bookingId: string): Promise<FirstMile | null> {
|
||||||
const booking = await this.bookingsRepository.findByReference(bookingReference);
|
const booking = await this.bookingsRepository.findById(bookingId);
|
||||||
|
|
||||||
if (!booking) {
|
if (!booking) {
|
||||||
return null;
|
return null;
|
||||||
@@ -61,6 +61,22 @@ export class FirstMileService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async acceptBookingByReference(bookingReference: string): Promise<FirstMile | null> {
|
||||||
|
const booking = await this.bookingsRepository.findByReference(bookingReference);
|
||||||
|
|
||||||
|
if (!booking) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (booking.paymentStatus !== 'PAID') {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.create({
|
||||||
|
bookingId: booking.id,
|
||||||
|
advancedPayment: 0,
|
||||||
|
});
|
||||||
|
}
|
||||||
async findAll(filter: FirstMileListFilter = {}): Promise<{
|
async findAll(filter: FirstMileListFilter = {}): Promise<{
|
||||||
data: FirstMile[];
|
data: FirstMile[];
|
||||||
meta: { total: number; page: number; pageSize: number; totalPages: number };
|
meta: { total: number; page: number; pageSize: number; totalPages: number };
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ export class LastMileController {
|
|||||||
@TrainSchedulingManage()
|
@TrainSchedulingManage()
|
||||||
@ApiOperation({ summary: 'Accept a paid booking and create a last-mile leg' })
|
@ApiOperation({ summary: 'Accept a paid booking and create a last-mile leg' })
|
||||||
acceptBooking(@Param('reference') reference: string) {
|
acceptBooking(@Param('reference') reference: string) {
|
||||||
return this.lastMileService.acceptBooking(reference);
|
return this.lastMileService.acceptBookingByReference(reference);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Post()
|
@Post()
|
||||||
|
|||||||
@@ -54,7 +54,26 @@ export class LastMileService {
|
|||||||
|
|
||||||
return this.create({
|
return this.create({
|
||||||
bookingId: booking.id,
|
bookingId: booking.id,
|
||||||
advancedPayment: booking.totalAmount,
|
advancedPayment: 0,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async acceptBookingByReference(bookingReference: string): Promise<LastMile> {
|
||||||
|
const booking = await this.bookingsRepository.findByReference(bookingReference);
|
||||||
|
|
||||||
|
if (!booking) {
|
||||||
|
throw new NotFoundException(`Booking ${bookingReference} not found`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (booking.paymentStatus !== 'PAID') {
|
||||||
|
throw new BadRequestException(
|
||||||
|
`Booking ${bookingReference} is not paid (payment status: ${booking.paymentStatus})`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.create({
|
||||||
|
bookingId: booking.id,
|
||||||
|
advancedPayment: 0,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ import WarehouseInventoryPage from "./pages/warehouses/WarehouseInventoryPage";
|
|||||||
import WarehouseInvoicesPage from "./pages/warehouses/WarehouseInvoicesPage";
|
import WarehouseInvoicesPage from "./pages/warehouses/WarehouseInvoicesPage";
|
||||||
import WarehouseListPage from "./pages/warehouses/WarehouseListPage";
|
import WarehouseListPage from "./pages/warehouses/WarehouseListPage";
|
||||||
import WarehouseRulesPage from "./pages/warehouses/WarehouseRulesPage";
|
import WarehouseRulesPage from "./pages/warehouses/WarehouseRulesPage";
|
||||||
|
import { HealthCheck } from "./features/health/HealthCheck";
|
||||||
|
|
||||||
const buildSidebarSections = (demoItems: SidebarItem[]): SidebarSection[] => [
|
const buildSidebarSections = (demoItems: SidebarItem[]): SidebarSection[] => [
|
||||||
{
|
{
|
||||||
@@ -353,6 +354,7 @@ const App = () => {
|
|||||||
return (
|
return (
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="/um/*" element={<UserManagementHostPage />} />
|
<Route path="/um/*" element={<UserManagementHostPage />} />
|
||||||
|
<Route path="/health" element={<HealthCheck />} />
|
||||||
<Route path="/" element={<Navigate to="/dashboard/overview" replace />} />
|
<Route path="/" element={<Navigate to="/dashboard/overview" replace />} />
|
||||||
<Route path="/dashboard" element={<Navigate to="/dashboard/overview" replace />} />
|
<Route path="/dashboard" element={<Navigate to="/dashboard/overview" replace />} />
|
||||||
<Route path="/dashboard" element={<DashboardShell />}>
|
<Route path="/dashboard" element={<DashboardShell />}>
|
||||||
@@ -388,138 +390,138 @@ const App = () => {
|
|||||||
<Route path="warehouse-fee-invoices" element={<WarehouseInvoicesPage />} />
|
<Route path="warehouse-fee-invoices" element={<WarehouseInvoicesPage />} />
|
||||||
<Route path="warehouse-dashboard" element={<WarehouseDashboardPage />} />
|
<Route path="warehouse-dashboard" element={<WarehouseDashboardPage />} />
|
||||||
|
|
||||||
<Route
|
<Route
|
||||||
path="operations/train-scheduling"
|
path="operations/train-scheduling"
|
||||||
element={<Navigate to="/dashboard/operations/train-scheduling-v2" replace />}
|
element={<Navigate to="/dashboard/operations/train-scheduling-v2" replace />}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="operations/batch-board"
|
path="operations/batch-board"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.trainScheduling.view}>
|
<RequirePermission permission={FREIGHT_PERMS.trainScheduling.view}>
|
||||||
<BatchBoardPage />
|
<BatchBoardPage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="operations/first-mile"
|
path="operations/first-mile"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.trainScheduling.view}>
|
<RequirePermission permission={FREIGHT_PERMS.trainScheduling.view}>
|
||||||
<FirstMilePage />
|
<FirstMilePage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="operations/last-mile"
|
path="operations/last-mile"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.trainScheduling.view}>
|
<RequirePermission permission={FREIGHT_PERMS.trainScheduling.view}>
|
||||||
<LastMilePage />
|
<LastMilePage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="operations/batch-board/:scheduleId"
|
path="operations/batch-board/:scheduleId"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.trainScheduling.view}>
|
<RequirePermission permission={FREIGHT_PERMS.trainScheduling.view}>
|
||||||
<BatchScheduleDetailPage />
|
<BatchScheduleDetailPage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="operations/train-scheduling-v2"
|
path="operations/train-scheduling-v2"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.trainScheduling.view}>
|
<RequirePermission permission={FREIGHT_PERMS.trainScheduling.view}>
|
||||||
<TrainScheduleV2ListPage />
|
<TrainScheduleV2ListPage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="operations/train-scheduling-v2/:scheduleId"
|
path="operations/train-scheduling-v2/:scheduleId"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.trainScheduling.view}>
|
<RequirePermission permission={FREIGHT_PERMS.trainScheduling.view}>
|
||||||
<TrainScheduleV2DetailPage />
|
<TrainScheduleV2DetailPage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="operations/train-scheduling-v2/:scheduleId/track"
|
path="operations/train-scheduling-v2/:scheduleId/track"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.trainScheduling.view}>
|
<RequirePermission permission={FREIGHT_PERMS.trainScheduling.view}>
|
||||||
<TrainScheduleTrackPage />
|
<TrainScheduleTrackPage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="routes"
|
path="routes"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
||||||
<RoutesPage />
|
<RoutesPage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="locomotives"
|
path="locomotives"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
||||||
<FleetResourcePage />
|
<FleetResourcePage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="trains"
|
path="trains"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
||||||
<FleetResourcePage />
|
<FleetResourcePage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="trains/:id"
|
path="trains/:id"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
||||||
<TrainDetailPage />
|
<TrainDetailPage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="wagons"
|
path="wagons"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
||||||
<FleetResourcePage />
|
<FleetResourcePage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="containers"
|
path="containers"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
||||||
<FleetResourcePage />
|
<FleetResourcePage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="cargoes"
|
path="cargoes"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
||||||
<FleetResourcePage />
|
<FleetResourcePage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="vehicles"
|
path="vehicles"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
||||||
<FleetResourcePage />
|
<FleetResourcePage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="drivers"
|
path="drivers"
|
||||||
element={
|
element={
|
||||||
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
<RequirePermission permission={FREIGHT_PERMS.fleet.view}>
|
||||||
<FleetResourcePage />
|
<FleetResourcePage />
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="operations/train-scheduling"
|
path="operations/train-scheduling"
|
||||||
element={<Navigate to="/dashboard/operations/train-scheduling-v2" replace />}
|
element={<Navigate to="/dashboard/operations/train-scheduling-v2" replace />}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
export const HealthCheck = () => {
|
||||||
|
const url1 = import.meta.env.VITE_API_URL?? "undefined";
|
||||||
|
const url2 = import.meta.env.VITE_BASE_API_URL?? "undefined";
|
||||||
|
const url3 = import.meta.env.VITE_USER_MANAGEMENT_BASE?? "undefined";
|
||||||
|
|
||||||
|
return <div>
|
||||||
|
<h2>-----------{url1}</h2>
|
||||||
|
<h2>-----------{url2}</h2>
|
||||||
|
<h2>-----------{url3}</h2>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user