Imports System.Collections.ObjectModel Imports EgtBEAMWALL.Core Imports EgtUILib Imports EgtWPFLib5 Public Class TopPanelVM Inherits VMBase #Region "FIELDS & PROPERTIES" 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_QParSplitter_Visibility As Visibility Public ReadOnly Property QParSplitter_Visibility As Visibility Get Return If(Not IsNothing(Map.refProjectVM.BTLStructureVM) AndAlso Map.refProjectVM.BTLStructureVM.BTLStructureM.nPROJTYPE = BWType.WALL, Visibility.Visible, Visibility.Collapsed) End Get End Property Private m_ProduceRawPart_Visibility As Visibility Public ReadOnly Property ProduceRawPart_Visibility As Visibility Get Return m_ProduceRawPart_Visibility End Get End Property Private m_MovePartInRawPart_Visibility As Visibility Public ReadOnly Property MovePartInRawPart_Visibility As Visibility Get Return m_MovePartInRawPart_Visibility End Get End Property Friend Enum Tabs As Integer OPTIMIZATION = 0 STATISTICS = 1 End Enum Private m_SelTab As Tabs = Tabs.OPTIMIZATION Public Property SelTab As Integer Get Return m_SelTab End Get Set(value As Integer) m_SelTab = value End Set End Property Friend Sub SetSelTab(SelTab As Tabs) If m_SelTab = Tabs.STATISTICS Then Map.refInstrumentPanelVM.SetStatisticsIsChecked(False) End If m_SelTab = SelTab NotifyPropertyChanged(NameOf(SelTab)) End Sub Private m_TopPanel_IsEnabled As Boolean = True Public ReadOnly Property TopPanel_IsEnabled As Boolean Get Return m_TopPanel_IsEnabled End Get End Property Public ReadOnly Property QParameter_Visibility As Visibility Get Return If(Not IsNothing(Map.refProjectVM) AndAlso Not IsNothing(Map.refProjectVM.BTLStructureVM) AndAlso Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.WALL, Visibility.Visible, Visibility.Collapsed) End Get End Property ' Definizione comandi Private m_cmdProduceAllRawPart As ICommand Private m_cmdProduceRawPart As ICommand Private m_cmdCopyRawPart As ICommand Private m_cmdRemoveRawPart As ICommand Private m_cmdRemovePart As ICommand Private m_cmdMoveUpPart As ICommand Private m_cmdMoveDownPart As ICommand Private m_cmdReOrderPart As ICommand Private m_cmdMovePartInRawPart As ICommand Public ReadOnly Property MovePart_Visibility As Visibility Get If Not IsNothing(Map.refProjectVM) AndAlso Not IsNothing(Map.refProjectVM.BTLStructureVM) Then Return If(Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.BEAM, Visibility.Visible, Visibility.Collapsed) End If Return Visibility.Collapsed End Get End Property #Region "Messages" Public ReadOnly Property ProduceRawPart_ToolTip As String Get Return EgtMsg(61912) End Get End Property Public ReadOnly Property ResetCALCRawPart_ToolTip As String Get Return EgtMsg(61924) End Get End Property Public ReadOnly Property ProduceAllRawPart_ToolTip As String Get Return EgtMsg(61913) End Get End Property Public ReadOnly Property CopyRawPart_ToolTip As String Get Return EgtMsg(61914) End Get End Property Public ReadOnly Property RemoveRawPart_ToolTip As String Get Return EgtMsg(61915) End Get End Property Public ReadOnly Property ReOrderPart_ToolTip As String Get Return EgtMsg(61916) End Get End Property Public ReadOnly Property MoveUpPart_ToolTip As String Get Return EgtMsg(61917) End Get End Property Public ReadOnly Property MoveDownPart_ToolTip As String Get Return EgtMsg(61918) End Get End Property Public ReadOnly Property RemovePart_ToolTip As String Get Return EgtMsg(61919) End Get End Property Public ReadOnly Property MovePartInRawPart_ToolTip As String Get Return EgtMsg(61944) End Get End Property #End Region ' Messages #End Region 'FIELDS & PROPERTIES Sub New() ' imposto riferimento su mappa Map.SetRefTopPanelVM(Me) ' imposto dimensioni colonne/righe della Grid DimensionsIniFile.ReadGridDimensions(ConstDims.TOPPANEL_OPTIMIZER, GridDims) ' mostro bottoni produci solo se supervisore attivo m_ProduceRawPart_Visibility = If(Map.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.SUPERVISOR), Visibility.Visible, Visibility.Collapsed) End Sub #Region "METHODS" Friend Sub SetTopPanelIsEnabled(bIsEnabled As Boolean) m_TopPanel_IsEnabled = bIsEnabled NotifyPropertyChanged(NameOf(TopPanel_IsEnabled)) End Sub Friend Sub UpdateQParameterVisibility() NotifyPropertyChanged(NameOf(QParameter_Visibility)) End Sub Friend Sub ManageQParamsRowVisibility(bVisible As Boolean) If bVisible Then DimensionsIniFile.ReadGridDimensions(ConstDims.TOPPANEL_OPTIMIZER, GridDims) Else GridDimension.SetSoftwareMod(True) Dim FeatureRow = m_GridDims(4) Dim QParRow = m_GridDims(5) m_GridDims(4).GridLen = New GridLength(1, GridUnitType.Star) m_GridDims(4).NotifyPropertyChanged(NameOf(FeatureRow.GridLen)) m_GridDims(5).GridLen = New GridLength(0) m_GridDims(5).NotifyPropertyChanged(NameOf(QParRow.GridLen)) GridDimension.SetSoftwareMod(False) End If NotifyPropertyChanged(NameOf(QParSplitter_Visibility)) End Sub Friend Sub UpdateMovePartInRawPartVisibility() m_MovePartInRawPart_Visibility = If(Map.refMainWindowVM.MainWindowM.nUserLevel > 5 AndAlso Not IsNothing(Map.refProdManagerVM.CurrProd) AndAlso Map.refProdManagerVM.CurrProd.nType = BWType.WALL, Visibility.Visible, Visibility.Collapsed) NotifyPropertyChanged(NameOf(MovePartInRawPart_Visibility)) End Sub #End Region ' METHODS #Region "COMMANDS" #Region "ProduceRawPart" ''' ''' Returns a command that do Exec. ''' Public ReadOnly Property ProduceRawPart_Command As ICommand Get If m_cmdProduceRawPart Is Nothing Then m_cmdProduceRawPart = New Command(AddressOf ProduceRawPart) End If Return m_cmdProduceRawPart End Get End Property ''' ''' Execute the Exec. This method is invoked by the ExecCommand. ''' Public Sub ProduceRawPart() If IsNothing(Map.refProdManagerVM.CurrProd) Then Return Dim ErrorMsg As String = "" If Not Produce(Map.refMachGroupPanelVM.SelectedMachGroup, ErrorMsg) AndAlso Not String.IsNullOrWhiteSpace(ErrorMsg) Then MessageBox.Show(ErrorMsg) End If End Sub Private Function Produce(MachGroup As MyMachGroupVM, ByRef ErrorMsg As String) As Boolean If IsNothing(MachGroup) Then Return False ' se barra gia' assegnata a supervisore, esco If MachGroup.nProduction_State >= ItemState.Assigned Then Return False If MachGroup.nGlobalState = CalcStates.OK Or MachGroup.nGlobalState = CalcStates.INFO Then ' se ci sono modifiche, salvo il pogetto If EgtGetModified() Then Map.refProdManagerVM.Save() End If ' mando al supervisore DbControllers.m_MachGroupController.UpdateSupervisor(Map.refProdManagerVM.CurrProd.nProdId, MachGroup.Id, DbControllers.m_SupervisorId) DbControllers.m_MachGroupController.UpdateOrder(Map.refProdManagerVM.CurrProd.nProdId, MachGroup.Id, DbControllers.m_MachGroupController.GetMinIndex(Map.refProdManagerVM.CurrProd.nProdId) + 1) MachGroup.SentToSupervisor() For Each Part As PartVM In MachGroup.PartVMList DbControllers.m_PartController.UpdateStatus(Map.refProdManagerVM.CurrProd.nProdId, MachGroup.Id, Part.nPartId, ItemState.Assigned) Part.nProduction_State = ItemState.Assigned Part.NotifyPropertyChanged(NameOf(Part.Background)) ' disabilito impostazione modificato Dim DisableMgr As New DisableModifiedMgr ' blocco modifica del pezzo EgtDuploSetLocked(Part.nPartId) ' ripristino precedente impostazione modificato DisableMgr.ReEnable() Next Return True Else ErrorMsg = String.Format("Impossible sending {0} to supervisor because not machinable!", MachGroup.Name) 'MessageBox.Show(String.Format("Impossible sending {0} to supervisor because it is not machinable!", MachGroup.Name)) Return False End If End Function #End Region ' ProduceRawPart #Region "ProduceAllRawPart" ''' ''' Returns a command that do Exec. ''' Public ReadOnly Property ProduceAllRawPart_Command As ICommand Get If m_cmdProduceAllRawPart Is Nothing Then m_cmdProduceAllRawPart = New Command(AddressOf ProduceAllRawPart) End If Return m_cmdProduceAllRawPart End Get End Property ''' ''' Execute the Exec. This method is invoked by the ExecCommand. ''' Public Sub ProduceAllRawPart() If IsNothing(Map.refProdManagerVM.CurrProd) Then Return If Map.refMachGroupPanelVM.MachGroupVMList.Count > 0 Then Dim MachgroupErrorList As New List(Of MachGroupVM) For Each Machgroup In Map.refMachGroupPanelVM.MachGroupVMList Dim ErrorMsg As String = "" If Not Produce(Machgroup, ErrorMsg) AndAlso Not String.IsNullOrWhiteSpace(ErrorMsg) Then MachgroupErrorList.Add(Machgroup) End If Next If MachgroupErrorList.Count > 0 Then Dim sMachGroups As String = "" For Each MachGroup In MachgroupErrorList sMachGroups &= " " & MachGroup.Name & "," Next sMachGroups = sMachGroups.Trim({" "c, ","c}) MessageBox.Show(String.Format("Impossible sending {0} to supervisor because not machinable!", sMachGroups)) End If End If End Sub #End Region ' ProduceAllRawPart #Region "CopyRawPart" ''' ''' Returns a command that do Exec. ''' Public ReadOnly Property CopyRawPart_Command As ICommand Get If m_cmdCopyRawPart Is Nothing Then m_cmdCopyRawPart = New Command(AddressOf CopyRawPart) End If Return m_cmdCopyRawPart End Get End Property ''' ''' Execute the Exec. This method is invoked by the ExecCommand. ''' Public Sub CopyRawPart() If IsNothing(Map.refProdManagerVM.CurrProd) Then Return Dim nQty As Integer = 1 ' se premuto shift If (Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift Then Dim MultiCopyRawPartWndVM As New MultiCopyRawPartWndVM() Dim MultiCopyRawPartWnd As New MultiCopyRawPartWndV(Application.Current.MainWindow, MultiCopyRawPartWndVM) If Not MultiCopyRawPartWnd.ShowDialog() Then Return nQty = MultiCopyRawPartWndVM.nQuantity End If Dim SelMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.SelectedMachGroup If IsNothing(SelMachGroup) Then Return ' creo copia Dim NewMachGroup As MyMachGroupVM = SelMachGroup.Copy(nQty) If Not IsNothing(NewMachGroup) Then ' lo seleziono Map.refProjectVM.MachGroupPanelVM.SelectedMachGroup = NewMachGroup End If End Sub #End Region ' CopyRawPart #Region "RemoveRawPart" ''' ''' Returns a command that do Exec. ''' Public ReadOnly Property RemoveRawPart_Command As ICommand Get If m_cmdRemoveRawPart Is Nothing Then m_cmdRemoveRawPart = New Command(AddressOf RemoveRawPart) End If Return m_cmdRemoveRawPart End Get End Property ''' ''' Execute the Exec. This method is invoked by the ExecCommand. ''' Public Sub RemoveRawPart() If IsNothing(Map.refProdManagerVM.CurrProd) Then Return ' se premuto shift If (Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift Then ' cancello tutti For Index = Map.refMachGroupPanelVM.MachGroupVMList.Count - 1 To 0 Step -1 Dim CurrMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.MachGroupVMList(Index) ' se barra gia' assegnata a supervisore, esco If CurrMachGroup.nProduction_State >= ItemState.Assigned Then Continue For CurrMachGroup.DeleteMachGroup() Next Else Dim SelMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.SelectedMachGroup If IsNothing(SelMachGroup) Then Return ' se barra gia' assegnata a supervisore, esco If SelMachGroup.nProduction_State >= ItemState.Assigned Then Return SelMachGroup.DeleteMachGroup() End If ' se nessun grezzo, rimetto tutti i pezzi invisibili If Map.refProjectVM.MachGroupPanelVM.MachGroupVMList.Count = 0 Then Map.refProjectVM.BTLStructureVM.HideAll(True) End If End Sub #End Region ' RemoveRawPart #Region "RemovePart" ''' ''' Returns a command that do Exec. ''' Public ReadOnly Property RemovePart_Command As ICommand Get If m_cmdRemovePart Is Nothing Then m_cmdRemovePart = New Command(AddressOf RemovePart) End If Return m_cmdRemovePart End Get End Property ''' ''' Execute the Exec. This method is invoked by the ExecCommand. ''' Public Sub RemovePart() If IsNothing(Map.refProdManagerVM.CurrProd) Then Return Dim SelMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.SelectedMachGroup If IsNothing(SelMachGroup) Then Return ' se barra gia' assegnata a supervisore, esco If SelMachGroup.nProduction_State >= ItemState.Assigned Then Return Dim SelPart As PartVM = SelMachGroup.SelPart If IsNothing(SelPart) Then Return SelPart.DeletePart() SelMachGroup.UpdateUsage() SelMachGroup.ResetCalcMachGroup() End Sub #End Region ' RemovePart #Region "MoveUpPart" ''' ''' Returns a command that do Exec. ''' Public ReadOnly Property MoveUpPart_Command As ICommand Get If m_cmdMoveUpPart Is Nothing Then m_cmdMoveUpPart = New Command(AddressOf MoveUpPart) End If Return m_cmdMoveUpPart End Get End Property ''' ''' Execute the Exec. This method is invoked by the ExecCommand. ''' Public Sub MoveUpPart() If IsNothing(Map.refProdManagerVM.CurrProd) Then Return Dim SelMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.SelectedMachGroup If IsNothing(SelMachGroup) Then Return ' se barra gia' assegnata a supervisore, esco If SelMachGroup.nProduction_State >= ItemState.Assigned Then Return Dim SelPart As PartVM = SelMachGroup.SelPart If IsNothing(SelPart) Then Return If SelMachGroup.nType = MachineType.BEAM Then SelMachGroup.MoveBeam(SelPart, MoveDirections.UP) EgtDraw() ' riseleziono trave SelMachGroup.SelPart = SelPart End If SelMachGroup.ResetCalcMachGroup() End Sub #End Region ' MoveUpPart #Region "MoveDownPart" ''' ''' Returns a command that do Exec. ''' Public ReadOnly Property MoveDownPart_Command As ICommand Get If m_cmdMoveDownPart Is Nothing Then m_cmdMoveDownPart = New Command(AddressOf MoveDownPart) End If Return m_cmdMoveDownPart End Get End Property ''' ''' Execute the Exec. This method is invoked by the ExecCommand. ''' Public Sub MoveDownPart() If IsNothing(Map.refProdManagerVM.CurrProd) Then Return Dim SelMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.SelectedMachGroup If IsNothing(SelMachGroup) Then Return ' se barra gia' assegnata a supervisore, esco If SelMachGroup.nProduction_State >= ItemState.Assigned Then Return Dim SelPart As PartVM = SelMachGroup.SelPart If IsNothing(SelPart) Then Return If SelMachGroup.nType = MachineType.BEAM Then SelMachGroup.MoveBeam(SelPart, MoveDirections.DOWN) EgtDraw() ' riseleziono trave SelMachGroup.SelPart = SelPart End If SelMachGroup.ResetCalcMachGroup() End Sub #End Region ' MoveDownPart #Region "ReOrderPart" ''' ''' Returns a command that do Exec. ''' Public ReadOnly Property ReOrderPart_Command As ICommand Get If m_cmdReOrderPart Is Nothing Then m_cmdReOrderPart = New Command(AddressOf ReOrderPart) End If Return m_cmdReOrderPart End Get End Property ''' ''' Execute the Exec. This method is invoked by the ExecCommand. ''' Public Sub ReOrderPart() If IsNothing(Map.refProdManagerVM.CurrProd) Then Return Dim SelMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.SelectedMachGroup If IsNothing(SelMachGroup) Then Return ' se barra gia' assegnata a supervisore, esco If SelMachGroup.nProduction_State >= ItemState.Assigned Then Return Dim SelPart As PartVM = SelMachGroup.SelPart If IsNothing(SelPart) Then Return If SelMachGroup.nType = MachineType.BEAM Then SelMachGroup.ReorderBeam() ' riseleziono trave If Not IsNothing(SelPart) AndAlso (IsNothing(SelMachGroup.SelPart) OrElse SelPart.nPartId <> SelMachGroup.SelPart.nPartId) Then SelMachGroup.SelPart = SelPart End If End If SelMachGroup.ResetCalcMachGroup() End Sub #End Region ' ReOrderPart #Region "MovePartInRawPart" ''' ''' Returns a command that do Exec. ''' Public ReadOnly Property MovePartInRawPart_Command As ICommand Get If m_cmdMovePartInRawPart Is Nothing Then m_cmdMovePartInRawPart = New Command(AddressOf MovePartInRawPart) End If Return m_cmdMovePartInRawPart End Get End Property ''' ''' Execute the Exec. This method is invoked by the ExecCommand. ''' Public Sub MovePartInRawPart() If IsNothing(Map.refProdManagerVM.CurrProd) Then Return Dim MovePartInRawPartWndVM As New MovePartInRawPartWndVM() Dim MovePartInRawPartWnd As New MovePartInRawPartWndV(Application.Current.MainWindow, MovePartInRawPartWndVM) If Not MovePartInRawPartWnd.ShowDialog() Then Return End Sub #End Region ' MovePartInRawPart #End Region ' COMMANDS End Class