345 lines
16 KiB
VB.net
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
|