Beispiel #1
0
        public async Task UpdateAsync(ClientProfileSettings model, string username, string correlationId)
        {
            var existing = await _regulatorySettingsRepository.GetByIdsAsync(model.ClientProfileId, model.AssetTypeId);

            if (existing == null)
            {
                throw new ClientSettingsDoNotExistException();
            }

            var regulatorySettings =
                await _regulatorySettingsApi.GetRegulatorySettingsByIdsAsync(existing.RegulatoryProfileId,
                                                                             existing.RegulatoryTypeId);

            //This should not happen when we handle deleting of RegulatorySettings in MDM
            if (regulatorySettings.ErrorCode == RegulationsErrorCodesContract.RegulatorySettingsDoNotExist)
            {
                throw new RegulatorySettingsDoNotExistException();
            }

            if (model.IsAvailable && !regulatorySettings.RegulatorySettings.IsAvailable)
            {
                throw new CannotSetToAvailableException();
            }

            if (model.Margin > 100 || model.Margin < regulatorySettings.RegulatorySettings.MarginMinPercent)
            {
                throw new InvalidMarginValueException();
            }

            if (model.OnBehalfFee < 0)
            {
                throw new InvalidOnBehalfFeeException();
            }

            if (model.ExecutionFeesRate < 0 || model.ExecutionFeesRate > 100)
            {
                throw new InvalidExecutionFeesRateException();
            }

            if (model.ExecutionFeesCap < model.ExecutionFeesFloor)
            {
                throw new InvalidExecutionFeesCapException();
            }

            if (model.ExecutionFeesFloor > model.ExecutionFeesCap || model.ExecutionFeesFloor < 0)
            {
                throw new InvalidExecutionFeesFloorException();
            }

            await _regulatorySettingsRepository.UpdateAsync(model);

            var referenceId = $"ClientProfileId:{model.ClientProfileId},AssetTypeId:{model.AssetTypeId}";

            await _auditService.TryAudit(correlationId, username, referenceId, AuditDataType.ClientProfileSettings,
                                         model.ToJson(), existing.ToJson());

            await _entityChangedSender
            .SendEntityEditedEvent <ClientProfileSettings, ClientProfileSettingsContract,
                                    ClientProfileSettingsChangedEvent>(existing, model, username, correlationId);
        }