Files
egtbeamwall/EgtBEAMWALL.ViewerOptimizer/NewOpenProjectFileDialog/NewOpenProjectFileDialogVM.vb
T

325 lines
17 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.IO
Imports EgtBEAMWALL.Core
Imports EgtBEAMWALL.Core.ConstBeam
Imports EgtUILib
Imports EgtWPFLib5
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
UpdatePageList()
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.TEN
nRowQuantity = 10
Case RowQuantities.TWENTY
nRowQuantity = 20
Case RowQuantities.THIRTY
nRowQuantity = 30
End Select
Select Case m_SelDayType
Case DayTypes.LASTMONTH
dtEnd = DateTime.Today.AddDays(1)
dtStart = dtEnd.AddMonths(-1)
Case DayTypes.LAST3MONTHS
dtEnd = DateTime.Today.AddDays(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, 100000, True, bViewArchived)
' '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
m_ProjectList = New ObservableCollection(Of Core.ProdItem)(DbControllers.m_ProdController.GetLastDescFull(dtStart, dtEnd, nRowQuantity * 3, True, bViewArchived))
'Dim sMachine As String = ""
'Dim sBtlFileName As String = ""
'Dim sListName As String = ""
'Dim bIsCreationDate As Boolean = True
'If SelFilterType.Id = FilterTypes.ID Then
' ' sMachine = SearchText
'ElseIf SelFilterType.Id = FilterTypes.BTLFILENAME Then
' sBtlFileName = SearchText
'ElseIf SelFilterType.Id = FilterTypes.LISTNAME Then
' sListName = SearchText
'ElseIf SelFilterType.Id = FilterTypes.MACHINE Then
' sMachine = SearchText
'End If
'm_ProjectList = New ObservableCollection(Of Core.ProdItem)(DbControllers.m_ProdController.GetLastDescFull(dtStart, dtEnd, bIsCreationDate, nRowQuantity * 3, True, sMachine, sBtlFileName, sListName, bViewArchived))
NotifyPropertyChanged(NameOf(ProjectList))
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 = Map.refProjManagerVM.CurrProj.sMachine AndAlso
Project.nType = Map.refProjManagerVM.CurrProj.nType Then
If File.Exists(sPath) Then
' m_ProjectList.Add(New ProdItem(New ProdFileVM(Project)))
'Else
' DbControllers.m_ProdController.DeleteProd(Project.nProdId)
' EgtOutLog("Found project on Db without the folder and erased it! Prod number " & Project.nProdId.ToString("0000"))
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))
'Else
' DbControllers.m_ProdController.DeleteProd(Project.nProdId)
' EgtOutLog("Found project on Db without the folder and erased it! Prod number " & Project.nProdId.ToString("0000"))
End If
Next
End If
End If
End Sub
Public Overrides Function UpdatePageList() As Boolean
Dim FilteredList As IEnumerable(Of Core.ProdItem) = m_ProjectList.Where(Function(x)
If m_SelFilterType.Id <> FilterTypes.NULL AndAlso m_SearchText <> String.Empty AndAlso
((m_SelFilterType.Id = FilterTypes.BTLFILENAME AndAlso x.ProjFileList.Any(Function(y) DirectCast(y, ProjFileVM).sBTLFileName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) OrElse
(m_SelFilterType.Id = FilterTypes.LISTNAME AndAlso x.ProjFileList.Any(Function(y) DirectCast(y, ProjFileVM).sListName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) OrElse
(m_SelFilterType.Id = FilterTypes.MACHINE AndAlso x.sMachine.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) Then Return False
Return True
End Function)
Dim nPageRowQty As Integer = 0
Select Case m_SelRowQuantity
Case RowQuantities.TEN
nPageRowQty = 10
Case RowQuantities.TWENTY
nPageRowQty = 20
Case RowQuantities.THIRTY
nPageRowQty = 30
End Select
Dim nStart = (nPageIndex - 1) * nPageRowQty
Dim nEnd = Math.Min((nPageIndex * nPageRowQty), FilteredList.Count())
If nStart > FilteredList.Count() Then
Return False
End If
' FilteredList = FilteredList.OrderBy(Of ProdItem)()
m_PageList = New ObservableCollection(Of ProdItem)(FilteredList.Skip(nStart).Take(nPageRowQty).Select(Function(x) x))
'm_PageList.Clear()
'For Index = nStart To nEnd
' m_PageList.Add(FilteredList(Index))
'Next
NotifyPropertyChanged(NameOf(PageList))
Return True
'Dim bProjectOk As Boolean = True
''If TypeOf Proj Is ProjFileVM Then
'Dim CurrProj As ProdItem = DirectCast(PROJ, ProdItem)
'If m_SelFilterType.Id <> FilterTypes.NULL AndAlso (
' (m_SelFilterType.Id = BTLDateTypes.EXPORTDATE AndAlso Not CurrProj.ProjFileList.Any(Function(x) SearchDate.Contains(DirectCast(x, ProjFileVM).dtExportDate.Date))) OrElse
' (m_SelFilterType.Id = BTLDateTypes.CREATEDATE AndAlso Not SearchDate.Contains(CurrProj.dtCreateDate.Date))) Then bProjectOk = False
'If m_SelFilterType.Id <> FilterTypes.NULL AndAlso m_SearchText <> String.Empty AndAlso (
' (m_SelFilterType.Id = FilterTypes.BTLFILENAME AndAlso CurrProj.ProjFileList.Any(Function(x) DirectCast(x, ProjFileVM).sBTLFileName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) OrElse
' (m_SelFilterType.Id = FilterTypes.LISTNAME AndAlso CurrProj.ProjFileList.Any(Function(x) DirectCast(x, ProjFileVM).sListName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) OrElse
' (m_SelFilterType.Id = FilterTypes.MACHINE AndAlso CurrProj.sMachine.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) Then bProjectOk = False
'ElseIf TypeOf Proj Is ProdFileVM Then
' Dim CurrProj As ProdFileVM = DirectCast(Proj, ProdFileVM)
' If m_SelFilterType.Id <> FilterTypes.NULL AndAlso (
' (m_SelFilterType.Id = BTLDateTypes.CREATEDATE AndAlso Not SearchDate.Contains(CurrProj.dtCreateDate.Date))) Then bProjectOk = False
' If m_SelFilterType.Id <> FilterTypes.NULL AndAlso m_SearchText <> String.Empty AndAlso (
' (m_SelFilterType.Id = FilterTypes.ID AndAlso CurrProj.sProdId.ToString.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse
' (m_SelFilterType.Id = FilterTypes.BTLFILENAME AndAlso CurrProj.sBTLFileName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse
' (m_SelFilterType.Id = FilterTypes.MACHINE AndAlso CurrProj.sMachine.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) Then bProjectOk = False
'End If
' Return bProjectOk
End Function
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(Map.refProjManagerVM.CurrProj) AndAlso SelProject.ProjFileList.Any(Function(x) x.nProjId = Map.refProjManagerVM.CurrProj.nProjId) Then
If m_ProjectType = ProjectType.PROJ AndAlso MessageBox.Show(EgtMsg(61872), EgtMsg(30009), MessageBoxButton.OKCancel, MessageBoxImage.Warning) = MessageBoxResult.Cancel Then
Return
Else
m_ChangeOpenedProjectOnCancel = True
End If
End If
' verifico se prod selezionato e' il corrente
If Not IsNothing(Map.refProdManagerVM.CurrProd) AndAlso SelProject.ProdFileVM.nProdId = Map.refProdManagerVM.CurrProd.nProdId Then
If m_ProjectType = ProjectType.PROD AndAlso MessageBox.Show(EgtMsg(61872), EgtMsg(30009), MessageBoxButton.OKCancel, MessageBoxImage.Warning) = MessageBoxResult.Cancel Then
Return
Else
m_ChangeOpenedProjectOnCancel = True
End If
End If
' rimuovo da lista ultimi progetti aperti
For Each Project In SelProject.ProjFileList
Map.refProjManagerVM.m_MruFiles.Remove(Project.sProjPath)
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)
'' cancello cartella del Prod
'Try
' Directory.Delete(SelProject.ProdFileVM.sProdDirPath, True)
'Catch ex As Exception
' EgtOutLog("Error in deleting directory " & SelProject.ProdFileVM.sProdDirPath)
'End Try
End If
For Each Project In SelProject.ProjFileList
DbControllers.m_ProjController.DeleteProj(Project.nProjId, True)
'' cancello cartella del Proj
'Try
' Directory.Delete(Project.sProjDirPath, True)
'Catch ex As Exception
' EgtOutLog("Error in deleting directory " & Project.sProjDirPath)
'End Try
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