public async Task <IActionResult> Create([FromBody] RefundRequestCreateModel refund) { try { user_id = int.Parse(User.Claims.First(i => i.Type == "UserId").Value); await _refundsBusiness.Create(refund, user_id); return(StatusCode(201)); } catch { throw; } }
public async Task Create(RefundRequestCreateModel refund, int?user_id) { if (user_id <= 0 || user_id == null) { throw new CustomException(404, "Id de usuario no válido"); } //ceuntas del usuario que pide el reembolso AccountsUserModel acc_ori = _unitOfWork.Accounts.GetAccountsUsers((int)user_id); if (!_unitOfWork.Accounts.ValidateAccounts(acc_ori)) { throw new CustomException(404, "No se encontró alguna de las cuentas del usuario"); } var ori_transaction = _unitOfWork.Transactions.FindTransaction(refund.TransactionId, (int)acc_ori.IdUSD, (int)acc_ori.IdARS); if (ori_transaction != null) { if (_unitOfWork.RefundRequest.NotRefundable(ori_transaction.Id)) { throw new CustomException(400, "No se puede crear la solicitud"); } var transfer = _unitOfWork.Transfers.GetTransfer(ori_transaction.Id); if (_unitOfWork.Transfers.ValidateTransfer(transfer)) { var des_transaction = _unitOfWork.Transactions.GetById(transfer.DestinationTransactionId); if (des_transaction == null) { throw new CustomException(404, "No se encontró la transacción de destino"); } if (ori_transaction.CategoryId == 4 || des_transaction.CategoryId == 4) { RefundRequest refundRequest = new RefundRequest() { TransactionId = transfer.OriginTransactionId, Status = "Pending", SourceAccountId = transfer.OriginTransaction.AccountId, TargetAccountId = transfer.DestinationTransaction.AccountId }; if (_unitOfWork.RefundRequest.ValidateRefundRequest(refundRequest)) { _unitOfWork.RefundRequest.Insert(refundRequest); await _unitOfWork.Complete(); //send email int?des_user_id = _unitOfWork.Accounts.GetById(transfer.DestinationTransaction.AccountId).UserId; if (des_user_id != null && des_user_id > 0) { var origin_user = _unitOfWork.Users.GetById((int)user_id); string email = _unitOfWork.Users.GetById((int)des_user_id).Email; string origin_names = origin_user.FirstName + " " + origin_user.LastName; EmailTemplates emailTemplate = _unitOfWork.EmailTemplates.GetById((int)EmailTemplatesEnum.RefundRequestCreated); if (emailTemplate != null) { string title = emailTemplate.Title; string body = string.Format(emailTemplate.Body, (int)user_id, origin_names, des_transaction.Amount, transfer.DestinationTransactionId); await _emailSender.SendEmailAsync(email, title, body); return; } return; } else { throw new CustomException(404, "Solicitud de reembolso creada, pero no se pudo enviar el email de solicitud de reembolso."); } } else { throw new CustomException(400, "Reembolso no válido"); } } else { throw new CustomException(400, "No se puede pedir reembolso de la transacción"); } } else { throw new CustomException(404, "El id de alguna de las transacciones no es válido"); } } else { throw new CustomException(400, "No se encontró la transacción"); } }