public void Post([FromBody] DTO.Client client)
        {
            Console.WriteLine($"DEBUG: Entering {nameof(Post)}");
            Console.WriteLine($"DEBUG: Request body contained: {client}");
            // TODO: updatedBy
            var updatedBy = "SYSTEM";

            using (var db = new TransactionServiceDbContext())
            {
                var dbClient = db.Clients.FindAsync(client.ClientId).Result;
                if (dbClient == null)
                {
                    // PK is serial, so should be automatically generated
                    dbClient = new Domain.Entities.Client
                    {
                        CreatedBy = updatedBy,
                        CreatedOn = DateTime.UtcNow
                    };
                    db.Add(dbClient);
                }
                dbClient.Name        = client.Name;
                dbClient.Description = client.Description;
                dbClient.UpdatedBy   = updatedBy;
                dbClient.UpdatedOn   = DateTime.UtcNow;
                db.SaveChangesAsync();
            }
        }
        public ActionResult <DTO.Transaction> Get(int id)
        {
            DTO.Transaction transaction;

            using (var db = new TransactionServiceDbContext())
            {
                transaction = db.Transactions
                              .Include(t => t.LineItems)
                              .Include(t => t.AssociatedClient)
                              .Where(t => !t.Deleted &&
                                     t.TransactionId == id)
                              .Select(t => t.toDto())
                              .FirstOrDefault();
            }
            // Set default for new transactions
            if (transaction == null)
            {
                transaction = new DTO.Transaction
                {
                    TransactionId   = -1,
                    TransactionType = Enums.TransactionTypeEnum.Sale,
                    Status          = "Draft",
                    LineItems       = new List <DTO.LineItem>()
                };
            }

            return(transaction);
        }
        public ActionResult <DTO.Client> Get(int id)
        {
            DTO.Client client;

            using (var db = new TransactionServiceDbContext())
            {
                client = db.Clients
                         .Where(c => !c.Deleted &&
                                c.ClientId == id)
                         .Select(c => c.toDto())
                         .FirstOrDefault();
            }

            if (client == null)
            {
                client = new DTO.Client
                {
                    ClientId    = -1,
                    Name        = "<name>",
                    Description = "<description>"
                };
            }

            return(client);
        }
示例#4
0
        public ActionResult <List <DTO.Product> > Get()
        {
            List <DTO.Product> productList;

            using (var db = new TransactionServiceDbContext())
            {
                productList = db.Products
                              .Where(p => !p.Deleted)
                              .OrderByDescending(p => p.UpdatedOn)
                              .Select(p => p.toDto())
                              .ToList();
                foreach (var product in productList)
                {
                    // get sale price
                    product.AvgSalePrice = Decimal.Round(db.LineItems
                                                         .Where(l => !l.Deleted &&
                                                                l.ProductId == product.ProductId &&
                                                                l.Quantity > 0 &&
                                                                l.Transaction.TransactionType == TransactionTypeEnum.Sale.ToString())
                                                         .Sum(l => l.Price / l.Quantity), 2);
                    // get purchase price
                    product.AvgPurchasePrice = Decimal.Round(db.LineItems
                                                             .Where(l => !l.Deleted &&
                                                                    l.ProductId == product.ProductId &&
                                                                    l.Quantity > 0 &&
                                                                    l.Transaction.TransactionType == TransactionTypeEnum.Purchase.ToString())
                                                             .Sum(l => l.Price / l.Quantity), 2);
                }
            }

            return(productList);
        }
 public void Delete(int id)
 {
     using (var db = new TransactionServiceDbContext())
     {
         var dbClient = db.Clients.FindAsync(id).Result;
         if (dbClient != null)
         {
             dbClient.Deleted = true;
         }
         db.SaveChangesAsync();
     }
 }
 public void Delete(int id)
 {
     using (var db = new TransactionServiceDbContext())
     {
         var dbTransaction = db.Transactions.FindAsync(id).Result;
         if (dbTransaction != null)
         {
             dbTransaction.Deleted = true;
         }
         // TODO: Delete line items as well?
         db.SaveChangesAsync();
     }
 }
        public ActionResult <List <DTO.Client> > Get()
        {
            List <DTO.Client> clientList;

            using (var db = new TransactionServiceDbContext())
            {
                clientList = db.Clients
                             .Where(c => !c.Deleted)
                             .Select(c => c.toDto())
                             .ToList();
            }

            return(clientList);
        }
        public ActionResult <List <DTO.Transaction> > Get()
        {
            List <DTO.Transaction> transactionList;

            using (var db = new TransactionServiceDbContext())
            {
                transactionList = db.Transactions
                                  .Include(t => t.LineItems)
                                  .Include(t => t.AssociatedClient)
                                  .Where(t => !t.Deleted)
                                  .Select(t => t.toDto())
                                  .ToList();
            }

            return(Ok(transactionList));
        }
示例#9
0
        public ActionResult <DTO.Product> Get(int id)
        {
            DTO.Product product;

            using (var db = new TransactionServiceDbContext())
            {
                product = db.Products
                          .Where(p => !p.Deleted &&
                                 p.ProductId == id)
                          .Select(p => p.toDto())
                          .FirstOrDefault();

                if (product != null)
                {
                    // get sale price
                    product.AvgSalePrice = Decimal.Round(db.LineItems
                                                         .Where(l => !l.Deleted &&
                                                                l.ProductId == product.ProductId &&
                                                                l.Quantity > 0 &&
                                                                l.Transaction.TransactionType == TransactionTypeEnum.Sale.ToString())
                                                         .Sum(l => l.Price / l.Quantity), 2);
                    // get purchase price
                    product.AvgPurchasePrice = Decimal.Round(db.LineItems
                                                             .Where(l => !l.Deleted &&
                                                                    l.ProductId == product.ProductId &&
                                                                    l.Quantity > 0 &&
                                                                    l.Transaction.TransactionType == TransactionTypeEnum.Purchase.ToString())
                                                             .Sum(l => l.Price / l.Quantity), 2);
                }
            }

            // Set default for new products
            if (product == null)
            {
                product = new DTO.Product
                {
                    ProductId   = -1,
                    Name        = "<name>",
                    Description = "<description>"
                };
            }

            return(product);
        }
        public ActionResult <List <DTO.SiteSearchResult> > SiteSearch(string query)
        {
            Console.WriteLine($"DEBUG: Entering {nameof(SiteSearch)}");
            Console.WriteLine($"DEBUG: query: {query}");
            List <DTO.SiteSearchResult> sites;

            using (var db = new TransactionServiceDbContext())
            {
                sites = db.Transactions
                        .Where(t => !t.Deleted &&
                               t.SiteName.Contains(query))
                        .Select(t => new DTO.SiteSearchResult
                {
                    SiteName      = t.SiteName,
                    SiteLatitude  = t.SiteLatitude,
                    SiteLongitude = t.SiteLongitude,
                })
                        .ToList();
            }
            Console.WriteLine($"DEBUG: Matching sites found: {JsonConvert.SerializeObject(sites, Formatting.Indented)}");

            return(Ok(sites));
        }
        public void Post([FromBody] DTO.Transaction transaction)
        {
            Console.WriteLine($"DEBUG: Entering {nameof(Post)}");
            Console.WriteLine($"DEBUG: Request body contained: {JsonConvert.SerializeObject(transaction, Formatting.Indented)}");
            // TODO: updatedBy
            var updatedBy = "SYSTEM";

            using (var db = new TransactionServiceDbContext())
            {
                // TODO: Only change Updated* values if the other values are actually different. Override SaveChanges method?
                var dbTransaction = db.Transactions.FindAsync(transaction.TransactionId).Result;
                if (dbTransaction == null && transaction.TransactionId == -1)
                {
                    Console.WriteLine($"DEBUG: Creating new transaction");
                    // PK is serial, so should be automatically generated
                    dbTransaction = new Domain.Entities.Transaction
                    {
                        CreatedOn = DateTime.UtcNow,
                        CreatedBy = updatedBy
                    };
                    db.Add(dbTransaction);
                }
                if (dbTransaction != null)
                {
                    Console.WriteLine("DEBUG: Updating transaction properties");
                    dbTransaction.Status          = transaction.Status;
                    dbTransaction.TransactionType = transaction.TransactionType.ToString();
                    dbTransaction.UpdatedOn       = DateTime.UtcNow;
                    dbTransaction.UpdatedBy       = updatedBy;
                    dbTransaction.DeliverAfter    = transaction.DeliverAfter?.ToUniversalTime();
                    dbTransaction.DeliverBefore   = transaction.DeliverBefore?.ToUniversalTime();
                    dbTransaction.Priority        = (int)transaction.Priority;
                    dbTransaction.SiteName        = transaction.SiteName;
                    dbTransaction.SiteLatitude    = transaction.SiteLatitude;
                    dbTransaction.SiteLongitude   = transaction.SiteLongitude;

                    // Unsure why LineItems is null instead of empty list
                    if (transaction.LineItems != null)
                    {
                        Console.WriteLine($"DEBUG: Updating {transaction.LineItems.Count} line items");
                        foreach (var lineItem in transaction.LineItems)
                        {
                            var dbLineItem = db.LineItems.FindAsync(lineItem.LineItemId).Result;
                            if (dbLineItem == null)
                            {
                                // Transaction IDs start empty for new incoming line items
                                dbLineItem = new Domain.Entities.LineItem
                                {
                                    LineItemId    = lineItem.LineItemId,
                                    TransactionId = dbTransaction.TransactionId,
                                    CreatedOn     = DateTime.UtcNow,
                                    CreatedBy     = updatedBy
                                };
                                db.Add(dbLineItem);
                            }
                            dbLineItem.ProductId = lineItem.ProductId;
                            dbLineItem.Quantity  = lineItem.Quantity;
                            dbLineItem.Price     = lineItem.Price;
                            dbLineItem.UpdatedOn = DateTime.UtcNow;
                            dbLineItem.UpdatedBy = updatedBy;
                        }
                    }

                    Console.WriteLine($"DEBUG: Updating client ID");
                    dbTransaction.ClientId = transaction.AssociatedClient?.ClientId;
                    Console.WriteLine($"DEBUG: Saving changes");
                    db.SaveChangesAsync();
                }
            }
            Console.WriteLine($"DEBUG: Exiting {nameof(Post)}");
        }