app/utils/CampaignUtils.scala (19 lines of code) (raw):

package utils import com.github.nscala_time.time.Imports.DateTime import com.github.nscala_time.time.Implicits.DateTimeOrdering import com.gu.memsub.promo.{Campaign, CampaignGroup} import com.gu.memsub.promo.Promotion.AnyPromotion object CampaignUtils { def filterCampaignsByOptionalGroup(group: Option[CampaignGroup], campaigns: Seq[Campaign]): Seq[Campaign] = { group.map(group => campaigns.filter(_.group == group)) getOrElse campaigns } def sortCampaignsByPromotionDateThenNameForDisplay(campaigns: Seq[Campaign], promotions: Seq[AnyPromotion], now: DateTime = DateTime.now()): Seq[Campaign] = { campaigns.sortBy(_.name).reverse.map(campaign => { val campaignPromotionStartDateRange = promotions.filter(_.campaign == campaign.code).map(_.starts).sorted val earliestNextToStartDate = campaignPromotionStartDateRange.find(now.isBefore) val lastToStartDate = campaignPromotionStartDateRange.reverse.find(now.isAfter) val sortDate = earliestNextToStartDate orElse lastToStartDate campaign.copy(sortDate = sortDate) }).sortBy(_.sortDate).reverse } }