public async Task <(List <RelationDefinition>, Extras)> UpdateState(List <int> ids, UpdateStateArguments args) { // Check user permissions var action = "State"; var actionFilter = await UserPermissionsFilter(action, cancellation : default); ids = await CheckActionPermissionsBefore(actionFilter, ids); // C# Validation if (string.IsNullOrWhiteSpace(args.State)) { throw new BadRequestException(_localizer[Constants.Error_Field0IsRequired, _localizer["State"]]); } if (!DefStates.All.Contains(args.State)) { string validStates = string.Join(", ", DefStates.All); throw new BadRequestException($"'{args.State}' is not a valid definition state, valid states are: {validStates}"); } // Transaction using var trx = ControllerUtilities.CreateTransaction(); // Validate int remainingErrorCount = ModelState.MaxAllowedErrors - ModelState.ErrorCount; var errors = await _repo.RelationDefinitions_Validate__UpdateState(ids, args.State, top : remainingErrorCount); ControllerUtilities.AddLocalizedErrors(ModelState, errors, _localizer); ModelState.ThrowIfInvalid(); // Execute await _repo.RelationDefinitions__UpdateState(ids, args.State); // Prepare response List <RelationDefinition> data = null; Extras extras = null; if (args.ReturnEntities ?? false) { (data, extras) = await GetByIds(ids, args, action, cancellation : default); } // Check user permissions again await CheckActionPermissionsAfter(actionFilter, ids, data); // Commit and return trx.Complete(); return(data, extras); }
public async Task <ActionResult <EntitiesResponse <Document> > > Close([FromBody] List <int> ids, [FromQuery] UpdateStateArguments args) { return(await ControllerUtilities.InvokeActionImpl(async() => { var serverTime = DateTimeOffset.UtcNow; var(data, extras) = await _service.UpdateState(ids, args); var response = TransformToEntitiesResponse(data, extras, serverTime, cancellation: default); Response.Headers.Set("x-definitions-version", Constants.Stale); if (args.ReturnEntities ?? false) { return Ok(response); } else { return Ok(); } }, _logger)); }
public async Task <ActionResult <EntitiesResponse <Document> > > Close([FromBody] List <int> ids, [FromQuery] UpdateStateArguments args) { var serverTime = DateTimeOffset.UtcNow; var result = await _service.UpdateState(ids, args); Response.Headers.Set("x-definitions-version", Constants.Stale); if (args.ReturnEntities ?? false) { var response = TransformToEntitiesResponse(result, serverTime, cancellation: default); return(Ok(response)); } else { return(Ok()); } }
public async Task <EntitiesResult <ResourceDefinition> > UpdateState(List <int> ids, UpdateStateArguments args) { await Initialize(); // Check user permissions var action = "State"; var actionFilter = await UserPermissionsFilter(action, cancellation : default); ids = await CheckActionPermissionsBefore(actionFilter, ids); // C# Validation if (string.IsNullOrWhiteSpace(args.State)) { throw new ServiceException(_localizer[ErrorMessages.Error_Field0IsRequired, _localizer["State"]]); } if (!DefStates.All.Contains(args.State)) { string validStates = string.Join(", ", DefStates.All); throw new ServiceException($"'{args.State}' is not a valid definition state, valid states are: {validStates}"); } // Execute and return using var trx = TransactionFactory.ReadCommitted(); OperationOutput output = await _behavior.Repository.ResourceDefinitions__UpdateState( ids : ids, state : args.State, validateOnly : ModelState.IsError, top : ModelState.RemainingErrors, userId : UserId); AddErrorsAndThrowIfInvalid(output.Errors); // Prepare result var result = (args.ReturnEntities ?? false) ? await GetByIds(ids, args, action, cancellation : default) : EntitiesResult <ResourceDefinition> .Empty(); // Check user permissions again await CheckActionPermissionsAfter(actionFilter, ids, result.Data); trx.Complete(); return(result); }
public async Task <EntitiesResult <DocumentDefinition> > UpdateState(List <int> ids, UpdateStateArguments args) { await Initialize(); // Check user permissions var action = "State"; var actionFilter = await UserPermissionsFilter(action, cancellation : default); ids = await CheckActionPermissionsBefore(actionFilter, ids); // Validation if (string.IsNullOrWhiteSpace(args.State)) { throw new ServiceException(_localizer[ErrorMessages.Error_Field0IsRequired, _localizer["State"]]); } if (!DefStates.All.Contains(args.State)) { string validStates = string.Join(", ", DefStates.All); throw new ServiceException($"'{args.State}' is not a valid definition state, valid states are: {validStates}."); } var defs = await _behavior.Definitions(); int jvDefId = defs.ManualJournalVouchersDefinitionId; int index = 0; ids.ForEach(id => { if (id == jvDefId) { string path = $"[{index}]"; string msg = _localizer["Error_CannotModifySystemItem"]; ModelState.AddError(path, msg); } index++; }); // Execute using var trx = TransactionFactory.ReadCommitted(); OperationOutput output = await _behavior.Repository.DocumentDefinitions__UpdateState( ids : ids, state : args.State, validateOnly : ModelState.IsError, top : ModelState.RemainingErrors, userId : UserId); AddErrorsAndThrowIfInvalid(output.Errors); // Prepare result var result = (args.ReturnEntities ?? false) ? await GetByIds(ids, args, action, cancellation : default) : EntitiesResult <DocumentDefinition> .Empty(); // Check user permissions again await CheckActionPermissionsAfter(actionFilter, ids, result.Data); trx.Complete(); return(result); }
public async Task <(List <DocumentDefinition>, Extras)> UpdateState(List <int> ids, UpdateStateArguments args) { // Make sure int jvDefId = _defCache.GetCurrentDefinitionsIfCached()?.Data?.ManualJournalVouchersDefinitionId ?? throw new BadRequestException("The Manual Journal Voucher Id is not defined"); int index = 0; ids.ForEach(id => { if (id == jvDefId) { string path = $"[{index}]"; string msg = _localizer["Error_CannotModifySystemItem"]; ModelState.AddModelError(path, msg); } index++; }); // No point carrying on ModelState.ThrowIfInvalid(); // Check user permissions var action = "State"; var actionFilter = await UserPermissionsFilter(action, cancellation : default); ids = await CheckActionPermissionsBefore(actionFilter, ids); // C# Validation if (string.IsNullOrWhiteSpace(args.State)) { throw new BadRequestException(_localizer[Constants.Error_Field0IsRequired, _localizer["State"]]); } if (!DefStates.All.Contains(args.State)) { string validStates = string.Join(", ", DefStates.All); throw new BadRequestException($"'{args.State}' is not a valid definition state, valid states are: {validStates}"); } // Transaction using var trx = ControllerUtilities.CreateTransaction(); // Validate int remainingErrorCount = ModelState.MaxAllowedErrors - ModelState.ErrorCount; var errors = await _repo.DocumentDefinitions_Validate__UpdateState(ids, args.State, top : remainingErrorCount); ControllerUtilities.AddLocalizedErrors(ModelState, errors, _localizer); ModelState.ThrowIfInvalid(); // Execute await _repo.DocumentDefinitions__UpdateState(ids, args.State); // Prepare response List <DocumentDefinition> data = null; Extras extras = null; if (args.ReturnEntities ?? false) { (data, extras) = await GetByIds(ids, args, action, cancellation : default); } // Check user permissions again await CheckActionPermissionsAfter(actionFilter, ids, data); // Commit and return trx.Complete(); return(data, extras); }