public void CheckIn()
{
AssertValidAction(StateAction.CheckIn);
if (!HasApproving)
{
//-- Approving OFF
switch (VersioningMode)
{
case VersioningMode.None:
DeleteVersionsAndApprove();
break;
case VersioningMode.Major:
//remove all working versions, except current
DeletableVersionIds.AddRange(GetLastWorkingVersions().Select(x => x.VersionId));
DeletableVersionIds.Remove(CurrentVersionId);
var lastApproved = GetLastApprovedVersion();
ExpectedVersion = lastApproved != null ?
GetNextPublicVersion(lastApproved.VersionNumber, VersionStatus.Approved) :
ComputeNewVersion();
ExpectedVersionId = CurrentVersionId;
break;
case VersioningMode.Full:
ExpectedVersion = CurrentVersion.ChangeStatus(VersionStatus.Draft);
ExpectedVersionId = CurrentVersionId;
break;
}
}
else
{
//-- Approving ON
switch (VersioningMode)
{
case VersioningMode.None:
DeleteVersionsAndPreserveLastWorking();
break;
case VersioningMode.Major:
ExpectedVersion = CurrentVersion.ChangeStatus(VersionStatus.Pending);
ExpectedVersionId = CurrentVersionId;
break;
case VersioningMode.Full:
ExpectedVersion = CurrentVersion.ChangeStatus(VersionStatus.Draft);
ExpectedVersionId = CurrentVersionId;
break;
}
}
//-- Unlock
this.LockerUserId = 0;
}