Example #1
0
        public ProdDetailModel GetProdDetail(ProdDetailRQModel prod_rq)
        {
            ProdDetailModel prod = new ProdDetailModel();

            prod = ProdRepository.GetProdDetail(prod_rq);
            //prod = ProdRepository.GetProdDetail(prod_no, s_date, e_date);

            return(prod);
        }
Example #2
0
        // 取得交通航段
        public static List <TrafficModel> GetTrafficSectors(ProdDetailRQModel req)
        {
            List <TrafficModel> sectors = new List <TrafficModel>();

            try
            {
                // 區段 SECTOR
                DataSet sec_ds        = TrafficDAL.GetTrafficSectors(req.PRODNO, req.SDATE, req.EDATE);
                var     fw_flag       = "";
                var     accum_add_day = 0;
                var     total_psg     = req.ADULT + req.CHILD + req.CHILDNB + req.SENIOR;

                foreach (DataRow dr in sec_ds.Tables[0].Rows)
                {
                    // 檢查去/回程國定假日

                    var AddPriceWeeks = string.IsNullOrEmpty(dr.ToStringEx("ADD_PRICE_WEEKS")) ? "0000000" : dr.ToStringEx("ADD_PRICE_WEEKS");
                    var s_is_holiday  = AddPriceWeeks.Substring(Convert.ToInt32(Convert.ToDateTime(req.SDATE).DayOfWeek), 1);                    // 出發日是否為假日
                    var e_is_holiday  = AddPriceWeeks.Substring(Convert.ToInt32(Convert.ToDateTime(req.EDATE).DayOfWeek), 1);                    // 回程日是否為假日

                    s_is_holiday = (s_is_holiday.Equals("1") || NationalHolidayDAL.ChkNationalHoliday(req.SDATE)) ? "1" : "0";
                    e_is_holiday = (e_is_holiday.Equals("1") || NationalHolidayDAL.ChkNationalHoliday(req.EDATE)) ? "1" : "0";

                    var IsTripInHoliday = (dr.ToStringEx("FORWARD_FLAG").Equals("1") ? s_is_holiday : e_is_holiday).Equals("1") ? true : false;
                    var dept_date       = dr.ToStringEx("FORWARD_FLAG").Equals("1") ? req.SDATE : req.EDATE;

                    // 各段交通累積日數, 當去回程切換數值應該歸零重計
                    if (fw_flag != dr.ToStringEx("FORWARD_FLAG"))
                    {
                        accum_add_day = 0;
                        fw_flag       = dr.ToStringEx("FORWARD_FLAG");
                    }
                    accum_add_day += dr.ToInt32("ADD_DAY");

                    try
                    {
                        // 航段使用交通成本
                        TrafficSectorCostModel SectorCost = GetTrafficCost(req.PRODNO, dr.ToStringEx("DEP_FROM"), dr.ToStringEx("ARR_TO"),
                                                                           Convert.ToDateTime(dept_date), dr.ToInt64("TRAFFIC_XID"), dr.ToInt64("TRAFFIC_COST_XID"), IsTripInHoliday);
                        // 跳過無成本的交通段
                        if (SectorCost == null)
                        {
                            throw new Exception(string.Format("PROD_NO={0}, FORWARD_FLAG={1}, DATE={2}, TRAFFIC_XID={3}, TRAFFIC_COST_XID={4} 交通成本為 NULL",
                                                              req.PRODNO, dr.ToStringEx("FORWARD_FLAG"), dept_date, dr.ToInt64("TRAFFIC_XID"), dr.ToInt64("TRAFFIC_COST_XID")));
                        }

                        // 若承運商為B7, 帶入預設成本與行程代碼
                        if (dr.ToStringEx("CARRIER_CODE").Equals("B7"))
                        {
                            SectorCost.ADULT_TOURCODE  = IsTripInHoliday ? dr.ToStringEx("ADT_TOURCODE_H") : dr.ToStringEx("ADT_TOURCODE");
                            SectorCost.CHILD_TOURCODE  = IsTripInHoliday ? dr.ToStringEx("CHD_TOURCODE_H") : dr.ToStringEx("CHD_TOURCODE");
                            SectorCost.SENIOR_TOURCODE = IsTripInHoliday ? dr.ToStringEx("SEN_TOURCODE_H") : dr.ToStringEx("SEN_TOURCODE");

                            SectorCost.ADULT_FAREBASIS  = IsTripInHoliday ? dr.ToStringEx("ADT_FAREBASIS_H") : dr.ToStringEx("ADT_FAREBASIS");
                            SectorCost.CHILD_FAREBASIS  = IsTripInHoliday ? dr.ToStringEx("CHD_FAREBASIS_H") : dr.ToStringEx("CHD_FAREBASIS");
                            SectorCost.SENIOR_FAREBASIS = IsTripInHoliday ? dr.ToStringEx("SEN_FAREBASIS_H") : dr.ToStringEx("SEN_FAREBASIS");
                        }

                        #region 建構交通航段Model

                        var sec_item = new TrafficSectorModel()
                        {
                            PROD_NO                = dr.ToStringEx("PROD_NO"),
                            TRAFFIC_XID            = dr.ToStringEx("TRAFFIC_XID"),
                            TRAFFIC_COST_XID       = dr.ToStringEx("TRAFFIC_COST_XID"),
                            TRAFFIC_COST_PRICE_XID = dr.ToStringEx("TRAFFIC_COST_PRICE_XID"),

                            TRIP_WAY     = dr.ToStringEx("TRIP_WAY"),
                            FORWARD_FLAG = dr.ToStringEx("FORWARD_FLAG"),
                            SECTOR       = dr.ToInt32("SEC"),
                            TRAFFIC_TYPE = dr.ToStringEx("TRAFFIC_TYPE"),
                            CARRIER_CODE = dr.ToStringEx("CARRIER_CODE"),
                            DEP_FROM     = dr.ToStringEx("DEP_FROM"),
                            ARR_TO       = dr.ToStringEx("ARR_TO"),
                            FLY_HL_FLAG  = dr.ToStringEx("FLY_HL_FLAG"),
                            SUP_NO       = dr.ToStringEx("SUP_NO"),
                            FARE_BASIS   = dr.ToStringEx("FARE_BASIS"),
                            ARNK_FLAG    = dr.ToStringEx("ARNK_FLAG"),

                            // 票規
                            RULE_TYPE = dr.ToStringEx("RULE_TYPE"),

                            // 交通成本
                            TRAFFIC_COST = SectorCost,
                        };

                        var timetable = QueryCrsTimeTable(dr.ToDateTime("S_DATE"), dr.ToDateTime("E_DATE"), sec_item, total_psg);

                        #endregion 建構交通航段Model

                        var sector = new TrafficModel()
                        {
                            PROD_NO     = dr.ToStringEx("PROD_NO"),
                            TRAFFIC_XID = dr.ToStringEx("TRAFFIC_XID"),

                            TRIP_WAY           = dr.ToStringEx("TRIP_WAY"),
                            SECTOR             = dr.ToStringEx("SEC"),
                            TRAFFIC_TYPE       = dr.ToStringEx("TRAFFIC_TYPE"),
                            TRAFFIC_NAME       = dr.ToStringEx("CARRIER_CODE_NAME"),
                            SUP_NO             = dr.ToStringEx("SUP_NO"),
                            RETURN_FEE         = dr.ToStringEx("RETURN_FEE"),
                            RETURN_FEE_PERCENT = Convert.ToDouble(string.IsNullOrEmpty(dr.ToStringEx("RETURN_FEE_PERCENT")) ? "0" : dr.ToStringEx("RETURN_FEE_PERCENT")),
                            // 票規
                            RULE_TYPE = dr.ToStringEx("RULE_TYPE"),

                            // 交通位控
                            //TRAFFIC_QTYS = Qty,
                            // 交通時刻表
                            //TRAFFIC_TIMETBS = timetable
                        };

                        sectors.Add(sector);
                    }
                    catch (Exception ex2)
                    {
                        Website.Instance.logger.FatalFormat("{0},{1}", ex2.Message, ex2.StackTrace);
                    }
                }
            }
            catch (Exception ex)
            {
                //Website.Instance.logger.FatalFormat("{0},{1}", ex.Message, ex.StackTrace);
                throw ex;
            }

            return(sectors);
        }
Example #3
0
        // 依產編取得自由行商品細節
        public static ProdDetailModel GetProdDetail(ProdDetailRQModel req)
        {
            ProdDetailModel prod = new ProdDetailModel();

            try
            {
                #region 取得交通清單

                //取得航段資訊
                List <TrafficModel> traffics = TrafficRepository.GetTrafficSectors(req);


                // 交通位控
                TRAFFIC_QTYS = Qty;
                // 交通時刻表
                TRAFFIC_TIMETBS = TimeTable;

                // 航段可用位控
                //TrafficQtyModel Qty = "";

                // 航段時刻表
                if (dr.ToStringEx("CARRIER_CODE") == "B7" || dr.ToStringEx("CARRIER_CODE") == "AE")
                {
                    List <TrafficTimeTableModel> TimeTable = QueryCrsTimeTable(dr.ToStringEx("PROD_NO"), dr.ToStringEx("CARRIER_CODE"), dr.ToDateTime("S_DATE"), sectors, total_psg);
                }
                else
                {
                    //List <TrafficTimeTableModel> TimeTable = GetApkgTimeTable(dr.ToStringEx("PROD_NO"), dr.ToDateTime("S_DATE"), dr.ToStringEx("CARRIER_CODE"), dr.ToStringEx("SECTOR"), total_psg);
                    //string prod_no, DateTime s_date, string carrier_code,List<TrafficTimeTableModel> sectors, int total_psg
                }
                #endregion 取得交通清單

                #region 取得飯店清單
                string[]          htlnoArray = rq.HTLNO.Split("_");       //切割hotel combo , 帶入每晚飯店編號
                List <HotelModel> htls       = new List <HotelModel>();
                foreach (var htlno in htlnoArray)
                {
                    htls = HotelRepository.LoadHotels(htls, rq.PRODNO, htlno, rq.SDATE, rq.EDATE);

                    if (htls == null)
                    {
                        prod.PROD_NO     = rq.PRODNO;
                        prod.MESSAGE     = "查無可用飯店";
                        prod.STATUS_CODE = "01";//失敗
                    }
                    else
                    {
                        prod.PROD_NO     = rq.PRODNO;
                        prod.MESSAGE     = "查飯店成功";
                        prod.STATUS_CODE = "00";//成功
                        prod.HOTELS      = htls;
                    }
                }
                #endregion 取得飯店清單
            }
            catch (Exception ex)
            {
                Website.Instance.logger.FatalFormat("{0},{1}", ex.Message, ex.StackTrace);
            }

            return(prod);
        }