Files
egtbeamwall/EgtBEAMWALL.ViewerOptimizer/ProdManager/ProdManagerVM.vb
T
2021-04-03 13:01:24 +02:00

268 lines
9.7 KiB
VB.net

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"
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"
''' <summary>
''' Returns a command that do Open.
''' </summary>
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
''' <summary>
''' Execute the Open. This method is invoked by the OpenCommand.
''' </summary>
Friend Sub Open()
OpenProject(String.Empty)
End Sub
Friend Sub OpenProject(sFilePath As String)
' verifico se progetto modificato, e chiedo se salvare
ProdFileVM.VerifyProjectModification(CurrProd, ProjectType.PROD)
' se la string è vuota
Dim TempCurrProd As ProjFileVM
Dim OpenProjectFileDialogVM As OpenProjectFileDialogVM = Nothing
If String.IsNullOrEmpty(sFilePath) Then
' 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
Else
Dim nProjId As Integer = 0
Dim nProdId As Integer = 0
Dim sBTLFileName As String = ""
If ProjFileVM.VerifyProjectFile(ProjectType.PROD, Path.GetFileNameWithoutExtension(sFilePath), nProjId, nProdId, sBTLFileName) Then
TempCurrProd = New ProjectFileVM(ProjectType.PROD, nProjId, nProdId, sBTLFileName)
Else
MessageBox.Show("Error in file name!!")
Return
End If
End If
If File.Exists(sFilePath) Then
If Map.refSceneHostVM.MainController.OpenProject(sFilePath, False) Then
If Map.refMachGroupPanelVM.InitMachGroupList() Then
m_CurrProd = TempCurrProd
Map.refMainWindowVM.SetTitle(CurrProd.nProdId.ToString("0000") & " - EgtBEAMWALL")
Else
MessageBox.Show("Impossibile aprire gruppi di lavorazione del file!!")
Map.refSceneHostVM.MainController.NewProject()
Map.refMainWindowVM.SetTitle("New - EgtBEAMWALL")
End If
Else
MessageBox.Show("Impossibile aprire il file!!")
Map.refSceneHostVM.MainController.NewProject()
Map.refMainWindowVM.SetTitle("New - EgtBEAMWALL")
End If
Else
MessageBox.Show("File non trovato!!")
Map.refSceneHostVM.MainController.NewProject()
Map.refMainWindowVM.SetTitle("New - EgtBEAMWALL")
End If
End Sub
#End Region ' OpenCommand
#Region "SaveCommand"
''' <summary>
''' Returns a command that do Save.
''' </summary>
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
''' <summary>
''' Execute the Save. This method is invoked by the SaveCommand.
''' </summary>
Public Sub Save()
Map.refSceneHostVM.SaveProject()
Map.refMainWindowVM.SetTitle(CurrProd.nProdId.ToString("0000") & " - EgtBEAMWALL")
Dim MyMachGroupList As New List(Of Core.MyMachGroup)
For Each MachGroup In Map.refProjectVM.MachGroupPanelVM.MachGroupList
If Map.refMachinePanelVM.SelectedMachine.nType = MachineType.BEAM Then
MyMachGroupList.Add(New Core.BeamMachGroup(MachGroup.Id, MachGroup.Name, MachGroup.Machine))
ElseIf Map.refMachinePanelVM.SelectedMachine.nType = MachineType.WALL Then
MyMachGroupList.Add(New Core.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
DbControllers.m_ProdController.UpdateMachGroup(CurrProd.nProdId, MyMachGroupList.ToList())
' se nuovo progetto, incremento l'indice di progetto
If m_CurrProd.NewProd Then
m_nLastProdId = m_nLastProdId + 1
WriteMainPrivateProfileString(S_GENERAL, K_PRODSINDEX, (m_nLastProdId).ToString())
m_CurrProd.NewProd = False
End If
End Sub
#End Region ' SaveCommand
#Region "GoToProj"
''' <summary>
''' Returns a command that do Open.
''' </summary>
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
''' <summary>
''' Execute the Open. This method is invoked by the OpenCommand.
''' </summary>
Friend Sub GoToProj()
' verifico se salvare progetto corrente
ProjFileVM.VerifyProjectModification(Map.refProdManagerVM.CurrProd, ProjectType.PROD)
' 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
sBTLFileName = DbProjList(0).BTLFileName
End If
'' 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.CurrProj = New ProjectFileVM(ProjectType.PROJ, nProjId, m_CurrProd.nProdId, sBTLFileName)
' vado in pagina proj
Map.refMainMenuVM.SetSelPage(Pages.VIEW, False)
End Sub
#End Region ' GoToProj
#End Region ' Commands
End Class