Exemplo n.º 1
0
        public async Task <IActionResult> PointRule(MemberPointRule pointRule)
        {
            if (ModelState.IsValid)
            {
                //MemberPointRule pointRule = null;
                if (pointRule.Level0 == null && Request.Form.Count > 0)
                {
                    string v = Request.Form["pointRule"];
                    pointRule = MemberPointRule.fromJson(v);
                }

                if (pointRule == null)
                {
                    return(ErrorMessage.BadRequestJsonResult("Cannot parse request context."));
                }

                //MemberPointRule r = JsonConvert.<MemberPointRule>()
                // string bodyStr = GetFromBodyString(Request);
                //MemberPointRule pointRule = MemberPointRule.fromJson(pointRuleValue);
                await AddOrUpdateSetting(SettingName.PointRule.ToString(), "json", pointRule.toJson());

                return(Json("OK"));
            }
            return(ErrorMessage.BadRequestJsonResult(ModelState.Values.SelectMany(x => x.Errors)));
        }
Exemplo n.º 2
0
        private async Task <MemberPointRule> GetPointRule()
        {
            var ruleSetting = await(from s in this._applicationDbContext.Settings
                                    where s.ID.Equals(SettingName.PointRule.ToString(), StringComparison.InvariantCultureIgnoreCase)
                                    select s
                                    ).FirstOrDefaultAsync();

            if (ruleSetting == null)
            {
                return(MemberPointRule.Default);
            }
            else
            {
                return(MemberPointRule.fromJson(ruleSetting.SettingValue));
            }
        }
Exemplo n.º 3
0
        public async Task <IActionResult> PointRule()
        {
            if (ModelState.IsValid)
            {
                SettingViewModel pointRuleSetting = await GetSetting(SettingName.PointRule.ToString());

                if (pointRuleSetting == null)
                {
                    var defaultRule = MemberPointRule.fromJson(null);
                    await PointRule(defaultRule);

                    return(Json(defaultRule));
                }
                else
                {
                    return(Json(MemberPointRule.fromJson(pointRuleSetting.Value)));
                }
            }
            return(ErrorMessage.BadRequestJsonResult(ModelState.Values.SelectMany(x => x.Errors)));
        }
Exemplo n.º 4
0
        public async Task <ActionResult> PointRule(PointRuleViewModel pointRule)
        {
            if (ModelState.IsValid)
            {
                var rule = new MemberPointRule {
                    Level0 = new LevelRule {
                        SelfRate     = new Amount("%", pointRule.Level0SelfRate),
                        SonRate      = new Amount("%", pointRule.Level0SonRate),
                        GrandsonRate = new Amount("%", pointRule.Level0GrandsonRate),
                    },
                    Level1 = new LevelRule {
                        SelfRate = new Amount("%", pointRule.Level1SelfRate),
                    },
                    AvailableAfter = TimeSpan.FromDays(pointRule.AvailableAfter)
                };

                return(await PointRule(rule));
            }
            return(JsonMessage.BadRequestJsonResult(ModelState.Values.ToJson()));
        }
Exemplo n.º 5
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);
        }
Exemplo n.º 6
0
        private async Task <ActionResult> GetUserInfo(ApplicationUser user)
        {
            try
            {
                if (user == null)
                {
                    return(HttpNotFound());
                }



                var role = (await this.UserManager.GetRolesAsync(user.UserName)).FirstOrDefault();
                UserInfoViewModel menber = null;
                if (user.MemberInfo == null)
                {
                    menber = await(from member in this.AppDbContext.Members
                                   where member.MemberID.Equals(user.UserName)
                                   select new UserInfoViewModel
                    {
                        ID                   = member.MemberID,
                        Name                 = member.Name ?? "",
                        Level                = member.Level ?? "",
                        Role                 = role ?? "",
                        RegisterDate         = member.RegisterDate.ToString("yyyy'-'MM'-'dd"),
                        NeedToChangePassword = user.ChangedPassword == false
                    }).FirstOrDefaultAsync();
                }
                else
                {
                    menber = new UserInfoViewModel
                    {
                        ID                   = user.MemberInfo.MemberID,
                        Name                 = user.MemberInfo.Name ?? "",
                        Level                = user.MemberInfo.Level ?? "",
                        Role                 = role ?? "",
                        RegisterDate         = user.MemberInfo.RegisterDate.ToString("yyyy'-'MM'-'dd"),
                        NeedToChangePassword = user.ChangedPassword == false
                    };
                }

                if (menber == null)
                {
                    return(HttpNotFound());
                }

                MemberPointRule pointRule = await this.GetPointRule();

                menber.SelfPointRate  = pointRule.GetPointRate(menber.Level, LevelRelation.Self).ValueOfNumber;
                menber.Down1PointRate = pointRule.GetPointRate(menber.Level, LevelRelation.Son).ValueOfNumber;
                menber.Down2PointRate = pointRule.GetPointRate(menber.Level, LevelRelation.Grandson).ValueOfNumber;

                menber.Level = GetLevelDisplayName(menber.Level);

                return(JsonMessage.JsonResult(menber));
            }
            catch (Exception e)
            {
                return(JsonMessage.BadRequestJsonResult(new
                {
                    Message = e.Message
                }));
            }
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }