Imports System.Collections.ObjectModel Imports System.IO Imports EgtBEAMWALL.Core Imports EgtBEAMWALL.Core.ConstBeam Imports EgtUILib Imports EgtWPFLib5 Public Class NewOpenProjectFileDialogVM Inherits Core.NewOpenProjectFileDialogVM #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 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(31) Case DayTypes.LAST3MONTHS dtEnd = DateTime.Today + TimeSpan.FromDays(1) dtStart = dtEnd - TimeSpan.FromDays(31 * 3) Case DayTypes.LAST6MONTHS dtEnd = DateTime.Today + TimeSpan.FromDays(1) dtStart = dtEnd - TimeSpan.FromDays(31 * 6) Case DayTypes.PERIOD dtStart = dtStartDate + TimeSpan.FromDays(1) dtEnd = dtEndDate 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, True) Else DbProjList = DbControllers.m_ProjController.GetLastByExpDesc(dtStart, dtEnd, nRowQuantity, True) 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 = 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 Sub Archive() If IsNothing(SelProject) Then Return If IsNothing(SelProject.ProdFileVM) Then Return ' archivio il progetto DbControllers.m_ProdController.UpdateArchived(SelProject.ProdFileVM.nProdId, True) ' 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) 'If m_ProjectType = ProjectType.PROJ Then ' ' 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 ' MessageBox.Show(EgtMsg(61872), EgtMsg(30009), MessageBoxButton.OK, MessageBoxImage.Warning) ' Return ' End If ' ' verifico se proj selezionato ha prod ' If Not IsNothing(SelProject.ProdFileVM) AndAlso SelProject.ProdFileVM.nProdId > 0 Then ' MessageBox.Show(EgtMsg(61873), EgtMsg(30009), MessageBoxButton.OK, MessageBoxImage.Warning) ' Return ' End If ' ' rimuovo dai progetti correnti ' For Each Project In SelProject.ProjFileList ' Map.refProjManagerVM.m_MruFiles.Remove(Project.sProjPath) ' Next ' Map.refProjManagerVM.NotifyPropertyChanged(NameOf(Map.refProjManagerVM.MruFileNames)) ' ' cancello progetto ' ' CheckMe impostata come cancellazione FISICA dal DB... ' DbControllers.m_ProjController.DeleteProj(SelProject.nProjId, True) ' ' 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 ' RefreshProjectList() ' 'm_ProjectList.Clear() ' 'Dim DbProjectList As New List(Of ProjFileM) ' 'DbProjectList = DbControllers.m_ProjController.GetLastDesc(50, False) ' '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) ' ' apro, ripulisco e salvo il progetto in tutti i proj correlati ' Dim ProdFile As ProdFileVM = DirectCast(SelProject, ProdFileVM) ' For Each nProjId In ProdFile.nProjIdList ' 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 ' ' cancello tutti i gruppi che sono di un progetto diverso da questo ' Dim nGroupId As Integer = EgtGetFirstInGroup(GDB_ID.ROOT) ' While nGroupId <> GDB_ID.NULL ' Dim nGroupProjId As Integer = GDB_ID.NULL ' Dim nNextGroupId As Integer = EgtGetNext(nGroupId) ' If EgtGetInfo(nGroupId, BTL_PRT_PROJ, nGroupProjId) Then ' If nGroupProjId <> nProjId Then ' EgtErase(nGroupId) ' End If ' End If ' nGroupId = nNextGroupId ' End While ' 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, False) ' 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 ' METHODS End Class Public Class ProdItem Inherits Core.ProdItem Public Overrides Property sName As String Get Return If(Not IsNothing(m_ProdFileVM), m_ProdFileVM.sName, "") End Get Set(value As String) If Not IsNothing(m_ProdFileVM) Then DbControllers.m_ProdController.UpdateDescription(m_ProdFileVM.nProdId, value) m_ProdFileVM.sName = value End If End Set End Property Sub New(ProdFileVM As ProdFileVM, ProjFileVM As ProjFileVM) MyBase.New(ProdFileVM, ProjFileVM) End Sub Sub New(ProjFileVM As ProjFileVM) MyBase.New(ProjFileVM) End Sub Sub New(ProdFileVM As ProjectFileVM, ProjFileVMList As List(Of ProjectFileVM)) MyBase.New(ProdFileVM, ProjFileVMList) End Sub End Class