예제 #1
0
        public async Task <Purchase> Create(Purchase data)
        {
            using (var transaction = _db.Database.BeginTransaction())
            {
                try
                {
                    var purchaseObj = await Task.Run(() =>
                    {
                        Purchase purchase   = _db.Purchases.Create();
                        purchase.UserId     = data.UserId;
                        purchase.SupplierId = data.SupplierId;
                        purchase.Supplier   = _db.Suppliers.Find(data.SupplierId);
                        _db.Purchases.Add(purchase);
                        _db.SaveChanges();
                        _db.ProductDetails.AddRange(data.ProductDetails.Select(e =>
                        {
                            e.PurchaseId = purchase.Id;
                            return(e);
                        }));
                        _db.SaveChanges();
                        transaction.Commit();
                        return(purchase);
                    });

                    return(purchaseObj);
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }
        }
예제 #2
0
        public async Task <Sale> Create(Sale data)
        {
            using (var transaction = _db.Database.BeginTransaction())
            {
                try
                {
                    var saleObj = await Task.Run(() =>
                    {
                        IEnumerable <ProductDetail> productDetails = _db.ProductDetails.Include(e => e.ReceivedProducts);
                        IEnumerable <SaleDetail> saleDetails       = _db.SaleDetails;

                        List <SaleDetail> saleDetailList = new List <SaleDetail>();
                        Sale sale   = _db.Sales.Create();
                        sale.UserId = data.UserId;
                        _db.Sales.Add(sale);
                        _db.SaveChanges();

                        data.SaleDetails.ToList().ForEach((saleDetail) =>
                        {
                            var saleDetailItem          = saleDetails.Where(e => e.ProductDetailId == saleDetail.ProductDetailId);
                            ProductDetail productDetail = productDetails.Where(e => e.Id == saleDetail.ProductDetailId).FirstOrDefault();
                            if (productDetail.ReceivedProducts.Count() != 0)
                            {
                                int countProductAlreadyOut = 0;
                                if (saleDetailItem.Count() != 0)
                                {
                                    countProductAlreadyOut = saleDetailItem.Sum(e => e.Quantity);
                                }

                                if (productDetail.ReceivedProducts.Sum(e => e.Quantity) >= saleDetail.Quantity + countProductAlreadyOut)
                                {
                                    saleDetail.SaleId = sale.Id;
                                    saleDetailList.Add(saleDetail);
                                }
                            }
                        });

                        if (saleDetailList.Count() == 0)
                        {
                            transaction.Rollback();
                            throw new Exception("Sale item is empty");
                        }

                        _db.SaleDetails.AddRange(saleDetailList);
                        _db.SaveChanges();
                        transaction.Commit();
                        return(sale);
                    });

                    return(saleObj);
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }
        }
예제 #3
0
 public Task <Role> Create(Role data)
 {
     return(Task.Run(() =>
     {
         Role role = _db.Roles.Create();
         role.Name = data.Name;
         _db.Roles.Add(role);
         _db.SaveChanges();
         return role;
     }));
 }
예제 #4
0
 public Task <Category> Create(Category data)
 {
     return(Task.Run(() =>
     {
         Category category = _db.Categories.Create();
         category.Name = data.Name;
         _db.Categories.Add(category);
         _db.SaveChanges();
         return category;
     }));
 }
예제 #5
0
 public Task <Supplier> Create(Supplier data)
 {
     return(Task.Run(() =>
     {
         Supplier supplier = _db.Suppliers.Create();
         supplier.Name = data.Name;
         supplier.Address = data.Address;
         supplier.Phone = data.Phone;
         supplier.Description = data.Description;
         _db.Suppliers.Add(supplier);
         _db.SaveChanges();
         return supplier;
     }));
 }
예제 #6
0
 public Task <Product> Create(Product data)
 {
     return(Task.Run(() =>
     {
         Product product = _db.Products.Create();
         product.Name = data.Name;
         product.Description = data.Description;
         product.CodeProduct = data.CodeProduct;
         product.ProductCategories = new List <ProductCategory>();
         product.ProductDetails = new List <ProductDetail>();
         product.Prices = new List <Price>();
         _db.Products.Add(product);
         _db.SaveChanges();
         return product;
     }));
 }
예제 #7
0
        //plan tambah siapa penerima barang nya dan bikin sp
        public async Task <ReceivedProduct> Create(ReceivedProduct data)
        {
            using (var transaction = _db.Database.BeginTransaction())
            {
                try
                {
                    int totalQuantityProductDetail = _db.ProductDetails.Find(data.ProductDetailID).Quantity;
                    int totalReceivedProduct       = 0;
                    var objReceivedProduct         = _db.ReceivedProducts.Where(e => e.ProductDetailID == data.ProductDetailID);

                    if (objReceivedProduct.Count() != 0)
                    {
                        totalReceivedProduct = objReceivedProduct.Sum(e => e.Quantity);
                    }

                    if (totalQuantityProductDetail < totalReceivedProduct + data.Quantity)
                    {
                        transaction.Rollback();
                        throw new Exception("product is received more than request");
                    }

                    var receivedProductObj = await Task.Run(() =>
                    {
                        ReceivedProduct receivedProduct = _db.ReceivedProducts.Create();
                        receivedProduct.ProductDetailID = data.ProductDetailID;
                        receivedProduct.UserId          = data.UserId;
                        receivedProduct.Quantity        = data.Quantity;
                        _db.ReceivedProducts.Add(receivedProduct);
                        _db.SaveChanges();
                        transaction.Commit();
                        return(receivedProduct);
                    });

                    return(receivedProductObj);
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }
        }
예제 #8
0
 public Task <Price> Create(Price price)
 {
     return(Task.Run(() =>
     {
         Price newPrice = _db.Prices.Create();
         newPrice.ProductId = price.ProductId;
         newPrice.Value = price.Value;
         newPrice.Type = price.Type;
         _db.Prices.Add(newPrice);
         _db.SaveChanges();
         return newPrice;
     }));
 }
예제 #9
0
 public Task <User> Create(User data)
 {
     return(Task.Run(() =>
     {
         User user = _db.Users.Create();
         user.Email = data.Email;
         user.Password = data.Password;
         user.Name = data.Name;
         user.Phone = data.Phone;
         user.Gender = data.Gender;
         user.UserRoles = new List <UserRole>();
         _db.Users.Add(user);
         _db.SaveChanges();
         return user;
     }));
 }
 public IEnumerable <ProductCategory> Create(IEnumerable <ProductCategory> productCategories)
 {
     _db.ProductCategories.AddRange(productCategories);
     _db.SaveChanges();
     return(productCategories);
 }