Ejemplo n.º 1
0
        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.");
            }
        }
Ejemplo n.º 2
0
        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.");
            }
        }
Ejemplo n.º 3
0
        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.");
            }
        }
Ejemplo n.º 6
0
        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.");
            }
        }
Ejemplo n.º 8
0
        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}.");
            }
        }
Ejemplo n.º 9
0
        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}.");
            }
        }
Ejemplo n.º 10
0
        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}.");
            }
        }
Ejemplo n.º 11
0
        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}.");
            }
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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);
        }