コード例 #1
0
        public override void Execute(XTriggerArgs args, IXExecutionContext context)
        {
            DomainObjectData xobj = args.TriggeredObject;
            // если изменилось значение признака "Архивное", проверим отсутствие у подразделения работающих сотрудников или не архивных департаментов.
            bool bUpdateIsArchive = xobj.HasUpdatedProp("IsArchive");

            if (bUpdateIsArchive)
            {
                bool newValue = (bool)xobj.GetUpdatedPropValue("IsArchive");
                if (!xobj.IsNew && newValue)
                {
                    //	1. Проверим, что все сотрудники (во всех вложенных департаментах) уволены
                    XDbCommand cmd = context.Connection.CreateCommand(@"
							SELECT 1 
							FROM dbo.Department d_s WITH(NOLOCK)
								JOIN dbo.Department d WITH(NOLOCK) ON d.LIndex >= d_s.LIndex AND d.RIndex <= d_s.RIndex AND d.Organization = d_s.Organization
									JOIN Employee e WITH(NOLOCK) ON (d.ObjectID = e.Department) and (e.WorkEndDate is null)
							WHERE d_s.ObjectID = @ObjectID
							"                            );
                    cmd.Parameters.Add("ObjectID", DbType.Guid, ParameterDirection.Input, false, xobj.ObjectID);
                    if (cmd.ExecuteScalar() != null)
                    {
                        throw new XBusinessLogicException("Департамент не может быть переведен с состояние \"Архивное\", так как содержит работающих сотрудников");
                    }
                }
                // добавим в датаграмму подчиненные департаменты
                UpdateChildDepartments(context.Connection, args.DataSet, xobj.ObjectID, newValue);
            }
        }
コード例 #2
0
        /// <summary>
        /// Обнуление нормы в случае увольнения сотрудника, либо временной нетрудоспособности.
        /// </summary>
        private void setEmployeeRate(XTriggerArgs args, string sComment, DateTime dtDate)
        {
            DomainObjectData xobjEmployeeRate = args.DataSet.CreateNew("EmployeeRate", true);

            xobjEmployeeRate.SetUpdatedPropValue("Employee", args.TriggeredObject.ObjectID);
            xobjEmployeeRate.SetUpdatedPropValue("Rate", 0);
            xobjEmployeeRate.SetUpdatedPropValue("Date", dtDate);
            xobjEmployeeRate.SetUpdatedPropValue("Comment", sComment);
        }
コード例 #3
0
        public override void Execute(XTriggerArgs args, IXExecutionContext context)
        {
            DomainObjectData xobjEventSubscription = args.TriggeredObject;

            // для нового объекта если не задана группа рассылки проставим текущего пользователя
            if (args.Action == XTriggerActions.Insert && !(xobjEventSubscription.GetUpdatedPropValue("Group") is Guid))
            {
                xobjEventSubscription.SetUpdatedPropValue("User", ((ITUser)XSecurityManager.Instance.GetCurrentUser()).EmployeeID);
            }
        }
コード例 #4
0
        private void setEmployeeHistoryEvent(XTriggerArgs args, EmployeeHistoryEvents enumEvent)
        {
            DomainObjectData xobjEmployeeHistory = args.DataSet.CreateNew("EmployeeHistory", true);
            ITUser           user = (ITUser)XSecurityManager.Instance.GetCurrentUser();

            xobjEmployeeHistory.SetUpdatedPropValue("Employee", args.TriggeredObject.ObjectID);
            xobjEmployeeHistory.SetUpdatedPropValue("Event", enumEvent);
            xobjEmployeeHistory.SetUpdatedPropValue("SystemUser", user.SystemUserID);
            xobjEmployeeHistory.SetUpdatedPropValue("EventDate", DateTime.Now);
        }
コード例 #5
0
        public override void Execute(XTriggerArgs args, IXExecutionContext context)
        {
            DomainObjectData xobjEmployeeHistory = args.DataSet.CreateNew("EmployeeHistory", true);
            ITUser           user          = (ITUser)XSecurityManager.Instance.GetCurrentUser();
            Guid             uidEmployeeID = getEmployeeID(context.Connection, args.TriggeredObject.ObjectID);

            xobjEmployeeHistory.SetUpdatedPropValue("Employee", uidEmployeeID);
            xobjEmployeeHistory.SetUpdatedPropValue("Event", EmployeeHistoryEvents.ChangeSecurity);
            xobjEmployeeHistory.SetUpdatedPropValue("SystemUser", user.SystemUserID);
            xobjEmployeeHistory.SetUpdatedPropValue("EventDate", DateTime.Now);
        }
コード例 #6
0
ファイル: Trigger_FolderCreate.cs プロジェクト: SanSay157/IT8
        public override void Execute(XTriggerArgs args, IXExecutionContext context)
        {
            DomainObjectData xobjHistory = getFolderHistoryObject(args.DataSet, args.TriggeredObject);

            xobjHistory.SetUpdatedPropValue("Event", FolderHistoryEvents.Creating);
            // если не задан Инициатор, то установим текущего сотрудника
            if (!args.TriggeredObject.HasUpdatedProp("Initiator") || args.TriggeredObject.GetUpdatedPropValue("Initiator") == DBNull.Value)
            {
                args.TriggeredObject.SetUpdatedPropValue("Initiator", ((ITUser)XSecurityManager.Instance.GetCurrentUser()).EmployeeID);
            }
        }
コード例 #7
0
        public override void Execute(XTriggerArgs args, IXExecutionContext context)
        {
            DomainObjectData xobjTask = args.TriggeredObject;

            // для нового объекта, если не задан планировщик, или
            // если изменилось запланированное время при обновлении установим планировщиком задания текущего сотрудника
            if (xobjTask.IsNew && xobjTask.GetUpdatedPropValue("Planner") == null || !xobjTask.IsNew && xobjTask.HasUpdatedProp("PlannedTime"))
            {
                xobjTask.SetUpdatedPropValue("Planner", ((ITUser)XSecurityManager.Instance.GetCurrentUser()).EmployeeID);
            }
        }
コード例 #8
0
        public override void Execute(XTriggerArgs args, IXExecutionContext context)
        {
            IEnumerator enumerator = args.DataSet.GetModifiedObjectsEnumerator(true);

            while (enumerator.MoveNext())
            {
                DomainObjectData xobj = (DomainObjectData)enumerator.Current;
                if (xobj.IsNew)
                {
                    //TODO Метод ChangeObjectIdentifier(изменение идентификатора нового объекта) был убран из solution
                }
            }
        }
コード例 #9
0
        public override void Execute(XTriggerArgs args, IXExecutionContext context)
        {
            DomainObjectData xobj = args.TriggeredObject;
            // Признак изменения Временной нетрудоспособности
            bool bUpdatedTemporaryDisability = xobj.HasUpdatedProp("TemporaryDisability");
            // Признак изменения Даты начала работы
            bool bUpdateWorkBeginDay = xobj.HasUpdatedProp("WorkBeginDate");
            // Признак изменения Даты окончания работы
            bool bUpdateWorkEndDay = xobj.HasUpdatedProp("WorkEndDate");

            // Если что-то менялось, то запишем это событие в историю
            if (bUpdatedTemporaryDisability)
            {
                bool oldValue = (bool)xobj.GetLoadedPropValueOrLoad(context.Connection, "TemporaryDisability");
                bool newValue = (bool)xobj.GetUpdatedPropValue("TemporaryDisability");
                // Если свойство действительно обновилось, то запишем в "историю"
                if (oldValue != newValue)
                {
                    setEmployeeHistoryEvent(args, EmployeeHistoryEvents.TemporaryDisability);
                    // Если сотрудник получил признак "Временная нетрудоспособность", то надо автоматически задать
                    // норму рабочего времени 0
                    if (newValue)
                    {
                        setEmployeeRate(args, "Временная нетрудоспособность", DateTime.Now);
                    }
                }
            }
            if (bUpdateWorkBeginDay)
            {
                setEmployeeHistoryEvent(args, EmployeeHistoryEvents.WorkBeginDay);
            }
            if (bUpdateWorkEndDay)
            {
                setEmployeeHistoryEvent(args, EmployeeHistoryEvents.WorkEndDay);
                // Если для сотрудника задали "Дату окончания работы", то надо автоматически задать
                // норму рабочего времени 0
                if (xobj.GetUpdatedPropValue("WorkEndDate") != DBNull.Value)
                {
                    setEmployeeRate(args, "Уволен", (DateTime)xobj.GetUpdatedPropValue("WorkEndDate"));
                }
            }
        }
コード例 #10
0
        /// <summary>
        /// Вызов триггера; метод вызывается Ядром треккера
        /// </summary>
        /// <param name="args"></param>
        /// <param name="context"></param>
        public override void Execute(XTriggerArgs args, IXExecutionContext context)
        {
            // Создаем новый элемент истории папки
            DomainObjectData xobjHistory = args.DataSet.CreateNew("FolderHistory", true);

            // Триггер запускается и при удалении объекта - для загрузки информации по
            // папке могут использоваться данные самого объекта, а если их нет - данные из БД
            xobjHistory.SetUpdatedPropValue("Folder",
                                            args.TriggeredObject.GetPropValueAnyhow(
                                                "Folder",
                                                DomainObjectDataSetWalkingStrategies.UseUpdatedPropsThanLoadedProps,
                                                context.Connection));

            xobjHistory.SetUpdatedPropValue("Event", FolderHistoryEvents.DirectionInfoChanging);

            ITUser user = (ITUser)XSecurityManager.Instance.GetCurrentUser();

            xobjHistory.SetUpdatedPropValue("SystemUser", user.SystemUserID);
            xobjHistory.SetUpdatedPropValue("EventDate", DateTime.Now);
        }
コード例 #11
0
        public override void Execute(XTriggerArgs args, IXExecutionContext context)
        {
            DomainObjectData xobj          = args.TriggeredObject;
            Guid             uidEmployeeID = Guid.Empty;

            // Если создается новая норма, то возьмем обновляемое свойство "Employee", иначе загрузим его
            if (xobj.IsNew)
            {
                uidEmployeeID = (Guid)xobj.GetUpdatedPropValue("Employee");
            }
            else
            {
                uidEmployeeID = (Guid)xobj.GetLoadedPropValueOrLoad(context.Connection, "Employee");
            }
            DomainObjectData xobjEmployeeHistory = args.DataSet.CreateNew("EmployeeHistory", true);
            ITUser           user = (ITUser)XSecurityManager.Instance.GetCurrentUser();

            xobjEmployeeHistory.SetUpdatedPropValue("Employee", uidEmployeeID);
            xobjEmployeeHistory.SetUpdatedPropValue("Event", EmployeeHistoryEvents.ChangeRate);
            xobjEmployeeHistory.SetUpdatedPropValue("SystemUser", user.SystemUserID);
            xobjEmployeeHistory.SetUpdatedPropValue("EventDate", DateTime.Now);
        }
コード例 #12
0
        public override void Execute(XTriggerArgs args, Croc.XmlFramework.Core.IXExecutionContext context)
        {
            DomainObjectData xobj            = args.TriggeredObject;
            bool             bUpdatedState   = xobj.HasUpdatedProp("State");
            bool             bUpdateIsLocked = xobj.HasUpdatedProp("IsLocked");

            if (!bUpdatedState && !bUpdateIsLocked)
            {
                return;
            }
            // если здесь значит изменилось хотя бы одно из полей: Состояние (State), Дата блокирования списаний (BlockDate)
            // Теперь надо зачитать предыдущие значения из БД, но только тех свойств, которые обновляются
            preloadProps(xobj, bUpdatedState, bUpdateIsLocked, context);
            if (bUpdateIsLocked)
            {
                bool oldValue = (bool)xobj.GetLoadedPropValue("IsLocked");
                bool newValue = (bool)xobj.GetUpdatedPropValue("IsLocked");
                if (oldValue != newValue)
                {
                    // изменение признака допустимости списания
                    DomainObjectData xobjHistory = getFolderHistoryObject(args.DataSet, xobj);
                    xobjHistory.SetUpdatedPropValue("Event", newValue?FolderHistoryEvents.IsLockedSetToTrue:FolderHistoryEvents.IsLockedSetToFalse);
                }
            }

            if (bUpdatedState)
            {
                FolderStates stateOld = (FolderStates)xobj.GetLoadedPropValue("State");
                FolderStates stateNew = (FolderStates)xobj.GetUpdatedPropValue("State");
                if (stateOld != stateNew)
                {
                    // состояние изменилось
                    //	- проверим на запрещенные переходы
                    checkFolderStateChanging(stateOld, stateNew);
                    DomainObjectData    xobjHistory = getFolderHistoryObject(args.DataSet, xobj);
                    FolderHistoryEvents eventType;
                    if (stateNew == FolderStates.Closed)
                    {
                        eventType = FolderHistoryEvents.Closing;
                    }
                    else if (stateNew == FolderStates.Frozen)
                    {
                        eventType = FolderHistoryEvents.Frozing;
                    }
                    else if (stateNew == FolderStates.WaitingToClose)
                    {
                        eventType = FolderHistoryEvents.WaitingToClose;
                    }
                    else                        // if (stateNew == FolderStates.Open)
                    {
                        eventType = FolderHistoryEvents.Opening;
                    }
                    xobjHistory.SetUpdatedPropValue("Event", eventType);

                    // обработаем переход в состояние "Закрыто":
                    if (!xobj.IsNew && (stateNew == FolderStates.Closed || stateNew == FolderStates.WaitingToClose))
                    {
                        //	1. Проверим, что все инциденты (во всех вложенных папках) находятся в конечных состояниях
                        XDbCommand cmd = context.Connection.CreateCommand(@"
							SELECT 1 
							FROM Folder f_s WITH(NOLOCK)
								JOIN Folder f WITH(NOLOCK) ON f.LIndex >= f_s.LIndex AND f.RIndex <= f_s.RIndex AND f.Customer = f_s.Customer
									JOIN Incident i WITH(NOLOCK) ON f.ObjectID = i.Folder
										JOIN IncidentState i_st WITH(NOLOCK) ON i.State = i_st.ObjectID AND i_st.Category IN (1,2)	
							WHERE f_s.ObjectID = @ObjectID
							"                            );
                        cmd.Parameters.Add("ObjectID", DbType.Guid, ParameterDirection.Input, false, xobj.ObjectID);
                        if (cmd.ExecuteScalar() != null)
                        {
                            throw new XBusinessLogicException("Папка не может быть переведена в состояние \"Закрыто\" или \"Ожидание закрытия\", так как содержит незавершенные инциденты");
                        }
                    }

                    // добавим в датаграмму подчиненные папки с установленным состоянием новым состояние
                    // Обработка папок зависит от нового состояния
                    fillDataSetWithChildFoldersWithUpdatedState(context.Connection, args.DataSet, xobj.ObjectID, stateNew);
                }
            }
        }