49ba669707
- piccole correzioni - aggiunta colonna scadenza licenza in SearchLicence.
1006 lines
39 KiB
VB.net
1006 lines
39 KiB
VB.net
Imports System.Collections.ObjectModel
|
|
Imports System.IO
|
|
Imports EgtWPFLib5
|
|
|
|
Public Class UpdateLicencePageVM
|
|
Inherits VMBase
|
|
|
|
#Region "FIELDS & PROPERTIES"
|
|
|
|
Private m_Licence As Licence
|
|
Public Property Licence As Licence
|
|
Get
|
|
Return m_Licence
|
|
End Get
|
|
Set(value As Licence)
|
|
m_Licence = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_Overwrite As Boolean
|
|
Public Property Overwrite As Boolean
|
|
Get
|
|
Return m_Overwrite
|
|
End Get
|
|
Set(value As Boolean)
|
|
m_Overwrite = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_ReturnFromUpdate As Boolean
|
|
Public Property ReturnFromUpdate As Boolean
|
|
Get
|
|
Return m_ReturnFromUpdate
|
|
End Get
|
|
Set(value As Boolean)
|
|
m_ReturnFromUpdate = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_LockId As String
|
|
Public Property LockId As String
|
|
Get
|
|
Return m_LockId
|
|
End Get
|
|
Set(value As String)
|
|
m_LockId = value
|
|
NotifyPropertyChanged("LockId")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_SerialNumber As String
|
|
Public Property SerialNumber As String
|
|
Get
|
|
Return m_SerialNumber
|
|
End Get
|
|
Set(value As String)
|
|
m_SerialNumber = value
|
|
NotifyPropertyChanged("SerialNumber")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_ProductName As String
|
|
Public Property ProductName As String
|
|
Get
|
|
Return m_ProductName
|
|
End Get
|
|
Set(value As String)
|
|
m_ProductName = value
|
|
NotifyPropertyChanged("ProductName")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_VersionList As List(Of Version)
|
|
Public ReadOnly Property VersionList As List(Of Version)
|
|
Get
|
|
Return m_VersionList
|
|
End Get
|
|
End Property
|
|
|
|
Private m_SelVersion As Version
|
|
Public Property SelVersion As Version
|
|
Get
|
|
Return m_SelVersion
|
|
End Get
|
|
Set(value As Version)
|
|
m_SelVersion = value
|
|
If Not IsNothing(m_SelVersion) Then
|
|
If m_SelVersion.VersionNumber < 22 Then
|
|
'Se la Versione è minore di 22 setto la CmBx a " " e la disabilito
|
|
SelSubVersion = m_SubVersionList(12)
|
|
SubVersion_IsEnabled = False
|
|
Else
|
|
'Altrimenti abilito la CmBx e la setto al mese corrente
|
|
SubVersion_IsEnabled = True
|
|
SelSubVersion = SubVersionList(DateTime.Now.Month - 1)
|
|
End If
|
|
End If
|
|
NotifyPropertyChanged("SelVersion")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_SubVersionList As New List(Of String)({"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", String.Empty})
|
|
Public ReadOnly Property SubVersionList As List(Of String)
|
|
Get
|
|
Return m_SubVersionList
|
|
End Get
|
|
End Property
|
|
|
|
Private m_SelSubVersion As String
|
|
Public Property SelSubVersion As String
|
|
Get
|
|
Return m_SelSubVersion
|
|
End Get
|
|
Set(value As String)
|
|
m_SelSubVersion = value
|
|
NotifyPropertyChanged("SelSubVersion")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_SubVersion_IsEnabled As Boolean
|
|
Public Property SubVersion_IsEnabled As Boolean
|
|
Get
|
|
Return m_SubVersion_IsEnabled
|
|
End Get
|
|
Set(value As Boolean)
|
|
m_SubVersion_IsEnabled = value
|
|
NotifyPropertyChanged("SubVersion_IsEnabled")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_ProductLevelList As New List(Of Integer)({1, 5, 10})
|
|
Public ReadOnly Property ProductLevelList As List(Of Integer)
|
|
Get
|
|
Return m_ProductLevelList
|
|
End Get
|
|
End Property
|
|
|
|
Private m_SelProductLevel As Integer
|
|
Public Property SelProductLevel As Integer
|
|
Get
|
|
Return m_SelProductLevel
|
|
End Get
|
|
Set(value As Integer)
|
|
m_SelProductLevel = value
|
|
NotifyPropertyChanged("SelProductLevel")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_ProductDeadline As Nullable(Of Date)
|
|
Public Property ProductDeadline As Nullable(Of Date)
|
|
Get
|
|
Return m_ProductDeadline
|
|
End Get
|
|
Set(value As Nullable(Of Date))
|
|
m_ProductDeadline = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_OptionDeadline As Nullable(Of Date)
|
|
Public Property OptionDeadline As Nullable(Of Date)
|
|
Get
|
|
Return m_OptionDeadline
|
|
End Get
|
|
Set(value As Nullable(Of Date))
|
|
m_OptionDeadline = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_FileName As String
|
|
Public Property FileName As String
|
|
Get
|
|
Return m_FileName
|
|
End Get
|
|
Set(value As String)
|
|
m_FileName = value
|
|
NotifyPropertyChanged("FileName")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_Option1 As New ObservableCollection(Of KeyOption)
|
|
Public ReadOnly Property Option1 As ObservableCollection(Of KeyOption)
|
|
Get
|
|
Return m_Option1
|
|
End Get
|
|
End Property
|
|
|
|
Private m_Option2 As New ObservableCollection(Of KeyOption)
|
|
Public ReadOnly Property Option2 As ObservableCollection(Of KeyOption)
|
|
Get
|
|
Return m_Option2
|
|
End Get
|
|
End Property
|
|
|
|
Private m_LicenseDate As Nullable(Of Date)
|
|
Public Property LicenseDate As Nullable(Of Date)
|
|
Get
|
|
Return m_LicenseDate
|
|
End Get
|
|
Set(value As Nullable(Of Date))
|
|
m_LicenseDate = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_Note As String
|
|
Public Property Note As String
|
|
Get
|
|
Return m_Note
|
|
End Get
|
|
Set(value As String)
|
|
m_Note = value
|
|
NotifyPropertyChanged("Note")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_NumberList As List(Of Key)
|
|
Public ReadOnly Property NumberList As List(Of Key)
|
|
Get
|
|
Return m_NumberList
|
|
End Get
|
|
End Property
|
|
|
|
Private m_SelNumber As Key
|
|
Public Property SelNumber As Key
|
|
Get
|
|
Return m_SelNumber
|
|
End Get
|
|
Set(value As Key)
|
|
m_SelNumber = value
|
|
NotifyPropertyChanged("SelNumber")
|
|
If Not IsNothing(value) Then
|
|
' Quando viene scelto un KeyNumber viene modificato automaticamente anche il FilePath sostituendo il KeyNumber e
|
|
' calcolando il nome che il file dovrà avere senza o con '_' e con quale numero dopo)
|
|
Dim LicQuery As String = "SELECT * FROM " & DB_LICENCE & " WHERE " & DB_LICENCEID & " = " & Licence.LicenceID
|
|
Dim m_FilePathDict As Dictionary(Of String, String) = ManageDb.ExecuteStringDictionaryQuery(LicQuery)
|
|
Dim FilePath As String = m_FilePathDict(DB_FILE)
|
|
Dim KeyQuery As String = "SELECT * FROM " & DB_KEY & " WHERE " & DB_LOCKID & " = '" & Licence.Number & "' "
|
|
FilePath = FilePath.Replace("-" & ManageDb.ExecuteKeyQuery(KeyQuery)(0).Number.ToString("D6") & "-",
|
|
"-" & SelNumber.Number.ToString("D6") & "-")
|
|
|
|
' In base al tipo delle chiave (Hardware o Software) aggiusto il nome del file
|
|
If SelNumber.IsDongle = 0 Then
|
|
FilePath = ReplaceSubstring(FilePath, "Key", "Soft")
|
|
End If
|
|
If SelNumber.IsDongle = 1 Then
|
|
FilePath = ReplaceSubstring(FilePath, "Soft", "Key")
|
|
End If
|
|
|
|
m_FileName = ManageFile.ComputeFileName(FilePath, Path.GetFileNameWithoutExtension(FilePath))
|
|
NotifyPropertyChanged("FileName")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_KeyNumberTxBl_Visibility As Visibility
|
|
Public Property KeyNumberTxBl_Visibility As Visibility
|
|
Get
|
|
Return m_KeyNumberTxBl_Visibility
|
|
End Get
|
|
Set(value As Visibility)
|
|
m_KeyNumberTxBl_Visibility = value
|
|
NotifyPropertyChanged("KeyNumberTxBl_Visibility")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_KeyNumberCmBx_Visibility As Visibility
|
|
Public Property KeyNumberCmBx_Visibility As Visibility
|
|
Get
|
|
Return m_KeyNumberCmBx_Visibility
|
|
End Get
|
|
Set(value As Visibility)
|
|
m_KeyNumberCmBx_Visibility = value
|
|
NotifyPropertyChanged("KeyNumberCmBx_Visibility")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_NestKey As String
|
|
Public Overloads Property NestKey As String
|
|
Get
|
|
Return m_NestKey
|
|
End Get
|
|
Set(value As String)
|
|
m_NestKey = value
|
|
NotifyPropertyChanged("NestKey")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_NestDeadline As Nullable(Of Date)
|
|
Public Property NestDeadline As Nullable(Of Date)
|
|
Get
|
|
Return m_NestDeadline
|
|
End Get
|
|
Set(value As Nullable(Of Date))
|
|
m_NestDeadline = value
|
|
End Set
|
|
End Property
|
|
|
|
' Definizione comandi
|
|
Private m_cmdUpdate As Command
|
|
Private m_cmdCancel As Command
|
|
|
|
#End Region
|
|
|
|
#Region "Messages"
|
|
|
|
Public ReadOnly Property UpdateLicenceMsg As String
|
|
Get
|
|
Return "Update licence"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property ProductNameMsg As String
|
|
Get
|
|
Return "Product name"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property ProductVersionMsg As String
|
|
Get
|
|
Return "Product version"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property SubVersionMsg As String
|
|
Get
|
|
Return "Sub version"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property ProductLevelMsg As String
|
|
Get
|
|
Return "Product level"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property ProductDeadlineMsg As String
|
|
Get
|
|
Return "Product deadline"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property Option1Msg As String
|
|
Get
|
|
Return "Option 1"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property Option2Msg As String
|
|
Get
|
|
Return "Option 2"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property OptionDeadlineMsg As String
|
|
Get
|
|
Return "Option deadline"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property FileNameMsg As String
|
|
Get
|
|
Return "File name"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property LicenseDateMsg As String
|
|
Get
|
|
Return "License date"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property NoteMsg As String
|
|
Get
|
|
Return "Note"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property NestKeyMsg As String
|
|
Get
|
|
Return "Nesting encrypted string"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property NestDeadlineMsg As String
|
|
Get
|
|
Return "Nesting deadline"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property UpdateMsg As String
|
|
Get
|
|
Return "Update"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property CancelMsg As String
|
|
Get
|
|
Return "Close"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property KeyNumberMsg As String
|
|
Get
|
|
Return "Key number"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property LockIdMsg As String
|
|
Get
|
|
Return "Lock ID"
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property SerialNumberMsg As String
|
|
Get
|
|
Return "Serial number"
|
|
End Get
|
|
End Property
|
|
|
|
#End Region ' Messages
|
|
|
|
#Region "CONSTRUCTOR"
|
|
|
|
Sub New()
|
|
' Imposto riferimento nella mappa
|
|
Map.SetRefUpdateLicencePageVM(Me)
|
|
End Sub
|
|
|
|
#End Region ' CONSTRUCTOR
|
|
|
|
#Region "METHODS"
|
|
|
|
Friend Sub InitUpdateLicencePage()
|
|
' Carico lista ProductVersion
|
|
Dim Query As String = "SELECT * FROM " & DB_VERSION & " WHERE " & DB_PRODUCTID & " = " & Licence.ProductID
|
|
m_VersionList = ManageDb.ExecuteVersionQuery(Query)
|
|
NotifyPropertyChanged("VersionList")
|
|
' Carico elemento della lista ProductVersion selezionato precedentemente
|
|
Dim selQuery As String = "SELECT * FROM " & DB_LICENCE & " WHERE " & DB_LICENCEID & " = " & Licence.LicenceID
|
|
Dim m_VersNumberDict As Dictionary(Of String, String) = ManageDb.ExecuteStringDictionaryQuery(selQuery)
|
|
Dim VersNumber As String = m_VersNumberDict(DB_PRODUCTVERSION)
|
|
m_SelVersion = m_VersionList.FirstOrDefault(Function(vers) vers.VersionNumber.Equals(CInt(VersNumber.Substring(0, 2))))
|
|
NotifyPropertyChanged("SelVersion")
|
|
' Carico elemento della lista SubVersion selezionato precedentemente
|
|
If (VersNumber.Length > 2) Then
|
|
m_SelSubVersion = m_SubVersionList.FirstOrDefault(Function(vers) vers.Equals(VersNumber.Substring(2, 2)))
|
|
Else
|
|
m_SelSubVersion = m_SubVersionList(12) 'Imposto l'elemento String.Empty
|
|
End If
|
|
NotifyPropertyChanged("SelSubVersion")
|
|
If m_SelVersion.VersionNumber < 22 Then
|
|
SubVersion_IsEnabled = False
|
|
Else
|
|
SubVersion_IsEnabled = True
|
|
End If
|
|
|
|
SelProductLevel = Licence.ProductLevel
|
|
NotifyPropertyChanged("SelProductLevel")
|
|
FileName = Licence.File ' String.Empty
|
|
NotifyPropertyChanged("File")
|
|
|
|
' Carico LockId della Licenza selezionata da aggiornare
|
|
LockId = Licence.Number
|
|
NotifyPropertyChanged("LockId")
|
|
|
|
' Carico Seriale della Chiave che contiene la Licenza selezionata da aggiornare
|
|
Dim nQuery As String = "SELECT * FROM " & DB_KEY & " WHERE " & DB_LOCKID & " = '" & Licence.Number & "'"
|
|
'SerialNumber = ManageDb.ExecuteKeyQuery(nQuery).FirstOrDefault().Seriale
|
|
Dim keyDummy As Key = ManageDb.ExecuteKeyQuery(nQuery).FirstOrDefault()
|
|
SerialNumber = If(IsNothing(keyDummy), Nothing, keyDummy.Seriale)
|
|
NotifyPropertyChanged("SerialNumber")
|
|
|
|
' Carico ProductName della Licenza selezionata da aggiornare
|
|
Dim ProdQuery As String = "SELECT * FROM " & DB_PRODUCT & " WHERE " & DB_PRODUCTID & " = " & Licence.ProductID
|
|
ProductName = ManageDb.ExecuteProductQuery(ProdQuery)(0).ProductName
|
|
NotifyPropertyChanged("ProductName")
|
|
|
|
'' Carico elemento della lista Version selezionato precedentemente
|
|
'Dim selQuery As String = "SELECT " & DB_RESELLERID & " FROM " & DB_CLIENT &
|
|
'" INNER JOIN " & DB_RESELLER & " ON " & DB_CLIENT & "." & DB_CLIENTID & " = " &
|
|
'DB_RESELLER & "." & DB_RESELLERID &
|
|
'" WHERE " & DB_CLIENTID & " LIKE " & IdToUpdate
|
|
''m_SelReseller = ManageDb.ExecuteResellerQuery(rQuery)(0)
|
|
''m_SelReseller = m_ResellerList(2)
|
|
'm_SelVersion = m_VersionList.FirstOrDefault(Function(vers) vers.VersionNumber.Equals(ManageDb.ExecuteVersionQuery(selQuery)(0)))
|
|
'NotifyPropertyChanged("SelReseller")
|
|
|
|
' Carico lista ProductLevel
|
|
'Dim plQuery As String = "SELECT " & DB_PRODUCTLEVEL & " FROM " & DB_LICENCE & " GROUP BY " & DB_PRODUCTLEVEL
|
|
'm_ProductLevelList = ManageDb.ExecuteIntegerQuery(plQuery, DB_PRODUCTLEVEL)
|
|
'm_ProductLevelList.Sort(Function(x, y) CInt(y).CompareTo(CInt(x)))
|
|
'NotifyPropertyChanged("ProductLevelList")
|
|
|
|
If Overwrite Then
|
|
KeyNumberTxBl_Visibility = Visibility.Collapsed
|
|
KeyNumberCmBx_Visibility = Visibility.Collapsed
|
|
Else
|
|
KeyNumberTxBl_Visibility = Visibility.Visible
|
|
KeyNumberCmBx_Visibility = Visibility.Visible
|
|
' Carico lista KeyNumber
|
|
Dim kQuery As String = "SELECT * FROM " & DB_KEY
|
|
m_NumberList = ManageDb.ExecuteKeyQuery(kQuery)
|
|
NotifyPropertyChanged("NumberList")
|
|
' Carico elemento della lista KeyNumber selezionato precedentemente
|
|
Dim selKQuery As String = "SELECT * FROM " & DB_LICENCE &
|
|
" INNER JOIN " & DB_KEY & " ON " & DB_LICENCE & "." & DB_LOCKID & " = " & DB_KEY & "." & DB_LOCKID &
|
|
" WHERE " & DB_LICENCEID & " = " & Licence.LicenceID
|
|
Dim selNum As Integer = ManageDb.ExecuteKeyQuery(selKQuery)(0).Number
|
|
SelNumber = m_NumberList.FirstOrDefault(Function(key) key.Number.Equals(selNum))
|
|
NotifyPropertyChanged("SelNumber")
|
|
End If
|
|
|
|
m_ProductDeadline = Licence.ProductDeadline
|
|
NotifyPropertyChanged("ProductDeadline")
|
|
m_OptionDeadline = Licence.OptionDeadline
|
|
NotifyPropertyChanged("OptionDeadline")
|
|
If Overwrite Then
|
|
m_LicenseDate = Licence.LicenseDate
|
|
Else
|
|
m_LicenseDate = DateTime.Now
|
|
End If
|
|
NotifyPropertyChanged("LicenseDate")
|
|
|
|
' Resetto i campi NestKey e NestDeadline e carico i valori grazie al LicenceID associato
|
|
m_NestKey = String.Empty
|
|
m_NestDeadline = Date.Now
|
|
Dim NestQuery As String = "SELECT * FROM " & DB_LICENCE & " WHERE " & DB_LICENCEID & " = " & Licence.LicenceID
|
|
Dim m_NestKeyDict As Dictionary(Of String, String) = ManageDb.ExecuteStringDictionaryQuery(NestQuery)
|
|
m_NestKey = m_NestKeyDict(DB_NESTKEY)
|
|
Dim sNestDl As String = m_NestKeyDict(DB_NESTDEADLINE)
|
|
Dim splittedNestDl() As String = Split(sNestDl)
|
|
If Not String.IsNullOrWhiteSpace(splittedNestDl(0)) Then
|
|
m_NestDeadline = Date.ParseExact(splittedNestDl(0), "dd/MM/yyyy", System.Globalization.DateTimeFormatInfo.InvariantInfo)
|
|
End If
|
|
NotifyPropertyChanged("NestKey")
|
|
NotifyPropertyChanged("NestDeadline")
|
|
|
|
' Inizializzo liste opzioni
|
|
LoadOptions(1, m_Option1)
|
|
LoadOptions(2, m_Option2)
|
|
|
|
' m_FileName = Licence.File
|
|
|
|
m_Note = Licence.Note
|
|
NotifyPropertyChanged("Note")
|
|
End Sub
|
|
|
|
Private Sub LoadOptions(nIndex As Integer, OptionList As ObservableCollection(Of KeyOption))
|
|
'Cerco ProductName associat a ProductID
|
|
Dim Query As String = "SELECT " & DB_PRODUCTNAME & " FROM " & DB_PRODUCT & " WHERE " & DB_PRODUCTID & " = " & Licence.ProductID
|
|
Dim m_ProductNameDict As Dictionary(Of String, String) = ManageDb.ExecuteStringDictionaryQuery(Query)
|
|
m_ProductName = m_ProductNameDict(DB_PRODUCTNAME)
|
|
' Cancello opzioni
|
|
OptionList.Clear()
|
|
' Carico opzioni
|
|
Dim OptionIndex As Integer = 1
|
|
Dim OptionName As String = String.Empty
|
|
GetMainPrivateProfileString(m_ProductName & " - Option" & nIndex, "Option" & OptionIndex, "", OptionName)
|
|
While Not String.IsNullOrWhiteSpace(OptionName)
|
|
OptionList.Add(New KeyOption(False, True, OptionName))
|
|
OptionIndex += 1
|
|
GetMainPrivateProfileString(m_ProductName & " - Option" & nIndex, "Option" & OptionIndex, "", OptionName)
|
|
End While
|
|
' Se ho caricato delle opzioni
|
|
If OptionList.Count > 0 Then
|
|
' Verifico se ci sono opzioni del prodotto
|
|
Dim ProductOption As Integer = If(nIndex = 1, Licence.Option1, Licence.Option2)
|
|
Dim nBinaryIndex As Integer = 1
|
|
For I = 0 To OptionList.Count - 1
|
|
If (ProductOption And nBinaryIndex) <> 0 Then
|
|
OptionList(I).IsChecked = True
|
|
OptionList(I).IsEnabled = True
|
|
End If
|
|
If nIndex = 2 Then
|
|
If (OptionList(I).Msg.Equals("XXX")) Then
|
|
OptionList(I).IsChecked = False
|
|
OptionList(I).IsEnabled = False
|
|
End If
|
|
End If
|
|
nBinaryIndex *= 2
|
|
Next
|
|
End If
|
|
End Sub
|
|
|
|
Private Function CalcOptionDec(OptionList As ObservableCollection(Of KeyOption)) As Integer
|
|
Dim nDecOption As Integer = 0
|
|
Dim nBinaryIndex As Integer = 1
|
|
For I As Integer = 0 To OptionList.Count() - 1
|
|
If OptionList(I).IsChecked Then
|
|
nDecOption += nBinaryIndex
|
|
End If
|
|
nBinaryIndex *= 2
|
|
Next
|
|
Return nDecOption
|
|
End Function
|
|
|
|
Private Function ReplaceSubstring(yourString As String, wordToRemove As String, newWord As String) As String
|
|
Dim wordIndex As Integer = yourString.IndexOf(wordToRemove)
|
|
If wordIndex >= 0 Then
|
|
yourString = yourString.Remove(wordIndex, wordToRemove.Length)
|
|
yourString = yourString.Insert(wordIndex, newWord)
|
|
End If
|
|
Return yourString
|
|
End Function
|
|
|
|
#End Region ' METHODS
|
|
|
|
#Region "Update"
|
|
|
|
' Returns a command that manage the MainWindow_Unloaded command
|
|
Public ReadOnly Property Update_Command As ICommand
|
|
Get
|
|
If m_cmdUpdate Is Nothing Then
|
|
m_cmdUpdate = New Command(AddressOf Update)
|
|
End If
|
|
Return m_cmdUpdate
|
|
End Get
|
|
End Property
|
|
|
|
Public Sub Update(ByVal param As Object)
|
|
Dim Query As String = String.Empty
|
|
If Overwrite Then
|
|
|
|
Dim LicQuery As String = "SELECT * FROM " & DB_LICENCE & " WHERE " & DB_LICENCEID & " = " & Licence.LicenceID
|
|
Dim m_UpdateLicDict As Dictionary(Of String, String) = ManageDb.ExecuteStringDictionaryQuery(LicQuery)
|
|
Dim LockID As String = m_UpdateLicDict(DB_LOCKID)
|
|
Dim ProductID As Integer = CInt(m_UpdateLicDict(DB_PRODUCTID))
|
|
Dim FilePath As String = m_UpdateLicDict(DB_FILE)
|
|
Dim FileNameOnly As String = Path.GetFileNameWithoutExtension(FilePath)
|
|
|
|
Dim ProdQuery As String = "SELECT * FROM " & DB_PRODUCT & " WHERE " & DB_PRODUCTID & " = " & ProductID
|
|
Dim ProductNumber As Integer = ManageDb.ExecuteIntegerQuery(ProdQuery, DB_PRODUCTNUMBER)(0)
|
|
|
|
' Calcolo valore decimale opzione1
|
|
Dim nDecOption1 As Integer = CalcOptionDec(m_Option1)
|
|
Dim nDecOption2 As Integer = CalcOptionDec(m_Option2)
|
|
|
|
' Data
|
|
Dim startDate As New DateTime(1970, 1, 1)
|
|
Dim DayProductDeadline As Integer
|
|
DayProductDeadline = (ProductDeadline - startDate).Value.Days
|
|
Dim DayOptionDeadline As Integer
|
|
DayOptionDeadline = (OptionDeadline - startDate).Value.Days
|
|
|
|
' Nome licenza
|
|
Dim sLicName As String = Path.GetFileNameWithoutExtension(FilePath)
|
|
|
|
' Nome file
|
|
'Dim fileName As String = Map.refMainWindowVM.MainWindowM.sKeygenDataDir & "\" & sLicName & ".Kge"
|
|
' Scrivo il file
|
|
Dim StringFile As New List(Of String)
|
|
StringFile.Add(";")
|
|
StringFile.Add("[Index]")
|
|
StringFile.Add("Last=1")
|
|
StringFile.Add("[Licence1]")
|
|
StringFile.Add("Date=" & Format(Now, "yyyy/MM/dd HH:mm:ss"))
|
|
StringFile.Add("Customer=" & sLicName)
|
|
StringFile.Add("LockId=" & LockID)
|
|
StringFile.Add("ClearLockId=")
|
|
StringFile.Add("Product=" & ProductNumber)
|
|
StringFile.Add("Ver=" & SelVersion.VersionNumber & SelSubVersion)
|
|
StringFile.Add("Lev=" & SelProductLevel)
|
|
StringFile.Add("ExpDays=" & DayProductDeadline)
|
|
StringFile.Add("Opt1=" & nDecOption1)
|
|
StringFile.Add("Opt2=" & nDecOption2)
|
|
StringFile.Add("OptExpDays=" & DayOptionDeadline)
|
|
' Se il campo NestKey non è vuoto aggiungo anche quello al file
|
|
If Not String.IsNullOrWhiteSpace(NestKey) Then
|
|
StringFile.Add("NestKey=" & NestKey)
|
|
End If
|
|
|
|
Try
|
|
IO.File.WriteAllLines(FilePath, StringFile, Text.Encoding.UTF8)
|
|
Catch ex As Exception
|
|
MessageBox.Show("Errore nella scrittura del file dati per licenza", "KeyGenerator Error")
|
|
Return
|
|
End Try
|
|
|
|
Dim proc As Process = Nothing
|
|
Try
|
|
' Lancio il generatore di licenza
|
|
Dim sParams As String = """" & FilePath & """ 1"
|
|
proc = Process.Start(Map.refMainWindowVM.MainWindowM.sKeygenPath, sParams)
|
|
|
|
' Attendo il termine del processo
|
|
While Not proc.HasExited
|
|
proc.Refresh()
|
|
System.Threading.Thread.Sleep(50)
|
|
End While
|
|
Catch
|
|
If File.Exists(Map.refMainWindowVM.MainWindowM.sKeygenPath) Then
|
|
MessageBox.Show("Errore nell'esecuzione di KeyGenerator", "LicenceManager Error")
|
|
Else
|
|
MessageBox.Show("Il percorso di KeyGenerator specificato nel file INI non esiste", "LicenceManager Error")
|
|
End If
|
|
Return
|
|
End Try
|
|
|
|
' Errore nella generazione della licenza
|
|
If proc.ExitCode <> 0 Then
|
|
Dim sOut As String = "La Licenza non è stata generata correttamente (" & proc.ExitCode.ToString() & ")"
|
|
MessageBox.Show(sOut, "KeyGenerator Error")
|
|
Return
|
|
Else
|
|
' Se la licenza è stata generata correttamente aggiungo la stringa NestKey (se prevista).
|
|
' L'aggiunta della string NestKey al file .lic è necessaria perchè viene sì scritta nel .Kge ma viene ignorata dal KeyGenerator
|
|
Try
|
|
Dim sLicFile As String = Path.ChangeExtension(FilePath.Replace("\", "\\"), ".lic")
|
|
If (File.Exists(sLicFile)) And Not String.IsNullOrWhiteSpace(NestKey) Then
|
|
My.Computer.FileSystem.WriteAllText(sLicFile, "NestKey=" & NestKey & vbNewLine, True, Text.Encoding.UTF8)
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
MessageBox.Show("Errore nell'aggiunta della stringa criptata per il Nesting al file .lic", "LicenceManager Error")
|
|
Return
|
|
End Try
|
|
End If
|
|
|
|
Dim textLic As String = File.ReadAllText(Path.ChangeExtension(FilePath.Replace("\", "\\"), ".lic"))
|
|
|
|
'' Calcolo valore decimale opzione1
|
|
'Dim nDecOption1 As Integer = CalcOptionDec(m_Option1)
|
|
'Dim nDecOption2 As Integer = CalcOptionDec(m_Option2)
|
|
' Cerco nella tabella Licence
|
|
Query = "UPDATE " & DB_LICENCE
|
|
Dim bFirstWhere As Boolean = True
|
|
If (Not IsNothing(m_SelVersion) OrElse
|
|
Not String.IsNullOrWhiteSpace(m_SelProductLevel.ToString()) OrElse
|
|
Not IsNothing(ProductDeadline) OrElse
|
|
Not nDecOption1 = 0 OrElse
|
|
Not nDecOption2 = 0 OrElse
|
|
Not IsNothing(OptionDeadline) OrElse
|
|
Not IsNothing(LicenseDate) OrElse
|
|
Not String.IsNullOrWhiteSpace(FileName) OrElse
|
|
Not String.IsNullOrWhiteSpace(LockID)) Then
|
|
Query &= " SET "
|
|
If Not IsNothing(m_SelVersion) Then
|
|
EvalWhere(bFirstWhere, Query)
|
|
Query &= DB_PRODUCTVERSION & " = '" & m_SelVersion.VersionNumber & m_SelSubVersion & "' "
|
|
End If
|
|
If Not IsNothing(m_SelProductLevel) Then
|
|
EvalWhere(bFirstWhere, Query)
|
|
Query &= DB_PRODUCTLEVEL & " = '" & m_SelProductLevel.ToString() & "' "
|
|
End If
|
|
If Not IsNothing(ProductDeadline) Then
|
|
EvalWhere(bFirstWhere, Query)
|
|
Query &= DB_PRODUCTDEADLINE & " = '" & Format(ProductDeadline, "yyyy-MM-dd") & "' "
|
|
End If
|
|
If Not nDecOption1 = 0 Then
|
|
EvalWhere(bFirstWhere, Query)
|
|
Query &= DB_OPTION1 & " = '" & nDecOption1 & "' "
|
|
End If
|
|
If Not nDecOption2 = 0 Then
|
|
EvalWhere(bFirstWhere, Query)
|
|
Query &= DB_OPTION2 & " = '" & nDecOption2 & "' "
|
|
End If
|
|
If Not IsNothing(OptionDeadline) Then
|
|
EvalWhere(bFirstWhere, Query)
|
|
Query &= DB_OPTIONDEADLINE & " = '" & Format(OptionDeadline, "yyyy-MM-dd") & "' "
|
|
End If
|
|
If Not IsNothing(LicenseDate) Then
|
|
EvalWhere(bFirstWhere, Query)
|
|
Query &= DB_DATE & " = '" & Format(LicenseDate, "yyyy-MM-dd") & "' "
|
|
End If
|
|
If Not String.IsNullOrWhiteSpace(LockID) Then
|
|
EvalWhere(bFirstWhere, Query)
|
|
Query &= DB_LOCKID & " = '" & LockID & "' "
|
|
End If
|
|
If Not String.IsNullOrWhiteSpace(FileName) Then
|
|
EvalWhere(bFirstWhere, Query)
|
|
Query &= DB_FILE & " = '" & FileName.Replace("\", "\\") & "' "
|
|
End If
|
|
If Not String.IsNullOrWhiteSpace(textLic) Then
|
|
EvalWhere(bFirstWhere, Query)
|
|
Query &= DB_LICFILE & " = '" & textLic & "' "
|
|
End If
|
|
If Not IsNothing(Note) Then
|
|
EvalWhere(bFirstWhere, Query)
|
|
Query &= DB_NOTE & " = '" & m_Note.Replace("\", "\\").Replace("'", "\'").Replace("""", "\""").Replace("%", "\%") & "' "
|
|
End If
|
|
|
|
' Alla fine in ogni caso aggiorniamo anche NestKey e NestDeadline
|
|
EvalWhere(bFirstWhere, Query)
|
|
If String.IsNullOrWhiteSpace(NestKey) Then
|
|
Query &= DB_NESTKEY & " = NULL, " & DB_NESTDEADLINE & " = NULL "
|
|
Else
|
|
Query &= DB_NESTKEY & " = '" & m_NestKey & "', " & DB_NESTDEADLINE & " = '" & Format(NestDeadline, "yyyy-MM-dd") & "' "
|
|
End If
|
|
|
|
Query &= "WHERE " & DB_LICENCEID & " = " & Licence.LicenceID
|
|
Query = Query.TrimEnd(","c, " "c)
|
|
End If
|
|
Else
|
|
' Altrimenti siamo nel caso Update (New)
|
|
|
|
' Verifico presenza di tutti i dati
|
|
If IsNothing(m_Option1) OrElse
|
|
IsNothing(m_Option2) OrElse
|
|
IsNothing(m_SelVersion) OrElse
|
|
IsNothing(m_SelProductLevel) OrElse
|
|
IsNothing(m_ProductDeadline) OrElse
|
|
IsNothing(m_OptionDeadline) OrElse
|
|
IsNothing(m_LicenseDate) Then
|
|
MessageBox.Show("Completare i campi presenti")
|
|
Return
|
|
End If
|
|
|
|
Dim LicQuery As String = "SELECT * FROM " & DB_LICENCE & " WHERE " & DB_LICENCEID & " = " & Licence.LicenceID
|
|
Dim KeyQuery As String = "SELECT * FROM " & DB_KEY & " WHERE " & DB_LOCKID & " = '" & Licence.Number & "' " ' NON C'ERA
|
|
|
|
' Recupero il LockId dal DB in base al numero di chiave selezionato
|
|
Dim SelKeyQuery As String = "SELECT * FROM " & DB_KEY & " WHERE " & DB_NUMBER & " = '" & SelNumber.Number & "' "
|
|
Dim LockId As String = ManageDb.ExecuteKeyQuery(SelKeyQuery)(0).LockID
|
|
|
|
Dim ProductID As Integer = ManageDb.ExecuteIntegerQuery(LicQuery, DB_PRODUCTID)(0)
|
|
Dim FilePath As String = m_FileName
|
|
Dim FileNameOnly As String = Path.GetFileNameWithoutExtension(FilePath)
|
|
|
|
Dim ProdQuery As String = "SELECT * FROM " & DB_PRODUCT & " WHERE " & DB_PRODUCTID & " = " & ProductID
|
|
Dim ProductNumber As Integer = ManageDb.ExecuteIntegerQuery(ProdQuery, DB_PRODUCTNUMBER)(0)
|
|
|
|
' Calcolo valore decimale opzione1
|
|
Dim nDecOption1 As Integer = CalcOptionDec(m_Option1)
|
|
Dim nDecOption2 As Integer = CalcOptionDec(m_Option2)
|
|
|
|
' Data
|
|
Dim startDate As New DateTime(1970, 1, 1)
|
|
Dim DayProductDeadline As Integer
|
|
DayProductDeadline = (ProductDeadline - startDate).Value.Days
|
|
Dim DayOptionDeadline As Integer
|
|
DayOptionDeadline = (OptionDeadline - startDate).Value.Days
|
|
|
|
' Nome licenza
|
|
Dim sLicName As String = Path.GetFileNameWithoutExtension(FilePath)
|
|
|
|
' Nome file
|
|
' Dim fileName As String = Map.refMainWindowVM.MainWindowM.sKeygenDataDir & "\" & sLicName & ".Kge"
|
|
' Scrivo il file
|
|
Dim StringFile As New List(Of String)
|
|
StringFile.Add(";")
|
|
StringFile.Add("[Index]")
|
|
StringFile.Add("Last=1")
|
|
StringFile.Add("[Licence1]")
|
|
StringFile.Add("Date=" & Format(Now, "yyyy/MM/dd HH:mm:ss"))
|
|
StringFile.Add("Customer=" & sLicName)
|
|
StringFile.Add("LockId=" & LockID)
|
|
StringFile.Add("ClearLockId=")
|
|
StringFile.Add("Product=" & ProductNumber)
|
|
StringFile.Add("Ver=" & SelVersion.VersionNumber & SelSubVersion)
|
|
StringFile.Add("Lev=" & SelProductLevel)
|
|
StringFile.Add("ExpDays=" & DayProductDeadline)
|
|
StringFile.Add("Opt1=" & nDecOption1)
|
|
StringFile.Add("Opt2=" & nDecOption2)
|
|
StringFile.Add("OptExpDays=" & DayOptionDeadline)
|
|
' Se il campo NestKey non è vuoto aggiungo anche quello al file
|
|
If Not String.IsNullOrWhiteSpace(NestKey) Then
|
|
StringFile.Add("NestKey=" & NestKey)
|
|
End If
|
|
|
|
Try
|
|
IO.File.WriteAllLines(FilePath, StringFile, Text.Encoding.UTF8)
|
|
Catch ex As Exception
|
|
MessageBox.Show("Errore nella scrittura del file dati per licenza", "KeyGenerator Error")
|
|
Return
|
|
End Try
|
|
|
|
Dim proc As Process = Nothing
|
|
Try
|
|
' Lancio il generatore di licenza
|
|
Dim sParams As String = """" & FilePath & """ 1"
|
|
proc = Process.Start(Map.refMainWindowVM.MainWindowM.sKeygenPath, sParams)
|
|
|
|
' Attendo il termine del processo
|
|
While Not proc.HasExited
|
|
proc.Refresh()
|
|
System.Threading.Thread.Sleep(50)
|
|
End While
|
|
Catch
|
|
If File.Exists(Map.refMainWindowVM.MainWindowM.sKeygenPath) Then
|
|
MessageBox.Show("Errore nell'esecuzione di KeyGenerator", "LicenceManager Error")
|
|
Else
|
|
MessageBox.Show("Il percorso di KeyGenerator specificato nel file INI non esiste", "LicenceManager Error")
|
|
End If
|
|
Return
|
|
End Try
|
|
|
|
' Errore nella generazione della licenza
|
|
If proc.ExitCode <> 0 Then
|
|
Dim sOut As String = "La Licenza non è stata generata correttamente (" & proc.ExitCode.ToString() & ")"
|
|
MessageBox.Show(sOut, "KeyGenerator Error")
|
|
Return
|
|
Else
|
|
' Se la licenza è stata generata correttamente: prima aggiungo la stringa NestKey (se prevista) poi, in ogni caso, aggiungo la licenza al DB.
|
|
' L'aggiunta della string NestKey al file .lic è necessaria perchè viene sì scritta nel .Kge ma viene ignorata dal KeyGenerator
|
|
Try
|
|
Dim sLicFile As String = Path.ChangeExtension(FilePath.Replace("\", "\\"), ".lic")
|
|
If (File.Exists(sLicFile)) And Not String.IsNullOrWhiteSpace(NestKey) Then
|
|
My.Computer.FileSystem.WriteAllText(sLicFile, "NestKey=" & NestKey & vbNewLine, True, Text.Encoding.UTF8)
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
MessageBox.Show("Errore nell'aggiunta della stringa criptata per il Nesting al file .lic", "LicenceManager Error")
|
|
Return
|
|
End Try
|
|
|
|
' Ora aggiungo la licenza al DB
|
|
Try
|
|
Dim textLic As String = File.ReadAllText(Path.ChangeExtension(FilePath.Replace("\", "\\"), ".lic"))
|
|
|
|
If String.IsNullOrWhiteSpace(NestKey) Then
|
|
Query = "INSERT INTO " & DB_LICENCE & " (" & DB_PRODUCTID & ", " & DB_PRODUCTVERSION & ", " & DB_PRODUCTLEVEL & ", " &
|
|
DB_PRODUCTDEADLINE & ", " & DB_OPTION1 & ", " & DB_OPTION2 & ", " &
|
|
DB_OPTIONDEADLINE & ", " & DB_LOCKID & ", " & DB_FILE & ", " &
|
|
DB_DATE & ", " & DB_LICFILE & ", " & DB_NOTE & ")" &
|
|
" VALUES ('" & ProductID & "', " &
|
|
"'" & m_SelVersion.VersionNumber & m_SelSubVersion & "', " &
|
|
"'" & m_SelProductLevel & "', " &
|
|
"Date('" & (String.Format("{0:yyyy-MM-dd}", ProductDeadline)) & "'), " &
|
|
"'" & nDecOption1 & "', " &
|
|
"'" & nDecOption2 & "', " &
|
|
"Date('" & (String.Format("{0:yyyy-MM-dd}", OptionDeadline)) & "'), " &
|
|
"'" & LockId & "', " &
|
|
"'" & FilePath.Replace("\", "\\") & "', " &
|
|
"'" & Format(LicenseDate, "yyyy-MM-dd") & "', " &
|
|
"'" & textLic & "', " &
|
|
"'" & m_Note.Replace("\", "\\").Replace("'", "\'").Replace("""", "\""").Replace("%", "\%") & "')"
|
|
Else
|
|
Query = "INSERT INTO " & DB_LICENCE & " (" & DB_PRODUCTID & ", " & DB_PRODUCTVERSION & ", " & DB_PRODUCTLEVEL & ", " &
|
|
DB_PRODUCTDEADLINE & ", " & DB_OPTION1 & ", " & DB_OPTION2 & ", " &
|
|
DB_OPTIONDEADLINE & ", " & DB_LOCKID & ", " & DB_FILE & ", " &
|
|
DB_DATE & ", " & DB_LICFILE & ", " & DB_NOTE & ", " &
|
|
DB_NESTKEY & ", " & DB_NESTDEADLINE & ")" &
|
|
" VALUES ('" & ProductID & "', " &
|
|
"'" & m_SelVersion.VersionNumber & m_SelSubVersion & "', " &
|
|
"'" & m_SelProductLevel & "', " &
|
|
"Date('" & (String.Format("{0:yyyy-MM-dd}", ProductDeadline)) & "'), " &
|
|
"'" & nDecOption1 & "', " &
|
|
"'" & nDecOption2 & "', " &
|
|
"Date('" & (String.Format("{0:yyyy-MM-dd}", OptionDeadline)) & "'), " &
|
|
"'" & LockId & "', " &
|
|
"'" & FilePath.Replace("\", "\\") & "', " &
|
|
"'" & Format(LicenseDate, "yyyy-MM-dd") & "', " &
|
|
"'" & textLic & "', " &
|
|
"'" & m_Note.Replace("\", "\\").Replace("'", "\'").Replace("""", "\""").Replace("%", "\%") & "', " &
|
|
"'" & m_NestKey & "', " &
|
|
"Date('" & (String.Format("{0:yyyy-MM-dd}", NestDeadline)) & "')" & ")"
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
MessageBox.Show("Errore nella lettura dei dati per la scrittura su DB", "LicenceManager Error")
|
|
Return
|
|
End Try
|
|
End If
|
|
|
|
End If
|
|
|
|
ManageDb.ExecuteQuery(Query)
|
|
|
|
If Map.refMainMenuVM.UpdateFromExpLic Then
|
|
Map.refMainMenuVM.UpdateFromExpLic = False
|
|
Map.refMainWindowVM.SelProjectMode = MainWindowVM.ProjectModeOpt.MAINMENU
|
|
Else
|
|
m_ReturnFromUpdate = True
|
|
' Manage the MainWindow_Unloaded event. This method is invoked by the cmdMainWindow_Unloaded.
|
|
Map.refMainWindowVM.SelProjectMode = MainWindowVM.ProjectModeOpt.SEARCHLICENCE
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub EvalWhere(ByRef bFirst As Boolean, ByRef Query As String)
|
|
If bFirst Then
|
|
bFirst = False
|
|
Else
|
|
Query &= ", "
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' Search
|
|
|
|
#Region "Cancel"
|
|
|
|
' Returns a command that manage the MainWindow_Unloaded command
|
|
Public ReadOnly Property Cancel_Command As ICommand
|
|
Get
|
|
If m_cmdCancel Is Nothing Then
|
|
m_cmdCancel = New Command(AddressOf Cancel)
|
|
End If
|
|
Return m_cmdCancel
|
|
End Get
|
|
End Property
|
|
|
|
Public Sub Cancel(ByVal param As Object)
|
|
|
|
If Map.refMainMenuVM.UpdateFromExpLic Then
|
|
Map.refMainMenuVM.UpdateFromExpLic = False
|
|
Map.refMainWindowVM.SelProjectMode = MainWindowVM.ProjectModeOpt.MAINMENU
|
|
Else
|
|
m_ReturnFromUpdate = True
|
|
' Manage the MainWindow_Unloaded event. This method is invoked by the cmdMainWindow_Unloaded.
|
|
Map.refMainWindowVM.SelProjectMode = MainWindowVM.ProjectModeOpt.SEARCHLICENCE
|
|
End If
|
|
|
|
End Sub
|
|
|
|
#End Region ' Cancel
|
|
|
|
End Class
|