493 lines
17 KiB
VB.net
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
|