Mariia,
Actually customizing that would be a good direction if you need to re-apply the discount. You could do something like below. Note you need to first pull from the base call, so you get all the discounts to apply that are currently active, then you can pass that to another function where you could then look at expired discounts that should still be valid and add / edit the discounts applied.
protected override List<IItemDiscount> GetDiscountsInternal(ShoppingCartItemInfo item)
{
List<IItemDiscount> discounts = base.GetDiscountsInternal(item);
discounts = figureOut(discounts, item);
return discounts;
}
Hope that helps.