diff --git a/src/app/useCases/IncidentUseCases/IncidentUseCases.ts b/src/app/useCases/IncidentUseCases/IncidentUseCases.ts index 040f741..63575df 100644 --- a/src/app/useCases/IncidentUseCases/IncidentUseCases.ts +++ b/src/app/useCases/IncidentUseCases/IncidentUseCases.ts @@ -8,6 +8,7 @@ import { type CountFreightIncidentWhereRequestDTO, } from 'domain/dto/repositories/whereDtos/FreightIncidentRepository.Dto'; import { Incident } from 'domain/entities/OrdersEntities/IncidentEntity/Incident'; +import { OrderProcessing } from 'domain/entities/OrdersEntities/OrderProcessing/OrderProcessing'; import { IncidentRepository } from 'domain/repositories/IncidentResitory'; import { type CreateIncidentDTO } from 'app/dtos/IncidentDto/CreateIncidentDto'; @@ -45,14 +46,36 @@ export class IncidentUseCases { return this.incidentRepository.findAllIncident(request); } async createIncident(data: CreateIncidentDTO) { - await this.orderProcessing.getOrderProcessing({ + const order = await this.orderProcessing.getOrderProcessing({ id: data.order_process_id, }); - - const newExpense = new Incident({ - ...data, + const orderProcesingEntity = new OrderProcessing({ + created_by: undefined, + driver_id: undefined, + order_processing_number: undefined, + start_at: undefined, + status: 'IN_INCIDENT', + total_distance: undefined, + total_spend_liters: undefined, + total_spending_money: undefined, + updated_by: data.updated_by, + vehicle_id: undefined, + created_at: undefined, + disconnect_legal_order: undefined, + disconnect_physical_customer_order: undefined, + end_at: undefined, + id: undefined, + legal_customer_order_ids: undefined, + physical_customer_order_ids: undefined, + updated_at: new Date(), }); + await this.orderProcessing.updateOrderProcessing( + order.id, + orderProcesingEntity, + ); + const newExpense = new Incident({ ...data }); + return this.incidentRepository.createIncident(newExpense); } diff --git a/src/app/useCases/OrderProcessingUseCases/OrderProcessingUseCases.ts b/src/app/useCases/OrderProcessingUseCases/OrderProcessingUseCases.ts index 52baf09..fb4a309 100644 --- a/src/app/useCases/OrderProcessingUseCases/OrderProcessingUseCases.ts +++ b/src/app/useCases/OrderProcessingUseCases/OrderProcessingUseCases.ts @@ -113,21 +113,21 @@ export class OrderProcessingUseCases { await this.vehicleUseCase.getVehicle({ vehicleId: data.vehicle_id, }); - if (data.legal_customer_order_ids.length > 0) + if (data?.legal_customer_order_ids?.length > 0) for (const legalOrderId of data.legal_customer_order_ids) await this.legalClientOrderUseCase.getLegalClientOrder({ id: legalOrderId, }); - if (data.physical_customer_order_ids.length > 0) + if (data?.physical_customer_order_ids?.length > 0) for (const physicalCustomerId of data.legal_customer_order_ids) await this.physicalCusotmerOrderUseCase.getPhysicalCustomerOrder({ id: physicalCustomerId, }); - if (data.disconnect_legal_order) + if (data?.disconnect_legal_order) await this.legalClientOrderUseCase.getLegalClientOrder({ id: data.disconnect_legal_order, }); - else if (data.disconnect_physical_customer_order) + else if (data?.disconnect_physical_customer_order) await this.physicalCusotmerOrderUseCase.getPhysicalCustomerOrder({ id: data.disconnect_physical_customer_order, }); @@ -208,6 +208,54 @@ export class OrderProcessingUseCases { return this.orderProcessingResitory.deleteManyOrderProcessing(ids); } + + async completedOrder(data: GetOrderProcessingDTO, updatedBy: string) { + if (!data.id && !data.order_processing_number && !data.vehicleData) + throw new GraphQLError( + 'IS NECESSARY AN ID, ORDER PROCESSING NUMBER OR VEHICLE DATA', + { + extensions: { code: HttpStatus.BAD_REQUEST }, + }, + ); + const orderProcessing = + await this.orderProcessingResitory.findOrderProcessing(data); + + if (!orderProcessing) + throw new GraphQLError('ORDER PROCESSING FOR NOT FOUND', { + extensions: { code: HttpStatus.NOT_FOUND }, + }); + + if (orderProcessing.status == 'COMPLETE') + throw new GraphQLError('ORDER PROCESSING HAS ALREADY BEEN COMPLETED', { + extensions: { code: HttpStatus.NOT_FOUND }, + }); + const orderProcesingEntity = new OrderProcessing({ + created_by: undefined, + driver_id: undefined, + order_processing_number: undefined, + start_at: undefined, + status: 'COMPLETE', + total_distance: undefined, + total_spend_liters: undefined, + total_spending_money: undefined, + updated_by: updatedBy, + vehicle_id: undefined, + created_at: undefined, + disconnect_legal_order: undefined, + disconnect_physical_customer_order: undefined, + end_at: undefined, + id: undefined, + legal_customer_order_ids: undefined, + physical_customer_order_ids: undefined, + updated_at: new Date(), + }); + + return this.orderProcessingResitory.updateOrderProcessing( + orderProcessing.id, + orderProcesingEntity, + ); + } + private async verifyOrderProcessingExist(id: string) { const exist = await this.orderProcessingResitory.findOrderProcessing({ id, diff --git a/src/infra/database/prisma/services/prismaDTO/OrderProcessingPrismaDto.ts b/src/infra/database/prisma/services/prismaDTO/OrderProcessingPrismaDto.ts index d568f1a..4c344aa 100644 --- a/src/infra/database/prisma/services/prismaDTO/OrderProcessingPrismaDto.ts +++ b/src/infra/database/prisma/services/prismaDTO/OrderProcessingPrismaDto.ts @@ -56,14 +56,14 @@ export class OrderProcessingPrismaDTO { public static EntityToPrismaUpdate(orderProcessing: OrderProcessing) { const orderprocessingUptate: Prisma.OrderProcessingUpdateInput = { - end_at: orderProcessing.end_at, + end_at: orderProcessing?.end_at, - start_at: orderProcessing.start_at, - total_distance: orderProcessing.total_distance, - total_spend_liters: orderProcessing.total_spend_liters, - total_spending_money: orderProcessing.total_spending_money, - updated_at: orderProcessing.updated_at, - status: orderProcessing.status, + start_at: orderProcessing?.start_at, + total_distance: orderProcessing?.total_distance, + total_spend_liters: orderProcessing?.total_spend_liters, + total_spending_money: orderProcessing?.total_spending_money, + updated_at: orderProcessing?.updated_at, + status: orderProcessing?.status, LegalClientOrder: { connect: orderProcessing.legal_customer_order_ids?.length > 0 @@ -71,29 +71,29 @@ export class OrderProcessingPrismaDTO { id: legalOrderId, })) : undefined, - disconnect: orderProcessing.disconnect_legal_order - ? { id: orderProcessing.disconnect_legal_order } + disconnect: orderProcessing?.disconnect_legal_order + ? { id: orderProcessing?.disconnect_legal_order } : undefined, }, PhysicalCustomerOrder: { connect: orderProcessing.physical_customer_order_ids?.length > 0 - ? orderProcessing.physical_customer_order_ids.map( + ? orderProcessing.physical_customer_order_ids?.map( physicalCustomerId => ({ id: physicalCustomerId }), ) : undefined, - disconnect: orderProcessing.disconnect_physical_customer_order - ? { id: orderProcessing.disconnect_physical_customer_order } + disconnect: orderProcessing?.disconnect_physical_customer_order + ? { id: orderProcessing?.disconnect_physical_customer_order } : undefined, }, Vehicle: { - connect: orderProcessing.vehicle_id - ? { id: orderProcessing.vehicle_id } + connect: orderProcessing?.vehicle_id + ? { id: orderProcessing?.vehicle_id } : undefined, }, - OwnDriver: orderProcessing.driver_id + OwnDriver: orderProcessing?.driver_id ? { connect: { id: orderProcessing.driver_id }, } diff --git a/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.model.ts b/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.model.ts index 6d3fb5f..76907f6 100644 --- a/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.model.ts +++ b/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.model.ts @@ -14,8 +14,6 @@ export abstract class OrderProcessingModel implements IOrderProcessing { @Field() order_processing_number: string; - @Field() - order_processing: string; @Field() id: string; @Field(() => Date) @@ -32,7 +30,7 @@ export abstract class OrderProcessingModel implements IOrderProcessing { total_spending_money: number; @Field(() => Date) start_at: Date; - @Field(() => Date) + @Field(() => Date, { nullable: true }) end_at?: Date; @Field() driver_id: string; diff --git a/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.resolver.ts b/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.resolver.ts index bb008d5..b2f3382 100644 --- a/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.resolver.ts +++ b/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.resolver.ts @@ -82,6 +82,7 @@ export class OrderProcessingResolver { return this.orderProcessingUseCase.updateOrderProcessing(id, data); } + @Mutation(() => [OrderProcessingModel]) async updateManyOrderProcessing( @Args({ name: 'data', type: () => [OrderProcessingUpdateManyInput] }) @@ -102,6 +103,16 @@ export class OrderProcessingResolver { ) { return this.orderProcessingUseCase.deleteManyOrderProcessing(ids); } + + @Mutation(() => OrderProcessingModel) + async completedOrder( + @Args() + data: GetOrderProcessingArgs, + @CurrentUser() + user: User, + ) { + return this.orderProcessingUseCase.completedOrder(data, user.id); + } @ResolveField(() => VehicleCarModel) async Vehicle(@Parent() orderProcessing: OrderProcessingInput) { return this.vehicleUseCase.getVehicle({ diff --git a/src/infra/graphql/generated/schema.gql b/src/infra/graphql/generated/schema.gql index 356497a..069d1de 100644 --- a/src/infra/graphql/generated/schema.gql +++ b/src/infra/graphql/generated/schema.gql @@ -1570,6 +1570,7 @@ input ManifestWhereInput { } type Mutation { + completedOrder(id: String, order_processing: String, vehicleData: GetVehicleTypeArgs): OrderProcessingModel! createCarrierCompany(data: CarrierCompanyInput!): CarrierCompanyModel! createCiotForLegalClient(ciotForLegalClientInput: CiotForLegalClientInput!): CiotForLegalClientModel! createCompanyVehicle(CompanyVehicleInput: CompanyVehicleInput!): CompanyVehicleIModel! @@ -1952,9 +1953,8 @@ type OrderProcessingModel { created_at: Timestamp! created_by: String! driver_id: String! - end_at: Timestamp! + end_at: Timestamp id: String! - order_processing: String! order_processing_number: String! start_at: Timestamp! status: StatusOrder!