/// <summary> /// Approves/Reviews/Disburses an expense. /// </summary> /// <param name="expense">An Expense object.</param> /// <param name="review">An ExpenseReview object.</param> public void ApproveExpense(Expense expense, ExpenseReview review) { // Create message contract. ExpenseWorkflowService.ApproverRequestMessage requestMessage = new ExpenseWorkflowService.ApproverRequestMessage(expense.WorkflowID, expense, review); ExpenseWorkflowServiceClient proxy = new ExpenseWorkflowServiceClient(); try { // For Manager. if (expense.Status == ExpenseStatus.Pending) { proxy.ReviewExpense(requestMessage); } // For Head of Department/HR Manager. else if (expense.Status == ExpenseStatus.Reviewed || expense.Status == ExpenseStatus.Escalated) { proxy.ApproveExpense(requestMessage); } // For Financial Controller. else if (expense.Status == ExpenseStatus.Approved) { proxy.DisburseExpense(requestMessage); } proxy.Close(); } catch (FaultException<ProcessExecutionFault> ex) { throw new ApplicationException(ex.Message); } }
/// <summary> /// Cancel a pending expense. /// </summary> /// <param name="expense">An Expense instance.</param> /// <returns>A boolean value indicating the request has been made.</returns> public bool CancelExpense(Expense expense) { bool result = false; // Cancel the expense. try { ExpenseWorkflowService.SubmitterRequestMessage requestMessage = new ExpenseWorkflowService.SubmitterRequestMessage(expense.WorkflowID, expense); ExpenseWorkflowServiceClient proxy = new ExpenseWorkflowServiceClient(); proxy.CancelExpense(requestMessage); } catch (FaultException<ProcessExecutionFault> ex) { throw new ApplicationException(ex.Message); } result = true; return result; }
/// <summary> /// Submit an expense. /// </summary> /// <param name="expense">An Expense instance.</param> public void SubmitExpense(Expense expense) { // Submit the expense. try { expense.WorkflowID = Guid.NewGuid(); ExpenseWorkflowService.SubmitterRequestMessage requestMessage = new ExpenseWorkflowService.SubmitterRequestMessage(expense.WorkflowID, expense); ExpenseWorkflowServiceClient proxy = new ExpenseWorkflowServiceClient(); proxy.SubmitExpense(requestMessage); proxy.Close(); } catch (FaultException<ProcessExecutionFault> ex) { throw new ApplicationException(ex.Message); } }