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; }
        }
Пример #2
0
        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");
            }
        }