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" ''' ''' Returns a command that do Save. ''' 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 ''' ''' Execute the Save. This method is invoked by the SaveCommand. ''' 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" ''' ''' 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() ' 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" ''' ''' 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(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" ''' ''' Returns a command that do Export. ''' 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 ''' ''' Execute the Export. This method is invoked by the ExportCommand. ''' 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" ''' ''' Returns a command that do GoToProd. ''' 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 ''' ''' Execute the GoToProd. This method is invoked by the GoToProd_Command. ''' 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