private async Task <IActionResult> DoSell(SellToCustomerViewModel model) { var loginUser = await GetCurrentUserAsync(); ProductDesc productDesc = await _applicationDbContext.ProductDesc .Where(m => m.ID.Equals(model.MattressTypeID, StringComparison.InvariantCultureIgnoreCase)) .FirstOrDefaultAsync(); Mattress mattress = new Mattress { ID = model.MattressID, TypeDesc = productDesc, RegisterDate = model.SaleDate, SaleDate = model.SaleDate, }; SaleToCustomerDetail saleToCustomerDetail = new SaleToCustomerDetail { Gifts = model.Gifts, DeliveryAddress = model.DeliveryAddress, Prodect = mattress, Price = productDesc.Price }; SaleToCustomer saleToCustomer = new SaleToCustomer { ID = IDGenerator.GetSaleToCustomerIDGenerator(_applicationDbContext).GetNext(), Customer = new Member { MemberID = model.CustomerID }, SellingAgents = new Member { MemberID = loginUser.UserName }, DealDate = model.SaleDate, }; saleToCustomerDetail.Sale = saleToCustomer; saleToCustomer.DetailItems.Add(saleToCustomerDetail); _applicationDbContext.Mattress.Add(mattress); _applicationDbContext.SaleToCustomer.Add(saleToCustomer); _applicationDbContext.SaleToCustomeDetails.Add(saleToCustomerDetail); var pointItems = await AddMemberPoint(saleToCustomerDetail); _applicationDbContext.SaveChanges(); return(Json(new { saleToCustomerID = saleToCustomer.ID, memberPointItems = pointItems, sellMattressData = new { MattressID = mattress.ID, MattressTypeName = mattress.TypeDesc.Name, DeliveryAddress = saleToCustomerDetail.DeliveryAddress, CustomerID = saleToCustomer.Customer.MemberID, SaleDate = saleToCustomer.DealDate.Date.ToString("yyyy'-'MM'-'dd"), Gifts = saleToCustomerDetail.Gifts } })); }
public MemberPoint(SaleToCustomerDetail saleDetail) : this() { Product = saleDetail.Prodect; ProductBuyer = saleDetail.Sale.Customer; DealDate = saleDetail.Sale.DealDate; OperationBy = saleDetail.Sale.SellingAgents; Type = "FromSale"; }
private async Task <decimal> AddOneMemberPoint(SaleToCustomerDetail saleToCustomerDetail, MemberPointRule pointRule, string customerID, string customerLevel, LevelRelation relation) { if (string.IsNullOrWhiteSpace(customerID) == false && string.IsNullOrWhiteSpace(customerLevel) == false) { MemberPoint menberPoint = new MemberPoint(saleToCustomerDetail); menberPoint.Owner = this.AppDbContext.FindOrAttachToLocal(customerID); menberPoint.UseableDate = pointRule.CalcAvailableDate(menberPoint.DealDate); menberPoint.Quantity = pointRule.Calc(customerLevel, relation, saleToCustomerDetail.Price - saleToCustomerDetail.CashCoupon); menberPoint.ID = IDGenerator.GetMemberPointIDGenerator(this.AppDbContext).GetNext(); await CalcCurrentTotal(menberPoint); this.AppDbContext.MemberPoint.Add(menberPoint); return(menberPoint.Quantity); } return(0); }
private async Task <SellMemberPointViewModel> AddMemberPoint(SaleToCustomerDetail saleToCustomerDetail) { MemberPointRule pointRule = await this.GetPointRule(); // Left JOIN /* * var customers = await (from m1 in _applicationDbContext.Members * join m2 in _applicationDbContext.Members * on m1.ReferenceMemberID equals m2.MemberID * select new { * MemberID = m1.MemberID, * MemberName = m1.Name, * MemberLevel = m1.Level, * * Up1ID = m2.MemberID, * Up1Name = m2.Name, * Up1Level = m2.Level, * Up1ReferenceMemberID = m2.ReferenceMemberID * } into M12 * join m3 in _applicationDbContext.Members * on M12.Up1ReferenceMemberID equals m3.MemberID into M23 * from m5 in M23.DefaultIfEmpty() * where M12.MemberID.Equals(saleToCustomerDetail.Sale.Customer.MemberID, * StringComparison.InvariantCultureIgnoreCase) * select new SellMemberPointViewModel * { * MemberID = M12.MemberID, * MemberName = M12.MemberName, * MemberLevel = M12.MemberLevel, * * Up1ID = M12.Up1ID, * Up1Name = M12.Up1Name, * Up1Level = M12.Up1Level, * * Up2ID = m5.MemberID, * Up2Name = m5.Name, * Up2Level = m5.Level, * }).FirstOrDefaultAsync(); * */ var customers = GetCustomersFromSqlCommand(_applicationDbContext.Database.AsRelational(), saleToCustomerDetail.Sale.Customer.MemberID); if (customers == null) { return(new SellMemberPointViewModel { MemberID = "", MemberName = "", MemberLevel = "", Up1ID = "", Up1Name = "", Up1Level = "", Up2ID = "", Up2Name = "", Up2Level = "" }); } if (string.IsNullOrWhiteSpace(customers.MemberID) == false) { MemberPoint menberPoint = new MemberPoint(saleToCustomerDetail); menberPoint.Owner = new Member { MemberID = customers.MemberID }; menberPoint.UseableDate = pointRule.CalcAvailableDate(menberPoint.DealDate); menberPoint.Quantity = pointRule.Calc(customers.MemberLevel, LevelRelation.Self, saleToCustomerDetail.Price); menberPoint.ID = IDGenerator.GetMemberPointIDGenerator(this._applicationDbContext).GetNext(); var pointInfo = await GetMemberPointInfo(menberPoint.Owner.MemberID); if (pointInfo != null) { menberPoint.CurrentTotalQuantity = pointInfo.PointTotal; } this._applicationDbContext.MemberPoint.Add(menberPoint); customers.PointCount = menberPoint.Quantity; } if (string.IsNullOrWhiteSpace(customers.Up1ID) == false) { MemberPoint menberPoint = new MemberPoint(saleToCustomerDetail); menberPoint.Owner = new Member { MemberID = customers.Up1ID }; menberPoint.UseableDate = pointRule.CalcAvailableDate(menberPoint.DealDate); menberPoint.Quantity = pointRule.Calc(customers.Up1Level, LevelRelation.Son, saleToCustomerDetail.Price); menberPoint.ID = IDGenerator.GetMemberPointIDGenerator(this._applicationDbContext).GetNext(); var pointInfo = await GetMemberPointInfo(menberPoint.Owner.MemberID); if (pointInfo != null) { menberPoint.CurrentTotalQuantity = pointInfo.PointTotal; } this._applicationDbContext.MemberPoint.Add(menberPoint); customers.Up1PointCount = menberPoint.Quantity; } if (string.IsNullOrWhiteSpace(customers.Up2ID) == false) { MemberPoint menberPoint = new MemberPoint(saleToCustomerDetail); menberPoint.Owner = new Member { MemberID = customers.Up2ID }; menberPoint.UseableDate = pointRule.CalcAvailableDate(menberPoint.DealDate); menberPoint.Quantity = pointRule.Calc(customers.Up2Level, LevelRelation.Grandson, saleToCustomerDetail.Price); menberPoint.ID = IDGenerator.GetMemberPointIDGenerator(this._applicationDbContext).GetNext(); var pointInfo = await GetMemberPointInfo(menberPoint.Owner.MemberID); if (pointInfo != null) { menberPoint.CurrentTotalQuantity = pointInfo.PointTotal; } this._applicationDbContext.MemberPoint.Add(menberPoint); customers.Up2PointCount = menberPoint.Quantity; } return(customers); }
private async Task <SellMemberPointViewModel> AddMemberPoint(SaleToCustomerDetail saleToCustomerDetail) { MemberPointRule pointRule = await this.GetPointRule(); // Left JOIN var customers = await(from m1 in this.AppDbContext.Members join m2 in this.AppDbContext.Members on m1.ReferenceMemberID equals m2.MemberID where m1.MemberID.Equals(saleToCustomerDetail.Sale.Customer.MemberID, StringComparison.InvariantCultureIgnoreCase) select m2 into M01 join m3 in this.AppDbContext.Members on M01.ReferenceMemberID equals m3.MemberID into M02 from m4 in M02.DefaultIfEmpty() select new { MemberID = M01.MemberID, MemberName = M01.Name, MemberLevel = M01.Level, Up1ID = m4.MemberID, Up1Name = m4.Name, Up1Level = m4.Level, Up1ReferenceMemberID = m4.ReferenceMemberID } into M03 join m5 in this.AppDbContext.Members on M03.Up1ReferenceMemberID equals m5.MemberID into M04 from m6 in M04.DefaultIfEmpty() select new SellMemberPointViewModel { MemberID = M03.MemberID, MemberName = M03.MemberName, MemberLevel = M03.MemberLevel, Up1ID = M03.Up1ID, Up1Name = M03.Up1Name, Up1Level = M03.Up1Level, Up2ID = m6.MemberID, Up2Name = m6.Name, Up2Level = m6.Level, }).FirstOrDefaultAsync(); //var customers = GetCustomersFromSqlCommand(AppDbContext.Database.Connection, // saleToCustomerDetail.Sale.Customer.MemberID); if (customers == null) { return(new SellMemberPointViewModel { MemberID = "", MemberName = "", MemberLevel = "", Up1ID = "", Up1Name = "", Up1Level = "", Up2ID = "", Up2Name = "", Up2Level = "" }); } customers.PointCount = await AddOneMemberPoint(saleToCustomerDetail, pointRule, customers.MemberID, customers.MemberLevel, LevelRelation.Self); customers.Up1PointCount = await AddOneMemberPoint(saleToCustomerDetail, pointRule, customers.Up1ID, customers.Up1Level, LevelRelation.Son); customers.Up2PointCount = await AddOneMemberPoint(saleToCustomerDetail, pointRule, customers.Up2ID, customers.Up2Level, LevelRelation.Grandson); return(customers); }
private async Task <ActionResult> DoSell(SellToCustomerViewModel model) { var loginUser = await GetCurrentUserAsync(); ProductDesc productDesc = await AppDbContext.ProductDesc .Where(m => m.ID.Equals(model.MattressTypeID, StringComparison.InvariantCultureIgnoreCase)) .FirstOrDefaultAsync(); Mattress mattress = new Mattress { ID = model.MattressID, TypeDesc = productDesc, RegisterDate = model.SaleDate, SaleDate = model.SaleDate, }; SaleToCustomerDetail saleToCustomerDetail = new SaleToCustomerDetail { Gifts = model.Gifts, DeliveryAddress = model.DeliveryAddress, Prodect = mattress, Price = productDesc.Price, CashCoupon = model.IsUseCashCoupon ? 1000 : 0 }; SaleToCustomer saleToCustomer = new SaleToCustomer { ID = IDGenerator.GetSaleToCustomerIDGenerator(AppDbContext).GetNext(), Customer = this.AppDbContext.FindOrAttachToLocal(model.CustomerID), SellingAgents = this.AppDbContext.FindOrAttachToLocal(loginUser.UserName), DealDate = model.SaleDate, }; saleToCustomerDetail.Sale = saleToCustomer; saleToCustomer.DetailItems.Add(saleToCustomerDetail); // this.AppDbContext.TryToAttach(saleToCustomer.Customer, (l, r) => r.MemberID.Equals(l.MemberID)); // this.AppDbContext.TryToAttach(saleToCustomer.SellingAgents, (l, r) => r.MemberID.Equals(l.MemberID)); //AppDbContext.Members.Attach(saleToCustomer.Customer); // AppDbContext.Members.Attach(saleToCustomer.SellingAgents); AppDbContext.Mattress.Add(mattress); AppDbContext.SaleToCustomer.Add(saleToCustomer); AppDbContext.SaleToCustomeDetails.Add(saleToCustomerDetail); var pointItems = await AddMemberPoint(saleToCustomerDetail); AppDbContext.SaveChanges(); return(Json(new { saleToCustomerID = saleToCustomer.ID, memberPointItems = pointItems, sellMattressData = new { MattressID = mattress.ID, MattressTypeName = mattress.TypeDesc.DisplayName, DeliveryAddress = saleToCustomerDetail.DeliveryAddress, CustomerID = saleToCustomer.Customer.MemberID, SaleDate = saleToCustomer.DealDate.Date.ToString("yyyy'-'MM'-'dd"), Gifts = saleToCustomerDetail.Gifts, IsUseCashCoupon = model.IsUseCashCoupon }, JsonRequestBehavior.AllowGet })); }