Files
egtbeamwall/EgtBEAMWALL.ViewerOptimizer/ProjManager/ProjManagerVM.vb
T
Emmanuele Sassi 8e8d1c2a91 - Migliorata gestione assemblato non presente
- Correzione viste per travi
- Introdotto s/blocco dei duplo
- Introdotta traduzione dei messaggi macchina
- Migliorata gestione attivazione bottoni
- Bloccate colonne in edit durante Calc
- Aggiornamento quantita' in prod dopo cambio dimensioni
- Impedito Flip e Rot durante Calc
- Limitata considerazione pezzi in nesting a quelli ancora da aggiungere
- Gestione errori import BTL con messaggio errori
2022-01-29 10:24:24 +01:00

1244 lines
54 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_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"
''' <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
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"
''' <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
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"
''' <summary>
''' Returns a command that do Open.
''' </summary>
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
''' <summary>
''' Execute the Open. This method is invoked by the OpenCommand.
''' </summary>
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"
''' <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
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"
''' <summary>
''' Returns a command that do Export.
''' </summary>
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
''' <summary>
''' Execute the ImportBTL. This method is invoked by the ImportBTLCommand.
''' </summary>
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"
''' <summary>
''' Returns a command that do Export.
''' </summary>
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
''' <summary>
''' Execute the Export. This method is invoked by the ExportCommand.
''' </summary>
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"
''' <summary>
''' Returns a command that do Export.
''' </summary>
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
''' <summary>
''' Execute the Export. This method is invoked by the ExportCommand.
''' </summary>
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"
''' <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
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