internal async Task <IActionResult> DoTransaccion([NotNull] TransaccionDTO transaccionDTO, User mod = default, Operacion operacion = default, User userFrom = default) { IActionResult result = default; Transaccion transaccion = default; #region Validar Parametros if (Equals(operacion, default)) { operacion = await Context.Operaciones.FindAsync(transaccionDTO.IdOperacion); } else if (transaccionDTO.IdOperacion != operacion.Id) { result = BadRequest($"La {nameof(Operacion)} '{transaccionDTO.IdOperacion}' no coincide con la enviada '{operacion.Id}'"); } if (Equals(userFrom, default)) { userFrom = Context.GetUserPermisoWithTransacciones(transaccionDTO.IdFrom); } else if (transaccionDTO.IdFrom != userFrom.Id) { result = BadRequest($"El {nameof(Models.User)} '{await Context.Users.FindAsync(transaccionDTO.IdFrom)}' no coincide con el enviado '{userFrom}'"); } if (Equals(mod, default)) { mod = Context.GetUserPermiso(Models.User.GetEmailFromHttpContext(ContextoHttp)); if (!mod.IsModTransaccion) { mod = default; } } else if (!mod.IsModTransaccion) { result = BadRequest($"El {nameof(Models.User)} {nameof(mod)}={mod} no tiene el permiso '{Permiso.MODTRANSACCION}' ({nameof(mod.IsModTransaccion)})"); } #endregion if (Equals(result, default)) { if (userFrom.TiempoDisponible - transaccionDTO.Minutos >= 0) { //aqui pongo los criterios para poder hacer la operacion //si se puede hacer creo la transacción if (!operacion.IsRevisada || !Equals(mod, default)) { operacion.Completada = transaccionDTO.IsComplete; Context.Operaciones.Update(operacion); transaccion = transaccionDTO.ToTransaccion(); if (!Equals(mod, default)) { transaccion.UserValidator = mod; } await Context.Transacciones.AddAsync(transaccion); await Context.SaveChangesAsync(); } } result = Ok(transaccion); } return(result); }
public async Task <IActionResult> AddTransaccion(TransaccionDTO transaccionDTO) { IActionResult result; User user; Operacion operacion; IEnumerable <Transaccion> transacciones; if (Equals(transaccionDTO, default)) { result = BadRequest(); } else if (ContextoHttp.IsAuthenticated) { user = Context.GetUserPermiso(Models.User.GetEmailFromHttpContext(ContextoHttp)); if (user.IsValidated) { operacion = await Context.Operaciones.FindAsync(transaccionDTO.IdOperacion); if (Equals(operacion, default)) { result = NotFound(); } else { if (operacion.UserId != user.Id && !user.IsModTransaccion) { result = Unauthorized();//si la operación no la ha creado él o no es un mod no puede hacerlo } else if (operacion.Completada) { transacciones = Context.Transacciones.Where(t => t.OperacionId == operacion.Id); if (transacciones.Any()) { result = Ok(new TransaccionesGrupoDTO(transacciones)); } else {//si hay más participantes a dar el pago y se quiere añadir a posteriori result = await DoTransaccion(transaccionDTO, user, operacion); } } else { result = await DoTransaccion(transaccionDTO, user, operacion); } } } else { result = this.NotValidated(); //no se puede trabajar con alguien no validado! } } else { result = this.NotLoggedIn(); } return(result); }
public async Task <IActionResult> Post(TransaccionDTO transaccionDto) { var transaccion = _mapper.Map <Transacciones>(transaccionDto); await _transaccionServices.InsertTransaccion(transaccion); var response = new ApiResponse <TransaccionDTO>(transaccionDto); return(Ok(response)); }
public async Task <IActionResult> UpdateTransaccion(TransaccionDTO transaccionDTO) { return(await ModifyTransaccion(transaccionDTO, async (transaccion, tDTO) => { IActionResult result; User user = Context.Users.Find(tDTO.IdTo); if (Equals(user, default)) { result = NotFound(); } else if (!user.IsValidated) { result = this.NotValidated(); } else { result = await DoTransaccionUpdate(tDTO, default, transaccion);
async Task <IActionResult> DoTransaccion([NotNull] TransaccionDTO transaccionDTO, User user, Operacion operacion) { IActionResult result; TransaccionDelegada transaccionDelegada; bool autoritzed; if (operacion.Id != transaccionDTO.IdOperacion) { result = BadRequest($"la {nameof(Operacion)} con {nameof(Operacion.Id)}={transaccionDTO.IdOperacion} no es la misma que la enviada {nameof(Operacion.Id)}={operacion.Id}"); } else { autoritzed = user.Id == transaccionDTO.IdFrom || user.IsModTransaccion; if (!autoritzed) { transaccionDelegada = Context.GetTransaccionDelegada(operacion); autoritzed = !Equals(transaccionDelegada, default) && user.Id == transaccionDelegada.UserId && transaccionDelegada.IsActiva; } if (autoritzed) { result = await DoTransaccion(transaccionDTO, operacion : operacion, userFrom : user); if (result is OkObjectResult) { transaccionDTO.Id = ((result as OkObjectResult).Value as Transaccion).Id; result = StatusCode(StatusCodes.Status206PartialContent, transaccionDTO); } } else { result = Unauthorized(); } } return(result); }
public async Task <IActionResult> WithDraw(TransaccionDTO transaccionDto) { Dictionary <string, string> response = new Dictionary <string, string>(); switch (transaccionDto.Account) { case "Saving": response = await _mediator.Send(new AddSavingAccountTransactionCommand.Command(transaccionDto.IdAccount, transaccionDto.Amount, transaccionDto.Tipo, transaccionDto.Saldo - transaccionDto.Amount, DateTime.Now)); break; case "Checking": response = await _mediator.Send(new AddCheckingAccountTransactionCommand.Command(transaccionDto.IdAccount, transaccionDto.Amount, transaccionDto.Tipo, transaccionDto.Saldo - transaccionDto.Amount, DateTime.Now)); break; } TempData["message"] = response["msg"]; TempData["status"] = response["res"]; return(new RedirectResult($"account/{transaccionDto.IdAccount}/{transaccionDto.Account}")); }