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
#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 Currprod As ProdModel = DbControllers.m_ProdController.FindByProdId(nProdId)
If IsNothing(Currprod) Then Return False
Map.refProdManagerVM.CurrProd = New ProdFileVM(ProdFileM.CreateProdFileM(Currprod.ProdId, New List(Of Integer), Date.Now(), ""))
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
ProdFileVM.VerifyProjectModification(CurrProd)
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)
End If
Else
MessageBox.Show("File non trovato!!")
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)
For Each MachGroup In Map.refProjectVM.MachGroupPanelVM.m_MyMachGroupPanelM.MachGroupMList
MyMachGroupList.Add(MachGroup)
Next
'For Each MachGroup In Map.refProjectVM.MachGroupPanelVM.MachGroupVMList
' If Map.refMachinePanelVM.SelectedMachine.nType = MachineType.BEAM Then
' MyMachGroupList.Add(BeamMachGroupM.CreateBeamMachGroup(MachGroup.Id, MachGroup.Name, MachGroup.Machine))
' ElseIf Map.refMachinePanelVM.SelectedMachine.nType = MachineType.WALL Then
' MyMachGroupList.Add(New WallMachGroup(MachGroup.Id, MachGroup.Name, MachGroup.Machine))
' End If
'Next
'If Map.refMachinePanelVM.SelectedMachine.nType = MachineType.BEAM Then
' MyMachGroupList = Map.refProjectVM.MachGroupPanelVM.MachGroupList.Select(Function(x) New Core.BeamMachGroup(x.Id, x.Name, x.Machine)).ToList()
'ElseIf Map.refMachinePanelVM.SelectedMachine.nType = MachineType.wall Then
' MyMachGroupList = Map.refProjectVM.MachGroupPanelVM.MachGroupList.Select(Function(x) New Core.WallMachGroup(x.Id, x.Name, x.Machine))
'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 associato da Db
Dim DbProjList As List(Of DataLayer.DatabaseModels.ProjModel) = DbControllers.m_ProjController.GetByProdAsc(m_CurrProd.nProdId)
Dim nProjId As Integer = 0
Dim sBTLFileName As String = ""
If Not IsNothing(DbProjList) AndAlso DbProjList.Count > 0 AndAlso DbProjList(0).ProjId > 0 Then
nProjId = DbProjList(0).ProjId
End If
' verifico se salvare progetto corrente
ProdFileVM.VerifyProjectModification(Map.refProdManagerVM.CurrProd)
'' cerco proj associato
'Dim ProjList As New List(Of ProjectFile)
'Dim AllDirsInDir As IEnumerable(Of String) = IO.Directory.EnumerateDirectories(Map.refMainWindowVM.MainWindowM.sProjsDir)
'For Each Directory In AllDirsInDir
' Dim AllFilesInDir As IEnumerable(Of String) = IO.Directory.EnumerateFiles(Directory)
' For Each File In AllFilesInDir
' If Path.GetExtension(File).ToLower() = ".nge" Then
' If File.Contains(FILENAMESEPARATOR) Then
' Dim DataFromFileName As String() = File.Split(FILENAMESEPARATOR)
' If DataFromFileName.Count = 3 Then
' If Not String.IsNullOrEmpty(DataFromFileName(1)) Then
' Dim nTempProdId As Integer = 0
' Integer.TryParse(DataFromFileName(1), nTempProdId)
' If nTempProdId = CurrProd.nProdId Then
' ProjList.Add(New ProjectFile(ProjectType.PROJ, Path.GetFileNameWithoutExtension(File)))
' End If
' End If
' End If
' End If
' End If
' Next
'Next
'If ProjList.Count = 0 Then Return
'' se c'è più di un proj
'Dim Proj As ProjectFile
'If ProjList.Count > 1 Then
' ' apro dialogo di scelta file
' Dim OpenProjectFileDialogVM As New OpenProjectFileDialogVM
' Dim OpenFile As New OpenProjectFileDialogV(Application.Current.MainWindow, OpenProjectFileDialogVM)
' Dim DialogResult As Boolean? = OpenFile.EgtShowDialog(ProjectType.PROJ, ProjList)
' If IsNothing(DialogResult) OrElse Not DialogResult Then Return
' Proj = OpenProjectFileDialogVM.SelProject
'Else
' Proj = ProjList(0)
'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