Exemplo n.º 1
0
        public HttpResponseMessage Delete(string id)
        {
            try
            {
                if (id == null || (id != null && id.Trim().Length == 0))
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, ""));
                }

                bool   result = false;
                string error  = string.Empty;

                using (var context = new EMContext())
                {
                    context.Configuration.LazyLoadingEnabled = false;

                    Guid accountID = Guid.Parse(id);

                    DB.Models.Transaction foundTransaction = context.Transactions.Where(x => x.FromAccountID == accountID || x.ToAccountID == accountID).FirstOrDefault();

                    if (foundTransaction == null)
                    {
                        DB.Models.Account foundAccount = context.Accounts.Where(x => x.AccountID == accountID).FirstOrDefault();

                        if (foundAccount != null)
                        {
                            context.Accounts.Remove(foundAccount);

                            context.SaveChanges();

                            result = true;
                        }
                        else
                        {
                            result = false;
                        }
                    }
                    else
                    {
                        result = false;
                        error  = "Error, found that this account in used in transaction.";
                    }

                    APIResponse <bool> apiResponse = new APIResponse <bool>()
                    {
                        StatusCode   = (int)(!result ? HttpStatusCode.ExpectationFailed : HttpStatusCode.OK),
                        StatusRemark = error,
                        Content      = result,
                    };

                    return(Request.CreateResponse((!result ? HttpStatusCode.ExpectationFailed : HttpStatusCode.OK), apiResponse));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);

                if (HttpContext.Current.IsDebuggingEnabled)
                {
                    return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex));
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.InternalServerError, ""));
                }
            }
        }
Exemplo n.º 2
0
        public HttpResponseMessage Update([FromBody] Models.Transaction transaction)
        {
            try
            {
                if (transaction == null)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, ""));
                }

                using (var context = new EMContext())
                {
                    context.Configuration.LazyLoadingEnabled = false;

                    DB.Models.Transaction     existingTransaction = context.Transactions.Include(x => x.FromTransaction).Include(x => x.TransactionType).Where(x => x.TransactionID == transaction.TransactionID).FirstOrDefault();
                    DB.Models.TransactionType transactionType     = context.TransactionTypes.Where(x => x.TransactionTypeID == transaction.TransactionTypeID).FirstOrDefault();

                    if (existingTransaction != null && transactionType != null)
                    {
                        DB.Models.Transaction foundTransaction   = new DB.Models.Transaction();
                        Models.Transaction    createdTransaction = new Models.Transaction();

                        switch (transactionType.TransactionTypeName)
                        {
                        case "Income":
                            existingTransaction.TransactionTypeID = transaction.TransactionTypeID;
                            existingTransaction.FromAccountID     = transaction.FromAccountID;
                            existingTransaction.CategoryID        = transaction.CategoryID;
                            existingTransaction.Operator          = true;
                            existingTransaction.TransactionDate   = transaction.TransactionDate;
                            existingTransaction.TransactionTime   = transaction.TransactionTime;
                            existingTransaction.Amount            = transaction.Amount;
                            existingTransaction.Note        = transaction.Note;
                            existingTransaction.CreatedDate = DateTime.Now;

                            if (transaction.SubCategoryID != null && transaction.SubCategoryID != Guid.Empty)
                            {
                                existingTransaction.SubCategoryID = transaction.SubCategoryID;
                            }
                            else
                            {
                                existingTransaction.SubCategoryID = null;
                            }

                            context.SaveChanges();

                            foundTransaction = context.Transactions.Where(x => x.TransactionID == existingTransaction.TransactionID).FirstOrDefault();

                            context.Entry(foundTransaction).Reference(x => x.FromAccount).Load();
                            context.Entry(foundTransaction).Reference(x => x.Category).Load();

                            if (transaction.SubCategoryID != null && transaction.SubCategoryID != Guid.Empty)
                            {
                                context.Entry(foundTransaction).Reference(x => x.SubCategory).Load();
                            }

                            createdTransaction = new Models.Transaction
                            {
                                TransactionID     = foundTransaction.TransactionID,
                                TransactionTypeID = foundTransaction.TransactionTypeID,
                                FromAccountID     = foundTransaction.FromAccountID,
                                CategoryID        = foundTransaction.CategoryID,
                                SubCategoryID     = foundTransaction.SubCategoryID,
                                Operator          = foundTransaction.Operator,
                                TransactionDate   = foundTransaction.TransactionDate,
                                TransactionTime   = foundTransaction.TransactionTime,
                                Amount            = foundTransaction.Amount,
                                Note        = foundTransaction.Note,
                                CreatedDate = foundTransaction.CreatedDate
                            };
                            break;

                        case "Expense":
                            existingTransaction.TransactionTypeID = transaction.TransactionTypeID;
                            existingTransaction.FromAccountID     = transaction.FromAccountID;
                            existingTransaction.CategoryID        = transaction.CategoryID;
                            existingTransaction.Operator          = false;
                            existingTransaction.TransactionDate   = transaction.TransactionDate;
                            existingTransaction.TransactionTime   = transaction.TransactionTime;
                            existingTransaction.Amount            = transaction.Amount;
                            existingTransaction.Note        = transaction.Note;
                            existingTransaction.CreatedDate = DateTime.Now;

                            if (transaction.SubCategoryID != null && transaction.SubCategoryID != Guid.Empty)
                            {
                                existingTransaction.SubCategoryID = transaction.SubCategoryID;
                            }
                            else
                            {
                                existingTransaction.SubCategoryID = null;
                            }

                            context.SaveChanges();

                            foundTransaction = context.Transactions.Where(x => x.TransactionID == existingTransaction.TransactionID).FirstOrDefault();

                            context.Entry(foundTransaction).Reference(x => x.FromAccount).Load();
                            context.Entry(foundTransaction).Reference(x => x.Category).Load();

                            if (transaction.SubCategoryID != null && transaction.SubCategoryID != Guid.Empty)
                            {
                                context.Entry(foundTransaction).Reference(x => x.SubCategory).Load();
                            }

                            createdTransaction = new Models.Transaction
                            {
                                TransactionID     = foundTransaction.TransactionID,
                                TransactionTypeID = foundTransaction.TransactionTypeID,
                                FromAccountID     = foundTransaction.FromAccountID,
                                CategoryID        = foundTransaction.CategoryID,
                                SubCategoryID     = foundTransaction.SubCategoryID,
                                Operator          = foundTransaction.Operator,
                                TransactionDate   = foundTransaction.TransactionDate,
                                TransactionTime   = foundTransaction.TransactionTime,
                                Amount            = foundTransaction.Amount,
                                Note        = foundTransaction.Note,
                                CreatedDate = foundTransaction.CreatedDate
                            };
                            break;

                        case "Transfer":
                            existingTransaction.TransactionTypeID = transaction.TransactionTypeID;
                            existingTransaction.FromAccountID     = transaction.FromAccountID;
                            existingTransaction.ToAccountID       = transaction.ToAccountID;
                            existingTransaction.Operator          = false;
                            existingTransaction.TransactionDate   = transaction.TransactionDate;
                            existingTransaction.TransactionTime   = transaction.TransactionTime;
                            existingTransaction.Amount            = transaction.Amount;
                            existingTransaction.Note        = transaction.Note;
                            existingTransaction.CreatedDate = DateTime.Now;

                            context.SaveChanges();

                            DB.Models.Transaction existingToTransaction = context.Transactions.Where(x => x.FromTransactionID == existingTransaction.TransactionID).FirstOrDefault();

                            if (existingToTransaction != null)
                            {
                                existingToTransaction.TransactionTypeID = transaction.TransactionTypeID;
                                existingToTransaction.FromAccountID     = transaction.ToAccountID ?? Guid.Empty;
                                existingToTransaction.ToAccountID       = transaction.FromAccountID;
                                existingToTransaction.Operator          = true;
                                existingToTransaction.TransactionDate   = transaction.TransactionDate;
                                existingToTransaction.TransactionTime   = transaction.TransactionTime;
                                existingToTransaction.Amount            = transaction.Amount;
                                existingToTransaction.Note        = transaction.Note;
                                existingToTransaction.CreatedDate = DateTime.Now;

                                context.SaveChanges();
                            }

                            foundTransaction = context.Transactions.Where(x => x.TransactionID == existingTransaction.TransactionID).FirstOrDefault();

                            context.Entry(foundTransaction).Reference(x => x.FromAccount).Load();
                            context.Entry(foundTransaction).Reference(x => x.ToAccount).Load();

                            createdTransaction = new Models.Transaction
                            {
                                TransactionID     = foundTransaction.TransactionID,
                                TransactionTypeID = foundTransaction.TransactionTypeID,
                                FromAccountID     = foundTransaction.FromAccountID,
                                ToAccountID       = foundTransaction.ToAccountID,
                                Operator          = foundTransaction.Operator,
                                TransactionDate   = foundTransaction.TransactionDate,
                                TransactionTime   = foundTransaction.TransactionTime,
                                Amount            = foundTransaction.Amount,
                                Note        = foundTransaction.Note,
                                CreatedDate = foundTransaction.CreatedDate
                            };
                            break;

                        default:
                            return(Request.CreateResponse(HttpStatusCode.BadRequest, ""));
                        }

                        APIResponse <Models.Transaction> apiResponse = new APIResponse <Models.Transaction>()
                        {
                            StatusCode   = (int)(createdTransaction == null ? HttpStatusCode.ExpectationFailed : HttpStatusCode.OK),
                            StatusRemark = "",
                            Content      = (createdTransaction ?? null),
                        };

                        return(Request.CreateResponse((createdTransaction == null ? HttpStatusCode.ExpectationFailed : HttpStatusCode.OK), apiResponse));
                    }

                    return(Request.CreateResponse(HttpStatusCode.ExpectationFailed, ""));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);

                if (HttpContext.Current.IsDebuggingEnabled)
                {
                    return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex));
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.InternalServerError, ""));
                }
            }
        }