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); }
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()); }
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) : " "), //排除航班 Exclude = item_round.DepartureFlightsFilterType == LimitType.Exclude ? (item_round.DepartureFlightsFilter) : " ", //适用舱位 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>" : " ", //操作人 Opearor = item_round.Owner == this.CurrentCompany.CompanyId ? item_round.Creator : " ", }; 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, "查询"); } }
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) }); }
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) //采购是否能设置是否允许换编码 }); }