/// /// 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)]; }