public static void EnsureCanChangeStatus(this Claim claim, Claim.Status targetStatus) { if (!claim.ClaimStatus.CanChangeTo(targetStatus)) { throw new ClaimWrongStatusException(claim); } }
public static bool CanChangeTo(this Claim.Status fromStatus, Claim.Status targetStatus) { switch (targetStatus) { case Claim.Status.Approved: return(new[] { Claim.Status.AddedByUser, Claim.Status.Discussed }.Contains(fromStatus)); case Claim.Status.OnHold: return (new[] { Claim.Status.AddedByUser, Claim.Status.Discussed, Claim.Status.AddedByMaster }.Contains(fromStatus)); } throw new ArgumentException("Not implemented for target status", nameof(targetStatus)); }
public static bool CanChangeTo(this Claim.Status fromStatus, Claim.Status targetStatus) { switch (targetStatus) { case Claim.Status.Approved: return(new[] { Claim.Status.AddedByUser, Claim.Status.Discussed, Claim.Status.CheckedIn }.Contains(fromStatus)); case Claim.Status.OnHold: return (new[] { Claim.Status.AddedByUser, Claim.Status.Discussed, Claim.Status.AddedByMaster } .Contains(fromStatus)); case Claim.Status.AddedByUser: return(new[] { Claim.Status.DeclinedByUser, Claim.Status.DeclinedByMaster, Claim.Status.OnHold } .Contains(fromStatus)); case Claim.Status.AddedByMaster: return(false); case Claim.Status.DeclinedByUser: case Claim.Status.DeclinedByMaster: return (new[] { Claim.Status.AddedByUser, Claim.Status.Discussed, Claim.Status.AddedByMaster, Claim.Status.Approved, Claim.Status.OnHold, }.Contains(fromStatus)); case Claim.Status.Discussed: return (new[] { Claim.Status.AddedByUser, Claim.Status.Discussed, Claim.Status.AddedByMaster } .Contains(fromStatus)); case Claim.Status.CheckedIn: return(fromStatus == Claim.Status.Approved); default: throw new ArgumentOutOfRangeException(nameof(targetStatus), targetStatus, null); } }
public static void ChangeStatusWithCheck(this Claim claim, Claim.Status targetStatus) { claim.EnsureCanChangeStatus(targetStatus); claim.ClaimStatus = targetStatus; }
public static bool IsActive(this Claim.Status claimStatus) => claimStatus != Claim.Status.DeclinedByMaster && claimStatus != Claim.Status.DeclinedByUser && claimStatus != Claim.Status.OnHold;