private async Task ValidateBrakeAbsHasNoChangeRequest(BrakeABS brakeAbs) { IList <BrakeABS> brakeAbssFromDb = await _brakeABSRepositoryService.GetAsync(x => x.Name.ToLower().Equals(brakeAbs.Name.ToLower()) && x.DeleteDate == null); if (brakeAbssFromDb != null && brakeAbssFromDb.Any()) { throw new RecordAlreadyExist("Brake ABS already exists"); } // vehicle var changeRequestId = await ChangeRequestBusinessService.ChangeRequestExist <BrakeABS>( x => x.Name.ToLower().Equals(brakeAbs.Name.ToLower())); if (changeRequestId > 0) { throw new ChangeRequestExistException($"There is already an open CR ID {changeRequestId} for BrakeABS Name."); } }
private async Task ValidateBrakeTypeHasNoChangeRequest(BrakeType brakeType) { IList <BrakeType> brakeTypesFromDb = await _brakeTypeRepositoryService.GetAsync(x => x.Name.ToLower().Equals(brakeType.Name.ToLower()) && x.DeleteDate == null); if (brakeTypesFromDb != null && brakeTypesFromDb.Any()) { throw new RecordAlreadyExist("Brake Type already exists"); } var changerequestid = await ChangeRequestBusinessService.ChangeRequestExist <BrakeType>( x => x.Name.ToLower().Equals(brakeType.Name.ToLower())); if (changerequestid > 0) { throw new ChangeRequestExistException("There is already an open CR ID " + changerequestid + " with same Brake Type Name."); } }
private async Task ValidateBedLengthHasNoChangeRequest(BedLength bedLength) { IList <BedLength> bedLengthsFromDb = await _bedLengthRepositoryService.GetAsync(x => x.Length.Equals(bedLength.Length) && x.BedLengthMetric.Equals(bedLength.BedLengthMetric) && x.DeleteDate == null); if (bedLengthsFromDb != null && bedLengthsFromDb.Any()) { throw new RecordAlreadyExist("Bed Length already exists"); } var changerequestid = await ChangeRequestBusinessService.ChangeRequestExist <BedLength>( x => x.Length.Equals(bedLength.Length) && x.BedLengthMetric.Equals(bedLength.BedLengthMetric)); if (changerequestid > 0) { throw new ChangeRequestExistException("There is already an open CR ID " + changerequestid + " with same Bed Length and Bed Length Metric."); } }
private async Task ValidateVehicleTypeGroupHasNoChangeRequest(VehicleTypeGroup vehicleTypeGroup) { IList <VehicleTypeGroup> vehicleTypeGroupsFromDb = await _vehicleTypeGroupRepositoryService.GetAsync(x => x.Name.ToLower().Equals(vehicleTypeGroup.Name.ToLower()) && x.DeleteDate == null); if (vehicleTypeGroupsFromDb != null && vehicleTypeGroupsFromDb.Any()) { throw new RecordAlreadyExist("Vehicle Type Group already exists"); } var changerequestid = await ChangeRequestBusinessService.ChangeRequestExist <VehicleTypeGroup>( x => x.Name.ToLower().Equals(vehicleTypeGroup.Name.ToLower())); if (changerequestid > 0) { throw new ChangeRequestExistException($"There is already an open CR ID with {changerequestid} same Vehicle Type Group Name."); } }
private async Task ValidateWheelBaseHasNoChangeRequest(WheelBase wheelBase) { IList <WheelBase> wheelBaseFromDb = await _wheelBaseRepositoryService.GetAsync(x => x.Base.Equals(wheelBase.Base) && x.WheelBaseMetric.Equals(wheelBase.WheelBaseMetric) && x.DeleteDate == null); if (wheelBaseFromDb != null && wheelBaseFromDb.Any()) { throw new RecordAlreadyExist("Wheel Base already exists"); } var changerequestid = await ChangeRequestBusinessService.ChangeRequestExist <WheelBase>( x => x.Base.Equals(wheelBase.Base) && x.WheelBaseMetric.Equals(wheelBase.WheelBaseMetric)); if (changerequestid > 0) { throw new ChangeRequestExistException("There is already an open CR ID " + changerequestid + " with same Wheel Base and Wheel Base Metric."); } }
private async Task ValidateBodyNumDoorsHasNoChangeRequest(BodyNumDoors bodyNumDoors) { IList <BodyNumDoors> bodyNumDoorsFromDb = await _bodyNumDoorsRepositoryService.GetAsync(x => x.NumDoors.ToLower().Equals(bodyNumDoors.NumDoors.ToLower()) && x.DeleteDate == null); if (bodyNumDoorsFromDb != null && bodyNumDoorsFromDb.Any()) { throw new RecordAlreadyExist("Body NumDoors already exists"); } // vehicle var changeRequestId = await ChangeRequestBusinessService.ChangeRequestExist <BodyNumDoors>( x => x.NumDoors.ToLower().Equals(bodyNumDoors.NumDoors.ToLower())); if (changeRequestId > 0) { throw new ChangeRequestExistException($"There is already an open CR ID {changeRequestId} for the same BodyNumDoors."); } }
private async Task ValidateEngineVersionHasNoChangeRequest(EngineVersion engineVersion) { IList <EngineVersion> engineVersionsFromDb = await _engineVersionRepositoryService.GetAsync(x => x.EngineVersionName.ToLower().Equals(engineVersion.EngineVersionName.ToLower()) && x.DeleteDate == null); if (engineVersionsFromDb != null && engineVersionsFromDb.Any()) { throw new RecordAlreadyExist(" Engine Version already exists"); } var changerequestid = await ChangeRequestBusinessService.ChangeRequestExist <EngineVersion>( x => x.EngineVersionName.ToLower().Equals(engineVersion.EngineVersionName.ToLower())); if (changerequestid > 0) { throw new ChangeRequestExistException("There is already an open CR ID " + changerequestid + " with same Engine Version Name."); } }
private async Task ValidateVehicleToWheelBaseLookUpHasNoChangeRequest(VehicleToWheelBase vehicleToWheelBase) { var changerRequestId = await ChangeRequestBusinessService.ChangeRequestExist(typeof(Vehicle).Name, vehicleToWheelBase.VehicleId); if (changerRequestId > 0) { throw new ChangeRequestExistException($"There is already an open CR ID {changerRequestId} for Vehicle Id : {vehicleToWheelBase.VehicleId}."); } var changerequestId = await ChangeRequestBusinessService.ChangeRequestExist(typeof(WheelBase).Name, vehicleToWheelBase.WheelBaseId); if (changerequestId > 0) { throw new ChangeRequestExistException($"There is already an open CR ID {changerequestId} for Wheel Base ID : {vehicleToWheelBase.WheelBaseId}."); } }
private async Task ValidateVehicleToDriveTypeLookUpHasNoChangeRequest( VehicleToDriveType vehicleToDriveType) { var changerrequestid = await ChangeRequestBusinessService.ChangeRequestExist(typeof(Vehicle).Name, vehicleToDriveType.VehicleId); if (changerrequestid > 0) { throw new ChangeRequestExistException($"There is already an open CR ID {changerrequestid} for Vehicle Id : {vehicleToDriveType.VehicleId}."); } var changerequestID = await ChangeRequestBusinessService.ChangeRequestExist(typeof(DriveType).Name, vehicleToDriveType.DriveTypeId); if (changerequestID > 0) { throw new ChangeRequestExistException($"There is already an open CR ID {changerequestID} for Drive Type ID : {vehicleToDriveType.DriveTypeId}."); } }
private async Task ValidateVehicleToBrakeConfigLookUpHasNoChangeRequest( VehicleToBrakeConfig vehicleToBrakeConfig) { var changerrequestid = await ChangeRequestBusinessService.ChangeRequestExist(typeof(Vehicle).Name, vehicleToBrakeConfig.VehicleId); if (changerrequestid > 0) { throw new ChangeRequestExistException($"There is already an open CR ID {changerrequestid} for Vehicle Id : {vehicleToBrakeConfig.VehicleId}."); } var changerequestID = await ChangeRequestBusinessService.ChangeRequestExist(typeof(BrakeConfig).Name, vehicleToBrakeConfig.BrakeConfigId); if (changerequestID > 0) { throw new ChangeRequestExistException($"There is already an open CR ID {changerequestID} for Brake Config ID : {vehicleToBrakeConfig.BrakeConfigId}."); } }
private async Task ValidateVehicleLookupsHasNoChangeRequest(Vehicle entity) { long changerequestID = 0; // submodel changerequestID = await ChangeRequestBusinessService.ChangeRequestExist(typeof(SubModel).Name, entity.SubModelId); if (changerequestID > 0) { throw new ChangeRequestExistException( $"There is already an open CR ID {changerequestID} for Submodel ID : {entity.SubModelId}."); } // region changerequestID = await ChangeRequestBusinessService.ChangeRequestExist(typeof(Region).Name, entity.RegionId); if (changerequestID > 0) { throw new ChangeRequestExistException( $"There is already an open CR ID {changerequestID} for Region ID : {entity.RegionId}."); } }
public override async Task <long> SubmitUpdateChangeRequestAsync <TId>(Vehicle entity, TId id, string requestedBy, ChangeType changeType = ChangeType.None, List <ChangeRequestItemStaging> changeRequestItemStagings = null, CommentsStagingModel comment = null, List <AttachmentsModel> attachments = null, string changeContent = null) { if (entity.SubModelId.Equals(default(int)) || entity.RegionId.Equals(default(int))) { throw new ArgumentException(nameof(entity)); } if (id.Equals(default(TId))) { throw new ArgumentNullException(nameof(id)); } if (!entity.Id.Equals(id)) { throw new ArgumentException("Invalid Vehicle Id"); } var vehicleFromDb = await FindAsync(id); if (vehicleFromDb == null) { throw new NoRecordFound("No Vehicle exist"); } var existingEntry = new Vehicle() { Id = vehicleFromDb.Id, BaseVehicleId = vehicleFromDb.BaseVehicleId, SubModelId = vehicleFromDb.SubModelId, SourceName = vehicleFromDb.SourceName, SourceId = vehicleFromDb.SourceId, RegionId = vehicleFromDb.RegionId, PublicationStageId = vehicleFromDb.PublicationStageId, PublicationStageSource = vehicleFromDb.PublicationStageSource, PublicationStageDate = vehicleFromDb.PublicationStageDate, PublicationEnvironment = vehicleFromDb.PublicationEnvironment, ChangeRequestId = vehicleFromDb.ChangeRequestId, InsertDate = vehicleFromDb.InsertDate, DeleteDate = vehicleFromDb.DeleteDate, LastUpdateDate = vehicleFromDb.LastUpdateDate, VehicleToBrakeConfigCount = vehicleFromDb.VehicleToBrakeConfigCount, VehicleToBedConfigCount = vehicleFromDb.VehicleToBedConfigCount, VehicleToBodyStyleConfigCount = vehicleFromDb.VehicleToBodyStyleConfigCount }; changeType = vehicleFromDb.BaseVehicleId == entity.BaseVehicleId ? ChangeType.Modify : ChangeType.Replace; changeRequestItemStagings = changeRequestItemStagings ?? new List <ChangeRequestItemStaging>(); // Validation check for insert of new vehicle await ValidateVehicleHasNoChangeRequest(entity); await ValidateVehicleLookupsHasNoChangeRequest(entity); await ValidateBaseVehicleHasNoChangeRequest(entity); // 5. validate there is no open CR for vehicle to brake system configuration // brake system configuration var changerequestid = await ChangeRequestBusinessService.ChangeRequestExist <VehicleToBrakeConfig>( x => x.VehicleId == entity.Id); if (changerequestid > 0) { throw new ChangeRequestExistException($"There is already an open CR ID {changerequestid} for Vehicle to Brake System Configuration."); } // 6. validate there is no open CR to replace vehicle that rely on this vehicle { // NOTE: No vehicle replacement functionality implemented, yet. } //<Raja>: I don't see the difference between the above base vehicle validation and below base vehicle validation // 7. Validate that there are no open CR to the existing base vehicle. // Applicable only during Base vehicle replace if (changeType.Equals(ChangeType.Replace)) { await ValidateBaseVehicleHasNoChangeRequest(vehicleFromDb); } //Fill in the existing values to avoid being overwritten when final approve in change review screen. entity.InsertDate = vehicleFromDb.InsertDate; entity.PublicationEnvironment = vehicleFromDb.PublicationEnvironment; entity.PublicationStageId = vehicleFromDb.PublicationStageId; entity.PublicationStageDate = vehicleFromDb.PublicationStageDate; entity.PublicationStageSource = vehicleFromDb.PublicationStageSource; entity.SourceId = vehicleFromDb.SourceId; entity.SourceName = vehicleFromDb.SourceName; changeRequestItemStagings.Add(new ChangeRequestItemStaging() { ChangeType = changeType, EntityId = entity.Id.ToString(), CreatedDateTime = DateTime.UtcNow, Entity = typeof(Vehicle).Name, Payload = base.Serializer.Serialize(entity), ExistingPayload = base.Serializer.Serialize(existingEntry) }); changeContent = string.Format("{0} / {1} / {2} / {3} / {4}" , vehicleFromDb.BaseVehicle.YearId , vehicleFromDb.BaseVehicle.Make.Name , vehicleFromDb.BaseVehicle.Model.Name , vehicleFromDb.SubModel.Name , vehicleFromDb.Region.Name); // NOTE: change-request-comments-staging perfomed on base var changeRequestId = await base.SubmitUpdateChangeRequestAsync(entity, id, requestedBy, changeType, changeRequestItemStagings, comment, attachments, changeContent); vehicleFromDb.ChangeRequestId = changeRequestId; _vehicleRepositoryService.Update(vehicleFromDb); Repositories.SaveChanges(); await _vehicleIndexingService.UpdateVehicleChangeRequestIdAsync(entity.Id, changeRequestId); return(changeRequestId); }
public override async Task <long> SubmitDeleteChangeRequestAsync <TId>(Vehicle entity, TId id, string requestedBy, List <ChangeRequestItemStaging> changeRequestItemStagings = null, CommentsStagingModel comment = null, List <AttachmentsModel> attachmentsStaging = null, string changeContent = null) { if (id.Equals(default(TId))) { throw new ArgumentNullException(nameof(id)); } Vehicle vehicleFromDb = await FindAsync(id); if (vehicleFromDb == null) { throw new NoRecordFound("No Vehicle exist"); } // Serialize issue: To prevent cyclic reference. Vehicle currentVehicle = new Vehicle() { Id = vehicleFromDb.Id, BaseVehicleId = vehicleFromDb.BaseVehicleId, SubModelId = vehicleFromDb.SubModelId, SourceId = vehicleFromDb.SourceId, RegionId = vehicleFromDb.RegionId }; if (currentVehicle.BaseVehicleId.Equals(default(int))) { throw new ArgumentException(nameof(currentVehicle.BaseVehicle)); } if (!currentVehicle.Id.Equals(id)) { throw new ArgumentException("Invalid Vehicle to Brake Config Id"); } changeRequestItemStagings = changeRequestItemStagings ?? new List <ChangeRequestItemStaging>(); // validation check for delete of vehicle try { long changerequestid = 0; StringBuilder validationErrorMessage = new StringBuilder(); // 1. Validate that there is no open CR with same configuration changerequestid = await ChangeRequestBusinessService.ChangeRequestExist <Vehicle>( x => x.BaseVehicleId == vehicleFromDb.BaseVehicleId && x.SubModelId == vehicleFromDb.SubModelId && x.RegionId == vehicleFromDb.RegionId); if (changerequestid > 0) { throw new ChangeRequestExistException($"There is already an open CR ID {changerequestid} with same vehicle configuration."); } // 2. Validate that there are no open CR to base vehicle. await ValidateBaseVehicleHasNoChangeRequest(currentVehicle); changeRequestItemStagings.Add(new ChangeRequestItemStaging() { ChangeType = ChangeType.Delete, EntityId = currentVehicle.Id.ToString(), CreatedDateTime = DateTime.UtcNow, Entity = typeof(Vehicle).Name, Payload = base.Serializer.Serialize(currentVehicle) }); // 3. validate there is no open CR for vehicle to brake system configuration changerequestid = await ChangeRequestBusinessService.ChangeRequestExist <VehicleToBrakeConfig>( x => x.VehicleId == currentVehicle.Id); if (changerequestid > 0) { throw new ChangeRequestExistException($"There is already an open CR Id {changerequestid} for Vehicle to Brake System Configuration."); } //4. Validate there is no existing record with the same configuration IList <VehicleToBrakeConfig> existingVehicleToBrakeConfigs = await base.Repositories.GetRepositoryService <VehicleToBrakeConfig>() .GetAsync(item => item.VehicleId.Equals(currentVehicle.Id) && item.DeleteDate == null); if (existingVehicleToBrakeConfigs != null && existingVehicleToBrakeConfigs.Count > 0) { changeRequestItemStagings.AddRange(existingVehicleToBrakeConfigs.Select(vehicleToBrakeConfig => new ChangeRequestItemStaging() { ChangeType = ChangeType.Delete, EntityId = vehicleToBrakeConfig.Id.ToString(), CreatedDateTime = DateTime.UtcNow, Entity = typeof(VehicleToBrakeConfig).Name, Payload = base.Serializer.Serialize(new VehicleToBrakeConfig() { Id = vehicleToBrakeConfig.Id, BrakeConfigId = vehicleToBrakeConfig.BrakeConfigId, VehicleId = vehicleToBrakeConfig.VehicleId }) })); } // 4. validate there is no open CR to replace vehicle that rely on this vehicle { // NOTE: No vehicle replacement functionality implemented, yet. } // throw custom validation failed exception if (validationErrorMessage.Length > 0) { throw new Exception(validationErrorMessage.ToString()); } } catch (Exception ex) { throw new Exception("Error occured when validating.\n" + ex.Message); } changeContent = string.Format("{0} / {1} / {2} / {3} / {4}" , vehicleFromDb.BaseVehicle.YearId , vehicleFromDb.BaseVehicle.Make.Name , vehicleFromDb.BaseVehicle.Model.Name , vehicleFromDb.SubModel.Name , vehicleFromDb.Region.Name); var changeRequestId = await base.SubmitDeleteChangeRequestAsync(currentVehicle, id, requestedBy, changeRequestItemStagings, comment, attachmentsStaging, changeContent); vehicleFromDb.ChangeRequestId = changeRequestId; _vehicleRepositoryService.Update(vehicleFromDb); Repositories.SaveChanges(); await _vehicleIndexingService.UpdateVehicleChangeRequestIdAsync(currentVehicle.Id, changeRequestId); return(changeRequestId); }