Imports EgtBEAMWALL.DataLayer.DatabaseModels Public Class ViewerOptimizerComm Sub New() ' imposto in Map 'Map.SetRefMachManaging(Me) End Sub Friend Sub Timer_Tick() ' se c'e' un progetto aperto o in caricamento If IsNothing(Map.refSupervisorManagerVM.CurrProd) OrElse Map.refSupervisorManagerVM.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 If MachGroupModification.ItemType = Core.StatusMapItemType.MachGroup Then 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() Else Dim ProdMachGroup As MyMachGroupVM = Map.refProjectVM.ProdMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = MachGroupModification.ItemId) ProdMachGroup.dtStartTime = DateTime.MinValue ProdMachGroup.dtEndTime = DateTime.MinValue ProdMachGroup.MyMachGroupM.SetProductionState(Core.ItemState.Assigned) Dim DBMachGroup As MachGroupModel = DbControllers.m_MachGroupController.FindByMachGroupId(Map.refSupervisorManagerVM.CurrProd.nProdId, ProdMachGroup.Id) ProdMachGroup.SetProductionIndex(DBMachGroup.ProdIndex) For Each Part In ProdMachGroup.PartVMList Part.dtStartTime = DateTime.MinValue Part.dtEndTime = DateTime.MinValue Part.nProduction_State = Core.ItemState.Assigned Next ' lo aggiungo alla lista di MachGroup Map.refProjectVM.SupervisorMachGroupPanelVM.AddMachGroupToSupervisor(ProdMachGroup) End If End Select ElseIf MachGroupModification.ItemType = Core.StatusMapItemType.Comm AndAlso MachGroupModification.Operation = Core.StatusMapOpType.ViewOptimStoped Then ViewerOptimizerCommThread.SetViewerOptimizerBlocked(True) End If 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