Example #1
0
        private Service.PolicyMatch.Domain.PolicyFilterConditions GetPolicyFilter(IEnumerable <DataTransferObject.FlightQuery.FlightView> flights, PolicyType type)
        {
            var policyFilterCondition = new Service.PolicyMatch.Domain.PolicyFilterConditions
            {
                PolicyType = type,
                Purchaser  = Company.CompanyId
            };
            var voyages = getVoyageFilterInfos(flights);

            policyFilterCondition.Voyages.AddRange(voyages);
            policyFilterCondition.VoyageType    = _pnr.ItineraryType == ItineraryType.Conjunction ? VoyageType.TransitWay : (_pnr.ItineraryType == ItineraryType.Notch ? VoyageType.Notch : (_pnr.ItineraryType == ItineraryType.OneWay ? VoyageType.OneWay : VoyageType.RoundTrip));
            policyFilterCondition.SuitReduce    = _pnr.Price == null ? false : (_pnr.Price != null && flights.Count() == 2 ? _pnr.Price.Fare < flights.Sum(item => item.Fare) : false);
            policyFilterCondition.PatPrice      = _pnr.Price == null ? (decimal?)null : _pnr.Price.Fare;
            policyFilterCondition.NeedSubsidize = true;
            policyFilterCondition.IsUsePatPrice = true;
            return(policyFilterCondition);
        }
Example #2
0
        private Service.PolicyMatch.Domain.PolicyFilterConditions GetPolicyFilter(IEnumerable <DataTransferObject.FlightQuery.FlightView> flights, PolicyType type)
        {
            var policyFilterCondition = new Service.PolicyMatch.Domain.PolicyFilterConditions
            {
                PolicyType      = type,
                Purchaser       = Company.CompanyId,
                AllowTicketType = ReturnStringUtility.FilterByTime(flights.Min(item => item.Departure.Time))
            };
            var voyages = getVoyageFilterInfos(flights);

            policyFilterCondition.Voyages.AddRange(voyages);
            policyFilterCondition.VoyageType    = _pnr.Voyage.Type == ItineraryType.Conjunction ? VoyageType.TransitWay : (_pnr.Voyage.Type == ItineraryType.Notch ? VoyageType.Notch : (_pnr.Voyage.Type == ItineraryType.OneWay ? VoyageType.OneWay : VoyageType.RoundTrip));
            policyFilterCondition.PatPrice      = _patPrices.Min(item => item.Fare);
            policyFilterCondition.NeedSubsidize = true;
            policyFilterCondition.IsUsePatPrice = false;
            return(policyFilterCondition);
        }
Example #3
0
        private Service.PolicyMatch.Domain.PolicyFilterConditions GetPolicyFilter(IEnumerable <DataTransferObject.FlightQuery.FlightView> flights, PolicyType type)
        {
            var policyFilterCondition = new Service.PolicyMatch.Domain.PolicyFilterConditions
            {
                PolicyType      = type,
                Purchaser       = Company.CompanyId,
                AllowTicketType = FilterByTime(flights.Min(item => item.Departure.Time))
            };
            var voyages = getVoyageFilterInfos(flights);

            policyFilterCondition.Voyages.AddRange(voyages);
            policyFilterCondition.VoyageType    = _pnr.Voyage.Type == ItineraryType.Conjunction ? VoyageType.TransitWay : (_pnr.Voyage.Type == ItineraryType.Notch ? VoyageType.Notch : (_pnr.Voyage.Type == ItineraryType.OneWay ? VoyageType.OneWay : VoyageType.RoundTrip));
            policyFilterCondition.PatPrice      = _patPrices.Min(item => item.Fare);
            policyFilterCondition.SuitReduce    = ProduceOrder2.hasReduce(voyages, policyFilterCondition.PatPrice);
            policyFilterCondition.NeedSubsidize = true;
            policyFilterCondition.IsUsePatPrice = fdSuccess || !(flights.Count() == 1 && (flights.FirstOrDefault().BunkType.Value == BunkType.Economic || flights.FirstOrDefault().BunkType.Value == BunkType.FirstOrBusiness));
            return(policyFilterCondition);
        }
Example #4
0
        private Service.PolicyMatch.Domain.PolicyFilterConditions GetPolicyFilter(IEnumerable <DataTransferObject.FlightQuery.FlightView> flights)
        {
            PolicyType policyType            = queryPolicyType(flights);
            var        policyFilterCondition = new Service.PolicyMatch.Domain.PolicyFilterConditions
            {
                PolicyType      = policyType,
                Purchaser       = Company.CompanyId,
                AllowTicketType = FilterByTime(flights.Min(item => item.Departure.Time))
            };
            var voyages = getVoyageFilterInfos(flights);

            policyFilterCondition.Voyages.AddRange(voyages);
            policyFilterCondition.VoyageType = _pnr.Voyage.Type == ItineraryType.Conjunction ? VoyageType.TransitWay : (_pnr.Voyage.Type == ItineraryType.Notch ? VoyageType.Notch : (_pnr.Voyage.Type == ItineraryType.OneWay ? VoyageType.OneWay : VoyageType.RoundTrip));
            //policyFilterCondition.SuitReduce = _pnr.Price == null ? false : (_pnr.Price != null && flights.Count() == 2 ? _pnr.Price.Fare < flights.Sum(item => item.Fare) : false);
            //policyFilterCondition.PatPrice = _pnr.Price == null ? (decimal?)null : _pnr.Price.Fare;
            policyFilterCondition.PatPrice      = _patPrices.Min(item => item.Fare);
            policyFilterCondition.SuitReduce    = ChinaPay.B3B.Interface.Processor.ProduceOrder2.hasReduce(voyages, policyFilterCondition.PatPrice);
            policyFilterCondition.NeedSubsidize = true;
            policyFilterCondition.IsUsePatPrice = false;
            return(policyFilterCondition);
        }
Example #5
0
        public object QueryPolicies(PolicyType policyType, int policyCount, string policyOwner, float rate, bool showTip)
        {
            var source                = "5";
            var passengerType         = getPassengerType();
            var policyFilterCondition = new Service.PolicyMatch.Domain.PolicyFilterConditions
            {
                PolicyType = policyType,
                Purchaser  = CurrentCompany.CompanyId
            };
            // 换出票方时,排除原订单出票方、产品方 和 采购方
            var 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 (policyType == PolicyType.Special)
            {
                var policyView = FlightReserveModule.ChoosePolicy.GetPolicyView(source);
                if (policyView != null)
                {
                    policyFilterCondition.PublishFare = policyView.PublishFare;
                }
            }
            var voyages = getVoyageFilterInfos(source);

            policyFilterCondition.Voyages.AddRange(voyages);
            policyFilterCondition.VoyageType      = FlightReserveModule.ChoosePolicy.GetVoyageType(source);
            policyFilterCondition.SuitReduce      = hasReduce(source);
            policyFilterCondition.PatPrice        = getPatPrice(source);
            policyFilterCondition.Purchaser       = order.Purchaser.CompanyId;
            policyFilterCondition.AllowTicketType = ChoosePolicy.FilterByTime(voyages.Min(f => f.Flight.TakeOffTime));
            IEnumerable <Service.PolicyMatch.MatchedPolicy> matchedPolicies = null;

            if (FlightReserveModule.ChoosePolicy.ChangeProviderSource == source && FlightReserveModule.ChoosePolicy.GetOriginalOrder(source).IsSpecial)
            {
                matchedPolicies = Service.PolicyMatch.PolicyMatchServcie.MatchBunkForSpecial(policyFilterCondition, false, policyCount).ToList();
            }
            else
            {
                matchedPolicies = Service.PolicyMatch.PolicyMatchServcie.MatchBunk(policyFilterCondition, false, passengerType, policyCount).ToList();
            }
            MatchedPolicyCache = matchedPolicies.ToList();
            var YBPrice = order.PNRInfos.First().Passengers.First().Tickets.Sum(p => p.Price.Fare);

            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)
                                                                   let Provider = GetCompanyInfo(item.Provider)
                                                                                  select new
                {
                    PolicyId = item.Id,
                    PolicyDesc = ChoosePolicy.ReplaceEnter(specialPolicyInfo.Description),
                    spType = ChoosePolicy.ReplaceEnter(specialPolicyInfo.Name),
                    specialPolicy = ChoosePolicy.ReplaceEnter(specialPolicy.Type.ToString()),
                    PolicyOwner = item.Provider,
                    PolicyType = (int)PolicyType.Special,
                    Fare = YBPrice.TrimInvaidZero(),
                    SettleAmount = (YBPrice * (1 - item.Commission)).TrimInvaidZero(),
                    EI = ChoosePolicy.ReplaceEnter(getProvision(item.OriginalPolicy as IHasRegulation)),
                    EIList = getProvisionList(item.OriginalPolicy as IHasRegulation),
                    Condition = ChoosePolicy.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,
                    RenderTicketPrice = specialPolicy.Type == SpecialProductType.CostFree || item.ParValue != 0,
                    PolicyTypes = item.PolicyType.GetDescription(),
                    ProviderName = Provider.AbbreviateName,
                    ProviderAccount = Provider.UserName,
                    IsBusy = Service.Remind.OrderRemindService.QueryProviderRemindInfo(item.Provider).ETDZ > 5,
                    IsHigher = item.Rebate * 100 > (decimal)rate,
                    TipInfo = string.Empty,
                    RelationType = (int)item.RelationType
                });
            }
            return(from item in matchedPolicies
                   let generalPolicy = item.OriginalPolicy as IGeneralPolicy
                                       let regulation = item.OriginalPolicy as IHasRegulation
                                                        let Provider = GetCompanyInfo(item.Provider)
                                                                       select new
            {
                Fare = YBPrice.TrimInvaidZero(),
                Rebate = (item.Commission * 100).TrimInvaidZero() + "%",
                Commission = (YBPrice - 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 ? TicketType.BSP : item.OriginalPolicy.TicketType).ToString(),
                PolicyId = item.Id,
                PolicyOwner = item.Provider,
                PolicyType = (int)item.PolicyType,
                OfficeNo = item.OriginalPolicy == null ? item.OfficeNumber : item.OriginalPolicy.OfficeCode,
                EI = ChoosePolicy.ReplaceEnter((regulation == null ? getEI(source) : getProvision(regulation))),
                EIList = getProvisionList(item.OriginalPolicy as IHasRegulation),
                Condition = (item.OriginalPolicy == null ? "无" : ChoosePolicy.ReplaceEnter(item.OriginalPolicy.Condition) ?? "无")
                            + (generalPolicy != null && generalPolicy.ChangePNR ? "。需要换编码出票" : string.Empty),
                NeedAUTH = item.OriginalPolicy == null ? item.NeedAUTH : item.OriginalPolicy.NeedAUTH,
                PolicyTypes = item.PolicyType.GetDescription(),
                ProviderName = Provider.AbbreviateName,
                ProviderAccount = Provider.UserName,
                IsHigher = item.Commission * 100 > (decimal)rate,
                TipInfo = !showTip ? string.Empty : item.Commission * 100 > (decimal)rate ? "<span class=\"obvious-b\">提示:该供应商返点高于原供应商,选择此供应商出票后平台将能够得到" + Math.Round(item.Commission * 100 - (decimal)rate, 2).ToString() + "%(" + ((item.Commission - (decimal)rate / 100) * item.ParValue).TrimInvaidZero() + "元)</span>" : item.Commission * 100 < (decimal)rate ? "<span class=\"obvious\">请注意:该供应商的返点低于原供应商的返点,选择此政策后平台需要补差额" + Math.Round((decimal)rate - item.Commission * 100, 2).ToString() + "%(" + (((decimal)rate / 100 - item.Commission) * item.ParValue).TrimInvaidZero() + "元)</span>" : string.Empty,
                RelationType = (int)item.RelationType,
                setChangePNREnable = !item.IsExternal && (generalPolicy == null || !generalPolicy.ChangePNR)           //采购是否能设置是否允许换编码
            });
        }