Imports System.Collections.ObjectModel Imports System.IO Imports EgtBEAMWALL.Core Imports EgtBEAMWALL.Core.ConstBeam Imports EgtBEAMWALL.DataLayer.DatabaseModels Imports EgtUILib Imports EgtWPFLib5 Public Class ProdManagerVM Inherits VMBase #Region "FIELDS & PROPERTIES" Private m_CurrProd As ProdFileVM Friend Property CurrProd As ProdFileVM Get Return m_CurrProd End Get Set(value As ProdFileVM) m_CurrProd = value End Set End Property ' indice ultimo progetto Private m_nLastProdId As Integer Friend ReadOnly Property nLastProdId As Integer Get Return m_nLastProdId End Get End Property ' Definizione comandi Private m_cmdOpen As ICommand Private m_cmdSave As ICommand Private m_cmdGoToProj As ICommand #Region "ToolTip" 'Proprietà ToolTip Public ReadOnly Property OpenToolTip As String Get Return EgtMsg(MSG_TOPCOMMANDBAR + 2) End Get End Property Public ReadOnly Property SaveToolTip As String Get Return EgtMsg(MSG_TOPCOMMANDBAR + 3) End Get End Property Public ReadOnly Property AddProj_ToolTip As String Get Return EgtMsg(61921) End Get End Property Public ReadOnly Property GoToProj_ToolTip As String Get Return EgtMsg(61922) End Get End Property #End Region ' ToolTip #End Region ' Fields & Properties #Region "CONSTRUCTOR" Sub New() ' Creo riferimento a questa classe in Map Map.SetRefProdManagerVM(Me) ' Leggo ultimo indice di progetto m_nLastProdId = GetMainPrivateProfileInt(S_GENERAL, K_PRODSINDEX, 1) End Sub #End Region ' CONSTRUCTOR #Region "METHODS" Friend Function InitNewProject(ByRef nProjId As Integer, ByRef nProdId As Integer, ByRef sProjectDir As String) As Boolean ' richiedo indice nuovo progetto nProdId = DbControllers.m_ProdController.GetNextIndex(nProjId) If nProdId <= 0 Then Return False sProjectDir = refMainWindowVM.MainWindowM.sProdsDir & "\" & nProdId.ToString("0000") ' creo cartella nuovo progetto If Not Directory.Exists(sProjectDir) Then Directory.CreateDirectory(sProjectDir) Else Dim di As System.IO.DirectoryInfo = New DirectoryInfo(sProjectDir) For Each file As FileInfo In di.EnumerateFiles() file.Delete() Next For Each dir As DirectoryInfo In di.EnumerateDirectories() dir.Delete(True) Next End If Return True End Function Public Function SetCurrProd(nProdId As Integer) As Boolean Dim CurrProdM As ProdFileM = DbControllers.m_ProdController.FindCoreByProdId(nProdId) If IsNothing(CurrProdM) Then Return False Map.refProdManagerVM.CurrProd = New ProdFileVM(CurrProdM) Return True End Function #End Region ' METHODS #Region "COMMANDS" #Region "OpenCommand" ''' ''' Returns a command that do Open. ''' Public ReadOnly Property OpenCommand As ICommand Get If m_cmdOpen Is Nothing Then m_cmdOpen = New Command(AddressOf Open) End If Return m_cmdOpen End Get End Property ''' ''' Execute the Open. This method is invoked by the OpenCommand. ''' Friend Sub Open() OpenProject() End Sub Friend Sub OpenProject() ' verifico se progetto modificato, e chiedo se salvare If Not ProdFileVM.VerifyProjectModification(CurrProd) Then Return Dim sFilePath As String = "" ' se la string è vuota Dim TempCurrProd As ProdFileVM Dim OpenProjectFileDialogVM As OpenProjectFileDialogVM = Nothing ' apro dialogo di scelta file OpenProjectFileDialogVM = New OpenProjectFileDialogVM Dim OpenFile As New OpenProjectFileDialogV(Application.Current.MainWindow, OpenProjectFileDialogVM) Dim DialogResult As Boolean? = OpenFile.EgtShowDialog(ProjectType.PROD) If IsNothing(DialogResult) OrElse Not DialogResult Then Return sFilePath = OpenProjectFileDialogVM.SelProject.sProdPath TempCurrProd = OpenProjectFileDialogVM.SelProject If File.Exists(sFilePath) Then If Map.refSceneHostVM.MainController.OpenProject(sFilePath, False) Then m_CurrProd = TempCurrProd DbControllers.m_ProdController.LockByProdId(m_CurrProd.nProdId, True) ' seleziono primo gruppo Map.refProjectVM.MachGroupPanelVM.SelFirstMachGroup() End If Else MessageBox.Show(EgtMsg(61871)) Map.refSceneHostVM.MainController.NewProject() Map.refMainWindowVM.SetTitle("New - EgtBEAMWALL") End If ' aggiorno titolo Map.refMainWindowVM.UpdateTitle() End Sub #End Region ' OpenCommand #Region "SaveCommand" ''' ''' Returns a command that do Save. ''' Public ReadOnly Property SaveCommand As ICommand Get If m_cmdSave Is Nothing Then m_cmdSave = New Command(AddressOf Save) End If Return m_cmdSave End Get End Property ''' ''' Execute the Save. This method is invoked by the SaveCommand. ''' Public Sub Save() If IsNothing(m_CurrProd) Then Return Map.refSceneHostVM.SaveProject() Map.refMainWindowVM.UpdateTitle() Dim MyMachGroupList As New List(Of MyMachGroupM) If Not IsNothing(Map.refProjectVM.MachGroupPanelVM) Then For Each MachGroup In Map.refProjectVM.MachGroupPanelVM.m_MyMachGroupPanelM.MachGroupMList MyMachGroupList.Add(MachGroup) Next End If ' aggiorno pezzi su Db DbControllers.m_ProdController.UpdateMachGroup(CurrProd.nProdId, MyMachGroupList) ' se nuovo progetto If m_CurrProd.bIsNew Then ' resetto stato new ' DbControllers.m_ProdController.Reset(CurrProd.nProjId) m_CurrProd.bIsNew = False End If End Sub #End Region ' SaveCommand #Region "GoToProj" ''' ''' Returns a command that do Open. ''' Public ReadOnly Property GoToProj_Command As ICommand Get If m_cmdGoToProj Is Nothing Then m_cmdGoToProj = New Command(AddressOf GoToProj) End If Return m_cmdGoToProj End Get End Property ''' ''' Execute the Open. This method is invoked by the OpenCommand. ''' Friend Sub GoToProj() ' recupero Proj associati da Db Dim ProjFileMList As List(Of ProjFileM) = DbControllers.m_ProjController.GetByProdAsc(m_CurrProd.nProdId) Dim nProjId As Integer = 0 ' verifico se salvare progetto corrente If Not ProdFileVM.VerifyProjectModification(Map.refProdManagerVM.CurrProd) Then Return ' se piu' di uno If IsNothing(ProjFileMList) Then Return ElseIf ProjFileMList.Count = 1 AndAlso ProjFileMList(0).nProjId > 0 Then nProjId = ProjFileMList(0).nProjId ElseIf ProjFileMList.Count > 1 Then Dim ProjFileVMList As New List(Of ProjectFileVM) For Each Project In ProjFileMList ProjFileVMList.Add(New ProjFileVM(Project)) Next ' apro finestra di scelta Dim OpenProjectFileDialogVM As New OpenProjectFileDialogVM Dim ChooseProjFileDialog As New OpenProjectFileDialogV(Application.Current.MainWindow, OpenProjectFileDialogVM) Dim DialogResult As Boolean? = ChooseProjFileDialog.EgtShowDialog(ProjectType.PROJ, ProjFileVMList) If IsNothing(DialogResult) OrElse Not DialogResult Then Return ' se proj selezionato If Not IsNothing(OpenProjectFileDialogVM.SelProject.nProdId) AndAlso OpenProjectFileDialogVM.SelProject.nProdId > 0 Then nProjId = OpenProjectFileDialogVM.SelProject.nProjId End If Else Return End If ' apro progetto proj Map.refProjManagerVM.SetCurrProj(nProjId) ' vado in pagina proj Map.refMainMenuVM.SetSelPage(Pages.VIEW, False) End Sub #End Region ' GoToProj #End Region ' Commands End Class