public static Item Initiate(DataContext dataContext, string internalReference, ICorrespondent source, ICorrespondent target, Router router, IPayload payload, bool wait = true) { if (source == null) { throw new Exception("source argument can not be null."); } if (target == null) { throw new Exception("target argument can not be null."); } if (payload == null) { throw new Exception("payload argument can not be null."); } if (router == null) { router = Router.GetRoute(source, target, payload.CorrespondenceType); } if (router == null) { throw new Exception("Unable to compute route for correspondence item."); } CorrespondenceItem correspondenceItem = new CorrespondenceItem(); correspondenceItem.Context = payload.CorrespondenceContext; correspondenceItem.CorrespondenceType = payload.CorrespondenceType; correspondenceItem.CreatedTimestamp = DateTime.Now; correspondenceItem.Status = CorrespondenceItemStatus.Created; correspondenceItem.StatusTimestamp = correspondenceItem.CreatedTimestamp; correspondenceItem.TargetEntityID = target.ID; correspondenceItem.TargetEntityType = GetEntityType(target); correspondenceItem.SourceEntityID = source.ID; correspondenceItem.SourceEntityType = GetEntityType(source); correspondenceItem.SubType = payload.SubType; correspondenceItem.InternalReference = internalReference; correspondenceItem.Value = "RFU"; dataContext.CorrespondenceItems.Add(correspondenceItem); CorrespondenceRoute correspondenceRoute = new CorrespondenceRoute(); correspondenceRoute.Source = router.Source; correspondenceRoute.Target = router.Target; correspondenceRoute.CorrespondenceItem = correspondenceItem; dataContext.CorrespondenceRoutes.Add(correspondenceRoute); if (payload.CorrespondenceType == CorrespondenceType.Email) { // TODO } else if (payload.CorrespondenceType == CorrespondenceType.Sms) { if (!(payload is SmsPayload)) { throw new Exception("Expected sms payload."); } CorrespondenceSmsPayload correspondenceSmsPayload = new CorrespondenceSmsPayload(); correspondenceSmsPayload.CorrespondenceItem = correspondenceItem; correspondenceSmsPayload.Message = ((SmsPayload)payload).Message; dataContext.CorrespondenceSmsPayloads.Add(correspondenceSmsPayload); } dataContext.SaveChanges(); Processor.Process(correspondenceItem.ID, wait); return(new Item(correspondenceItem.InternalReference, source, target, correspondenceRoute, payload)); }
private Item(string internalReference, ICorrespondent source, ICorrespondent target, CorrespondenceRoute correspondenceRoute, IPayload payload) { this.internalReference = internalReference; this.source = source; this.target = target; this.payload = payload; }