Esempio n. 1
0
        internal static IEnumerable <PolicyInfoBase> FilterByGroupLimitation(this IEnumerable <PolicyInfoBase> policies, PurchaseLimitationGroup limitationGroup, Guid superior)
        {
            if (!policies.Any())
            {
                return(policies);
            }

            return(from p in policies
                   let limitation =
                       PolicyMatchServcie.GetPurchaseLimitationInfo(limitationGroup, p.Airline, p.Departure,
                                                                    p.PolicyType)
                       where limitation == null || p is SpecialPolicyInfo || p.Owner == superior
                       select p);
        }
Esempio n. 2
0
        private MatchedPolicy QueryPolicies(PolicyType policyType, string flights, string passengers, DataTransferObject.Order.OrderView orderView)
        {
            PassengerType passengerType         = PassengerType.Adult;
            var           policyFilterCondition = new PolicyFilterConditions
            {
                PolicyType = policyType,
                Purchaser  = Company.CompanyId
            };
            IEnumerable <VoyageFilterInfo> voyages = getVoyageFilterInfos(flights, passengers);

            // 特殊票时,只取航班查询处选择的价格
            if (policyType == PolicyType.Special)
            {
                PolicyView policyView   = null;
                var        flightFlight = voyages.FirstOrDefault();
                if (flightFlight != null && flightFlight.Bunk == null)
                {
                    policyFilterCondition.PatPrice = orderView.PATPrice != null ? orderView.PATPrice.Fare : (decimal?)null;
                }
                else if (policyView != null && flightFlight != null && flightFlight.Bunk == null)
                {
                    policyFilterCondition.PublishFare = policyView.PublishFare;
                }
            }
            else
            {
                policyFilterCondition.PatPrice = orderView.PATPrice != null ? orderView.PATPrice.Fare : (decimal?)null;
            }
            policyFilterCondition.Voyages.AddRange(voyages);
            policyFilterCondition.VoyageType      = VoyageType.OneWay;
            policyFilterCondition.SuitReduce      = hasReduce(voyages, orderView.PATPrice != null ? orderView.PATPrice.Fare : (decimal?)null);
            policyFilterCondition.NeedSubsidize   = true;
            policyFilterCondition.IsUsePatPrice   = false;
            policyFilterCondition.AllowTicketType = FilterByTime(voyages.Min(f => f.Flight.TakeOffTime));
            policyFilterCondition.MaxdRebate      = 0;

            IEnumerable <MatchedPolicy> matchedPolicies = PolicyMatchServcie.MatchBunk(policyFilterCondition, false, passengerType, 1).ToList();

            if (!matchedPolicies.Any() || matchedPolicies.FirstOrDefault() == null)
            {
                InterfaceInvokeException.ThrowNotFindPolicyException();
            }
            return(matchedPolicies.FirstOrDefault());
        }
Esempio n. 3
0
        void QueryPolicy(Pagination pagination)
        {
            try
            {
                var list_query = PolicyMatchServcie.GetRoundTripPolicies(this.CurrentCompany.CompanyId, GetCondition(pagination), item => item.OriginalPolicy.CreateTime, OrderMode.Descending);

                var list = from item in list_query
                           let item_round = item.OriginalPolicy as RoundTripPolicyInfo
                                            select new
                {
                    //政策编号
                    id = item_round.Id,
                    //航空公司
                    Airline = item_round.Airline,
                    //出发城市
                    Departure = item_round.Departure,
                    //到达城市
                    Arrival = item_round.Arrival,
                    //票证行程
                    TicketType = item_round.TicketType + "<br />" + item_round.VoyageType.GetDescription(),
                    //适用班期
                    // DepartureDatesFilter = item_round.DepartureDatesFilterType == DateMode.Date ? (item_round.DepartureDatesFilter) : (StringOperation.TransferToChinese(item_round.DepartureDatesFilter)),
                    //适用航班
                    Include = item_round.DepartureFlightsFilterType == LimitType.None ? "所有" : (item_round.DepartureFlightsFilterType == LimitType.Include ? (item_round.DepartureFlightsFilter) : "&nbsp;"),
                    //排除航班
                    Exclude = item_round.DepartureFlightsFilterType == LimitType.Exclude ? (item_round.DepartureFlightsFilter) : "&nbsp;",
                    //适用舱位
                    Berths = item_round.Berths,
                    //价格
                    Price     = item_round.Price.TrimInvaidZero(),
                    PriceInfo = item_round.Price.TrimInvaidZero(),
                    //返佣信息
                    Commission = item_round.Owner == this.CurrentCompany.CompanyId ? (
                        BasePolicy.CanHaveSubordinate(CurrentCompany.CompanyId) ? "内部: " + (item_round.InternalCommission * 100).TrimInvaidZero()
                        + "%<br />下级: " + (item_round.SubordinateCommission * 100).TrimInvaidZero()
                        + "%<br />同行: " + (item_round.ProfessionCommission * 100).TrimInvaidZero() + "%" : "下级: " + (item_round.SubordinateCommission * 100).TrimInvaidZero()
                        + "%<br />同行: " + (item_round.ProfessionCommission * 100).TrimInvaidZero() + "%") : "同行: " + (item.Commission * 100).TrimInvaidZero() + "%",
                    InternalCommission    = (item_round.InternalCommission * 100).TrimInvaidZero(),
                    SubordinateCommission = (item_round.SubordinateCommission * 100).TrimInvaidZero(),
                    ProfessionCommission  = (item_round.ProfessionCommission * 100).TrimInvaidZero(),
                    DepartureDates        = item_round.DepartureDateStart.ToString("yyyy-MM-dd") + "<br />" + item_round.DepartureDateEnd.ToString("yyyy-MM-dd"),
                    //回程日期
                    ReturnDates     = item_round.VoyageType == VoyageType.OneWay ? "" : (item_round.ReturnDateStart.Value.ToString("yyyy-MM-dd") + "<br />" + item_round.ReturnDateEnd.Value.ToString("yyyy-MM-dd")),
                    Commission_link = item_round.Owner == this.CurrentCompany.CompanyId ? "<a href=\"javascript:ModifyCommissionBack('" + item_round.Id + "','" + (item_round.InternalCommission * 100).TrimInvaidZero() + "','" + (item_round.SubordinateCommission * 100).TrimInvaidZero() + "','" + (item_round.ProfessionCommission * 100).TrimInvaidZero() + "','" + item_round.Price.TrimInvaidZero() + "','" + BasePolicy.CanHaveSubordinate(CurrentCompany.CompanyId) + "');\">修改返佣</a>" : "异地政策",
                    Policy_link     = item_round.Owner == this.CurrentCompany.CompanyId ? "<a href='back_to_policy_edit.aspx?Id=" + item_round.Id + "&Type=Update&Check=view'>修改详细</a>" : "&nbsp;",
                    //操作人
                    Opearor = item_round.Owner == this.CurrentCompany.CompanyId ? item_round.Creator : "&nbsp;",
                };
                this.grv_back.DataSource = list;
                this.grv_back.DataBind();
                if (list.Count() > 0)
                {
                    this.pager.Visible = true;
                    if (pagination.GetRowCount)
                    {
                        this.pager.RowCount = list_query.RowCount;
                    }
                    showempty.Visible = false;
                }
                else
                {
                    this.pager.Visible = false;
                    showempty.Visible  = true;
                }
            }
            catch (Exception ex)
            {
                ShowExceptionMessage(ex, "查询");
            }
        }
Esempio n. 4
0
        public object QueryRecommand(string departure, string arrival, DateTime flightDate, decimal currentPrice)
        {
            DateTime prev      = flightDate.AddDays(-1).Date;
            DateTime current   = flightDate.Date;
            DateTime next      = flightDate.AddDays(1).Date;
            var      dateItems = new List <DateTime>();

            if (prev > DateTime.Today)
            {
                dateItems.Add(prev);
            }
            dateItems.Add(current);
            dateItems.Add(next);

            Dictionary <DateTime, IEnumerable <Flight> > historyFlights = FlightQueryService.QueryFlightFromHistory(new UpperString(departure), new UpperString(arrival), dateItems);

            if (currentPrice <= 0)
            {
                FlightView flight = FlightReserveModule.ChoosePolicy.GetFlights(FlightReserveModule.ChoosePolicy.ImportSource).First();
                if (flight.BunkType == BunkType.Economic || flight.BunkType == BunkType.FirstOrBusiness)
                {
                    currentPrice = flight.Fare;
                }
                else
                {
                    PriceView patPrice = FlightReserveModule.ChoosePolicy.GetPATPrice(FlightReserveModule.ChoosePolicy.ImportSource);
                    if (patPrice != null)
                    {
                        currentPrice = patPrice.Fare;
                    }
                }
                if (currentPrice <= 0)
                {
                    return(new
                    {
                        Today = new object[0],
                        Yestoday = new object[0],
                        Tomorrow = new object[0]
                    });
                }
            }
            Dictionary <DateTime, IEnumerable <InstructionalFlight> > matchedFlight = PolicyMatchServcie.MatchInstructionalFlights(historyFlights, currentPrice,
                                                                                                                                   CurrentCompany.CompanyId, policys => MatchedPolicyCache = policys.ToList());

            for (int i = 0; i < dateItems.Count; i++)
            {
                FliterRepeater(matchedFlight.ElementAt(i));
            }
            return(new
            {
                Today = matchedFlight[current].Select(RecommandSelector),
                Yestoday = matchedFlight.ContainsKey(prev) ? matchedFlight[prev].Select(RecommandSelector) : null,
                Tomorrow = matchedFlight[next].Select(RecommandSelector)
            });
        }
Esempio n. 5
0
        private object QueryAllPolicies(PolicyType policyType, int policyCount, string source, string policyOwner, bool needSubsidize, bool IsUsePatPrice, bool isExternalPolicy, decimal maxdRebate = 0)
        {
            PassengerType passengerType         = getPassengerType(source);
            var           policyFilterCondition = new PolicyFilterConditions
            {
                PolicyType = policyType,
                Purchaser  = CurrentCompany.CompanyId
            };
            var orderView = Session["OrderView"] as OrderView;

            // 升舱时,指向原订单出票方
            if (FlightReserveModule.ChoosePolicy.UpgradeByPNRCodeSource == source || FlightReserveModule.ChoosePolicy.UpgradeByQueryFlightSource == source)
            {
                policyFilterCondition.Provider = Guid.Parse(policyOwner);
            }
            else if (FlightReserveModule.ChoosePolicy.ChangeProviderSource == source)
            {
                // 换出票方时,排除原订单出票方、产品方 和 采购方
                Order order = FlightReserveModule.ChoosePolicy.GetOriginalOrder(source);
                policyFilterCondition.ExcludeProviders.Add(order.Purchaser.CompanyId);
                if (order.Supplier != null)
                {
                    policyFilterCondition.ExcludeProviders.Add(order.Supplier.CompanyId);
                }
                if (order.Provider != null)
                {
                    policyFilterCondition.ExcludeProviders.Add(order.Provider.CompanyId);
                }
            }
            if (FlightReserveModule.ChoosePolicy.ImportSource == source)
            {
                policyFilterCondition.PatContent = orderView.PatContent;
                policyFilterCondition.PnrContent = orderView.PnrContent;
                policyFilterCondition.PnrPair    = orderView.PNR;
            }
            IEnumerable <VoyageFilterInfo> voyages = getVoyageFilterInfos(source);

            // 特殊票时,只取航班查询处选择的价格
            if (policyType == PolicyType.Special)
            {
                PolicyView policyView  = FlightReserveModule.ChoosePolicy.GetPolicyView(source);
                var        firstFlight = voyages.FirstOrDefault();
                if (firstFlight != null && firstFlight.Bunk == null)
                {
                    policyFilterCondition.PatPrice = getPatPrice(source);
                }
                else if (policyView != null && firstFlight != null && firstFlight.Bunk == null)
                {
                    policyFilterCondition.PublishFare = policyView.PublishFare;
                }
            }
            else
            {
                policyFilterCondition.PatPrice = getPatPrice(source);
            }
            policyFilterCondition.Voyages.AddRange(voyages);
            policyFilterCondition.VoyageType      = FlightReserveModule.ChoosePolicy.GetVoyageType(source);
            policyFilterCondition.SuitReduce      = hasReduce(source);
            policyFilterCondition.NeedSubsidize   = needSubsidize;
            policyFilterCondition.IsUsePatPrice   = IsUsePatPrice || orderView.FdSuccess;
            policyFilterCondition.AllowTicketType = FilterByTime(voyages.Min(f => f.Flight.TakeOffTime));
            policyFilterCondition.MaxdRebate      = maxdRebate;
            IEnumerable <MatchedPolicy> matchedPolicies = null;

            if (FlightReserveModule.ChoosePolicy.ChangeProviderSource == source && FlightReserveModule.ChoosePolicy.GetOriginalOrder(source).IsSpecial)
            {
                matchedPolicies = PolicyMatchServcie.MatchBunkForSpecial(policyFilterCondition, isExternalPolicy, policyCount).ToList();
            }
            else
            {
                matchedPolicies = PolicyMatchServcie.MatchBunk(policyFilterCondition, isExternalPolicy, passengerType, policyCount).ToList();
            }
            MatchedPolicyCache = matchedPolicies.ToList();
            if (policyType == PolicyType.Special)
            {
                return(from item in matchedPolicies
                       where item != null && item.OriginalPolicy != null
                       let specialPolicy = item.OriginalPolicy as SpecialPolicyInfo
                                           let specialPolicyInfo = SpecialProductService.Query(specialPolicy.Type)
                                                                   select new
                {
                    PolicyId = item.Id,
                    PolicyDesc = ReplaceEnter(specialPolicyInfo.Description),
                    spType = ReplaceEnter(specialPolicyInfo.Name),
                    specialPolicy = ReplaceEnter(specialPolicy.Type.ToString()),
                    PolicyOwner = item.Provider,
                    PolicyType = (int)PolicyType.Special,
                    Fare = item.ParValue.TrimInvaidZero(),
                    item.SettleAmount,
                    EI = ReplaceEnter(getProvision(item.OriginalPolicy as IHasRegulation)),
                    EIList = getProvisionList(item.OriginalPolicy as IHasRegulation),
                    Condition = ReplaceEnter(item.OriginalPolicy.Condition ?? "无"),
                    SuccessOrderCount = item.Statistics.Total.SuccessTicketCount,
                    WorkingTime = getTimeRange(item.WorkStart, item.WorkEnd),
                    VoyageSuccessOrderCount = item.Statistics.Voyage.SuccessTicketCount,
                    OrderSuccessRate = (item.Statistics.Total.OrderSuccessRate * 100).TrimInvaidZero() + "%",
                    item.NeedAUTH,
                    gradeFirst = Math.Floor(item.CompannyGrade),
                    gradeSecond = item.CompannyGrade / 0.1m % 10,
                    needApplication = specialPolicy.ConfirmResource,
                    WarnInfo =
                        (specialPolicy.Type == SpecialProductType.CostFree && !specialPolicy.IsSeat)
                               ? "需要候补<br /><a class='tips_btn standby_ticket'>什么是候补票?</a>"
                               : specialPolicy.ConfirmResource ? "需要申请<br /><a class='tips_btn'>什么是申请?</a>" : String.Empty,
                    RenderTicketPrice = specialPolicy.Type == SpecialProductType.CostFree || item.ParValue != 0,
                    PolicyTypes = item.PolicyType.GetDescription(),
                    IsFreeTicket = specialPolicy.Type == SpecialProductType.CostFree,
                    IsNOSeat = specialPolicy.Type == SpecialProductType.CostFree && !specialPolicy.IsSeat,
                    RelationType = (int)item.RelationType
                });
            }
            return(from item in matchedPolicies
                   let generalPolicy = item.OriginalPolicy as IGeneralPolicy
                                       let regulation = item.OriginalPolicy as IHasRegulation
                                                        select new
            {
                Fare = item.ParValue.TrimInvaidZero(),
                Rebate = (item.Commission * 100).TrimInvaidZero() + "%",
                dRebate = item.Commission,
                Commission = (item.ParValue - item.SettleAmount).TrimInvaidZero(),
                SettleAmount = item.SettleAmount.TrimInvaidZero(),
                WorkingTime = getTimeRange(item.WorkStart, item.WorkEnd),
                ScrapTime = getTimeRange(item.RefundStart, item.RefundEnd),
                ETDZEfficiency = (item.Speed.ETDZ / 60) + "分钟",
                RefundEfficiency = (item.Speed.Refund / 60) + "分钟",
                TicketType = (item.OriginalPolicy == null ? (item.OriginalExternalPolicy == null ? TicketType.BSP : item.OriginalExternalPolicy.TicketType) : item.OriginalPolicy.TicketType).ToString(),
                PolicyId = item.Id,
                PolicyOwner = item.Provider,
                PolicyType = (int)item.PolicyType,
                OfficeNo = item.OriginalPolicy == null ? item.OfficeNumber : item.OriginalPolicy.OfficeCode,
                EI = ReplaceEnter((regulation == null ? getEI(source) : getProvision(regulation))),
                EIList = getProvisionList(item.OriginalPolicy as IHasRegulation),
                Condition =
                    (item.OriginalPolicy == null && item.OriginalExternalPolicy == null
                            ? "无"
                            : ReplaceEnter(item.OriginalPolicy != null ? item.OriginalPolicy.Condition : item.OriginalExternalPolicy.Condition) ?? "无")
                    + ((generalPolicy != null && generalPolicy.ChangePNR) || (item.IsExternal && item.OriginalExternalPolicy.RequireChangePNR) ? "。需要换编码出票" : String.Empty),
                NeedAUTH = item.OriginalPolicy == null ? item.NeedAUTH : item.OriginalPolicy.NeedAUTH,
                PolicyTypes = item.PolicyType.GetDescription(),
                IsBusy = OrderRemindService.QueryProviderRemindInfo(item.Provider).ETDZ > 5,
                item.HasSubsidized,
                RelationType = (int)item.RelationType,
                setChangePNREnable = !item.IsExternal && (generalPolicy == null || !generalPolicy.ChangePNR)           //采购是否能设置是否允许换编码
            });
        }