///
/// 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
///
/// Usuário que receberá o e-mail
/// Data de abandono do carrinho
/// Configuração da remessa
/// Se podemos criar remessa agora para este usuário
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)];
}