' Создание новой версии
' Скрипт на кнопку в карточке
' v 2.0.0

Option Explicit

Function DoEvent(UserSession, CardFrame, CardData, ActivateFlags, ModeID, FolderID)

    DoEvent = 0 or 16
    Dim CardData2, FileList2, Ver, State, Flag, FlagModif, FlagNewVer, FolderID2, LinkedID, LinkedCard

    If MsgBox("Вы уверены что хотите создать новую версию этого дизайна?", vbYesNo Or vbInformation, "Внимание!") = vbNo Then
        Exit Function
    End If

    If GetProp(CardData, "Состояние", vbNullString) <> "действующий" Then
        MsgBox "Внимание! Новую версию дизайна можно создавать только по действующему дизайну. Текущий дизайн не является действующим.", vbOKOnly, "Ошибка создания новой версии дизайна"
        Exit Function
    End If

    If GetProp(CardData, "Флаг модификации", vbNullString) <> "False" Then
        MsgBox "Внимание! По данному дизайну уже идет модификация.", vbOKOnly, "Предупреждение"
        Exit Function
    End If

    ' Копируем карточку
    Set CardData2 = CardData.Copy

    ' Чистим файлы
    Set FileList2 = UserSession.CardManager.CardData(MainInfo(CardData2).Value("FilesID"))
    Sect(FileList2, "FileReferences").Rows.Clear
    MainInfo(FileList2).Value("Count") = 0

    ' Чистим ссылки
    Sect(CardData2, "CardReferences").Rows.Clear

    ' Проставляем версию
    Ver = GetProp(CardData, "Версия дизайна", 0) + 1
    SetProp CardData2, "Версия дизайна", Ver, CStr(Ver)

    ' Пишем состояние на свойствах
    State = "проект"
    SetProp CardData2, "Состояние", State, State

    ' Пишем флаг согласования на свойствах
    Flag = "False"
    SetProp CardData2, "Флаг согласования", Flag, "Нет"

    ' Пишем флаг новой версии на свойствах
    FlagNewVer = "True"
    SetProp CardData2, "Флаг новой версии", Flag, "Да"    

    ' Пишем флаг модификации на свойствах
    FlagModif = "True"
    SetProp CardData, "Флаг модификации", FlagModif, "Да"

    ' Пишем состояние на основной секции
    MainInfo(CardData2).Value("DocState")="{5C82A353-3F9D-4C1A-BAD4-103F85BAB54F}"

    ' Помещаем в папку
    FolderID2 = GetProp(CardData, "папка", FolderID)
    FolderCard(UserSession).CreateShortcut FolderID2, CardData2.ID, True
    
    ' Создаем двустороннюю ссылку на карточки
    LinkedID = CardData2.ID
    Set LinkedCard = UserSession.CardManager.CardData(LinkedID)
    AddCardReference CardData, UserSession, LinkedCard.ID, "Следующая версия"
    AddCardReference LinkedCard, UserSession, CardData.ID, "Предыдущая версия"
    DoEvent = 2 or 16
      
    ' Выводим на экран новую карточку
    CardFrame.Host.ShowCard CardData2.ID

End Function

' Получение карточки папок
Function FolderCard(UserSession)
    Set FolderCard = UserSession.CardManager.Dictionary("{DA86FABF-4DD7-4A86-B6FF-C58C24D12DE2}")
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

' Установка значения свойства
Sub SetProp(CardData, Alias, Value, DisplayValue)
    Prop(CardData, Alias).Value("Value") = Value
    Prop(CardData, Alias).Value("DisplayValue") = DisplayValue
End Sub

' Добавление ссылки
Sub AddCardReference(CardData, UserSession, Link, LinkDesc)
    Dim Refs, Row
    Set Refs = Sect(CardData, "CardReferences")
    Set Row = Refs.CreateRow
    Row.Value("Link") = Link
    Row.Value("CreationDate") = Now
    Row.Value("CreatedBy") = StaffObject(UserSession).GetCurrentUserID
    Row.Value("LinkDesc") = LinkDesc
End Sub

' Получение 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