예제 #1
0
        public async Task <OperationResponse <T> > Add(T oEntity)
        {
            OperationResponse <T> Op = new OperationResponse <T>();

            try
            {
                if (oEntity == null)
                {
                    throw new ArgumentNullException("oEntity");
                }

                await _dbContext.Set <T>().AddAsync(oEntity);

                int rowsEffected = _dbContext.SaveChanges();
                Op.Data      = rowsEffected > 0 ? oEntity : default(T);
                Op.HasErrors = rowsEffected <= 0;
                Op.Message   = rowsEffected > 0 ? null : "error InInsert in DB";
            }
            catch (Exception ex)
            {
                Op.HasErrors = true;
                Op.Message   = string.Format("{0} InnerException {1}", ex.Message, ex.InnerException.Message);
            }
            return(Op);
        }
예제 #2
0
        //public async Task<OperationResponse<IEnumerable<userCartItem>>> checkoutUserOrder(decimal delivertClientID)
        //{
        //    OperationResponse<IEnumerable<userCartItem>> or = new OperationResponse<IEnumerable<userCartItem>>();
        //    ///get all user cart items
        //    ///and insert master and details data in POSCurrentDailyTransferHeaders, POSCurrentDailyTransferDetails
        //    /// clear user cart from db
        //    ///

        //    try {
        //        #region Try Body
        //        context.ChangeTracker.AutoDetectChangesEnabled = false;
        //        var StockNoItems = new List<userCartItem>();

        //        var userCartProducts = await context.userCartItem.FromSql($"GetCurrentDeliveryClientCertProducst {delivertClientID}").ToListAsync();
        //        // var cartResult = await _cartService.getAllCartProductsByUserID(delivertClientID);
        //        if (userCartProducts == null)
        //            throw new Exception("No Items In cart ");

        //        #region check Cart Item Quantity in Stock
        //        foreach (var item in userCartProducts)
        //        {
        //            var ItemStockQuantity = context.Items.FirstOrDefault(i => i.ItemId == item.ItemId && i.FkCategoryId == item.fkCategoryId).MaxStockQuantity;
        //            if ((item.quantity > ItemStockQuantity) || (ItemStockQuantity == 0) || (ItemStockQuantity == null))
        //            {
        //                StockNoItems.Add(item);
        //            }
        //        }

        //        if (StockNoItems.Count > 0)
        //        {
        //            or.HasErrors = false;
        //            or.Data = StockNoItems;

        //        }
        //        #endregion
        //        else
        //        {
        //            #region Add Order
        //            // add order
        //            var counter = 0;
        //            decimal id = getNextHeaderID();
        //            //System.Guid guid = System.Guid.NewGuid();
        //            //String id = guid.ToString();
        //            var PoscurrentDailyTransHeader =
        //                                 new PoscurrentDailyTransHeader()
        //                                 {
        //                                     Total = (decimal?)(await _cartService.getTotalPrice(delivertClientID)).Data,
        //                                     FkTransTypeId = 1,
        //                                     FkBrId = 1,
        //                                     ClientId = delivertClientID,
        //                                     InsDate = DateTime.Now,
        //                                     TransDate = DateTimeUtility.getFormatFromDateTime(DateTime.Now),
        //                                     FkClientTypeId = 1,// عميل
        //                                     CashierName = "",
        //                                     FkInvoiceStatusId = 4// old//,,
        //                                    ,PoscurrentDailyTransDetails = userCartProducts.Select(

        //                                        item => new PoscurrentDailyTransDetails()
        //                                        {
        //                                            FkBrId = 1,
        //                                            DetailId = _currentDailyTransfterDetailsService.GetAll().Data.Max(d => d.HeaderId) + ++counter,
        //                                            HeaderId = id,
        //                                            InsDate = DateTime.Now,
        //                                            CustPrice = (decimal)item.CustomerPrice,
        //                                            SalePrice = (decimal)item.ItemCost,
        //                                            FkItemBarcodeId = (decimal)item.fk_itemBarCodeID,
        //                                            FktransTypeId = 0,
        //                                            ItemId = (decimal)item.ItemId,
        //                                            ItemName = item.ItemName,
        //                                            PackageName = item.PackageName,
        //                                            Barcode = item.BarCode,
        //                                            TransDate = DateTimeUtility.getFormatFromDateTime(DateTime.Now),


        //                                        }).ToList()



        //                                 };

        //            context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT POSCurrentDailyTransHeader ON");
        //            var addedItem = context.PoscurrentDailyTransHeader.Add(PoscurrentDailyTransHeader);
        //            var rowsEffected = context.SaveChanges();
        //            #endregion

        //            #region update Stock Quantity
        //            if (rowsEffected > 0)
        //            {
        //                foreach (var item in userCartProducts)
        //                {
        //                    foreach (var StockItem in context.Items)
        //                    {
        //                        StockItem.MaxStockQuantity = StockItem.MaxStockQuantity - item.quantity;
        //                    }

        //                }
        //            }
        //            #endregion
        //            #region Delete Cart
        //            var InsertedRows = 0;
        //            if (userCartProducts.Count > 0)
        //            {
        //                var CartId = userCartProducts.FirstOrDefault().Id;
        //                var res = context.CartProducts.Find(CartId);
        //                context.CartProducts.Remove(res);
        //                 InsertedRows = context.SaveChanges();
        //            }


        //            #endregion
        //            #region save changes
        //            //context.ChangeTracker.AutoDetectChangesEnabled = true;
        //            //var InsertedRows = context.SaveChanges();
        //            if (InsertedRows > 0)
        //            {
        //                or.Data = userCartProducts;
        //                or.HasErrors = false;
        //                or.Message = "Order Added Successfully";
        //                or.StatusCode = "200";

        //            }
        //            else
        //            {
        //                or.Data = null;
        //                or.HasErrors = true;
        //                or.Message = "Order Added Already";
        //            }

        //            #endregion



        //            #endregion


        //        }
        //        return or;
        //    }



        //    catch (Exception ex)
        //    {

        //        or.HasErrors = true;
        //        or.Data = null;
        //        or.Message = ex.Message;
        //    }

        //    return or;
        //}

        public async Task <OperationResponse <IEnumerable <CategoryItemWithQnty> > > checkoutUserOrder(decimal delivertClientID, string Notes)
        {
            OperationResponse <IEnumerable <CategoryItemWithQnty> > or = new OperationResponse <IEnumerable <CategoryItemWithQnty> >();

            ///get all user cart items
            ///and insert master and details data in POSCurrentDailyTransferHeaders, POSCurrentDailyTransferDetails
            /// clear user cart from db
            ///

            try
            {
                #region Try Body
                //context.ChangeTracker.AutoDetectChangesEnabled = false;
                var StockNoItems = new List <CategoryItemWithQnty>();

                var userCartProducts = await context.OrderProducts.FromSql($"GetCurrentDeliveryClientCertProducts {delivertClientID}").ToListAsync();

                // var cartResult = await _cartService.getAllCartProductsByUserID(delivertClientID);
                if (userCartProducts == null)
                {
                    throw new Exception("No Items In cart ");
                }

                #region check Cart Item Quantity in Stock
                foreach (CategoryItemWithQnty item in userCartProducts)
                {
                    var ItemStockQuantity = context.Items.FirstOrDefault(i => i.ItemId == item.ItemId && i.FkCategoryId == item.fkCategoryId).OnHandQty;
                    if ((item.quantity > ItemStockQuantity) || (ItemStockQuantity == 0) || (ItemStockQuantity == null))
                    {
                        item.ItemStockQuantity = ItemStockQuantity;
                        StockNoItems.Add(item);
                    }
                }

                if (StockNoItems.Count > 0)
                {
                    or.HasErrors  = true;
                    or.Data       = StockNoItems;
                    or.StatusCode = "200";
                    or.Message    = "items quantity greater than stock ";
                }
                else if (userCartProducts.Count == 0)
                {
                    or.HasErrors = true;
                    or.Data      = null;
                    or.Message   = "Order Added Already";
                }
                #endregion
                else
                {
                    #region Add Order
                    // add order
                    var            counter   = 0;
                    decimal        id        = getNextHeaderID();
                    DeliveryClient clientObj = context.DeliveryClient.Where(a => a.DelClientId == delivertClientID).FirstOrDefault();

                    var addedHeader =
                        new PoscurrentDailyTransHeader()
                    {
                        Total                       = (decimal?)(await _cartService.getTotalPrice(delivertClientID)).Data,
                        FkTransTypeId               = 1,
                        FkBrId                      = 1,
                        ClientId                    = delivertClientID,
                        InsDate                     = DateTime.Now,
                        TransDate                   = DateTimeUtility.getFormatFromDateTime(DateTime.Now),
                        FkClientTypeId              = 1,        // عميل
                        CashierName                 = "",
                        Notes                       = Notes,
                        DeliveryAmount              = context.Area.Where(a => a.AreaId == clientObj.FkAreaId).FirstOrDefault().DeliveryAmount,
                        FkInvoiceStatusId           = 4,           // old//,
                        PoscurrentDailyTransDetails = userCartProducts.Select(

                            item => new PoscurrentDailyTransDetails()
                        {
                            FkBrId          = 1,
                            DetailId        = _currentDailyTransfterDetailsService.GetAll().Data.Max(d => d.HeaderId) + ++counter,
                            HeaderId        = 0,
                            InsDate         = DateTime.Now,
                            CustPrice       = (decimal)item.CustomerPrice,
                            SalePrice       = (decimal)item.ItemCost,
                            FkItemBarcodeId = (decimal)item.ItemBarCodeID,
                            FktransTypeId   = 0,
                            ItemId          = (decimal)item.ItemId,
                            ItemName        = item.ItemName,
                            PackageName     = item.PackageName,
                            PackageId       = item.ItemPackageID,

                            Barcode   = item.BarCode,
                            Qty       = item.quantity,
                            TransDate = DateTimeUtility.getFormatFromDateTime(DateTime.Now),
                        }).ToList()
                    };



                    var addedItem = context.PoscurrentDailyTransHeader.Add(addedHeader);
                    #endregion

                    #region update Stock Quantity
                    foreach (var item in userCartProducts)
                    {
                        foreach (var StockItem in context.Items)
                        {
                            StockItem.OnHandQty = StockItem.OnHandQty - item.quantity;
                        }
                    }
                    #endregion
                    #region Delete Cart

                    //var CartId = userCartProducts.Where(a=>a.)
                    var res = context.CartProducts.Where(a => a.FkDeliveryClientId == delivertClientID).ToList();
                    context.CartProducts.RemoveRange(res);
                    //context.SaveChanges();
                    #endregion
                    #region save changes
                    context.ChangeTracker.AutoDetectChangesEnabled = true;
                    var InsertedRows = context.SaveChanges();
                    if (InsertedRows > 0)
                    {
                        or.Data       = userCartProducts;
                        or.HasErrors  = false;
                        or.StatusCode = "200";
                        or.Message    = "Order Has Done";
                    }
                    else
                    {
                        or.HasErrors = true;
                        or.Message   = "Order Already Added";
                    }

                    #endregion



                    #endregion
                }
                return(or);
            }



            catch (Exception ex)
            {
                or.HasErrors = true;
                or.Data      = null;
                or.Message   = ex.Message;
            }

            return(or);
        }