Imports System.IO Imports System.Windows.Forms Imports EgtBEAMWALL.Core Imports EgtBEAMWALL.Core.ConstBeam Imports EgtUILib Public Class NewOpenProjectFileDialogVM Inherits Core.NewOpenProjectFileDialogVM Public Overrides ReadOnly Property DayTypeList As List(Of String) Get Dim CurrDayTypeList As New List(Of String)({EgtMsg(62532), EgtMsg(62533), EgtMsg(62534), EgtMsg(62531)}) If Map.refMainWindowVM.MainWindowM.nUserLevel > 5 Then CurrDayTypeList.Add("Always") End If Return CurrDayTypeList End Get End Property #Region "METHODS" Public Overrides Function Init(ProjectType As ProjectType, Optional CurrProjectList As List(Of ProjectFileVM) = Nothing, Optional GoToProd As Boolean = False) As Boolean? m_ProjectType = ProjectType ProdItem.m_delUpdateNameInDb = AddressOf DbControllers.m_ProdController.UpdateDescription NotifyPropertyChanged(NameOf(FilterTypeList)) m_SelFilterType = m_FilterTypeList(0) ' carico lista progetti If IsNothing(CurrProjectList) OrElse CurrProjectList.Count = 0 Then SetFixedProjectList(False) RefreshProjectList(GoToProd) Else SetFixedProjectList(True) NotifyPropertyChanged(NameOf(ProjectList)) End If m_ProjectList_View = CollectionViewSource.GetDefaultView(m_ProjectList) m_ProjectList_View.Filter = AddressOf ProjectFilter End Function Public Overrides Sub RefreshProjectList(Optional GoToProd As Boolean = False) m_ProjectList.Clear() ' calcolo periodo e righe Dim dtStart As DateTime Dim dtEnd As DateTime Dim nRowQuantity As Integer = 20 Select Case SelRowQuantity Case RowQuantities.FIFTY nRowQuantity = 50 Case RowQuantities.HUNDRED nRowQuantity = 100 Case RowQuantities.HUNDREDANDFIFTY nRowQuantity = 150 End Select Select Case m_SelDayType Case DayTypes.LASTMONTH dtEnd = DateTime.Today + TimeSpan.FromDays(1) dtStart = dtEnd - TimeSpan.FromDays(30.5) Case DayTypes.LAST3MONTHS dtEnd = DateTime.Today + TimeSpan.FromDays(1) dtStart = dtEnd - TimeSpan.FromDays(30.5 * 3) Case DayTypes.LAST6MONTHS dtEnd = DateTime.Today + TimeSpan.FromDays(1) dtStart = dtEnd - TimeSpan.FromDays(30.5 * 6) Case DayTypes.PERIOD dtEnd = dtEndDate + TimeSpan.FromDays(1) dtStart = dtStartDate Case DayTypes.ALWAYS dtEnd = DateTime.Today + TimeSpan.FromDays(1) dtStart = New DateTime(2020, 1, 1) End Select ' leggo da db If m_ProjectType = ProjectType.PROJ Then Dim DbProjList As New List(Of ProjFileM) If m_SelBTLDateType = BTLDateTypes.CREATEDATE Then DbProjList = DbControllers.m_ProjController.GetLastDesc(dtStart, dtEnd, nRowQuantity * 3, True, bViewArchived) Else DbProjList = DbControllers.m_ProjController.GetLastByExpDesc(dtStart, dtEnd, nRowQuantity * 3, True, bViewArchived) End If For Each Project In DbProjList If IsNothing(Project.nProjId) OrElse Project.nProjId = 0 Then Continue For ' verifico se ha prod If Not IsNothing(Project.nProdId) And Project.nProdId > 0 Then ' verifico se prod e' gia' stato creato Dim SameProdItem As ProdItem = m_ProjectList.FirstOrDefault(Function(x) Not IsNothing(x.ProdFileVM) AndAlso Not IsNothing(x.ProdFileVM.nProdId) AndAlso x.ProdFileVM.nProdId = Project.nProdId) If Not IsNothing(SameProdItem) Then SameProdItem.ProjFileList.Add(New ProjFileVM(Project)) Else ' recupero Prod Dim NewDbProd As ProdFileM = DbControllers.m_ProdController.FindCoreByProdId(Project.nProdId) If Not IsNothing(NewDbProd) Then m_ProjectList.Add(New ProdItem(New ProdFileVM(NewDbProd), New ProjFileVM(Project))) End If End If Else m_ProjectList.Add(New ProdItem(New ProjFileVM(Project))) End If Next ElseIf m_ProjectType = ProjectType.PROD Then Dim DbProdList As New List(Of ProdFileM) DbProdList = DbControllers.m_ProdController.GetLastDesc(dtStart, dtEnd, nRowQuantity, True, bViewArchived) If GoToProd Then For Each Project In DbProdList ' recupero path per verificare esista If IsNothing(Project.nProdId) OrElse Project.nProdId = 0 Then Continue For Dim sPath As String = Map.refMainWindowVM.MainWindowM.sProdsDir & "\" & Project.nProdId.ToString("0000") & "\" & Project.nProdId.ToString("0000") & ".nge" If Project.sMachine = ProjectManagerVM.CurrProj.sMachine AndAlso Project.nType = ProjectManagerVM.CurrProj.nType Then If File.Exists(sPath) Then End If End If Next Else For Each Project In DbProdList ' recupero path per verificare esista If IsNothing(Project.nProdId) OrElse Project.nProdId = 0 Then Continue For Dim sPath As String = Map.refMainWindowVM.MainWindowM.sProdsDir & "\" & Project.nProdId.ToString("0000") & "\" & Project.nProdId.ToString("0000") & ".nge" If File.Exists(sPath) Then ' recupero i proj Dim ProjList As New List(Of ProjectFileVM) For Each ProjFileId In Project.nProjIdList Dim ProjFileM As ProjectFileM = DbControllers.m_ProjController.FindByProjIdConv(ProjFileId) ProjList.Add(New ProjFileVM(ProjFileM)) Next m_ProjectList.Add(New ProdItem(New ProdFileVM(Project), ProjList)) End If Next End If End If End Sub Public Overrides Sub Archive() If IsNothing(SelProject) Then Return If Not IsNothing(SelProject.ProdFileVM) Then ' archivio il progetto DbControllers.m_ProdController.UpdateArchived(SelProject.ProdFileVM.nProdId, Not SelProject.bIsArchived) NotifyPropertyChanged(NameOf(Archive_Msg)) End If ' aggiorno lista progetti RefreshProjectList() End Sub Public Overrides Sub Delete() If IsNothing(SelProject) Then Return ' recupero indice per riselezionare Dim ProjListIndex As Integer = m_ProjectList.IndexOf(SelProject) ' verifico se proj selezionato e' il corrente If Not IsNothing(ProjectManagerVM.CurrProj) AndAlso SelProject.ProjFileList.Any(Function(x) x.nProjId = ProjectManagerVM.CurrProj.nProjId) Then Dim m_MessageBoxResult As MessageBoxResult = MessageBox.Show(Application.Current.MainWindow, EgtMsg(61872), EgtMsg(30009), MessageBoxButton.OKCancel, MessageBoxImage.Warning) If m_ProjectType = ProjectType.PROJ AndAlso m_MessageBoxResult = MessageBoxResult.Cancel Then Return Else m_ChangeOpenedProjectOnCancel = True End If End If ' verifico se prod selezionato e' il corrente If Not IsNothing(ProjectManagerVM.CurrProd) AndAlso SelProject.ProdFileVM.nProdId = ProjectManagerVM.CurrProd.nProdId Then Dim m_MessageBoxResult As MessageBoxResult = MessageBox.Show(Application.Current.MainWindow, EgtMsg(61872), EgtMsg(30009), MessageBoxButton.OKCancel, MessageBoxImage.Warning) If m_ProjectType = ProjectType.PROD AndAlso m_MessageBoxResult = MessageBoxResult.Cancel Then Return Else m_ChangeOpenedProjectOnCancel = True End If End If ' rimuovo da lista ultimi progetti aperti For Each Project In SelProject.ProjFileList 'If Not IsNothing(Map.refProjManagerVM) Then ' Map.refProjManagerVM.m_MruFiles.Remove(Project.sProjPath) 'Else ' Map.refOnlyProdManagerVM.m_MruFiles.Remove(Project.sProjPath) 'End If Map.refOnlyProdManagerVM.m_MruFiles.Remove(Project.sProjPath) Next Map.refOnlyProdManagerVM.NotifyPropertyChanged(NameOf(Map.refOnlyProdManagerVM.MruFileNames)) If Not IsNothing(SelProject.ProdFileVM) Then Map.refOnlyProdManagerVM.m_MruFiles.Remove(SelProject.ProdFileVM.sProdPath) Map.refOnlyProdManagerVM.NotifyPropertyChanged(NameOf(Map.refOnlyProdManagerVM.MruFileNames)) End If ' cancello progetto If Not IsNothing(SelProject.ProdFileVM) Then DbControllers.m_ProdController.DeleteProd(SelProject.ProdFileVM.nProdId, True) End If For Each Project In SelProject.ProjFileList DbControllers.m_ProjController.DeleteProj(Project.nProjId, True) Next ' aggiorno lista progetti RefreshProjectList() ' 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 Public Overrides Sub Cancel() If m_ChangeOpenedProjectOnCancel Then Dim bOpened As Boolean = False 'If m_ProjectType = ProjectType.PROJ Then ' For Each ProjectName In Map.refProjManagerVM.m_MruFiles.FileNames ' If Not String.IsNullOrWhiteSpace(ProjectName) Then ' Dim sProjId As String = Path.GetFileNameWithoutExtension(ProjectName) ' If Not String.IsNullOrWhiteSpace(sProjId) Then ' Dim nProjId As Integer = 0 ' Integer.TryParse(sProjId, nProjId) ' Dim PjFileM = DbControllers.m_ProjController.FindByProjIdConv(nProjId) ' Dim PjFileVM = New ProjFileVM(PjFileM) ' Map.refProjManagerVM.OpenProject(PjFileVM) ' bOpened = True ' Exit For ' End If ' End If ' If Not bOpened Then ' Map.refProjManagerVM.OpenProject(m_ProjectList(0).ProjFileList(0)) ' End If If m_ProjectType = ProjectType.PROD Then For Each ProjectName In Map.refOnlyProdManagerVM.m_MruFiles.FileNames If Not String.IsNullOrWhiteSpace(ProjectName) Then Dim sProdId As String = Path.GetFileNameWithoutExtension(ProjectName) If Not String.IsNullOrWhiteSpace(sProdId) Then Dim nProdId As Integer = 0 Integer.TryParse(sProdId, nProdId) Dim PjFileM = DbControllers.m_ProdController.FindCoreByProdId(nProdId) Dim PjFileVM = New ProdFileVM(PjFileM) Map.refOnlyProdManagerVM.OpenProject(PjFileVM) bOpened = True Exit For End If End If Next End If End If CloseWindow(False) End Sub #End Region ' METHODS End Class