Files
egtbeamwall/EgtBEAMWALL.ViewerOptimizer/MachGroupPanel/MyMachGroupPanelVM.vb
T

345 lines
16 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.ComponentModel
Imports System.IO
Imports System.Web.UI.WebControls.WebParts
Imports EgtBEAMWALL.Core
Imports EgtUILib
Imports EgtWPFLib5
Public Class MyMachGroupPanelVM
Inherits Core.MyMachGroupPanelVM
#Region "FIELDS & PROPERTIES"
' lista dei RawPart presenti su db
Private m_RawPartDbList As New List(Of RawPartM)
' tolleranza di ricerca delle barre in magazzino
Private m_DimensionRange As Double = 0.1
Public Shadows Property SelectedMachGroup As MyMachGroupVM
Get
Return m_SelectedMachGroup
End Get
Set(value As MyMachGroupVM)
m_SelectedMachGroup = value
If Not IsNothing(value) Then
OnPreSetCurrMachGroup()
EgtSetCurrMachGroup(value.Id)
OnPostSetCurrMachGroup()
End If
NotifyPropertyChanged(NameOf(SelectedMachGroup))
End Set
End Property
#End Region ' FIELDS & PROPERTIES
#Region "CONSTRUCTOR"
Sub New(MachGroupPanelM As MachGroupPanelM)
MyBase.New(MachGroupPanelM)
' elimino copie da cancellare
DeleteDuplo()
' verifico se volume grezzi calcolato
For Each MachGroup As MyMachGroupVM In m_MachGroupVMList
Dim bIsCalculated As Boolean = False
For Each Part In MachGroup.PartVMList
If Part.dVolume > 0 Then Continue For
Part.PartM.ReadVolume()
bIsCalculated = True
Next
If bIsCalculated Then
MachGroup.UpdateUsage()
End If
Next
ReadAllRawPartFromDb()
End Sub
#End Region ' CONSTRUCTOR
#Region "METHODS"
Protected Overrides Sub CreateMachGroupVMList()
Dim all As New List(Of MachGroupVM)
For Each MachGroupM In m_MachGroupPanelM.GetMachGroups()
all.Add(New MyMachGroupVM(MachGroupM))
Next
For Each MachGroupvM As MachGroupVM In all
AddHandler MachGroupvM.PropertyChanged, AddressOf OnMachGroupVMPropertyChanged
Next
MachGroupVMList = New ObservableCollection(Of MachGroupVM)(all)
AddHandler MachGroupVMList.CollectionChanged, AddressOf OnMachGroupVMListChanged
End Sub
Protected Overrides Sub OnMachGroupAdded(sender As Object, e As MachGroupAddedEventArgs)
Dim MachGroupVM As MachGroupVM = Nothing
Select Case DirectCast(e.NewMachGroupM, MyMachGroupM).nType
Case Core.ConstBeam.MachineType.BEAM, Core.ConstBeam.MachineType.WALL
MachGroupVM = New MyMachGroupVM(e.NewMachGroupM)
Case Core.ConstBeam.MachineType.NULL
Return
End Select
MachGroupVMList.Add(MachGroupVM)
NotifyPropertyChanged(NameOf(MachGroupVMList))
End Sub
'Protected Overrides Sub CreateMachGroupVMList()
' Dim all As New List(Of MachGroupVM)
' For Each MachGroupM In m_MachGroupPanelM.GetMachGroups()
' If DirectCast(MachGroupM, MyMachGroupM).nMachineType = MachineType.BEAM Then
' all.Add(New BeamMachGroupVM(MachGroupM))
' Else
' all.Add(New WallMachGroupVM(MachGroupM))
' End If
' Next
' For Each MachGroupvM As MachGroupVM In all
' AddHandler MachGroupvM.PropertyChanged, AddressOf OnMachGroupVMPropertyChanged
' Next
' MachGroupVMList = New ObservableCollection(Of MachGroupVM)(all)
' AddHandler MachGroupVMList.CollectionChanged, AddressOf OnMachGroupVMListChanged
'End Sub
'Public Overrides Function InitMachGroupList(Optional bUseDefaults As Boolean = False) As Boolean
' ' Svuoto precedente lista di MachGroup
' MachGroupVMList.Clear()
' ' aggiorno copie
' MyMachGroupPanelM.UpdateDuplo()
' ' verifico se esistono già gruppi di lavorazione o se devo creare il primo
' Dim bOk As Boolean = False
' Dim nId = EgtGetFirstMachGroup()
' If nId <> GDB_ID.NULL Then
' bOk = EgtSetCurrMachGroup(nId)
' End If
' If Not bOk Then Return True
' ' carico lista dei gruppi di lavorazione
' m_MachGroupPanelM.MachGroupMList = MyMachGroupPanelM.LoadMyMachGroups(Map.refMachinePanelVM.MachineList.ToList())
' ' elimino copie da cancellare
' MyMachGroupPanelM.DeleteDuplo()
' If bOk Then SelectedMachGroup = MachGroupVMList(0)
' EgtZoom(ZM.ALL)
' Return True
'End Function
Public Function RefreshMachGroupList() As Boolean
' carico lista dei gruppi di lavorazione
For Each MachGroup As MyMachGroupM In MyMachGroupPanelM.UpdateFromNestingMyMachGroups(Map.refMachinePanelVM.MachineList.ToList())
m_MachGroupPanelM.AddMachGroup(MachGroup)
Next
' aggiorno contatore pezzi in produzione
For Each MachGroup As MyMachGroupVM In MachGroupVMList
For Each Part In MachGroup.PartVMList
' aggiorno calcolo pezzi in produzione
Dim BTLPart As BTLPartVM = BTLPartVM.RetrieveBTLPartFromPart(Part.nPartId)
If Not IsNothing(BTLPart) Then BTLPart.RefreshPartInProd()
Next
Next
' seleziono primo MachGroup
If MachGroupVMList.Count > 0 Then SelectedMachGroup = MachGroupVMList(0)
EgtZoom(ZM.ALL)
Return True
End Function
' funzione utilizzata per caricare in lista gruppo aggiunto al progetto dal supervisore
Public Function AddMachGroupToList(nId As Integer) As Boolean
' carico gruppo di lavorazione
Dim MachGroup As MyMachGroupM = MyMachGroupPanelM.LoadMyMachGroupFromId(nId, Map.refMachinePanelVM.MachineList.ToList())
If Not IsNothing(MachGroup) Then
m_MachGroupPanelM.AddMachGroup(MachGroup)
Return True
End If
Return False
End Function
' funzione che cancella tutti i pezzi segnati da eliminare
Public Sub DeleteDuplo()
' reset necessario per poter accedere direttamente al grezzo dalle info pezzo e al MachGroup tramite la gerarchia Db geometrico
EgtResetCurrMachGroup()
Dim bDuploToDeleteFound As Boolean = False
Dim nPartId As Integer = EgtGetFirstPart()
While nPartId <> GDB_ID.NULL
Dim bIsToDelete As Boolean = False
If DuploGetToDelete(nPartId, bIsToDelete) AndAlso bIsToDelete Then
' verifico se ci sono copie
Dim nDuploCount As Integer = 0
EgtDuploCount(nPartId, nDuploCount)
Dim DuploList As New List(Of Integer)
If nDuploCount > 0 AndAlso EgtDuploList(nPartId, DuploList) Then
bDuploToDeleteFound = True
' cancello tutti i pezzi copia nelle barre
For Each nDuploId In DuploList
' recupero grezzo cui appartiene
Dim nRawPartId As Integer = MyMachGroupPanelM.DuploGetRawPart(nDuploId)
' recupero gruppo di lavorazione
Dim nMachGroupId As Integer = EgtGetParent(EgtGetParent(nRawPartId))
' lo setto come corrente
EgtSetCurrMachGroup(nMachGroupId)
' elimino pezzo copia
EgtRemovePartFromRawPart(nDuploId)
EgtErase(nDuploId)
' recupero gruppo di lavorazione e trave dell'interfaccia
Dim BeamMachGroup As MyMachGroupVM = MachGroupVMList.FirstOrDefault(Function(x) x.Id = nMachGroupId)
If Not IsNothing(BeamMachGroup) Then
Dim Beam As PartVM = BeamMachGroup.PartVMList.FirstOrDefault(Function(x) x.nPartId = nDuploId)
EgtSetCurrMachGroup(BeamMachGroup.Id)
Beam.DeletePart()
End If
' reset necessario per poter ottenere nMachGroupId corretto
EgtResetCurrMachGroup()
' aggiorno dati utilizzo barra
BeamMachGroup.UpdateUsage()
Next
' aggiorno quantita' in prod
Dim BTLPart As BTLPartVM = CALCPanelVM.GetBTLPartVMFromBTLPartId(nPartId)
BTLPart.RefreshPartInProd()
End If
DuploResetToDelete(nPartId)
End If
nPartId = EgtGetNextPart(nPartId)
End While
' se cancellato almeno un pezzo
If bDuploToDeleteFound Then
Map.refProdManagerVM.Save()
End If
EgtResetCurrMachGroup()
End Sub
Friend Shared Function DuploGetToDelete(nSouId As Integer, ByRef bToDelete As Boolean) As Boolean
If IsNothing(nSouId) Then Return False
Return EgtGetInfo(nSouId, DUPLO_TODELETE, bToDelete)
End Function
Public Shared Function DuploSetToDelete(nSouId As Integer) As Boolean
If IsNothing(nSouId) Then Return False
Return EgtSetInfo(nSouId, DUPLO_TODELETE, True)
End Function
Private Shared Function DuploResetToDelete(nSouId As Integer) As Boolean
If IsNothing(nSouId) Then Return False
Return EgtSetInfo(nSouId, DUPLO_TODELETE, "")
End Function
Public Overrides Sub AddMachGroup()
Dim MyMachGroupM As MyMachGroupM = m_MyMachGroupPanelM.NewMyMachGroup(CurrentMachine.sMachineName, Map.refProjectVM.BTLStructureVM.nPROJTYPE)
' e lo seleziono
SelectedMachGroup = MachGroupVMList.FirstOrDefault(Function(x) x.MachGroupM Is MyMachGroupM)
End Sub
' funzione che seleziona primo gruppo
Friend Sub SelFirstMachGroup()
If Not IsNothing(Me) AndAlso Not IsNothing(MachGroupVMList) AndAlso MachGroupVMList.Count > 0 Then
SelectedMachGroup = MachGroupVMList(0)
Else
SelectedMachGroup = Nothing
EgtResetCurrMachGroup()
' nascondo tutti i pezzi
Map.refProjectVM.BTLStructureVM.HideAll()
End If
End Sub
Public Overrides Function OnPostSetCurrMachGroup() As Boolean
' resetto eventuale selezione pezzo
Dim SelMachGroup As MyMachGroupVM = DirectCast(SelectedMachGroup, MyMachGroupVM)
SelMachGroup.SetSelPart(Nothing)
' Imposto vista solo tavola
EgtSetMachineLook(MCH_LOOK.TAB)
Core.ViewPanelVM.BWSetView(If(Core.ViewPanelVM.Type = BWType.BEAM, VT.ISO_SW, VT.TOP), False)
EgtZoom(ZM.ALL)
Return True
End Function
Friend Sub ReadAllRawPartFromDb()
m_RawPartDbList.Clear()
' aggiornamento materiale
For Each MachGroup As MyMachGroupVM In Map.refMachGroupPanelVM.m_MachGroupVMList
If IsNothing(MachGroup.MyMachGroupM.RawPartM) OrElse MachGroup.MyMachGroupM.RawPartM.nId = 0 OrElse MachGroup.MyMachGroupM.RawPartM.Material.nId = 0 OrElse String.IsNullOrWhiteSpace(MachGroup.MyMachGroupM.RawPartM.Material.sWarehouseMaterial) Then
ReadRawPartFromDb(MachGroup, True)
End If
Next
m_RawPartDbList.Clear()
End Sub
Friend Sub ReadRawPartFromDb(MachGroup As MyMachGroupVM, Optional bUseList As Boolean = False)
If Not IsNothing(MachGroup.MyMachGroupM.RawPartM) AndAlso MachGroup.MyMachGroupM.RawPartM.nId > 0 AndAlso MachGroup.MyMachGroupM.RawPartM.Material.nId > 0 AndAlso Not String.IsNullOrWhiteSpace(MachGroup.MyMachGroupM.RawPartM.Material.sWarehouseMaterial) Then Return
' aggiornamento materiale
Dim RawPart As RawPartM = Nothing
If bUseList Then
RawPart = m_RawPartDbList.FirstOrDefault(Function(x) x.Material.sMaterial = MachGroup.RawPartM.Material.sMaterial AndAlso Math.Abs(x.Material.dW - MachGroup.dW) < m_DimensionRange AndAlso Math.Abs(x.Material.dH - MachGroup.dH) < m_DimensionRange AndAlso Math.Abs(x.Material.dL - MachGroup.dL) < m_DimensionRange)
End If
If Not IsNothing(RawPart) Then
MachGroup.MyMachGroupM.RawPartM.Material.SetId(RawPart.Material.nId)
MachGroup.MyMachGroupM.RawPartM.Material.SetWarehouseMaterial(RawPart.Material.sWarehouseMaterial)
MachGroup.MyMachGroupM.RawPartM.SetId(RawPart.nId)
For Each Part In MachGroup.PartVMList
Part.MaterialM.SetId(RawPart.Material.nId)
Part.MaterialM.SetWarehouseMaterial(RawPart.Material.sWarehouseMaterial)
Next
Else
Dim Material As MaterialM = Nothing
Dim SearchMaterial As DataLayer.Controllers.MaterialsController.SearchResult = DbControllers.m_MaterialsController.SearchFilt(MachGroup.RawPartM.Material.sMaterial)
Select Case SearchMaterial.Tipo
Case DataLayer.Controllers.MaterialsController.SearchResult.TypeFound.ALIAS, DataLayer.Controllers.MaterialsController.SearchResult.TypeFound.MATERIAL
If Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.BEAM Then
Material = SearchMaterial.Result.FirstOrDefault(Function(x) Math.Abs(x.dW - MachGroup.dW) < m_DimensionRange AndAlso Math.Abs(x.dH - MachGroup.dH) < m_DimensionRange)
ElseIf Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.WALL Then
Material = SearchMaterial.Result.FirstOrDefault(Function(x) Math.Abs(x.dH - MachGroup.dH) < m_DimensionRange)
End If
Case Else
EgtOutLog("Error! MachGroup material not found!!")
If Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.BEAM Then
Material = New MaterialM(MachGroup.dW, MachGroup.dH, 0, 0, MachGroup.sMATERIAL)
ElseIf Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.WALL Then
Material = New MaterialM(0, MachGroup.dH, 0, 0, MachGroup.sMATERIAL)
End If
End Select
Dim SearchRawPart As List(Of RawPartM) = DbControllers.m_RawItemsController.GetFilt(Material.nId)
If Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.BEAM Then
RawPart = SearchRawPart.FirstOrDefault(Function(x) Math.Abs(x.Material.dW - MachGroup.dW) < m_DimensionRange AndAlso Math.Abs(x.Material.dH - MachGroup.dH) < m_DimensionRange AndAlso Math.Abs(x.dL - MachGroup.dL) < m_DimensionRange)
ElseIf Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.WALL Then
RawPart = SearchRawPart.FirstOrDefault(Function(x) Math.Abs(x.dW - MachGroup.dW) < m_DimensionRange AndAlso Math.Abs(x.Material.dH - MachGroup.dH) < m_DimensionRange AndAlso Math.Abs(x.dL - MachGroup.dL) < m_DimensionRange)
End If
If Not IsNothing(RawPart) Then
MachGroup.MyMachGroupM.RawPartM.Material.SetId(RawPart.Material.nId)
MachGroup.MyMachGroupM.RawPartM.Material.SetWarehouseMaterial(RawPart.Material.sWarehouseMaterial)
MachGroup.MyMachGroupM.RawPartM.SetId(RawPart.nId)
For Each Part In MachGroup.PartVMList
Part.MaterialM.SetId(RawPart.Material.nId)
Part.MaterialM.SetWarehouseMaterial(RawPart.Material.sWarehouseMaterial)
Next
Else
Dim nRawPartId As Integer = DbControllers.m_RawItemsController.Upsert(New RawPartM(Material, MachGroup.dW, MachGroup.dL, 0, False))
If nRawPartId > 0 Then
SearchRawPart = DbControllers.m_RawItemsController.GetFilt(Material.nId)
If Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.BEAM Then
RawPart = SearchRawPart.FirstOrDefault(Function(x) Math.Abs(x.Material.dW - MachGroup.dW) < m_DimensionRange AndAlso Math.Abs(x.Material.dH - MachGroup.dH) < m_DimensionRange AndAlso Math.Abs(x.dL - MachGroup.dL) < m_DimensionRange)
ElseIf Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.WALL Then
RawPart = SearchRawPart.FirstOrDefault(Function(x) Math.Abs(x.dW - MachGroup.dW) < m_DimensionRange AndAlso Math.Abs(x.Material.dH - MachGroup.dH) < m_DimensionRange AndAlso Math.Abs(x.dL - MachGroup.dL) < m_DimensionRange)
End If
If IsNothing(RawPart) Then
EgtOutLog("Error! MachGroup material not found!!")
RawPart = New RawPartM(Material, MachGroup.dW, MachGroup.dL, 0, False)
End If
MachGroup.MyMachGroupM.RawPartM.Material.SetId(RawPart.Material.nId)
MachGroup.MyMachGroupM.RawPartM.Material.SetWarehouseMaterial(RawPart.Material.sWarehouseMaterial)
MachGroup.MyMachGroupM.RawPartM.SetId(RawPart.nId)
For Each Part In MachGroup.PartVMList
Part.MaterialM.SetId(RawPart.Material.nId)
Part.MaterialM.SetWarehouseMaterial(RawPart.Material.sWarehouseMaterial)
Next
End If
End If
If bUseList Then
m_RawPartDbList.AddRange(SearchRawPart)
m_RawPartDbList = m_RawPartDbList.Distinct().ToList()
End If
End If
End Sub
#End Region ' METHODS
End Class