Imports System.Collections.ObjectModel Imports System.Windows Imports EgtWPFLib5 Imports MySql.Data.MySqlClient Public Class SearchVersionPageVM Inherits VersionPageVM #Region "FIELDS & PROPERTIES" Private m_SelSearchResult As SearchVersion Public Property SelSearchResult As SearchVersion Get Return m_SelSearchResult End Get Set(value As SearchVersion) m_SelSearchResult = value End Set End Property Private m_SearchResult As ObservableCollection(Of SearchVersion) Public ReadOnly Property SearchResult As ObservableCollection(Of SearchVersion) Get Return m_SearchResult End Get End Property Private m_ProductList As List(Of Product) Public Overloads ReadOnly Property ProductList As List(Of Product) Get Return m_ProductList End Get End Property Private m_SelProduct As Product Public Overloads Property SelProduct As Product Get Return m_SelProduct End Get Set(value As Product) m_SelProduct = value NotifyPropertyChanged("SelProduct") End Set End Property ' Definizione comandi Private m_cmdNewVersion As Command Private m_cmdSearch As Command Private m_cmdCancel As Command Private m_cmdUpdate As Command Private m_cmdDelete As Command #Region "Messages" Public ReadOnly Property SearchVersionMsg As String Get Return "Search Version" End Get End Property Public ReadOnly Property NewMsg As String Get Return "New" End Get End Property Public ReadOnly Property SearchMsg As String Get Return "Search" End Get End Property Public ReadOnly Property CancelMsg As String Get Return "Close" End Get End Property Public ReadOnly Property UpdateMsg As String Get Return "Update" End Get End Property Public ReadOnly Property DeleteMsg As String Get Return "Delete" End Get End Property #End Region ' Messages #End Region ' FIELDS & PROPERTIES #Region "CONSTRUCTOR" Sub New() ' Imposto riferimento nella mappa Map.SetRefSearchVersionPageVM(Me) End Sub #End Region ' CONSTRUCTOR #Region "METHODS" Friend Sub InitSearchVersionPage() ' m_SearchResult = New ObservableCollection(Of SearchVersion)() Dim VersQuery As String = "SELECT * FROM " & DB_VERSION & " INNER JOIN " & DB_PRODUCT & " ON " & DB_VERSION & "." & DB_PRODUCTID & " = " & DB_PRODUCT & "." & DB_PRODUCTID & " " m_SearchResult = New ObservableCollection(Of SearchVersion)(ManageDb.ExecuteSearchVersionQuery(VersQuery)) NotifyPropertyChanged("SearchResult") Dim Query As String = "SELECT * FROM " & DB_PRODUCT m_ProductList = ManageDb.ExecuteProductQuery(Query) NotifyPropertyChanged("ProductList") End Sub #End Region ' METHODS #Region "COMMANDS" #Region "NewVersion" ' Returns a command that manage the MainWindow_Unloaded command Public ReadOnly Property NewVersion_Command As ICommand Get If m_cmdNewVersion Is Nothing Then m_cmdNewVersion = New Command(AddressOf NewVersion) End If Return m_cmdNewVersion End Get End Property Public Sub NewVersion(ByVal param As Object) ' Manage the MainWindow_Unloaded event. This method is invoked by the cmdMainWindow_Unloaded. Map.refMainWindowVM.SelProjectMode = MainWindowVM.ProjectModeOpt.NEWVERSION End Sub #End Region ' NewVersion #Region "Search" ' Returns a command that manage the MainWindow_Unloaded command Public ReadOnly Property SearchVersion_Command As ICommand Get If m_cmdSearch Is Nothing Then m_cmdSearch = New Command(AddressOf Search) End If Return m_cmdSearch End Get End Property Public Sub Search(ByVal param As Object) ' Cerco nella tabella Version Dim Query As String = "SELECT * FROM " & DB_VERSION & " INNER JOIN " & DB_PRODUCT & " ON " & DB_VERSION & "." & DB_PRODUCTID & " = " & DB_PRODUCT & "." & DB_PRODUCTID & " " Dim bFirstWhere As Boolean = True If Not String.IsNullOrWhiteSpace(VersionNumber) OrElse Not IsNothing(SelProduct) Then Query &= "WHERE " If Not String.IsNullOrWhiteSpace(VersionNumber) Then If Not VersionNumber.Equals("0") Then ' Lo 0 nel campo VersionNumber corrisponde ad ANY EvalWhere(bFirstWhere, Query) Query &= DB_VERSIONNUMBER & " LIKE '" & VersionNumber & "%' " End If End If If Not IsNothing(SelProduct) Then EvalWhere(bFirstWhere, Query) Query &= DB_PRODUCTNAME & " LIKE '" & SelProduct.ProductName & "%' " End If Query = Query.TrimEnd(","c, " "c) Dim suffixToRemove As String = " WHERE" If Not IsNothing(Query) And Not IsNothing(suffixToRemove) And Query.EndsWith(suffixToRemove) Then Query = Query.Substring(0, Query.Length - suffixToRemove.Length) End If End If m_SearchResult = New ObservableCollection(Of SearchVersion)(ManageDb.ExecuteSearchVersionQuery(Query)) If (m_SearchResult.Count = 0) Then MessageBox.Show("Nessun risultato per i filtri impostati") End If NotifyPropertyChanged("SearchResult") End Sub Private Sub EvalWhere(ByRef bFirst As Boolean, ByRef Query As String) If bFirst Then bFirst = False Else Query &= " AND " 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) ' Manage the MainWindow_Unloaded event. This method is invoked by the cmdMainWindow_Unloaded. Map.refMainWindowVM.SelProjectMode = MainWindowVM.ProjectModeOpt.MAINMENU End Sub #End Region ' Cancel #Region "Update" ' Returns a command that manage the MainWindow_Unloaded command Public ReadOnly Property UpdateVersion_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) If Not IsNothing(m_SelSearchResult) Then ' Manage the MainWindow_Unloaded event. This method is invoked by the cmdMainWindow_Unloaded. Map.refUpdateVersionPageVM.IdToUpdate = m_SelSearchResult.VersionID Map.refMainWindowVM.SelProjectMode = MainWindowVM.ProjectModeOpt.UPDATEVERSION Else MessageBox.Show("Non è stata selezionata nessuna versione") End If End Sub #End Region ' Update #Region "Delete" ' Returns a command that manage the MainWindow_Unloaded command Public ReadOnly Property DeleteVersion_Command As ICommand Get If m_cmdDelete Is Nothing Then m_cmdDelete = New Command(AddressOf Delete) End If Return m_cmdDelete End Get End Property Public Sub Delete(ByVal param As Object) If Not IsNothing(m_SelSearchResult) Then ' Manage the MainWindow_Unloaded event. This method is invoked by the cmdMainWindow_Unloaded. If MessageBox.Show("Do you really want to delete this Version?", "Delete", MessageBoxButton.YesNo, MessageBoxImage.Warning) = MessageBoxResult.No Then MessageBox.Show("Operation cancelled") Exit Sub End If ' Cerco nella tabella Version Dim Query As String = "DELETE FROM " & DB_VERSION & " WHERE " & DB_VERSIONID & " = " & m_SelSearchResult.VersionID Dim Result As Integer = ExecuteQuery(Query) If Result <> 0 Then MessageBox.Show("Operation executed") End If ' Map.refMainWindowVM.SelProjectMode = MainWindowVM.ProjectModeOpt.MAINMENU Search(param) Else MessageBox.Show("Non è stata selezionata nessuna versione") End If End Sub #End Region ' Delete #End Region ' COMMANDS End Class Public Class SearchVersion Inherits Version Private m_ProductName As String Public ReadOnly Property ProductName As String Get Return m_ProductName End Get End Property Sub New(VersionReader As MySqlDataReader) MyBase.New(VersionReader) m_ProductName = CType(VersionReader(DB_PRODUCTNAME), String) End Sub End Class