/// <summary>
/// Checamos se estamos no momento de enviar e-mail:
/// Aqui não importa EmailMarketingDelay, esse delay vai ser checado no Send
/// e futuramente priorizado de acordo com remessas mais importantes
/// e remessas que possam furar o delay.
/// Checamos apenas se estamos no momento de envio da remessa ou por SendTime ou por Intervals
/// </summary>
/// <param name="user">Usuário que receberá o e-mail</param>
/// <param name="cartDate">Data de abandono do carrinho</param>
/// <param name="batchConfiguration">Configuração da remessa</param>
/// <returns>Se podemos criar remessa agora para este usuário</returns>
internal bool VerifyBatchCreationTime(UserVO user, DateTime cartDate, EmailBatchConfigurationVO batchConfiguration)
{
if (string.IsNullOrEmpty(batchConfiguration.SendIntervals))
{
if (batchConfiguration.SendTime.HasValue)
{
return (DateTime.UtcNow - (user.LastEmailBatch ?? DateTime.MinValue))
> batchConfiguration.SendTime.Value;
}
throw new EventException(
"Remessa sem configuração de SendTime e SendInterval",
JsonSerializer.Serialize(batchConfiguration),
Configurations.Context.StoreId,
"Email");
}
var intervals = this.GetBatchIntervals(batchConfiguration);
Debug.Assert(user.LastCartId != null, "user.LastCartId != null");
var sentEmails = user.LastEmail == null ? 0 : Factory.AbandonedCartEmailCounterRepository().GetSentEmails(user.LastCartId.Value.ToString());
if (sentEmails >= intervals.Count)
{
return false;
}
return (DateTime.UtcNow - cartDate).TotalHours > intervals[Convert.ToInt32(sentEmails)];
}