Files
egtbeamwall/EgtBEAMWALL.ViewerOptimizer/SupervisorCommThread/SupervisorComm.vb
T
Emmanuele Sassi ace6bbc35c - Correzioni comunicazione tra supervisore e ottimizzatore
- Correzioni apertura/chiusura finestre Waiting e Blocked
2021-11-04 10:15:56 +01:00

216 lines
11 KiB
VB.net

Imports EgtBEAMWALL.Core
Imports EgtBEAMWALL.DataLayer.DatabaseModels
Public Class SupervisorComm
Private m_BlockedWnd As BlockedWndV
Sub New()
' imposto in Map
'Map.SetRefMachManaging(Me)
End Sub
Friend Sub Timer_Tick()
' se sono in pagina vista
If Map.refMainMenuVM.SelPage = Pages.VIEW Then
' se non c'e' un progetto attivo, esco
If IsNothing(Map.refProjManagerVM.CurrProj) Then Return
' verifico se c'e' un progetto aperto o in caricamento
'If IsNothing(Map.refProjManagerVM.CurrProj) OrElse Map.refProjManagerVM.bLoadingProj Then Return
' verifico se c'e' una sessione aperta sul progetto corrente
Dim nModificationIndex As Integer = -1
Dim ActiveSessionList As List(Of StatusMapModel) = DbControllers.m_StatusMapController.GetProd()
For Each ActiveSession In ActiveSessionList
If ActiveSession.ItemId = Map.refProjManagerVM.CurrProj.nProdId Then
nModificationIndex = ActiveSession.Index
End If
Next
If nModificationIndex = -1 Then Return
' verifico se ci sono modifiche
If nModificationIndex <> Map.refProjManagerVM.CurrProj.nModificationIndex Then
' recupero elementi modificati
Dim MachGroupList As List(Of StatusMapModel) = DbControllers.m_StatusMapController.GetFrom(Map.refProjManagerVM.CurrProj.nModificationIndex + 1)
Dim bReloadFile As Boolean = False
For Each MachGroupModification In MachGroupList
If MachGroupModification.ItemType = StatusMapItemType.Part Then
Dim Part As BTLPartVM = CALCPanelVM.GetBTLPartVMFromPartId(MachGroupModification.ItemId)
Select Case MachGroupModification.Operation
Case Core.StatusMapOpType.PartStart
' non faccio nulla
Case Core.StatusMapOpType.PartEnd
Part.NotifyPropertyChanged(NameOf(Part.nDONE))
Part.NotifyPropertyChanged(NameOf(Part.Background))
End Select
ElseIf MachGroupModification.ItemType = StatusMapItemType.Comm Then
' se arriva richiesta da supervisore di blocco e salvataggio
Select Case MachGroupModification.Operation
Case StatusMapOpType.SupervisorStopRequest
' blocco interfaccia fino a notifica di sblocco
SupervisorCommThread.SetViewerOptimizerBlocked(True)
'' chiedo se salvare
'Map.refMainWindowVM.m_SupervisorStop = True
Case StatusMapOpType.SupervisorReleaseStop
SupervisorCommThread.SetViewerOptimizerBlocked(False)
'Map.refMainWindowVM.m_SupervisorStop = False
End Select
End If
Next
' aggiorno indice del proj
Map.refProjManagerVM.CurrProj.SetModificationIndex(nModificationIndex)
End If
' se arriva richiesta da supervisore di blocco e salvataggio
' verifico se ho aperto lo stesso progetto
' chiedo se salvare
' blocco interfaccia fino a notifica di sblocco
' se sono in pagina ottimizzatore
ElseIf Map.refMainMenuVM.SelPage = Pages.MACHINING Then
' se non c'e' un progetto attivo, esco
If IsNothing(Map.refProdManagerVM.CurrProd) Then Return
' verifico se c'e' un progetto aperto o in caricamento
'If IsNothing(Map.refProdManagerVM.CurrProd) OrElse Map.refProdManagerVM.bLoadingProd Then Return
' verifico se c'e' una sessione aperta sul progetto corrente
Dim nModificationIndex As Integer = -1
Dim ActiveSessionList As List(Of StatusMapModel) = DbControllers.m_StatusMapController.GetProd()
For Each ActiveSession In ActiveSessionList
If ActiveSession.ItemId = Map.refProdManagerVM.CurrProd.nProdId Then
nModificationIndex = ActiveSession.Index
End If
Next
If nModificationIndex = -1 Then Return
' verifico se ci sono modifiche
If nModificationIndex <> Map.refProdManagerVM.CurrProd.nModificationIndex Then
' recupero elementi modificati
Dim MachGroupList As List(Of StatusMapModel) = DbControllers.m_StatusMapController.GetFrom(Map.refProdManagerVM.CurrProd.nModificationIndex + 1)
Dim bReloadFile As Boolean = False
For Each MachGroupModification In MachGroupList
If Not SupervisorCommThread.bViewerOptimizerBlocked AndAlso MachGroupModification.ItemType = StatusMapItemType.MachGroup Then
Dim MachGroup As MyMachGroupVM = Map.refProjectVM.MachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = MachGroupModification.ItemId)
Select Case MachGroupModification.Operation
Case Core.StatusMapOpType.PartStart
MachGroup.dtStartTime = MachGroupModification.DtEvent
MachGroup.nProduction_State = ItemState.WIP
MachGroup.NotifyPropertyChanged(NameOf(MachGroup.Background))
Case Core.StatusMapOpType.PartEnd
MachGroup.dtEndTime = MachGroupModification.DtEvent
MachGroup.nProduction_State = ItemState.Produced
MachGroup.NotifyPropertyChanged(NameOf(MachGroup.Background))
Case Core.StatusMapOpType.MachGroupRemovedFromSupervisor
MachGroup.ResetSupervisorId()
End Select
ElseIf MachGroupModification.ItemType = StatusMapItemType.Part Then
Dim Part As PartVM = CALCPanelVM.GetPartVMFromPartId(MachGroupModification.ItemId)
Select Case MachGroupModification.Operation
Case Core.StatusMapOpType.PartStart
Part.dtStartTime = MachGroupModification.DtEvent
Part.nProduction_State = ItemState.WIP
Part.NotifyPropertyChanged(NameOf(Part.Background))
Case Core.StatusMapOpType.PartEnd
Part.dtEndTime = MachGroupModification.DtEvent
Part.nProduction_State = ItemState.Produced
Part.NotifyPropertyChanged(NameOf(Part.Background))
End Select
ElseIf MachGroupModification.ItemType = StatusMapItemType.Comm Then
' se arriva richiesta da supervisore di blocco e salvataggio
Select Case MachGroupModification.Operation
Case StatusMapOpType.SupervisorStopRequest
' blocco interfaccia fino a notifica di sblocco
SupervisorCommThread.SetViewerOptimizerBlocked(True)
'' chiedo se salvare
'Map.refMainWindowVM.m_SupervisorStop = True
Case StatusMapOpType.SupervisorReleaseStop
Dim MachGroupId As Integer = -1
If Not String.IsNullOrWhiteSpace(MachGroupModification.Val) Then Integer.TryParse(MachGroupModification.Val, MachGroupId)
If IsNothing(MachGroupId) Then MachGroupId = -1
SupervisorCommThread.SetViewerOptimizerBlocked(False, MachGroupId)
'Map.refMainWindowVM.m_SupervisorStop = False
End Select
End If
Next
' aggiorno indice del prod
Map.refProdManagerVM.CurrProd.SetModificationIndex(nModificationIndex)
End If
End If
' se c'e' un progetto aperto o in caricamento
'If IsNothing(Map.refProdManagerVM.CurrProd) OrElse Map.refProdManagerVM.bLoadingProd Then Return
'' recupero indice modifica del prod
'Dim nModificationIndex As Integer = 0
'Dim ActiveSessionList As List(Of StatusMapModel) = DbControllers.m_StatusMapController.GetProd()
'For Each ActiveSession In ActiveSessionList
' If ActiveSession.ItemId = Map.refSupervisorManagerVM.CurrProd.nProdId Then
' nModificationIndex = ActiveSession.Index
' End If
'Next
'' se indice letto diverso da indice gia' presente
'If nModificationIndex <> Map.refSupervisorManagerVM.CurrProd.nModificationIndex Then
' ' recupero elementi modificati
' Dim MachGroupList As List(Of StatusMapModel) = DbControllers.m_StatusMapController.GetFrom(Map.refSupervisorManagerVM.CurrProd.nModificationIndex + 1)
' Dim bReloadFile As Boolean = False
' For Each MachGroupModification In MachGroupList
' Select Case MachGroupModification.Operation
' Case Core.StatusMapOpType.MachGroupAdd
' Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupFullList.Add(MachGroupModification.ItemId, {MachGroupModification.Index, MachGroupModification.Index})
' Case Core.StatusMapOpType.MachGroupMod
' Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupFullList(MachGroupModification.ItemId)(0) = MachGroupModification.Index
' Case Core.StatusMapOpType.MachGroupRem
' Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupFullList.Remove(MachGroupModification.ItemId)
' Case Core.StatusMapOpType.MachGroupAssignedToSupervisor
' Dim MachgroupIndexes As Integer() = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupFullList(MachGroupModification.ItemId)
' ' se indice di aggiornamento file diverso da indice ultima modifica
' If MachgroupIndexes(0) <> MachgroupIndexes(1) Then
' ' devo ricaricare il file
' bReloadFile = True
' ' ricarico il progetto
' Map.refProjectVM.SupervisorMachGroupPanelVM.ReloadProjectFile()
' End If
' ' lo aggiungo alla lista di MachGroup
' Map.refProjectVM.SupervisorMachGroupPanelVM.AddMachGroupToSupervisor(Map.refProjectVM.ProdMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = MachGroupModification.ItemId))
' End Select
' Next
' ' se devo ricaricare il file
' If bReloadFile Then
' ' aggiorno indici in dictionary
' For Each MachGroupModification In Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupFullList.Where(Function(x) x.Value(0) <> x.Value(1))
' MachGroupModification.Value(1) = MachGroupModification.Value(0)
' Next
' ' ricarico il progetto
' 'Map.refProjectVM.SupervisorMachGroupPanelVM.ReloadProjectFile()
' End If
' ' aggiorno indice del prod
' Map.refSupervisorManagerVM.CurrProd.SetModificationIndex(nModificationIndex)
'End If
'' verifico se e' aperto in qualche ottimizzatore
''DbControllers.m_ProdController.
''Map.refSupervisorManagerVM.CurrProd.bIsLocked
'' verifico se la mappa messaggi ha indice maggiore del mio
'' ricarico il progetto
'' aggiorno eventuali nuovi machgroup
'' se devo ripartire a meta' di una barra
'' mando messaggio di blocco dell'ottimizzatore
End Sub
End Class