fix issue

This commit is contained in:
Marshal
2026-08-08 14:22:38 +00:00
parent 4b8119fd3c
commit 88b995d3d7
17 changed files with 110 additions and 207 deletions

View File

@@ -20,7 +20,7 @@ import { NotificationInboxService } from '../notification-inbox/notification-inb
import { wagonsPerUnitForSize } from '../rule-engine/container-type.util'; import { wagonsPerUnitForSize } from '../rule-engine/container-type.util';
import { Rate } from '../rule-engine/entities/rate.entity'; import { Rate } from '../rule-engine/entities/rate.entity';
import { BookingBatchService } from '../train-scheduling/booking-batch.service'; import { BookingBatchService } from '../train-scheduling/booking-batch.service';
import { TrainSchedulingService } from '../train-scheduling/train-scheduling.service'; import { TrainSchedulingService } from '../train-scheduling/services/train-scheduling.service';
import { WagonAllocationBulkLoad } from '../train-schedules/entities/wagon-allocation-bulk-load.entity'; import { WagonAllocationBulkLoad } from '../train-schedules/entities/wagon-allocation-bulk-load.entity';
import { WagonAllocationContainerItem } from '../train-schedules/entities/wagon-allocation-container-item.entity'; import { WagonAllocationContainerItem } from '../train-schedules/entities/wagon-allocation-container-item.entity';
import { WagonBookingAllocation } from '../train-schedules/entities/wagon-booking-allocation.entity'; import { WagonBookingAllocation } from '../train-schedules/entities/wagon-booking-allocation.entity';

View File

@@ -13,7 +13,7 @@ import { insertWithGeneratedReference } from '@edr/api-common';
// import { CustomersService } from '../customers/customers.service'; // import { CustomersService } from '../customers/customers.service';
import { CompaniesService } from '../companies/companies.service'; import { CompaniesService } from '../companies/companies.service';
import { CompanyKind, CompanyStatus } from '../companies/entities/company.entity'; import { CompanyKind, CompanyStatus } from '../companies/entities/company.entity';
import { TrainSchedulingService } from '../train-scheduling/train-scheduling.service'; import { TrainSchedulingService } from '../train-scheduling/services/train-scheduling.service';
import { eatDay } from '../train-scheduling/batch-window.util'; import { eatDay } from '../train-scheduling/batch-window.util';
import { FilesService } from '../files/files.service'; import { FilesService } from '../files/files.service';
import { MinioService } from '../minio/minio.service'; import { MinioService } from '../minio/minio.service';

View File

@@ -24,7 +24,7 @@ import { PriceLineItemDto } from '../bookings/dto/generate-price-response.dto';
import { BookingInvoiceService } from '../bookings/booking-invoice.service'; import { BookingInvoiceService } from '../bookings/booking-invoice.service';
import { validate20ftWeightPairing } from '../bookings/container-pairing.util'; import { validate20ftWeightPairing } from '../bookings/container-pairing.util';
import { TrainSchedulingGlobalRules } from '../train-scheduling/entities/train-scheduling-global-rules.entity'; import { TrainSchedulingGlobalRules } from '../train-scheduling/entities/train-scheduling-global-rules.entity';
import { TrainSchedulingService } from '../train-scheduling/train-scheduling.service'; import { TrainSchedulingService } from '../train-scheduling/services/train-scheduling.service';
import { BookingBatchService } from '../train-scheduling/booking-batch.service'; import { BookingBatchService } from '../train-scheduling/booking-batch.service';
import { eatDay } from '../train-scheduling/batch-window.util'; import { eatDay } from '../train-scheduling/batch-window.util';
import { wagonsPerUnitForSize } from '../rule-engine/container-type.util'; import { wagonsPerUnitForSize } from '../rule-engine/container-type.util';

View File

@@ -11,12 +11,8 @@ import { Booking } from '../bookings/entities/booking.entity';
import { BookingsRepository } from '../bookings/bookings.repository'; import { BookingsRepository } from '../bookings/bookings.repository';
import { compareSchedulingPriority } from '../scheduling/compare-scheduling-priority.util'; import { compareSchedulingPriority } from '../scheduling/compare-scheduling-priority.util';
import { TrainSchedulesRepository } from '../train-schedules/train-schedules.repository'; import { TrainSchedulesRepository } from '../train-schedules/train-schedules.repository';
<<<<<<< Updated upstream
import { TrainSchedulingService } from '../train-scheduling/train-scheduling.service';
import { BookingNotifierService } from '../train-scheduling/booking-notifier.service';
=======
import { TrainSchedulingService } from '../train-scheduling/services/train-scheduling.service'; import { TrainSchedulingService } from '../train-scheduling/services/train-scheduling.service';
>>>>>>> Stashed changes import { BookingNotifierService } from '../train-scheduling/booking-notifier.service';
import { ExecuteRescheduleDto, PreviewRescheduleDto } from './dto/preview-reschedule.dto'; import { ExecuteRescheduleDto, PreviewRescheduleDto } from './dto/preview-reschedule.dto';
import { MaintenanceRescheduleDto } from './dto/maintenance-reschedule.dto'; import { MaintenanceRescheduleDto } from './dto/maintenance-reschedule.dto';
import { SchedulingRescheduleRepository } from './scheduling-reschedule.repository'; import { SchedulingRescheduleRepository } from './scheduling-reschedule.repository';

View File

@@ -37,7 +37,7 @@ import { BookingNotifierService } from './booking-notifier.service';
import { import {
TrainSchedulingService, TrainSchedulingService,
effectiveWindowConfig, effectiveWindowConfig,
} from './train-scheduling.service'; } from './services/train-scheduling.service';
import { eatDay, listConfigBookingWindows } from './batch-window.util'; import { eatDay, listConfigBookingWindows } from './batch-window.util';
import { import {
BATCH_BOARD_STATUSES, BATCH_BOARD_STATUSES,
@@ -90,7 +90,7 @@ import { BookingWindowGateway } from './booking-window.gateway';
import { import {
MAX_TEU_SLOTS_PER_WAGON, MAX_TEU_SLOTS_PER_WAGON,
containerWagonsForLines, containerWagonsForLines,
} from './wagon-plan.util'; } from './utils/wagon-plan.util';
import { import {
Capacity, Capacity,
CorridorBudget, CorridorBudget,

View File

@@ -19,7 +19,7 @@ import {
} from '../notifications/resolve-company-phone.util'; } from '../notifications/resolve-company-phone.util';
import { BookingBatchService } from './booking-batch.service'; import { BookingBatchService } from './booking-batch.service';
import { BookingWindowGateway } from './booking-window.gateway'; import { BookingWindowGateway } from './booking-window.gateway';
import { TrainSchedulingService, effectiveWindowConfig } from './train-scheduling.service'; import { TrainSchedulingService, effectiveWindowConfig } from './services/train-scheduling.service';
import { BATCH_TIMEZONE } from './booking-batch.constants'; import { BATCH_TIMEZONE } from './booking-batch.constants';
import { import {
bookingCloseCutoff, bookingCloseCutoff,

View File

@@ -1,4 +1,4 @@
import type { ContainerPlacementInput } from './wagon-plan.util'; import type { ContainerPlacementInput } from './utils/wagon-plan.util';
export type ContainerUnitForPlacement = { export type ContainerUnitForPlacement = {
bookingId: string; bookingId: string;

View File

@@ -1,8 +1,8 @@
import { ApiBearerAuth, ApiOperation, ApiTags } from "@nestjs/swagger"; import { ApiBearerAuth, ApiOperation, ApiTags } from "@nestjs/swagger";
import type { Response } from "express"; import type { Response } from "express";
import type { AuthUserPayload } from "../../common/resolve-auth-user-id"; import type { AuthUserPayload } from "../../../common/resolve-auth-user-id";
import { UserTradeAccessService } from "../user-trade-access/user-trade-access.service"; import { UserTradeAccessService } from "../../user-trade-access/user-trade-access.service";
import { resolveAuthUserId } from "../../common/resolve-auth-user-id"; import { resolveAuthUserId } from "../../../common/resolve-auth-user-id";
import { import {
Body, Controller, Delete, Get, Param, ParseUUIDPipe, Patch, Post, Query, Res, Body, Controller, Delete, Get, Param, ParseUUIDPipe, Patch, Post, Query, Res,
@@ -19,66 +19,48 @@ import {
TrainSchedulingRulesManage, TrainSchedulingRulesManage,
TrainSchedulingUpdate, TrainSchedulingUpdate,
TrainSchedulingView, TrainSchedulingView,
} from "../../common/booking-guards"; } from "../../../common/booking-guards";
import { FREIGHT_PERMS } from "../../seed/freight-permissions.registry"; import { FREIGHT_PERMS } from "../../../seed/freight-permissions.registry";
import { AcceptIntercityBookingsDto } from "./dto/accept-intercity-bookings.dto"; import { AcceptIntercityBookingsDto } from "../dto/accept-intercity-bookings.dto";
import { AssignBookingsDto } from "./dto/assign-bookings.dto"; import { AssignBookingsDto } from "../dto/assign-bookings.dto";
import { AssignUnassignedBookingDto } from "./dto/assign-unassigned-booking.dto"; import { AssignUnassignedBookingDto } from "../dto/assign-unassigned-booking.dto";
import { SwitchGovernmentBookingDto } from "./dto/switch-government-booking.dto"; import { SwitchGovernmentBookingDto } from "../dto/switch-government-booking.dto";
import { CreateContainerTrainScheduleDto } from "./dto/create-container-train-schedule.dto"; import { CreateContainerTrainScheduleDto } from "../dto/create-container-train-schedule.dto";
import { GetEligibleBookingsDto } from "./dto/get-eligible-bookings.dto"; import { GetEligibleBookingsDto } from "../dto/get-eligible-bookings.dto";
import { GetEligibleBulkBookingsDto } from "./dto/get-eligible-bulk-bookings.dto"; import { GetEligibleBulkBookingsDto } from "../dto/get-eligible-bulk-bookings.dto";
import { GetEligibleContainerBookingsDto } from "./dto/get-eligible-container-bookings.dto"; import { GetEligibleContainerBookingsDto } from "../dto/get-eligible-container-bookings.dto";
import { PinWagonsDto } from "./dto/pin-wagons.dto"; import { PinWagonsDto } from "../dto/pin-wagons.dto";
import { MoveWagonLoadDto } from "./dto/move-wagon-load.dto"; import { MoveWagonLoadDto } from "../dto/move-wagon-load.dto";
import { UpdateContainerItemDto } from "./dto/update-container-item.dto"; import { UpdateContainerItemDto } from "../dto/update-container-item.dto";
import { UpdateImportLoadingStatusDto } from "./dto/update-import-loading-status.dto"; import { UpdateImportLoadingStatusDto } from "../dto/update-import-loading-status.dto";
import { PreviewBulkTrainScheduleDto } from "./dto/preview-bulk-train-schedule.dto"; import { PreviewBulkTrainScheduleDto } from "../dto/preview-bulk-train-schedule.dto";
import { PreviewContainerTrainScheduleDto } from "./dto/preview-container-train-schedule.dto"; import { PreviewContainerTrainScheduleDto } from "../dto/preview-container-train-schedule.dto";
import { PreviewTrainScheduleDto } from "./dto/preview-train-schedule.dto"; import { PreviewTrainScheduleDto } from "../dto/preview-train-schedule.dto";
import { RecordCheckpointDto } from "./dto/record-checkpoint.dto"; import { RecordCheckpointDto } from "../dto/record-checkpoint.dto";
import { import {
ImportDjiboutiActionDto, ImportDjiboutiActionDto,
UploadImportDjiboutiDocumentDto, UploadImportDjiboutiDocumentDto,
} from "./dto/import-djibouti-operation.dto"; } from "../dto/import-djibouti-operation.dto";
import { AvailableLocomotivesQueryDto } from "./dto/available-locomotives-query.dto"; import { AvailableLocomotivesQueryDto } from "../dto/available-locomotives-query.dto";
import { AdjustScheduleConsistDto } from "./dto/adjust-schedule-consist.dto"; import { AdjustScheduleConsistDto } from "../dto/adjust-schedule-consist.dto";
import { AvailableTrainsQueryDto } from "./dto/available-trains-query.dto"; import { AvailableTrainsQueryDto } from "../dto/available-trains-query.dto";
import { BatchBoardQueryDto } from "./dto/batch-board-query.dto"; import { BatchBoardQueryDto } from "../dto/batch-board-query.dto";
import { BookableSchedulesQueryDto } from "./dto/bookable-schedules-query.dto"; import { BookableSchedulesQueryDto } from "../dto/bookable-schedules-query.dto";
import { ListTrainSchedulesQueryDto } from "./dto/list-train-schedules-query.dto"; import { ListTrainSchedulesQueryDto } from "../dto/list-train-schedules-query.dto";
import { AvailableDaysQueryDto } from "./dto/available-days-query.dto"; import { AvailableDaysQueryDto } from "../dto/available-days-query.dto";
import { AvailableDaysForCargoQueryDto } from "./dto/available-days-for-cargo-query.dto"; import { AvailableDaysForCargoQueryDto } from "../dto/available-days-for-cargo-query.dto";
import { UpdateTrainSchedulingGlobalRulesDto } from "./dto/update-train-scheduling-global-rules.dto"; import { UpdateTrainSchedulingGlobalRulesDto } from "../dto/update-train-scheduling-global-rules.dto";
import { UpdateScheduleWindowRuleDto } from "./dto/update-schedule-window-rule.dto"; import { UpdateScheduleWindowRuleDto } from "../dto/update-schedule-window-rule.dto";
import { UpdateScheduleDateDto } from "./dto/update-schedule-date.dto"; import { UpdateScheduleDateDto } from "../dto/update-schedule-date.dto";
import { MaintenanceRescheduleDto } from "./dto/maintenance-reschedule.dto"; import { MaintenanceRescheduleDto } from "../dto/maintenance-reschedule.dto";
import { TrainSchedulingService } from "./train-scheduling.service"; import { TrainSchedulingService } from "../services/train-scheduling.service";
import { BookingBatchService } from "./booking-batch.service"; import { BookingBatchService } from "../booking-batch.service";
import { BookingJourneyService } from "./booking-journey.service"; import { BookingJourneyService } from "../booking-journey.service";
import { BookingWindowService } from "./booking-window.service"; import { BookingWindowService } from "../booking-window.service";
import { IntercityService } from "./intercity.service"; import { IntercityService } from "../intercity.service";
import { BillingService } from "../billing/billing.service"; import { BillingService } from "../../billing/billing.service";
<<<<<<< Updated upstream:apps/edr-freight-api/src/modules/train-scheduling/train-scheduling.controller.ts
@ApiTags("train-scheduling") @ApiTags("train-scheduling")
=======
import { TrainSchedulingManage, TrainSchedulingView } from '../../../common/booking-guards';
import { AssignBookingsDto } from '../dto/assign-bookings.dto';
import { CreateContainerTrainScheduleDto } from '../dto/create-container-train-schedule.dto';
import { GetEligibleBookingsDto } from '../dto/get-eligible-bookings.dto';
import { GetEligibleBulkBookingsDto } from '../dto/get-eligible-bulk-bookings.dto';
import { GetEligibleContainerBookingsDto } from '../dto/get-eligible-container-bookings.dto';
import { PinWagonsDto } from '../dto/pin-wagons.dto';
import { PreviewBulkTrainScheduleDto } from '../dto/preview-bulk-train-schedule.dto';
import { PreviewContainerTrainScheduleDto } from '../dto/preview-container-train-schedule.dto';
import { PreviewTrainScheduleDto } from '../dto/preview-train-schedule.dto';
import { RecordCheckpointDto } from '../dto/record-checkpoint.dto';
import { UpdateTrainSchedulingGlobalRulesDto } from '../dto/update-train-scheduling-global-rules.dto';
import { TrainSchedulingService } from '../services/train-scheduling.service';
@ApiTags('train-scheduling')
>>>>>>> Stashed changes:apps/edr-freight-api/src/modules/train-scheduling/controllers/train-scheduling.controller.ts
@ApiBearerAuth() @ApiBearerAuth()
@Controller("train-scheduling") @Controller("train-scheduling")
export class TrainSchedulingController { export class TrainSchedulingController {

View File

@@ -1,4 +1,4 @@
import { TrainSchedulingService } from './train-scheduling.service'; import { TrainSchedulingService } from './services/train-scheduling.service';
import { Booking } from '../bookings/entities/booking.entity'; import { Booking } from '../bookings/entities/booking.entity';
import { ClearanceMilestone } from '../contracts/entities/clearance-milestone.entity'; import { ClearanceMilestone } from '../contracts/entities/clearance-milestone.entity';

View File

@@ -1,18 +1,11 @@
import { BadRequestException, ConflictException } from '@nestjs/common'; import { BadRequestException, ConflictException } from '@nestjs/common';
import { WagonStatus } from '@edr/types'; import { WagonStatus } from '@edr/types';
<<<<<<< Updated upstream:apps/edr-freight-api/src/modules/train-scheduling/train-scheduling.service.spec.ts
import { Wagon } from '../wagons/entities/wagon.entity';
import { WagonType } from '../wagon-types/entities/wagon-type.entity';
import { TrainSetWagon } from '../train-sets/entities/train-set-wagon.entity';
import { TrainSchedulingGlobalRules } from './entities/train-scheduling-global-rules.entity';
import { WagonBookingAllocation } from '../train-schedules/entities/wagon-booking-allocation.entity';
=======
import { Wagon } from '../../wagons/entities/wagon.entity'; import { Wagon } from '../../wagons/entities/wagon.entity';
import { WagonType } from '../../wagon-types/entities/wagon-type.entity'; import { WagonType } from '../../wagon-types/entities/wagon-type.entity';
import { TrainSetWagon } from '../../train-sets/entities/train-set-wagon.entity'; import { TrainSetWagon } from '../../train-sets/entities/train-set-wagon.entity';
import { TrainSchedulingGlobalRules } from '../entities/train-scheduling-global-rules.entity'; import { TrainSchedulingGlobalRules } from '../entities/train-scheduling-global-rules.entity';
>>>>>>> Stashed changes:apps/edr-freight-api/src/modules/train-scheduling/services/train-scheduling.service.spec.ts import { WagonBookingAllocation } from '../../train-schedules/entities/wagon-booking-allocation.entity';
import { TrainSchedulingService } from './train-scheduling.service'; import { TrainSchedulingService } from './train-scheduling.service';
const nw5 = { const nw5 = {

View File

@@ -33,108 +33,74 @@ import {
Raw, Raw,
} from 'typeorm'; } from 'typeorm';
<<<<<<< Updated upstream:apps/edr-freight-api/src/modules/train-scheduling/train-scheduling.service.ts
import { import {
buildPaginationMeta, buildPaginationMeta,
normalizePagination, normalizePagination,
} from '../../common/utils/pagination.util'; } from '../../../common/utils/pagination.util';
import { BookingsRepository } from '../bookings/bookings.repository';
import { Booking } from '../bookings/entities/booking.entity';
import { BookingContainer } from '../bookings/entities/booking-container.entity';
import { ClearanceMilestone } from '../contracts/entities/clearance-milestone.entity';
import { ClearanceMilestoneService } from '../contracts/clearance-milestone.service';
import { Contract } from '../contracts/entities/contract.entity';
import { Container } from '../container-management/entities/container.entity';
import { Locomotive } from '../locomotives/entities/locomotive.entity';
import { LocomotivesRepository } from '../locomotives/locomotives.repository';
import { formatRouteLabel, Route } from '../routes/entities/route.entity';
import { WagonMovement } from '../wagons/entities/wagon-movement.entity';
import { Train } from '../trains/entities/train.entity';
import { TrainSetLocomotive } from '../train-sets/entities/train-set-locomotive.entity';
import { TrainSetWagon } from '../train-sets/entities/train-set-wagon.entity';
import { TrainSet } from '../train-sets/entities/train-set.entity';
import { ScheduleWagonAdjustmentLog } from '../train-schedules/entities/schedule-wagon-adjustment-log.entity';
import { TrainScheduleBooking } from '../train-schedules/entities/train-schedule-booking.entity';
import { TrainSchedule } from '../train-schedules/entities/train-schedule.entity';
import { WagonAllocationContainerItem } from '../train-schedules/entities/wagon-allocation-container-item.entity';
import { WagonBookingAllocation } from '../train-schedules/entities/wagon-booking-allocation.entity';
import { TrainScheduleBookingsRepository } from '../train-schedules/train-schedule-bookings.repository';
import { TrainSchedulesRepository } from '../train-schedules/train-schedules.repository';
import { TrainCompositionRemovalLogRepository } from '../train-schedules/train-composition-removal-log.repository';
import { WagonAllocationBulkLoadsRepository } from '../train-schedules/wagon-allocation-bulk-loads.repository';
import { WagonAllocationContainerItemsRepository } from '../train-schedules/wagon-allocation-container-items.repository';
import { WagonBookingAllocationsRepository } from '../train-schedules/wagon-booking-allocations.repository';
import { Yard } from '../rule-engine/entities/yard.entity';
import { WagonType } from '../wagon-types/entities/wagon-type.entity';
import { WagonTypesRepository } from '../wagon-types/wagon-types.repository';
import { Wagon } from '../wagons/entities/wagon.entity';
import { AdjustScheduleConsistDto } from './dto/adjust-schedule-consist.dto';
import { AssignBookingsDto } from './dto/assign-bookings.dto';
import { CreateContainerTrainScheduleDto } from './dto/create-container-train-schedule.dto';
import { GetEligibleBookingsDto } from './dto/get-eligible-bookings.dto';
import { GetEligibleBulkBookingsDto } from './dto/get-eligible-bulk-bookings.dto';
import { GetEligibleContainerBookingsDto } from './dto/get-eligible-container-bookings.dto';
import {
ListTrainSchedulesQueryDto,
TrainScheduleFreightType,
} from './dto/list-train-schedules-query.dto';
import { PinWagonsDto } from './dto/pin-wagons.dto';
import { MoveWagonLoadDto } from './dto/move-wagon-load.dto';
import { UpdateContainerItemDto } from './dto/update-container-item.dto';
import { UpdateImportLoadingStatusDto } from './dto/update-import-loading-status.dto';
import { PreviewBulkTrainScheduleDto } from './dto/preview-bulk-train-schedule.dto';
import { PreviewContainerTrainScheduleDto } from './dto/preview-container-train-schedule.dto';
import { PreviewTrainScheduleDto } from './dto/preview-train-schedule.dto';
import { TrainSchedulingGlobalRules } from './entities/train-scheduling-global-rules.entity';
=======
import { BookingsRepository } from '../../bookings/bookings.repository'; import { BookingsRepository } from '../../bookings/bookings.repository';
import { Booking } from '../../bookings/entities/booking.entity'; import { Booking } from '../../bookings/entities/booking.entity';
import { BookingContainer } from '../../bookings/entities/booking-container.entity'; import { BookingContainer } from '../../bookings/entities/booking-container.entity';
import { ClearanceMilestone } from '../../contracts/entities/clearance-milestone.entity';
import { ClearanceMilestoneService } from '../../contracts/clearance-milestone.service';
import { Contract } from '../../contracts/entities/contract.entity';
import { Container } from '../../container-management/entities/container.entity'; import { Container } from '../../container-management/entities/container.entity';
import { Locomotive } from '../../locomotives/entities/locomotive.entity'; import { Locomotive } from '../../locomotives/entities/locomotive.entity';
import { LocomotivesRepository } from '../../locomotives/locomotives.repository'; import { LocomotivesRepository } from '../../locomotives/locomotives.repository';
import { Route } from '../../routes/entities/route.entity'; import { formatRouteLabel, Route } from '../../routes/entities/route.entity';
import { WagonMovement } from '../../wagons/entities/wagon-movement.entity';
import { Train } from '../../trains/entities/train.entity';
import { TrainSetLocomotive } from '../../train-sets/entities/train-set-locomotive.entity';
import { TrainSetWagon } from '../../train-sets/entities/train-set-wagon.entity'; import { TrainSetWagon } from '../../train-sets/entities/train-set-wagon.entity';
import { TrainSet } from '../../train-sets/entities/train-set.entity'; import { TrainSet } from '../../train-sets/entities/train-set.entity';
import { ScheduleWagonAdjustmentLog } from '../../train-schedules/entities/schedule-wagon-adjustment-log.entity';
import { TrainScheduleBooking } from '../../train-schedules/entities/train-schedule-booking.entity'; import { TrainScheduleBooking } from '../../train-schedules/entities/train-schedule-booking.entity';
import { TrainSchedule } from '../../train-schedules/entities/train-schedule.entity'; import { TrainSchedule } from '../../train-schedules/entities/train-schedule.entity';
import { WagonAllocationContainerItem } from '../../train-schedules/entities/wagon-allocation-container-item.entity';
import { WagonBookingAllocation } from '../../train-schedules/entities/wagon-booking-allocation.entity'; import { WagonBookingAllocation } from '../../train-schedules/entities/wagon-booking-allocation.entity';
import { TrainScheduleBookingsRepository } from '../../train-schedules/train-schedule-bookings.repository'; import { TrainScheduleBookingsRepository } from '../../train-schedules/train-schedule-bookings.repository';
import { TrainSchedulesRepository } from '../../train-schedules/train-schedules.repository'; import { TrainSchedulesRepository } from '../../train-schedules/train-schedules.repository';
import { TrainCompositionRemovalLogRepository } from '../../train-schedules/train-composition-removal-log.repository';
import { WagonAllocationBulkLoadsRepository } from '../../train-schedules/wagon-allocation-bulk-loads.repository'; import { WagonAllocationBulkLoadsRepository } from '../../train-schedules/wagon-allocation-bulk-loads.repository';
import { WagonAllocationContainerItemsRepository } from '../../train-schedules/wagon-allocation-container-items.repository'; import { WagonAllocationContainerItemsRepository } from '../../train-schedules/wagon-allocation-container-items.repository';
import { WagonBookingAllocationsRepository } from '../../train-schedules/wagon-booking-allocations.repository'; import { WagonBookingAllocationsRepository } from '../../train-schedules/wagon-booking-allocations.repository';
import { Yard } from '../../rule-engine/entities/yard.entity';
import { WagonType } from '../../wagon-types/entities/wagon-type.entity'; import { WagonType } from '../../wagon-types/entities/wagon-type.entity';
import { WagonTypesRepository } from '../../wagon-types/wagon-types.repository'; import { WagonTypesRepository } from '../../wagon-types/wagon-types.repository';
import { Wagon } from '../../wagons/entities/wagon.entity'; import { Wagon } from '../../wagons/entities/wagon.entity';
import { AdjustScheduleConsistDto } from '../dto/adjust-schedule-consist.dto';
import { AssignBookingsDto } from '../dto/assign-bookings.dto'; import { AssignBookingsDto } from '../dto/assign-bookings.dto';
import { CreateContainerTrainScheduleDto } from '../dto/create-container-train-schedule.dto'; import { CreateContainerTrainScheduleDto } from '../dto/create-container-train-schedule.dto';
import { GetEligibleBookingsDto } from '../dto/get-eligible-bookings.dto'; import { GetEligibleBookingsDto } from '../dto/get-eligible-bookings.dto';
import { GetEligibleBulkBookingsDto } from '../dto/get-eligible-bulk-bookings.dto'; import { GetEligibleBulkBookingsDto } from '../dto/get-eligible-bulk-bookings.dto';
import { GetEligibleContainerBookingsDto } from '../dto/get-eligible-container-bookings.dto'; import { GetEligibleContainerBookingsDto } from '../dto/get-eligible-container-bookings.dto';
import {
ListTrainSchedulesQueryDto,
TrainScheduleFreightType,
} from '../dto/list-train-schedules-query.dto';
import { PinWagonsDto } from '../dto/pin-wagons.dto'; import { PinWagonsDto } from '../dto/pin-wagons.dto';
import { MoveWagonLoadDto } from '../dto/move-wagon-load.dto';
import { UpdateContainerItemDto } from '../dto/update-container-item.dto';
import { UpdateImportLoadingStatusDto } from '../dto/update-import-loading-status.dto';
import { PreviewBulkTrainScheduleDto } from '../dto/preview-bulk-train-schedule.dto'; import { PreviewBulkTrainScheduleDto } from '../dto/preview-bulk-train-schedule.dto';
import { PreviewContainerTrainScheduleDto } from '../dto/preview-container-train-schedule.dto'; import { PreviewContainerTrainScheduleDto } from '../dto/preview-container-train-schedule.dto';
import { PreviewTrainScheduleDto } from '../dto/preview-train-schedule.dto'; import { PreviewTrainScheduleDto } from '../dto/preview-train-schedule.dto';
import { TrainSchedulingGlobalRules } from '../entities/train-scheduling-global-rules.entity'; import { TrainSchedulingGlobalRules } from '../entities/train-scheduling-global-rules.entity';
import { UpdateTrainSchedulingGlobalRulesDto } from '../dto/update-train-scheduling-global-rules.dto'; import { UpdateTrainSchedulingGlobalRulesDto } from '../dto/update-train-scheduling-global-rules.dto';
>>>>>>> Stashed changes:apps/edr-freight-api/src/modules/train-scheduling/services/train-scheduling.service.ts
import { import {
ImportDjiboutiOperation, ImportDjiboutiOperation,
type ImportDjiboutiDocumentType, type ImportDjiboutiDocumentType,
} from './entities/import-djibouti-operation.entity'; } from '../entities/import-djibouti-operation.entity';
import { import {
ImportDjiboutiActionDto, ImportDjiboutiActionDto,
UploadImportDjiboutiDocumentDto, UploadImportDjiboutiDocumentDto,
} from './dto/import-djibouti-operation.dto'; } from '../dto/import-djibouti-operation.dto';
import { UpdateTrainSchedulingGlobalRulesDto } from './dto/update-train-scheduling-global-rules.dto'; import { UpdateScheduleWindowRuleDto } from '../dto/update-schedule-window-rule.dto';
import { UpdateScheduleWindowRuleDto } from './dto/update-schedule-window-rule.dto'; import { UpdateScheduleDateDto } from '../dto/update-schedule-date.dto';
import { UpdateScheduleDateDto } from './dto/update-schedule-date.dto'; import { MaintenanceRescheduleDto } from '../dto/maintenance-reschedule.dto';
import { MaintenanceRescheduleDto } from './dto/maintenance-reschedule.dto'; import { type BookingWindowConfig } from '../booking-window.config';
import { type BookingWindowConfig } from './booking-window.config'; import { BookingWindowGateway } from '../booking-window.gateway';
import { BookingWindowGateway } from './booking-window.gateway'; import { BookingNotifierService } from '../booking-notifier.service';
import { BookingNotifierService } from './booking-notifier.service'; import { BookingBatchService } from '../booking-batch.service';
import { BookingBatchService } from './booking-batch.service';
import { import {
computeFleetAvailability, computeFleetAvailability,
summarizeFleetWarnings, summarizeFleetWarnings,
@@ -149,7 +115,7 @@ import {
planWagonsWithStock, planWagonsWithStock,
type AllowedWagonTypeMap, type AllowedWagonTypeMap,
type WagonStock, type WagonStock,
} from './wagon-plan-flex.util'; } from '../wagon-plan-flex.util';
import { import {
containerWagonsForLines, containerWagonsForLines,
expandBookingContainerUnits, expandBookingContainerUnits,
@@ -163,11 +129,10 @@ import {
validateMixedTrainLimitsPerEdge, validateMixedTrainLimitsPerEdge,
type ContainerPlacementInput, type ContainerPlacementInput,
type WagonPlanSlot, type WagonPlanSlot,
<<<<<<< Updated upstream:apps/edr-freight-api/src/modules/train-scheduling/train-scheduling.service.ts } from '../utils/wagon-plan.util';
} from './wagon-plan.util'; import { CorridorBudget } from '../corridor-capacity.util';
import { CorridorBudget } from './corridor-capacity.util'; import { deriveScheduleDirection } from '../utils/derive-schedule-direction.util';
import { deriveScheduleDirection } from './derive-schedule-direction.util'; import { pickLowestFreeNumber, pickTrainNumberPool } from '../train-number.util';
import { pickLowestFreeNumber, pickTrainNumberPool } from './train-number.util';
import { import {
bookingCargoTons, bookingCargoTons,
bulkItemsFitFor, bulkItemsFitFor,
@@ -179,7 +144,7 @@ import {
wagonTypeDimensionsFromEntity, wagonTypeDimensionsFromEntity,
LocomotiveLimits, LocomotiveLimits,
WagonTypeDimensions, WagonTypeDimensions,
} from './train-capacity.util'; } from '../train-capacity.util';
import { import {
DEFAULT_BULK_WAGON_CAPACITY_TONS, DEFAULT_BULK_WAGON_CAPACITY_TONS,
DEFAULT_BULK_WAGON_LENGTH_METERS, DEFAULT_BULK_WAGON_LENGTH_METERS,
@@ -188,8 +153,8 @@ import {
DEFAULT_CONTAINER_WAGON_LENGTH_METERS, DEFAULT_CONTAINER_WAGON_LENGTH_METERS,
DEFAULT_CONTAINER_WAGON_TARE_TONS, DEFAULT_CONTAINER_WAGON_TARE_TONS,
paymentDrainEndsAtIso, paymentDrainEndsAtIso,
} from './booking-batch.constants'; } from '../booking-batch.constants';
import { orderConsistWagons } from './consist-order.util'; import { orderConsistWagons } from '../consist-order.util';
import { import {
computeExportWindowTimes, computeExportWindowTimes,
computeImportWindowTimes, computeImportWindowTimes,
@@ -197,35 +162,22 @@ import {
eatDay, eatDay,
eatDayToUtc, eatDayToUtc,
shiftEatDay, shiftEatDay,
} from './batch-window.util'; } from '../batch-window.util';
import { TrainCheckpointEvent } from './entities/train-checkpoint-event.entity'; import { TrainCheckpointEvent } from '../entities/train-checkpoint-event.entity';
import { BookingJourneyService } from './booking-journey.service'; import { BookingJourneyService } from '../booking-journey.service';
import { TrainCheckpointEventsRepository } from './train-checkpoint-events.repository'; import { TrainCheckpointEventsRepository } from '../repositories/train-checkpoint-events.repository';
import { RecordCheckpointDto } from './dto/record-checkpoint.dto'; import { RecordCheckpointDto } from '../dto/record-checkpoint.dto';
import { RouteMilestone } from '../routes/entities/route-milestone.entity'; import { RouteMilestone } from '../../routes/entities/route-milestone.entity';
import { deriveTradeDirection } from '../../common/derive-trade-direction.util'; import { deriveTradeDirection } from '../../../common/derive-trade-direction.util';
import { WarehouseInventoryService } from '../warehouses/warehouse-inventory.service'; import { WarehouseInventoryService } from '../../warehouses/warehouse-inventory.service';
import { WarehouseReleaseDocumentService } from '../warehouses/warehouse-release-document.service'; import { WarehouseReleaseDocumentService } from '../../warehouses/warehouse-release-document.service';
import { import {
autoFillPlacements, autoFillPlacements,
findMissingContainerNumberIssues, findMissingContainerNumberIssues,
isPlaceholderContainerNumber, isPlaceholderContainerNumber,
placementsForBookings, placementsForBookings,
type ContainerUnitForPlacement, type ContainerUnitForPlacement,
} from './container-placement.util'; } from '../container-placement.util';
=======
} from '../utils/wagon-plan.util';
import {
getDefaultContainerWagonTypeCode,
pickBulkWagonType,
} from '../utils/wagon-type-resolver.util';
import { deriveScheduleDirection } from '../utils/derive-schedule-direction.util';
import { flipReadiness, wagonReadinessMatchesSchedule } from '../utils/wagon-readiness.util';
import { TrainCheckpointEvent } from '../entities/train-checkpoint-event.entity';
import { TrainCheckpointEventsRepository } from '../repositories/train-checkpoint-events.repository';
import { RecordCheckpointDto } from '../dto/record-checkpoint.dto';
import { RouteMilestone } from '../../routes/entities/route-milestone.entity';
>>>>>>> Stashed changes:apps/edr-freight-api/src/modules/train-scheduling/services/train-scheduling.service.ts
const SCHEDULABLE_BOOKING_STATUSES = ['PAID'] as const; const SCHEDULABLE_BOOKING_STATUSES = ['PAID'] as const;
@@ -5769,7 +5721,6 @@ export class TrainSchedulingService {
return null; return null;
} }
<<<<<<< Updated upstream:apps/edr-freight-api/src/modules/train-scheduling/train-scheduling.service.ts
/** /**
* Insert a schedule with a freshly generated S-<year>-NNNNN reference, retrying * Insert a schedule with a freshly generated S-<year>-NNNNN reference, retrying
* past a concurrent insert that grabbed the same sequence (the unique index * past a concurrent insert that grabbed the same sequence (the unique index
@@ -5800,10 +5751,7 @@ export class TrainSchedulingService {
throw new ConflictException('Could not allocate a unique schedule reference'); throw new ConflictException('Could not allocate a unique schedule reference');
} }
private mapScheduleListItem(schedule: import('../train-schedules/entities/train-schedule.entity').TrainSchedule) {
=======
private mapScheduleListItem(schedule: import('../../train-schedules/entities/train-schedule.entity').TrainSchedule) { private mapScheduleListItem(schedule: import('../../train-schedules/entities/train-schedule.entity').TrainSchedule) {
>>>>>>> Stashed changes:apps/edr-freight-api/src/modules/train-scheduling/services/train-scheduling.service.ts
return { return {
id: schedule.id, id: schedule.id,
reference: schedule.reference ?? null, reference: schedule.reference ?? null,
@@ -6959,7 +6907,7 @@ export class TrainSchedulingService {
originYardId?: string, originYardId?: string,
destinationYardId?: string, destinationYardId?: string,
): Promise< ): Promise<
import('../train-schedules/entities/train-schedule.entity').TrainSchedule[] import('../../train-schedules/entities/train-schedule.entity').TrainSchedule[]
> { > {
const schedules = await this.trainSchedulesRepository.findAll({ const schedules = await this.trainSchedulesRepository.findAll({
where: { where: {

View File

@@ -24,10 +24,9 @@ import { WarehousesModule } from '../warehouses/warehouses.module';
import { TrainCheckpointEvent } from './entities/train-checkpoint-event.entity'; import { TrainCheckpointEvent } from './entities/train-checkpoint-event.entity';
import { ImportDjiboutiOperation } from './entities/import-djibouti-operation.entity'; import { ImportDjiboutiOperation } from './entities/import-djibouti-operation.entity';
import { TrainSchedulingGlobalRules } from './entities/train-scheduling-global-rules.entity'; import { TrainSchedulingGlobalRules } from './entities/train-scheduling-global-rules.entity';
<<<<<<< Updated upstream import { TrainCheckpointEventsRepository } from './repositories/train-checkpoint-events.repository';
import { TrainCheckpointEventsRepository } from './train-checkpoint-events.repository'; import { TrainSchedulingController } from './controllers/train-scheduling.controller';
import { TrainSchedulingController } from './train-scheduling.controller'; import { TrainSchedulingService } from './services/train-scheduling.service';
import { TrainSchedulingService } from './train-scheduling.service';
import { BookingBatchService } from './booking-batch.service'; import { BookingBatchService } from './booking-batch.service';
import { BookingNotifierService } from './booking-notifier.service'; import { BookingNotifierService } from './booking-notifier.service';
import { BookingWindowGateway } from './booking-window.gateway'; import { BookingWindowGateway } from './booking-window.gateway';
@@ -42,11 +41,6 @@ import { WagonMovement } from '../wagons/entities/wagon-movement.entity';
import { NotificationsModule } from '../notifications/notifications.module'; import { NotificationsModule } from '../notifications/notifications.module';
import { NotificationInboxModule } from '../notification-inbox/notification-inbox.module'; import { NotificationInboxModule } from '../notification-inbox/notification-inbox.module';
import { ContractsModule } from '../contracts/contracts.module'; import { ContractsModule } from '../contracts/contracts.module';
=======
import { TrainCheckpointEventsRepository } from './repositories/train-checkpoint-events.repository';
import { TrainSchedulingController } from './controllers/train-scheduling.controller';
import { TrainSchedulingService } from './services/train-scheduling.service';
>>>>>>> Stashed changes
@Module({ @Module({
imports: [ imports: [

View File

@@ -1,4 +1,4 @@
import { deriveTradeDirection } from '../../common/derive-trade-direction.util'; import { deriveTradeDirection } from '../../../common/derive-trade-direction.util';
/** @deprecated Use deriveTradeDirection from common — kept as alias for train scheduling. */ /** @deprecated Use deriveTradeDirection from common — kept as alias for train scheduling. */
export const deriveScheduleDirection = deriveTradeDirection; export const deriveScheduleDirection = deriveTradeDirection;

View File

@@ -1,11 +1,6 @@
<<<<<<< Updated upstream:apps/edr-freight-api/src/modules/train-scheduling/fleet-plan.util.ts import { bookingCargoTons, bulkWagonsForAllowedTypes } from '../train-capacity.util';
import { bookingCargoTons, bulkWagonsForAllowedTypes } from './train-capacity.util';
import type { Booking } from '../bookings/entities/booking.entity';
import type { WagonType } from '../wagon-types/entities/wagon-type.entity';
=======
import type { Booking } from '../../bookings/entities/booking.entity'; import type { Booking } from '../../bookings/entities/booking.entity';
import type { WagonType } from '../../wagon-types/entities/wagon-type.entity'; import type { WagonType } from '../../wagon-types/entities/wagon-type.entity';
>>>>>>> Stashed changes:apps/edr-freight-api/src/modules/train-scheduling/utils/fleet-plan.util.ts
import { import {
buildBulkWagonPlan, buildBulkWagonPlan,
buildContainerWagonPlan, buildContainerWagonPlan,

View File

@@ -1,9 +1,8 @@
import { AllocationLoadType } from '@edr/types'; import { AllocationLoadType } from '@edr/types';
<<<<<<< Updated upstream:apps/edr-freight-api/src/modules/train-scheduling/wagon-plan.util.ts import { Booking } from '../../bookings/entities/booking.entity';
import { Booking } from '../bookings/entities/booking.entity'; import { containersPerWagonForSize, wagonsPerUnitForSize } from '../../rule-engine/container-type.util';
import { containersPerWagonForSize, wagonsPerUnitForSize } from '../rule-engine/container-type.util'; import { WagonType } from '../../wagon-types/entities/wagon-type.entity';
import { WagonType } from '../wagon-types/entities/wagon-type.entity';
import { import {
bookingCargoTons, bookingCargoTons,
bulkItemsFitFor, bulkItemsFitFor,
@@ -11,11 +10,7 @@ import {
bulkTonsPerWagon, bulkTonsPerWagon,
bulkTonWagonsRequired, bulkTonWagonsRequired,
consistViolations, consistViolations,
} from './train-capacity.util'; } from '../train-capacity.util';
=======
import { Booking } from '../../bookings/entities/booking.entity';
import { WagonType } from '../../wagon-types/entities/wagon-type.entity';
>>>>>>> Stashed changes:apps/edr-freight-api/src/modules/train-scheduling/utils/wagon-plan.util.ts
export const MAX_TRAIN_WEIGHT_TONS = 3500; export const MAX_TRAIN_WEIGHT_TONS = 3500;
export const MAX_TRAIN_LENGTH_METERS = 760; export const MAX_TRAIN_LENGTH_METERS = 760;

View File

@@ -4,7 +4,7 @@ import {
applyWagonOrderReversal, applyWagonOrderReversal,
planWagonsWithStock, planWagonsWithStock,
} from './wagon-plan-flex.util'; } from './wagon-plan-flex.util';
import type { WagonPlanSlot } from './wagon-plan.util'; import type { WagonPlanSlot } from './utils/wagon-plan.util';
const nw6: WagonType = { const nw6: WagonType = {
id: 'wt-nw6', id: 'wt-nw6',

View File

@@ -11,7 +11,7 @@ import {
sortBookingsForScheduling, sortBookingsForScheduling,
type BookingWagonShortage, type BookingWagonShortage,
type DeferredBookingRow, type DeferredBookingRow,
} from './fleet-plan.util'; } from './utils/fleet-plan.util';
import { import {
MAX_TEU_SLOTS_PER_WAGON, MAX_TEU_SLOTS_PER_WAGON,
containerWagonsForLines, containerWagonsForLines,
@@ -21,7 +21,7 @@ import {
teuSlotsForSizeFt, teuSlotsForSizeFt,
type SlotLoadType, type SlotLoadType,
type WagonPlanSlot, type WagonPlanSlot,
} from './wagon-plan.util'; } from './utils/wagon-plan.util';
/** /**
* Wagon types allowed to carry each container type / bulk cargo type — the * Wagon types allowed to carry each container type / bulk cargo type — the