Files
egtbeamwall/EgtBEAMWALL.ViewerOptimizer/ProjManager/ProjManagerVM.vb
T
Emmanuele Sassi 24594a4d24 Correzioni
2021-05-15 19:06:57 +02:00

493 lines
17 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.IO
Imports EgtBEAMWALL.Core
Imports EgtBEAMWALL.DataLayer.DatabaseModels
Imports EgtUILib
Imports EgtWPFLib5
Public Class ProjManagerVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
Private m_CurrProj As ProjFileVM
Friend Property CurrProj As ProjFileVM
Get
Return m_CurrProj
End Get
Set(value As ProjFileVM)
m_CurrProj = value
End Set
End Property
Private m_IsEnabled As Boolean
Public Property IsEnabled As Boolean
Get
Return m_IsEnabled
End Get
Set(value As Boolean)
If value <> m_IsEnabled Then
m_IsEnabled = value
NotifyPropertyChanged("IsEnabled")
End If
End Set
End Property
' indice ultimo progetto
Private m_nLastProjId As Integer
Friend ReadOnly Property nLastProjId As Integer
Get
Return m_nLastProjId
End Get
End Property
' Definizione comandi
Private m_cmdNew As ICommand
Private m_cmdOpen As ICommand
Private m_cmdOpenMruFile As ICommand
Private m_cmdSave As ICommand
Private m_cmdSaveAs As ICommand
Private m_cmdExport As ICommand
Private m_cmdDxfOut As ICommand
Private m_cmdImport As ICommand
Private m_cmdGoToProd As ICommand
Private m_cmdSendFeedback As ICommand
#Region "ToolTip"
'Proprietà ToolTip
Public ReadOnly Property NewToolTip As String
Get
Return EgtMsg(MSG_TOPCOMMANDBAR + 1)
End Get
End Property
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 SaveAsToolTip As String
Get
Return EgtMsg(MSG_TOPCOMMANDBAR + 4)
End Get
End Property
Public ReadOnly Property InsertToolTip As String
Get
Return EgtMsg(MSG_TOPCOMMANDBAR + 5)
End Get
End Property
Public ReadOnly Property ImportToolTip As String
Get
Return EgtMsg(MSG_TOPCOMMANDBAR + 6)
End Get
End Property
Public ReadOnly Property ExportToolTip As String
Get
Return EgtMsg(91505) 'Esporta in macchina
End Get
End Property
Public ReadOnly Property DxfOutToolTip As String
Get
Return EgtMsg(91506) 'Esporta DXF
End Get
End Property
Public ReadOnly Property OptionsToolTip As String
Get
Return EgtMsg(MSG_TOPCOMMANDBAR + 9)
End Get
End Property
Public ReadOnly Property SendFeedbackToolTip As String
Get
Return EgtMsg(MSG_TOPCOMMANDBAR + 13)
End Get
End Property
#End Region ' ToolTip
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New()
' Creo riferimento a questa classe in Map
Map.SetRefProjManagerVM(Me)
' Leggo ultimo indice di progetto
m_nLastProjId = GetMainPrivateProfileInt(S_GENERAL, K_PROJSINDEX, 1)
End Sub
#End Region ' CONSTRUCTOR
#Region "METHODS"
Private Sub NewProdFromProj()
' verifico se progetto modificato, e chiedo se salvare
ProjFileVM.VerifyProjectModification(CurrProj, ProjectType.PROJ)
' inizializzo nuovo progetto
Dim nProdId As Integer = 0
Dim sProdDir As String = ""
Map.refProdManagerVM.InitNewProject(m_CurrProj.nProjId, nProdId, sProdDir)
' copio file progetto
Dim sProjPath As String = String.Empty
Dim bOk = False
Dim sProdPath As String = sProdDir & "\" & nProdId.ToString("0000") & ".nge"
If EgtGetCurrFilePath(sProjPath) AndAlso Not String.IsNullOrEmpty(sProjPath) Then
Try
File.Copy(sProjPath, sProdPath)
'Map.refSceneHostVM.MainController.OpenProject(sProdPath)
bOk = True
Catch ex As Exception
EgtOutLog("Impossibile copiare il file")
bOk = False
End Try
End If
If bOk Then
' aggiorno path proj
Map.refProjManagerVM.UpdateCurrProj()
' imposto currprod
Map.refProdManagerVM.SetCurrProd(nProdId)
' setto flag nuovo progetto in prod
Map.refProdManagerVM.CurrProd.bIsNew = True
Else
' elimino da DB
DbControllers.m_ProdController.DeleteProd(nProdId)
End If
End Sub
Private Function InitNewProject(ByRef nProjId As Integer, ByRef sProjectDir As String) As Boolean
' richiedo indice nuovo progetto
nProjId = DbControllers.m_ProjController.GetNextIndex()
' salvo data creazione progetto
DbControllers.m_ProjController.Update(New ProjModel() With {.ProjId = nProjId,
.DtCreated = DateTime.Now()})
If nProjId <= 0 Then Return False
sProjectDir = refMainWindowVM.MainWindowM.sProjsDir & "\" & nProjId.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
Private Function UpdateProjData(nProjId As Integer, nProdId As Integer, dtExportDate As DateTime,
sListName As String)
DbControllers.m_ProjController.Update(New ProjModel() With {.ProjId = nProjId,
.DtExported = dtExportDate,
.ListName = sListName})
End Function
Private Function UpdateBTLFileName(nProjId As Integer, BTLFileName As String)
DbControllers.m_ProjController.Update(New ProjModel() With {.ProjId = nProjId,
.BTLFileName = BTLFileName})
End Function
Public Function SetCurrProj(nProjId As Integer) As Boolean
Dim Currproj As ProjFileM = DbControllers.m_ProjController.FindByProjIdConv(nProjId)
If IsNothing(Currproj) Then Return False
m_CurrProj = New ProjFileVM(Currproj)
Return True
End Function
Public Function UpdateCurrProj() As Boolean
Return SetCurrProj(CurrProj.nProjId)
End Function
#End Region ' METHODS
#Region "COMMANDS"
#Region "New"
''' <summary>
''' Returns a command that do Save.
''' </summary>
Public ReadOnly Property New_Command As ICommand
Get
If m_cmdNew Is Nothing Then
m_cmdNew = New Command(AddressOf NewProject)
End If
Return m_cmdNew
End Get
End Property
''' <summary>
''' Execute the Save. This method is invoked by the SaveCommand.
''' </summary>
Public Sub NewProject()
' verifico se progetto modificato, e chiedo se salvare
ProjFileVM.VerifyProjectModification(CurrProj, ProjectType.PROJ)
If Map.refSceneHostVM.MainController.NewProject() Then
' inizializzo nuovo progetto
Dim nProjId As Integer = 0
Dim sProjDir As String = ""
InitNewProject(nProjId, sProjDir)
SetCurrProj(nProjId)
Dim sProjFileName As String = sProjDir & "\" & nProjId.ToString("0000") & ".nge"
' salvo il progetto
EgtSaveFile(sProjFileName, NGE.BIN)
Else
MessageBox.Show("Impossibile creare un nuovo file!!")
End If
Map.refMainWindowVM.UpdateTitle()
End Sub
#End Region ' New
#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()
' verifico se progetto modificato, e chiedo se salvare
ProjFileVM.VerifyProjectModification(CurrProj, ProjectType.PROJ)
OpenProject(Nothing)
End Sub
Friend Sub OpenProject(TempCurrProj As ProjFileVM)
' se la string è vuota
Dim OpenProjectFileDialogVM As OpenProjectFileDialogVM = Nothing
If IsNothing(TempCurrProj) 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.PROJ)
If IsNothing(DialogResult) OrElse Not DialogResult Then Return
TempCurrProj = OpenProjectFileDialogVM.SelProject
End If
' se esiste prod prendo quello, altrimenti proj
Dim sFilePath As String = ""
If Not IsNothing(TempCurrProj.nProdId) AndAlso TempCurrProj.nProdId > 0 Then
sFilePath = TempCurrProj.sProdPath
Else
sFilePath = TempCurrProj.sProjPath
End If
If Map.refSceneHostVM.MainController.OpenProject(sFilePath, False) Then
m_CurrProj = TempCurrProj
DbControllers.m_ProjController.LockByProjId(m_CurrProj.nProjId, True)
End If
' aggiorno titolo
Map.refMainWindowVM.UpdateTitle()
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()
If IsNothing(CurrProj) Then Return
Map.refSceneHostVM.SaveProject()
Map.refMainWindowVM.SetTitle(CurrProj.nProjId.ToString("0000") & " - " & CurrProj.sBTLFileName & " - EgtBEAMWALL")
' aggiorno BTLParts su DB
DbControllers.m_ProjController.UpdateBtlParts(CurrProj.nProjId, Map.refProjectVM.BTLStructureVM.BTLStructureM.BTLPartMList)
' se nuovo progetto
If m_CurrProj.bIsNew Then
' resetto stato new
DbControllers.m_ProjController.ResetNew(CurrProj.nProjId)
m_CurrProj.bIsNew = False
End If
' aggiorno titolo
Map.refMainWindowVM.UpdateTitle()
End Sub
#End Region ' SaveCommand
#Region "Import"
''' <summary>
''' Returns a command that do Export.
''' </summary>
Public ReadOnly Property Import_Command As ICommand
Get
If m_cmdImport Is Nothing Then
m_cmdImport = New Command(AddressOf Import)
End If
Return m_cmdImport
End Get
End Property
''' <summary>
''' Execute the Export. This method is invoked by the ExportCommand.
''' </summary>
Public Sub Import()
ProjFileVM.VerifyProjectModification(CurrProj, ProjectType.PROJ)
Dim sDir As String = String.Empty
GetMainPrivateProfileString(S_GENERAL, K_LASTIMPDIR, "", sDir)
' apro finestra scelta file
Dim BTLDlg As New Microsoft.Win32.OpenFileDialog() With {
.DefaultExt = ".btl",
.Filter = "BTL (*.btl)|*.btl" &
"|BTLX (*.btlx)|*.btlx",
.CheckFileExists = True,
.ValidateNames = True}
If BTLDlg.ShowDialog() <> True Then Return
' inizializzo nuovo progetto
Dim nProjId As Integer = 0
Dim sProjDir As String = ""
InitNewProject(nProjId, sProjDir)
' copio file BTL
Dim sBtlCopyPath As String = sProjDir & "\" & Path.GetFileName(BTLDlg.FileName)
Dim bOk = False
Try
File.Copy(BTLDlg.FileName, sBtlCopyPath)
bOk = True
Catch ex As Exception
EgtOutLog("Impossibile copiare il file")
bOk = False
End Try
' importo file
If bOk Then
bOk = Map.refSceneHostVM.MainController.ImportProject(sBtlCopyPath, False)
End If
Dim sProjFileName As String = sProjDir & "\" & nProjId.ToString("0000") & ".nge"
If bOk Then
' scrivo info proj su tutti i pezzi
Dim nPartId = EgtGetFirstPart()
While nPartId <> GDB_ID.NULL
EgtSetInfo(nPartId, BTL_PRT_PROJ, nProjId)
nPartId = EgtGetNextPart(nPartId)
End While
' salvo il progetto
bOk = EgtSaveFile(sProjFileName, NGE.BIN)
Else
EgtOutLog("Errore nell'importazione BTL")
End If
If bOk Then
' aggiorno Db
Dim sBTLFileName As String = Path.GetFileNameWithoutExtension(BTLDlg.FileName)
'UpdateBTLFileName(nProjId, sBTLFileName)
Dim ExportDate As DateTime
DateTime.TryParse(Map.refProjectVM.BTLStructureVM.BTLStructureM.m_sEXPDATE & " " &
Map.refProjectVM.BTLStructureVM.BTLStructureM.m_sEXPTIME, ExportDate)
DbControllers.m_ProjController.UpdateInfo(nProjId, sBTLFileName, Map.refProjectVM.BTLStructureVM.sLISTNAME, ExportDate)
SetCurrProj(nProjId)
Map.refMainWindowVM.UpdateTitle()
Else
' elimino da Db
DbControllers.m_ProjController.DeleteProj(nProjId)
End If
' aggiorno titolo
Map.refMainWindowVM.UpdateTitle()
End Sub
#End Region ' Import
#Region "GoToProd"
''' <summary>
''' Returns a command that do GoToProd.
''' </summary>
Public ReadOnly Property GoToProd_Command As ICommand
Get
If m_cmdGoToProd Is Nothing Then
m_cmdGoToProd = New Command(AddressOf GoToProd)
End If
Return m_cmdGoToProd
End Get
End Property
''' <summary>
''' Execute the GoToProd. This method is invoked by the GoToProd_Command.
''' </summary>
Public Sub GoToProd(ByVal param As Object)
If IsNothing(Map.refProjManagerVM.CurrProj) Then Return
' verifico se progetto modificato, e chiedo se salvare
If Map.refProjManagerVM.CurrProj.bIsNew Or EgtGetModified() Then
If MessageBox.Show("Salvare progetto modificato prima di continuare?", "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then
Save()
Else
If Map.refProjManagerVM.CurrProj.bIsNew Then
MessageBox.Show("Impossibile procedere con un nuovo progetto non salvato!", "", MessageBoxButton.OK, MessageBoxImage.Exclamation)
Return
End If
' resetto stato modificato
Map.refSceneHostVM.MainController.ResetModified()
End If
End If
''' Recupero Prod per questo Proj da Db
''Dim nProdId As Integer = 0
''Dim DbProj As DataLayer.DatabaseModels.ProjModel = DbControllers.m_ProjController.FindByProjId(m_CurrProj.nProjId)
''If Not IsNothing(DbProj) Then
'' If Not IsNothing(DbProj.ProdDbId) And DbProj.ProdDbId > 0 Then
'' ' recupero ProdId
'' nProdId = DbControllers.m_ProdController.FindByProdDbId(DbProj.ProdDbId).ProdId
'' End If
''End If
Dim nProdId As Integer = Map.refProjManagerVM.CurrProj.nProdId
If nProdId > 0 Then
'Map.refSceneHostVM.MainController.OpenProject(m_CurrProj.sProdPath, False)
Map.refProdManagerVM.SetCurrProd(nProdId)
Else
'' chiedo se aggiungere ad ottimizzazione già presente o creare nuova
'Select Case MessageBox.Show("Si: crea nuova ottimizzazione; No: aggiungi ad ottimizzazione già presente", "", MessageBoxButton.YesNoCancel, MessageBoxImage.Information)
' Case MessageBoxResult.Yes
' creo nuova ottimizzazione da progetto corrente
NewProdFromProj()
' Case MessageBoxResult.No
' ' chiedo in quale ottimizzazione aggiungere il progetto corrente
' Dim OpenProjectFileDialogVM As New OpenProjectFileDialogVM
' Dim ChooseProdFileDialog As New OpenProjectFileDialogV(Application.Current.MainWindow, OpenProjectFileDialogVM)
' Dim DialogResult As Boolean? = ChooseProdFileDialog.EgtShowDialog(ProjectType.PROD)
' If IsNothing(DialogResult) OrElse Not DialogResult Then Return
' ' se prod selezionato
' If Not IsNothing(OpenProjectFileDialogVM.SelProject.nProdId) AndAlso OpenProjectFileDialogVM.SelProject.nProdId > 0 Then
' ' aggiungo proj al prod selezionato
' '' DA FARE!!!!!!
' End If
' Case MessageBoxResult.Cancel
' Return
'End Select
End If
' vado in pagina prod
Map.refMainMenuVM.SetSelPage(Pages.MACHINING, False)
' aggiorno titolo
Map.refMainWindowVM.UpdateTitle()
End Sub
#End Region ' GoToProd
#End Region ' Commands
End Class