Imports System.Collections.ObjectModel Imports System.IO Imports EgtBEAMWALL.Core Imports EgtBEAMWALL.Core.ConstBeam Imports EgtUILib Imports EgtWPFLib5 Public Class OpenProjectFileDialogVM Inherits VMBase Friend Event m_CloseWindow(bDialogResult As Boolean) Private m_ProjectColumns As New ObservableCollection(Of EgtDataGridColumn) Public Property ProjectColumns As ObservableCollection(Of EgtDataGridColumn) Get Return m_ProjectColumns End Get Set(value As ObservableCollection(Of EgtDataGridColumn)) m_ProjectColumns = value End Set End Property Private m_ProjectType As ProjectType Private m_FileNameTxBl As TextBlock Private m_sFilter As String Public Property Filter As String Get Return m_sFilter End Get Set(value As String) m_sFilter = value End Set End Property Private m_sFileNameFilter As Predicate(Of String) Public Property FileNameFilter As Predicate(Of String) Get Return m_sFileNameFilter End Get Set(value As Predicate(Of String)) m_sFileNameFilter = value End Set End Property Private m_sExtensions As New List(Of String) Public ReadOnly Property Extensions As List(Of String) Get Return m_sExtensions End Get End Property Friend m_ProjectList_View As CollectionView = Nothing Private m_ProjectList As New ObservableCollection(Of ProjectFileVM) Public ReadOnly Property ProjectList As ObservableCollection(Of ProjectFileVM) Get Return m_ProjectList End Get 'Set(value As List(Of ProjFile)) ' m_ProjList = value ' NotifyPropertyChanged("ProjList") 'End Set End Property Private m_SelProject As ProjectFileVM Public Property SelProject As ProjectFileVM Get Return m_SelProject End Get Set(value As ProjectFileVM) m_SelProject = 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 End Set End Property ' lista campi per ricerca testuale e con datepicker Private m_SearchColumnList As New ObservableCollection(Of IdNameStruct) Public ReadOnly Property SearchColumnList As ObservableCollection(Of IdNameStruct) Get Return m_SearchColumnList End Get End Property Private m_SelSearchColumn As IdNameStruct = Nothing Public Property SelSearchColumn As IdNameStruct Get Return m_SelSearchColumn End Get Set(value As IdNameStruct) ' resetto il contenuto della barra di ricerca testuale m_SearchText = "" NotifyPropertyChanged(NameOf(SearchText)) ' resetto le selezioni sul calendario If Not IsNothing(SearchDate) Then SearchDate.Clear() ' setto il Tipo Filtro a NULL e refresho la lista dei progetti (in modo da averli visibili tutti) m_SelSearchColumn = m_SearchColumnList(0) m_ProjectList_View.Refresh() ' ora setto il valore scelto come Tipo Filtro m_SelSearchColumn = value Select Case m_SelSearchColumn.Id Case OpenProjFileColumn.ID, OpenProjFileColumn.BTLFILENAME, OpenProjFileColumn.LISTNAME SearchText_Visibility = Visibility.Visible SearchDate_Visibility = Visibility.Collapsed Case OpenProjFileColumn.EXPORTDATE, OpenProjFileColumn.CREATEDATE SearchText_Visibility = Visibility.Collapsed SearchDate_Visibility = Visibility.Visible Case Else SearchText_Visibility = Visibility.Collapsed SearchDate_Visibility = Visibility.Collapsed End Select End Set End Property Private m_SearchText As String = "" Public Property SearchText As String Get Return m_SearchText End Get Set(value As String) m_SearchText = value m_ProjectList_View.Refresh() End Set End Property Friend m_SearchDate As SelectedDatesCollection = Nothing Public ReadOnly Property SearchDate As SelectedDatesCollection Get Return m_SearchDate End Get End Property Private m_SearchText_Visibility As Visibility = Visibility.Collapsed Public Property SearchText_Visibility As Visibility Get Return m_SearchText_Visibility End Get Set(value As Visibility) m_SearchText_Visibility = value NotifyPropertyChanged(NameOf(SearchText_Visibility)) End Set End Property Private m_SearchDate_Visibility As Visibility = Visibility.Collapsed Public Property SearchDate_Visibility As Visibility Get Return m_SearchDate_Visibility End Get Set(value As Visibility) m_SearchDate_Visibility = value NotifyPropertyChanged(NameOf(SearchDate_Visibility)) End Set End Property Public Enum OpenProjFileColumn As Integer NULL = 0 ID = 1 BTLFILENAME = 2 LISTNAME = 3 EXPORTDATE = 4 CREATEDATE = 5 End Enum #Region "Messages" Public ReadOnly Property FilterType_Msg As String Get Return EgtMsg(61836) End Get End Property Public ReadOnly Property Search_Msg As String Get Return EgtMsg(61837) End Get End Property Public ReadOnly Property Id_Msg As String Get Return EgtMsg(61815) End Get End Property Public ReadOnly Property BTLFileName_Msg As String Get Return EgtMsg(61819) End Get End Property Public ReadOnly Property ListName_Msg As String Get Return EgtMsg(61820) End Get End Property Public ReadOnly Property ExportDate_Msg As String Get Return EgtMsg(61821) End Get End Property Public ReadOnly Property CreateDate_Msg As String Get Return EgtMsg(61822) End Get End Property Public ReadOnly Property Name_Msg As String Get Return EgtMsg(61808) End Get End Property Public ReadOnly Property Open_Msg As String Get Return EgtMsg(MSG_EGTSAVEFILEDIALOG + 6) End Get End Property Public ReadOnly Property Delete_Msg As String Get Return EgtMsg(61823) End Get End Property Public ReadOnly Property Cancel_Msg As String Get Return EgtMsg(MSG_EGTSAVEFILEDIALOG + 2) End Get End Property #End Region ' Definizione comandi Private m_cmdProjectDoubleClick As ICommand Private m_cmdDelete As ICommand Public Function Init(ProjectType As ProjectType, Optional CurrProjectList As List(Of ProjectFileVM) = Nothing) As Boolean? ' imposto riferimento in Map Map.SetRefOpenProjectFileDialogVM(Me) m_ProjectType = ProjectType ' carico colonne LoadColumns(ProjectType) NotifyPropertyChanged(NameOf(SearchColumnList)) m_SelSearchColumn = m_SearchColumnList(0) ' carico lista progetti If IsNothing(CurrProjectList) OrElse CurrProjectList.Count = 0 Then ' leggo da db If ProjectType = ProjectType.PROJ Then Dim DbProjectList As New List(Of ProjFileM) DbProjectList = DbControllers.m_ProjController.GetLastDesc(50) For Each Project In DbProjectList m_ProjectList.Add(New ProjFileVM(Project)) Next ElseIf ProjectType = ProjectType.PROD Then Dim DbProjectList As New List(Of ProdFileM) DbProjectList = DbControllers.m_ProdController.GetLastDesc(50) For Each Project In DbProjectList m_ProjectList.Add(New ProdFileVM(Project)) Next End If Else m_ProjectList = New ObservableCollection(Of ProjectFileVM)(CurrProjectList) NotifyPropertyChanged(NameOf(ProjectList)) End If m_ProjectList_View = CollectionViewSource.GetDefaultView(m_ProjectList) m_ProjectList_View.Filter = AddressOf ProjectFilter End Function Private Sub LoadColumns(ProjectType As ProjectType) If ProjectType = ProjectType.PROJ Then ' carico le colonne della datagrid GetPrivateProfileColumns(S_OPENPROJFILEDLG_PROJ, ProjectColumns) ' carico campi su cui eseguire il filtro di ricerca m_SearchColumnList = New ObservableCollection(Of IdNameStruct)({New IdNameStruct(OpenProjFileColumn.NULL, ""), New IdNameStruct(OpenProjFileColumn.ID, Id_Msg), New IdNameStruct(OpenProjFileColumn.BTLFILENAME, BTLFileName_Msg), New IdNameStruct(OpenProjFileColumn.LISTNAME, ListName_Msg), New IdNameStruct(OpenProjFileColumn.EXPORTDATE, ExportDate_Msg), New IdNameStruct(OpenProjFileColumn.CREATEDATE, CreateDate_Msg)}) ElseIf ProjectType = ProjectType.PROD Then ' carico le colonne della datagrid GetPrivateProfileColumns(S_OPENPROJFILEDLG_PROD, ProjectColumns) ' carico campi su cui eseguire il filtro di ricerca m_SearchColumnList = New ObservableCollection(Of IdNameStruct)({New IdNameStruct(OpenProjFileColumn.NULL, ""), New IdNameStruct(OpenProjFileColumn.ID, Id_Msg), New IdNameStruct(OpenProjFileColumn.BTLFILENAME, BTLFileName_Msg), New IdNameStruct(OpenProjFileColumn.CREATEDATE, CreateDate_Msg)}) End If End Sub Friend Function VerifySelected() As Boolean If IsNothing(SelProject) Then Return False Dim AllFilesInDir As IEnumerable(Of String) If m_ProjectType = Core.ConstBeam.ProjectType.PROJ Then ' verifico se esiste ProdId AllFilesInDir = IO.Directory.EnumerateFiles(SelProject.sProjDirPath) ElseIf m_ProjectType = Core.ConstBeam.ProjectType.PROD Then AllFilesInDir = IO.Directory.EnumerateFiles(SelProject.sProdDirPath) End If For Each File In AllFilesInDir If Path.GetExtension(File).ToLower() = ".nge" Then Return True End If Next Return False End Function 'Private Sub m_FileNameTxBl_MouseDown(sender As Object, e As Windows.Input.MouseButtonEventArgs) Handles FileNameList.MouseDoubleClick ' Dim src As DependencyObject = VisualTreeHelper.GetParent(DirectCast(e.OriginalSource, DependencyObject)) ' ' verifico che venga clickato un item, non lo spazio vuoto o la scrollbar ' If Not TypeOf src Is ListBoxItem Then ' src = Utility.FindAncestor(Of ListBoxItem)(src) ' End If ' If IsNothing(src) OrElse src.[GetType]() <> GetType(ListBoxItem) Then ' e.Handled = True ' Else ' If Not IsNothing(m_SelectedFile) Then ' m_FileName = SelectedFile ' DialogResult = True ' End If ' End If 'End Sub 'Private Sub OpenBtn_Click(sender As Object, e As RoutedEventArgs) Handles OpenBtn.Click ' If Not IsNothing(m_SelectedFile) Then ' m_FileName = SelectedFile ' DialogResult = True ' End If 'End Sub Private Function ProjectFilter(Proj As Object) As Boolean Dim bProjectOk As Boolean = True If m_ProjectType = ProjectType.PROJ Then Dim CurrProj As ProjFileVM = DirectCast(Proj, ProjFileVM) If m_SelSearchColumn.Id <> OpenProjFileColumn.NULL AndAlso ( (m_SelSearchColumn.Id = OpenProjFileColumn.EXPORTDATE AndAlso Not SearchDate.Contains(CurrProj.dtExportDate.Date)) OrElse (m_SelSearchColumn.Id = OpenProjFileColumn.CREATEDATE AndAlso Not SearchDate.Contains(CurrProj.dtCreateDate.Date))) Then bProjectOk = False If m_SelSearchColumn.Id <> OpenProjFileColumn.NULL AndAlso m_SearchText <> String.Empty AndAlso ( (m_SelSearchColumn.Id = OpenProjFileColumn.ID AndAlso CurrProj.sProjId.ToString.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse (m_SelSearchColumn.Id = OpenProjFileColumn.BTLFILENAME AndAlso CurrProj.sBTLFileName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse (m_SelSearchColumn.Id = OpenProjFileColumn.LISTNAME AndAlso CurrProj.sListName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) Then bProjectOk = False ElseIf m_ProjectType = ProjectType.PROD Then Dim CurrProj As ProdFileVM = DirectCast(Proj, ProdFileVM) If m_SelSearchColumn.Id <> OpenProjFileColumn.NULL AndAlso ( (m_SelSearchColumn.Id = OpenProjFileColumn.CREATEDATE AndAlso Not SearchDate.Contains(CurrProj.dtCreateDate.Date))) Then bProjectOk = False If m_SelSearchColumn.Id <> OpenProjFileColumn.NULL AndAlso m_SearchText <> String.Empty AndAlso ( (m_SelSearchColumn.Id = OpenProjFileColumn.ID AndAlso CurrProj.sProdId.ToString.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse (m_SelSearchColumn.Id = OpenProjFileColumn.BTLFILENAME AndAlso CurrProj.sBTLFileName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) Then bProjectOk = False End If Return bProjectOk End Function #Region "COMMANDS" #Region "ProjectDoubleClick" ''' ''' Returns a command that do New. ''' Public ReadOnly Property ProjectDoubleClick_Command As ICommand Get If m_cmdProjectDoubleClick Is Nothing Then m_cmdProjectDoubleClick = New Command(AddressOf ProjDoubleClick) End If Return m_cmdProjectDoubleClick End Get End Property ''' ''' Execute the New. This method is invoked by the NewCommand. ''' Friend Sub ProjDoubleClick() If VerifySelected() Then RaiseEvent m_CloseWindow(True) End If End Sub #End Region ' ProjectDoubleClick #Region "Delete" ''' ''' Returns a command that do New. ''' Public ReadOnly Property Delete_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 ''' ''' Execute the New. This method is invoked by the NewCommand. ''' Friend Sub Delete() If IsNothing(SelProject) Then Return ' recupero indice per riselezionare Dim ProjListIndex As Integer = m_ProjectList.IndexOf(SelProject) If m_ProjectType = ProjectType.PROJ Then ' verifico se proj selezionato e' il corrente If Not IsNothing(Map.refProjManagerVM.CurrProj) AndAlso SelProject.nProjId = Map.refProjManagerVM.CurrProj.nProjId Then MessageBox.Show(EgtMsg(61872), EgtMsg(30009), MessageBoxButton.OK, MessageBoxImage.Warning) Return End If ' verifico se proj selezionato ha prod If SelProject.nProdId > 0 Then MessageBox.Show(EgtMsg(61873), EgtMsg(30009), MessageBoxButton.OK, MessageBoxImage.Warning) Return End If Map.refProjManagerVM.m_MruFiles.Remove(SelProject.sProjPath) Map.refProjManagerVM.NotifyPropertyChanged(NameOf(Map.refProjManagerVM.MruFileNames)) ' cancello progetto DbControllers.m_ProjController.DeleteProj(SelProject.nProjId) ' cancello cartella del Proj Try Directory.Delete(SelProject.sProjDirPath, True) Catch ex As Exception EgtOutLog("Error in deleting directory " & SelProject.sProjDirPath) End Try ' aggiorno lista progetti m_ProjectList.Clear() Dim DbProjectList As New List(Of ProjFileM) DbProjectList = DbControllers.m_ProjController.GetLastDesc(50) For Each Project In DbProjectList m_ProjectList.Add(New ProjFileVM(Project)) Next ElseIf m_ProjectType = ProjectType.PROD Then ' verifico se prod selezionato e' il corrente If Not IsNothing(Map.refProdManagerVM.CurrProd) AndAlso SelProject.nProdId = Map.refProdManagerVM.CurrProd.nProdId Then MessageBox.Show(EgtMsg(61872), EgtMsg(30009), MessageBoxButton.OK, MessageBoxImage.Warning) Return End If ' verifico se ci sono grezzi mandati al supervisore If DbControllers.m_ProdController.IsAnyInSupervisor(SelProject.nProdId) Then MessageBox.Show(EgtMsg(61874), EgtMsg(30009), MessageBoxButton.OK, MessageBoxImage.Warning) Return End If Map.refProdManagerVM.m_MruFiles.Remove(SelProject.sProdPath) Map.refProdManagerVM.NotifyPropertyChanged(NameOf(Map.refProdManagerVM.MruFileNames)) ' cancello progetto DbControllers.m_ProdController.DeleteProd(SelProject.nProdId) ' riporto prod in proj Dim nCurrCtx As Integer = EgtGetCurrentContext() Dim nTempCtx As Integer = EgtInitContext() If nTempCtx <> 0 Then ' inizializzo gestore lavorazioni EgtInitMachMgr(Map.refMainWindowVM.MainWindowM.sMachinesRoot, Map.refMainWindowVM.MainWindowM.sToolMakersDir) EgtOpenFile(SelProject.sProdPath) ' cancello tutti i gruppi di lavorazione Dim nMachGroupId As Integer = EgtGetFirstMachGroup() While nMachGroupId <> GDB_ID.NULL EgtSetCurrMachGroup(nMachGroupId) Dim nRawPartId As Integer = EgtGetFirstRawPart() While nRawPartId <> GDB_ID.NULL Dim nPartId As Integer = EgtGetFirstPartInRawPart(nRawPartId) While nPartId <> GDB_ID.NULL EgtRemovePartFromRawPart(nPartId) ' elimino pezzo copia EgtErase(nPartId) nPartId = EgtGetFirstPartInRawPart(nRawPartId) End While nRawPartId = EgtGetNextRawPart(nRawPartId) End While EgtRemoveMachGroup(nMachGroupId) nMachGroupId = EgtGetFirstMachGroup() End While ' lo salvo in tutti i proj correlati Dim ProdFile As ProdFileVM = DirectCast(SelProject, ProdFileVM) For Each nProjId In ProdFile.nProjIdList EgtSaveFile(ProdFile.GetProjPath(nProjId), NGE.CMPTEXT) Next ' torno sul contesto corrente EgtSetCurrentContext(nCurrCtx) EgtDeleteContext(nTempCtx) End If ' se proj corrente era il prod cancellato, aggiorno proj corrente If Not IsNothing(Map.refProjManagerVM.CurrProj) AndAlso Map.refProjManagerVM.CurrProj.nProdId = SelProject.nProdId Then Map.refProjManagerVM.UpdateCurrProj() End If ' cancello cartella del Prod Try Directory.Delete(SelProject.sProdDirPath, True) Catch ex As Exception EgtOutLog("Error in deleting directory " & SelProject.sProdDirPath) End Try ' aggiorno lista progetti m_ProjectList.Clear() Dim DbProjectList As New List(Of ProdFileM) DbProjectList = DbControllers.m_ProdController.GetLastDesc(50) For Each Project In DbProjectList m_ProjectList.Add(New ProdFileVM(Project)) Next End If ' ripristino selezionato If ProjListIndex >= 0 AndAlso ProjListIndex <= m_ProjectList.Count - 1 Then SelProject = m_ProjectList(ProjListIndex) NotifyPropertyChanged(NameOf(SelProject)) End If ' reset dei controller per tornare in sync DbControllers.m_ProjController.ResetController() DbControllers.m_ProdController.ResetController() End Sub #End Region ' Delete #End Region ' Commands End Class