public ActionResult Login(string userName, string password)
        {
            if (string.IsNullOrEmpty(userName))
            {
                ModelState.AddModelError("UserName", "Missing user name");
                return(Index());
            }
            if (string.IsNullOrEmpty(password))
            {
                ModelState.AddModelError("Password", "Missing password");
                return(Index());
            }

            var user    = new User();
            var service = new UserService();

            var result = service.Check(userName, password, out user);

            if (GetModelError(result))
            {
                return(Index());
            }

            var userViewResult = EntityHelper.CopyEntity(user, new UserViewResult());

            userViewResult.Password = string.Empty;

            var cookie = UserAuthentication.CreateCookie(userViewResult);

            HttpContext.Response.Cookies.Remove(cookie.Name);
            HttpContext.Response.Cookies.Add(cookie);

            return(RedirectToAction("Index", "Home"));
        }
        public DBResult EditAll(List <User> entities)
        {
            if (entities == null)
            {
                return(DBResult.WrongParameter);
            }

            using (var db = new SystemEntities())
            {
                foreach (var entity in entities)
                {
                    if (EntityHelper.HasNullProperty(entity, new string[] { "Password" }))
                    {
                        return(DBResult.WrongParameter);
                    }

                    var user = db.User.FirstOrDefault(u => u.ID == entity.ID);
                    if (user == null)
                    {
                        return(DBResult.NotFound);
                    }

                    var existResult = CheckExists(db.User, new string[] { "ShortID", "UserName" }, entity, true);
                    if (existResult != DBResult.Succeed)
                    {
                        return(existResult);
                    }

                    EntityHelper.CopyEntity(entity, user, new string[] { "Password" });
                }

                db.SaveChanges();
                return(DBResult.Succeed);
            }
        }
Пример #3
0
        public ActionResult EditPage(int tableID)
        {
            var service = new VBillService();
            var vBills  = service.QueryServing(tableID);

            if (vBills == null || vBills.Count() == 0)
            {
                GetModelError(DBResult.NotFound);
                return(EditTablePage());
            }

            var billViewResult = EntityHelper.CopyEntity(vBills.First(), new BillViewResult());

            billViewResult.ID = vBills.First().BillID;

            billViewResult.Details = EntityHelper.CopyEntities(vBills, new List <BillDetailsViewResult>());
            for (int i = 1; i < billViewResult.Details.Count(); i++)
            {
                billViewResult.Details[i].ID = vBills[i].DetailsID;
            }

            ViewBag.TimePeriod = ConverterDictionary.TimePeriodDictionary.FirstOrDefault(p => p.Key == billViewResult.TimePeriod).Value;

            return(View("EditPage", billViewResult));
        }
        protected ActionResult Edit(S viewResult, int id, string[] succeedPage, Func <int, ActionResult> errorPage)
        {
            if (!ModelState.IsValid)
            {
                return(errorPage(id));
            }

            var viewResultID = viewResult.GetType().GetProperty("ID");

            viewResultID.SetValue(viewResult, id);

            var service = ServiceHelper.GetDataService <T>();
            var result  = service.Edit(EntityHelper.CopyEntity(viewResult, new T()));

            if (result == DBResult.Succeed)
            {
                return(RedirectToAction(succeedPage[0], succeedPage[1]));
            }
            else
            {
                var error = DBDictionary.DBResultDictionary.FirstOrDefault(e => e.Key == result).Value;
                ModelState.AddModelError(error[0], error[1]);
            }

            return(errorPage(id));
        }
Пример #5
0
        protected T SetViewResult <T, S>(T viewResult, string pOID = null)
            where T : IOrder <S>, new()
            where S : IOrderDetails, new()
        {
            if (!string.IsNullOrEmpty(pOID))
            {
                var service    = new VInventoryListService();
                int totalCount = 0;

                var queryResult = service.Query(new VInventoryListQueryConditions {
                    POID = pOID
                }, out totalCount);
                if (totalCount != 0)
                {
                    viewResult         = EntityHelper.CopyEntity(queryResult.First(), viewResult);
                    viewResult.Details = EntityHelper.CopyEntities(queryResult, new List <S>());
                }
            }

            var orderForeID = BuilderDictionary.ForeIDDictionary.FirstOrDefault(i => i.Key == typeof(T)).Value;
            var nowDate     = DateTime.Now;

            viewResult.ID   = orderForeID + nowDate.ToString("yyyyMMddHHmmss");
            viewResult.Date = nowDate;
            //EntityHelper.SetEntityID(viewResult, orderForeID + nowDate.ToString("yyyyMMddHHmmss"));
            //EntityHelper.SetPropertyValue(viewResult, "Date", nowDate);

            return(viewResult);
        }
        public DBResult EditAll(List <InventoryList> entities)
        {
            if (entities == null)
            {
                return(DBResult.WrongParameter);
            }

            using (var db = new WarehouseEntities())
            {
                foreach (var entity in entities)
                {
                    if (EntityHelper.HasNullProperty(entity))
                    {
                        return(DBResult.WrongParameter);
                    }

                    var inventoryList = db.InventoryList.FirstOrDefault(l => l.POID == entity.POID);
                    if (inventoryList == null)
                    {
                        return(DBResult.NotFound);
                    }

                    EntityHelper.CopyEntity(entity, inventoryList);
                }

                db.SaveChanges();
                return(DBResult.Succeed);
            }
        }
Пример #7
0
        private DBResult EditStartOfTerm(StartOfTerm entity)
        {
            if (entity == null)
            {
                return(DBResult.WrongParameter);
            }

            string foreID = BuilderDictionary.ForeIDDictionary.FirstOrDefault(p => p.Key == typeof(StartOfTermViewResult)).Value;

            entity.ID = foreID + entity.Date.ToString("yyyyMMddHHmmss");

            using (var db = new ReportEntities())
            {
                var startOfTerm = db.StartOfTerm.FirstOrDefault(t => t.ID == entity.ID);
                if (startOfTerm == null)
                {
                    db.StartOfTerm.Add(entity);
                }

                EntityHelper.CopyEntity(entity, startOfTerm);

                db.SaveChanges();
                return(DBResult.Succeed);
            }
        }
Пример #8
0
        private DBResult Add(List <MonthlyReportViewResult> viewResults)
        {
            if (viewResults == null)
            {
                return(DBResult.WrongParameter);
            }

            using (var db = new ReportEntities())
            {
                foreach (var viewResult in viewResults)
                {
                    var monthlyReport = EntityHelper.CopyEntity(viewResult, new MonthlyReport());
                    db.MonthlyReport.Add(monthlyReport);

                    if (viewResult.Details.Count == 0)
                    {
                        continue;
                    }

                    foreach (var detailsViewResult in viewResult.Details)
                    {
                        var mReportDetails = EntityHelper.CopyEntity(detailsViewResult, new MReportDetails());
                        db.MReportDetails.Add(mReportDetails);
                    }
                }

                db.SaveChanges();
                return(DBResult.Succeed);
            }
        }
Пример #9
0
        public ActionResult DiscountPage(int tableID)
        {
            var service = new VBillService();
            var vBills  = service.QueryServing(tableID);

            if (vBills == null || vBills.Count() == 0)
            {
                GetModelError(DBResult.NotFound);
                return(EditTablePage());
            }

            var billViewResult = EntityHelper.CopyEntity(vBills.First(), new BillViewResult());

            billViewResult.ID = vBills.First().BillID;

            billViewResult.Details = EntityHelper.CopyEntities(vBills, new List <BillDetailsViewResult>());
            for (int i = 1; i < billViewResult.Details.Count(); i++)
            {
                billViewResult.Details[i].ID = vBills[i].DetailsID;
            }

            ViewBag.Discounts = GetSelectList <Discount>(new DiscountQueryConditions {
                OrderBy = "ID", IgnoredProperties = new string[] { "IsMemberOnly" }
            }, "Description", "Description");
            ViewBag.TimePeriod = ConverterDictionary.TimePeriodDictionary.FirstOrDefault(p => p.Key == billViewResult.TimePeriod).Value;

            return(View("DiscountPage", billViewResult));
        }
        public ActionResult Index()
        {
            var userViewResult = new UserViewResult {
                UserName = HttpContext.User.Identity.Name
            };

            EntityHelper.CopyEntity((UserIdentity)HttpContext.User.Identity, userViewResult);

            ViewBag.Role = ConverterDictionary.UserRoleDictionary.FirstOrDefault(p => p.Key == userViewResult.Role).Value;

            return(View("Index", userViewResult));
        }
Пример #11
0
        private DBResult Edit(List <MonthlyReportViewResult> viewResults)
        {
            if (viewResults == null)
            {
                return(DBResult.WrongParameter);
            }

            using (var db = new ReportEntities())
            {
                foreach (var viewResult in viewResults)
                {
                    var monthlyReport = db.MonthlyReport.FirstOrDefault(r => r.ID == viewResult.ID);
                    if (monthlyReport == null)
                    {
                        db.MonthlyReport.Add(EntityHelper.CopyEntity(viewResult, new MonthlyReport()));
                    }

                    EntityHelper.CopyEntity(viewResult, monthlyReport);

                    if (viewResult.Details.Count == 0)
                    {
                        continue;
                    }

                    foreach (var detailsViewResult in viewResult.Details)
                    {
                        var mReportDetails = db.MReportDetails.FirstOrDefault(d => d.ID == detailsViewResult.ID);
                        if (mReportDetails == null)
                        {
                            db.MReportDetails.Add(mReportDetails);
                        }

                        EntityHelper.CopyEntity(detailsViewResult, mReportDetails);
                    }
                }

                db.SaveChanges();
                return(DBResult.Succeed);
            }
        }
        public ActionResult Edit(MemberViewResult viewResult, string id)
        {
            if (!ModelState.IsValid)
            {
                return(EditPage(id));
            }

            var service = new MemberService();
            var result  = service.Edit(EntityHelper.CopyEntity(viewResult, new Member()));

            if (result == DBResult.Succeed)
            {
                return(RedirectToAction("Index", "Member"));
            }
            else
            {
                var error = DBDictionary.DBResultDictionary.FirstOrDefault(e => e.Key == result).Value;
                ModelState.AddModelError(error[0], error[1]);
            }

            return(EditPage(id));
        }
        protected ActionResult Edit(S viewResult, int id, Func <ActionResult> succeedPage, Func <int, ActionResult> errorPage)
        {
            if (!ModelState.IsValid)
            {
                return(errorPage(id));
            }

            var service = ServiceHelper.GetDataService <T>();
            var result  = service.Edit(EntityHelper.CopyEntity(viewResult, new T()));

            if (result == DBResult.Succeed)
            {
                return(succeedPage());
            }
            else
            {
                var error = DBDictionary.DBResultDictionary.FirstOrDefault(e => e.Key == result).Value;
                ModelState.AddModelError(error[0], error[1]);
            }

            return(errorPage(id));
        }
Пример #14
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);
            }
        }
Пример #15
0
        private List <MonthlyReportViewResult> CalculateMonthlyReport(DateTime dateStart, DateTime?dateEnd = null)
        {
            int reportCount  = 1;
            int productCount = 1;

            if (dateEnd == null)
            {
                dateEnd = dateStart.Month == 12 ? new DateTime(dateStart.Year + 1, 1, 1) : new DateTime(dateStart.Year, dateStart.Month + 1, 1);
            }

            string reportForeID  = BuilderDictionary.ForeIDDictionary.FirstOrDefault(p => p.Key == typeof(MonthlyReportViewResult)).Value;
            string detailsForeID = BuilderDictionary.ForeIDDictionary.FirstOrDefault(p => p.Key == typeof(MReportDetailsViewResult)).Value;

            var reports = new List <MonthlyReportViewResult>();

            using (var reportEntities = new ReportEntities())
            {
                using (var warehouseEntities = new WarehouseEntities())
                {
                    using (var frontDeskEntities = new FrontDeskEntities())
                    {
                        var startOfTerms           = reportEntities.StartOfTerm.Where(s => s.Date == dateStart);
                        var vPurchaseOrders        = reportEntities.VPurchaseOrder.Where(o => o.Date >= dateStart && o.Date < dateEnd);
                        var vCreditOrders          = reportEntities.VCreditOrder.Where(o => o.Date >= dateStart && o.Date < dateEnd);
                        var vMaterialsRequisitions = reportEntities.VMaterialsRequisition.Where(o => o.Date >= dateStart && o.Date < dateEnd);
                        var vMaterialsReturnOrders = reportEntities.VMaterialsReturnOrder.Where(o => o.Date >= dateStart && o.Date < dateEnd);
                        var vStockingLists         = reportEntities.VStockingList.Where(o => o.Date >= dateStart && o.Date < dateEnd);
                        var vBills = frontDeskEntities.VBill.Where(o => o.Date >= dateStart && o.Date < dateEnd);

                        var warehouses = warehouseEntities.Warehouse.ToList();
                        var products   = warehouseEntities.Product.ToList();

                        foreach (var warehouse in warehouses)
                        {
                            var viewResult = new MonthlyReportViewResult
                            {
                                ID            = reportForeID + dateStart.ToString("yyyyMMddHHmmss") + reportCount,
                                WarehouseName = warehouse.Name,
                                Date          = dateStart,
                                Details       = new List <MReportDetailsViewResult>()
                            };

                            reportCount++;

                            foreach (var product in products)
                            {
                                var productStart          = startOfTerms.FirstOrDefault(s => s.ProductName == product.Name && s.WarehouseName == warehouse.Name);
                                var productPurchaseOrders = vPurchaseOrders.Where(o => o.ProductName == product.Name && o.WarehouseName == warehouse.Name);

                                if (productStart == null && productPurchaseOrders.Count() == 0)
                                {
                                    continue;
                                }

                                var    productEnd       = warehouseEntities.VInventoryList.Where(l => l.ProductName == product.Name && l.WarehouseName == warehouse.Name);
                                double productEndAmount = productEnd.Count() == 0 ? 0 : productEnd.Sum(l => l.Amount);

                                var detailsViewResult = new MReportDetailsViewResult
                                {
                                    ID                     = detailsForeID + dateStart.ToString("yyyyMMddHHmmss") + productCount,
                                    OrderID                = viewResult.ID,
                                    ProductName            = product.Name,
                                    PurchasePrice          = 0,
                                    PurchaseAmount         = 0,
                                    PurchaseTotalPrice     = 0,
                                    CreditPrice            = 0,
                                    CreditAmount           = 0,
                                    CreditTotalPrice       = 0,
                                    MRequisitionPrice      = 0,
                                    MRequisitionAmount     = 0,
                                    MRequisitionTotalPrice = 0,
                                    MReturnPrice           = 0,
                                    MReturnAmount          = 0,
                                    MReturnTotalPrice      = 0,
                                    SListPrice             = 0,
                                    SListAmount            = 0,
                                    SListTotalPrice        = 0,
                                    StartOfTerm            = EntityHelper.CopyEntity(productStart, new StartOfTermViewResult())
                                };

                                productCount++;

                                var productCreditOrders = vCreditOrders
                                                          .Where(o => o.ProductName == product.Name && o.WarehouseName == warehouse.Name).ToList();

                                var productMaterialsRequisitions = vMaterialsRequisitions
                                                                   .Where(o => o.ProductName == product.Name && o.WarehouseName == warehouse.Name).ToList();

                                var productMaterialsReturnOrders = vMaterialsReturnOrders
                                                                   .Where(o => o.ProductName == product.Name && o.WarehouseName == warehouse.Name).ToList();

                                var productStockingLists = vStockingLists
                                                           .Where(o => o.ProductName == product.Name && o.WarehouseName == warehouse.Name).ToList();

                                if (productPurchaseOrders != null)
                                {
                                    double?totalPrice = productPurchaseOrders.Sum(o => o.TotalPrice);
                                    double amount     = productPurchaseOrders.Sum(o => o.Amount);

                                    if (totalPrice != null && amount != 0)
                                    {
                                        detailsViewResult.PurchaseTotalPrice = (decimal)totalPrice.Value;
                                        detailsViewResult.PurchaseAmount     = amount;
                                        detailsViewResult.PurchasePrice      = (decimal)(totalPrice.Value / amount);
                                    }
                                }

                                if (productMaterialsRequisitions != null)
                                {
                                    double?totalPrice = productMaterialsRequisitions.Sum(o => o.TotalPrice);
                                    double amount     = productMaterialsRequisitions.Sum(o => o.Amount);

                                    if (totalPrice != null && amount != 0)
                                    {
                                        detailsViewResult.MRequisitionTotalPrice = (decimal)totalPrice.Value;
                                        detailsViewResult.MRequisitionAmount     = amount;
                                        detailsViewResult.MRequisitionPrice      = (decimal)(totalPrice.Value / amount);
                                    }
                                }

                                if (productMaterialsReturnOrders != null)
                                {
                                    double?totalPrice = productMaterialsReturnOrders.Sum(o => o.TotalPrice);
                                    double amount     = productMaterialsReturnOrders.Sum(o => o.Amount);

                                    if (totalPrice != null && amount != 0)
                                    {
                                        detailsViewResult.MReturnTotalPrice = (decimal)totalPrice.Value;
                                        detailsViewResult.MReturnAmount     = amount;
                                        detailsViewResult.MReturnPrice      = (decimal)(totalPrice.Value / amount);
                                    }
                                }


                                if (productCreditOrders != null)
                                {
                                    double?totalPrice = productCreditOrders.Sum(o => o.TotalPrice);
                                    double amount     = productCreditOrders.Sum(o => o.Amount);

                                    if (totalPrice != null && amount != 0)
                                    {
                                        detailsViewResult.CreditTotalPrice = (decimal)totalPrice.Value;
                                        detailsViewResult.CreditAmount     = amount;
                                        detailsViewResult.CreditPrice      = (decimal)(totalPrice.Value / amount);
                                    }
                                }

                                if (productCreditOrders != null)
                                {
                                    double?totalPrice = productCreditOrders.Sum(o => o.TotalPrice);
                                    double amount     = productCreditOrders.Sum(o => o.Amount);

                                    if (totalPrice != null && amount != 0)
                                    {
                                        detailsViewResult.CreditTotalPrice = (decimal)totalPrice.Value;
                                        detailsViewResult.CreditAmount     = amount;
                                        detailsViewResult.CreditPrice      = (decimal)(totalPrice.Value / amount);
                                    }
                                }

                                if (productStockingLists != null)
                                {
                                    double?totalPrice = productStockingLists.Sum(o => o.TotalPrice);
                                    double amount     = productStockingLists.Sum(o => o.Amount);

                                    if (totalPrice != null && amount != 0)
                                    {
                                        detailsViewResult.SListTotalPrice = (decimal)totalPrice.Value;
                                        detailsViewResult.SListAmount     = amount;
                                        detailsViewResult.SListPrice      = (decimal)(totalPrice.Value / amount);
                                    }
                                }

                                var dish = frontDeskEntities.Dish.FirstOrDefault(d => d.Name == product.Name && d.InventoryControl == true);
                                if (dish != null && dish.UnitConversion != null)
                                {
                                    double unitConversion = dish.UnitConversion.Value;

                                    var dishBills = vBills.Where(b => b.DishName == dish.Name);
                                    foreach (var dishBill in dishBills)
                                    {
                                        var dishDetails = frontDeskEntities.BillDetails.FirstOrDefault(d => d.ID == dishBill.DetailsID);
                                        if (dishDetails == null)
                                        {
                                            continue;
                                        }

                                        decimal productPrice  = warehouseEntities.PODetails.FirstOrDefault(d => d.ID == dishDetails.POID).Price;
                                        double  productAmount = dishBill.Amount * unitConversion;

                                        detailsViewResult.BillTotalPrice += productPrice * (decimal)productAmount;
                                        detailsViewResult.BillAmount     += productAmount;
                                    }

                                    if (detailsViewResult.BillAmount != 0)
                                    {
                                        detailsViewResult.BillPrice = detailsViewResult.BillTotalPrice / (decimal)detailsViewResult.BillAmount;
                                    }
                                }

                                viewResult.Details.Add(detailsViewResult);
                            }

                            reports.Add(viewResult);
                        }
                    }
                }
            }

            return(reports);
        }
Пример #16
0
        public DBResult Add(TransferOrderViewResult orderViewResult)
        {
            int detailsCount = 1;

            foreach (var detailsViewResult in orderViewResult.Details)
            {
                var detailsForeID = BuilderDictionary.ForeIDDictionary.FirstOrDefault(i => i.Key == typeof(TransferOrderViewResult)).Value;
                var nowDate       = DateTime.Now;

                detailsViewResult.ID      = detailsForeID + nowDate.ToString("yyyyMMddHHmmss") + detailsCount;
                detailsViewResult.OrderID = orderViewResult.ID;

                detailsCount++;
            }

            var order = EntityHelper.CopyEntity(orderViewResult, new TransferOrder());

            if (EntityHelper.HasNullProperty(order, new string[] { "Remark" }))
            {
                return(DBResult.WrongParameter);
            }

            using (var db = new WarehouseEntities())
            {
                var orderExistResult = CheckExists(db.TransferOrder, new string[] { "ID" }, order);
                if (orderExistResult != DBResult.Succeed)
                {
                    return(orderExistResult);
                }

                db.TransferOrder.Add(order);

                var outWarehouse = db.Warehouse.FirstOrDefault(w => w.Name == order.OutName);
                var inWarehouse  = db.Warehouse.FirstOrDefault(w => w.Name == order.InName);
                if (outWarehouse == null || inWarehouse == null)
                {
                    return(DBResult.NotFound);
                }

                foreach (var detailsViewResult in orderViewResult.Details)
                {
                    var details = EntityHelper.CopyEntity(detailsViewResult, new TODetails());
                    if (EntityHelper.HasNullProperty(details))
                    {
                        return(DBResult.WrongParameter);
                    }

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

                    db.TODetails.Add(details);

                    var product = db.Product.FirstOrDefault(p => p.Name == details.ProductName);
                    if (product == null)
                    {
                        return(DBResult.NotFound);
                    }

                    var outInventoryList = db.InventoryList.FirstOrDefault(l => l.POID == details.POID && l.WarehouseID == outWarehouse.ID);
                    if (outInventoryList == null)
                    {
                        return(DBResult.NotFound);
                    }

                    outInventoryList.Amount -= details.Amount;

                    var inInventoryList = db.InventoryList.FirstOrDefault(l => l.POID == details.POID && l.WarehouseID == inWarehouse.ID);
                    if (inInventoryList == null)
                    {
                        db.InventoryList.Add(new InventoryList {
                            ProductID = product.ID, POID = details.POID, WarehouseID = inWarehouse.ID, Amount = details.Amount
                        });
                    }
                    else
                    {
                        inInventoryList.Amount += details.Amount;
                    }
                }

                db.SaveChanges();
                return(DBResult.Succeed);
            }
        }
        public DBResult Add <T, S, R, U>(T orderViewResult, string[] orderIgnoreNullCheck, string[] orderCheckExists,
                                         string[] detailsIgnoreNullCheck, string[] detailsCheckExists)
            where T : IOrder <S>
            where S : IOrderDetails
            where R : class, new()
            where U : class, new()
        {
            int detailsCount  = 1;
            var detailsForeID = BuilderDictionary.ForeIDDictionary.FirstOrDefault(i => i.Key == typeof(S)).Value;
            var nowDate       = DateTime.Now;

            string warehouseName = orderViewResult.WarehouseName;

            foreach (var detailsViewResult in orderViewResult.Details)
            {
                detailsViewResult.ID      = detailsForeID + nowDate.ToString("yyyyMMddHHmmss") + detailsCount;
                detailsViewResult.OrderID = orderViewResult.ID;

                detailsCount++;
            }

            var order = EntityHelper.CopyEntity(orderViewResult, new R());

            if (EntityHelper.HasNullProperty(order, orderIgnoreNullCheck))
            {
                return(DBResult.WrongParameter);
            }

            using (var db = new WarehouseEntities())
            {
                var orderSet   = db.Set <R>();
                var detailsSet = db.Set <U>();

                var orderExistResult = CheckExists(orderSet, orderCheckExists, order);
                if (orderExistResult != DBResult.Succeed)
                {
                    return(orderExistResult);
                }

                orderSet.Add(order);

                var warehouse = db.Warehouse.FirstOrDefault(w => w.Name == warehouseName);
                if (warehouse == null)
                {
                    return(DBResult.NotFound);
                }

                foreach (var detailsViewResult in orderViewResult.Details)
                {
                    string productName = detailsViewResult.ProductName;
                    double amount      = detailsViewResult.Amount;

                    var details = EntityHelper.CopyEntity(detailsViewResult, new U());

                    if (EntityHelper.HasNullProperty(details, detailsIgnoreNullCheck))
                    {
                        return(DBResult.WrongParameter);
                    }

                    var detailsExistResult = CheckExists(detailsSet, detailsCheckExists, details);
                    if (detailsExistResult != DBResult.Succeed)
                    {
                        return(detailsExistResult);
                    }

                    detailsSet.Add(details);

                    var product = db.Product.FirstOrDefault(p => p.Name == productName);
                    if (product == null)
                    {
                        return(DBResult.NotFound);
                    }

                    if (order.GetType() == typeof(PurchaseOrder))
                    {
                        var newlist = new InventoryList {
                            ProductID = product.ID, WarehouseID = warehouse.ID, Amount = amount, POID = detailsViewResult.ID
                        };
                        db.InventoryList.Add(newlist);
                    }
                    else
                    {
                        var pOID = EntityHelper.GetPropertyValue(details, "POID").ToString();

                        var inventoryList = db.InventoryList.FirstOrDefault(l => l.POID == pOID && l.WarehouseID == warehouse.ID);
                        if (inventoryList == null)
                        {
                            return(DBResult.NotFound);
                        }

                        var type = order.GetType();

                        if (type == typeof(MaterialsReturnOrder))
                        {
                            inventoryList.Amount += amount;
                        }
                        if (type == typeof(CreditOrder) || type == typeof(MaterialsRequisition))
                        {
                            inventoryList.Amount -= amount;
                        }
                        if (type == typeof(StocktakingList))
                        {
                            inventoryList.Amount = amount;
                        }
                    }
                }

                db.SaveChanges();
                return(DBResult.Succeed);
            }
        }
Пример #18
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);
                }
            }
        }
Пример #19
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);
        }
Пример #20
0
        public List <MonthlyReportViewResult> Get(DateTime date)
        {
            int      totalCount = 0;
            int      startOfTermsCount;
            DateTime monthStart = new DateTime(date.Year, date.Month, 1);

            var startOfTerms = Query <StartOfTerm>(new StartOfTermQueryConditions {
                Date = monthStart
            }, out startOfTermsCount);
            var results = Query <MonthlyReport>(new MonthlyReportQueryConditions {
                Date = monthStart
            }, out totalCount);

            if (results != null && totalCount != 0)
            {
                var viewResults = EntityHelper.CopyEntities(results, new List <MonthlyReportViewResult>());
                foreach (var viewResult in viewResults)
                {
                    int detailsCount = 0;
                    viewResult.Details = new List <MReportDetailsViewResult>();

                    var details = Query <MReportDetails>(new MReportDetailsQueryConditions {
                        OrderID = viewResult.ID
                    }, out detailsCount);
                    if (details != null && detailsCount != 0)
                    {
                        viewResult.Details.AddRange(EntityHelper.CopyEntities(details, new List <MReportDetailsViewResult>()));
                        foreach (var detailsViewResult in viewResult.Details)
                        {
                            detailsViewResult.StartOfTerm = new StartOfTermViewResult();

                            var startOfTerm = startOfTerms
                                              .FirstOrDefault(s => s.ProductName == detailsViewResult.ProductName && s.WarehouseName == viewResult.WarehouseName);
                            if (startOfTerms != null)
                            {
                                detailsViewResult.StartOfTerm = EntityHelper.CopyEntity(startOfTerm, new StartOfTermViewResult());
                            }
                        }
                    }
                }

                return(viewResults);
            }

            if (startOfTermsCount == 0)
            {
                int      lastReportsCount = 0;
                DateTime lastMonthStart   = date.Month == 1 ? new DateTime(date.Year - 1, 12, 1) : new DateTime(date.Year, date.Month - 1, 1);

                var lastReports = Query <MonthlyReport>(new MonthlyReportQueryConditions {
                    Date = lastMonthStart
                }, out lastReportsCount);
                if (lastReportsCount != 0)
                {
                    foreach (var lastReport in lastReports)
                    {
                        int detailsCount = 0;

                        var details = Query <MReportDetails>(new MReportDetailsQueryConditions {
                            OrderID = lastReport.ID
                        }, out detailsCount);
                        if (detailsCount != 0)
                        {
                            foreach (var detail in details)
                            {
                                var newStartOfTerm = new StartOfTerm
                                {
                                    Date          = lastReport.Date,
                                    WarehouseName = lastReport.WarehouseName,
                                    ProductName   = detail.ProductName,
                                    Price         = detail.SListPrice,
                                    Amount        = detail.SListAmount,
                                    TotalPrice    = detail.SListTotalPrice
                                };

                                var termDBResult = AddStartOfTerm(newStartOfTerm);
                                if (termDBResult != DBResult.Succeed)
                                {
                                    return(new List <MonthlyReportViewResult>());
                                }
                            }
                        }
                    }
                }
            }

            var calViewResults = CalculateMonthlyReport(monthStart);

            var dBResult = Add(calViewResults);

            if (dBResult != DBResult.Succeed)
            {
                return(new List <MonthlyReportViewResult>());
            }

            return(calViewResults);
        }