function boolean checkDaysBeforeDeparture(Date departureDate, int daysBeforeDeparture) { int days = Days.daysBetween(LocalDate.now(), new LocalDate(departureDate)).getDays(); return days > daysBeforeDeparture; } function boolean checkDateRange(Date date, String start, String end) { if(com.google.common.base.Strings.isNullOrEmpty(start) || com.google.common.base.Strings.isNullOrEmpty(end)) { return true; } DateTime startRange = new DateTime(start); DateTime endRange = new DateTime(end); DateTime targetDate = new DateTime(date.getTime(), DateTimeZone.UTC); return (targetDate.isAfter(startRange) || targetDate.isEqual(startRange)) && (targetDate.isBefore(endRange) || targetDate.isEqual(endRange)); } function boolean checkBlackoutDate(Date departureDate, String shipCode, String ship, String start, String end) { return !(checkDateRange(departureDate, start, end) && ship.equals(shipCode)); } rule "Promotion Condition Initializer" salience 100 when $c : PromotionAttachRuleCondition() then PromotionAttachmentRuleResponse response = new PromotionAttachmentRuleResponse(); List promotions = new ArrayList(); response.setApplicablePromotions(promotions); response.setRequestId($c.getRequestId()); insert(response); end rule "Promotion Attach Rule #143 PromotionCode #2015082601" salience 50 when $c : PromotionAttachRuleCondition( "xyz" == brand, "en_US" == locale, "NC" == "" || "NC" == cruiseLineCode, checkDaysBeforeDeparture(departureDate, 0), true, checkDateRange(departureDate, "2015-08-26", "2025-08-26"), checkDateRange(bookingDate, "2015-08-26T07:00:00.000Z", "2025-08-27T06:59:00.000Z"), true, (Sets.newHashSet("CV-BR","CV-CQ","CV-DR","CV-EC","CV-EL","CV-FA","CV-FD","CV-FS","CV-GL","CV-IM","CV-IS","CV-LE","CV-LI","CV-MC","CV-MI","CV-PA","CV-PR","CV-SE","CV-SH","CV-SL","CV-SP","CV-TI","CV-VA","CV-VI","NC-02","NC-03","NC-08","NC-09","NC-15","NC-21","NC-22","NC-24","NC-25","NC-26","NC-27","NC-28","NC-29","NC-30","CV-VS")).contains(shipCode), true, (Sets.newHashSet("BUE-AR","BDS-BB","QUE-CA","YVR-CA","VAP-CL","HAM-DE","CPH-DK","BCN-ES","AGP-ES","DOV-GB","STN-GB","ATH-GR","CIV-IT","TRS-IT","VCE-IT","SJU-PR","BWI-US","BOS-US","CHS-US","GLS-US","HNL-US","HOU-US","JAX-US","LGB-US","LAX-US","MIA-US","MSY-US","NYC-US","ORF-US","PCV-US","EGL-US","SDG-US","SFO-US","SEA-US","SWD-US","TPA-US","WHT-US")).contains(embarkationPort), categoryRateType categoryRateExist Pair.of((Sets.newHashSet("1 WEEK SALE!","24hr SALE","2nd Guest Half Price","3-Day SALE!","48hr SALE","5-Day SALE","AARP Member Special","AARP Savings","AARP Special OBC","Air Credit Special","Air Special","Amenity Package","AMEX Card Special","BreakThrough","CCL CALI Resident","Early Booking Rates","EARLY SAVER","EASY SAVER","Exclusive Deal","EXPE Groups","Family Special","Firemen & Police","FLASH","FREE Onboard Credit","FREE Specialty Dining","FREE Upgrades","HW Groups","Kids Sail FREE!","Limited Inventory","Military","Military Rate","MSC AARP Rates","Multi Guest Pricing","NCL Group","Ntl Cruise Month","ON SALE!","Opaque","Pack-And-Go!","Past Passenger","RCI Kids Free","RCI Military Rate","RCI Resident Rate","RCI Senior","RCI Senior Citizen","Resident","Shore Excursion Sale","Suite Special","SUPER SAVER","Travelzoo","View & Verandah Sale","WOW Saver","WWTE Groups","SANJOSE TYPE","GRETA TYPE","Cash Back","RCI Going Going Gone","Onboard Credit Deal","Dining Package Deal","Beverage Package Deal","Early Saver Last Call","DiningPkg and More","BevPackage and More","FREE Gratuities","Rate Type","FREE Internet Deal","MSC Bingo Rates","Anytime Rates","Soda Package","Beverage Package","Dining Package","Credit and Internet","Beverage & Gratuity","Beverage & Internet","Beverage & Credit","Gratuity & Internet","Credit & Gratuity","CEL FREE Internet","CEL OBC Deal","CEL FREE Gratuities","CEL GO BEST","HAL Special Account","PRN Drop and Go","Explore4 Sale","USD0821"), Sets.newHashSet("4-NC-M3","3-NC-BC","1-NC-IC","2-NC-OB","3-NC-BB","3-NC-BA","1-NC-IF","3-NC-BX","2-NC-OH","4-NC-SF","0-NC-S5","0-NC-S6","2-NC-OB","0-NC-S2","1-NC-IX","4-NC-SE","2-NC-OI","4-NC-SC","4-NC-SB","1-NC-IA","1-NC-I1","4-NC-M4","3-NC-BB","2-NC-OA","1-NC-I2","4-NC-SC","3-NC-BB","1-NC-IA","3-NC-BA","4-NC-SD","1-NC-IB","1-NC-IC","0-NC-S4","1-NC-IF","4-NC-SJ","3-NC-BF","1-NC-IE","3-NC-B6","1-NC-ID","1-NC-IB","2-NC-OK","3-NC-B6","4-NC-M1","4-NC-MX","4-NC-M1","4-NC-SA","3-NC-B1","2-NC-OX","3-NC-B1","4-NC-MB","3-NC-B7","3-NC-BC","2-NC-OG","3-NC-BX","3-NC-B4","3-NC-B2","4-NC-SH","2-NC-O2","3-NC-BD","4-NC-M6","4-NC-S1","1-NC-T1","4-NC-MB","4-NC-MA","1-NC-IX","3-NC-B9","2-NC-O1","0-NC-S9","4-NC-M9","4-NC-SA","4-NC-MC","0-NC-S1","3-NC-BC","2-NC-OA","2-NC-OB","4-NC-SI","1-NC-IZ","2-NC-O1","3-NC-B9","1-NC-ID","2-NC-OK","4-NC-SF","4-NC-SG","2-NC-OX","1-NC-IB","4-NC-SJ","4-NC-SG","4-NC-MA","3-NC-BE","1-NC-T1","4-NC-SG","1-NC-T1","2-NC-OD","2-NC-OF","0-NC-S3","2-NC-O3","2-NC-OX","4-NC-SB","4-NC-SD","2-NC-OC","3-NC-B5","2-NC-OA","4-NC-MD","2-NC-O2","1-NC-I1","4-NC-SB","3-NC-B3","1-NC-I2","4-NC-SE","4-NC-M2","3-NC-B3","1-NC-IE","3-NC-B4","1-NC-I1","4-NC-SE","2-NC-OJ","2-NC-OC","1-NC-IE","2-NC-OE","3-NC-BD","2-NC-OX","1-NC-I2","4-NC-SF","3-NC-B2","4-NC-SB","1-NC-IC","0-NC-S4","3-NC-B1","4-NC-SC","0-NC-S7")))) $r : PromotionAttachmentRuleResponse() not Promotion( promotionCode == "2015082601") then Promotion promotion = new Promotion(); promotion.setPromotionCode("2015082601"); promotion.setPromoCategory("3DAYS"); promotion.setBookableBy(com.google.common.collect.Lists.newArrayList(OperatorType.WEB,OperatorType.AGENT)); promotion.setViewableBy(com.google.common.collect.Lists.newArrayList(OperatorType.WEB,OperatorType.AGENT)); promotion.setPaymentMethods(com.google.common.collect.Lists.newArrayList("AX","BC","CB","CE","CU","DC","DS","MC","VI")); $r.getApplicablePromotions().add(promotion); insert(promotion); end rule "Promotion Attach Rule #142 PromotionCode #2015082601" salience 50 when $c : PromotionAttachRuleCondition( "xyz" == brand, "en_US" == locale, "CV" == "" || "CV" == cruiseLineCode, checkDaysBeforeDeparture(departureDate, 0), true, checkDateRange(departureDate, "2015-08-26", "2025-08-26"), checkDateRange(bookingDate, "2015-08-26T07:00:00.000Z", "2025-08-27T06:59:00.000Z"), true, (Sets.newHashSet("CV-BR","CV-CQ","CV-DR","CV-EC","CV-EL","CV-FA","CV-FD","CV-FS","CV-GL","CV-IM","CV-IS","CV-LE","CV-LI","CV-MC","CV-MI","CV-PA","CV-PR","CV-SE","CV-SH","CV-SL","CV-SP","CV-TI","CV-VA","CV-VI","NC-02","NC-03","NC-08","NC-09","NC-15","NC-21","NC-22","NC-24","NC-25","NC-26","NC-27","NC-28","NC-29","NC-30","CV-VS")).contains(shipCode), true, (Sets.newHashSet("BUE-AR","BDS-BB","QUE-CA","YVR-CA","VAP-CL","HAM-DE","CPH-DK","BCN-ES","AGP-ES","DOV-GB","STN-GB","ATH-GR","CIV-IT","TRS-IT","VCE-IT","SJU-PR","BWI-US","BOS-US","CHS-US","GLS-US","HNL-US","HOU-US","JAX-US","LGB-US","LAX-US","MIA-US","MSY-US","NYC-US","ORF-US","PCV-US","EGL-US","SDG-US","SFO-US","SEA-US","SWD-US","TPA-US","WHT-US")).contains(embarkationPort), categoryRateType categoryRateExist Pair.of((Sets.newHashSet("1 WEEK SALE!","24hr SALE","2nd Guest Half Price","3-Day SALE!","48hr SALE","5-Day SALE","AARP Member Special","AARP Savings","AARP Special OBC","Air Credit Special","Air Special","Amenity Package","AMEX Card Special","BreakThrough","CCL CALI Resident","Early Booking Rates","EARLY SAVER","EASY SAVER","Exclusive Deal","EXPE Groups","Family Special","Firemen & Police","FLASH","FREE Onboard Credit","FREE Specialty Dining","FREE Upgrades","HW Groups","Kids Sail FREE!","Limited Inventory","Military","Military Rate","MSC AARP Rates","Multi Guest Pricing","NCL Group","Ntl Cruise Month","ON SALE!","Opaque","Pack-And-Go!","Past Passenger","RCI Kids Free","RCI Military Rate","RCI Resident Rate","RCI Senior","RCI Senior Citizen","Resident","Shore Excursion Sale","Suite Special","SUPER SAVER","Travelzoo","View & Verandah Sale","WOW Saver","WWTE Groups","SANJOSE TYPE","GRETA TYPE","Cash Back","RCI Going Going Gone","Onboard Credit Deal","Dining Package Deal","Beverage Package Deal","Early Saver Last Call","DiningPkg and More","BevPackage and More","FREE Gratuities","Rate Type","FREE Internet Deal","MSC Bingo Rates","Anytime Rates","Soda Package","Beverage Package","Dining Package","Credit and Internet","Beverage & Gratuity","Beverage & Internet","Beverage & Credit","Gratuity & Internet","Credit & Gratuity","CEL FREE Internet","CEL OBC Deal","CEL FREE Gratuities","CEL GO BEST","HAL Special Account","PRN Drop and Go","Explore4 Sale","USD0821"), Sets.newHashSet("2-CV-6S","3-CV-8M","2-CV-6J","4-CV-SS","3-CV-8P","3-CV-9A","3-CV-BL","4-CV-JS","2-CV-PT","2-CV-6K","3-CV-7C","3-CV-8K","2-CV-6C","3-CV-8F","3-CV-8T","2-CV-6M","3-CV-7A","2-CV-6D","3-CV-9B","1-CV-1A","4-CV-OB","1-CV-4S","1-CV-4C","4-CV-OS","3-CV-8S","4-CV-CS","4-CV-ST","2-CV-6A","1-CV-4F","2-CV-6L","2-CV-6B","4-CV-GS","3-CV-8C","3-CV-8G","1-CV-IS","2-CV-6N","1-CV-4E","1-CV-4B","3-CV-8J","4-CV-VS","3-CV-8A","3-CV-8E","3-CV-9C","3-CV-8N","3-CV-8D","2-CV-6S","3-CV-8S","2-CV-4J","1-CV-4I","4-CV-ES","2-CV-4K","1-CV-4D","4-CV-SS","2-CV-6E","2-CV-OV","1-CV-4S","1-CV-4T","1-CV-4H","4-CV-CS","3-CV-8P","1-CV-4A","3-CV-8B","1-CV-4G")))) $r : PromotionAttachmentRuleResponse() not Promotion( promotionCode == "2015082601") then Promotion promotion = new Promotion(); promotion.setPromotionCode("2015082601"); promotion.setPromoCategory("3DAYS"); promotion.setBookableBy(com.google.common.collect.Lists.newArrayList(OperatorType.WEB,OperatorType.AGENT)); promotion.setViewableBy(com.google.common.collect.Lists.newArrayList(OperatorType.WEB,OperatorType.AGENT)); promotion.setPaymentMethods(com.google.common.collect.Lists.newArrayList("AX","BC","CB","CE","CU","DC","DS","MC","VI")); $r.getApplicablePromotions().add(promotion); insert(promotion); end