public PartyX Create(PartyType partyType, string name, string alias, string description, DateTime? startDate, DateTime? endDate, PartyStatusType statusType)
{
Contract.Requires(!string.IsNullOrWhiteSpace(name));
Contract.Requires(partyType != null);
Contract.Requires(statusType != null);
Contract.Requires(partyType.StatusTypes.Contains(statusType));
Contract.Ensures(Contract.Result<PartyX>() != null && Contract.Result<PartyX>().Id >= 0);
if (startDate == null)
startDate = DateTime.MinValue;
if (endDate == null || endDate==DateTime.MinValue)
endDate = DateTime.MaxValue;
//Create a create status
PartyStatus initialStatus = new PartyStatus();
initialStatus.Timestamp = DateTime.UtcNow;
initialStatus.Description = "Created";
initialStatus.StatusType = statusType;
PartyX entity = new PartyX()
{
PartyType = partyType,
Name = name,
Alias = alias,
Description = description,
StartDate = startDate.Value,
EndDate = endDate.Value,
CurrentStatus = initialStatus
};
initialStatus.Party = entity;
entity.History = new List<PartyStatus>();
entity.History.Add(initialStatus);
using (IUnitOfWork uow = this.GetUnitOfWork())
{
IRepository<PartyX> repo = uow.GetRepository<PartyX>();
repo.Put(entity); // must store the status objects too
uow.Commit();
}
return (entity);
}