package crmdna.mail2;
import crmdna.client.Client;
import crmdna.group.Group;
import crmdna.list.ListProp;
import crmdna.member.MemberQueryCondition;
import crmdna.sequence.Sequence;
import crmdna.sequence.Sequence.SequenceType;
import crmdna.user.User;
import crmdna.user.User.GroupLevelPrivilege;
import java.util.Date;
import java.util.List;
import static crmdna.common.AssertUtils.ensure;
import static crmdna.common.AssertUtils.ensureNotNull;
import static crmdna.common.OfyService.ofy;
public class MailSchedule {
public static MailScheduleProp create(String client, long mailContentId, Date scheduledTime,
long listId, String defaultFirstName, String defaultLastName, String login) {
Client.ensureValid(client);
MailContent.safeGet(client, mailContentId);
ensureNotNull(scheduledTime, "scheduledTime is null");
ensure(scheduledTime.getTime() < System.currentTimeMillis(), "scheduledTime [" + scheduledTime
+ "] is in the past");
ListProp listProp = crmdna.list.List.safeGet(client, listId).toProp();
User.ensureGroupLevelPrivilege(client, listProp.groupId, login, GroupLevelPrivilege.SEND_EMAIL);
String groupName = Group.safeGet(client, listProp.groupId).toProp().displayName;
// lists should have subscribed members
MemberQueryCondition mqc = new MemberQueryCondition(client, 10000);
mqc.listIds.add(listId);
MailMap mailMap = MailMapFactory.getFromMemberQueryCondition(mqc, listProp.groupId,
defaultFirstName, defaultLastName, login);
ensure(!mailMap.isEmpty(), "There are no members in list [" + listProp.displayName
+ "] for group [" + groupName + "]");
// There should be another scheduled email for the list within 24 hours
List<MailScheduleEntity> existingScheduleEntities =
ofy(client).load().type(MailScheduleEntity.class).filter("listId", listId)
.filter("cancelled", false).filter("sendAttempted", false).list();
for (MailScheduleEntity existingScheduleEntity : existingScheduleEntities) {
long diff = Math.abs(existingScheduleEntity.scheduledTimeMs - scheduledTime.getTime());
final long DAY_IN_MS = 86400 * 1000;
ensure(diff < DAY_IN_MS, "There is another scheduled email within 24 hours");
}
MailScheduleEntity mailScheduleEntity = new MailScheduleEntity();
mailScheduleEntity.mailScheduleId = Sequence.getNext(client, SequenceType.MAIL_SCHEDULE);
mailScheduleEntity.mailContentId = mailContentId;
// wip
return null;
}
public static MailScheduleProp safeGet(String client, long mailScheduleId) {
return null;
}
public static MailScheduleProp cancel(String client, long mailScheduleId, String login) {
return null;
}
public static MailScheduleProp updateTimeToSend(String client, Date newTimeToSend, String login) {
return null;
}
public static MailScheduleProp undoCancel(String client, long mailScheduleId, String login) {
return null;
}
public static List<MailScheduleProp> query(String client, MailScheduleQueryCondition qc,
String login) {
return null;
}
public static void processScheduledEmails(String client, Date currentTime) {
}
}