public override void ForwardNextStage(Model.Contracts.LeasePaymentTransactionApprovalWorkflow newWorkflow, Model.WorkflowStage nextStage)
        {
            newWorkflow.IsFinished = false;
            var forwardNext = leasePaymentTransactionApprovalWorkflowRepository.Insert(newWorkflow.AutoMapObject <Model.Contracts.LeasePaymentTransactionApprovalWorkflow, DB.LeasePaymentTransactionApprovalWorkflow>());
            var stageRole   = nextStage.RoleId;

            if (stageRole != null)
            {
                var roleUsers = CommonRoutines.GetRoleUsers((int)stageRole, usersAccountsRepository);
                //send notifications.
                //Notifications.Notification.Email(roleUsers.ToList(), Notifications.Config.NotificationObjectType.LeaseContractWorkflowAction, newWorkflow);
                Notifications.Notification.System(roleUsers.ToList(), Notifications.Config.NotificationObjectType.LeaseContractWorkflowAction, (HttpContext.Current.User as PmcsUserPrincipal).UserId, "/Contracts/LeaseContracts", newWorkflow);
            }
        }
 public abstract TWokflowApproval BeginWorkflowProcess(TWokflowApproval wokflowApproval, Model.WorkflowStage firstStage);
        // Cases :
        // 1) Add lease payment =>
        // * Get first stage users.
        // * Send notifications.
        // * Add new record in LeasePaymentTransactionApprovalWorkflow table.

        // 2) Some action has been done at some stage in the workflow :
        // * Update the current workflow record with the action taken.
        // * Get Next stage Users.
        // * Send notifications.
        // * Add new record in LeasePaymentTransactionApprovalWorkflow table for the next stage (if any).
        // * if the workflow stages finished close the transaction and notify all users.

        public override Model.Contracts.LeasePaymentTransactionApprovalWorkflow BeginWorkflowProcess(Model.Contracts.LeasePaymentTransactionApprovalWorkflow wokflowApproval, Model.WorkflowStage firstStage)
        {
            wokflowApproval.IsFinished = false;
            var approval  = leasePaymentTransactionApprovalWorkflowRepository.Insert(wokflowApproval.AutoMapObject <Model.Contracts.LeasePaymentTransactionApprovalWorkflow, DB.LeasePaymentTransactionApprovalWorkflow>());
            var stageRole = firstStage.RoleId;

            if (stageRole != null)
            {
                var roleUsers = CommonRoutines.GetRoleUsers((int)stageRole, usersAccountsRepository);
                //send notifications.
                Notifications.Notification.Email <Model.Contracts.LeasePaymentTransactionApprovalWorkflow>(roleUsers.ToList(), Notifications.Config.NotificationObjectType.BeginLeaseWorkflow, approval.AutoMapObject <DB.LeasePaymentTransactionApprovalWorkflow, pmcs.Model.Contracts.LeasePaymentTransactionApprovalWorkflow>());
                Notifications.Notification.System <Model.Contracts.LeasePaymentTransactionApprovalWorkflow>(roleUsers.ToList(), Notifications.Config.NotificationObjectType.BeginLeaseWorkflow, (HttpContext.Current.User as PmcsUserPrincipal).UserId, "/Contracts/LeaseContracts", approval.AutoMapObject <DB.LeasePaymentTransactionApprovalWorkflow, pmcs.Model.Contracts.LeasePaymentTransactionApprovalWorkflow>());
            }
            return(approval.AutoMapObject <DB.LeasePaymentTransactionApprovalWorkflow, Model.Contracts.LeasePaymentTransactionApprovalWorkflow>());
        }
 public abstract void ForwardNextStage(TWokflowApproval newWorkflow, Model.WorkflowStage nextStage);