/// <summary> /// Add in approval steps to either the order or split, depending on what is provided /// </summary> /// <param name="order">The order</param> /// <param name="approvalInfo">list of approval people (or null) to route to</param> /// <param name="split">optional split to approve against instead of the order</param> /// <param name="minLevel">Min level only adds approvals at or above the provided level</param> private void AddApprovalSteps(Order order, ApprovalInfo approvalInfo, Split split, int minLevel = 0) { var approvals = new List<Approval> { new Approval { Completed = AutoApprovable(order, split, approvalInfo.Approver), //If this is auto approvable just include it but mark it as approval already User = approvalInfo.Approver, StatusCode = _repositoryFactory.OrderStatusCodeRepository.GetById(OrderStatusCode.Codes.Approver) }, new Approval { Completed = false, User = approvalInfo.AcctManager, StatusCode = _repositoryFactory.OrderStatusCodeRepository.GetById(OrderStatusCode.Codes.AccountManager), IsExternal = approvalInfo.IsExternal }, new Approval { Completed = false, User = approvalInfo.Purchaser, StatusCode = _repositoryFactory.OrderStatusCodeRepository.GetById(OrderStatusCode.Codes.Purchaser) } }; if (minLevel > 0) { approvals = approvals.Where(x => x.StatusCode.Level >= minLevel).ToList(); } foreach (var approval in approvals) { if (approval.StatusCode.Id == OrderStatusCode.Codes.Purchaser) { //Make sure to only add one purchaser approval if (order.Approvals.Any(x => x.StatusCode.Id == OrderStatusCode.Codes.Purchaser)) continue; } if (approval.StatusCode.Id == OrderStatusCode.Codes.Approver && approvalInfo.IsExternal) { continue; //Do not add approvals at the AP level for external accounts } split.AssociateApproval(approval); if (approval.Completed) { //already approved means auto approval, so send that specific event _eventService.OrderAutoApprovalAdded(order, approval); } else { _eventService.OrderApprovalAdded(order, approval); } } }