' Скрипт на открытие
' Проверяет пренадлежность открывающего пользователя к шгруппе DV или подразделениям в совйстве 'Подразделениея'
'
' v 1.2.1
Function DoEvent(UserSession, CardFrame, CardData, ActivateFlags, ModeID, FolderID)
DoEvent = 0
Dim Units, Unit, CurrentUserID, Flag, CollEmpty
CurrentUserID = StaffObject(UserSession).GetCurrentUserID
If IsEmployeeInGroup(UserSession, "Божественная двшная группа", CurrentUserID) Then
Exit Function
End If
Set Units = Prop(CardData, "Подразделения")
If Not Units Is Nothing Then
Flag = False: CollEmpty = True
For Each Unit In SubSect(Units, "SelectedValues").Rows
CollEmpty = False
If IsEmployeeInUnit(UserSession, Unit.Value("SelectedValue"), CurrentUserID) Then
Flag = True
Exit For
End If
Next
If Not (Flag Or CollEmpty) Then
MsgBox "Доступ к карточке запрещен", vbOKOnly Or vbExclamation, "Предупреждение"
DoEvent = 8 ' 8 - закрыть карточку
End If
End If
End Function
' Проверить вхождение пользователя в группу DV
Function IsEmployeeInGroup(UserSession, GroupAlias, EmployeeID)
Dim Row
For Each Row In Sect(RefStaff(UserSession), "AlternateHierarchy").AllRows
If Row.Value("Name") = GroupAlias Then
IsEmployeeInGroup = StaffObject(UserSession).IsEmployeeInGroup(EmployeeID, Row.ID)
Exit Function
End If
Next
IsEmployeeInGroup = False
End Function
' Проверить вхождение пользователя в подразделение и дочерние подразделения
Function IsEmployeeInUnit(UserSession, UnitID, EmployeeID)
Dim Employee, CurUnit
Set Employee = Sect(RefStaff(UserSession), "Employees").GetRow(EmployeeID)
Set CurUnit = Employee.SubSection.ParentRow
Do While Not (IsNull(CurUnit) Or CurUnit Is Nothing)
If GoodGuid(CurUnit.ID) = GoodGuid(UnitID) Then
IsEmployeeInUnit = True
Exit Function
End If
Set CurUnit = CurUnit.ParentRow
Loop
IsEmployeeInUnit = False
End Function
' Нормализуем гуид
Function GoodGuid(Guid)
If IsNull(Guid) Then
GoodGuid = Guid
Exit Function
End If
GoodGuid = UCase(Replace(Replace(CStr(Guid), "{", ""), "}", ""))
End Function
' Справочник сотрудников
Function RefStaff(UserSession)
Set RefStaff = UserSession.CardManager.DictionaryData("{6710B92A-E148-4363-8A6F-1AA0EB18936C}")
End Function
' Получение StaffObject
Function StaffObject(UserSession)
Set StaffObject = CreateObject("TOHelperObjects.StaffObject")
Set StaffObject.UserSession = UserSession
End Function
' Получение секции карточки по имени
Function Sect(CardData, Alias)
Set Sect = CardData.Sections(CardData.Type.AllSections.GetByAlias(Alias).ID)
End Function
' Получение подчиненной секции по имени
Function SubSect(RowData, Alias)
Set SubSect = RowData.ChildSections(RowData.Section.Type.ChildSections.GetByAlias(Alias).ID)
End Function
' Нулевая строка секции MainInfo
Function MainInfo(CardData)
Set MainInfo = Sect(CardData, "MainInfo").FirstRow
End Function
' Строка свойства
Function Prop(CardData, Alias)
Set Prop = Nothing
Dim Row: For Each Row In Sect(CardData, "Properties").Rows
If Row.Value("Name") = Alias Then
Set Prop = Row
Exit Function
End If
Next
End Function
' Получение значения свойства
Function GetProp(CardData, Alias, DefaultValue)
Dim Row: Set Row = Prop(CardData, Alias)
If Row Is Nothing Then
GetProp = DefaultValue
Else
GetProp = Row.Value("Value")
If IsNull(GetProp) Then GetProp = DefaultValue
End If
End Function |