8e8d1c2a91
- 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
1244 lines
54 KiB
VB.net
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
|