Imports System.Collections.ObjectModel Imports System.IO Imports EgtUILib Imports EgtWPFLib5 Public Class ProjManagerVM Inherits VMBase #Region "FIELDS & PROPERTIES" Private m_CurrProj As ProjectFile Friend Property CurrProj As ProjectFile Get Return m_CurrProj End Get Set(value As ProjectFile) 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 ProjectFile.VerifyProjectModification(CurrProj, ProjectType.PROJ) ' creo nuova ottimizzazione ' leggo indice di ottimizzazione Dim nProdsIndex As Integer = DbControllers.m_ProdController.GetNextIndex(CurrProj.nProjId) Dim sProdsDir As String = refMainWindowVM.MainWindowM.sProdsDir & "\" & nProdsIndex.ToString("0000") ' creo cartella nuova ottimizzazione If Not Directory.Exists(sProdsDir) Then Directory.CreateDirectory(sProdsDir) Else Dim di As System.IO.DirectoryInfo = New DirectoryInfo(sProdsDir) 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 ' copio file progetto Dim sProjPath As String = String.Empty Dim bOk = False Dim sProdPath As String = sProdsDir & "\" & nProdsIndex.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.CurrProj.SetProdId(nProdsIndex) ' imposto currprod Map.refProdManagerVM.CurrProd = New ProjectFile(ProjectType.PROD, Path.GetFileNameWithoutExtension(sProdPath)) ' setto flag nuovo progetto in prod Map.refProdManagerVM.CurrProd.NewProd = True Else ' elimino da DB DbControllers.m_ProdController.DeleteProd(nProdsIndex) End If End Sub #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() ' verifico se progetto modificato, e chiedo se salvare ProjectFile.VerifyProjectModification(CurrProj, ProjectType.PROJ) OpenProject(Nothing) End Sub Friend Sub OpenProject(TempCurrProj As ProjectFile) ' 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) Map.refMainWindowVM.SetTitle(CurrProj.nProjId.ToString("0000") & " - " & CurrProj.BTLFileName & " - EgtBEAMWALL") Else MessageBox.Show("Impossibile aprire il file!!") Map.refMainWindowVM.SetTitle("New - EgtBEAMWALL") Map.refSceneHostVM.MainController.NewProject() End If 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() Map.refSceneHostVM.SaveProject() Map.refMainWindowVM.SetTitle(CurrProj.nProjId.ToString("0000") & " - " & CurrProj.BTLFileName & " - EgtBEAMWALL") ' aggiorno su DB DbControllers.m_ProjController.UpdateBtlParts(CurrProj.nProjId, Map.refProjectVM.BTLStructure.PartList.ToList()) ' se nuovo progetto, incremento l'indice di progetto 'If m_CurrProj.NewProj Then ' 'm_nLastProjId = m_nLastProjId + 1 ' 'WriteMainPrivateProfileString(S_GENERAL, K_PROJSINDEX, (m_nLastProjId).ToString()) ' m_CurrProj.NewProj = False ' ' ' bozza salvataggio su DB ' ' Dim DbMan As New DataLayer.DbManager ' ' Dim newDbProj As DataLayer.DatabaseModels.ProjModel ' ' newDbProj = DbMan.ProjCtr.Create(m_CurrProj.nProjId, m_CurrProj.BTLFileName) ' ' If (False) Then ' ' ' caso FALSE ADV ' ' DataLayer.DbManager.AdvDataModel = False ' ' ' creo le parts ' ' Dim BTLPartList As New List(Of DataLayer.DatabaseModels.BTLPartModel) ' ' For Each part As BTLPart In Map.refProjectVM.BTLStructure.PartList ' ' BTLPartList.Add(New DataLayer.DatabaseModels.BTLPartModel() With {.PartId = part.nPartId}) ' ' Next ' ' DbMan.BtlPartCtr.Create(newDbProj.ProjDbId, BTLPartList) ' ' Else ' ' DataLayer.DbManager.AdvDataModel = True ' ' ' creo le parts ' ' Dim BTLPartList As New List(Of DataLayer.DatabaseModels.BTLPartModel) ' ' For Each part As Core.BTLPart In Map.refProjectVM.BTLStructure.PartList ' ' BTLPartList.Add(DbMan.BtlPartCtr.Convert(part)) ' ' Next ' ' DbMan.BtlPartCtr.Create(newDbProj.ProjDbId, BTLPartList) ' ' End If 'End If 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() ProjectFile.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 ' leggo indice di progetto 'Dim nProjId As Integer = GetMainPrivateProfileInt(S_GENERAL, K_PROJSINDEX, 1) Dim nProjId As Integer = DbControllers.m_ProjController.GetNextIndex() Dim sProjsDir As String = refMainWindowVM.MainWindowM.sProjsDir & "\" & nProjId.ToString("0000") ' creo cartella nuovo progetto If Not Directory.Exists(sProjsDir) Then Directory.CreateDirectory(sProjsDir) Else Dim di As System.IO.DirectoryInfo = New DirectoryInfo(sProjsDir) 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 ' copio file BTL Dim sBtlCopyPath As String = sProjsDir & "\" & 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 = sProjsDir & "\" & nProjId.ToString("0000") & FILENAMESEPARATOR & FILENAMESEPARATOR & Path.GetFileNameWithoutExtension(sBtlCopyPath) & ".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 DbControllers.m_ProjController.UpdateName(nProjId, Path.GetFileNameWithoutExtension(BTLDlg.FileName)) m_CurrProj = New ProjectFile(ProjectType.PROJ, Path.GetFileNameWithoutExtension(sProjFileName)) 'm_CurrProj.NewProj = True Map.refMainWindowVM.SetTitle(CurrProj.nProjId.ToString("0000") & " - " & CurrProj.BTLFileName & " - EgtBEAMWALL") Else ' elimino da Db DbControllers.m_ProjController.DeleteProj(nProjId) End If 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) ' verifico se progetto modificato, e chiedo se salvare If EgtGetModified() Then If MessageBox.Show("Salvare progetto modificato prima di continuare?", "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then Map.refSceneHostVM.SaveProject() Else ' resetto stato modificato Map.refSceneHostVM.MainController.ResetModified() End If End If If m_CurrProj.nProdId > 0 Then 'Map.refSceneHostVM.MainController.OpenProject(m_CurrProj.sProdPath, False) Map.refProdManagerVM.CurrProd = New ProjectFile(ProjectType.PROD, Path.GetFileNameWithoutExtension(m_CurrProj.sProdPath)) 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) End Sub #End Region ' GoToProd #End Region ' Commands End Class