コード例 #1
0
        public DBResult Pay(BillViewResult billViewResult)
        {
            using (var db = new FrontDeskEntities())
            {
                var bill = db.Bill.FirstOrDefault(b => b.ID == billViewResult.ID);
                if (bill == null)
                {
                    return(DBResult.NotFound);
                }

                EntityHelper.CopyEntity(billViewResult, bill);

                var servingTable = db.ServingTable.FirstOrDefault(t => t.ID == billViewResult.TableID);
                if (servingTable == null)
                {
                    return(DBResult.NotFound);
                }

                db.ServingTable.Remove(servingTable);

                db.SaveChanges();
                return(DBResult.Succeed);
            }
        }
コード例 #2
0
        public DBResult Discount(BillViewResult billViewResult, out BillViewResult newBillViewResult)
        {
            newBillViewResult = new BillViewResult();
            using (var frontDeskEntities = new FrontDeskEntities())
            {
                using (var warehouseEntities = new WarehouseEntities())
                {
                    if (string.IsNullOrEmpty(billViewResult.DiscountType))
                    {
                        billViewResult.ExactCost = billViewResult.TotalCost;
                    }
                    else
                    {
                        var discount = frontDeskEntities.Discount.FirstOrDefault(d => d.Description == billViewResult.DiscountType);
                        if (discount == null)
                        {
                            return(DBResult.WrongParameter);
                        }

                        billViewResult.Discount = discount.DiscountPercent;

                        if (!string.IsNullOrEmpty(discount.IgnoredCategories))
                        {
                            billViewResult.ExactCost = 0;

                            var ignoredCategories  = discount.IgnoredCategories.Split(',');
                            var detailsViewResults = frontDeskEntities.BillDetails.Where(d => d.OrderID == billViewResult.ID);

                            foreach (var detailsViewResult in detailsViewResults)
                            {
                                var dish = frontDeskEntities.Dish.FirstOrDefault(d => d.Name == detailsViewResult.DishName);
                                if (dish == null)
                                {
                                    return(DBResult.NotFound);
                                }

                                var category = warehouseEntities.Category.FirstOrDefault(c => c.ID == dish.CategoryID);
                                if (category == null)
                                {
                                    return(DBResult.WrongParameter);
                                }

                                var amount = decimal.Parse(detailsViewResult.Amount.ToString());

                                if (ignoredCategories.Contains(category.Name))
                                {
                                    billViewResult.ExactCost += dish.Price * amount;
                                }
                                else
                                {
                                    billViewResult.ExactCost += (dish.Price * amount) * discount.DiscountPercent / 100;
                                }
                            }
                        }
                        else
                        {
                            billViewResult.ExactCost = billViewResult.TotalCost * discount.DiscountPercent / 100;
                        }
                    }

                    var bill = frontDeskEntities.Bill.FirstOrDefault(b => b.ID == billViewResult.ID);
                    if (bill == null)
                    {
                        return(DBResult.NotFound);
                    }

                    EntityHelper.CopyEntity(billViewResult, bill);
                    frontDeskEntities.SaveChanges();
                }
            }

            newBillViewResult = billViewResult;
            return(DBResult.Succeed);
        }
コード例 #3
0
        public DBResult Add(BillViewResult billViewResult)
        {
            int detailsCount  = 1;
            var detailsForeID = BuilderDictionary.ForeIDDictionary.FirstOrDefault(i => i.Key == typeof(BillDetailsViewResult)).Value;
            var nowDate       = DateTime.Now;

            using (var frontDeskEntities = new FrontDeskEntities())
            {
                using (var warehouseEntities = new WarehouseEntities())
                {
                    foreach (var detailsViewResult in billViewResult.Details)
                    {
                        detailsViewResult.ID      = detailsForeID + nowDate.ToString("yyyyMMddHHmmss") + detailsCount;
                        detailsViewResult.OrderID = billViewResult.ID;

                        detailsCount++;

                        var details = EntityHelper.CopyEntity(detailsViewResult, new BillDetails());
                        if (EntityHelper.HasNullProperty(details, new string[] { "WarehouseID", "POID" }))
                        {
                            return(DBResult.WrongParameter);
                        }

                        var detailsExistResult = CheckExists(frontDeskEntities.BillDetails, new string[] { "ID" }, details);
                        if (detailsExistResult != DBResult.Succeed)
                        {
                            return(detailsExistResult);
                        }

                        var dish = frontDeskEntities.Dish.FirstOrDefault(d => d.Name == details.DishName);
                        if (dish == null)
                        {
                            return(DBResult.NotFound);
                        }

                        var amount = decimal.Parse(detailsViewResult.Amount.ToString());
                        billViewResult.TotalCost += dish.Price * amount;

                        if (dish.InventoryControl)
                        {
                            var product = warehouseEntities.Product.FirstOrDefault(p => p.Name == dish.Name);
                            if (product == null)
                            {
                                return(DBResult.NotFound);
                            }

                            var inventoryList = warehouseEntities.InventoryList
                                                .Where(l => l.ProductID == product.ID).OrderBy(l => l.POID).OrderBy(l => l.WarehouseID).FirstOrDefault(l => l.Amount >= 0);
                            if (inventoryList == null)
                            {
                                return(DBResult.InventoryEmpty);
                            }

                            var unitConversion = dish.UnitConversion;
                            if (unitConversion == null)
                            {
                                return(DBResult.NotFound);
                            }

                            var consumedAmount = details.Amount * unitConversion.Value;
                            if (inventoryList.Amount - consumedAmount < 0)
                            {
                                return(DBResult.InventoryEmpty);
                            }

                            inventoryList.Amount -= consumedAmount;

                            details.WarehouseID = inventoryList.WarehouseID;
                            details.POID        = inventoryList.POID;
                        }

                        frontDeskEntities.BillDetails.Add(details);
                    }

                    billViewResult.ExactCost = billViewResult.TotalCost;

                    var bill = EntityHelper.CopyEntity(billViewResult, new Bill());
                    if (EntityHelper.HasNullProperty(bill, new string[] { "TotalCost", "Discount", "DiscountType", "ExactCost", "Remark", "MemberID", "ReceivedMoney", "Change" }))
                    {
                        return(DBResult.WrongParameter);
                    }

                    var billExistResult = CheckExists(frontDeskEntities.Bill, new string[] { "ID" }, bill);
                    if (billExistResult != DBResult.Succeed)
                    {
                        return(billExistResult);
                    }

                    frontDeskEntities.Bill.Add(bill);

                    if (frontDeskEntities.ServingTable.Any(t => t.ID == bill.TableID))
                    {
                        return(DBResult.TableExisted);
                    }

                    frontDeskEntities.ServingTable.Add(new ServingTable {
                        ID = bill.TableID, BillID = bill.ID
                    });

                    frontDeskEntities.SaveChanges();
                    warehouseEntities.SaveChanges();

                    return(DBResult.Succeed);
                }
            }
        }