/// <summary>
        /// Generates the code that initializes an approval action builder.
        /// </summary>
        /// <param name="assemblyCode">
        /// The assembly code.
        /// </param>
        /// <param name="action">
        /// The action.
        /// </param>
        /// <param name="process">
        /// The process.
        /// </param>
        /// <param name="variableName">
        /// The approval action builder variable name.
        /// </param>
        protected override void InitializeApprovalActionBuilder(
            StringBuilder assemblyCode,
            IActionDefinition action,
            IProcessDefinition process,
            string variableName)
        {
            base.InitializeApprovalActionBuilder(assemblyCode, action, process, variableName);

            assemblyCode.AppendFormat(@"
                {0}.AuditLogger = AuditLogCommand.InsertEmailLog;
                {0}.Rule = new Cebos.Veyron.SharedTypes.ApprovalRule({1});", variableName, action.ApprovalOptions.ApprovalFieldName.ToLiteral());
        }
        /// <summary>
        /// Generates the code that initializes an approval action builder.
        /// </summary>
        /// <param name="assemblyCode">
        /// The assembly code.
        /// </param>
        /// <param name="action">
        /// The action.
        /// </param>
        /// <param name="process">
        /// The process.
        /// </param>
        /// <param name="variableName">
        /// The approval action builder variable name.
        /// </param>
        protected override void InitializeApprovalActionBuilder(StringBuilder assemblyCode, IActionDefinition action, IProcessDefinition process, string variableName)
        {
            base.InitializeApprovalActionBuilder(assemblyCode, action, process, variableName);

            assemblyCode.AppendFormat(@"
                {0}.DataContext = new Cebos.Veyron.SharedTypes.SqlServer.Actions.ApprovalActionDataContext(Cebos.Veyron.SharedTypes.ProcessMetadataRepository.Default.GetProcessMetadata<{1}Edit>(), new System.Guid(""{2}""), {3});
", variableName, process.Name, action.Guid, action.ApprovalOptions.ApprovalFieldName.ToLiteral());
        }
        /// <summary>
        /// Generates the code that initializes an assignment action builder.
        /// </summary>
        /// <param name="assemblyCode">
        /// The assembly code.
        /// </param>
        /// <param name="action">
        /// The action.
        /// </param>
        /// <param name="process">
        /// The process.
        /// </param>
        /// <param name="variableName">
        /// The assignment action builder variable name.
        /// </param>
        protected override void InitializeAssignmentActionBuilder(
            StringBuilder assemblyCode,
            IActionDefinition action,
            IProcessDefinition process,
            string variableName)
        {
            base.InitializeAssignmentActionBuilder(assemblyCode, action, process, variableName);

            foreach (var ruleGuid in action.RuleGuid)
            {
                var rule = process.RuleDefinitions.FirstOrDefault(r => r.Guid == ruleGuid && r.IsActive);
                if (rule == null)
                    continue;

                assemblyCode.AppendFormat(@"
                {0}.AuditLogger = AuditLogCommand.InsertEmailLog;
                {0}.Rules.Add({2}Metadata.RuleManager.GetRule(new System.Guid(""{1}"")));", variableName, rule.Guid, process.Name);
            }
        }
        /// <summary>
        /// Generates the code that initializes an assignment action builder.
        /// </summary>
        /// <param name="assemblyCode">
        /// The assembly code.
        /// </param>
        /// <param name="action">
        /// The action.
        /// </param>
        /// <param name="process">
        /// The process.
        /// </param>
        /// <param name="variableName">
        /// The assignment action builder variable name.
        /// </param>
        protected override void InitializeAssignmentActionBuilder(
            StringBuilder assemblyCode,
            IActionDefinition action,
            IProcessDefinition process,
            string variableName)
        {
            base.InitializeAssignmentActionBuilder(assemblyCode, action, process, variableName);

            var roleId = action.AssignmentOptions.RoleId != 0 ? (int?)action.AssignmentOptions.RoleId : null;

            assemblyCode.AppendFormat(
                @"
                {0}.DataContext = new Cebos.Veyron.SharedTypes.SqlServer.Actions.AssignmentActionDataContext(Cebos.Veyron.SharedTypes.ProcessMetadataRepository.Default.GetProcessMetadata<{1}Edit>(), new System.Guid(""{2}""), {3}, {4}, {5}, {6});
",
                variableName,
                process.Name,
                action.Guid,
                roleId.ToLiteral(),
                action.AssignmentOptions.RoleFieldPath.ToLiteral(),
                action.AssignmentOptions.ResponsibilityFieldPath.ToLiteral(),
                action.AssignmentOptions.EmailFieldName.ToLiteral());
        }