コード例 #1
0
        public HttpResponseMessage Post(JObject jsonObject)
        {
            Boolean  isValidCoupon = false;
            DateTime currentTime   = DateTime.Now;
            string   message       = string.Empty;
            Int32    couponId      = 0;
            decimal  amount        = 0;

            dynamic vm            = jsonObject;
            var     registrations = new List <Registration>();

            //populate couponCode
            var couponCode = (string)jsonObject["couponCode"];

            //populate registrations
            foreach (dynamic reg in vm.regs)
            {
                var registration = new Registration
                {
                    EventureListId = reg.eventureListId,
                    ParticipantId  = reg.partId,
                    //Name = reg.displayList, //mjb don't use this
                    ListAmount  = reg.fee,
                    Quantity    = reg.quantity,
                    TotalAmount = Convert.ToDecimal(reg.fee)
                };
                registrations.Add(registration);
            }

            //get coupon
            var coupons = db.Coupons
                          .Where(c => c.DateStart <currentTime &&
                                                   c.DateEnd> currentTime &&
                                 c.Active &&
                                 c.Code == couponCode); //&& c.ownerId == ownerId

            if (coupons.Any())
            {
                isValidCoupon = true;
                couponId      = coupons.FirstOrDefault().Id;
            }
            else
            {
                message  = "valid coupon is not found";
                amount   = 0;
                couponId = -1;
            }

            if (isValidCoupon) //&& notspecialcase   --either owner
            {
                foreach (var reg in registrations)
                {
                    bool   isValidForThisReg = true;
                    string couponType        = coupons.FirstOrDefault().CouponType;

                    //check type and verify valid for owner/event/list
                    switch (couponType)
                    {
                    case "owner":
                        var listQuery = db.EventureLists.Where(l => l.Id == reg.EventureListId).Select(l => l.EventureId);
                        var ownerId   = db.Eventures
                                        .Where(e => listQuery.Contains(e.Id))
                                        .Select(e => e.OwnerId)
                                        .SingleOrDefault();
                        if (ownerId == coupons.FirstOrDefault().CouponTypeLinkId)
                        {
                            isValidForThisReg = true;
                            //isOwnerCoupon = true;
                        }
                        else
                        {
                            message           = "Coupon is invalid (O1)";
                            isValidForThisReg = false;
                        }
                        break;

                    case "event":
                        //confirm that eventureid = couponlinktypeid
                        var eventureId = db.EventureLists
                                         .Where(l => l.Id == reg.EventureListId)
                                         .Select(l => l.EventureId).SingleOrDefault();

                        if (eventureId == coupons.FirstOrDefault().CouponTypeLinkId)
                        {
                            isValidForThisReg = true;
                        }
                        else
                        {
                            message           = "Coupon is invalid (E1)";
                            isValidForThisReg = false;
                        }
                        break;

                    case "list":
                        //confirm that eventurelistid = couponlinktypeid
                        if (reg.EventureListId != coupons.FirstOrDefault().CouponTypeLinkId)
                        {
                            message           = "Coupon is invalid (L1)";
                            isValidForThisReg = false;
                        }
                        break;

                    default:
                        message           = "Coupon is invalid (D1)";
                        isValidForThisReg = false;
                        break;
                    }

                    //check usage
                    if (isValidForThisReg)
                    {
                        if (coupons.FirstOrDefault().Usage == 1)
                        {
                            //check if part has already redeemed coupon for this race
                        }
                    }

                    //check redeemed v. capacity
                    if (isValidForThisReg)
                    {
                        if (coupons.FirstOrDefault().Capacity <= coupons.FirstOrDefault().Redeemed)
                        {
                            message           = "Coupon is invalid (C1)";
                            isValidForThisReg = false;
                        }
                    }

                    //check check owned
                    if (isValidForThisReg)
                    {
                        if (coupons.FirstOrDefault().IsOnlyForOwned)
                        {
                            //checked if eventure is owned
                            var eid       = db.EventureLists.Where(l => l.Id == reg.EventureListId).Select(l => l.EventureId);
                            var isManaged =
                                db.Eventures.Where(e => eid.Contains(e.Id)).Select(e => e.Managed).FirstOrDefault();
                            if (isManaged)
                            {
                                message           = "Coupon is invalid (W1)";
                                isValidForThisReg = false;
                            }
                        }
                    }

                    //calculate
                    if (isValidForThisReg)
                    {
                        //message = "valid";
                        if (coupons.FirstOrDefault().DiscountType == 0) //$ off
                        {
                            //for $off coupons we just need to return value so we break from foreach reg loop
                            amount = coupons.FirstOrDefault().Amount * -1;
                            break;
                        }
                        else //percent off
                        {
                            //decimal percent =  * -1;
                            //var listPrice = reg.
                            //db.EventureLists.Where(l => l.Id == reg.EventureListId)
                            //  .Select(l => l.CurrentFee).FirstOrDefault();
                            //var test = percent * listPrice / 100;
                            amount = amount + (coupons.FirstOrDefault().Amount *reg.TotalAmount / 100 * -1);
                            //couponDto.CouponId = coupons.FirstOrDefault().Id;
                        }
                    }
                }
            }

            var    coupon   = new DtoCoupon(amount, message, couponId);
            var    js       = new JavaScriptSerializer();
            string jsonData = js.Serialize(coupon);

            var resp = Request.CreateResponse(HttpStatusCode.OK);

            resp.Content = new StringContent(jsonData, Encoding.UTF8, "text/plain");
            return(resp);
        }
コード例 #2
0
        public DtoCoupon ValidateCoupon(string couponCode, Int32 participantId, Int32 eventureListId)
        {
            DateTime currentTime   = DateTime.Now;
            Boolean  isValidCoupon = false;
            Boolean  isOwnerCoupon = false;
            var      couponDto     = new DtoCoupon(0, "", 0, false);

            // does coupon exist at all
            var coupons = _contextProvider.Context.Coupons
                          .Where(c => c.DateStart <currentTime &&
                                                   c.DateEnd> currentTime &&
                                 c.Active &&
                                 c.Code == couponCode); //&& c.ownerId == ownerId

            if (coupons.Any())
            {
                isValidCoupon = true;
            }
            else
            {
                couponDto.Message = "valid coupon is not found";
                couponDto.Amount  = 0;
            }

            //check type and verify valid for owner/event/list
            if (isValidCoupon)
            {
                string couponType = coupons.FirstOrDefault().CouponType;

                switch (couponType)
                {
                case "owner":

                    var listQuery = _contextProvider.Context.EventureLists.Where(l => l.Id == eventureListId).Select(l => l.EventureId);
                    var ownerId   = _contextProvider.Context.Eventures.Where(e => listQuery.Contains(e.Id)).Select(e => e.OwnerId).SingleOrDefault();
                    if (ownerId == coupons.FirstOrDefault().CouponTypeLinkId)
                    {
                        isValidCoupon = true;
                        isOwnerCoupon = true;
                    }
                    else
                    {
                        couponDto.Message = "Coupon is invalid (O1)";
                        isValidCoupon     = false;
                    }
                    break;

                case "event":
                    //confirm that eventureid = couponlinktypeid
                    var eventureId =
                        _contextProvider.Context.EventureLists.Where(l => l.Id == eventureListId)
                        .Select(l => l.EventureId).SingleOrDefault();
                    if (eventureId == coupons.FirstOrDefault().CouponTypeLinkId)
                    {
                        isValidCoupon = true;
                    }
                    else
                    {
                        couponDto.Message = "Coupon is invalid (E1)";
                        isValidCoupon     = false;
                    }
                    break;

                case "list":
                    //confirm that eventurelistid = couponlinktypeid
                    if (eventureListId != coupons.FirstOrDefault().CouponTypeLinkId)
                    {
                        couponDto.Message = "Coupon is invalid (L1)";
                        isValidCoupon     = false;
                    }
                    break;

                default:
                    couponDto.Message = "Coupon is invalid (D1)";
                    isValidCoupon     = false;
                    break;
                }
            }

            //check usage
            if (isValidCoupon)
            {
                if (coupons.FirstOrDefault().Usage == 1)
                {
                    //check if part has already redeemed coupon for this race
                }
                //else  //redundant
                //{
                //    isValidCoupon = true;
                //}
            }

            //check redeemed v. capacity
            if (isValidCoupon)
            {
                if (coupons.FirstOrDefault().Capacity <= coupons.FirstOrDefault().Redeemed)
                {
                    couponDto.Message = "Coupon is invalid (C1)";
                    isValidCoupon     = false;
                }

                //else  //redundant
                //{
                //    isValidCoupon = true;
                //}
            }

            //check check owned
            if (isValidCoupon)
            {
                if (coupons.FirstOrDefault().IsOnlyForOwned)
                {
                    //checked if eventure is owned
                    var eid       = _contextProvider.Context.EventureLists.Where(l => l.Id == eventureListId).Select(l => l.EventureId);
                    var isManaged = _contextProvider.Context.Eventures.Where(e => eid.Contains(e.Id)).Select(e => e.Managed).FirstOrDefault();
                    if (!isManaged)
                    {
                        couponDto.Message = "Coupon is invalid (O1)";
                        isValidCoupon     = false;
                    }
                }
            }

            //check redeemed
            //isValidCoupon = true;
            if (isValidCoupon)
            {
                couponDto.Message = "valid";
                if (coupons.FirstOrDefault().DiscountType == 0)                //$ off
                {
                    couponDto.Amount   = coupons.FirstOrDefault().Amount * -1; //this could be off if there are two
                    couponDto.CouponId = coupons.FirstOrDefault().Id;
                }
                else  //percent off
                {
                    decimal percent   = coupons.FirstOrDefault().Amount * -1;
                    var     listPrice =
                        _contextProvider.Context.EventureLists.Where(l => l.Id == eventureListId)
                        .Select(l => l.CurrentFee).FirstOrDefault();
                    //var test = percent * listPrice / 100;
                    couponDto.Amount   = percent * listPrice / 100;
                    couponDto.CouponId = coupons.FirstOrDefault().Id;
                }
            }
            else
            {
                couponDto.Amount = 0;
                if (couponDto.Message == "")
                {
                    couponDto.Message = "Coupon is invalid (X1)";
                }
            }

            return(couponDto);
        }