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 Next Map.refProjManagerVM.NotifyPropertyChanged(NameOf(Map.refProjManagerVM.MruFileNames)) If Not IsNothing(SelProject.ProdFileVM) Then Map.refProdManagerVM.m_MruFiles.Remove(SelProject.ProdFileVM.sProdPath) Map.refProdManagerVM.NotifyPropertyChanged(NameOf(Map.refProdManagerVM.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 Next If Not bOpened Then Map.refProjManagerVM.OpenProject(m_ProjectList(0).ProjFileList(0)) End If ElseIf m_ProjectType = ProjectType.PROD Then For Each ProjectName In Map.refProdManagerVM.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.refProdManagerVM.OpenProject(PjFileVM) bOpened = True Exit For End If End If Next End If End If CloseWindow(False) End Sub #End Region ' METHODS End Class