/// <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);
            }
        }