1151 lines
54 KiB
VB.net
1151 lines
54 KiB
VB.net
Imports System.Collections.ObjectModel
|
|
Imports System.ComponentModel
|
|
Imports System.Globalization
|
|
Imports System.IO
|
|
Imports System.Windows.Threading
|
|
Imports EgtBEAMWALL.Core
|
|
Imports EgtUILib
|
|
Imports EgtWPFLib5
|
|
|
|
Public Class LeftPanelVM
|
|
Inherits VMBase
|
|
|
|
#Region "FIELDS & PROPERTIES"
|
|
|
|
Private m_PrintTimer As New DispatcherTimer
|
|
|
|
Private Property m_GridDims As New ObservableCollection(Of GridDimension)
|
|
Public Property GridDims As ObservableCollection(Of GridDimension)
|
|
Get
|
|
Return m_GridDims
|
|
End Get
|
|
Set
|
|
m_GridDims = Value
|
|
NotifyPropertyChanged(NameOf(GridDims))
|
|
End Set
|
|
End Property
|
|
|
|
Private m_ChannelList As List(Of IdNameStruct)
|
|
Public Property ChannelList As List(Of IdNameStruct)
|
|
Get
|
|
Return m_ChannelList
|
|
End Get
|
|
Set(ByVal value As List(Of IdNameStruct))
|
|
m_ChannelList = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_SelChannel As IdNameStruct
|
|
Public Property SelChannel As IdNameStruct
|
|
Get
|
|
Return m_SelChannel
|
|
End Get
|
|
Set(ByVal value As IdNameStruct)
|
|
MachManaging.AddToCommandList(ThreadCommand.CreateCommand(CommandTypes.SETCHANNEL, value.Id))
|
|
m_SelChannel = value
|
|
End Set
|
|
End Property
|
|
Friend Sub SetChannel(value As IdNameStruct)
|
|
m_SelChannel = value
|
|
NotifyPropertyChanged(NameOf(SelChannel))
|
|
End Sub
|
|
|
|
Private m_OPStateList As List(Of OPState)
|
|
Public Property OPStateList As List(Of OPState)
|
|
Get
|
|
Return m_OPStateList
|
|
End Get
|
|
Set(ByVal value As List(Of OPState))
|
|
m_OPStateList = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_SelOPState As OPState
|
|
Public ReadOnly Property SelOPState As OPState
|
|
Get
|
|
Return m_SelOPState
|
|
End Get
|
|
End Property
|
|
Friend Sub SetOPState(value As OPState)
|
|
m_SelOPState = value
|
|
NotifyPropertyChanged(NameOf(SelOPState))
|
|
End Sub
|
|
|
|
Private m_OPModeList As List(Of OPState)
|
|
Public Property OPModeList As List(Of OPState)
|
|
Get
|
|
Return m_OPModeList
|
|
End Get
|
|
Set(ByVal value As List(Of OPState))
|
|
m_OPModeList = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_SelOPMode As OPState
|
|
Public Property SelOPMode As OPState
|
|
Get
|
|
Return m_SelOPMode
|
|
End Get
|
|
Set(ByVal value As OPState)
|
|
MachManaging.AddToCommandList(ThreadCommand.CreateCommand(CommandTypes.SETOPMODE, value.Id))
|
|
' se MDI
|
|
If value.Id = OPModes.Mdi Then
|
|
' mostro pagina comandi MDI
|
|
Map.refProjectVM.SetSelTabPage(ProjectVM.TabPages.MDI)
|
|
ElseIf Map.refCALCPanelVM.bMachineLog Then
|
|
' mostro log macchina
|
|
Map.refProjectVM.SetSelTabPage(ProjectVM.TabPages.MACHINELOG)
|
|
Else
|
|
' mostro scena
|
|
Map.refProjectVM.SetSelTabPage(ProjectVM.TabPages.SCENE)
|
|
End If
|
|
m_SelOPMode = value
|
|
End Set
|
|
End Property
|
|
Friend Sub SetOPMode(value As OPState)
|
|
' se MDI
|
|
If value.Id = OPModes.Mdi Then
|
|
' mostro pagina comandi MDI
|
|
Map.refProjectVM.SetSelTabPage(ProjectVM.TabPages.MDI)
|
|
ElseIf Map.refCALCPanelVM.bMachineLog Then
|
|
' mostro log macchina
|
|
Map.refProjectVM.SetSelTabPage(ProjectVM.TabPages.MACHINELOG)
|
|
Else
|
|
' mostro scena
|
|
Map.refProjectVM.SetSelTabPage(ProjectVM.TabPages.SCENE)
|
|
End If
|
|
m_SelOPMode = value
|
|
NotifyPropertyChanged(NameOf(SelOPMode))
|
|
End Sub
|
|
Public ReadOnly Property sE80000 As String
|
|
Get
|
|
Dim MachIndexVar As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = MACHINDEX)
|
|
Return If(IsNothing(MachIndexVar), "", MachIndexVar.sValue)
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property sE80001 As String
|
|
Get
|
|
Dim ToolIndexVar As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = TOOLINDEX)
|
|
Return If(IsNothing(ToolIndexVar), "", ToolIndexVar.sValue)
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property sE80002 As String
|
|
Get
|
|
Dim ToolIndex2Var As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = TOOLINDEX2)
|
|
Return If(IsNothing(ToolIndex2Var), "", ToolIndex2Var.sValue)
|
|
End Get
|
|
End Property
|
|
Public Property m_E80000_Visibility As Visibility
|
|
Public ReadOnly Property E80000_Visibility As Visibility
|
|
Get
|
|
Return m_E80000_Visibility
|
|
End Get
|
|
End Property
|
|
Public Property m_E80002_Visibility As Visibility
|
|
Public ReadOnly Property E80002_Visibility As Visibility
|
|
Get
|
|
Return m_E80002_Visibility
|
|
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
|
|
If value Then
|
|
If Not IsNothing(Map.refPartInRawPartListVM.colPartInRawPart_Redo) Then
|
|
Map.refPartInRawPartListVM.colPartInRawPart_Redo.ColumnVisibility = Visibility.Visible
|
|
End If
|
|
If Not IsNothing(Map.refFeatureInPartInRawPartListVM.colFeatureInPartInRawPart_Redo) Then
|
|
Map.refFeatureInPartInRawPartListVM.colFeatureInPartInRawPart_Redo.ColumnVisibility = Visibility.Visible
|
|
End If
|
|
' disabilito interfaccia
|
|
Map.refProjectVM.ManageIsEnabled(False)
|
|
Else
|
|
If Not IsNothing(Map.refPartInRawPartListVM.colPartInRawPart_Redo) Then
|
|
Map.refPartInRawPartListVM.colPartInRawPart_Redo.ColumnVisibility = Visibility.Collapsed
|
|
End If
|
|
If Not IsNothing(Map.refFeatureInPartInRawPartListVM.colFeatureInPartInRawPart_Redo) Then
|
|
Map.refFeatureInPartInRawPartListVM.colFeatureInPartInRawPart_Redo.ColumnVisibility = Visibility.Collapsed
|
|
End If
|
|
' riabilito interfaccia
|
|
Map.refProjectVM.ManageIsEnabled(True)
|
|
End If
|
|
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
|
|
|
|
Private m_LeftPanel_IsEnabled As Boolean = True
|
|
Public ReadOnly Property LeftPanel_IsEnabled As Boolean
|
|
Get
|
|
Return m_LeftPanel_IsEnabled
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property MoveRawPart_IsEnabled As Boolean
|
|
Get
|
|
If IsNothing(Map.refProjectVM) OrElse IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM) Then
|
|
Return False
|
|
ElseIf m_SelOPState.Id <> OPStates.End AndAlso m_SelOPState.Id <> OPStates.Unspecified Then
|
|
Return False
|
|
ElseIf IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then
|
|
Return False
|
|
ElseIf Map.refRawPartListVM.bRawPartListSorted Then
|
|
Return False
|
|
ElseIf Not IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then
|
|
Dim SelMachgroup As MyMachGroupVM = DirectCast(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup, MyMachGroupVM)
|
|
Return SelMachgroup.nProduction_State <= ItemState.Confirmed AndAlso Not SelMachgroup.bToBeProduced
|
|
Else
|
|
Return m_LeftPanel_IsEnabled
|
|
End If
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property DoneRawPart_IsEnabled As Boolean
|
|
Get
|
|
If IsNothing(Map.refProjectVM) OrElse IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM) Then
|
|
Return False
|
|
ElseIf m_SelOPState.Id <> OPStates.End AndAlso m_SelOPState.Id <> OPStates.Unspecified Then
|
|
Return False
|
|
ElseIf IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then
|
|
Return False
|
|
ElseIf Not IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then
|
|
Dim SelMachgroup As MyMachGroupVM = DirectCast(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup, MyMachGroupVM)
|
|
Return SelMachgroup.nProduction_State <= ItemState.WIP
|
|
Else
|
|
Return m_LeftPanel_IsEnabled
|
|
End If
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property ResetRawPart_IsEnabled As Boolean
|
|
Get
|
|
If IsNothing(Map.refProjectVM) OrElse IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM) Then
|
|
Return False
|
|
ElseIf m_SelOPState.Id <> OPStates.End AndAlso m_SelOPState.Id <> OPStates.Unspecified Then
|
|
Return False
|
|
ElseIf IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then
|
|
Return False
|
|
ElseIf Not IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then
|
|
Dim SelMachgroup As MyMachGroupVM = DirectCast(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup, MyMachGroupVM)
|
|
Return SelMachgroup.nProduction_State > ItemState.Confirmed AndAlso Not SelMachgroup.bToBeProduced
|
|
Else
|
|
Return m_LeftPanel_IsEnabled
|
|
End If
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property DeleteRawPart_IsEnabled As Boolean
|
|
Get
|
|
If IsNothing(Map.refProjectVM) OrElse IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM) Then
|
|
Return False
|
|
ElseIf m_SelOPState.Id <> OPStates.End AndAlso m_SelOPState.Id <> OPStates.Unspecified Then
|
|
Return False
|
|
ElseIf IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then
|
|
Return False
|
|
ElseIf Not IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then
|
|
Dim SelMachgroup As MyMachGroupVM = DirectCast(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup, MyMachGroupVM)
|
|
Return SelMachgroup.nProduction_State <= ItemState.Confirmed AndAlso Not SelMachgroup.bToBeProduced
|
|
Else
|
|
Return m_LeftPanel_IsEnabled
|
|
End If
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property Channel_Visibility As Visibility
|
|
Get
|
|
Return If(CurrentMachine.NCType = NCTypes.NUM_FLEXIUM, Visibility.Visible, Visibility.Collapsed)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property OPMode_Visibility As Visibility
|
|
Get
|
|
Return If(CurrentMachine.NCType = NCTypes.NUM_FLEXIUM Or CurrentMachine.NCType = NCTypes.NUM_AXIUM_APSERVER Or CurrentMachine.NCType = NCTypes.NUM_AXIUM_PCTOOLKIT, Visibility.Visible, Visibility.Collapsed)
|
|
End Get
|
|
End Property
|
|
|
|
Private m_PrintLabel_Visibility As Visibility
|
|
Public ReadOnly Property PrintLabel_Visibility As Visibility
|
|
Get
|
|
Return If(Map.refMainWindowVM.MainWindowM.bPrinterLink, Visibility.Visible, Visibility.Collapsed)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property DonePart_Visibility As Visibility
|
|
Get
|
|
' per test -> 'Return Visibility.Visible
|
|
Return If(Not IsNothing(Map.refSupervisorManagerVM.CurrProd) AndAlso Map.refSupervisorManagerVM.CurrProd.nType = BWType.BEAM, Visibility.Visible, Visibility.Collapsed)
|
|
End Get
|
|
End Property
|
|
|
|
#Region "Messages"
|
|
|
|
Public ReadOnly Property Channel_Msg As String
|
|
Get
|
|
Return EgtMsg(62501)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property OPMode_Msg As String
|
|
Get
|
|
Return EgtMsg(62502)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property ProduceAll_ToolTip As String
|
|
Get
|
|
Return EgtMsg(62503)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property DoneRawPart_ToolTip As String
|
|
Get
|
|
Return EgtMsg(62504)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property ResetRawPart_ToolTip As String
|
|
Get
|
|
Return EgtMsg(62505)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property DeleteRawPart_ToolTip As String
|
|
Get
|
|
Return EgtMsg(62506)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property PrintLabel_ToolTip As String
|
|
Get
|
|
Return EgtMsg(62507)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property DonePart_ToolTip As String
|
|
Get
|
|
Return EgtMsg(62508)
|
|
End Get
|
|
End Property
|
|
|
|
#End Region ' Messages
|
|
|
|
' Definizione comandi
|
|
Private m_cmdDeleteRawPart As ICommand
|
|
Private m_cmdMoveUpRawPart As ICommand
|
|
Private m_cmdMoveDownRawPart As ICommand
|
|
Private m_cmdProduceAll As ICommand
|
|
Private m_cmdDoneRawPart As ICommand
|
|
Private m_cmdResetRawPart As ICommand
|
|
Private m_cmdDonePart As ICommand
|
|
Private m_cmdPrintLabel As ICommand
|
|
|
|
#End Region 'FIELDS & PROPERTIES
|
|
|
|
Sub New()
|
|
' imposto riferimento su mappa
|
|
Map.SetRefLeftPanelVM(Me)
|
|
' imposto dimensioni colonne/righe della Grid
|
|
DimensionsIniFile.ReadGridDimensions(ConstDims.LEFTPANEL_SUPERVISOR, GridDims)
|
|
m_PrintTimer.Interval = TimeSpan.FromMilliseconds(1000)
|
|
AddHandler m_PrintTimer.Tick, AddressOf PrintTimer_Tick
|
|
End Sub
|
|
|
|
#Region "METHODS"
|
|
|
|
Friend Sub UpdateView()
|
|
NotifyPropertyChanged("ViewPage_Visibility")
|
|
NotifyPropertyChanged("MachiningPage_Visibility")
|
|
End Sub
|
|
|
|
Friend Sub SetLeftPanelIsEnabled(bIsEnabled As Boolean)
|
|
m_LeftPanel_IsEnabled = bIsEnabled
|
|
NotifyPropertyChanged(NameOf(LeftPanel_IsEnabled))
|
|
End Sub
|
|
|
|
Private Sub PrintTimer_Tick()
|
|
m_PrintTimer.Stop()
|
|
EgtOutLog("Print label timeout!")
|
|
End Sub
|
|
|
|
Friend Sub LoadChannels()
|
|
' carico stati della macchina
|
|
Select Case NCType
|
|
Case NCTypes.TPA
|
|
Case NCTypes.NUM_FLEXIUM, NCTypes.NUM_AXIUM_APSERVER, NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
m_ChannelList = New List(Of IdNameStruct)
|
|
Dim ChannelIndex As Integer = 1
|
|
Dim ChannelString As String = ""
|
|
While GetPrivateProfileString(S_CHANNELS, ChannelIndex, "", ChannelString, CurrentMachine.sMachIniFile) > 0 AndAlso
|
|
Not String.IsNullOrWhiteSpace(ChannelString)
|
|
Dim sChannel() As String = ChannelString.Split(","c)
|
|
If sChannel.Length >= 2 Then
|
|
' elimino spazi
|
|
For Each Par In sChannel
|
|
Par = Par.Trim
|
|
Next
|
|
' verifico se Id e' intero
|
|
Dim nId As Integer = -1
|
|
If Not Integer.TryParse(sChannel(0), nId) Then
|
|
ChannelIndex += 1
|
|
Continue While
|
|
End If
|
|
If nId < 0 Then
|
|
ChannelIndex += 1
|
|
Continue While
|
|
End If
|
|
' verifico se messaggio e' numero intero
|
|
Dim sMessage As String = ""
|
|
Dim nMessage As Integer = 0
|
|
If Integer.TryParse(sChannel(1), nMessage) Then
|
|
sMessage = EgtMsg(nMessage)
|
|
End If
|
|
m_ChannelList.Add(New IdNameStruct(nId, If(Not String.IsNullOrWhiteSpace(sMessage), sMessage, sChannel(1))))
|
|
End If
|
|
ChannelIndex += 1
|
|
End While
|
|
End Select
|
|
' seleziono in partenza unspecified
|
|
SetChannel(Nothing)
|
|
End Sub
|
|
|
|
Friend Sub LoadOPStates()
|
|
' carico stati della macchina
|
|
Select Case NCType
|
|
Case NCTypes.TPA
|
|
m_OPStateList = New List(Of OPState) From {
|
|
New OPState("Start", OPStates.Start),
|
|
New OPState("Stop", OPStates.Stop),
|
|
New OPState("Reset", OPStates.End),
|
|
New OPState("SetPoint", OPStates.SetPoint),
|
|
New OPState("Pending", OPStates.Pending),
|
|
New OPState("Unspecified", OPStates.Unspecified)
|
|
}
|
|
Case NCTypes.NUM_FLEXIUM, NCTypes.NUM_AXIUM_APSERVER, NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
m_OPStateList = New List(Of OPState) From {
|
|
New OPState("Start", OPStates.Start),
|
|
New OPState("Stop", OPStates.Stop),
|
|
New OPState("Reset", OPStates.End),
|
|
New OPState("Unspecified", OPStates.Unspecified)
|
|
}
|
|
Case Else
|
|
m_OPStateList = New List(Of OPState) From {
|
|
New OPState("Unspecified", OPStates.Unspecified)
|
|
}
|
|
End Select
|
|
' seleziono in partenza unspecified
|
|
Dim UnspecifiedState As OPState = m_OPStateList.FirstOrDefault(Function(x) x.Id = OPStates.Unspecified)
|
|
SetOPState(UnspecifiedState)
|
|
End Sub
|
|
|
|
Friend Sub LoadOPModes()
|
|
' carico stati della macchina
|
|
Select Case NCType
|
|
Case NCTypes.TPA
|
|
m_OPModeList = New List(Of OPState) From {
|
|
New OPState("Manual", OPModes.Manual)
|
|
}
|
|
Case NCTypes.NUM_FLEXIUM, NCTypes.NUM_AXIUM_APSERVER, NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
m_OPModeList = New List(Of OPState) From {
|
|
New OPState("Auto", OPModes.Auto),
|
|
New OPState("Single", OPModes.Single),
|
|
New OPState("Mdi", OPModes.Mdi),
|
|
New OPState("Manual", OPModes.Manual),
|
|
New OPState("Home", OPModes.Home)
|
|
}
|
|
End Select
|
|
End Sub
|
|
|
|
Friend Sub SetE80000Visibility()
|
|
' imposto visibilità variabili E80000 e seconda del tipo di controllo
|
|
If CurrentMachine.NCType = NCTypes.TPA Then
|
|
m_E80000_Visibility = Visibility.Collapsed
|
|
m_E80002_Visibility = Visibility.Collapsed
|
|
Else
|
|
m_E80000_Visibility = Visibility.Visible
|
|
m_E80002_Visibility = Visibility.Collapsed
|
|
Dim ReadVar As String = ""
|
|
Dim Index = 1
|
|
While GetPrivateProfileString(S_MAINVARIABLES, Index, "", ReadVar, CurrentMachine.sMachIniFile) <> 0
|
|
If ReadVar.StartsWith(TOOLINDEX2) Then
|
|
m_E80002_Visibility = Visibility.Visible
|
|
Exit While
|
|
End If
|
|
Index += 1
|
|
End While
|
|
End If
|
|
NotifyPropertyChanged(NameOf(E80000_Visibility))
|
|
NotifyPropertyChanged(NameOf(E80002_Visibility))
|
|
End Sub
|
|
|
|
Friend Sub UpdateButtonIsEnabledState()
|
|
NotifyPropertyChanged(NameOf(MoveRawPart_IsEnabled))
|
|
NotifyPropertyChanged(NameOf(DoneRawPart_IsEnabled))
|
|
NotifyPropertyChanged(NameOf(ResetRawPart_IsEnabled))
|
|
NotifyPropertyChanged(NameOf(DeleteRawPart_IsEnabled))
|
|
End Sub
|
|
|
|
#End Region ' METHODS
|
|
|
|
#Region "COMMANDS"
|
|
|
|
#Region "ProduceAll"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property ProduceAll_Command As ICommand
|
|
Get
|
|
If m_cmdProduceAll Is Nothing Then
|
|
m_cmdProduceAll = New Command(AddressOf ProduceAll)
|
|
End If
|
|
Return m_cmdProduceAll
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' </summary>
|
|
Public Sub ProduceAll()
|
|
If IsNothing(Map.refSupervisorManagerVM.CurrProd) Then Return
|
|
If IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList) OrElse Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Count = 0 Then Return
|
|
If Not Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Any(Function(x As MyMachGroupVM) x.nProduction_State <= ItemState.Confirmed) Then Return
|
|
If Not Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Any(Function(x As MyMachGroupVM) x.dtStartTime = DateTime.MinValue) Then Return
|
|
Dim View As List(Of MachGroupVM) = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList_View.Cast(Of MachGroupVM).ToList()
|
|
Dim ToDoList As List(Of MachGroupVM) = View.Where(Function(x As MyMachGroupVM) x.nProduction_State <= 1 AndAlso Not x.bResetWhileCutting AndAlso x.dtStartTime = DateTime.MinValue AndAlso Not x.bToBeProduced).ToList()
|
|
If Not IsNothing(ToDoList) AndAlso ToDoList.Count > 0 Then
|
|
MyMachGroupVM.Produce(ToDoList)
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' ProduceAll
|
|
|
|
#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.refSupervisorManagerVM.CurrProd) Then Return
|
|
If IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then Return
|
|
Dim SelMachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup
|
|
If (Not IsNothing(Map.refMachManaging) AndAlso Map.refMachManaging.bConnected AndAlso m_SelOPState.Id <> OPStates.End) OrElse
|
|
Map.refSupervisorMachGroupPanelVM.MachGroupVMList.Any(Function(x As MyMachGroupVM) (x.bToBeProduced AndAlso x.Id <> SelMachGroup.Id) OrElse
|
|
(x.nProduction_State = ItemState.WIP AndAlso x.Id <> SelMachGroup.Id) OrElse
|
|
(x.dtStartTime <> DateTime.MinValue AndAlso x.dtEndTime = DateTime.MinValue AndAlso x.Id <> SelMachGroup.Id)) Then Return
|
|
' scrivo tutti pezzi completati
|
|
For PartIndex = 0 To SelMachGroup.PartVMList.Count - 1
|
|
Dim Part As PartVM = SelMachGroup.PartVMList(PartIndex)
|
|
SetDonePart(SelMachGroup, Part)
|
|
Next
|
|
|
|
' riseleziono il gruppo
|
|
Map.refSupervisorMachGroupPanelVM.SelectedMachGroup = SelMachGroup
|
|
' aggiorno bottoni
|
|
NotifyPropertyChanged(NameOf(DeleteRawPart_IsEnabled))
|
|
NotifyPropertyChanged(NameOf(DoneRawPart_IsEnabled))
|
|
NotifyPropertyChanged(NameOf(MoveRawPart_IsEnabled))
|
|
NotifyPropertyChanged(NameOf(ResetRawPart_IsEnabled))
|
|
' se avanzamento singolo, sblocco produzione di tutti gli altri
|
|
If CurrentMachine.Flow = FlowTypes.ONEBYONE Then
|
|
MyMachGroupVM.UpdateProduceIsEnabledForAll()
|
|
End If
|
|
' aggiorno log macchina
|
|
Map.refMachineLogPageVM.UpdateMachineLogList(False)
|
|
End Sub
|
|
|
|
#End Region ' DoneRawPart
|
|
|
|
#Region "ResetRawPart"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property ResetRawPart_Command As ICommand
|
|
Get
|
|
If m_cmdResetRawPart Is Nothing Then
|
|
m_cmdResetRawPart = New Command(AddressOf ResetRawPart)
|
|
End If
|
|
Return m_cmdResetRawPart
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub ResetRawPart()
|
|
If IsNothing(Map.refSupervisorManagerVM.CurrProd) Then Return
|
|
If IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then Return
|
|
If (Not IsNothing(Map.refMachManaging) AndAlso Map.refMachManaging.bConnected AndAlso m_SelOPState.Id <> OPStates.End) OrElse
|
|
Map.refSupervisorMachGroupPanelVM.MachGroupVMList.Any(Function(x As MyMachGroupVM) x.bToBeProduced) Then Return
|
|
Dim SelMachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup
|
|
If SelMachGroup.nProduction_State = ItemState.Assigned Then Return
|
|
' annullo stati dei pezzi gia' fatti
|
|
For Each Part In SelMachGroup.PartVMList
|
|
If Part.dtEndTime <> DateTime.MinValue Then
|
|
DbControllers.m_PartController.UpdateEnd(Map.refSupervisorManagerVM.CurrProd.nProdId, SelMachGroup.Id, Part.nPartId, DateTime.MinValue)
|
|
' annullo stato end
|
|
Part.dtEndTime = DateTime.MinValue
|
|
End If
|
|
If Part.dtStartTime <> DateTime.MinValue Then
|
|
DbControllers.m_PartController.UpdateStart(Map.refSupervisorManagerVM.CurrProd.nProdId, SelMachGroup.Id, Part.nPartId, DateTime.MinValue)
|
|
DbControllers.m_PartController.UpdateStatus(Map.refSupervisorManagerVM.CurrProd.nProdId, SelMachGroup.Id, Part.nPartId, ItemState.Assigned)
|
|
' annullo stato start
|
|
Part.nProduction_State = ItemState.Assigned
|
|
Part.dtStartTime = DateTime.MinValue
|
|
Part.NotifyPropertyChanged(NameOf(Part.nProduction_State))
|
|
End If
|
|
Next
|
|
' annullo stato del MachGroup
|
|
DbControllers.m_MachGroupController.UpdateEnd(Map.refSupervisorManagerVM.CurrProd.nProdId, SelMachGroup.Id, DateTime.MinValue)
|
|
DbControllers.m_MachGroupController.UpdateStart(Map.refSupervisorManagerVM.CurrProd.nProdId, SelMachGroup.Id, DateTime.MinValue)
|
|
DbControllers.m_MachGroupController.UpdateStatus(Map.refSupervisorManagerVM.CurrProd.nProdId, SelMachGroup.Id, ItemState.Assigned)
|
|
' scrivo stato end
|
|
SelMachGroup.MyMachGroupM.SetProductionState(ItemState.Assigned)
|
|
SelMachGroup.dtStartTime = DateTime.MinValue
|
|
SelMachGroup.dtEndTime = DateTime.MinValue
|
|
SelMachGroup.NotifyPropertyChanged(NameOf(SelMachGroup.nProduction_State))
|
|
' resetto stati di produzione del pezzo
|
|
SelMachGroup.SetResetWhileCutting(False)
|
|
SelMachGroup.ResetProduce()
|
|
|
|
|
|
' cerco primo indice di pezzo non in produzione
|
|
Dim NewIndex As Integer = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.IndexOf(Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x IsNot SelMachGroup AndAlso 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(SelMachGroup)
|
|
' se non ho trovato nessuno che deve partire, tengo indice corrente
|
|
If NewIndex < 0 Then NewIndex = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Count()
|
|
|
|
SelMachGroup.SetProductionIndex(NewIndex)
|
|
' aggiorno indice di tutte le barre in coda
|
|
For Each CurrMachGroup As MyMachGroupVM In Map.refSupervisorMachGroupPanelVM.MachGroupVMList
|
|
If Not (CurrMachGroup Is SelMachGroup) AndAlso CurrMachGroup.nProductionIndex < 5000 Then
|
|
If CurrMachGroup.nProductionIndex > SelMachGroup.nProductionIndex Then
|
|
CurrMachGroup.SetProductionIndex(CurrMachGroup.nProductionIndex + 1)
|
|
DbControllers.m_MachGroupController.UpdateOrder(Map.refSupervisorManagerVM.CurrProd.nProdId, CurrMachGroup.Id, CurrMachGroup.nProductionIndex)
|
|
ElseIf CurrMachGroup.nProductionIndex > OldIndex AndAlso CurrMachGroup.nProductionIndex <= SelMachGroup.nProductionIndex Then
|
|
CurrMachGroup.SetProductionIndex(CurrMachGroup.nProductionIndex - 1)
|
|
DbControllers.m_MachGroupController.UpdateOrder(Map.refSupervisorManagerVM.CurrProd.nProdId, CurrMachGroup.Id, CurrMachGroup.nProductionIndex)
|
|
End If
|
|
End If
|
|
Next
|
|
' sposto machgroup corrente
|
|
DbControllers.m_MachGroupController.UpdateOrder(Map.refSupervisorManagerVM.CurrProd.nProdId, SelMachGroup.Id, SelMachGroup.nProductionIndex)
|
|
Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Move(OldIndex, NewIndex - 1)
|
|
|
|
' riseleziono il gruppo
|
|
Map.refSupervisorMachGroupPanelVM.SelectedMachGroup = SelMachGroup
|
|
' aggiorno bottoni
|
|
NotifyPropertyChanged(NameOf(DeleteRawPart_IsEnabled))
|
|
NotifyPropertyChanged(NameOf(DoneRawPart_IsEnabled))
|
|
NotifyPropertyChanged(NameOf(MoveRawPart_IsEnabled))
|
|
NotifyPropertyChanged(NameOf(ResetRawPart_IsEnabled))
|
|
' se avanzamento singolo, sblocco produzione di tutti gli altri
|
|
If CurrentMachine.Flow = FlowTypes.ONEBYONE Then
|
|
MyMachGroupVM.UpdateProduceIsEnabledForAll()
|
|
End If
|
|
End Sub
|
|
|
|
Public Sub ResetDonePart(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.nProduction_State = ItemState.Scrapped Then
|
|
' fare domanda se modificare quantita' aggiunti se viene resettato un pezzo scraped??
|
|
'If MessageBox.Show("There are scraped parts in this bar. Would you like to add them to the added quantity?", "", MessageBoxButton.YesNo, MessageBoxImage.Information) = MessageBoxResult.Yes Then
|
|
' DbControllers.m_StatusMapController.UpdateAction("", Map.refSupervisorManagerVM.CurrProd.nProdId, Part.nPartId, StatusMapItemType.Part, StatusMapOpType.AddQtyForUnscraped, "")
|
|
'End If
|
|
End If
|
|
If Part.dtStartTime <> DateTime.MinValue Then
|
|
DbControllers.m_PartController.UpdateStart(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, Part.nPartId, DateTime.MinValue)
|
|
DbControllers.m_PartController.UpdateEnd(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, Part.nPartId, DateTime.MinValue)
|
|
DbControllers.m_PartController.UpdateStatus(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, Part.nPartId, ItemState.ND)
|
|
Part.dtStartTime = DateTime.MinValue
|
|
Part.dtEndTime = DateTime.MinValue
|
|
Part.nProduction_State = ItemState.ND
|
|
' se e' il primo ad essere resettato
|
|
If Not MachGroup.PartVMList.All(Function(x) x IsNot Part AndAlso x.dtStartTime > DateTime.MinValue) Then
|
|
' 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)
|
|
MachGroup.SetProductionIndex(NewIndex + 1)
|
|
DbControllers.m_MachGroupController.UpdateOrder(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, MachGroup.nProductionIndex)
|
|
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))
|
|
' blocco produzione di tutti gli altri perche' iniziato questo
|
|
MyMachGroupVM.UpdateProduceIsEnabledForAll()
|
|
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))
|
|
' se avanzamento singolo, sblocco produzione di tutti gli altri
|
|
If CurrentMachine.Flow = FlowTypes.ONEBYONE Then
|
|
MyMachGroupVM.UpdateProduceIsEnabledForAll()
|
|
End If
|
|
End If
|
|
End If
|
|
Part.NotifyPropertyChanged(NameOf(Part.Production_Background))
|
|
End Sub
|
|
|
|
#End Region ' ResetRawPart
|
|
|
|
#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.refSupervisorManagerVM.CurrProd) Then Return
|
|
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
|
|
' rimuovo da Db il MachGroup
|
|
If DbControllers.m_MachGroupController.RemoveFromSupervisor(Map.refSupervisorManagerVM.CurrProd.nProdId, SelMachGroup.Id) Then
|
|
' rimuovo da DB tutti i pezzi del MachGroup
|
|
For Each Part In SelMachGroup.PartVMList
|
|
DbControllers.m_PartController.UpdateStatus(Map.refSupervisorManagerVM.CurrProd.nProdId, SelMachGroup.Id, Part.nPartId, ItemState.ND)
|
|
Next
|
|
Dim nRemovedIndex As Integer = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.IndexOf(SelMachGroup)
|
|
' se rimozione da Db ok, lo rimuovo da lista
|
|
Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Remove(SelMachGroup)
|
|
If Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Count = 0 Then
|
|
EgtResetCurrMachGroup()
|
|
ManageBTLParts.HideAll()
|
|
Else
|
|
If nRemovedIndex >= Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Count Then nRemovedIndex = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Count - 1
|
|
Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList(nRemovedIndex)
|
|
End If
|
|
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.refSupervisorManagerVM.CurrProd) Then Return
|
|
If IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then Return
|
|
If (Not IsNothing(Map.refMachManaging) AndAlso Map.refMachManaging.bConnected AndAlso m_SelOPState.Id <> OPStates.End) OrElse
|
|
Map.refSupervisorMachGroupPanelVM.MachGroupVMList.Any(Function(x As MyMachGroupVM) x.bToBeProduced) Then Return
|
|
Dim SelMachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup
|
|
If IsNothing(SelMachGroup.SelPart) Then Return
|
|
' verifico se pezzi precedenti nella barra siano lavorati
|
|
For Index = 0 To SelMachGroup.PartVMList.Count - 1
|
|
Dim CurrPart As PartVM = SelMachGroup.PartVMList(Index)
|
|
If CurrPart Is SelMachGroup.SelPart Then
|
|
Exit For
|
|
ElseIf CurrPart.nProduction_State < ItemState.Produced Then
|
|
MessageBox.Show("It is not possible to set as done a part that has before not already produced parts.", "Error", MessageBoxButton.OK, MessageBoxImage.Error)
|
|
Return
|
|
End If
|
|
Next
|
|
SetDonePart(SelMachGroup, SelMachGroup.SelPart)
|
|
Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup = SelMachGroup
|
|
' aggiorno log macchina
|
|
Map.refMachineLogPageVM.UpdateMachineLogList(False)
|
|
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
|
|
' scrivo evento inizio pezzo su DB
|
|
DbControllers.m_LogMachineController.Create(LogEvent.CreatePartStateLog(Time - TimeSpan.FromSeconds(1), Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, Part.nPartId, 1, DbControllers.SupervisorId))
|
|
' se e' il primo ad essere lavorato
|
|
If Not MachGroup.PartVMList.Any(Function(x) x IsNot Part AndAlso x.dtStartTime > DateTime.MinValue) Then
|
|
Dim bCurrToBeProduced As Boolean = MachGroup.bToBeProduced Or MachGroup.bReadyForMachining Or MachGroup.bSentToMachine
|
|
' se non e' gia' in coda per essere prodotto
|
|
If Not bCurrToBeProduced 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)
|
|
MachGroup.SetProductionIndex(NewIndex + 1)
|
|
' aggiorno indice di tutte le barre in coda
|
|
For Each CurrMachGroup As MyMachGroupVM In Map.refSupervisorMachGroupPanelVM.MachGroupVMList
|
|
If Not (CurrMachGroup Is MachGroup) AndAlso CurrMachGroup.nProductionIndex >= MachGroup.nProductionIndex AndAlso CurrMachGroup.nProductionIndex < 5000 Then
|
|
CurrMachGroup.SetProductionIndex(CurrMachGroup.nProductionIndex + 1)
|
|
DbControllers.m_MachGroupController.UpdateOrder(Map.refSupervisorManagerVM.CurrProd.nProdId, CurrMachGroup.Id, CurrMachGroup.nProductionIndex)
|
|
End If
|
|
Next
|
|
' sposto machgroup impostato a Done
|
|
DbControllers.m_MachGroupController.UpdateOrder(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, MachGroup.nProductionIndex)
|
|
Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Move(OldIndex, NewIndex)
|
|
End If
|
|
' 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))
|
|
' aggiorno sort custom dei MachGroup
|
|
If Not bCurrToBeProduced Then
|
|
Map.refSupervisorMachGroupPanelVM.RefreshMachGroupVMSort()
|
|
End If
|
|
' scrivo evento inizio MachGroup su DB
|
|
DbControllers.m_LogMachineController.Create(LogEvent.CreateMachGroupStateLog(Time - TimeSpan.FromSeconds(1), Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, 1, DbControllers.SupervisorId))
|
|
' blocco produzione di tutti gli altri perche' iniziato questo
|
|
MyMachGroupVM.UpdateProduceIsEnabledForAll()
|
|
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
|
|
' scrivo evento fine pezzo su DB
|
|
DbControllers.m_LogMachineController.Create(LogEvent.CreatePartStateLog(Time, Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, Part.nPartId, 2, DbControllers.SupervisorId))
|
|
' se attivo magazzino web, e primo pezzo della barra, aggiorno utilizzo barra da magazzino
|
|
If GetMainPrivateProfileInt(S_WAREHOUSE, K_NETWAREHOUSE, 0) = 1 AndAlso MachGroup.PartVMList(0).nPartId = Part.nPartId AndAlso MachGroup.nProduction_State <> ItemState.Scrapped Then
|
|
' Dim nMaterialId As Integer
|
|
'If Map.refSupervisorManagerVM.CurrProd.nType = BWType.BEAM Then
|
|
' ' nMaterialId = DbControllers.m_MaterialsController.Insert(New MaterialM(MachGroup.dW, MachGroup.dH, 0, MachGroup.sMATERIAL, MachGroup.sWAREHOUSEMATERIAL))
|
|
' nMaterialId = DbControllers.m_MaterialsController.Insert(MachGroup.RawPartM.Material)
|
|
'ElseIf Map.refSupervisorManagerVM.CurrProd.nType = BWType.WALL Then
|
|
' nMaterialId = DbControllers.m_MaterialsController.Insert(New MaterialM(0, MachGroup.dH, 0, MachGroup.sMATERIAL, MachGroup.sWAREHOUSEMATERIAL))
|
|
'End If
|
|
'Dim RawPartList = DbControllers.m_RawItemsController.GetFilt(nMaterialId)
|
|
'Dim RawPart As RawPartM = RawPartList.FirstOrDefault(Function(x) x.dL = MachGroup.dL AndAlso x.Material.dW = MachGroup.dW AndAlso x.Material.dH = MachGroup.dH AndAlso x.Material.sWarehouseMaterial = MachGroup.sWAREHOUSEMATERIAL)
|
|
'Dim RawDictionary As New Dictionary(Of Integer, Integer)
|
|
'RawDictionary.Add(RawPart.nId, 1)
|
|
Dim RawDictionary As New Dictionary(Of Integer, Integer)
|
|
RawDictionary.Add(MachGroup.MyMachGroupM.RawPartM.nId, 1)
|
|
' forzo aggiornamento eventuali dati non inviati su Db
|
|
DbControllers.m_MagmanController.ForceSyncroSend()
|
|
DbControllers.m_MagmanController.ResourceSendCons(Map.refSupervisorManagerVM.CurrProd.ProdFileM.nProjCloudId, RawDictionary)
|
|
End If
|
|
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))
|
|
' reset delle variabili di invio alla macchina
|
|
MachGroup.ResetProduce()
|
|
' aggiorno bottoni
|
|
NotifyPropertyChanged(NameOf(DeleteRawPart_IsEnabled))
|
|
NotifyPropertyChanged(NameOf(DoneRawPart_IsEnabled))
|
|
NotifyPropertyChanged(NameOf(MoveRawPart_IsEnabled))
|
|
NotifyPropertyChanged(NameOf(ResetRawPart_IsEnabled))
|
|
' scrivo evento fine MachGroup su DB
|
|
DbControllers.m_LogMachineController.Create(LogEvent.CreateMachGroupStateLog(Time, Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, 2, DbControllers.SupervisorId))
|
|
' se avanzamento singolo, sblocco produzione di tutti gli altri
|
|
If CurrentMachine.Flow = FlowTypes.ONEBYONE Then
|
|
MyMachGroupVM.UpdateProduceIsEnabledForAll()
|
|
End If
|
|
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.refSupervisorManagerVM.CurrProd) Then Return
|
|
If IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then Return
|
|
Dim SelMachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup
|
|
If SelMachGroup.nProduction_State >= ItemState.WIP Or SelMachGroup.bReadyForMachining Then Return
|
|
Dim nSelMGIndex = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.IndexOf(SelMachGroup)
|
|
If nSelMGIndex = 0 Then Return
|
|
Dim PreviousMG As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList(nSelMGIndex - 1)
|
|
If PreviousMG.nProduction_State >= ItemState.WIP Or PreviousMG.bReadyForMachining Then Return
|
|
' scambio indici
|
|
Dim nSelMGProdIndex As Integer = SelMachGroup.nProductionIndex
|
|
SelMachGroup.SetProductionIndex(PreviousMG.nProductionIndex)
|
|
PreviousMG.SetProductionIndex(nSelMGProdIndex)
|
|
Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Move(nSelMGIndex, nSelMGIndex - 1)
|
|
' lancio sort custom
|
|
Map.refSupervisorMachGroupPanelVM.RefreshMachGroupVMSort()
|
|
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.refSupervisorManagerVM.CurrProd) Then Return
|
|
If IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then Return
|
|
Dim SelMachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup
|
|
If SelMachGroup.nProduction_State >= ItemState.WIP Or SelMachGroup.bReadyForMachining Then Return
|
|
Dim nSelMGIndex = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.IndexOf(SelMachGroup)
|
|
If nSelMGIndex = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Count - 1 Then Return
|
|
' scambio indici
|
|
Dim NextMG As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList(nSelMGIndex + 1)
|
|
Dim nSelMGProdIndex As Integer = SelMachGroup.nProductionIndex
|
|
SelMachGroup.SetProductionIndex(NextMG.nProductionIndex)
|
|
NextMG.SetProductionIndex(nSelMGProdIndex)
|
|
Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Move(nSelMGIndex, nSelMGIndex + 1)
|
|
' lancio sort custom
|
|
Map.refSupervisorMachGroupPanelVM.RefreshMachGroupVMSort()
|
|
End Sub
|
|
|
|
#End Region ' MoveDownRawPart
|
|
|
|
#Region "PrintLabel"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property PrintLabel_Command As ICommand
|
|
Get
|
|
If m_cmdPrintLabel Is Nothing Then
|
|
m_cmdPrintLabel = New Command(AddressOf PrintLabelComm)
|
|
End If
|
|
Return m_cmdPrintLabel
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub PrintLabelComm()
|
|
If IsNothing(Map.refSupervisorManagerVM.CurrProd) Then Return
|
|
If IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup) Then Return
|
|
Dim SelMachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.SelectedMachGroup
|
|
If IsNothing(SelMachGroup.SelPart) Then Return
|
|
PrintLabel(SelMachGroup, SelMachGroup.SelPart)
|
|
End Sub
|
|
|
|
Public Sub PrintLabel(SelMachGroup As MyMachGroupVM, SelPart As PartVM)
|
|
If Not Map.refMainWindowVM.MainWindowM.bPrinterLink Then Return
|
|
If IsNothing(SelMachGroup) Then Return
|
|
If IsNothing(SelPart) Then Return
|
|
' recupero file template
|
|
Dim TemplateFilePath As String = ""
|
|
GetMainPrivateProfileString(S_PRINTER, K_TEMPLATE, "", TemplateFilePath)
|
|
Dim FileName As String = DateTime.Now.ToString
|
|
FileName = FileName.Replace("/"c, "_")
|
|
FileName = FileName.Replace(":"c, "_")
|
|
FileName = FileName.Replace(" "c, "&")
|
|
Dim FileINI As String = Map.refMainWindowVM.MainWindowM.sTempDir & "\" & FileName & ".ini"
|
|
' creo file dati
|
|
CreateDataFile(FileINI, SelPart, SelMachGroup)
|
|
|
|
Dim Proc = New Process()
|
|
Proc.StartInfo.FileName = Map.refMainWindowVM.MainWindowM.sZebraPrinterExe
|
|
Proc.StartInfo.Arguments = TemplateFilePath & " " & FileINI
|
|
Proc.StartInfo.CreateNoWindow = True
|
|
Proc.StartInfo.UseShellExecute = False
|
|
AddHandler Proc.Exited, AddressOf Proc_Exited
|
|
|
|
For Inde = 0 To 100
|
|
If Not m_PrintTimer.IsEnabled Then Exit For
|
|
Threading.Thread.Sleep(100)
|
|
Next
|
|
If Not m_PrintTimer.IsEnabled AndAlso Proc.Start() Then
|
|
m_PrintTimer.Start()
|
|
End If
|
|
|
|
End Sub
|
|
|
|
Private Sub Proc_Exited()
|
|
m_PrintTimer.Stop()
|
|
End Sub
|
|
|
|
Private Sub CreateDataFile(sFilePath As String, SelPart As PartVM, SelMachGroup As MyMachGroupVM)
|
|
Dim sFileText As New List(Of String)
|
|
Dim nBtlInfoId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, BTLINFO)
|
|
Dim sInfo As String = ""
|
|
Dim bOk As Boolean = False
|
|
' inserisco il capitolo del [Main]
|
|
sFileText.Add("[Main]")
|
|
sFileText.Add("Var1=$PRODID$," & Map.refSupervisorManagerVM.CurrProd.sProdId)
|
|
sFileText.Add("Var2=$MACHGROUPID$," & SelMachGroup.nName)
|
|
sFileText.Add("Var3=$PARTID$," & SelPart.nPDN)
|
|
sFileText.Add("Var4=$MATERIAL$," & SelPart.MaterialM.sMaterial)
|
|
bOk = EgtGetInfo(nBtlInfoId, BTL_GEN_PROJNUM, sInfo)
|
|
sFileText.Add("Var5=$PROJECTNUMBER$," & If(bOk, sInfo, ""))
|
|
bOk = EgtGetInfo(nBtlInfoId, BTL_GEN_PROJNAME, sInfo)
|
|
sFileText.Add("Var6=$PROJECTNAME$," & If(bOk, sInfo, ""))
|
|
bOk = EgtGetInfo(nBtlInfoId, BTL_GEN_CUSTOMER, sInfo)
|
|
sFileText.Add("Var7=$CUSTOMER$," & If(bOk, sInfo, ""))
|
|
bOk = EgtGetInfo(SelPart.nPartId, BTL_PRT_ASSEMBLYNUM, sInfo)
|
|
sFileText.Add("Var8=$ASSEMBLYNUMBER$," & If(bOk, sInfo, ""))
|
|
bOk = EgtGetInfo(SelPart.nPartId, BTL_PRT_ORDERNUM, sInfo)
|
|
sFileText.Add("Var9=$ORDERNUMBER$," & If(bOk, sInfo, ""))
|
|
bOk = EgtGetInfo(SelPart.nPartId, BTL_PRT_DESIGNATION, sInfo)
|
|
sFileText.Add("Var10=$DESIGNATION$," & If(bOk, sInfo, ""))
|
|
bOk = EgtGetInfo(SelPart.nPartId, BTL_PRT_ANNOTATION, sInfo)
|
|
sFileText.Add("Var11=$ANNOTATION$," & If(bOk, sInfo, ""))
|
|
sFileText.Add("Var12=$STOREY$," & SelPart.sSTOREY)
|
|
sFileText.Add("Var13=$GROUP$," & SelPart.sGROUP)
|
|
bOk = EgtGetInfo(SelPart.nPartId, BTL_PRT_PACKAGE, sInfo)
|
|
sFileText.Add("Var14=$PACKAGE$," & If(bOk, sInfo, ""))
|
|
sFileText.Add("Var15=$WHL$," & SelPart.sW & "x" & SelPart.sH & "x" & SelPart.sL)
|
|
sFileText.Add("Var16=$PRODUCTIONDATE$," & Date.Now().ToString("yyyy-MM-dd"))
|
|
' calcolo numero settimana corrente secondo ISO 8601
|
|
Dim time As Date = Date.Now()
|
|
Dim Day As DayOfWeek = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time)
|
|
If Day >= DayOfWeek.Monday AndAlso Day <= DayOfWeek.Wednesday Then time = time.AddDays(3)
|
|
Dim nWeekOfYear As Integer = CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)
|
|
sFileText.Add("Var17=$PRODUCTIONWEEK$," & nWeekOfYear)
|
|
bOk = EgtGetInfo(SelPart.nPartId, BTL_PRT_DESCRIPTION, sInfo)
|
|
sFileText.Add("Var18=$DESCRIPTION$," & If(bOk, sInfo, ""))
|
|
bOk = EgtGetInfo(SelPart.nPartId, BTL_PRT_QUALITYGRADE, sInfo)
|
|
sFileText.Add("Var19=$QUALITYGRADE$," & If(bOk, sInfo, ""))
|
|
bOk = EgtGetInfo(nBtlInfoId, BTL_GEN_BTLPATH, sInfo)
|
|
sFileText.Add("Var20=$BTLPATH$," & If(bOk, Path.GetFileNameWithoutExtension(sInfo), ""))
|
|
|
|
Try
|
|
File.WriteAllLines(sFilePath, sFileText)
|
|
Catch ex As Exception
|
|
EgtOutLog("Prepare print file: " & ex.ToString)
|
|
End Try
|
|
End Sub
|
|
|
|
#End Region ' PrintLabel
|
|
|
|
#End Region ' COMMANDS
|
|
|
|
End Class
|
|
|
|
Public Class OPState
|
|
|
|
Private m_Name As String
|
|
Public ReadOnly Property Name As String
|
|
Get
|
|
Return m_Name
|
|
End Get
|
|
End Property
|
|
Private m_Id As Integer
|
|
Public ReadOnly Property Id As Integer
|
|
Get
|
|
Return m_Id
|
|
End Get
|
|
End Property
|
|
|
|
Sub New(Name As String, Id As Integer)
|
|
m_Name = Name
|
|
m_Id = Id
|
|
End Sub
|
|
|
|
End Class
|
|
|
|
Public Class FeatureDataGridHeightConverter
|
|
Implements IValueConverter
|
|
|
|
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert
|
|
Dim Height As Double = CDbl(value)
|
|
If Not IsNothing(Height) Then
|
|
Return Height / 2
|
|
Else
|
|
Return 200
|
|
End If
|
|
End Function
|
|
|
|
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
|
|
Throw New NotImplementedException
|
|
End Function
|
|
|
|
End Class
|