Imports EgtBEAMWALL.Core Imports EgtBEAMWALL.DataLayer.DatabaseModels Public Class SupervisorComm 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 Select Case MachGroupModification.Operation Case Core.StatusMapOpType.PartStart ' aggiorno stati dei pezzi e colore di visualizzazione Case Core.StatusMapOpType.PartEnd Case Core.StatusMapOpType.MachGroupRemovedFromSupervisor Dim Machgroup As MyMachGroupVM = Map.refProjectVM.MachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = MachGroupModification.ItemId) Machgroup.ResetSupervisorId() End Select 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 MachGroupModification.ItemType = StatusMapItemType.MachGroup Then Select Case MachGroupModification.Operation Case Core.StatusMapOpType.PartStart Dim Machgroup As MyMachGroupVM = Map.refProjectVM.MachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = MachGroupModification.ItemId) Machgroup.dtStartTime = MachGroupModification.DtEvent Machgroup.nProduction_State = ItemState.WIP Machgroup.NotifyPropertyChanged(NameOf(Machgroup.Background)) Case Core.StatusMapOpType.PartEnd Dim Machgroup As MyMachGroupVM = Map.refProjectVM.MachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = MachGroupModification.ItemId) Machgroup.dtEndTime = MachGroupModification.DtEvent Machgroup.nProduction_State = ItemState.Produced Machgroup.NotifyPropertyChanged(NameOf(Machgroup.Background)) Case Core.StatusMapOpType.MachGroupRemovedFromSupervisor Dim Machgroup As MyMachGroupVM = Map.refProjectVM.MachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = MachGroupModification.ItemId) Machgroup.ResetSupervisorId() End Select End If Next ' se arriva richiesta da supervisore di blocco e salvataggio ' verifico se ho aperto lo stesso progetto ' se si, chiedo se salvare ' blocco interfaccia fino a notifica di sblocco ' 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