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_ProjManager_IsEnabled As Boolean = True Public ReadOnly Property ProjManager_IsEnabled As Boolean Get Return m_ProjManager_IsEnabled End Get End Property 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_TempCurrProj As ProjFileVM Friend Property TempCurrProj As ProjFileVM Get Return m_TempCurrProj End Get Set(value As ProjFileVM) m_TempCurrProj = 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 Public ReadOnly Property nProjType As BWType Get Return If(Not IsNothing(CurrProj), CurrProj.nType, BWType.NULL) End Get End Property ' indice progetto in caricamento Private m_nLoadingProjId As Integer = 0 Public ReadOnly Property nLoadingProjId As Integer Get Return m_nLoadingProjId End Get End Property Friend m_MruFiles As New MruList Public ReadOnly Property MruFileNames As ObservableCollection(Of String) Get Dim IdAndBTLFileNames As New ObservableCollection(Of String) For Each FileName In m_MruFiles.FileNames.ToList() Dim PjId As Integer = 0 Dim sPjId As String = Path.GetFileNameWithoutExtension(DirectCast(FileName, String).Replace("__", "_")) Integer.TryParse(sPjId, PjId) Dim PjFileM = DbControllers.m_ProjController.FindByProjIdConv(PjId) If IsNothing(PjFileM) Then m_MruFiles.Remove(FileName) Else IdAndBTLFileNames.Add(sPjId & " | " & PjFileM.sBTLFileName) End If Next Return IdAndBTLFileNames 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_cmdImportBTL As ICommand Private m_cmdImportProject As ICommand Private m_cmdExportProject 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 ImportBTL_ToolTip As String Get Return EgtMsg(61840) End Get End Property Public ReadOnly Property UpdateBTL_ToolTip As String Get Return EgtMsg(61834) End Get End Property Public ReadOnly Property ExportProject_ToolTip As String Get Return EgtMsg(61838) End Get End Property Public ReadOnly Property ImportProject_ToolTip As String Get Return EgtMsg(61839) End Get End Property Public ReadOnly Property GoToProd_ToolTip As String Get Return EgtMsg(61835) 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) ' Impostazioni MruLists m_MruFiles.Init(S_MRUPROJFILES, 8) End Sub #End Region ' CONSTRUCTOR #Region "METHODS" Private Sub NewProdFromProj() ' inizializzo nuovo progetto Dim nProdId As Integer = 0 Dim sProdDir As String = "" Map.refProdManagerVM.InitNewProject(m_CurrProj.nProjId, nProdId, sProdDir) ' setto il PType del Prod DbControllers.m_ProdController.UpdatePType(nProdId, CurrProj.nType) ' setto la Macchina associata al Prod DbControllers.m_ProdController.UpdateMachine(nProdId, CurrProj.sMachine) ' 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) ' imposto TempCurrProd Map.refProdManagerVM.TempCurrProd = Map.refProdManagerVM.CurrProd ' 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, nType As BWType, Machine As Machine) 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(), .PType = nType, .Machine = If(Not IsNothing(Machine), Machine.Name, Nothing)}) 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 Public Sub ResetCurrProj() CurrProj = Nothing End Sub Friend Sub SetProjManagerIsEnabled(bIsEnabled As Boolean) m_ProjManager_IsEnabled = bIsEnabled NotifyPropertyChanged(NameOf(ProjManager_IsEnabled)) End Sub #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 If Not ProjFileVM.VerifyProjectModification(CurrProj, ProjectType.PROJ) Then Return ' se si ha una sola macchina disponibile (non BOTH) setto il nuovo porgetto a quella macchina e al tipo progetto associato ' altrimenti apro il dialog per scegliere la macchina e il tipo progetto a cui settare il nuovo progetto Dim Machine As Machine = Nothing Dim nType As BWType = BWType.NULL Dim ProjectTypeWndVM As New ProjectTypeWndVM() If ProjectTypeWndVM.MachineList.Count = 1 And DirectCast(ProjectTypeWndVM.SelMachine, MyMachine).nType <> MachineType.BOTH Then Machine = ProjectTypeWndVM.SelMachine nType = DirectCast(Machine, MyMachine).nType Else Dim ProjectTypeWnd As New ProjectTypeWndV(Application.Current.MainWindow, ProjectTypeWndVM) If ProjectTypeWnd.ShowDialog() Then Machine = ProjectTypeWndVM.SelMachine nType = ProjectTypeWndVM.nSelType Else Return End If End If ' creo nuovo progetto If Map.refSceneHostVM.MainController.NewProject() Then ' inizializzo nuovo progetto Dim nProjId As Integer = 0 Dim sProjDir As String = "" InitNewProject(nProjId, sProjDir, nType, Machine) SetCurrProj(nProjId) ' carico lista macchine e macchina del progetto per il pulsante Reset Macchina del CALCPanel Map.refCALCPanelVM.LoadMachineList() Dim sProjFileName As String = sProjDir & "\" & nProjId.ToString("0000") & ".nge" ' imposto ProjId di caricamento m_nLoadingProjId = nProjId ' creo gruppo BTLinfo Dim nBTLInfoLayer As Integer = EgtCreateGroup(GDB_ID.ROOT) EgtSetName(nBTLInfoLayer, BTLINFO) EgtSetLevel(nBTLInfoLayer, GDB_LV.SYSTEM) Map.refProjectVM.BTLStructureVM.BTLStructureM.UpdateBTLInfoLayer() ' scrivo info proj e tipo su layer BtlInfo EgtSetInfo(nBTLInfoLayer, BTL_PRT_PROJ, nProjId) EgtSetInfo(nBTLInfoLayer, BTL_GEN_PROJTYPE, nType) ' salvo il progetto If EgtSaveFile(sProjFileName, NGE.CMPTEXT) Then SectionXMaterial.SetType(nType) Core.ViewPanelVM.UpdateBWType(nType) Map.refPartManagerVM.LockVisibilityUpdate() ' imposto flag secondo tipo di progetto (travi o pareti) Dim sBTLFlag As String = If(nType = Core.ConstBeam.BWType.BEAM, K_BTLFLAG, K_WALLBTLFLAG) Dim nFlag As Integer = GetMainPrivateProfileInt(S_IMPORT, sBTLFlag, EIB_FL.TS3_POS + EIB_FL.SORT + EIB_FL.USEUATTR) EgtBeamSetFlag(nFlag) DbControllers.m_ProjController.UpdateInfo(nProjId, "Hand made", "", Date.MinValue, nType, Map.refMachinePanelVM.SelectedMachine.Name) SetCurrProj(nProjId) End If Map.refProjectVM.SetOptimizePanel_Visibility(Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.WALL AndAlso Map.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.NESTING_AUTO)) Else MessageBox.Show(EgtMsg(61876)) End If Map.refMainWindowVM.UpdateTitle() NotifyPropertyChanged(NameOf(MruFileNames)) 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 If Not ProjFileVM.VerifyProjectModification(CurrProj, ProjectType.PROJ) Then Return OpenProject(Nothing) End Sub Friend Sub OpenProject(TempCurrPj As ProjFileVM) Dim bStart As Boolean = IsNothing(m_TempCurrProj) m_TempCurrProj = TempCurrPj ' 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 ' imposto ProjId di caricamento m_nLoadingProjId = TempCurrProj.nProjId ' 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 SectionXMaterial.SetType(TempCurrProj.nType) Core.ViewPanelVM.UpdateBWType(TempCurrProj.nType) ' imposto flag secondo tipo di progetto (travi o pareti) Dim sBTLFlag As String = If(TempCurrProj.nType = Core.ConstBeam.BWType.BEAM, K_BTLFLAG, K_WALLBTLFLAG) Dim nFlag As Integer = GetMainPrivateProfileInt(S_IMPORT, sBTLFlag, EIB_FL.TS3_POS + EIB_FL.SORT + EIB_FL.USEUATTR) EgtBeamSetFlag(nFlag) ' se la macchina del progetto in apertura non è tra le macchine disponibili lo segnalo e apro un progetto vuoto If IsNothing(Map.refMachinePanelVM.MachineList.FirstOrDefault(Function(x) x.Name = Map.refProjManagerVM.TempCurrProj.sMachine)) Then ' rimuovo il file in apertura dalla lista degli MRU Dim ProjId As Integer = Map.refProjManagerVM.nLoadingProjId Dim PjFileVM As ProjFileVM If Not IsNothing(ProjId) AndAlso ProjId <> 0 Then PjFileVM = New ProjFileVM(DbControllers.m_ProjController.FindByProjIdConv(ProjId)) If Not IsNothing(PjFileVM.ProjFileM) AndAlso Not IsNothing(PjFileVM.sProjPath) Then Map.refProjManagerVM.m_MruFiles.Remove(PjFileVM.sProjPath) End If MessageBox.Show(EgtMsg(61885), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) 'Error If bStart Then Map.refProjManagerVM.NewProject() Else If Map.refSceneHostVM.MainController.OpenProject(sFilePath, False) Then Map.refProjectVM.SetOptimizePanel_Visibility(Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.WALL AndAlso Map.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.NESTING_AUTO)) Map.refPartManagerVM.LockVisibilityUpdate() End If End If ' aggiorno titolo Map.refMainWindowVM.UpdateTitle() NotifyPropertyChanged(NameOf(MruFileNames)) End Sub #End Region ' OpenCommand #Region "OpenMruFileCommand" ''' ''' Returns a command that do Open. ''' Public ReadOnly Property OpenMruFileCommand As ICommand Get If m_cmdOpenMruFile Is Nothing Then m_cmdOpenMruFile = New Command(AddressOf OpenMruFile) End If Return m_cmdOpenMruFile End Get End Property ''' ''' Execute the Open. This method is invoked by the OpenCommand. ''' Public Sub OpenMruFile(ByVal param As Object) ' verifico se progetto modificato, e chiedo se salvare If Not ProjFileVM.VerifyProjectModification(CurrProj, ProjectType.PROJ) Then Return ' ricavo l'Id e il progetto associato per l'apertura di quest'ultimo Dim PjId As Integer = 0 Dim arrStrPjId As String() = DirectCast(param, String).Split("|") Integer.TryParse(arrStrPjId(0), PjId) Dim PjFileM = DbControllers.m_ProjController.FindByProjIdConv(PjId) Dim PjFileVM = New ProjFileVM(PjFileM) OpenProject(PjFileVM) End Sub #End Region ' OpenMruFileCommand #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 Dim bShowBuilding As Boolean = False Dim bShowSolid As Boolean = False ' se vista tutti i pezzi If Map.refShowBeamPanelVM.bShowAll Then ' verifico se assemblato e lo annullo per salvataggio bShowBuilding = Map.refShowBeamPanelVM.ShowBuilding_IsChecked If bShowBuilding Then Map.refProjectVM.BTLStructureVM.ShowBuilding(False, False) ' se vista singolo pezzo Else bShowSolid = Map.refShowBeamPanelVM.ShowSolid_IsChecked If bShowSolid Then Map.refProjectVM.BTLStructureVM.ShowSolid(False) End If ' imposto ProjId di caricamento m_nLoadingProjId = CurrProj.nProjId 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 ' se assemblato lo ripristino If bShowBuilding Then Map.refProjectVM.BTLStructureVM.ShowBuilding(True, False) If bShowSolid Then Map.refProjectVM.BTLStructureVM.ShowSolid(False) ' verifico se Reset Macchina modificato e nel caso aggiorno DB e CurrProj If Map.refCALCPanelVM.IsMachineModified() Then DbControllers.m_ProjController.UpdateMachine(Map.refProjManagerVM.CurrProj.nProjId, Map.refCALCPanelVM.SelectedMachine.Name) Map.refProjManagerVM.CurrProj.SetMachine(Map.refCALCPanelVM.SelectedMachine.Name) ' se esiste un Prod associato al Proj corrente aggiorno anche questo Prod nel DB If Map.refProjManagerVM.CurrProj.nProdId > 0 Then DbControllers.m_ProdController.UpdateMachine(Map.refProjManagerVM.CurrProj.nProdId, Map.refCALCPanelVM.SelectedMachine.Name) Map.refCALCPanelVM.ResetMachineModified() End If ' aggiorno titolo Map.refMainWindowVM.UpdateTitle() NotifyPropertyChanged(NameOf(MruFileNames)) End Sub #End Region ' SaveCommand #Region "ImportBTL" ''' ''' Returns a command that do Export. ''' Public ReadOnly Property ImportBTL_Command As ICommand Get If m_cmdImportBTL Is Nothing Then m_cmdImportBTL = New Command(AddressOf ImportBTL) End If Return m_cmdImportBTL End Get End Property ''' ''' Execute the ImportBTL. This method is invoked by the ImportBTLCommand. ''' Public Sub ImportBTL(Optional sFile As String = "", Optional bWithDlg As Boolean = True) If Not ProjFileVM.VerifyProjectModification(CurrProj, ProjectType.PROJ) Then Return Dim sDir As String = String.Empty GetMainPrivateProfileString(S_GENERAL, K_LASTIMPDIR, "", sDir) If bWithDlg Then ' 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() Then sFile = BTLDlg.FileName Else Return End If End If Dim nProjId As Integer = 0 Dim sProjDir As String = "" ' verifico se non e' tra i BTL gia' importati Dim sBTLFileName As String = Path.GetFileNameWithoutExtension(sFile) Dim nAlreadyImported As Integer = DbControllers.m_ProjController.AlreadyImported(sBTLFileName) If nAlreadyImported > 0 Then ' recupero progetto con lo stesso nome Dim ToDeleteProj As ProjFileM = DbControllers.m_ProjController.FindByProjIdConv(nAlreadyImported) ' se esiste gia' un'ottimizzazione If ToDeleteProj.nProdId > 0 Then Select Case MessageBox.Show(EgtMsg(61942), "Information", MessageBoxButton.YesNo, MessageBoxImage.Information) ' BTL file already imported and optimized. Do you want to import it again? Case MessageBoxResult.Yes ' lo importo, quindi non devo fare nulla Case MessageBoxResult.No Return End Select Else ' se non ha ottimizazione, chiedo se sovrascriverlo Select Case MessageBox.Show(EgtMsg(61943), "Information", MessageBoxButton.YesNoCancel, MessageBoxImage.Information) ' BTL file already imported. Do you want to overwrite it? Case MessageBoxResult.Yes ' cancello BTLParts su DB DbControllers.m_ProjController.UpdateBtlParts(nAlreadyImported, New List(Of BTLPartM)) ' cancello nome BTL DbControllers.m_ProjController.UpdateInfo(nAlreadyImported, DateTime.Now.ToString(), "", DateTime.MinValue, BWType.NULL, "") nProjId = nAlreadyImported sProjDir = refMainWindowVM.MainWindowM.sProjsDir & "\" & nProjId.ToString("0000") Case MessageBoxResult.No ' lo importo, quindi non devo fare nulla Case MessageBoxResult.Cancel Return End Select End If End If ' se si ha una sola macchina disponibile (non BOTH) setto il progetto importato a quella macchina e al tipo progetto associato ' altrimenti apro il dialog per scegliere la macchina e il tipo progetto a cui settare il progetto importato Dim Machine As Machine = Nothing Dim nType As BWType = BWType.NULL Dim ProjectTypeWndVM As New ProjectTypeWndVM() If ProjectTypeWndVM.MachineList.Count = 1 And DirectCast(ProjectTypeWndVM.SelMachine, MyMachine).nType <> MachineType.BOTH Then Machine = ProjectTypeWndVM.SelMachine nType = DirectCast(Machine, MyMachine).nType Else Dim ProjectTypeWnd As New ProjectTypeWndV(Application.Current.MainWindow, ProjectTypeWndVM) If ProjectTypeWnd.ShowDialog() Then Machine = ProjectTypeWndVM.SelMachine nType = ProjectTypeWndVM.nSelType Else Return End If End If ' inizializzo nuovo progetto If nProjId = 0 Then InitNewProject(nProjId, sProjDir, nType, Machine) End If SetCurrProj(nProjId) ' imposto il tipo di parametri Q da utilizzare BTLIniFile.m_nBTLBWType = nType ' carico lista macchine e macchina del progetto per il pulsante Reset Macchina del CALCPanel Map.refCALCPanelVM.LoadMachineList() ' imposto ProjId di caricamento m_nLoadingProjId = nProjId ' copio file BTL Dim sBtlCopyPath As String = sProjDir & "\" & Path.GetFileName(sFile) Dim bOk = False Try File.Copy(sFile, sBtlCopyPath, True) 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" Dim bFirstPart As Boolean = EgtGetFirstPart() <> GDB_ID.NULL If bOk OrElse bFirstPart Then ' salvo il progetto bOk = EgtSaveFile(sProjFileName, NGE.CMPTEXT) SectionXMaterial.SetType(nType) Core.ViewPanelVM.UpdateBWType(nType) ' imposto flag secondo tipo di progetto (travi o pareti) Dim sBTLFlag As String = If(nType = Core.ConstBeam.BWType.BEAM, K_BTLFLAG, K_WALLBTLFLAG) Dim nFlag As Integer = GetMainPrivateProfileInt(S_IMPORT, sBTLFlag, EIB_FL.TS3_POS + EIB_FL.SORT + EIB_FL.USEUATTR) EgtBeamSetFlag(nFlag) Else EgtOutLog("Errore nell'importazione BTL") End If If bOk Then ' aggiorno Db 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, nType, Map.refMachinePanelVM.SelectedMachine.Name) SetCurrProj(nProjId) ' se progetto pareti e vista ruotata If nType = BWType.WALL AndAlso (CurrentMachine.ViewDir = VT.ISO_NW OrElse CurrentMachine.ViewDir = VT.ISO_NE) Then ' ruoto le pareti di 180 per raddrizzarle rispetto alla vista For Each Wall In Map.refProjectVM.BTLStructureVM.BTLPartVMList Wall.Rotation(True, Map.refProjectVM.BTLStructureVM.nPROJTYPE, 180, False) Next End If ' calcolo volumi pezzi For Each Part In Map.refProjectVM.BTLStructureVM.BTLPartVMList Part.CalcBTLPartVolume() Next Map.refProjectVM.SetOptimizePanel_Visibility(Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.WALL AndAlso Map.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.NESTING_AUTO)) Map.refPartManagerVM.LockVisibilityUpdate() ' mostro tutti i pezzi Map.refShowBeamPanelVM.ShowAll() Else ' elimino da Db DbControllers.m_ProjController.DeleteProj(nProjId) End If ' gestisco log di importazione ManageImportLog(nProjId, sProjDir) ' aggiorno titolo Map.refMainWindowVM.UpdateTitle() End Sub Private Sub ManageImportLog(nProjId As Integer, sProjDir As String) Dim LogFile As New List(Of String) Using FileStream As FileStream = New FileStream(Map.refMainWindowVM.MainWindowM.sLogFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) Dim StreamReader As New StreamReader(FileStream) Dim Line As String = StreamReader.ReadLine() While Not StreamReader.EndOfStream Line = StreamReader.ReadLine() LogFile.Add(Line) End While StreamReader.Close() End Using If LogFile.Count > 0 Then ' recupero ultima occorrenza di import Dim sLastImport As String = LogFile.LastOrDefault(Function(x) x.Contains("ImportBtl")) ' verifico linee successive Dim nLastImportIndex As Integer = -1 If Not String.IsNullOrWhiteSpace(sLastImport) Then nLastImportIndex = LogFile.IndexOf(sLastImport) End If Dim sImportMessage As String = sLastImport & Environment.NewLine Dim sImportLog As New List(Of String)({sLastImport}) If nLastImportIndex > 0 Then Dim bGlobalError As Boolean = False ' ciclo sulle righe successive For Index = nLastImportIndex + 1 To LogFile.Count - 1 Dim sLogLine As String = LogFile(Index).Trim() ' verifico se fanno parte dell'import Dim bStartWithError As Boolean = sLogLine.StartsWith("Error") Dim bStartWithInfo As Boolean = sLogLine.StartsWith("Info") If Not bStartWithError And Not bStartWithInfo Then Exit For If bStartWithError Then If Not bGlobalError Then bGlobalError = True sImportMessage &= sLogLine & Environment.NewLine End If sImportLog.Add(sLogLine) Next ' salvo file ImportLog nel progetto Try File.WriteAllLines(sProjDir & "\" & nProjId.ToString("0000") & "-ImportLog.txt", sImportLog) Catch ex As Exception ' End Try ' se almeno un errore, mostro log If bGlobalError Then MessageBox.Show(Application.Current.MainWindow, sImportMessage, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error End If End If End If End Sub #End Region ' ImportBTL #Region "ExportProject" ''' ''' Returns a command that do Export. ''' Public ReadOnly Property ExportProject_Command As ICommand Get If m_cmdExportProject Is Nothing Then m_cmdExportProject = New Command(AddressOf ExportProject) End If Return m_cmdExportProject End Get End Property ''' ''' Execute the Export. This method is invoked by the ExportCommand. ''' Public Function ExportProject(Optional sExportFileName As String = Nothing) As String Select Case Map.refMainMenuVM.SelPage Case Pages.VIEW If Not ProjFileVM.VerifyProjectModification(CurrProj, ProjectType.PROJ) Then Return Nothing If IsNothing(CurrProj) Then Return Nothing Case Pages.MACHINING If ProdFileVM.VerifyProjectModification(Map.refProdManagerVM.CurrProd) = MessageBoxResult.Cancel Then Return Nothing If IsNothing(Map.refProdManagerVM.CurrProd) Then Return Nothing Case Else Return Nothing End Select ' se assemblato me lo segno e lo smonto Dim bShowBuilding As Boolean = False If Map.refMainMenuVM.SelPage = Pages.VIEW Then If Map.refShowBeamPanelVM.bShowAll Then ' verifico se assemblato e lo annullo per salvataggio bShowBuilding = Map.refShowBeamPanelVM.ShowBuilding_IsChecked If bShowBuilding Then Map.refProjectVM.BTLStructureVM.ShowBuilding(False, False) End If End If ' apro finestra di salvataggio progetto Dim ExportDlg As New Microsoft.Win32.SaveFileDialog() With {.DefaultExt = ".ngexp", .Filter = "ProjectExport (*.ngexp)|*.ngexp", .FileName = CurrProj.nProjId.ToString("0000") & " - " & CurrProj.sBTLFileName & " - ProjectExport"} If IsNothing(sExportFileName) Then If ExportDlg.ShowDialog() <> True Then Return Nothing End If ' per ogni BTLInfo nel progetto riporto il relativo nome del BTL Dim nBTLInfoProjId As Integer Dim nBTLInfoLayerId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, BTLINFO) While nBTLInfoLayerId <> GDB_ID.NULL ' recupero il ProjId EgtGetInfo(nBTLInfoLayerId, BTL_PRT_PROJ, nBTLInfoProjId) If nBTLInfoProjId > 0 Then ' recupero il BTL file name di questo proj Dim BTLFileNameProj As ProjFileM = DbControllers.m_ProjController.FindByProjIdConv(nBTLInfoProjId) If Not IsNothing(BTLFileNameProj) Then EgtSetInfo(nBTLInfoLayerId, BTLFILENAME, BTLFileNameProj.sBTLFileName) End If End If nBTLInfoLayerId = EgtGetNextName(nBTLInfoLayerId, BTLINFO) End While ' aggiungo layer per info di export Dim nImpExpPartId As Integer = EgtCreateGroup(GDB_ID.ROOT) EgtSetName(nImpExpPartId, EXP_PART) ' ci scrivo nome macchina e tipo progetto EgtSetInfo(nImpExpPartId, EXP_MACHINE, CurrProj.sMachine) EgtSetInfo(nImpExpPartId, BTL_GEN_PROJTYPE, CurrProj.nType) '' se c'e' un prod collegato 'If Map.refProjManagerVM.CurrProj.nProdId > 0 Then ' ' scrivo quali sono i proj e prod in questo file ' Dim Prod As ProdFileM = DbControllers.m_ProdController.FindCoreByProdId(Map.refProjManagerVM.CurrProj.nProdId) ' EgtSetInfo(Map.refProjectVM.BTLStructureVM.BTLStructureM.nBTLInfoId, EXP_PROD, Map.refProjManagerVM.CurrProj.nProdId) ' For ProjIndex = 0 To Prod.nProjIdList.Count - 1 ' EgtSetInfo(Map.refProjectVM.BTLStructureVM.BTLStructureM.nBTLInfoId, EXP_PROJ & ProjIndex + 1, Prod.nProjIdList(ProjIndex)) ' Next 'Else ' EgtSetInfo(Map.refProjectVM.BTLStructureVM.BTLStructureM.nBTLInfoId, EXP_PROJ & 1, Map.refProjManagerVM.CurrProj.nProjId) 'End If ' salvo info inserite Map.refSceneHostVM.SaveProject() ' creo file zip Dim sZipToCreate As String = If(IsNothing(sExportFileName), ExportDlg.FileName, Map.refMainWindowVM.MainWindowM.sTempDir & "\" & sExportFileName & ".ngexp") If File.Exists(sZipToCreate) Then File.Delete(sZipToCreate) End If Try Using zip As New Ionic.Zip.ZipFile(sZipToCreate, Console.Out) ' impacchetto tutta la cartella del progetto Dim sProjectDirPath As String = If(CurrProj.nProdId > 0, CurrProj.sProdDirPath, CurrProj.sProjDirPath) For Each sFile As String In Directory.GetFiles(sProjectDirPath) zip.AddItem(sFile, "") Next ' salvo lo zip zip.Save() End Using Catch ex1 As Exception EgtOutLog("Exception in zip: " & ex1.ToString()) MessageBox.Show("Error in export file creation!") End Try ' elimino layer di esportazione EgtErase(nImpExpPartId) ' salvo eliminazione info inserite Map.refSceneHostVM.SaveProject() If bShowBuilding Then Map.refProjectVM.BTLStructureVM.ShowBuilding(True, False) Return sZipToCreate End Function #End Region ' ExportProject #Region "ImportProject" ''' ''' Returns a command that do Export. ''' Public ReadOnly Property ImportProject_Command As ICommand Get If m_cmdImportProject Is Nothing Then m_cmdImportProject = New Command(AddressOf ImportProject) End If Return m_cmdImportProject End Get End Property ''' ''' Execute the Export. This method is invoked by the ExportCommand. ''' Public Sub ImportProject() Dim CurrProd As ProjectFileVM = Map.refProdManagerVM.CurrProd ' lista di tutti gli errori riscontrati Dim ErrorList As New List(Of String) If Not ProjFileVM.VerifyProjectModification(CurrProj, ProjectType.PROJ) Then Return Dim sDir As String = String.Empty GetMainPrivateProfileString(S_GENERAL, K_LASTIMPDIR, "", sDir) ' apro finestra scelta file Dim ImportDlg As New Microsoft.Win32.OpenFileDialog() With {.DefaultExt = ".ngexp", .Filter = "ProjectExport (*.ngexp)|*.ngexp", .CheckFileExists = True, .ValidateNames = True} If ImportDlg.ShowDialog() <> True Then Return ' creo cartella temporanea di estrazione in Temp Dim sProjectimportDir As String = Map.refMainWindowVM.MainWindowM.sTempDir & "\ProjectImport" If Directory.Exists(sProjectimportDir) Then Directory.Delete(sProjectimportDir, True) End If Directory.CreateDirectory(sProjectimportDir) Try Using zip As New Ionic.Zip.ZipFile(ImportDlg.FileName, Console.Out) ' estraggo file da zip zip.ExtractAll(sProjectimportDir) End Using Catch ex1 As Exception EgtOutLog("Exception in zip: " & ex1.ToString()) MessageBox.Show("Impossibile importare file", "Errore") Return End Try ' carico progetto Dim sProjFromPath() As String = Directory.GetFiles(sProjectimportDir, "*.nge") Dim bOk = EgtOpenFile(sProjFromPath(0)) If Not bOk Then MessageBox.Show("Impossibile aprire il file", "Errore") Return End If ' recupero e verifico se ho a disposizione la macchina con cui e' stato creato il progetto Dim nImpExpPartId = EgtGetFirstNameInGroup(GDB_ID.ROOT, EXP_PART) Dim sMachine As String = "" EgtGetInfo(nImpExpPartId, EXP_MACHINE, sMachine) ' se la macchina del progetto in apertura non è tra le macchine disponibili lo segnalo e apro un progetto vuoto If IsNothing(Map.refMachinePanelVM.MachineList.FirstOrDefault(Function(x) x.Name = sMachine)) Then MessageBox.Show(EgtMsg(61885), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) 'Error Return End If Dim Machine As Machine = Map.refMachinePanelVM.MachineList.FirstOrDefault(Function(x) x.Name = sMachine) Dim nType As Integer = BWType.NULL EgtGetInfo(nImpExpPartId, BTL_GEN_PROJTYPE, nType) If IsNothing(Machine) OrElse nType = BWType.NULL Then MessageBox.Show(EgtMsg(61885), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) 'Error Return End If ' elimino part di esportazione EgtErase(nImpExpPartId) ' leggo proj e prod presenti dai layer BTLInfo Dim ImportProjIdList As New List(Of Integer) Dim NewProjIdList As New List(Of Integer) Dim BTLInfoIdList As New List(Of Integer) Dim BTLFileNameList As New List(Of String) Dim CurrImportProjId As Integer Dim nBTLInfoLayerId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, BTLINFO) While nBTLInfoLayerId <> GDB_ID.NULL ' recupero il ProjId EgtGetInfo(nBTLInfoLayerId, BTL_PRT_PROJ, CurrImportProjId) If CurrImportProjId > 0 Then ImportProjIdList.Add(CurrImportProjId) BTLInfoIdList.Add(nBTLInfoLayerId) ' recupero nome file BTL Associato Dim sBTLFileName As String = "" EgtGetInfo(nBTLInfoLayerId, BTLFILENAME, sBTLFileName) BTLFileNameList.Add(sBTLFileName) End If nBTLInfoLayerId = EgtGetNextName(nBTLInfoLayerId, BTLINFO) End While If Not ImportProjIdList.Count > 0 Then MessageBox.Show("Nessun progetto trovato all'interno del file importato", "Errore") End If ' carico i proj For nProjIndex = 0 To ImportProjIdList.Count - 1 Dim nImportProjId As Integer = ImportProjIdList(nProjIndex) ' inizializzo nuovo proj Dim nNewProjId As Integer = 0 Dim sNewProjDir As String = "" InitNewProject(nNewProjId, sNewProjDir, nType, Machine) NewProjIdList.Add(nNewProjId) ' imposto ProjId di caricamento m_nLoadingProjId = nImportProjId ' costruisco BTLStructure del proj Map.refProjectVM.BTLStructureVM = New BTLStructureVM(BTLStructureM.CreateBTLStructure(nImportProjId)) ' scrivo info proj su tutti i pezzi di questo progetto For Each BTLPart In Map.refProjectVM.BTLStructureVM.BTLPartVMList EgtSetInfo(BTLPart.nPartId, BTL_PRT_PROJ, nNewProjId) Next ' cambio indicazione proj in gruppo di assemblaggio Dim AsseBaseId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, ASSEBASE) While AsseBaseId <> GDB_ID.NULL Dim nAsseBaseProj As Integer = 0 EgtGetInfo(AsseBaseId, BTL_PRT_PROJ, nAsseBaseProj) If nAsseBaseProj = nImportProjId Then EgtSetInfo(AsseBaseId, BTL_PRT_PROJ, NewProjIdList(nProjIndex)) Exit While End If AsseBaseId = EgtGetNextName(AsseBaseId, ASSEBASE) End While ' riporto nuovo ProjId nel layer BTLInfo EgtSetInfo(BTLInfoIdList(nProjIndex), BTL_PRT_PROJ, nNewProjId) ' resetto tutti gli stati di CALC For Each BTLPart In Map.refProjectVM.BTLStructureVM.BTLPartVMList BTLPart.ResetCalcTotalPart() Next ' salvo modifiche fatte al progetto bOk = bOk AndAlso Map.refSceneHostVM.MainController.SaveProject() If bOk Then ' copio file BTL e progetto Dim sBTLFromPath As String = sProjectimportDir & "\" & BTLFileNameList(nProjIndex) & ".btl" Dim sProjFileName As String = sNewProjDir & "\" & nNewProjId.ToString("0000") & ".nge" If sProjFromPath.Count > 0 AndAlso Not String.IsNullOrWhiteSpace(sProjFromPath(0)) Then Try If Not String.IsNullOrWhiteSpace(sBTLFromPath) AndAlso File.Exists(sBTLFromPath) Then Dim sBtlToPath As String = sNewProjDir & "\" & Path.GetFileName(sBTLFromPath) File.Copy(sBTLFromPath, sBtlToPath) Else ErrorList.Add(String.Format("File BTL del progetto {0} non trovato", nImportProjId)) End If File.Copy(sProjFromPath(0), sProjFileName) Catch ex As Exception EgtOutLog("Impossibile copiare il file") MessageBox.Show("Impossibile copiare il file del progetto", "Errore") Return End Try End If ' aggiorno Db Dim sBTLFileName As String = BTLFileNameList(nProjIndex) Dim ExportDate As DateTime DateTime.TryParse(Map.refProjectVM.BTLStructureVM.BTLStructureM.m_sEXPDATE & " " & Map.refProjectVM.BTLStructureVM.BTLStructureM.m_sEXPTIME, ExportDate) DbControllers.m_ProjController.UpdateInfo(nNewProjId, sBTLFileName, Map.refProjectVM.BTLStructureVM.sLISTNAME, ExportDate, nType, Machine.Name) Else ' elimino da Db DbControllers.m_ProjController.DeleteProj(nNewProjId) End If ' aggiorno BTLParts su DB DbControllers.m_ProjController.UpdateBtlParts(nNewProjId, Map.refProjectVM.BTLStructureVM.BTLStructureM.BTLPartMList) ' resetto stato new DbControllers.m_ProjController.ResetNew(nNewProjId) ' resetto lock DbControllers.m_ProjController.LockByProjId(nNewProjId, False) DbControllers.m_ProjController.ResetController() Next ' se tutte le operazioni precedenti sono andate a buon fine If bOk Then ' sostituisco indicazione nuovi proj nei pezzi Dim nDuploLayerId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, "DuploBase") Dim nDuploId As Integer = EgtGetFirstInGroup(nDuploLayerId) While nDuploId <> GDB_ID.NULL ' recupero vecchio proj Dim nOldProjId As Integer EgtGetInfo(nDuploId, BTL_PRT_PROJ, nOldProjId) ' lo cerco nella lista Dim nOldProjIndex As Integer = ImportProjIdList.IndexOf(nOldProjId) ' lo sostituisco EgtSetInfo(nDuploId, BTL_PRT_PROJ, NewProjIdList(nOldProjIndex)) nDuploId = EgtGetNext(nDuploId) End While ' resetto CurrProd per evitare di leggero valori produzione dal Db di quel progetto Map.refProdManagerVM.CurrProd = Nothing ' carico Machgroup che non verrebbero altrimenti importati Map.refProjectVM.MachGroupPanelVM = New MyMachGroupPanelVM(MyMachGroupPanelM.CreateMyMachGroupPanel(Map.refMachinePanelVM.MachineList.ToList())) If Map.refProjectVM.MachGroupPanelVM.MachGroupVMList.Count > 0 Then ' inizializzo nuovo progetto PROD Dim nProdId As Integer = 0 Dim sProdDir As String = "" Map.refProdManagerVM.InitNewProject(NewProjIdList(0), nProdId, sProdDir) ' setto il PType del Prod DbControllers.m_ProdController.UpdatePType(nProdId, nType) ' setto la Macchina associata al Prod DbControllers.m_ProdController.UpdateMachine(nProdId, sMachine) For Each MachGroup As MyMachGroupVM In Map.refProjectVM.MachGroupPanelVM.MachGroupVMList ' aggiorno ProdId sui MachGroup EgtSetInfo(MachGroup.Id, MGR_RPT_PRODID, nProdId) ' resetto tutti gli stati di CALC MachGroup.ResetCalcTotalMachGroup() Next ' salvo il progetto PROD EgtSaveFile(sProjFromPath(0), NGE.CMPTEXT) ' copio file progetto Dim sProjPath As String = String.Empty 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 ' aggiungo altri proj a prod For Each nProjId In NewProjIdList DbControllers.m_ProdController.AddProj(nProdId, nProjId) Next Else ' elimino da DB DbControllers.m_ProdController.DeleteProd(nProdId) End If Dim MyMachGroupList As New List(Of MyMachGroupM) If Not IsNothing(Map.refProjectVM.MachGroupPanelVM) Then For Each MachGroup In Map.refProjectVM.MachGroupPanelVM.m_MyMachGroupPanelM.MachGroupMList MyMachGroupList.Add(MachGroup) Next End If ' aggiorno pezzi su Db DbControllers.m_ProdController.UpdateMachGroup(nProdId, MyMachGroupList) ' resetto lock DbControllers.m_ProdController.LockByProdId(nProdId, False) End If DbControllers.m_ProdController.ResetController() End If ' imposto progetto corrente If NewProjIdList.Count > 0 Then SetCurrProj(NewProjIdList(0)) OpenProject(CurrProj) End If ' ripristino eventuale CurrProd precedente Map.refProdManagerVM.CurrProd = CurrProd ''' imposto progetto corrente ''If NewProjIdList.Count > 0 Then SetCurrProj(NewProjIdList(0)) ''' costruisco BTLStructure del proj ''Map.refProjectVM.BTLStructureVM = New BTLStructureVM(BTLStructureM.CreateBTLStructure(NewProjIdList(0))) ''' mostro tutti i pezzi ''Map.refShowBeamPanelVM.ShowAll() ''EgtZoom(ZM.ALL, True) ''' aggiungo il file in apertura alla lista degli MRU ''If Not IsNothing(CurrProj.ProjFileM) AndAlso Not IsNothing(CurrProj.sProjPath) Then Map.refProjManagerVM.m_MruFiles.Add(CurrProj.sProjPath) ''' imposto macchina del progetto ''Map.refMachinePanelVM.SelectedMachine = Machine ''' aggiorno le colonne in base al tipo progetto ''Map.refRawPartListVM.UpdateColumns(Map.refProjectVM.BTLStructureVM.BTLStructureM.nPROJTYPE) ''Map.refPartInRawPartListVM.UpdateColumns(Map.refProjectVM.BTLStructureVM.BTLStructureM.nPROJTYPE) ''DbControllers.m_ProjController.LockByProjId(Map.refProjManagerVM.CurrProj.nProjId, True) ''' carico lista macchine e macchina del progetto per il pulsante Reset Macchina del CALCPanel ''Map.refCALCPanelVM.LoadMachineList() ''SectionXMaterial.SetType(nType) ''ManageView.UpdateBWType(nType) ''Map.refPartManagerVM.LockVisibilityUpdate() ''' imposto flag secondo tipo di progetto (travi o pareti) ''Dim sBTLFlag As String = If(nType = Core.ConstBeam.BWType.BEAM, K_BTLFLAG, K_WALLBTLFLAG) ''Dim nFlag As Integer = GetMainPrivateProfileInt(S_IMPORT, sBTLFlag, EIB_FL.TS3_POS + EIB_FL.SORT + EIB_FL.USEUATTR) ''EgtBeamSetFlag(nFlag) ''Map.refProjectVM.SetOptimizePanel_Visibility(Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.WALL) ''' aggiorno titolo ''Map.refMainWindowVM.UpdateTitle() End Sub #End Region ' ImportProject #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 Dim bSaved As Boolean = True If Map.refProjManagerVM.CurrProj.bIsNew Or EgtGetModified() OrElse Map.refCALCPanelVM.IsMachineModified() Then Select Case MessageBox.Show(EgtMsg(61877), "", MessageBoxButton.YesNoCancel, MessageBoxImage.Question) Case MessageBoxResult.Yes Save() Case MessageBoxResult.Cancel Return Case Else ' No If Map.refProjManagerVM.CurrProj.bIsNew Then MessageBox.Show(EgtMsg(61878), "", MessageBoxButton.OK, MessageBoxImage.Exclamation) Return End If ' resetto stato modificato Map.refSceneHostVM.MainController.ResetModified() bSaved = False End Select End If Dim nProdId As Integer = Map.refProjManagerVM.CurrProj.nProdId If nProdId > 0 Then Map.refProdManagerVM.SetCurrProd(nProdId) Map.refProdManagerVM.CurrProd.SetReloadProject(Not bSaved) Else 'creo nuova ottimizzazione da progetto corrente NewProdFromProj() '' chiedo se aggiungere ad ottimizzazione già presente o creare nuova 'Select Case MessageBox.Show("Aggiungere ad ottimizzazione già esistente?", "", MessageBoxButton.YesNoCancel, MessageBoxImage.Information) ' Case MessageBoxResult.No ' 'creo nuova ottimizzazione da progetto corrente ' NewProdFromProj() ' Case MessageBoxResult.Yes ' ' 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, True) ' If IsNothing(DialogResult) OrElse Not DialogResult Then Return ' ' se prod selezionato ' If Not IsNothing(OpenProjectFileDialogVM.SelProject.nProdId) AndAlso OpenProjectFileDialogVM.SelProject.nProdId > 0 Then ' Dim nCurrCtx As Integer = EgtGetCurrentContext() ' Dim nTempCtx As Integer = EgtInitContext() ' Dim bOk As Boolean = nTempCtx <> 0 ' If bOk Then ' ' inizializzo gestore lavorazioni ' bOk = EgtInitMachMgr(Map.refMainWindowVM.MainWindowM.sMachinesRoot, Map.refMainWindowVM.MainWindowM.sToolMakersDir) ' ' apro il prod ' bOk = bOk AndAlso EgtOpenFile(OpenProjectFileDialogVM.SelProject.sProdPath) ' '''' calcolo BBox globale ' '''Dim b3Parts As BBox3d ' '''Dim nProdPartId As Integer = EgtGetFirstPart() ' '''While nProdPartId <> GDB_ID.NULL ' ''' Dim b3Part As New BBox3d ' ''' EgtGetBBoxGlob(nProdPartId, 1, b3Part) ' ''' b3Parts.Add(b3Part) ' ''' nProdPartId = EgtGetNextPart(nProdPartId) ' '''End While ' ' inserisco proj nel prod selezionato ' bOk = bOk AndAlso EgtInsertFile(Map.refProjManagerVM.CurrProj.sProjPath) ' ' DA METTERE IN MERGE BTL, NON QUI!!! ' '''' deseleziono tutto ' '''EgtDeselectAll() ' '''' ciclo sui pezzi ' '''Dim nPartId As Integer = EgtGetFirstPart() ' '''While nPartId <> GDB_ID.NULL ' ''' ' se arrivano dal nuovo progetto ' ''' Dim nCurrProjId As Integer ' ''' EgtGetInfo(nPartId, PROJ, nCurrProjId) ' ''' If nCurrProjId = Map.refProjManagerVM.CurrProj.nProjId Then ' ''' ' sposto i pezzi per non averli sovrapposti ' ''' EgtMove(nCurrProjId, New Vector3d(0, b3Parts.DimY() + 500, 0)) ' ''' End If ' '''End While ' bOk = bOk AndAlso EgtSaveFile(OpenProjectFileDialogVM.SelProject.sProdPath, NGE.CMPTEXT) ' ' torno sul contesto corrente ' EgtSetCurrentContext(nCurrCtx) ' EgtDeleteContext(nTempCtx) ' End If ' If bOk Then ' ' riporto aggiunta proj a prod su Db ' DbControllers.m_ProdController.AddProj(OpenProjectFileDialogVM.SelProject.nProdId, Map.refProjManagerVM.CurrProj.nProjId) ' ' imposto currprod ' Map.refProdManagerVM.SetCurrProd(OpenProjectFileDialogVM.SelProject.nProdId) ' End If ' End If ' Case MessageBoxResult.Cancel ' Return 'End Select End If ' Ricavo il tipo di Warehouse settato nell'INI Dim nDefault As Integer = 1 If GetMainPrivateProfileInt(S_GENERAL, K_WAREHOUSE, nDefault) = WarehouseType.MEDIUM Then ' Se di tipo Medium confronto le Sezioni del BTL importato con quelle in Warehouse WarehouseWndVM.UpdateSectionXMaterial() 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