Beispiel #1
0
        /// <summary>
        /// 随机立减处理
        /// </summary>
        /// <returns></returns>
        private async Task handleRandomPreference(int hotelId, Dine dine, DinePaidDetail mainPaidDetail)
        {
            PayKind randomPreferencePayKind = await ctx.PayKinds.FirstOrDefaultAsync(p => p.Type == PayKindType.RandomPreference && p.Usable == true);

            if (randomPreferencePayKind != null)
            {
                int top = (int)Math.Ceiling(mainPaidDetail.Price / 50);

                Random  random      = new Random(DateTime.Now.Millisecond);
                decimal randomPrice = (decimal)random.NextDouble();
                randomPrice *= top;
                randomPrice  = Math.Floor(randomPrice * 10) / 10;

                //if(randomPrice == 0) {
                //	randomPrice = 0.1m;
                //}

                // 如果随机立减超过应付金额则全额支付
                if (randomPrice > mainPaidDetail.Price)
                {
                    randomPrice = mainPaidDetail.Price;
                }

                if (randomPrice != 0)
                {
                    dine.DinePaidDetails.Add(new DinePaidDetail {
                        PayKind = randomPreferencePayKind,
                        Price   = randomPrice
                    });
                    mainPaidDetail.Price -= randomPrice;
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// 整单打折处理
        /// </summary>
        /// <param name="payKind"></param>
        /// <param name="dine"></param>
        /// <returns></returns>
        private async Task handleDiscount(PayKind payKind, Dine dine)
        {
            double       minDiscount     = 1;
            string       minDiscountName = null;
            DiscountType minDiscountType = DiscountType.None;

            if (payKind.Discount < minDiscount)
            {
                minDiscount     = payKind.Discount;
                minDiscountName = payKind.Name + "折扣";
                minDiscountType = DiscountType.PayKind;
            }

            DayOfWeek           week          = DateTime.Now.DayOfWeek;
            List <TimeDiscount> timeDicsounts = await ctx.TimeDiscounts.Where(p => p.Week == week).ToListAsync();

            TimeSpan now = DateTime.Now.TimeOfDay;

            foreach (TimeDiscount timeDiscount in timeDicsounts)
            {
                if (now >= timeDiscount.From && now <= timeDiscount.To)
                {
                    if (timeDiscount.Discount < minDiscount)
                    {
                        minDiscount     = timeDiscount.Discount;
                        minDiscountName = timeDiscount.Name;
                        minDiscountType = DiscountType.Time;
                    }
                    break;
                }
            }

            Customer customer = await ctx.Customers.FirstOrDefaultAsync(p => p.Id == dine.UserId);

            if (customer != null)
            {
                VipDiscount vipDiscounts = await ctx.VipDiscounts.FirstOrDefaultAsync(p => p.Level.Id == customer.VipLevelId);

                if (vipDiscounts != null)
                {
                    if (vipDiscounts.Discount < minDiscount)
                    {
                        minDiscount     = vipDiscounts.Discount;
                        minDiscountName = vipDiscounts.Name;
                        minDiscountType = DiscountType.Vip;
                    }
                }
            }

            dine.Discount     = minDiscount;
            dine.DiscountName = minDiscountName;
            dine.DiscountType = minDiscountType;
        }
        //DEL:PayKinds
        /// <summary>
        /// 切换usable状态
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task <JsonResult> SwitchPayKinds(int id)
        {
            PayKind paykinds = await db.PayKinds.FirstOrDefaultAsync(p => p.Id == id);

            if (paykinds == null)
            {
                return(Json(new { succeeded = false }));
            }
            else
            {
                paykinds.Usable = !paykinds.Usable;
                await db.SaveChangesAsync();

                return(Json(new { succeeded = true }));
            }
        }
        public async Task <JsonResult> DeletePayKind(int Id)
        {
            PayKind paykinds = await db.PayKinds.FirstOrDefaultAsync(p => p.Id == Id);

            if (paykinds == null)
            {
                return(Json(new { succeeded = false }));
            }
            else
            {
                db.PayKinds.Remove(paykinds);
                await db.SaveChangesAsync();

                return(Json(new { succeeded = true }));
            }
        }
        //ALT:PayKinds
        /// <summary>
        ///
        /// </summary>
        /// <param name="id"></param>
        /// <param name="name"></param>
        /// <param name="description"></param>
        /// <param name="discount"></param>
        /// <returns></returns>
        public async Task <JsonResult> AltPayKinds(int id, string name, string description, double discount)
        {
            PayKind paykinds = await db.PayKinds.FirstOrDefaultAsync(p => p.Id == id);

            if (paykinds == null)
            {
                return(Json(new { succeeded = false }));
            }
            else
            {
                paykinds.Name        = name;
                paykinds.Description = description;
                paykinds.Discount    = discount / 100;
                await db.SaveChangesAsync();

                return(Json(new { succeeded = true }));
            }
        }
Beispiel #6
0
        /// <summary>
        /// 释放资源
        /// </summary>
        /// <param name="isDisposing"></param>
        protected override void Dispose(bool isDisposing)
        {
            if (this.alreadyDisposed)
            {
                return;
            }

            if (this.payKind != null)
            {
                this.payKind.Dispose();
                this.payKind = null;
            }
            if (this.rate != null)
            {
                this.rate.Dispose();
                this.rate = null;
            }

            base.Dispose(isDisposing);

            this.alreadyDisposed = true;
        }
Beispiel #7
0
        public void WriteD3(Lib.XmlExporter xml, Data.IInvoice pool, InvoiceRecord irec)
        {
            xml.Writer.WriteStartElement("Z_SL");

            xml.Writer.WriteElementString("IDCASE", Identity);

#if FOMS
            xml.Writer.WriteElementString("USL_OK", Conditions);
#endif

            xml.Writer.WriteElementString("VIDPOM", AidKind.ToString());

#if FOMS
            xml.Writer.WriteElementString("FOR_POM", AidForm.ToString());
#endif

            xml.Writer.WriteElementString("LPU", Options.LpuCode);

            // Dinamically?
            xml.WriteBool("VBR", MobileBrigade);

            xml.Writer.WriteElementString("DATE_Z_1", DateFrom.AsXml());
            xml.Writer.WriteElementString("DATE_Z_2", DateTill.AsXml());

            // Dynamically
            xml.WriteBool("P_OTK", DispanserisationRefusal);
            xml.Writer.WriteElementString("RSLT_D", DispanserisationResult);

#if FOMS
            xml.Writer.WriteElementString("ISHOD", Outcome);
#endif

            if (specialCase != null)
            {
                foreach (SpecialCase c in specialCase)
                {
                    xml.Writer.WriteElementString("OS_SLUCH", ((int)c).ToString());
                }
            }

            foreach (Event e in Events)
            {
                e.WriteD3(xml, pool, irec, this);
            }

            xml.Writer.WriteElementString("IDSP", PayKind.ToString());
            xml.Writer.WriteElementString("SUMV", Total.ToString("F2", Options.NumberFormat));

            if (PayType != Model.PayType.None)
            {
                xml.Writer.WriteElementString("OPLATA", ((int)PayType).ToString());
            }

            if (AcceptedSum > 0)
            {
                xml.Writer.WriteElementString("SUMP", AcceptedSum.ToString("F2", Options.NumberFormat));
            }

            // Сведения о санкциях
            // Описывает санкции, примененные в рамках данного случая.
            foreach (Sanction s in pool.LoadSanctions(irec, this))
            {
                s.Write(xml, pool);
            }

            if (DeniedSum > 0)
            {
                xml.Writer.WriteElementString("SANKIT", DeniedSum.ToString("F2", Options.NumberFormat));
            }

            xml.Writer.WriteEndElement();
        }
Beispiel #8
0
        public void WriteD2(Lib.XmlExporter xml, Data.IInvoice pool, InvoiceRecord irec)
        {
            xml.Writer.WriteStartElement("Z_SL");

            xml.Writer.WriteElementString("IDCASE", Identity);
            xml.Writer.WriteElementString("USL_OK", Conditions.ToString());
            xml.Writer.WriteElementString("VIDPOM", AidKind.ToString());

            xml.Writer.WriteElementString("FOR_POM", AidForm.ToString());

            if (!string.IsNullOrEmpty(DirectedFrom))
            {
                xml.Writer.WriteElementString("NPR_MO", DirectedFrom);
                xml.Writer.WriteElementString("NPR_DATE", DirectionDate.AsXml());
            }

            xml.Writer.WriteElementString("LPU", Options.LpuCode);

            xml.Writer.WriteElementString("DATE_Z_1", DateFrom.AsXml());
            xml.Writer.WriteElementString("DATE_Z_2", DateTill.AsXml());

            if (BedDays > 0)
            {
                xml.Writer.WriteElementString("KD_Z", BedDays.ToString());
            }

            if (BirthWeight > 0)
            {
                xml.Writer.WriteElementString("VNOV_M", BirthWeight.ToString());
            }

            xml.Writer.WriteElementString("RSLT", Result);
            xml.Writer.WriteElementString("ISHOD", Outcome.ToString());

            if (specialCase != null)
            {
                foreach (SpecialCase c in specialCase)
                {
                    xml.Writer.WriteElementString("OS_SLUCH", ((int)c).ToString());
                }
            }

            foreach (Event e in Events)
            {
                e.WriteD2(xml, pool, irec, this);
            }

            xml.Writer.WriteElementString("IDSP", PayKind.ToString());
            xml.Writer.WriteElementString("SUMV", Total.ToString("F2", Options.NumberFormat));

            if (PayType != Model.PayType.None)
            {
                xml.Writer.WriteElementString("OPLATA", ((int)PayType).ToString());
            }

            if (AcceptedSum > 0)
            {
                xml.Writer.WriteElementString("SUMP", AcceptedSum.ToString("F2", Options.NumberFormat));
            }

            // Сведения о санкциях
            // Описывает санкции, примененные в рамках данного случая.
            foreach (Sanction s in pool.LoadSanctions(irec, this))
            {
                s.Write(xml, pool);
            }

            if (DeniedSum > 0)
            {
                xml.Writer.WriteElementString("SANKIT", DeniedSum.ToString("F2", Options.NumberFormat));
            }

            xml.Writer.WriteEndElement();
        }
        public async Task <JsonResult> Pay(Cart cart)
        {
            CartAddition addition = new CartAddition();

            // 新建或获取用户Id
            User user = await createOrGetUser(User.Identity.GetUserId(), "OrderSystem");

            if (user == null)
            {
                return(Json(new JsonError("创建匿名用户失败")));
            }
            SigninManager.Signin(user, true);
            addition.UserId = user.Id;

            // 创建新订单
            FunctionResult result = await OrderManager.CreateDine(cart, addition);

            if (!result.Succeeded)
            {
                if (await UserManager.IsInRoleAsync(user.Id, Role.Nemo))
                {
                    await UserManager.DeleteAsync(user);

                    await YummyOnlineManager.RecordLog(YummyOnlineDAO.Models.Log.LogProgram.Identity, YummyOnlineDAO.Models.Log.LogLevel.Warning, $"Anonymous User Deleted {user.Id}, Via OrderSystem");
                }
                await HotelManager.RecordLog(HotelDAO.Models.Log.LogLevel.Error, $"{result.Detail}, Host:{Request.UserHostAddress}", HttpPost.GetPostData(Request));

                return(Json(new JsonError(result.Message)));
            }

            Dine dine = ((Dine)result.Data);

            await newDineInform(dine, "OrderSystem");

            PayKind payKind = await HotelManager.GetPayKindById(cart.PayKindId);

            string redirectUrl = $"{payKind.CompleteUrl}?Succeeded={true}&DineId={dine.Id}";

            if (payKind.Type == PayKindType.Online)
            {
                DinePaidDetail mainPaidDetail = await HotelManager.GetDineOnlinePaidDetail(dine.Id);

                // 如果实际需要支付的价格等于0则直接显示支付完成界面
                if (mainPaidDetail.Price == 0)
                {
                    await onlinePayCompleted(dine.Id, null);
                }
                else
                {
                    redirectUrl = await getOnlineRedirectUrl(dine.Id);
                }
            }
            else
            {
                HotelConfig config = await HotelManager.GetHotelConfig();

                if (config.IsPrintReciptAfterPayingOffline)
                {
                    await requestPrintDine(dine.Id, new List <PrintType> {
                        PrintType.Recipt
                    });
                }
            }

            return(Json(new JsonSuccess(redirectUrl)));
        }