Files
egtbeamwall/EgtBEAMWALL.Optimizer/ProdManager/ProdManagerVM.vb
T

2192 lines
95 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.IO
Imports System.IO.Compression
Imports System.Windows.Threading
Imports EgtBEAMWALL.Core
Imports EgtBEAMWALL.DataLayer.DatabaseModels
Imports EgtUILib
Imports EgtWPFLib5
Imports Newtonsoft.Json
Public Class ProdManagerVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
Private DOWN_IMAGE As String = "pack://application:,,,/Resources/NewPage/down.png"
Private UP_IMAGE As String = "pack://application:,,,/Resources/NewPage/up.png"
Private PADLOCK_IMAGE As String = "pack://application:,,,/Resources/NewPage/padlock.png"
' Nome file NGE con i pezzi selezionati per effettuare UpdateBTL
Friend Const UPDATEBTL_NGE As String = "UpdateBTL.nge"
Private m_OpenProj_Timer As New DispatcherTimer
Private m_bOpenProj As Boolean = False
Private m_nProjIdToOpen As Integer = GDB_ID.NULL
Private m_OptimizerManager_IsEnabled As Boolean = True
Public ReadOnly Property OptimizerManager_IsEnabled As Boolean
Get
Return m_OptimizerManager_IsEnabled
End Get
End Property
Friend Sub SetOptimizerManagerIsEnabled(bIsEnabled As Boolean)
m_OptimizerManager_IsEnabled = bIsEnabled
NotifyPropertyChanged(NameOf(OptimizerManager_IsEnabled))
End Sub
Friend Property CurrProj As ProjFileVM
Get
Return ProjectManagerVM.CurrProj
End Get
Set(value As ProjFileVM)
ProjectManagerVM.CurrProj = value
End Set
End Property
Friend Property CurrProd As ProdFileVM
Get
Return ProjectManagerVM.CurrProd
End Get
Set(value As ProdFileVM)
ProjectManagerVM.CurrProd = value
End Set
End Property
Private m_TempCurrProd As ProdFileVM
Friend Property TempCurrProd As ProdFileVM
Get
Return m_TempCurrProd
End Get
Set(value As ProdFileVM)
m_TempCurrProd = value
End Set
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 PdId As Integer = 0
Dim sPdId As String = Path.GetFileNameWithoutExtension(DirectCast(FileName, String).Replace("__", "_"))
Integer.TryParse(sPdId, PdId)
Dim PdFileM = DbControllers.m_ProdController.FindCoreByProdId(PdId)
If IsNothing(PdFileM) Then
m_MruFiles.Remove(FileName)
Else
Dim PdFileVM = New ProdFileVM(PdFileM)
IdAndBTLFileNames.Add(sPdId & " | " & PdFileVM.sName)
End If
Next
Return IdAndBTLFileNames
End Get
End Property
Private m_UpdateBTL_Visibility As Visibility = Visibility.Collapsed
Public Property UpdateBTL_Visibility As Visibility
Get
Return m_UpdateBTL_Visibility
End Get
Set(value As Visibility)
m_UpdateBTL_Visibility = value
End Set
End Property
Private m_AddProj_Visibility As Visibility
Public ReadOnly Property AddProj_Visibility As Visibility
Get
Return m_AddProj_Visibility
End Get
End Property
' indice ultimo progetto
Private m_nLastProdId As Integer
Friend ReadOnly Property nLastProdId As Integer
Get
Return m_nLastProdId
End Get
End Property
Public ReadOnly Property nProjType As BWType
Get
Return If(Not IsNothing(CurrProj), CurrProj.nType, BWType.NULL)
End Get
End Property
Public ReadOnly Property nProdType As BWType
Get
Return If(Not IsNothing(CurrProd), CurrProd.nType, BWType.NULL)
End Get
End Property
Private m_IsStartBtnOpen As Boolean = False
Public Property IsStartBtnOpen As Boolean
Get
Return m_IsStartBtnOpen
End Get
Set(value As Boolean)
m_IsStartBtnOpen = value
End Set
End Property
Friend Sub SetIsStartBtnOpen(bIsStartBtnOpen As Boolean)
m_IsStartBtnOpen = bIsStartBtnOpen
NotifyPropertyChanged(NameOf(IsStartBtnOpen))
End Sub
Private m_IsSaveBtnOpen As Boolean = False
Public Property IsSaveBtnOpen As Boolean
Get
Return m_IsSaveBtnOpen
End Get
Set(value As Boolean)
m_IsSaveBtnOpen = value
End Set
End Property
Friend Sub SetIsSaveBtnOpen(bIsSaveBtnOpen As Boolean)
m_IsSaveBtnOpen = bIsSaveBtnOpen
NotifyPropertyChanged(NameOf(IsSaveBtnOpen))
End Sub
Private m_IsBtlBtnOpen As Boolean = False
Public Property IsBtlBtnOpen As Boolean
Get
Return m_IsBtlBtnOpen
End Get
Set(value As Boolean)
m_IsBtlBtnOpen = value
End Set
End Property
Friend Sub SetIsBtlBtnOpen(bIsBtlBtnOpen As Boolean)
m_IsBtlBtnOpen = bIsBtlBtnOpen
NotifyPropertyChanged(NameOf(IsBtlBtnOpen))
End Sub
Private m_nListProjAsseBase As New Dictionary(Of Integer, Integer)
Public Property ListProjAsseBase As Dictionary(Of Integer, Integer)
Get
Return m_nListProjAsseBase
End Get
Set(value As Dictionary(Of Integer, Integer))
m_nListProjAsseBase = value
NotifyPropertyChanged(NameOf(ListProjAsseBase))
End Set
End Property
Private m_BtlImage As String = DOWN_IMAGE
Public ReadOnly Property BtlImage As String
Get
Return m_BtlImage
End Get
End Property
Friend Sub SetBtlImage(value As String)
m_BtlImage = value
NotifyPropertyChanged(NameOf(BtlImage))
End Sub
Private m_OpenImage As String = DOWN_IMAGE
Public ReadOnly Property OpenImage As String
Get
Return m_OpenImage
End Get
End Property
Friend Sub SetOpenImage(value As String)
m_OpenImage = value
NotifyPropertyChanged(NameOf(OpenImage))
End Sub
Private m_SaveImage As String = DOWN_IMAGE
Public ReadOnly Property SaveImage As String
Get
Return m_SaveImage
End Get
End Property
Friend Sub SetSaveImage(value As String)
m_SaveImage = value
NotifyPropertyChanged(NameOf(SaveImage))
End Sub
Private m_BTLDataWnd As BTLDataWndVM
Public ReadOnly Property BTLDataWnd As BTLDataWndVM
Get
Return m_BTLDataWnd
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_cmdImportBTL As ICommand
Private m_cmdExportProject As ICommand
Private m_cmdImportProject As ICommand
Private m_cmdAddProj As ICommand
Private m_cmdAddBTL As ICommand
Private m_cmdShowPopUpStartBtnCmd As ICommand
Private m_cmdShowPopUpSaveBtnCmd As ICommand
Private m_cmdShowPopUpBtlBtnCmd As ICommand
#Region "ToolTip"
'Proprietà ToolTip
Public ReadOnly Property NewToolTip As String
Get
Return EgtMsg(30501)
End Get
End Property
Public ReadOnly Property OpenToolTip As String
Get
Return EgtMsg(30502)
End Get
End Property
Public ReadOnly Property SaveToolTip As String
Get
Return EgtMsg(30503)
End Get
End Property
Public ReadOnly Property SaveAsToolTip As String
Get
Return EgtMsg(30504)
End Get
End Property
Public ReadOnly Property ImportBTL_ToolTip As String
Get
Return EgtMsg(61840)
End Get
End Property
Public ReadOnly Property ImportProject_ToolTip As String
Get
Return EgtMsg(61839)
End Get
End Property
Public ReadOnly Property ExportProject_ToolTip As String
Get
Return EgtMsg(61838)
End Get
End Property
Public ReadOnly Property AddProj_ToolTip As String
Get
Return EgtMsg(61921)
End Get
End Property
#End Region ' ToolTip
#End Region ' Field & Properties
#Region "CONSTRUCTORS"
Sub New()
Map.SetRefProdManagerVM(Me)
' Leggo ultimo indice di progetto
m_nLastProdId = GetMainPrivateProfileInt(S_GENERAL, K_PROJSINDEX, 1)
' Impostazioni MruLists
m_MruFiles.Init(S_MRUPRODFILES, 8)
' leggo attivazione update btl
If GetMainPrivateProfileInt(S_GENERAL, K_UPDATEBTL, 0) > 0 Then UpdateBTL_Visibility = Visibility.Visible
' attivo bottone AddProj
If GetMainPrivateProfileInt(S_GENERAL, K_ADDPROJ, 0) = 1 Then
m_AddProj_Visibility = Visibility.Visible
Else
m_AddProj_Visibility = Visibility.Collapsed
End If
' imposto timer di apertura da ottimizzatore
m_OpenProj_Timer.Interval = TimeSpan.FromMilliseconds(500)
AddHandler m_OpenProj_Timer.Tick, AddressOf OpenProject_Tick
m_OpenProj_Timer.Start()
End Sub
#End Region ' Constructors
#Region "METHODS"
Public Function SetCurrProj(nProjId As Integer) As Boolean
Return ProjectManagerVM.SetCurrProj(nProjId)
End Function
Public Function UpdateCurrProj() As Boolean
Return SetCurrProj(CurrProj.nProjId)
End Function
Private Function InitNewProj(ByRef nProjId As Integer, ByRef sProjectDir As String, nType As BWType, Machine As String) As Boolean
' se non ho ricevuto numero progetto da sovrascrivere
If nProjId = 0 Then
' richiedo indice nuovo progetto
nProjId = DbControllers.m_ProjController.GetNextIndex(Map.refMainWindowVM.MainWindowM.GetKeyNumber())
End If
' salvo dati creazione progetto
DbControllers.m_ProjController.Update(New ProjModel() With {.ProjId = nProjId,
.DtCreated = DateTime.Now(),
.PType = nType,
.Machine = Machine})
Return True
End Function
Friend Function InitNewProd(ByRef nProjId As Integer, ByRef nProdId As Integer, ByRef sProjectDir As String) As Boolean
' richiedo indice nuovo progetto
nProdId = DbControllers.m_ProdController.GetNextIndex(nProjId, Map.refMainWindowVM.MainWindowM.GetKeyNumber())
If nProdId <= 0 Then Return False
sProjectDir = refMainWindowVM.MainWindowM.sProdsDir & "\" & nProdId.ToString("0000")
' creo cartella nuovo progetto
If Not Directory.Exists(sProjectDir) Then
Directory.CreateDirectory(sProjectDir)
Else
Dim di As 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
Public Function SetCurrProd(nProdId As Integer) As Boolean
Return ProjectManagerVM.SetCurrProd(nProdId)
End Function
Public Sub OpenProject_Tick()
If Not m_bOpenProj Then Return
m_bOpenProj = False
' recupero progetto da Id
Dim DbProject As ProdFileM = DbControllers.m_ProdController.FindCoreByProdId(m_nProjIdToOpen)
Dim ProjectVM As New ProdFileVM(DbProject)
' verifico se progetto modificato, e chiedo se salvare
If Not ProjFileVM.VerifyProjectModification(ProjectManagerVM.CurrProj, ProjectType.PROJ) Then Return
OpenProject(ProjectVM)
m_nProjIdToOpen = GDB_ID.NULL
End Sub
Private Function CreateNewProd(Optional bFromImportBtl As Boolean = True) As Boolean
' creo proj
Dim nProjId As Integer = 0
Dim sBTLFileName As String = ""
Dim nType As BWType = BWType.NULL
Dim Machine As MyMachine = Nothing
If bFromImportBtl Then
If Not CreateNewProj(Nothing, nProjId, sBTLFileName, nType, Machine) Then
EgtOutLog("Errore! Creazione nuovo prod fallita!")
Return False
End If
Else
If Not CreateNewEmptyProj(nProjId, nType, Machine) Then
EgtOutLog("Errore! Creazione nuovo prod vuoto fallita!")
Return False
End If
End If
' inizializzo nuovo progetto PROD
Dim nProdId As Integer = 0
Dim sProdDir As String = ""
If Not InitNewProd(nProjId, nProdId, sProdDir) Then
EgtOutLog("Errore! Impossibile creare nuovo progetto!")
Return False
End If
' setto il PType del Prod
DbControllers.m_ProdController.UpdatePType(nProdId, nType)
' setto la Macchina associata al Prod
DbControllers.m_ProdController.UpdateMachine(nProdId, Machine.Name)
' creo cartella per Proj
Dim sProjDirPath As String = sProdDir & "\Projs\" & nProjId.ToString("0000")
Try
Directory.CreateDirectory(sProjDirPath)
Catch ex As Exception
EgtOutLog("Errore! Impossibile creare cartella del Proj!")
End Try
' copio file importato
Dim sImportFileTempPath As String = Map.refMainWindowVM.MainWindowM.sTempDir & "\" & sBTLFileName
Dim sImportFileProdPath As String = sProjDirPath & "\" & sBTLFileName
If File.Exists(sImportFileTempPath) Then
Try
File.Copy(sImportFileTempPath, sImportFileProdPath)
Catch ex As Exception
EgtOutLog("Errore! Impossibile copiare il file importato nella cartella del progetto!")
End Try
Try
File.Delete(sImportFileTempPath)
Catch ex As Exception
EgtOutLog("Errore! Impossibile cancellare il file importato dalla cartella Temp!")
End Try
End If
' salvo il progetto
Dim sProdFileName As String = sProdDir & "\" & nProdId.ToString("0000") & ".nge"
If Not EgtSaveFile(sProdFileName, NGE.CMPTEXT) Then
'' elimino da DB
''DbControllers.m_ProdController.DeleteProd(nProdId, True)
EgtOutLog("Errore! Impossibile salvare il progetto!")
Return False
End If
' resetto stato new del proj
DbControllers.m_ProjController.ResetNew(nProjId)
' imposto currprod
SetCurrProd(nProdId)
' recupero indice di modifica progetto quando caricato
Dim CommIndex As Integer = -1
Dim ActiveSessionList As List(Of StatusMapModel) = DbControllers.m_StatusMapController.GetProd(m_SupervisorId)
For Each ActiveSession In ActiveSessionList
If Not IsNothing(ProjectManagerVM.CurrProd) AndAlso ActiveSession.ItemId = ProjectManagerVM.CurrProd.nProdId Then
CommIndex = ActiveSession.Index
End If
Next
' carico gruppi di lavorazione
Map.refProjectVM.MachGroupPanelVM = New MyMachGroupPanelVM(MyMachGroupPanelM.CreateMyMachGroupPanel(Map.refMachinePanelVM.MachineList.ToList()))
If IsNothing(Map.refProjectVM.MachGroupPanelVM) Then
If Not IsNothing(ProjectManagerVM.CurrProd) Then
OpenProject(ProjectManagerVM.CurrProd)
Else
NewProject()
End If
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(62581), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) 'Error opening file
EgtOutLog("Errore! Caricamento dei gruppi di lavorazione fallito!")
Return False
End If
' fisso indice sessione di comunicazione
If CommIndex > -1 Then
ProjectManagerVM.CurrProd.SetModificationIndex(CommIndex)
End If
' calcolo volumi pezzi
For Each Part In Map.refProjectVM.BTLStructureVM.BTLPartVMList
Part.CalcBTLPartVolume()
Next
Core.ViewPanelVM.UpdateBWType(nType)
' imposto macchina del progetto
Map.refMachinePanelVM.SelectedMachine = Map.refMachinePanelVM.MachineList.FirstOrDefault(Function(x) String.Equals(x.Name, ProjectManagerVM.CurrProd.sMachine, StringComparison.OrdinalIgnoreCase))
Map.refMachinePanelVM.SetSelMachineName(Map.refMachinePanelVM.SelectedMachine.Name)
Map.refMachinePanelVM.SetStrategyManagerIsChecked(True)
' aggiorno le colonne in base al tipo progetto
Map.refRawPartListVM.UpdateColumns(nType)
Map.refFeatureInPartInRawPartListVM.UpdateColumns(nType)
' gestisco visibilita' bottoni
Map.refProjectVM.SetOptimizePanel_Visibility(True)
' aggiorno lista possibili nesting
Map.refOptimizePanelVM.UpdateOriginTypeList(EgtGetFirstNameInGroup(GDB_ID.ROOT, "RawParts") <> GDB_ID.NULL)
' aggiorno visibilità bottone Muovi pezzi
Map.refRawPartManagerVM.UpdateMovePartInRawPartVisibility()
' carico lista macchine e macchina del progetto per il pulsante Reset Macchina del CALCPanel
Map.refCALCPanelVM.LoadMachineList()
Map.refPartManagerVM.LockVisibilityUpdate()
' seleziono primo pezzo
If Map.refProjectVM.BTLStructureVM.BTLPartVMList.Count > 0 Then
Map.refProjectVM.BTLStructureVM.SetSelBTLPart(Map.refProjectVM.BTLStructureVM.BTLPartVMList(0))
End If
'LoadingWndHelper.UpdateLoadingWnd(ActiveIds.IMPORTBTL, 3, EgtMsg(63006), 70, 100) ' Loading graphics
'LoadingWndHelper.CloseLoadingWnd(ActiveIds.IMPORTBTL)
' Ricavo il tipo di Warehouse settato nell'INI
Dim nDefault As Integer = 2
If GetMainPrivateProfileInt(S_WAREHOUSE, EgtBEAMWALL.Core.ConstIni.K_TYPE, nDefault) = WarehouseType.MEDIUM Then
' Se di tipo Medium confronto le Sezioni del BTL importato con quelle in Warehouse
WarehouseWndVM.UpdateSectionXMaterial()
End If
' aggiorno nome macchina in statusbar
Map.refMyStatusBarVM.RefreshMachName()
' Aggiorno titolo
Map.refMainWindowVM.UpdateTitle()
' Aggiungo a ButtonBuildingList i BTL
Map.refSceneBuildingVM.ButtonBuildingList.Clear()
If m_nListProjAsseBase.Count > 0 Then
For Each ItemProd As Integer In ProjectManagerVM.CurrProd.nProjIdList
Dim TempProj As ProjFileM = DbControllers.m_ProjController.FindByProjIdConv(ItemProd)
If m_nListProjAsseBase.ContainsKey(ItemProd) Then
Map.refSceneBuildingVM.ButtonBuildingList.Add(New ButtonBuildingItem(ItemProd, m_nListProjAsseBase(ItemProd), TempProj.sBTLFileName))
Else
EgtOutLog("Errore nListProjAsseBase non trovato: " & ItemProd)
End If
Next
End If
Return True
End Function
Private Function CreateNewProj(ProdFileVM As ProdFileVM, Optional ByRef nProjId As Integer = 0, Optional ByRef sBTLFileName As String = "", Optional ByRef nType As BWType = BWType.NULL, Optional ByRef Machine As MyMachine = Nothing) As Boolean
Dim sDir As String = String.Empty
GetMainPrivateProfileString(S_GENERAL, K_LASTIMPDIR, "", sDir)
' apro finestra scelta file
Dim sImportFilePath As String = ""
Dim BTLDlg As New Microsoft.Win32.OpenFileDialog() With {
.Title = EgtMsg(61840),
.DefaultExt = ".btl",
.Filter = "BTL (*.btl)|*.btl" &
"|BTLX (*.btlx)|*.btlx",
.InitialDirectory = If(Directory.Exists(sDir), sDir, ""),
.CheckFileExists = True,
.ValidateNames = True}
If BTLDlg.ShowDialog() Then
sImportFilePath = BTLDlg.FileName
Else
' Abilito pulsante assemblato
Map.refShowBeamPanelVM.ShowBuilding_IsEnabled = True
Return False
End If
Dim sProjDir As String = ""
' verifico se non e' tra i BTL gia' importati
sBTLFileName = Path.GetFileName(sImportFilePath)
Dim nAlreadyImported As Integer = DbControllers.m_ProjController.AlreadyImported(Path.GetFileNameWithoutExtension(sImportFilePath))
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 EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(61942), EgtMsg(15003), 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 False
End Select
End If
End If
' Disabilito pulsante assemblato
Map.refShowBeamPanelVM.ShowBuilding_IsEnabled = False
If IsNothing(ProdFileVM) Then
' 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
If Map.refMachinePanelVM.MachineList.Count = 1 AndAlso DirectCast(Map.refMachinePanelVM.MachineList(0), MyMachine).nType <> MachineType.BOTH Then
Machine = DirectCast(Map.refMachinePanelVM.MachineList(0), MyMachine)
nType = Machine.nType
Else
Dim ProjectTypeWndVM As New ProjectTypeWndVM()
Dim ProjectTypeWnd As New ProjectTypeWndV(Application.Current.MainWindow, ProjectTypeWndVM)
If ProjectTypeWnd.ShowDialog() Then
Machine = ProjectTypeWndVM.SelMachine
nType = ProjectTypeWndVM.nSelType
Else
Return False
End If
End If
'LoadingWndHelper.OpenLoadingWnd(ActiveIds.IMPORTBTL, 3, EgtMsg(63008), EgtMsg(63009), 50) ' BTL file importing ' Reading BTL file
' creo progetto per file BTL
If Not CreateFirstBTLProj(sImportFilePath, nType, Machine, nProjId, sProjDir) Then Return False
Else
' creo progetto per file BTL
If Not AddNewBTLProj(sImportFilePath, ProdFileVM, nProjId, sProjDir) Then Return False
End If
' carico filtri di ricerca
Map.refProjectVM.BTLStructureVM.LoadFilters()
' gestisco log di importazione
ManageImportLog(nProjId, sProjDir)
' Abilito pulsante assemblato
Map.refShowBeamPanelVM.ShowBuilding_IsEnabled = True
'LoadingWndHelper.CloseLoadingWnd(ActiveIds.IMPORTBTL)
Return True
End Function
Private Function CreateFirstBTLProj(sImportFilePath As String, nType As BWType, Machine As MyMachine, ByRef nProjId As Integer, ByRef sProjDir As String) As Boolean
LoadingWndHelper.OpenLoadingWnd(ActiveIds.IMPORTBTL, 3, EgtMsg(63008), EgtMsg(63009), 50) ' BTL file importing ' Reading BTL file
' copio file BTL
Dim sBtlCopyPath As String = Map.refMainWindowVM.MainWindowM.sTempDir & "\" & Path.GetFileName(sImportFilePath)
Dim bOk = False
Try
File.Copy(sImportFilePath, sBtlCopyPath, True)
bOk = True
Catch ex As Exception
EgtOutLog("Errore! Impossibile copiare il file BTL!")
Return False
End Try
' inizializzo nuovo progetto
If Not InitNewProj(nProjId, sProjDir, nType, Machine.Name) Then
EgtOutLog("Errore! Impossibile creare indice nuovo progetto!")
' elimino file Btl copiato
Try
File.Delete(sBtlCopyPath)
Catch ex As Exception
EgtOutLog("Errore! Eliminazione file BTL copiato fallita!")
End Try
Return False
End If
' verifico tipo di file e recupero flag di importazione
Dim nFileType As Integer = EgtGetFileType(sBtlCopyPath)
If nFileType <> FT.BTL AndAlso nFileType <> FT.BTLX Then
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(10005), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' File type unknown - Error
EgtOutLog("Errore! Estensione progetto sconosciuta!")
Return False
End If
Dim sBTLFlag As String
If nType = BWType.BEAM Then
sBTLFlag = K_BTLFLAG
Else
sBTLFlag = K_WALLBTLFLAG
End If
Dim nFlag As Integer = GetMainPrivateProfileInt(S_IMPORT, sBTLFlag, EIB_FL.TS3_POS + EIB_FL.SORT + EIB_FL.USEUATTR)
' importo file
If Not EgtNewFile() Then
EgtOutLog("Errore! Impossibile creare nuovo progetto!")
Return False
End If
Select Case nFileType
Case FT.BTL
If Not EgtImportBtl(sBtlCopyPath, nFlag) Then
EgtOutLog("Errore! Inserimento nel progetto del file BTL fallito!")
' elimino file Btl copiato
Try
File.Delete(sBtlCopyPath)
Catch ex As Exception
EgtOutLog("Errore! Eliminazione file BTL copiato fallita!")
End Try
' elimino da Db
' CheckMe impostata come cancellazione FISICA dal DB...
DbControllers.m_ProjController.DeleteProj(nProjId, False)
Return False
End If
Case FT.BTLX
If Not EgtImportBtlx(sBtlCopyPath, 0) Then
EgtOutLog("Errore! Inserimento nel progetto del file BTL fallito!")
' elimino file Btl copiato
Try
File.Delete(sBtlCopyPath)
Catch ex As Exception
EgtOutLog("Errore! Eliminazione file BTL copiato fallita!")
End Try
' elimino da Db
' CheckMe impostata come cancellazione FISICA dal DB...
DbControllers.m_ProjController.DeleteProj(nProjId, False)
Return False
End If
End Select
If EgtGetFirstPart() = GDB_ID.NULL Then
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(62582), EgtMsg(15002), MessageBoxButton.OK, MessageBoxImage.Warning)
Return False
End If
' creo PROJECTINFO
Dim nProjectInfoLayer As Integer = EgtCreateGroup(GDB_ID.ROOT)
EgtSetName(nProjectInfoLayer, PROJECTINFO)
EgtSetLevel(nProjectInfoLayer, GDB_LV.SYSTEM)
' scrivo info proj e tipo su layer BtlInfo
EgtSetInfo(nProjectInfoLayer, BTL_PRT_PROJ, nProjId)
EgtSetInfo(nProjectInfoLayer, BTL_GEN_PROJTYPE, nType)
' imposto CurrentMachine
InitCurrentMachine(Machine)
' imposto flag secondo tipo di progetto (travi o pareti)
EgtBeamSetFlag(nFlag)
' LoadingWndHelper.UpdateLoadingWnd(ActiveIds.IMPORTBTL, 2, EgtMsg(63005), 50, 70) ' Loading parts
' aggiungo informazioni su pezzi
Dim nPartId As Integer = EgtGetFirstPart()
While nPartId <> GDB_ID.NULL
' scrivo in ogni pezzo ProjId
EgtSetInfo(nPartId, BTL_PRT_PROJ, nProjId)
nPartId = EgtGetNextPart(nPartId)
' scrivo Id negli outline
Dim nPRId As Integer = 1
Dim nOutlineLayer As Integer = EgtGetFirstNameInGroup(nPartId, OUTLINE)
If nOutlineLayer <> GDB_ID.NULL Then
Dim nOutlineId As Integer = EgtGetFirstInGroup(nOutlineLayer)
While nOutlineId <> GDB_ID.NULL
' verifico che sia feature
If EgtExistsInfo(nOutlineId, MGR_FTR_PRC) Then
EgtSetInfo(nOutlineId, MGR_FTR_PRID, nPRId)
nPRId += 1
End If
nOutlineId = EgtGetNext(nOutlineId)
End While
End If
End While
' scrivo info proj e type su layer BtlInfo
Dim nBTLInfoLayer As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, BTLINFO)
EgtSetInfo(nBTLInfoLayer, BTL_PRT_PROJ, nProjId)
EgtSetInfo(nBTLInfoLayer, BTL_GEN_PROJTYPE, nType)
' scrivo info proj su layer AsseBase
Dim nAsseBaseLayer As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, ASSEBASE)
EgtSetInfo(nAsseBaseLayer, BTL_PRT_PROJ, nProjId)
' Apro finestra parametri generali
Dim GeneralParametersWndVM As New GeneralParametersWndVM(nType)
' Controllo se la cartella AiSetUp è presente
GetFirstAiSetUp(nType)
Dim sDefaultConfigFile As String = String.Empty
If EgtUILib.GetPrivateProfileString(S_STRATEGY, K_DEFAULTCONFIG, "", sDefaultConfigFile, Map.refMainWindowVM.MainWindowM.sDefaultConfig) = 0 Then
SetFirstStrategy(GeneralParametersWndVM, sDefaultConfigFile)
End If
GeneralParametersWndVM.SetbSaveGeneralParameters(True)
GeneralParametersWndVM.SaveProjectParameters()
m_BTLDataWnd = New BTLDataWndVM(nType)
m_BTLDataWnd.Read(nType)
m_BTLDataWnd.SaveInfoBTL(nType)
SectionXMaterial.SetType(nType)
LoadingWndHelper.UpdateLoadingWnd(ActiveIds.IMPORTBTL, 2, EgtMsg(63005), 50, 70) ' Loading parts
' leggo struttura BTL per liste
Map.refProjectVM.BTLStructureVM = New BTLStructureVM(BTLStructureM.CreateBTLStructure(0))
' aggiorno Db
Dim ExportDate As DateTime
Dim sBTLFileName As String = Path.GetFileNameWithoutExtension(sImportFilePath)
DateTime.TryParse(Map.refProjectVM.BTLStructureVM.BTLStructureM.m_sEXPDATE & " " &
Map.refProjectVM.BTLStructureVM.BTLStructureM.m_sEXPTIME, ExportDate)
DbControllers.m_ProjController.UpdateInfo(nProjId, sBTLFileName, sBTLFileName, Map.refProjectVM.BTLStructureVM.sLISTNAME, ExportDate, nType, Machine.Name)
CopyBuilding()
' 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, True, 180, False)
Next
End If
LoadingWndHelper.CloseLoadingWnd(ActiveIds.IMPORTBTL)
Return True
End Function
Private Function AddNewBTLProj(sImportFilePath As String, ProdFileVM As ProdFileVM, ByRef nProjId As Integer, ByRef sProjDir As String) As Boolean
'LoadingWndHelper.OpenLoadingWnd(ActiveIds.IMPORTBTL, 3, EgtMsg(63008), EgtMsg(63009), 50) ' BTL file importing ' Reading BTL file
' inizializzo nuovo progetto
If Not InitNewProj(nProjId, sProjDir, ProdFileVM.nType, ProdFileVM.sMachine) Then
EgtOutLog("Errore! Impossibile creare indice nuovo progetto!")
Return False
End If
' creo cartella per Proj
Dim sProjDirPath As String = ProdFileVM.sProdDirPath & "\Projs\" & nProjId.ToString("0000")
Try
Directory.CreateDirectory(sProjDirPath)
Catch ex As Exception
EgtOutLog("Errore! Impossibile creare cartella del Proj!")
End Try
' copio file BTL
Dim sBtlCopyPath As String = sProjDirPath & "\" & Path.GetFileName(sImportFilePath)
Dim bOk = False
Try
File.Copy(sImportFilePath, sBtlCopyPath, True)
Catch ex As Exception
EgtOutLog("Errore! Impossibile copiare il file BTL!")
Return False
End Try
' verifico tipo di file e recupero flag di importazione
Dim nFileType As Integer = EgtGetFileType(sBtlCopyPath)
If nFileType <> FT.BTL AndAlso nFileType <> FT.BTLX Then
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(10005), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' File type unknown - Error
EgtOutLog("Errore! Estensione progetto sconosciuta!")
Return False
End If
Dim sBTLFlag As String
If nType = BWType.BEAM Then
sBTLFlag = K_BTLFLAG
Else
sBTLFlag = K_WALLBTLFLAG
End If
Dim nFlag As Integer = GetMainPrivateProfileInt(S_IMPORT, sBTLFlag, EIB_FL.TS3_POS + EIB_FL.SORT + EIB_FL.USEUATTR)
' importo file
Dim nGroupQty As Integer = EgtGetGroupObjs(GDB_ID.ROOT)
Dim nLastPartId As Integer = EgtGetLastPart(GDB_ID.ROOT)
Select Case nFileType
Case FT.BTL
If Not EgtImportBtl(sBtlCopyPath, nFlag) Then
EgtOutLog("Errore! Inserimento nel progetto del file BTL fallito!")
' elimino file Btl copiato
Try
File.Delete(sBtlCopyPath)
Catch ex As Exception
EgtOutLog("Errore! Eliminazione file BTL copiato fallita!")
End Try
' elimino da Db
' CheckMe impostata come cancellazione FISICA dal DB...
DbControllers.m_ProjController.DeleteProj(nProjId, False)
Return False
End If
Case FT.BTLX
If Not EgtImportBtlx(sBtlCopyPath, 0) Then
EgtOutLog("Errore! Inserimento nel progetto del file BTL fallito!")
' elimino file Btl copiato
Try
File.Delete(sBtlCopyPath)
Catch ex As Exception
EgtOutLog("Errore! Eliminazione file BTL copiato fallita!")
End Try
' elimino da Db
' CheckMe impostata come cancellazione FISICA dal DB...
DbControllers.m_ProjController.DeleteProj(nProjId, False)
Return False
End If
End Select
' verifico che abbia importato qualcosa
If EgtGetGroupObjs(GDB_ID.ROOT) <= nGroupQty Then
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(62582), EgtMsg(15002), MessageBoxButton.OK, MessageBoxImage.Warning)
Return False
End If
'LoadingWndHelper.UpdateLoadingWnd(ActiveIds.IMPORTBTL, 2, EgtMsg(63005), 50, 70) ' Loading parts
' creo PROJECTINFO
Dim nProjectInfoLayer As Integer = EgtCreateGroup(GDB_ID.ROOT)
EgtSetName(nProjectInfoLayer, PROJECTINFO)
EgtSetLevel(nProjectInfoLayer, GDB_LV.SYSTEM)
' scrivo info proj e tipo su layer BtlInfo
EgtSetInfo(nProjectInfoLayer, BTL_PRT_PROJ, nProjId)
EgtSetInfo(nProjectInfoLayer, BTL_GEN_PROJTYPE, nType)
' aggiungo informazioni su pezzi
Dim nPartId As Integer = EgtGetNextPart(nLastPartId)
While nPartId <> GDB_ID.NULL
' scrivo in ogni pezzo ProjId
EgtSetInfo(nPartId, BTL_PRT_PROJ, nProjId)
' scrivo Id negli outline
Dim nPRId As Integer = 1
Dim nOutlineLayer As Integer = EgtGetFirstNameInGroup(nPartId, OUTLINE)
If nOutlineLayer <> GDB_ID.NULL Then
Dim nOutlineId As Integer = EgtGetFirstInGroup(nOutlineLayer)
While nOutlineId <> GDB_ID.NULL
' verifico che sia feature
If EgtExistsInfo(nOutlineId, MGR_FTR_PRC) Then
EgtSetInfo(nOutlineId, MGR_FTR_PRID, nPRId)
nPRId += 1
End If
nOutlineId = EgtGetNext(nOutlineId)
End While
End If
nPartId = EgtGetNextPart(nPartId)
End While
' scrivo info proj e type su layer BtlInfo
Dim nBTLInfoLayer As Integer = EgtGetLastNameInGroup(GDB_ID.ROOT, BTLINFO)
EgtSetInfo(nBTLInfoLayer, BTL_PRT_PROJ, nProjId)
EgtSetInfo(nBTLInfoLayer, BTL_GEN_PROJTYPE, nType)
' scrivo info proj su layer AsseBase
Dim nAsseBaseLayer As Integer = EgtGetLastNameInGroup(GDB_ID.ROOT, ASSEBASE)
EgtSetInfo(nAsseBaseLayer, BTL_PRT_PROJ, nProjId)
' Apro finestra parametri generali
Dim GeneralParametersWndVM As New GeneralParametersWndVM(ProdFileVM.nType)
GeneralParametersWndVM.SetbSaveGeneralParameters(True)
GeneralParametersWndVM.SaveProjectParameters()
m_BTLDataWnd = New BTLDataWndVM()
m_BTLDataWnd.Read(nType)
m_BTLDataWnd.SaveInfoBTL(nType)
' leggo struttura BTL per liste
Map.refProjectVM.BTLStructureVM = New BTLStructureVM(BTLStructureM.CreateBTLStructure(0))
CopyBuilding()
Dim sProjFileName As String = sProjDir & "\" & nProjId.ToString("0000") & ".nge"
Dim bFirstPart As Boolean = EgtGetFirstPart() <> GDB_ID.NULL
If Not bOk Then
EgtOutLog("Errore nell'importazione BTL")
End If
' aggiorno Db
Dim ExportDate As DateTime
Dim sBTLFileName As String = Path.GetFileNameWithoutExtension(sImportFilePath)
DateTime.TryParse(Map.refProjectVM.BTLStructureVM.BTLStructureM.m_sEXPDATE & " " &
Map.refProjectVM.BTLStructureVM.BTLStructureM.m_sEXPTIME, ExportDate)
DbControllers.m_ProjController.UpdateInfo(nProjId, sBTLFileName, sBTLFileName, Map.refProjectVM.BTLStructureVM.sLISTNAME, ExportDate, ProdFileVM.nType, ProdFileVM.sMachine)
' salvo il progetto
Map.refSceneHostVM.SaveProject()
' riporto aggiunta proj a prod su Db
DbControllers.m_ProdController.AddProj(ProdFileVM.nProdId, nProjId)
' resetto stato new del proj
DbControllers.m_ProjController.ResetNew(nProjId)
' se progetto pareti e vista ruotata
If ProdFileVM.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, True, 180, False)
Next
End If
' calcolo volumi pezzi
For Each Part In Map.refProjectVM.BTLStructureVM.BTLPartVMList
Part.CalcBTLPartVolume()
Next
' Aggiungo a ButtonBuildingList i BTL
Dim TempProj As ProjFileM = DbControllers.m_ProjController.FindByProjIdConv(nProjId)
Map.refSceneBuildingVM.ButtonBuildingList.Add(New ButtonBuildingItem(nProjId, m_nListProjAsseBase(nProjId), TempProj.sBTLFileName))
'LoadingWndHelper.UpdateLoadingWnd(ActiveIds.IMPORTBTL, 3, EgtMsg(63006), 70, 100) ' Loading graphics
' mostro tutti i pezzi
Map.refShowBeamPanelVM.ShowAll(True)
'LoadingWndHelper.CloseLoadingWnd(ActiveIds.IMPORTBTL)
Return True
End Function
Private Function CreateNewEmptyProj(ByRef nProjId As Integer, ByRef nType As BWType, ByRef Machine As MyMachine) As Boolean
Dim sProjDir As String = ""
' 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
If Map.refMachinePanelVM.MachineList.Count = 1 AndAlso DirectCast(Map.refMachinePanelVM.MachineList(0), MyMachine).nType <> MachineType.BOTH Then
Machine = DirectCast(Map.refMachinePanelVM.MachineList(0), MyMachine)
nType = Machine.nType
Else
Dim ProjectTypeWndVM As New ProjectTypeWndVM()
Dim ProjectTypeWnd As New ProjectTypeWndV(Application.Current.MainWindow, ProjectTypeWndVM)
If ProjectTypeWnd.ShowDialog() Then
Machine = ProjectTypeWndVM.SelMachine
nType = ProjectTypeWndVM.nSelType
Else
Return False
End If
End If
'LoadingWndHelper.OpenLoadingWnd(ActiveIds.IMPORTBTL, 3, EgtMsg(63008), EgtMsg(63009), 50) ' BTL file importing ' Reading BTL file
' creo progetto vuoto
If Not CreateFirstEmptyProj(nType, Machine, nProjId, sProjDir) Then Return False
' carico filtri di ricerca
Map.refProjectVM.BTLStructureVM.LoadFilters()
'LoadingWndHelper.CloseLoadingWnd(ActiveIds.IMPORTBTL)
Return True
End Function
Private Function CreateFirstEmptyProj(nType As BWType, Machine As MyMachine, ByRef nProjId As Integer, ByRef sProjDir As String) As Boolean
'LoadingWndHelper.OpenLoadingWnd(ActiveIds.IMPORTBTL, 3, EgtMsg(63008), EgtMsg(63009), 50) ' BTL file importing ' Reading BTL file
' inizializzo nuovo progetto
If Not InitNewProj(nProjId, sProjDir, nType, Machine.Name) Then
EgtOutLog("Errore! Impossibile creare indice nuovo progetto!")
Return False
End If
Dim sBTLFlag As String
If nType = BWType.BEAM Then
sBTLFlag = K_BTLFLAG
Else
sBTLFlag = K_WALLBTLFLAG
End If
' creo file
If Not EgtNewFile() Then
EgtOutLog("Errore! Impossibile creare nuovo progetto!")
Return False
End If
' Disabilito pulsante assemblato
Map.refShowBeamPanelVM.ShowBuilding_IsEnabled = False
' creo BTLINFO
Dim nBTLInfoLayer As Integer = EgtCreateGroup(GDB_ID.ROOT)
EgtSetName(nBTLInfoLayer, BTLINFO)
EgtSetLevel(nBTLInfoLayer, GDB_LV.SYSTEM)
' creo PROJECTINFO
Dim nProjectInfoLayer As Integer = EgtCreateGroup(GDB_ID.ROOT)
EgtSetName(nProjectInfoLayer, PROJECTINFO)
EgtSetLevel(nProjectInfoLayer, GDB_LV.SYSTEM)
' scrivo info proj e tipo su layer BtlInfo
EgtSetInfo(nProjectInfoLayer, BTL_PRT_PROJ, nProjId)
EgtSetInfo(nProjectInfoLayer, BTL_GEN_PROJTYPE, nType)
' imposto CurrentMachine
InitCurrentMachine(Machine)
' imposto flag secondo tipo di progetto (travi o pareti)
Dim nFlag As Integer = GetMainPrivateProfileInt(S_IMPORT, sBTLFlag, EIB_FL.TS3_POS + EIB_FL.SORT + EIB_FL.USEUATTR)
EgtBeamSetFlag(nFlag)
' LoadingWndHelper.UpdateLoadingWnd(ActiveIds.IMPORTBTL, 2, EgtMsg(63005), 50, 70) ' Loading parts
' aggiungo informazioni su pezzi
Dim nPartId As Integer = EgtGetFirstPart()
While nPartId <> GDB_ID.NULL
' scrivo in ogni pezzo ProjId
EgtSetInfo(nPartId, BTL_PRT_PROJ, nProjId)
nPartId = EgtGetNextPart(nPartId)
' scrivo Id negli outline
Dim nPRId As Integer = 1
Dim nOutlineLayer As Integer = EgtGetFirstNameInGroup(nPartId, OUTLINE)
If nOutlineLayer <> GDB_ID.NULL Then
Dim nOutlineId As Integer = EgtGetFirstInGroup(nOutlineLayer)
While nOutlineId <> GDB_ID.NULL
' verifico che sia feature
If EgtExistsInfo(nOutlineId, MGR_FTR_PRC) Then
EgtSetInfo(nOutlineId, MGR_FTR_PRID, nPRId)
nPRId += 1
End If
nOutlineId = EgtGetNext(nOutlineId)
End While
End If
End While
' scrivo info proj e type su layer BtlInfo
EgtSetInfo(nBTLInfoLayer, BTL_PRT_PROJ, nProjId)
EgtSetInfo(nBTLInfoLayer, BTL_GEN_PROJTYPE, nType)
' scrivo info proj su layer AsseBase
Dim nAsseBaseLayer As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, ASSEBASE)
EgtSetInfo(nAsseBaseLayer, BTL_PRT_PROJ, nProjId)
SectionXMaterial.SetType(nType)
' Apro finestra parametri generali
Dim GeneralParametersWndVM As New GeneralParametersWndVM(nType)
' Controllo se la cartella AiSetUp è presente
GetFirstAiSetUp(nType)
Dim sDefaultConfigFile As String = String.Empty
If EgtUILib.GetPrivateProfileString(S_STRATEGY, K_DEFAULTCONFIG, "", sDefaultConfigFile, Map.refMainWindowVM.MainWindowM.sDefaultConfig) = 0 Then
SetFirstStrategy(GeneralParametersWndVM, sDefaultConfigFile)
End If
GeneralParametersWndVM.SetbSaveGeneralParameters(True)
GeneralParametersWndVM.SaveProjectParameters()
m_BTLDataWnd = New BTLDataWndVM(nType)
m_BTLDataWnd.Read(nType)
m_BTLDataWnd.SaveInfoBTL(nType)
' leggo struttura BTL per liste
Map.refProjectVM.BTLStructureVM = New BTLStructureVM(BTLStructureM.CreateBTLStructure(0))
CopyBuilding()
' aggiorno Db
Dim ExportDate As DateTime
Dim sBTLFileName As String = " New - AEdifica"
DateTime.TryParse(Map.refProjectVM.BTLStructureVM.BTLStructureM.m_sEXPDATE & " " &
Map.refProjectVM.BTLStructureVM.BTLStructureM.m_sEXPTIME, ExportDate)
DbControllers.m_ProjController.UpdateInfo(nProjId, sBTLFileName, sBTLFileName, Map.refProjectVM.BTLStructureVM.sLISTNAME, ExportDate, nType, Machine.Name)
' aggiungo primo pezzo
Map.refProjectVM.BTLStructureVM.AddPart(nProjId)
' Aggiungo a ButtonBuildingList i BTL
Map.refSceneBuildingVM.ButtonBuildingList.Clear()
If m_nListProjAsseBase.Count > 0 Then
Dim TempProj As ProjFileM = DbControllers.m_ProjController.FindByProjIdConv(nProjId)
If m_nListProjAsseBase.ContainsKey(nProjId) Then
Map.refSceneBuildingVM.ButtonBuildingList.Add(New ButtonBuildingItem(nProjId, m_nListProjAsseBase(nProjId), TempProj.sBTLFileName))
Else
EgtOutLog("Errore nListProjAsseBase non trovato: " & nProjId)
End If
End If
Map.refMainWindowVM.UpdateTitle()
NotifyPropertyChanged(NameOf(MruFileNames))
' Abilito pulsante assemblato
Map.refShowBeamPanelVM.ShowBuilding_IsEnabled = True
Return True
End Function
Friend Function OpenProject(TempCurrPd As ProdFileVM) As Boolean
m_TempCurrProd = TempCurrPd
' Disabilito pulsante assemblato
Map.refShowBeamPanelVM.ShowBuilding_IsEnabled = False
Dim sFilePath As String = ""
' se la string è vuota
If IsNothing(TempCurrProd) Then
If GetMainPrivateProfileInt(S_GENERAL, K_PROJECTMODE, 0) = 1 Then
Dim OpenProdFileDialogVM As NewOpenProjectFileDialogVM = Nothing
' apro dialogo di scelta Prod
OpenProdFileDialogVM = New NewOpenProjectFileDialogVM
Dim OpenFile As New NewOpenProjectFileDialogV(Application.Current.MainWindow, OpenProdFileDialogVM)
Dim DialogResult As Boolean? = OpenFile.EgtShowDialog(ProjectType.PROD)
If IsNothing(DialogResult) OrElse Not DialogResult Then Return True
sFilePath = OpenProdFileDialogVM.SelProject.ProdFileVM.sProdPath
m_TempCurrProd = OpenProdFileDialogVM.SelProject.ProdFileVM
Else
Dim OpenProjectFileDialogVM As OpenProjectFileDialogVM = Nothing
' apro dialogo di scelta file
OpenProjectFileDialogVM = New OpenProjectFileDialogVM
Dim OpenFile As New OpenProjectFileDialogV(Application.Current.MainWindow, OpenProjectFileDialogVM)
Dim DialogResult As Boolean? = OpenFile.EgtShowDialog(ProjectType.PROD)
If IsNothing(DialogResult) OrElse Not DialogResult Then Return True
sFilePath = OpenProjectFileDialogVM.SelProject.sProdPath
m_TempCurrProd = OpenProjectFileDialogVM.SelProject
End If
Else
sFilePath = If(Not IsNothing(m_TempCurrProd.sProdPath), m_TempCurrProd.sProdPath, "")
End If
LoadingWndHelper.OpenLoadingWnd(ActiveIds.OPENPROD, 3, EgtMsg(63004), EgtMsg(63001), 50) ' Optimization opening ' Loading project geometries
If Not File.Exists(sFilePath) Then
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(61871))
EgtOutLog("Errore! File da aprire non trovato!")
Return False
End If
' se la macchina del progetto in apertura non è tra le macchine disponibili lo segnalo ed esco
Dim OpenProjectMachine As MyMachine = Map.refMachinePanelVM.MachineList.FirstOrDefault(Function(x) String.Equals(x.Name, m_TempCurrProd.sMachine, StringComparison.OrdinalIgnoreCase))
If IsNothing(OpenProjectMachine) Then
' rimuovo il file in apertura dalla lista degli MRU
m_MruFiles.Remove(sFilePath)
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(61885), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) 'Error
EgtOutLog("Errore! Macchina del progetto da aprire non trovata!")
Return False
End If
' apro il file
If Not EgtOpenFile(sFilePath) Then
m_MruFiles.Remove(sFilePath)
If Not IsNothing(ProjectManagerVM.CurrProd) AndAlso sFilePath <> ProjectManagerVM.CurrProd.sProdPath Then
OpenProject(ProjectManagerVM.CurrProd)
Else
NewProject()
End If
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(10003) & " '" & sFilePath & "'", EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) 'Error opening file
EgtOutLog("Errore! Caricamento del progetto fallito!")
Return False
End If
' imposto CurrentMachine
InitCurrentMachine(OpenProjectMachine)
SectionXMaterial.SetType(TempCurrProd.nType)
' Procedo a seconda del risultato
LoadingWndHelper.UpdateLoadingWnd(ActiveIds.OPENPROD, 2, EgtMsg(63005), 50, 70) ' Loading part list
' leggo struttura BTL
Map.refProjectVM.BTLStructureVM = New BTLStructureVM(BTLStructureM.CreateBTLStructure(0))
CopyBuilding()
' Controllo se ci sono strategie forzate
ForcedStrategy(Map.refProjectVM.BTLStructureVM.BTLPartVMList)
If IsNothing(Map.refProjectVM.BTLStructureVM) Then
m_MruFiles.Remove(sFilePath)
If Not IsNothing(ProjectManagerVM.CurrProd) AndAlso sFilePath <> ProjectManagerVM.CurrProd.sProdPath Then
OpenProject(ProjectManagerVM.CurrProd)
Else
NewProject()
End If
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(10003) & " '" & sFilePath & "'", EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) 'Error opening file
EgtOutLog("Errore! Caricamento dei pezzi btl fallito!")
Return False
End If
' imposto progetto corrente
Dim OldProd As ProdFileVM = ProjectManagerVM.CurrProd
ProjectManagerVM.CurrProd = TempCurrProd
m_BTLDataWnd = New BTLDataWndVM()
DbControllers.m_ProdController.LockByProdId(ProjectManagerVM.CurrProd.nProdId, True, Map.refMainWindowVM.MainWindowM.GetKeyNumber())
' recupero indice di modifica progetto quando caricato
Dim CommIndex As Integer = -1
Dim ActiveSessionList As List(Of StatusMapModel) = DbControllers.m_StatusMapController.GetProd(m_SupervisorId)
For Each ActiveSession In ActiveSessionList
If Not IsNothing(ProjectManagerVM.CurrProd) AndAlso ActiveSession.ItemId = ProjectManagerVM.CurrProd.nProdId Then
CommIndex = ActiveSession.Index
End If
Next
LoadingWndHelper.UpdateLoadingWnd(ActiveIds.OPENPROD, 3, EgtMsg(63002), 70, 100) ' Loading machining groups
LoadingWndHelper.UpdateLoadingWnd(ActiveIds.GOTOPROD, 3, EgtMsg(63002), 50, 100) ' Loading machining groups
' carico gruppi di lavorazione
Map.refProjectVM.MachGroupPanelVM = New MyMachGroupPanelVM(MyMachGroupPanelM.CreateMyMachGroupPanel(Map.refMachinePanelVM.MachineList.ToList()))
If IsNothing(Map.refProjectVM.MachGroupPanelVM) Then
m_MruFiles.Remove(sFilePath)
If Not IsNothing(OldProd) AndAlso sFilePath <> OldProd.sProdPath Then
OpenProject(OldProd)
Else
NewProject()
End If
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(10003) & " '" & sFilePath & "'", EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) 'Error opening file
EgtOutLog("Errore! Caricamento dei gruppi di lavorazione fallito!")
Return False
End If
' imposto flag secondo tipo di progetto (travi o pareti)
Dim sBTLFlag As String = If(m_TempCurrProd.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)
' fisso indice sessione di comunicazione
If CommIndex > -1 Then
ProjectManagerVM.CurrProd.SetModificationIndex(CommIndex)
End If
' verifico se volume pezzi calcolato
Dim bIsCalculated As Boolean = False
For Each BTLPart In Map.refProjectVM.BTLStructureVM.BTLPartVMList
If BTLPart.BTLPartM.dVolume > 0 Then Continue For
bIsCalculated = True
BTLPart.CalcBTLPartVolume()
Next
If bIsCalculated Then
Dim CurrProject As String = ""
EgtGetCurrFilePath(CurrProject)
EgtSaveFile(CurrProject, NGE.CMPTEXT)
End If
' se salvato, carico progetto in lista mru
If Not Map.refProdManagerVM.TempCurrProd.bIsNew Then
m_MruFiles.Add(sFilePath)
End If
' carico filtri di ricerca
Map.refProjectVM.BTLStructureVM.LoadFilters()
' imposto macchina del progetto
Map.refMachinePanelVM.SelectedMachine = Map.refMachinePanelVM.MachineList.FirstOrDefault(Function(x) String.Equals(x.Name, ProjectManagerVM.CurrProd.sMachine, StringComparison.OrdinalIgnoreCase))
Map.refMachinePanelVM.SetSelMachineName(Map.refMachinePanelVM.SelectedMachine.Name)
Map.refMachinePanelVM.SetStrategyManagerIsChecked(True)
Core.ViewPanelVM.UpdateBWType(ProjectManagerVM.CurrProd.nType)
' aggiorno le colonne in base al tipo progetto
Map.refRawPartListVM.UpdateColumns(ProjectManagerVM.CurrProd.nType)
Map.refFeatureInPartInRawPartListVM.UpdateColumns(ProjectManagerVM.CurrProd.nType)
' gestisco visibilita' bottoni
Map.refProjectVM.SetOptimizePanel_Visibility(True)
' aggiorno lista possibili nesting
Map.refOptimizePanelVM.UpdateOriginTypeList(EgtGetFirstNameInGroup(GDB_ID.ROOT, "RawParts") <> GDB_ID.NULL)
' aggiorno visibilità bottone Muovi pezzi
Map.refRawPartManagerVM.UpdateMovePartInRawPartVisibility()
' carico lista macchine e macchina del progetto per il pulsante Reset Macchina del CALCPanel
Map.refCALCPanelVM.LoadMachineList()
' seleziono primo pezzo
If Map.refProjectVM.BTLStructureVM.BTLPartVMList.Count > 0 Then
Map.refProjectVM.BTLStructureVM.SetSelBTLPart(Map.refProjectVM.BTLStructureVM.BTLPartVMList(0))
End If
' aggiorno titolo
Map.refMainWindowVM.UpdateTitle()
' refresh lista mru
NotifyPropertyChanged(NameOf(MruFileNames))
' aggiorno nome macchina in statusbar
Map.refMyStatusBarVM.RefreshMachName()
' Controllo se ci sono strategie modificate nei pezzi e mostro l'immagine della penna
ModifyStrategyInfo(Map.refProjectVM.BTLStructureVM.BTLPartVMList)
' Aggiungo a ButtonBuildingList i BTL
Map.refSceneBuildingVM.ButtonBuildingList.Clear()
If m_nListProjAsseBase.Count > 0 Then
For Each ItemProd As Integer In ProjectManagerVM.CurrProd.nProjIdList
Dim TempProj As ProjFileM = DbControllers.m_ProjController.FindByProjIdConv(ItemProd)
If m_nListProjAsseBase.ContainsKey(ItemProd) Then
Map.refSceneBuildingVM.ButtonBuildingList.Add(New ButtonBuildingItem(ItemProd, m_nListProjAsseBase(ItemProd), TempProj.sBTLFileName))
Else
EgtOutLog("Errore nListProjAsseBase non trovato: " & ItemProd)
End If
Next
End If
' Abilito pulsante assemblato
Map.refShowBeamPanelVM.ShowBuilding_IsEnabled = True
LoadingWndHelper.CloseLoadingWnd(ActiveIds.OPENPROD)
Return True
End Function
Public Function Save(Optional bShowLoading As Boolean = False) As Boolean
If IsNothing(CurrProd) Then Return False
If bShowLoading Then LoadingWndHelper.OpenLoadingWnd(ActiveIds.SAVEPROD, 2, EgtMsg(63007), EgtMsg(63012), 70) ' Project saving ' Saving geometry
If Not Map.refSceneHostVM.SaveProject() Then
m_MruFiles.Remove(CurrProd.sProdPath)
Dim sMsg As String = EgtMsg(10004) & " '" & CurrProd.sProdPath & "'" 'Error saving file
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error
EgtOutLog("Salvataggio progetto non riuscito")
Return False
End If
If bShowLoading Then LoadingWndHelper.UpdateLoadingWnd(ActiveIds.SAVEPROD, 2, EgtMsg(63013), 70, 100) ' Saving data on Db
' aggiorno pezzi su Db
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 BTLParts su DB
For Each ProjId In CurrProd.nProjIdList
Dim ProjIdPartList As IEnumerable(Of BTLPartM) = Map.refProjectVM.BTLStructureVM.BTLStructureM.BTLPartMList.Where(Function(x) x.m_nPROJ = ProjId)
If Not IsNothing(ProjIdPartList) Then
DbControllers.m_ProjController.UpdateBtlParts(ProjId, ProjIdPartList.ToList())
End If
Next
If Not DbControllers.m_ProdController.UpdateMachGroup(CurrProd.nProdId, MyMachGroupList) And bShowLoading Then
LoadingWndHelper.CloseLoadingWnd(ActiveIds.SAVEPROD)
Return False
End If
' verifico se Reset Macchina modificato e nel caso aggiorno DB e CurrProj
If Map.refCALCPanelVM.IsMachineModified() Then
DbControllers.m_ProdController.UpdateMachine(CurrProd.nProdId, Map.refCALCPanelVM.SelectedMachine.Name)
CurrProd.SetMachine(Map.refCALCPanelVM.SelectedMachine.Name)
' ciclo sulla lista di ProjId associati
For Each ProjId In CurrProd.nProjIdList
' aggiorno la Macchina per i ProjId associati sul DB
DbControllers.m_ProjController.UpdateMachine(ProjId, Map.refCALCPanelVM.SelectedMachine.Name)
' se uno dei Proj interessati equivale al Proj correntemente aperto setto la Macchina dello stesso
' (poichè il progetto corrente non viene riaperto e riletto dal DB)
If ProjId = CurrProd.nProdId Then CurrProd.SetMachine(Map.refCALCPanelVM.SelectedMachine.Name)
Next
Map.refCALCPanelVM.ResetMachineModified()
' aggiorno nome macchina in statusbar
Map.refMyStatusBarVM.RefreshMachName()
End If
' se nuovo progetto
If CurrProd.bIsNew Then
' resetto stato new
CurrProd.bIsNew = False
Else
' Aggiungo file a lista Mru
m_MruFiles.Add(CurrProd.sProdPath)
End If
Map.refMainWindowVM.UpdateTitle()
NotifyPropertyChanged(NameOf(MruFileNames))
If bShowLoading Then LoadingWndHelper.CloseLoadingWnd(ActiveIds.SAVEPROD)
Return True
End Function
Private Sub ManageImportLog(nProjId As Integer, sProjDir As String)
Dim LogFile As New List(Of String)
Using FileStream As 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
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, sImportMessage, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error
End If
End If
End If
End Sub
Public Sub OpenProjectFromSupervisor(ProjIdToOpen As Integer)
If (Not IsNothing(ProjectManagerVM.CurrProd) AndAlso ProjIdToOpen <> ProjectManagerVM.CurrProd.nProdId) OrElse Map.refMainMenuVM.SelPage <> Pages.OPTIMIZERPAGE Then
m_nProjIdToOpen = ProjIdToOpen
m_bOpenProj = True
End If
End Sub
''' <summary>
''' Funzione che copia i pezzi
''' </summary>
Friend Sub CopyBuilding()
Map.refSceneShowBuldingVM.MapInfo.Clear()
m_nListProjAsseBase.Clear()
Dim nRef As Integer = 0
Dim nListAsseBase As New ObservableCollection(Of Integer)
' Setto il nuovo contesto
EgtSetCurrentContext(Map.refSceneShowBuldingVM.SceneShowBulding.GetCtx())
' Creo nuovo file
EgtNewFile()
' Ritorno al contesto corrente
EgtSetCurrentContext(Map.refSceneHostVM.MainScene.GetCtx())
' Ciclo sull'asse base e lo copio nel nuovo contesto
Dim nAsseBaseLayerId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, ASSEBASE)
While nAsseBaseLayerId <> GDB_ID.NULL
Dim nAsseBaseID As Integer = EgtCopyEx(Map.refSceneHostVM.MainScene.GetCtx(), nAsseBaseLayerId, Map.refSceneShowBuldingVM.SceneShowBulding.GetCtx(), nRef)
nListAsseBase.Add(nAsseBaseID)
nAsseBaseLayerId = EgtGetNextName(nAsseBaseLayerId, ASSEBASE)
End While
' Ciclo sui pezzi e li copio nel nuovo contesto
Dim nPartLayerId As Integer = EgtGetFirstPart()
While nPartLayerId <> GDB_ID.NULL
Dim nNewId As Integer = EgtCopyEx(Map.refSceneHostVM.MainScene.GetCtx(), nPartLayerId, Map.refSceneShowBuldingVM.SceneShowBulding.GetCtx(), nRef)
' Salvo le info dei pezzi per associarli in modo corretto
If nNewId > 0 AndAlso Not Map.refSceneShowBuldingVM.MapInfo.ContainsKey(nPartLayerId) Then
Map.refSceneShowBuldingVM.MapInfo.Add(nPartLayerId, nNewId)
End If
nPartLayerId = EgtGetNextPart(nPartLayerId)
End While
' Setto il nuovo contesto
EgtSetCurrentContext(Map.refSceneShowBuldingVM.SceneShowBulding.GetCtx())
' Ciclo sull'assebase e sostitusco '!SOU' con la vecchia info salvata in MapInfo
For IdAsseBase As Integer = 0 To nListAsseBase.Count - 1
Dim nIdF As Integer = EgtGetFirstInGroup(nListAsseBase(IdAsseBase))
While nIdF <> GDB_ID.NULL
Dim Sou As Integer = 0
EgtGetInfo(nIdF, "!SOU", Sou)
If EgtGetInfo(nIdF, "!SOU", Sou) AndAlso Map.refSceneShowBuldingVM.MapInfo.ContainsKey(Sou) Then
EgtSetInfo(nIdF, "!SOU", Map.refSceneShowBuldingVM.MapInfo(Sou))
End If
nIdF = EgtGetNext(nIdF)
End While
Map.refProjectVM.BTLStructureVM.ShowBuilding(nListAsseBase(IdAsseBase), True)
If IdAsseBase > 0 Then EgtSetStatus(nListAsseBase(IdAsseBase), GDB_ST.OFF)
Dim nProj As Integer = 0
If EgtGetInfo(nListAsseBase(IdAsseBase), PROJ, nProj) AndAlso Not m_nListProjAsseBase.ContainsKey(nProj) Then
m_nListProjAsseBase.Add(nProj, nListAsseBase(IdAsseBase))
End If
Next
EgtZoom(ZM.ALL)
' Ritorno al contesto corrente
EgtSetCurrentContext(Map.refSceneHostVM.MainScene.GetCtx())
End Sub
Private Sub ForcedStrategy(BTLPartVMList As ObservableCollection(Of BTLPartVM))
' Mostro le strategie forzate
Dim bValue As Boolean = False
Dim bValueForced As Boolean = False
For Each BTLPartParam As BTLPartVM In BTLPartVMList
For Each FeatureParam As BTLFeatureVM In BTLPartParam.BTLFeatureVMList
bValue = False
EgtGetInfo(FeatureParam.nFeatureId, ConstBeam.STRATEGY & FeatureParam.nFeatureId & "_FORCED", bValue)
If bValue Then
BTLPartParam.SetStrategyModify_Visibility(True)
FeatureParam.SetbStrategy_Visibility(True)
End If
For Each StrategySetupParam As StrategySetup In Map.refStrategyManagerVM.StrategySetupList
For Each StrategyFeatureParam As StrategyFeature In StrategySetupParam.StrategyFeatureList
For Each TopologyParam As Topology In StrategyFeatureParam.TopologyList
For Each StrategyParam As Strategy In TopologyParam.StrategyList
For Each Param As StrategyParameter In StrategyParam.ParameterList
bValueForced = False
EgtGetInfo(FeatureParam.nFeatureId, StrategyParam.sStrategyId & "_" & Param.sNameNge & "_FORCED", bValueForced)
If bValueForced Then FeatureParam.SetbStrategy_Visibility(True)
Next
Next
Next
Next
Next
Next
Next
End Sub
Private Sub ModifyStrategyInfo(BTLPartVMList As ObservableCollection(Of BTLPartVM))
Dim sStrategiesDirPath As String = Map.refMainWindowVM.MainWindowM.GetStrategiesDirPath(Map.refStrategyManagerVM.SelStrategyType.Id)
Dim sGeneralParametersFilePath As String = sStrategiesDirPath & "\" & GENERALPARAMETERS_FILE & ".json"
If File.Exists(sGeneralParametersFilePath) Then
Dim sReadedFiles As String = File.ReadAllText(sGeneralParametersFilePath)
Dim JsonGeneralParametersList As List(Of JsonGeneralParameters) = JsonConvert.DeserializeObject(Of List(Of JsonGeneralParameters))(sReadedFiles)
Map.refProjectVM.GeneralParametersList = New ObservableCollection(Of ProjectParameters)((From JsonGeneralParameter In JsonGeneralParametersList
Select JsonGeneralParameter.Deserialize(Map.refStrategyManagerVM.SelStrategyType.Id)).ToList())
End If
Dim bValuePart As Boolean = False
For Each PartItem As BTLPartVM In BTLPartVMList
For Each GeneralParam As ProjectParameters In Map.refProjectVM.GeneralParametersList
bValuePart = False
EgtGetInfo(PartItem.nPartId, GeneralParam.sNameNge & "_FORCED", bValuePart)
If bValuePart Then PartItem.SetStrategyModify_Visibility(True)
Next
Next
NotifyPropertyChanged(NameOf(Map.refProjectVM.GeneralParametersList))
End Sub
Private Sub GetFirstAiSetUp(nType As BWType)
Dim sAISetUpDir As String = String.Empty
If nType = BWType.BEAM Then
sAISetUpDir = Map.refMainWindowVM.MainWindowM.sMachinesRoot & "\" & CurrentMachine.sMachineName & "\" & BEAM_DIR & "\" & AISETUP_DIR
ElseIf nType = BWType.WALL Then
sAISetUpDir = Map.refMainWindowVM.MainWindowM.sMachinesRoot & "\" & CurrentMachine.sMachineName & "\" & WALL_DIR & "\" & AISETUP_DIR
End If
' Controllo se la cartella AISetup è presente
If Not Directory.Exists(sAISetUpDir) Then
' Se non esiste, la crea
Directory.CreateDirectory(sAISetUpDir)
End If
End Sub
''' <summary>
''' Funzione che scrive il file json di default se non è presente un file di configurazione
''' </summary>
''' <param name="GeneralParametersWndVM"></param>
Private Sub SetFirstStrategy(GeneralParametersWndVM As GeneralParametersWndVM, sDefaultConfigFile As String)
sDefaultConfigFile = "DefaultConfig"
Dim Strategy As New StrategySetup(sDefaultConfigFile)
Map.refStrategyManagerVM.SelStrategySetup = Strategy
Map.refStrategyManagerVM.StrategySetupList.Add(Strategy)
Map.refStrategyManagerVM.SelStrategySetup.Write(GeneralParametersWndVM.GeneralParametersList, True)
Map.refStrategyManagerVM.SetDefaultConfig_IsChecked(True)
EgtUILib.WritePrivateProfileString(S_STRATEGY, K_DEFAULTCONFIG, sDefaultConfigFile, Map.refMainWindowVM.MainWindowM.sDefaultConfig)
End Sub
#End Region ' Methods
#Region "COMMANDS"
#Region "New"
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
Public Sub NewProject()
SetBtlImage(DOWN_IMAGE)
CreateNewProd(False)
Return
End Sub
#End Region ' New
#Region "OpenCommand"
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
Friend Sub Open()
' verifico se progetto modificato, e chiedo se salvare
If ProdFileVM.VerifyProjectModification(CurrProd) = MessageBoxResult.Cancel Then Return
OpenProject(Nothing)
End Sub
#End Region ' OpenCommand
#Region "OpenMruFileCommand"
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
Public Sub OpenMruFile(ByVal param As Object)
' verifico se progetto modificato, e chiedo se salvare
If ProdFileVM.VerifyProjectModification(CurrProd) = MessageBoxResult.Cancel Then Return
' ricavo l'Id e il progetto associato per l'apertura di quest'ultimo
Dim PdId As Integer = 0
Dim arrStrPdId As String() = DirectCast(param, String).Split("|")
Integer.TryParse(arrStrPdId(0), PdId)
Dim PdFileM = DbControllers.m_ProdController.FindCoreByProdId(PdId)
Dim PdFileVM = New ProdFileVM(PdFileM)
OpenProject(PdFileVM)
End Sub
#End Region ' OpenMruFileCommand
#Region "SaveCommand"
Public ReadOnly Property SaveCommand As ICommand
Get
If m_cmdSave Is Nothing Then
m_cmdSave = New Command(AddressOf SaveCmd)
End If
Return m_cmdSave
End Get
End Property
Public Sub SaveCmd()
Save(True)
End Sub
#End Region ' SaveCommand
#Region "ImportBTL"
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
Public Sub ImportBTL(Optional sFile As String = "", Optional bWithDlg As Boolean = True)
' verifico se progetto modificato, e chiedo se salvare
If ProdFileVM.VerifyProjectModification(CurrProd) = MessageBoxResult.Cancel Then Return
Map.refShowBeamPanelVM.ShowBuilding_IsEnabled = False
Map.refProjectVM.SetSceneShowBuldingVisibility(False)
Map.refProjectVM.SetManagerTabVisibility(True)
If Not IsNothing(Map.refProjectVM.MachGroupPanelVM) Then Map.refProjectVM.SetFeatureListVisibility(True)
If Not CreateNewProd() Then
EgtOutLog("Errore! Creazione del progetto fallita!")
End If
Return
End Sub
#End Region ' ImportBTL
#Region "ExportProject"
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
Public Function ExportProject(Optional sExportFileName As String = Nothing) As String
SetSaveImage(DOWN_IMAGE)
If ProdFileVM.VerifyProjectModification(CurrProd) = MessageBoxResult.Cancel Then Return Nothing
If IsNothing(CurrProd) Then Return Nothing
' apro finestra di salvataggio progetto
Dim ExportDlg As New Microsoft.Win32.SaveFileDialog() With {
.Title = EgtMsg(61838),
.DefaultExt = ".ngexp",
.Filter = "ProjectExport (*.ngexp)|*.ngexp",
.FileName = CurrProd.nProdId.ToString("0000") & " - " & CurrProd.sBTLFileName & " - ProjectExport"}
If IsNothing(sExportFileName) Then
If ExportDlg.ShowDialog() <> True Then
' Abilito pulsante assemblato
Map.refShowBeamPanelVM.ShowBuilding_IsEnabled = True
Return Nothing
End If
End If
LoadingWndHelper.OpenLoadingWnd(ActiveIds.EXPORTPROJECT, 2, EgtMsg(63010), EgtMsg(63016), 30) ' Project exporting ' Adding export info
' se assemblato me lo segno e lo smonto
Dim bShowBuilding As Boolean = False
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
' 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, CurrProd.sMachine)
EgtSetInfo(nImpExpPartId, BTL_GEN_PROJTYPE, CurrProd.nType)
LoadingWndHelper.UpdateLoadingWnd(ActiveIds.EXPORTPROJECT, 2, EgtMsg(63017), 30, 100) ' Exporting...
' 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 zipStream As New FileStream(sZipToCreate, FileMode.Create)
Using archive As New ZipArchive(zipStream, ZipArchiveMode.Create)
Dim sProjectDirPath As String = If(CurrProd.nProdId > 0, CurrProd.sProdDirPath, CurrProd.sProjDirPath)
For Each sFile As String In Directory.GetFiles(sProjectDirPath)
Dim entryName As String = Path.GetFileName(sFile)
Dim entry As ZipArchiveEntry = archive.CreateEntry(entryName, CompressionLevel.NoCompression)
Using entryStream As Stream = entry.Open()
Using fileStream As FileStream = File.OpenRead(sFile)
fileStream.CopyTo(entryStream)
End Using
End Using
Next
End Using
End Using
Catch ex1 As Exception
EgtOutLog("Exception in zip: " & ex1.ToString())
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(62561))
End Try
' elimino layer di esportazione
EgtErase(nImpExpPartId)
' salvo eliminazione info inserite
Map.refSceneHostVM.SaveProject()
If bShowBuilding Then Map.refProjectVM.BTLStructureVM.ShowBuilding(True, False)
LoadingWndHelper.CloseLoadingWnd(ActiveIds.EXPORTPROJECT)
Return sZipToCreate
End Function
#End Region ' ExportProject
#Region "ImportProject"
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
Public Sub ImportProject()
Map.refShowBeamPanelVM.ShowBuilding_IsEnabled = False
Map.refProjectVM.SetSceneShowBuldingVisibility(False)
Map.refProjectVM.SetManagerTabVisibility(True)
SetOpenImage(DOWN_IMAGE)
Dim TempCurrProd As ProjectFileVM = CurrProd
If ProdFileVM.VerifyProjectModification(TempCurrProd) Then Return
Dim sDir As String = String.Empty
GetMainPrivateProfileString(S_GENERAL, K_LASTNGEXPDIR, "", sDir)
' apro finestra scelta file
Dim ImportDlg As New Microsoft.Win32.OpenFileDialog() With {
.Title = EgtMsg(61839),
.DefaultExt = ".ngexp",
.Filter = "ProjectExport (*.ngexp)|*.ngexp",
.InitialDirectory = If(Directory.Exists(sDir), sDir, ""),
.CheckFileExists = True,
.ValidateNames = True}
If ImportDlg.ShowDialog() <> True Then
' Abilito pulsante assemblato
Map.refShowBeamPanelVM.ShowBuilding_IsEnabled = True
Return
End If
' 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)
Directory.CreateDirectory(sProjectimportDir)
Try
If Directory.Exists(sProjectimportDir) Then Directory.Delete(sProjectimportDir, True)
ZipFile.ExtractToDirectory(ImportDlg.FileName, sProjectimportDir)
Catch ex1 As Exception
EgtOutLog("Exception in zip: " & ex1.ToString())
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(62562), EgtMsg(15001))
Return
End Try
LoadingWndHelper.OpenLoadingWnd(ActiveIds.IMPORTPROJECT, 2, EgtMsg(63018), EgtMsg(63019), 30) ' Project importing ' Loading project
' carico progetto
Dim sProjFromPath() As String = Directory.GetFiles(sProjectimportDir, "*.nge")
Dim bOk = EgtOpenFile(sProjFromPath(0))
If Not bOk Then
LoadingWndHelper.CloseLoadingWnd(ActiveIds.IMPORTPROJECT)
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(62552), EgtMsg(15001))
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)
Dim Machine As Machine = Map.refMachinePanelVM.MachineList.FirstOrDefault(Function(x) String.Equals(x.Name, sMachine, StringComparison.OrdinalIgnoreCase))
' se la macchina del progetto in apertura non è tra le macchine disponibili lo segnalo e apro un progetto vuoto
Dim nType As Integer = BWType.NULL
EgtGetInfo(nImpExpPartId, BTL_GEN_PROJTYPE, nType)
If IsNothing(Machine) OrElse nType = BWType.NULL Then
LoadingWndHelper.CloseLoadingWnd(ActiveIds.IMPORTPROJECT)
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(61885), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) 'Error
Return
End If
' elimino part di esportazione
EgtErase(nImpExpPartId)
LoadingWndHelper.UpdateLoadingWnd(ActiveIds.IMPORTPROJECT, 2, EgtMsg(63020), 30, 100) ' Creating imported project
' 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 = 0
Dim nProdId As Integer = 0
Dim sProdDir As String = ""
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 EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(62563), EgtMsg(15001))
' 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 = ""
InitNewProj(nNewProjId, sNewProjDir, nType, Machine.Name)
NewProjIdList.Add(nNewProjId)
' imposto ProjId di caricamento
ProjectManagerVM.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 Save()
If bOk Then
' 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, sBTLFileName, Map.refProjectVM.BTLStructureVM.sLISTNAME, ExportDate, nType, Machine.Name)
Else
' elimino da Db
' CheckMe impostata come cancellazione FISICA dal DB...
DbControllers.m_ProjController.DeleteProj(nNewProjId, False)
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, Map.refMainWindowVM.MainWindowM.GetKeyNumber())
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 leggere valori produzione dal Db di quel progetto
CurrProd = Nothing
' carico Machgroup che non verrebbero altrimenti importati
Map.refProjectVM.MachGroupPanelVM = New MyMachGroupPanelVM(MyMachGroupPanelM.CreateMyMachGroupPanel(Map.refMachinePanelVM.MachineList.ToList()))
' inizializzo nuovo progetto PROD
InitNewProd(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)
If Map.refMainWindowVM.MainWindowM.nUserLevel < 5 OrElse GetMainPrivateProfileInt(S_MACH, K_EXPORTBWE, 0) <> 1 Then
' resetto tutti gli stati di CALC
MachGroup.ResetCalcTotalMachGroup()
End If
Next
' imposto progetto corrente
If NewProjIdList.Count > 0 Then
SetCurrProj(NewProjIdList(0))
SetCurrProd(nProdId)
End If
If Map.refMainWindowVM.MainWindowM.nUserLevel >= 5 AndAlso GetMainPrivateProfileInt(S_MACH, K_EXPORTBWE, 0) = 1 Then
' lancio verifica perche' importato
Map.refCALCPanelVM.VerifyAll(ProjectType.PROJ, CalcIntegration.CmdTypes.CHECKNOSIM)
End If
' creo cartella per Proj
Dim sProjDirPath As String = sProdDir & "\Projs\" & NewProjIdList(0).ToString("0000")
Try
Directory.CreateDirectory(sProjDirPath)
Catch ex As Exception
EgtOutLog("Errore! Impossibile creare cartella del Proj!")
End Try
' 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)
bOk = True
Catch ex As Exception
EgtOutLog("Impossibile copiare il file")
bOk = False
End Try
End If
If Map.refMainWindowVM.MainWindowM.nUserLevel >= 5 AndAlso GetMainPrivateProfileInt(S_MACH, K_EXPORTBWE, 0) = 1 Then
' copio tutti i bwe
For Each CurrFile In Directory.GetFiles(sProjectimportDir)
If Path.GetExtension(CurrFile) = ".bwe" OrElse Path.GetExtension(CurrFile) = ".html" Then
File.Copy(CurrFile, sProdDir & "\" & Path.GetFileName(CurrFile))
End If
Next
End If
If bOk Then
' aggiungo altri proj a prod
For Each nProjId In NewProjIdList
DbControllers.m_ProdController.AddProj(nProdId, nProjId, Map.refMainWindowVM.MainWindowM.GetKeyNumber())
Next
Else
' elimino da DB
DbControllers.m_ProdController.DeleteProd(nProdId, True)
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, Map.refMainWindowVM.MainWindowM.GetKeyNumber())
End If
DbControllers.m_ProdController.ResetController()
OpenProject(CurrProd)
WriteMainPrivateProfileString(S_GENERAL, K_LASTNGEXPDIR, Path.GetDirectoryName(ImportDlg.FileName))
LoadingWndHelper.CloseLoadingWnd(ActiveIds.IMPORTPROJECT)
End Sub
#End Region ' ImportProject
#Region "AddProj"
Public ReadOnly Property AddProj_Command As ICommand
Get
If m_cmdAddProj Is Nothing Then
m_cmdAddProj = New Command(AddressOf AddProj)
End If
Return m_cmdAddProj
End Get
End Property
Public Sub AddProj()
SetBtlImage(DOWN_IMAGE)
If Not CreateNewProj(CurrProd, 0) Then
EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(62583))
End If
Return
End Sub
#End Region ' AddProj
#Region "AddBTL"
Public ReadOnly Property AddBTL_Command As ICommand
Get
If m_cmdAddBTL Is Nothing Then
m_cmdAddBTL = New Command(AddressOf AddBTL)
End If
Return m_cmdAddBTL
End Get
End Property
Public Sub AddBTL()
'' verifico ci sia un progetto aperto
If IsNothing(CurrProd) Then Return
' apro finestra scelta file
Dim sDir As String = String.Empty
GetMainPrivateProfileString(S_GENERAL, K_LASTIMPDIR, "", sDir)
Dim sFile As String = ""
Dim BTLDlg As New Microsoft.Win32.OpenFileDialog() With {
.Title = EgtMsg(63038),
.DefaultExt = ".btl",
.Filter = "BTL (*.btl)|*.btl" &
"|BTLX (*.btlx)|*.btlx",
.InitialDirectory = If(Directory.Exists(sDir), sDir, ""),
.CheckFileExists = True,
.ValidateNames = True}
If BTLDlg.ShowDialog() Then
sFile = BTLDlg.FileName
Else
' Abilito pulsante assemblato
Map.refShowBeamPanelVM.ShowBuilding_IsEnabled = True
Return
End If
Dim nNewProjId 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
Select Case EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(61942), EgtMsg(15003), 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
End If
''LoadingWndHelper.OpenLoadingWnd(ActiveIds.IMPORTBTL, 3, EgtMsg(63008), EgtMsg(63009), 50) ' BTL file importing ' Reading BTL file
' inizializzo nuovo progetto
InitNewProj(nNewProjId, sProjDir, CurrProd.nType, CurrProd.sMachine)
' copio file BTL
Dim sBtlCopyPath As String = CurrProd.sProdDirPath & "\" & 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
If bOk Then
bOk = Map.refSceneHostVM.MainController.InsertProject(sBtlCopyPath, False)
End If
Dim sProjFileName As String = sProjDir & "\" & nNewProjId.ToString("0000") & ".nge"
If bOk 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(nNewProjId, sBTLFileName, sBTLFileName, Map.refProjectVM.BTLStructureVM.sLISTNAME, ExportDate, nType, ProjectManagerVM.CurrProd.sMachine)
SetCurrProj(nNewProjId)
' 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, True, 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))
LoadingWndHelper.UpdateLoadingWnd(ActiveIds.IMPORTBTL, 3, EgtMsg(63006), 70, 100) ' Loading graphics
' mostro tutti i pezzi
Map.refShowBeamPanelVM.ShowAll(True)
Else
' elimino da Db
' CheckMe impostata come cancellazione FISICA dal DB...
DbControllers.m_ProjController.DeleteProj(nNewProjId, False)
End If
If bOk Then
' salvo il progetto
bOk = EgtSaveFile(sProjFileName, NGE.CMPTEXT)
End If
' carico filtri di ricerca
Map.refProjectVM.BTLStructureVM.LoadFilters()
' gestisco log di importazione
ManageImportLog(nNewProjId, sProjDir)
'LoadingWndHelper.CloseLoadingWnd(ActiveIds.IMPORTBTL)
' lo salvo
bOk = bOk AndAlso Save(False)
If bOk Then
' riporto aggiunta proj a prod su Db
DbControllers.m_ProdController.AddProj(CurrProd.nProdId, nNewProjId)
End If
' Ricavo il tipo di Warehouse settato nell'INI
Dim nDefault As Integer = 2
If GetMainPrivateProfileInt(S_WAREHOUSE, EgtBEAMWALL.Core.ConstIni.K_TYPE, nDefault) = WarehouseType.MEDIUM Then
' Se di tipo Medium confronto le Sezioni del BTL importato con quelle in Warehouse
WarehouseWndVM.UpdateSectionXMaterial()
End If
' aggiorno CurrProd
Dim PdFileM = DbControllers.m_ProdController.FindCoreByProdId(CurrProd.nProdId)
CurrProd.ProdFileM.SetProjIdList(PdFileM.nProjIdList)
' ricarico BTLPartList
OpenProject(CurrProd)
End Sub
#End Region ' AddBTL
#Region "ShowPopUpStartBtnCommand"
Public ReadOnly Property ShowPopUpStartBtnCommand As ICommand
Get
If m_cmdShowPopUpStartBtnCmd Is Nothing Then
m_cmdShowPopUpStartBtnCmd = New Command(AddressOf ShowPopUpStartBtn)
End If
Return m_cmdShowPopUpStartBtnCmd
End Get
End Property
Public Sub ShowPopUpStartBtn(ByVal param As Object)
If m_IsStartBtnOpen Then
SetBtlImage(DOWN_IMAGE)
SetOpenImage(UP_IMAGE)
SetSaveImage(UP_IMAGE)
SetIsStartBtnOpen(False)
Else
SetBtlImage(UP_IMAGE)
SetIsStartBtnOpen(True)
End If
End Sub
#End Region ' ShowPopUpStartBtnCommand
#Region "ShowPopUpSaveBtnCommand"
Public ReadOnly Property ShowPopUpSaveBtnCommand As ICommand
Get
If m_cmdShowPopUpSaveBtnCmd Is Nothing Then
m_cmdShowPopUpSaveBtnCmd = New Command(AddressOf ShowPopUpSaveBtn)
End If
Return m_cmdShowPopUpSaveBtnCmd
End Get
End Property
Public Sub ShowPopUpSaveBtn(ByVal param As Object)
If m_IsSaveBtnOpen Then
SetOpenImage(DOWN_IMAGE)
SetSaveImage(UP_IMAGE)
SetBtlImage(UP_IMAGE)
SetIsSaveBtnOpen(False)
Else
SetOpenImage(UP_IMAGE)
SetIsSaveBtnOpen(True)
End If
End Sub
#End Region ' ShowPopUpSaveBtnCommand
#Region "ShowPopUpBtlBtnCommand"
Public ReadOnly Property ShowPopUpBtlBtnCommand As ICommand
Get
If m_cmdShowPopUpBtlBtnCmd Is Nothing Then
m_cmdShowPopUpBtlBtnCmd = New Command(AddressOf ShowPopUpBtlBtn)
End If
Return m_cmdShowPopUpBtlBtnCmd
End Get
End Property
Public Sub ShowPopUpBtlBtn(ByVal param As Object)
If m_IsBtlBtnOpen Then
SetSaveImage(DOWN_IMAGE)
SetOpenImage(UP_IMAGE)
SetBtlImage(UP_IMAGE)
SetIsBtlBtnOpen(False)
Else
SetSaveImage(UP_IMAGE)
SetIsBtlBtnOpen(True)
End If
End Sub
#End Region ' ShowPopUpBtlBtnCommand
#End Region ' Commands
End Class