6ccb91b658
- Aggiunta lettura Indice di lavorazione - Aggiunto test per ripartenza pareti con domanda - Agginta gestione parziale colonne in Supervisor
1062 lines
44 KiB
VB.net
1062 lines
44 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)
|
|
DbControllers.m_ProjController.UpdateInfo(nProjId, "Hand made", "", Date.MinValue, nType, Map.refMachinePanelVM.SelectedMachine.Name)
|
|
SetCurrProj(nProjId)
|
|
End If
|
|
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)
|
|
' 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
|
|
'' imposto macchina del progetto
|
|
'Map.refMachinePanelVM.SelectedMachine = Map.refMachinePanelVM.MachineList.FirstOrDefault(Function(x) x.Name = TempCurrProj.sMachine)
|
|
'' aggiorno le colonne in base al tipo progetto
|
|
'Map.refRawPartListVM.UpdateColumns(Map.refProjectVM.BTLStructureVM.nPROJTYPE)
|
|
'Map.refPartInRawPartListVM.UpdateColumns(Map.refProjectVM.BTLStructureVM.nPROJTYPE)
|
|
'm_CurrProj = TempCurrProj
|
|
'DbControllers.m_ProjController.LockByProjId(m_CurrProj.nProjId, True)
|
|
'' carico lista macchine e macchina del progetto per il pulsante Reset Macchina del CALCPanel
|
|
'Map.refCALCPanelVM.LoadMachineList()
|
|
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
|
|
' verifico se assemblato e lo annullo per salvataggio
|
|
Dim bShowBuilding As Boolean = Map.refShowBeamPanelVM.ShowBuilding_IsChecked
|
|
If bShowBuilding Then Map.refProjectVM.BTLStructureVM.ShowBuilding(False, False)
|
|
' verifico se solido e lo annullo per salvataggio
|
|
Dim bShowSolid As Boolean = False
|
|
If Not Map.refShowBeamPanelVM.bShowAll Then
|
|
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
|
|
' 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
|
|
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()
|
|
' 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)
|
|
bOk = True
|
|
Catch ex As Exception
|
|
EgtOutLog("Impossibile copiare il file")
|
|
bOk = False
|
|
End Try
|
|
' importo file
|
|
If bOk Then
|
|
SectionXMaterial.SetType(nType)
|
|
bOk = Map.refSceneHostVM.MainController.ImportProject(sBtlCopyPath, False)
|
|
End If
|
|
Dim sProjFileName As String = sProjDir & "\" & nProjId.ToString("0000") & ".nge"
|
|
If bOk Then
|
|
' salvo il progetto
|
|
bOk = EgtSaveFile(sProjFileName, NGE.CMPTEXT)
|
|
Else
|
|
EgtOutLog("Errore nell'importazione BTL")
|
|
End If
|
|
If bOk Then
|
|
' aggiorno Db
|
|
Dim sBTLFileName As String = Path.GetFileNameWithoutExtension(sFile)
|
|
'UpdateBTLFileName(nProjId, sBTLFileName)
|
|
Dim ExportDate As DateTime
|
|
DateTime.TryParse(Map.refProjectVM.BTLStructureVM.BTLStructureM.m_sEXPDATE & " " &
|
|
Map.refProjectVM.BTLStructureVM.BTLStructureM.m_sEXPTIME, ExportDate)
|
|
DbControllers.m_ProjController.UpdateInfo(nProjId, sBTLFileName, Map.refProjectVM.BTLStructureVM.sLISTNAME, ExportDate, nType, Map.refMachinePanelVM.SelectedMachine.Name)
|
|
SetCurrProj(nProjId)
|
|
Map.refMainWindowVM.UpdateTitle()
|
|
' mostro tutti i pezzi
|
|
Map.refShowBeamPanelVM.ShowAll()
|
|
Else
|
|
' elimino da Db
|
|
DbControllers.m_ProjController.DeleteProj(nProjId)
|
|
End If
|
|
' aggiorno titolo
|
|
Map.refMainWindowVM.UpdateTitle()
|
|
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 Sub ExportProject()
|
|
If Not ProjFileVM.VerifyProjectModification(CurrProj, ProjectType.PROJ) Then Return
|
|
If IsNothing(CurrProj) Then Return
|
|
' 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 ExportDlg.ShowDialog() <> True Then Return
|
|
' 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 nImpExpLayerId As Integer = EgtCreateGroup(GDB_ID.ROOT)
|
|
EgtSetName(nImpExpLayerId, EXP_LAYER)
|
|
' ci scrivo nome macchina e tipo progetto
|
|
EgtSetInfo(nImpExpLayerId, EXP_MACHINE, CurrProj.sMachine)
|
|
EgtSetInfo(nImpExpLayerId, 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 = ExportDlg.FileName
|
|
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(nImpExpLayerId)
|
|
End Sub
|
|
|
|
#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()
|
|
' 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 nImpExpLayerId = EgtGetFirstNameInGroup(GDB_ID.ROOT, EXP_LAYER)
|
|
Dim sMachine As String = ""
|
|
EgtGetInfo(nImpExpLayerId, 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(nImpExpLayerId, 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 layer di esportazione
|
|
EgtErase(nImpExpLayerId)
|
|
' 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
|
|
' riporto nuovo ProjId nel layer BTLInfo
|
|
EgtSetInfo(BTLInfoIdList(nProjIndex), BTL_PRT_PROJ, nNewProjId)
|
|
' 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
|
|
' salvo il progetto PROJ
|
|
Map.refSceneHostVM.SaveProject()
|
|
' 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
|
|
' 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)
|
|
' 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
|
|
' salvo il progetto PROD
|
|
Map.refSceneHostVM.SaveProject()
|
|
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))
|
|
' 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()
|
|
' 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
|
|
' 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
|
|
' 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
|