Files
egtbeamwall/EgtBEAMWALL.Supervisor/LeftPanel/LeftPanelVM.vb
T

250 lines
9.6 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.IO
Imports EgtBEAMWALL.Core
Imports EgtUILib
Imports EgtWPFLib5
Public Class LeftPanelVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
Public ReadOnly Property AxisList As ObservableCollection(Of Axis)
Get
Return Map.refMachCommandMessagePanelVM.AxisList
End Get
End Property
Public ReadOnly Property sOPState As String
Get
Return Map.refMachCommandMessagePanelVM.sOPState
End Get
End Property
Private m_bRestart As Boolean = False
Public Property bRestart As Boolean
Get
Return m_bRestart
End Get
Set(value As Boolean)
m_bRestart = value
NotifyPropertyChanged(NameOf(FeatureList_Visibility))
End Set
End Property
Public ReadOnly Property FeatureList_Visibility As Visibility
Get
Return If(m_bRestart, Visibility.Visible, Visibility.Collapsed)
End Get
End Property
' Definizione comandi
Private m_cmdDeleteRawPart As ICommand
Private m_cmdMoveUpRawPart As ICommand
Private m_cmdMoveDownRawPart As ICommand
Private m_cmdDoneRawPart As ICommand
Private m_cmdDonePart As ICommand
#End Region 'FIELDS & PROPERTIES
Sub New()
' imposto riferimento su mappa
Map.SetRefLeftPanelVM(Me)
End Sub
#Region "METHODS"
Friend Sub UpdateView()
NotifyPropertyChanged("ViewPage_Visibility")
NotifyPropertyChanged("MachiningPage_Visibility")
End Sub
#End Region ' METHODS
#Region "COMMANDS"
#Region "DoneRawPart"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property DoneRawPart_Command As ICommand
Get
If m_cmdDoneRawPart Is Nothing Then
m_cmdDoneRawPart = New Command(AddressOf DoneRawPart)
End If
Return m_cmdDoneRawPart
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub DoneRawPart()
If IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then Return
Dim SelMachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup
' scrivo tutti pezzi completati
For PartIndex = 0 To SelMachGroup.PartVMList.Count - 1
Dim Part As PartVM = SelMachGroup.PartVMList(PartIndex)
SetDonePart(SelMachGroup, Part)
Next
End Sub
#End Region ' DoneRawPart
#Region "DeleteRawPart"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property DeleteRawPart_Command As ICommand
Get
If m_cmdDeleteRawPart Is Nothing Then
m_cmdDeleteRawPart = New Command(AddressOf DeleteRawPart)
End If
Return m_cmdDeleteRawPart
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub DeleteRawPart()
If IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then Return
Dim SelMachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup
' se gia' prodotto, o in produzione non lo posso eliminare
If SelMachGroup.dtStartTime <> Date.MinValue OrElse SelMachGroup.dtEndTime <> Date.MinValue OrElse SelMachGroup.bReadyForMachining OrElse SelMachGroup.bSentToMachine OrElse SelMachGroup.bResetWhileCutting Then
MessageBox.Show("Impossibile cancellare il grezzo")
Return
End If
If DbControllers.m_MachGroupController.RemoveFromSupervisor(Map.refSupervisorManagerVM.CurrProd.nProdId, SelMachGroup.Id) Then
' se rimozione da Db ok, lo rimuovo da lista
Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Remove(SelMachGroup)
End If
End Sub
#End Region ' DeleteRawPart
#Region "DonePart"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property DonePart_Command As ICommand
Get
If m_cmdDonePart Is Nothing Then
m_cmdDonePart = New Command(AddressOf DonePart)
End If
Return m_cmdDonePart
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub DonePart()
If IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then Return
Dim SelMachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup
If IsNothing(SelMachGroup.SelPart) Then Return
SetDonePart(SelMachGroup, SelMachGroup.SelPart)
End Sub
Public Sub SetDonePart(MachGroup As MyMachGroupVM, Part As PartVM)
If IsNothing(MachGroup) OrElse IsNothing(Part) Then Return
' se ora d'inizio non e' gia' fissata
Dim Time As DateTime = DateTime.Now()
If Part.dtStartTime = DateTime.MinValue Then
DbControllers.m_PartController.UpdateStart(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, Part.nPartId, Time)
DbControllers.m_PartController.UpdateStatus(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, Part.nPartId, ItemState.WIP)
Part.dtStartTime = Time
Part.nProduction_State = ItemState.WIP
' se e' il primo ad essere lavorato
If Not MachGroup.PartVMList.Any(Function(x) x IsNot Part AndAlso x.dtStartTime > DateTime.MinValue) Then
' riposiziono il gruppo come primo dei non lavorati assegnandogli indice corretto
' cerco primo indice di pezzo non in produzione
Dim NewIndex As Integer = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.IndexOf(Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) DirectCast(x, MyMachGroupVM).dtStartTime = DateTime.MinValue AndAlso DirectCast(x, MyMachGroupVM).bToBeProduced = False))
' sposto MachGroup in lista come ultimo dei pronti da produrre
Dim OldIndex As Integer = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.IndexOf(MachGroup)
DbControllers.m_MachGroupController.UpdateOrder(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, NewIndex + 1)
Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Move(OldIndex, NewIndex)
' aggiorno anche start MachGroup
DbControllers.m_MachGroupController.UpdateStart(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, Time)
DbControllers.m_MachGroupController.UpdateStatus(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, ItemState.WIP)
MachGroup.dtStartTime = Time
MachGroup.nProduction_State = ItemState.WIP
MachGroup.NotifyPropertyChanged(NameOf(MachGroup.Production_Background))
End If
End If
If Part.dtEndTime = DateTime.MinValue Then
DbControllers.m_PartController.UpdateEnd(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, Part.nPartId, Time)
DbControllers.m_PartController.UpdateStatus(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, Part.nPartId, ItemState.Produced)
Part.dtEndTime = Time
Part.nProduction_State = ItemState.Produced
If MachGroup.PartVMList.All(Function(x) x.nProduction_State >= ItemState.Produced) Then
'aggiorno anche fine MachGroup
DbControllers.m_MachGroupController.UpdateEnd(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, Time)
DbControllers.m_MachGroupController.UpdateStatus(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, ItemState.Produced)
MachGroup.dtEndTime = Time
MachGroup.nProduction_State = ItemState.Produced
MachGroup.NotifyPropertyChanged(NameOf(MachGroup.Production_Background))
MachGroup.NotifyPropertyChanged(NameOf(MachGroup.Produce_IsEnabled))
End If
End If
Part.NotifyPropertyChanged(NameOf(Part.Production_Background))
End Sub
#End Region ' DonePart
#Region "MoveUpRawPart"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property MoveUpRawPart_Command As ICommand
Get
If m_cmdMoveUpRawPart Is Nothing Then
m_cmdMoveUpRawPart = New Command(AddressOf MoveUpRawPart)
End If
Return m_cmdMoveUpRawPart
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub MoveUpRawPart()
If IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then Return
DbControllers.m_MachGroupController.UpdateStatus(Map.refSupervisorManagerVM.CurrProd.nProdId, Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup.Id, ItemState.Produced)
End Sub
#End Region ' MoveUpRawPart
#Region "MoveDownRawPart"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property MoveDownRawPart_Command As ICommand
Get
If m_cmdMoveDownRawPart Is Nothing Then
m_cmdMoveDownRawPart = New Command(AddressOf MoveDownRawPart)
End If
Return m_cmdMoveDownRawPart
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub MoveDownRawPart()
If IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then Return
DbControllers.m_MachGroupController.UpdateStatus(Map.refSupervisorManagerVM.CurrProd.nProdId, Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup.Id, ItemState.Produced)
End Sub
#End Region ' MoveDownRawPart
#End Region ' COMMANDS
End Class