157 lines
5.9 KiB
VB.net
157 lines
5.9 KiB
VB.net
Imports System.Windows.Threading
|
|
Imports EgtBEAMWALL.Core
|
|
Imports EgtBEAMWALL.DataLayer.DatabaseModels
|
|
Imports EgtUILib
|
|
Imports EgtWPFLib5
|
|
|
|
Public Class SupervisorMachGroupPanelVM
|
|
Inherits MyMachGroupPanelVM
|
|
|
|
#Region "FIELDS & PROPERTIES"
|
|
|
|
Private m_ReloadProj_Timer As New DispatcherTimer
|
|
Private m_bReloadProj As Boolean = False
|
|
Private m_bReloadingProj As Boolean = False
|
|
Public ReadOnly Property bReloadingProj As Boolean
|
|
Get
|
|
Return m_bReloadingProj
|
|
End Get
|
|
End Property
|
|
|
|
Private m_MachGroupVMList_View As ListCollectionView = Nothing
|
|
Public ReadOnly Property MachGroupVMList_View As ListCollectionView
|
|
Get
|
|
Return m_MachGroupVMList_View
|
|
End Get
|
|
End Property
|
|
|
|
' lock per aggiunta elemento a lista MachGroup
|
|
Private m_Lock_AddMachGroup As New Object
|
|
|
|
' Dictionari delle modifiche sui machgroup
|
|
' key => LastModificationIndex, LastFileLoadIndex
|
|
Private m_MachGroupFullList As New Dictionary(Of Integer, Integer())
|
|
Public Property MachGroupFullList As Dictionary(Of Integer, Integer())
|
|
Get
|
|
Return m_MachGroupFullList
|
|
End Get
|
|
Set(value As Dictionary(Of Integer, Integer()))
|
|
m_MachGroupFullList = value
|
|
End Set
|
|
End Property
|
|
|
|
#End Region ' FIELDS & PROPERTIES
|
|
|
|
#Region "CONSTRUCTOR"
|
|
Private m_MachGroupVMListComparer As MyComparer
|
|
Friend ReadOnly Property MachGroupVMListComparer As MyComparer
|
|
Get
|
|
Return m_MachGroupVMListComparer
|
|
End Get
|
|
End Property
|
|
|
|
Friend Sub SetMachGroupVMListView()
|
|
m_MachGroupVMList_View = CollectionViewSource.GetDefaultView(m_MachGroupVMList)
|
|
m_MachGroupVMListComparer = New MyComparer
|
|
m_MachGroupVMList_View.CustomSort = m_MachGroupVMListComparer
|
|
NotifyPropertyChanged(NameOf(MachGroupVMList_View))
|
|
End Sub
|
|
|
|
Friend Sub RefreshMachGroupVMSort()
|
|
m_MachGroupVMList_View.CustomSort = m_MachGroupVMListComparer
|
|
End Sub
|
|
|
|
Sub New(MachGroupPanelM As MachGroupPanelM)
|
|
MyBase.New(MachGroupPanelM)
|
|
' riferimento su map
|
|
Map.SetRefSupervisorMachGroupPanelVM(Me)
|
|
BindingOperations.EnableCollectionSynchronization(m_MachGroupVMList, m_Lock_AddMachGroup)
|
|
m_ReloadProj_Timer.Interval = TimeSpan.FromMilliseconds(500)
|
|
AddHandler m_ReloadProj_Timer.Tick, AddressOf ReloadProject_Tick
|
|
m_ReloadProj_Timer.Start()
|
|
End Sub
|
|
|
|
#End Region ' CONSTRUCTOR
|
|
|
|
#Region "METHODS"
|
|
|
|
Public Sub AddMachGroupToSupervisor(MachGroup As MyMachGroupVM)
|
|
If MachGroupVMList.Count = 0 Then
|
|
ManageBTLParts.ShowAll()
|
|
End If
|
|
If Not MachGroupVMList.Contains(MachGroup) Then
|
|
SyncLock (m_Lock_AddMachGroup)
|
|
MachGroupVMList.Add(MachGroup)
|
|
End SyncLock
|
|
End If
|
|
' notifico stato
|
|
MachGroup.NotifyPropertyChanged(NameOf(MachGroup.Produce_IsEnabled))
|
|
End Sub
|
|
|
|
Public Sub ReloadProjectFile()
|
|
m_bReloadProj = True
|
|
End Sub
|
|
|
|
Public Sub ReloadProject_Tick()
|
|
If Not m_bReloadProj Then Return
|
|
m_bReloadingProj = True
|
|
m_bReloadProj = False
|
|
Map.refSceneHostVM.MainController.ResetModified()
|
|
Map.refSceneHostVM.MainController.OpenProject(Map.refSupervisorManagerVM.CurrProd.sProdPath, False)
|
|
RefreshSupervisorMachGroups(Map.refMachinePanelVM.MachineList.ToList())
|
|
m_bReloadingProj = False
|
|
End Sub
|
|
|
|
#End Region ' CONSTRUCTOR
|
|
|
|
#Region "METHODS"
|
|
|
|
Public Shared Sub RefreshSupervisorMachGroups(MachineList As List(Of Machine))
|
|
' Carico tutti i gruppi di lavorazione aggiunti al progetto
|
|
Dim nId = EgtGetFirstMachGroup()
|
|
While nId <> GDB_ID.NULL
|
|
' se gia' presente, vado al prossimo
|
|
If Map.refProjectVM.ProdMachGroupPanelVM.MachGroupVMList.Any(Function(x) x.Id = nId) Then
|
|
nId = EgtGetNextMachGroup(nId)
|
|
Continue While
|
|
End If
|
|
' altrimenti lo carico
|
|
EgtSetCurrMachGroup(nId)
|
|
Dim sName As String = String.Empty
|
|
Dim sMachine As String = String.Empty
|
|
EgtGetMachGroupName(nId, sName)
|
|
EgtGetMachGroupMachineName(nId, sMachine)
|
|
' cerco la macchina tra quelle presenti
|
|
Dim UsedMachine As MyMachine = Nothing
|
|
Dim bOk As Boolean = Machine.SearchMachine(sMachine, MachineList, UsedMachine)
|
|
If Not bOk OrElse UsedMachine.nType = MachineType.NULL Then
|
|
EgtOutLog("Machine incompatible with beam & wall machining!!")
|
|
Else
|
|
Map.refProjectVM.ProdMachGroupPanelVM.m_MyMachGroupPanelM.AddMachGroup(MyMachGroupM.CreateMyMachGroup(UsedMachine.nType, nId, sName, sMachine))
|
|
End If
|
|
nId = EgtGetNextMachGroup(nId)
|
|
End While
|
|
EgtResetCurrMachGroup()
|
|
' carico solo elementi passati al supervisore
|
|
Dim TempList As List(Of MachGroupModel) = DbControllers.m_MachGroupController.GetByProdSupervisor(Map.refSupervisorManagerVM.CurrProd.nProdId, m_SupervisorId)
|
|
For Each DBMachGroup In TempList
|
|
If Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Any(Function(x) x.Id = DBMachGroup.MachGroupId) Then Continue For
|
|
Dim MachGroup As MyMachGroupVM = Map.refProjectVM.ProdMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = DBMachGroup.MachGroupId)
|
|
' leggo dati da Db
|
|
MachGroup.dtStartTime = DBMachGroup.DtStart
|
|
MachGroup.dtEndTime = DBMachGroup.DtEnd
|
|
MachGroup.MyMachGroupM.SetProductionState(DBMachGroup.State)
|
|
MachGroup.SetProductionIndex(DBMachGroup.ProdIndex)
|
|
For Each Part In MachGroup.PartVMList
|
|
Dim DBPart As PartModel = DbControllers.m_PartController.FindByPartId(Map.refSupervisorManagerVM.CurrProd.nProdId, Part.nPartId)
|
|
Part.dtStartTime = DBPart.DtStart
|
|
Part.dtEndTime = DBPart.DtEnd
|
|
Part.nProduction_State = DBPart.State
|
|
Next
|
|
Map.refProjectVM.SupervisorMachGroupPanelVM.AddMachGroupToSupervisor(MachGroup)
|
|
Next
|
|
End Sub
|
|
|
|
#End Region ' METHODS
|
|
|
|
End Class |