551 lines
26 KiB
VB.net
551 lines
26 KiB
VB.net
Imports System.Collections.ObjectModel
|
|
Imports System.IO
|
|
Imports System.Windows.Forms
|
|
Imports EgtBEAMWALL.Core
|
|
Imports EgtUILib
|
|
Imports EgtWPFLib5
|
|
|
|
Public Class MyMachGroupVM
|
|
Inherits Core.MyMachGroupVM
|
|
|
|
#Region "FIELDS & PROPERTIES"
|
|
|
|
#Region "Supervisor"
|
|
|
|
Public Overrides ReadOnly Property Produce_IsEnabled As Boolean
|
|
Get
|
|
' se gia' prodotto
|
|
If nProduction_State >= ItemState.Produced Then
|
|
Return False
|
|
' se gia' in coda o in calcolo
|
|
ElseIf m_bToBeProduced OrElse m_bSentToMachine Then
|
|
Return False
|
|
' se la macchina e' ferma
|
|
ElseIf IsNothing(Map.refLeftPanelVM.SelOPState) OrElse
|
|
(Map.refLeftPanelVM.SelOPState.Id = 0 OrElse
|
|
Map.refLeftPanelVM.SelOPState.Id = OPStates.End OrElse
|
|
Map.refLeftPanelVM.SelOPState.Id = OPStates.Stop OrElse
|
|
Map.refLeftPanelVM.SelOPState.Id = OPStates.Unspecified) Then
|
|
' verifico se c'e' un pezzo non finito
|
|
Dim ToBeRestartedPart As MyMachGroupVM = Map.refSupervisorMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x As MyMachGroupVM) x.nProduction_State = Global.EgtBEAMWALL.Core.ItemState.WIP And Not m_bToBeProduced)
|
|
' se c'e', attivo solo il pezzo non finito
|
|
Return Not (Not IsNothing(ToBeRestartedPart) AndAlso Not ToBeRestartedPart Is Me)
|
|
Else
|
|
If CurrentMachine.Flow = CurrentMachine.FlowTypes.ONEBYONE Then
|
|
Select Case nProduction_State
|
|
Case ItemState.Assigned, ItemState.Confirmed, ItemState.WIP
|
|
Return Not m_bToBeProduced AndAlso Not m_bSentToMachine AndAlso Not Map.refSupervisorMachGroupPanelVM.MachGroupVMList.Any(Function(x As MyMachGroupVM) x.bToBeProduced)
|
|
' se gia' lavorato
|
|
Case Else
|
|
' disattivo possibilita' di produrlo
|
|
Return False
|
|
End Select
|
|
Else
|
|
Select Case nProduction_State
|
|
Case ItemState.Assigned, ItemState.Confirmed
|
|
Return Not m_bToBeProduced
|
|
Case ItemState.WIP
|
|
If Not m_bToBeProduced AndAlso Not m_bSentToMachine Then
|
|
Return True
|
|
ElseIf IsNothing(Map.refLeftPanelVM.SelOPState) OrElse
|
|
(Map.refLeftPanelVM.SelOPState.Id = 0 OrElse
|
|
Map.refLeftPanelVM.SelOPState.Id = OPStates.End OrElse
|
|
Map.refLeftPanelVM.SelOPState.Id = OPStates.Stop OrElse
|
|
Map.refLeftPanelVM.SelOPState.Id = OPStates.Unspecified) Then
|
|
Return True
|
|
Else
|
|
Return False
|
|
End If
|
|
' se gia' lavorato
|
|
Case Else
|
|
' disattivo possibilita' di produrlo
|
|
Return False
|
|
End Select
|
|
End If
|
|
End If
|
|
End Get
|
|
End Property
|
|
|
|
Private m_nProductionIndex As Integer = 10000
|
|
Public ReadOnly Property nProductionIndex As Integer
|
|
Get
|
|
Return m_nProductionIndex
|
|
End Get
|
|
End Property
|
|
Friend Sub SetProductionIndex(nIndex As Integer)
|
|
m_nProductionIndex = nIndex
|
|
End Sub
|
|
|
|
#End Region ' Supervisor
|
|
|
|
#End Region ' FIELDS & PROPERTIES
|
|
|
|
#Region "CONSTRUCTORS"
|
|
|
|
Sub New(MyMachGroupM As MyMachGroupM)
|
|
MyBase.New(MyMachGroupM)
|
|
End Sub
|
|
|
|
#End Region ' CONSTRUCTORS
|
|
|
|
#Region "METHODS"
|
|
|
|
#Region "Machgroup"
|
|
|
|
Public Overrides Sub RefreshGroupData()
|
|
|
|
End Sub
|
|
|
|
Overrides Function CnFilePath() As String
|
|
Return Map.refSupervisorManagerVM.CurrProd.sProdDirPath & "\" & Name & ".cnc"
|
|
End Function
|
|
|
|
Friend Shared Sub UpdateProduceIsEnabledForAll()
|
|
For Each CurrMachGroup As MyMachGroupVM In Map.refSupervisorMachGroupPanelVM.MachGroupVMList
|
|
CurrMachGroup.NotifyPropertyChanged(NameOf(CurrMachGroup.Produce_IsEnabled))
|
|
Next
|
|
End Sub
|
|
|
|
#End Region ' Machgroup
|
|
|
|
#Region "Parts"
|
|
|
|
Protected Overrides Sub CreatePartVMList()
|
|
Dim all As List(Of PartVM) = (From PartM In MyMachGroupM.GetParts()
|
|
Select New PartVM(PartM, Me)).ToList()
|
|
|
|
For Each PartVM As PartVM In all
|
|
AddHandler PartVM.PropertyChanged, AddressOf OnPartVMPropertyChanged
|
|
Next
|
|
|
|
m_PartVMList = New ObservableCollection(Of Core.PartVM)(all)
|
|
AddHandler m_PartVMList.CollectionChanged, AddressOf OnPartVMListChanged
|
|
End Sub
|
|
|
|
Public Overrides Sub RefreshPartList()
|
|
If nType = BWType.BEAM Then
|
|
' leggo StartCut da posizione primo pezzo
|
|
Dim sInfo As String = ""
|
|
Dim sSplitInfo() As String
|
|
Dim bFound As Boolean = False
|
|
EgtGetInfo(Id, MGR_RPT_PART & 1, sInfo)
|
|
If Not String.IsNullOrWhiteSpace(sInfo) Then
|
|
sSplitInfo = sInfo.Split(","c)
|
|
StringToDoubleAdv(sSplitInfo(1), MyMachGroupM.dStartCut)
|
|
Else
|
|
MyMachGroupM.dStartCut = 0
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' Parts
|
|
|
|
#Region "Calc"
|
|
|
|
Public Overrides Sub CALCEnd()
|
|
' aggiorno stato per lancio in macchina
|
|
If MyMachGroupM.m_nCALC_GlobalState = Core.CalcStates.OK OrElse MyMachGroupM.m_nCALC_GlobalState = Core.CalcStates.INFO Then
|
|
If m_bToBeProduced AndAlso Not m_bCNReCalculated Then
|
|
m_bCNReCalculated = True
|
|
NotifyPropertyChanged(NameOf(Production_Background))
|
|
End If
|
|
Else
|
|
ResetProduce()
|
|
UpdateProduceIsEnabledForAll()
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' Calc
|
|
|
|
#End Region ' METHODS
|
|
|
|
#Region "COMMANDS"
|
|
|
|
#Region "ProduceMachGroup"
|
|
|
|
' Manage the MainWindow_Unloaded event. This method is invoked by the cmdMainWindow_Unloaded.
|
|
Public Overrides Sub ProduceMachGroup()
|
|
' se gia' in produzione, non devo fare nulla
|
|
If m_bToBeProduced Then Return
|
|
' disabilito bottoni di comunicazione durante invio programma
|
|
Map.refMachCommandMessagePanelVM.SetCommBtnIsEnabled(False)
|
|
' se ripartenza
|
|
If Map.refLeftPanelVM.bRestart Then
|
|
' verifico se c'e' un visualizzatore o ottimizzatore aperto su questo progetto
|
|
Dim bIsLocked As Boolean = DbControllers.m_ProdController.IsLockByProdId(Map.refSupervisorManagerVM.CurrProd.nProdId)
|
|
If bIsLocked Then
|
|
' mando notifica ad eventuale ottimizzatore di salvare
|
|
DbControllers.m_StatusMapController.UpdateAction("", Map.refSupervisorManagerVM.CurrProd.nProdId, Map.refSupervisorManagerVM.CurrProd.nProdId, StatusMapItemType.Comm, StatusMapOpType.SupervisorStopRequest, "")
|
|
' aspetto risposta
|
|
Dim WaitingWnd As New WaitingWndV(Application.Current.MainWindow, New WaitingWndVM)
|
|
Dim WaitingResult As Boolean = WaitingWnd.ShowDialog()
|
|
If Not WaitingResult Then
|
|
' riabilito bottoni di comunicazione a fine invio programma
|
|
Map.refMachCommandMessagePanelVM.SetCommBtnIsEnabled(True)
|
|
Return
|
|
End If
|
|
' ricarico progetto corrente
|
|
EgtOpenFile(Map.refSupervisorManagerVM.CurrProd.sProdPath)
|
|
End If
|
|
' creo nuova barra
|
|
Dim RedoMachGroupVM As MyMachGroupVM = RedoRawPart()
|
|
If IsNothing(RedoMachGroupVM) Then
|
|
MessageBox.Show("New RawPart creation failed!")
|
|
Return
|
|
End If
|
|
' salvo progetto con nuova barra
|
|
Map.refSceneHostVM.SaveProject()
|
|
Dim MyMachGroupList As New List(Of MyMachGroupM)
|
|
If Not IsNothing(Map.refProjectVM.ProdMachGroupPanelVM) Then
|
|
For Each MachGroup In Map.refProjectVM.ProdMachGroupPanelVM.m_MyMachGroupPanelM.MachGroupMList
|
|
MyMachGroupList.Add(MachGroup)
|
|
Next
|
|
End If
|
|
' aggiorno pezzi su Db
|
|
DbControllers.m_ProdController.UpdateMachGroup(Map.refSupervisorManagerVM.CurrProd.nProdId, MyMachGroupList)
|
|
If bIsLocked Then
|
|
' mando notifica di barra creata (sblocco ottimizzatore)
|
|
DbControllers.m_StatusMapController.UpdateAction("", Map.refSupervisorManagerVM.CurrProd.nProdId, Map.refSupervisorManagerVM.CurrProd.nProdId, StatusMapItemType.Comm, StatusMapOpType.SupervisorReleaseStop, RedoMachGroupVM.Id.ToString())
|
|
End If
|
|
' resetto eventuali stati di ripartenza
|
|
SetResetWhileCutting(False)
|
|
If Map.refLeftPanelVM.bRestart Then
|
|
Map.refLeftPanelVM.bRestart = False
|
|
End If
|
|
' riabilito produzione di tutti gli altri
|
|
MyMachGroupVM.UpdateProduceIsEnabledForAll()
|
|
' riabilito bottoni di comunicazione a fine invio programma
|
|
Map.refMachCommandMessagePanelVM.SetCommBtnIsEnabled(True)
|
|
' reimposto visualizzazione gruppo selezionato
|
|
Map.refSupervisorMachGroupPanelVM.SelectedMachGroup = Map.refSupervisorMachGroupPanelVM.SelectedMachGroup
|
|
Return
|
|
End If
|
|
' se progetto travi e lavorazione interrotta da reset
|
|
If Map.refSupervisorManagerVM.CurrProd.nType = BWType.BEAM AndAlso (bResetWhileCutting OrElse dtStartTime <> DateTime.MinValue) And Not Map.refLeftPanelVM.bRestart Then
|
|
' chiedo se riprendere o rifare la barra da zero
|
|
Select Case MessageBox.Show(Application.Current.MainWindow, EgtMsg(62509), "", MessageBoxButton.YesNo, MessageBoxImage.Information)
|
|
Case MessageBoxResult.Yes
|
|
' segno da rifare pezzi non completamente lavorati
|
|
For Each Part As PartVM In PartVMList
|
|
If Part.dtEndTime <> DateTime.MinValue Then
|
|
Part.bDO = False
|
|
Else
|
|
Part.SetDo(True)
|
|
End If
|
|
Next
|
|
' se ripresa, mostro lista feature e colonne Redo
|
|
Map.refLeftPanelVM.bRestart = True
|
|
' blocco produzione di tutti gli altri
|
|
MyMachGroupVM.UpdateProduceIsEnabledForAll()
|
|
' riabilito bottoni di comunicazione a fine invio programma
|
|
Map.refMachCommandMessagePanelVM.SetCommBtnIsEnabled(True)
|
|
Return
|
|
Case MessageBoxResult.No
|
|
' annullo stati dei pezzi gia' fatti
|
|
For Each Part In PartVMList
|
|
If Part.dtEndTime <> DateTime.MinValue Then
|
|
DbControllers.m_PartController.UpdateEnd(Map.refSupervisorManagerVM.CurrProd.nProdId, 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, Id, Part.nPartId, DateTime.MinValue)
|
|
DbControllers.m_PartController.UpdateStatus(Map.refSupervisorManagerVM.CurrProd.nProdId, 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.UpdateStart(Map.refSupervisorManagerVM.CurrProd.nProdId, Id, DateTime.MinValue)
|
|
DbControllers.m_MachGroupController.UpdateStatus(Map.refSupervisorManagerVM.CurrProd.nProdId, Id, ItemState.Assigned)
|
|
' scrivo stato end
|
|
MyMachGroupM.SetProductionState(ItemState.Assigned)
|
|
dtStartTime = DateTime.MinValue
|
|
dtEndTime = DateTime.MinValue
|
|
NotifyPropertyChanged(NameOf(nProduction_State))
|
|
' resetto stati di produzione del pezzo
|
|
SetResetWhileCutting(False)
|
|
ResetProduce()
|
|
' lascio proseguire per rifare barra da capo
|
|
End Select
|
|
' se progetto pareti e lavorazione interrotta da reset
|
|
ElseIf Map.refSupervisorManagerVM.CurrProd.nType = BWType.WALL AndAlso (bResetWhileCutting OrElse dtStartTime <> DateTime.MinValue) Then
|
|
If False Then
|
|
' chiedo se riprendere o rifare il pannello da zero
|
|
Dim MachIndexVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = MACHINDEX)
|
|
Select Case MessageBox.Show(Application.Current.MainWindow, EgtMsg(62547), "", MessageBoxButton.YesNo, MessageBoxImage.Information)
|
|
' se ripresa
|
|
Case MessageBoxResult.Yes
|
|
' ripristino indice di lavorazione precedente a reset
|
|
If MachIndexVariable.sValue <> Map.refMachManaging.nMachIndex Then
|
|
MachIndexVariable.sValue = Map.refMachManaging.nMachIndex
|
|
End If
|
|
Case MessageBoxResult.No
|
|
MachIndexVariable.sValue = 1
|
|
End Select
|
|
End If
|
|
SetResetWhileCutting(True)
|
|
End If
|
|
' aggiorno stato bottoni in LeftPanel
|
|
Map.refLeftPanelVM.UpdateButtonIsEnabledState()
|
|
|
|
' lancio produzione pezzo
|
|
Produce(New List(Of MachGroupVM)({Me}))
|
|
|
|
End Sub
|
|
|
|
Friend Shared Sub Produce(MachGroupList As List(Of MachGroupVM))
|
|
' lancio ricalcolo del CN
|
|
Map.refCALCPanelVM.VerifyMachGroup(MachGroupList)
|
|
For Each MachGroup As MyMachGroupVM In MachGroupList
|
|
' 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))
|
|
' se pezzo da produrre gia' iniziato
|
|
If MachGroup.dtStartTime <> DateTime.MinValue Then
|
|
' decremento indice di 1
|
|
NewIndex -= 1
|
|
End If
|
|
' segno pezzo da produrre
|
|
MachGroup.m_bToBeProduced = True
|
|
MachGroup.NotifyPropertyChanged(NameOf(MachGroup.Production_Background))
|
|
Map.refSupervisorMachGroupPanelVM.MachGroupVMList_View.Refresh()
|
|
|
|
' sposto MachGroup in lista come ultimo dei pronti da produrre
|
|
Dim OldIndex As Integer = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.IndexOf(MachGroup)
|
|
' se non ho trovato nessuno che deve partire, tengo indice corrente
|
|
If NewIndex < 0 Then NewIndex = OldIndex
|
|
|
|
MachGroup.m_nProductionIndex = 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.m_nProductionIndex AndAlso CurrMachGroup.nProductionIndex < 5000 Then
|
|
CurrMachGroup.SetProductionIndex(CurrMachGroup.m_nProductionIndex + 1)
|
|
DbControllers.m_MachGroupController.UpdateOrder(Map.refSupervisorManagerVM.CurrProd.nProdId, CurrMachGroup.Id, CurrMachGroup.nProductionIndex)
|
|
End If
|
|
Next
|
|
' sposto machgroup corrente
|
|
DbControllers.m_MachGroupController.UpdateOrder(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, MachGroup.m_nProductionIndex)
|
|
Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Move(OldIndex, NewIndex)
|
|
If CurrentMachine.Flow = FlowTypes.ONEBYONE Then
|
|
UpdateProduceIsEnabledForAll()
|
|
Else
|
|
MachGroup.NotifyPropertyChanged(NameOf(MachGroup.Produce_IsEnabled))
|
|
End If
|
|
Next
|
|
|
|
End Sub
|
|
|
|
Public Function RedoRawPart() As MyMachGroupVM
|
|
If IsNothing(Map.refSupervisorManagerVM.CurrProd) Then Return Nothing
|
|
' variabile che contiene anticipo di pinzaggio primo pezzo
|
|
Dim dHCING As Double = 0
|
|
' creo nuovo gruppo di lavorazione
|
|
Map.refProjectVM.ProdMachGroupPanelVM.AddMachGroup()
|
|
Dim nCurrMachGroup As Integer = EgtGetCurrMachGroup()
|
|
Dim sCurrMachGroupName As String = ""
|
|
Dim MachGroup As MyMachGroupVM = Nothing
|
|
EgtGetMachGroupName(nCurrMachGroup, sCurrMachGroupName)
|
|
Dim sLogPath As String = Map.refMainWindowVM.MainWindowM.sTempDir & "\RawPartLog.txt"
|
|
' scrivo dati per variabili P di comunicazione con la macchina in gruppo di lavorazione
|
|
EgtSetInfo(nCurrMachGroup, MGR_RPT_PRODID, Map.refSupervisorManagerVM.CurrProd.nProdId)
|
|
EgtSetInfo(nCurrMachGroup, MGR_RPT_PATTID, nCurrMachGroup)
|
|
EgtSetInfo(nCurrMachGroup, MGR_RPT_MATERIAL, sMATERIAL)
|
|
If Map.refSupervisorManagerVM.CurrProd.nType = BWType.BEAM Then
|
|
' recupero lista dei pezzi BTL originali
|
|
Dim PartList As New List(Of RedoPart)
|
|
For Each Part In m_PartVMList
|
|
Dim FeatureList As New Dictionary(Of Integer, Boolean)
|
|
For Each Feature In Part.FeatureVMList
|
|
FeatureList.Add(Feature.nPRID, Feature.bDO)
|
|
Next
|
|
PartList.Add(New RedoPart(MyMachGroupPanelM.DuploGetOriginal(Part.nPartId), FeatureList))
|
|
Next
|
|
' analizzo barra di origine
|
|
Dim dInitialCutOut As Double = 0
|
|
' scrivo dati costruzione grezzo in gruppo di lavorazione
|
|
Dim nDone As Integer = 0
|
|
For Index = 0 To m_PartVMList.Count - 1
|
|
Dim CurrPart As PartVM = m_PartVMList(Index)
|
|
If CurrPart.bDO Then
|
|
' se primo pezzo da fare
|
|
If nDone = 0 Then
|
|
' recupero anticipo di pinzaggio da vecchia barra
|
|
dHCING = GetHCING(CurrPart.nPartId)
|
|
dInitialCutOut += CurrPart.dOffset - 0.1
|
|
End If
|
|
nDone += 1
|
|
' creo copia del pezzo
|
|
Dim nPartDuploId As Integer = EgtDuploNew(PartList(Index).nPartId)
|
|
PartList(Index).SetDuploId(nPartDuploId)
|
|
' elimino valori calcolo dell'originale
|
|
MyMachGroupPanelVM.DuploRemoveProjCalc(nPartDuploId)
|
|
' lo rendo std
|
|
EgtSetMode(nPartDuploId, GDB_MD.STD)
|
|
' verifico attivazione feature
|
|
Dim DuploFeatureList As List(Of BTLFeatureM) = PartM.LoadBTLFeatures(Nothing, nPartDuploId)
|
|
For Each Feature In DuploFeatureList
|
|
Dim bOk As Boolean = PartList(Index).FeatureList.Item(Feature.nPRID)
|
|
EgtBeamEnableProcess(Feature.nFeatureId, bOk)
|
|
Next
|
|
' scrivo dati costruzione grezzo in gruppo di lavorazione
|
|
EgtSetInfo(nCurrMachGroup, MGR_RPT_PART & nDone, nPartDuploId & "," & DoubleToString(CurrPart.dPOSX - dInitialCutOut, 3))
|
|
Else
|
|
dInitialCutOut += CurrPart.dOffset + CurrPart.dL
|
|
End If
|
|
Next
|
|
EgtSetInfo(nCurrMachGroup, MGR_RPT_BARLEN, dL - dInitialCutOut)
|
|
Dim BeamMachGroup As MyMachGroupVM = Map.refProjectVM.ProdMachGroupPanelVM.GetLastMachGroup()
|
|
' eseguo script creazione grezzo
|
|
If Not ExecBeam(sLogPath, Map.refMachinePanelVM.SelectedMachine.Name, CalcIntegration.CmdTypes.RAWPART, False) Then
|
|
BeamMachGroup.DeleteMachGroup()
|
|
If File.Exists(sLogPath) Then
|
|
Dim LogFile As String() = File.ReadAllLines(sLogPath)
|
|
If LogFile.Count >= 2 AndAlso Not IsNothing(LogFile(1)) Then
|
|
MessageBox.Show(Application.Current.MainWindow, LogFile(1), EgtMsg(30007), MessageBoxButton.OK, MessageBoxImage.Error)
|
|
End If
|
|
End If
|
|
Return Nothing
|
|
End If
|
|
' aggiorno anticipo di pinzaggio in primo pezzo
|
|
EgtSetInfo(EgtGetFirstRawPart(), "HCING", dHCING)
|
|
'aggiorno lista pezzi
|
|
BeamMachGroup.MyMachGroupM.RefreshPartList()
|
|
BeamMachGroup.MyMachGroupM.RefreshGroupData()
|
|
Core.ViewPanelVM.BWSetView(VT.ISO_SW, False)
|
|
' salvo nuovo grezzo nel progetto
|
|
Map.refSupervisorManagerVM.Save()
|
|
Dim LastDonePart As PartVM = Nothing
|
|
' segno pezzi non completati come scrap
|
|
For Index = 0 To m_PartVMList.Count - 1
|
|
Dim CurrPart As PartVM = m_PartVMList(Index)
|
|
If CurrPart.bDO Then
|
|
Dim Part As PartVM = m_PartVMList(Index)
|
|
Dim nP_Prod As Integer = Map.refSupervisorManagerVM.CurrProd.nProdId
|
|
Dim nP_Machgroup As Integer = Id
|
|
Dim nP_Part As Integer = m_PartVMList(Index).nPartId
|
|
DbControllers.m_PartController.UpdateEnd(nP_Prod, nP_Machgroup, nP_Part, DateTime.MinValue)
|
|
DbControllers.m_PartController.UpdateStatus(nP_Prod, nP_Machgroup, nP_Part, ItemState.Scrapped)
|
|
' scrivo stato end
|
|
Part.nProduction_State = ItemState.Scrapped
|
|
Part.dtEndTime = DateTime.MinValue
|
|
Part.NotifyPropertyChanged(NameOf(Part.nProduction_State))
|
|
' resetto stato redo
|
|
Part.bRedo = False
|
|
Else
|
|
LastDonePart = CurrPart
|
|
End If
|
|
Next
|
|
' imposto fine MachGroup su fine ultimo pezzo o inizio Machgroup + 1 secondo
|
|
Dim MachGroupEnd As DateTime = dtStartTime + New TimeSpan(0, 0, 1)
|
|
If Not IsNothing(LastDonePart) AndAlso LastDonePart.dtEndTime <> DateTime.MinValue Then
|
|
MachGroupEnd = LastDonePart.dtEndTime
|
|
End If
|
|
' scrivo data end su Db barra
|
|
DbControllers.m_MachGroupController.UpdateEnd(Map.refSupervisorManagerVM.CurrProd.nProdId, Id, MachGroupEnd)
|
|
DbControllers.m_MachGroupController.UpdateStatus(Map.refSupervisorManagerVM.CurrProd.nProdId, Id, ItemState.Produced)
|
|
' scrivo stato end
|
|
MyMachGroupM.SetProductionState(ItemState.Produced)
|
|
dtEndTime = MachGroupEnd
|
|
NotifyPropertyChanged(NameOf(nProduction_State))
|
|
NotifyPropertyChanged(NameOf(Produce_IsEnabled))
|
|
MachGroup = BeamMachGroup
|
|
ElseIf Map.refSupervisorManagerVM.CurrProd.nType = BWType.WALL Then
|
|
End If
|
|
' aggiorno dati utilizzo grezzo
|
|
MachGroup.UpdateUsage()
|
|
'passo machgroup a supervisor su Db
|
|
DbControllers.m_MachGroupController.UpdateSupervisor(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, DbControllers.m_SupervisorId)
|
|
MachGroup.SentToSupervisor()
|
|
MachGroup.NotifyPropertyChanged(NameOf(MachGroup.Background))
|
|
' assegno a nuova barra indice successivo a quella di partenza
|
|
MachGroup.SetProductionIndex(m_nProductionIndex + 1)
|
|
' assegno stati a pezzi
|
|
For Each Part As PartVM In MachGroup.PartVMList
|
|
DbControllers.m_PartController.UpdateStatus(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, Part.nPartId, ItemState.Assigned)
|
|
Part.nProduction_State = ItemState.Assigned
|
|
Part.NotifyPropertyChanged(NameOf(Part.Background))
|
|
Next
|
|
' 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.m_nProductionIndex + 1)
|
|
DbControllers.m_MachGroupController.UpdateOrder(Map.refSupervisorManagerVM.CurrProd.nProdId, CurrMachGroup.Id, CurrMachGroup.nProductionIndex)
|
|
End If
|
|
Next
|
|
' aggiungo nuova barra subito dopo vecchia
|
|
DbControllers.m_MachGroupController.UpdateOrder(Map.refSupervisorManagerVM.CurrProd.nProdId, MachGroup.Id, MachGroup.nProductionIndex)
|
|
' aggiungo Machgroup a lista supervisor
|
|
If Not IsNothing(MachGroup) Then Map.refProjectVM.SupervisorMachGroupPanelVM.AddMachGroupToSupervisor(MachGroup)
|
|
' lo posiziono subito dopo il gruppo di ripartenza
|
|
Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Move(Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.Count - 1, Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.IndexOf(Me) + 1)
|
|
EgtResetCurrMachGroup()
|
|
EgtZoom(ZM.ALL)
|
|
Return MachGroup
|
|
End Function
|
|
|
|
Private Function GetHCING(nOrigPartId As Integer) As Double
|
|
' inizializzo nuovo contesto
|
|
Dim nCurrCtx As Integer = EgtGetCurrentContext()
|
|
Dim nTempCtx As Integer = EgtInitContext()
|
|
' inizializzo gestore lavorazioni
|
|
EgtInitMachMgr(Map.refMainWindowVM.MainWindowM.sMachinesRoot, Map.refMainWindowVM.MainWindowM.sToolMakersDir)
|
|
Dim g = EgtOpenFile(Map.refSupervisorManagerVM.CurrProd.sProdDirPath & "\" & Name & ".bwe")
|
|
Dim nFirstId As Integer = EgtGetFirstMachGroup()
|
|
Dim f = EgtSetCurrMachGroup(nFirstId)
|
|
Dim nOldRawId As Integer = EgtGetRawPartFromPart(nOrigPartId)
|
|
Dim dHCING As Double = 0
|
|
EgtGetInfo(nOldRawId, "HCING", dHCING)
|
|
EgtSetCurrentContext(nCurrCtx)
|
|
EgtDeleteContext(nTempCtx)
|
|
Return dHCING
|
|
End Function
|
|
|
|
#End Region ' ProduceMachGroup
|
|
|
|
#End Region ' COMMANDS
|
|
|
|
#Region "EVENTS"
|
|
|
|
Protected Overrides Sub OnPartAdded(sender As Object, e As PartAddedEventArgs)
|
|
Dim PartVM As PartVM = New PartVM(e.NewPart, Me)
|
|
PartVMList.Add(PartVM)
|
|
End Sub
|
|
|
|
#End Region ' EVENTS
|
|
|
|
End Class
|
|
|
|
Class RedoPart
|
|
|
|
Private m_nPartId As Integer
|
|
Public ReadOnly Property nPartId As Integer
|
|
Get
|
|
Return m_nPartId
|
|
End Get
|
|
End Property
|
|
|
|
Private m_nDuploId As Integer
|
|
Public ReadOnly Property nDuploId As Integer
|
|
Get
|
|
Return m_nDuploId
|
|
End Get
|
|
End Property
|
|
Friend Sub SetDuploId(nDuploId As Integer)
|
|
m_nDuploId = nDuploId
|
|
End Sub
|
|
|
|
Private m_FeatureList As New Dictionary(Of Integer, Boolean)
|
|
Public ReadOnly Property FeatureList As Dictionary(Of Integer, Boolean)
|
|
Get
|
|
Return m_FeatureList
|
|
End Get
|
|
End Property
|
|
|
|
Sub New(nPartId As Integer, FeatureList As Dictionary(Of Integer, Boolean))
|
|
m_nPartId = nPartId
|
|
m_FeatureList = FeatureList
|
|
End Sub
|
|
|
|
End Class |