b87d27230c
-piccole modifiche
840 lines
40 KiB
VB.net
840 lines
40 KiB
VB.net
Imports System.Collections.ObjectModel
|
|
Imports EgtBEAMWALL.Core
|
|
Imports EgtBEAMWALL.Core.ConstGen
|
|
Imports EgtUILib
|
|
|
|
Module PDFFlowHelper
|
|
|
|
#Region "METHODS"
|
|
|
|
Public Function CreateStatReportFlow(ActivePage As Pages, bPreview As Boolean) As FlowDocument
|
|
' Creo nuovo FlowDocument
|
|
Dim flowDoc As New FlowDocument With {
|
|
.PagePadding = New Thickness(50),
|
|
.TextAlignment = TextAlignment.Left,
|
|
.PageWidth = 1122,
|
|
.PageHeight = 793,
|
|
.ColumnWidth = Double.PositiveInfinity
|
|
}
|
|
|
|
' Titolo
|
|
Dim titleText As String = String.Empty
|
|
If ActivePage = Pages.VIEW Then
|
|
titleText = ProjectManagerVM.CurrProd.sProdId & " - " & ProjectManagerVM.CurrProd.BTLFileName_Msg & " - Statistics"
|
|
ElseIf ActivePage = Pages.MACHINING Then
|
|
titleText = ProjectManagerVM.CurrProd.sProdId & " - " & ProjectManagerVM.CurrProd.ListName_Msg & " - Statistics"
|
|
End If
|
|
'flowDoc.Blocks.Add(New Paragraph(New Run(titleText)) With {.FontSize = 18, .FontWeight = FontWeights.Bold})
|
|
|
|
'' Sottotitolo
|
|
'flowDoc.Blocks.Add(New Paragraph(New Run("Production statistics of the project")))
|
|
|
|
'Definisco lo stile
|
|
DefineStyles(flowDoc)
|
|
|
|
' Logo
|
|
Dim sImageLogo As String = Map.refMainWindowVM.MainWindowM.sResourcesRoot & "\Logo landscape.png"
|
|
If Not System.IO.File.Exists(sImageLogo) Then
|
|
sImageLogo = Map.refMainWindowVM.MainWindowM.sResourcesRoot & "\notfound.png"
|
|
End If
|
|
|
|
DefineLogo(flowDoc, sImageLogo)
|
|
|
|
' Contenuto variabile
|
|
If ActivePage = Pages.VIEW Then
|
|
DefinePartTotals(flowDoc, bPreview)
|
|
DefineItemListFlowDocument(flowDoc, ListTypes.PART, bPreview)
|
|
ElseIf ActivePage = Pages.MACHINING Then
|
|
DefineMachGroupTotals(flowDoc, bPreview)
|
|
DefineItemListFlowDocument(flowDoc, ListTypes.MACHGROUP, bPreview)
|
|
DefineItemListFlowDocument(flowDoc, ListTypes.RAWPART, bPreview)
|
|
CreateRawPartPages(flowDoc, bPreview)
|
|
End If
|
|
|
|
Return flowDoc
|
|
End Function
|
|
|
|
Private Sub DefinePartTotals(flowDoc As FlowDocument, bPreview As Boolean)
|
|
Dim titlePara As New Paragraph(New Run(EgtMsg(61734) & "s")) With {
|
|
.FontSize = 14,
|
|
.Foreground = Brushes.DarkBlue,
|
|
.FontWeight = FontWeights.Bold,
|
|
.Margin = New Thickness(0, 35, 0, 6)
|
|
}
|
|
flowDoc.Blocks.Add(titlePara)
|
|
|
|
' Recupero lista Part Totals
|
|
Dim sPartTot As ExpanderPDF = Map.refPDFEditorVM.ExpanderList.FirstOrDefault(Function(x) x.sNameCategory = EgtMsg(61734))
|
|
|
|
If IsNothing(sPartTot) Then Return
|
|
|
|
Dim sBTLTotParts As ExpanderElement = sPartTot.ExpanderElementList.FirstOrDefault(Function(x As ExpanderElement) x.sNameParameter = EgtMsg(61716))
|
|
Dim sBTLTotVolume As ExpanderElement = sPartTot.ExpanderElementList.FirstOrDefault(Function(x As ExpanderElement) x.sNameParameter = EgtMsg(61717))
|
|
Dim sBTLTotTime As ExpanderElement = sPartTot.ExpanderElementList.FirstOrDefault(Function(x As ExpanderElement) x.sNameParameter = EgtMsg(61718))
|
|
Dim sBTLRemainingTime As ExpanderElement = sPartTot.ExpanderElementList.FirstOrDefault(Function(x As ExpanderElement) x.sNameParameter = EgtMsg(61720))
|
|
|
|
' Aggiungo paragrafi condizionati
|
|
If Not IsNothing(sBTLTotParts) AndAlso sBTLTotParts.bParameter_IsChecked Then
|
|
flowDoc.Blocks.Add(New Paragraph(New Run(Statistic_Messages.BTLTotParts_Msg & If(Not bPreview, Map.refProjectVM.BTLStructureVM.sBTLTotParts, "127"))))
|
|
End If
|
|
|
|
If Not IsNothing(sBTLTotVolume) AndAlso sBTLTotVolume.bParameter_IsChecked Then
|
|
flowDoc.Blocks.Add(New Paragraph(New Run(Statistic_Messages.BTLTotVolume_Msg & If(Not bPreview, Map.refProjectVM.BTLStructureVM.sBTLTotVolume, "9.156"))))
|
|
End If
|
|
|
|
If Not IsNothing(sBTLTotTime) AndAlso sBTLTotTime.bParameter_IsChecked Then
|
|
flowDoc.Blocks.Add(New Paragraph(New Run(Statistic_Messages.BTLTotTime_Msg & If(Not bPreview, Map.refProjectVM.BTLStructureVM.sBTLTotTime, "00:01:55"))))
|
|
End If
|
|
|
|
If Not IsNothing(sBTLRemainingTime) AndAlso sBTLRemainingTime.bParameter_IsChecked Then
|
|
flowDoc.Blocks.Add(New Paragraph(New Run(Statistic_Messages.BTLRemainingTime_Msg & If(Not bPreview, Map.refProjectVM.BTLStructureVM.sBTLRemainingTime, "00:01:55"))))
|
|
End If
|
|
End Sub
|
|
|
|
Public Sub DefineMachGroupTotals(flowDoc As FlowDocument, bPreview As Boolean)
|
|
Dim titlePara As New Paragraph(New Run(EgtMsg(61729))) With {
|
|
.FontSize = 14,
|
|
.Foreground = Brushes.DarkBlue,
|
|
.FontWeight = FontWeights.Bold,
|
|
.Margin = New Thickness(0, 35, 0, 6)
|
|
}
|
|
flowDoc.Blocks.Add(titlePara)
|
|
|
|
Dim sMachGroup As ExpanderPDF = Map.refPDFEditorVM.ExpanderList.FirstOrDefault(Function(x) x.sNameCategory = EgtMsg(61729))
|
|
|
|
If IsNothing(sMachGroup) Then Return
|
|
|
|
' Recupero parametri
|
|
Dim sNumberBlanks As ExpanderElement = sMachGroup.ExpanderElementList.FirstOrDefault(Function(x As ExpanderElement) x.sNameParameter = EgtMsg(61721))
|
|
Dim sTotalVolume As ExpanderElement = sMachGroup.ExpanderElementList.FirstOrDefault(Function(x As ExpanderElement) x.sNameParameter = EgtMsg(61717))
|
|
Dim sEstimatedTotalTime As ExpanderElement = sMachGroup.ExpanderElementList.FirstOrDefault(Function(x As ExpanderElement) x.sNameParameter = EgtMsg(61719))
|
|
Dim sTotalTime As ExpanderElement = sMachGroup.ExpanderElementList.FirstOrDefault(Function(x As ExpanderElement) x.sNameParameter = EgtMsg(61718))
|
|
Dim sRemainingTime As ExpanderElement = sMachGroup.ExpanderElementList.FirstOrDefault(Function(x As ExpanderElement) x.sNameParameter = EgtMsg(61720))
|
|
Dim sNumberPiecesBLT As ExpanderElement = sMachGroup.ExpanderElementList.FirstOrDefault(Function(x As ExpanderElement) x.sNameParameter = EgtMsg(61722))
|
|
Dim sNumberPiecesAdded As ExpanderElement = sMachGroup.ExpanderElementList.FirstOrDefault(Function(x As ExpanderElement) x.sNameParameter = EgtMsg(61723))
|
|
Dim sNumberPiecesInsertedBlanks As ExpanderElement = sMachGroup.ExpanderElementList.FirstOrDefault(Function(x As ExpanderElement) x.sNameParameter = EgtMsg(61724))
|
|
Dim sNumberPiecesCompleted As ExpanderElement = sMachGroup.ExpanderElementList.FirstOrDefault(Function(x As ExpanderElement) x.sNameParameter = EgtMsg(61725))
|
|
|
|
' Aggiungo paragrafi condizionati
|
|
If sNumberBlanks IsNot Nothing AndAlso sNumberBlanks.bParameter_IsChecked Then
|
|
flowDoc.Blocks.Add(New Paragraph(New Run(Statistic_Messages.TotMachGroups_Msg & If(Not bPreview, Map.refProjectVM.MachGroupPanelVM.sTotMachGroups, "11"))))
|
|
End If
|
|
|
|
If sTotalVolume IsNot Nothing AndAlso sTotalVolume.bParameter_IsChecked Then
|
|
flowDoc.Blocks.Add(New Paragraph(New Run(Statistic_Messages.BTLTotVolume_Msg & If(Not bPreview, Map.refProjectVM.MachGroupPanelVM.sTotVolume, "3.168"))))
|
|
End If
|
|
|
|
If sEstimatedTotalTime IsNot Nothing AndAlso sEstimatedTotalTime.bParameter_IsChecked Then
|
|
flowDoc.Blocks.Add(New Paragraph(New Run(Statistic_Messages.BTLTotEstimatedTime_Msg & If(Not bPreview, Map.refProjectVM.MachGroupPanelVM.sTotEstimatedTime, "00:22:30"))))
|
|
End If
|
|
|
|
If sTotalTime IsNot Nothing AndAlso sTotalTime.bParameter_IsChecked Then
|
|
flowDoc.Blocks.Add(New Paragraph(New Run(Statistic_Messages.BTLTotTime_Msg & If(Not bPreview, Map.refProjectVM.MachGroupPanelVM.sTotTime, "00:09:23"))))
|
|
End If
|
|
|
|
If sRemainingTime IsNot Nothing AndAlso sRemainingTime.bParameter_IsChecked Then
|
|
flowDoc.Blocks.Add(New Paragraph(New Run(Statistic_Messages.BTLRemainingTime_Msg & If(Not bPreview, Map.refProjectVM.MachGroupPanelVM.sRemainingTime, "00:09:23"))))
|
|
End If
|
|
|
|
If sNumberPiecesBLT IsNot Nothing AndAlso sNumberPiecesBLT.bParameter_IsChecked Then
|
|
flowDoc.Blocks.Add(New Paragraph(New Run(Statistic_Messages.TotCNTParts_Msg & If(Not bPreview, Map.refProjectVM.BTLStructureVM.sTotCNTParts, "127"))))
|
|
End If
|
|
|
|
If sNumberPiecesAdded IsNot Nothing AndAlso sNumberPiecesAdded.bParameter_IsChecked Then
|
|
flowDoc.Blocks.Add(New Paragraph(New Run(Statistic_Messages.TotADDEDParts_Msg & If(Not bPreview, Map.refProjectVM.BTLStructureVM.sTotADDEDParts, "0"))))
|
|
End If
|
|
|
|
If sNumberPiecesInsertedBlanks IsNot Nothing AndAlso sNumberPiecesInsertedBlanks.bParameter_IsChecked Then
|
|
flowDoc.Blocks.Add(New Paragraph(New Run(Statistic_Messages.TotINPRODParts_Msg & If(Not bPreview, Map.refProjectVM.BTLStructureVM.sTotINPRODParts, "69"))))
|
|
End If
|
|
|
|
If sNumberPiecesCompleted IsNot Nothing AndAlso sNumberPiecesCompleted.bParameter_IsChecked Then
|
|
flowDoc.Blocks.Add(New Paragraph(New Run(Statistic_Messages.TotDONEParts_Msg & If(Not bPreview, Map.refProjectVM.BTLStructureVM.sTotDONEParts, "5"))))
|
|
End If
|
|
End Sub
|
|
|
|
Public Function DefineItemListFlowDocument(flowDoc As FlowDocument, ByVal nListType As ListTypes, ByVal bPreview As Boolean) As FlowDocument
|
|
Dim sMachGroupList As ExpanderTable = Nothing
|
|
If nListType = ListTypes.MACHGROUP Then
|
|
sMachGroupList = Map.refPDFEditorVM.ExpanderList.FirstOrDefault(Function(x) x.sNameCategory = EgtMsg(61730)).ExpanderElementList.FirstOrDefault()
|
|
ElseIf nListType = ListTypes.RAWPART Then
|
|
sMachGroupList = Map.refPDFEditorVM.ExpanderList.FirstOrDefault(Function(x) x.sNameCategory = EgtMsg(61732)).ExpanderElementList.FirstOrDefault()
|
|
ElseIf nListType = ListTypes.PART Then
|
|
sMachGroupList = Map.refPDFEditorVM.ExpanderList.FirstOrDefault(Function(x) x.sNameCategory = EgtMsg(61733)).ExpanderElementList.FirstOrDefault()
|
|
End If
|
|
|
|
' Recupero le singole definizioni di colonna (rimane essenziale per bIsChecked)
|
|
Dim sName As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_NAME)
|
|
Dim sW As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_W)
|
|
Dim sH As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_H)
|
|
Dim sL As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_L)
|
|
Dim sMaterial As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_MATERIAL)
|
|
Dim sUsage As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_USAGE)
|
|
Dim sWaste As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_WASTE)
|
|
Dim sUTime As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_UNITTIME)
|
|
Dim sQty As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_QTY)
|
|
Dim sPDN As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_PDN)
|
|
Dim sDesc As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_DESC)
|
|
Dim sCNT As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_CNT)
|
|
Dim sAdded As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_ADDED)
|
|
Dim sDone As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_DONE)
|
|
Dim sUVolume As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_UNITVOLUME)
|
|
Dim sTVolume As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_TOTVOLUME)
|
|
Dim sTTime As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_TOTTIME)
|
|
Dim sINProd As EgtDataGridColumn = sMachGroupList.RawPartColumns.FirstOrDefault(Function(x) x.Name = COL_INPROD)
|
|
|
|
Dim titleText As String = ""
|
|
Select Case nListType
|
|
Case ListTypes.PART
|
|
titleText = EgtMsg(61733) ' Part List
|
|
Case ListTypes.MACHGROUP
|
|
titleText = EgtMsg(61730) ' MachGroup List
|
|
Case ListTypes.RAWPART
|
|
titleText = EgtMsg(61732) ' Raw Part List
|
|
End Select
|
|
|
|
Dim titleParagraph As New Paragraph(New Run(titleText)) With {
|
|
.FontSize = 14,
|
|
.Foreground = Brushes.DarkBlue,
|
|
.FontWeight = FontWeights.Bold
|
|
}
|
|
flowDoc.Blocks.Add(titleParagraph)
|
|
|
|
Dim Itemlist As IEnumerable(Of Object) = Nothing
|
|
If bPreview Then
|
|
Itemlist = New List(Of Object)()
|
|
Else
|
|
Select Case nListType
|
|
Case ListTypes.PART
|
|
Itemlist = Map.refProjectVM.BTLStructureVM.BTLPartVMList
|
|
Case ListTypes.MACHGROUP
|
|
Itemlist = Map.refProjectVM.MachGroupPanelVM.MachGroupVMList
|
|
Case ListTypes.RAWPART
|
|
Map.refStatisticsVM.LoadRawPart()
|
|
Itemlist = Map.refStatisticsVM.RawPartList
|
|
End Select
|
|
End If
|
|
Dim countItemList As Integer = If(bPreview, Itemlist.Count, Itemlist.Count - 1)
|
|
Dim dataList As List(Of Object) = If(Not IsNothing(Itemlist), Itemlist.Cast(Of Object)().ToList(), New List(Of Object)())
|
|
|
|
Dim table As New Table With {
|
|
.CellSpacing = 0,
|
|
.FontSize = 10
|
|
}
|
|
|
|
Dim Columnlist As ObservableCollection(Of EgtDataGridColumn) = sMachGroupList.RawPartColumns
|
|
|
|
For ColumnIndex = 0 To Columnlist.Count - 1
|
|
Dim colDef As EgtDataGridColumn = Columnlist(ColumnIndex)
|
|
Dim column As New TableColumn()
|
|
Dim isVisible As Boolean = False
|
|
Dim widthCm As Double = 0.0
|
|
|
|
Select Case colDef.Name
|
|
Case COL_PDN
|
|
isVisible = sPDN.bIsChecked
|
|
widthCm = If(nListType = ListTypes.PART, 1.0, 1.0)
|
|
Case COL_ID
|
|
isVisible = nListType = ListTypes.MACHGROUP
|
|
widthCm = 1.5
|
|
Case COL_W
|
|
isVisible = sW.bIsChecked
|
|
widthCm = If(nListType = ListTypes.PART, 1.0, 2.0)
|
|
Case COL_H
|
|
isVisible = sH.bIsChecked
|
|
widthCm = If(nListType = ListTypes.PART, 1.0, 2.0)
|
|
Case COL_L
|
|
isVisible = sL.bIsChecked
|
|
widthCm = If(nListType = ListTypes.PART, 1.6, 2.0)
|
|
Case COL_DESC
|
|
isVisible = sDesc.bIsChecked
|
|
widthCm = 4.0
|
|
Case COL_NAME
|
|
isVisible = sName.bIsChecked
|
|
widthCm = 4.0
|
|
Case COL_MATERIAL
|
|
isVisible = sMaterial.bIsChecked
|
|
widthCm = 2.0
|
|
Case COL_CNT
|
|
isVisible = sCNT.bIsChecked
|
|
widthCm = 1.6
|
|
Case COL_ADDED
|
|
isVisible = sAdded.bIsChecked
|
|
widthCm = 1.5
|
|
Case COL_INPROD
|
|
isVisible = sINProd.bIsChecked
|
|
widthCm = 2.5
|
|
Case COL_DONE
|
|
isVisible = sDone.bIsChecked
|
|
widthCm = 1.5
|
|
Case COL_USAGE
|
|
isVisible = sUsage.bIsChecked AndAlso nListType = ListTypes.MACHGROUP
|
|
widthCm = 2.0
|
|
Case COL_WASTE
|
|
isVisible = sWaste.bIsChecked AndAlso nListType = ListTypes.MACHGROUP
|
|
widthCm = 2.0
|
|
Case COL_UNITVOLUME
|
|
isVisible = sUVolume.bIsChecked
|
|
widthCm = If(nListType = ListTypes.PART, 1.5, 2.0)
|
|
Case COL_TOTVOLUME
|
|
isVisible = sTVolume.bIsChecked AndAlso nListType = ListTypes.PART
|
|
widthCm = 1.5
|
|
Case COL_UNITTIME
|
|
isVisible = sUTime.bIsChecked
|
|
widthCm = 2.2
|
|
Case COL_TOTTIME
|
|
isVisible = sTTime.bIsChecked AndAlso nListType = ListTypes.PART
|
|
widthCm = 2.0
|
|
Case COL_QTY
|
|
isVisible = sQty.bIsChecked AndAlso nListType = ListTypes.RAWPART
|
|
widthCm = 2.0
|
|
Case Else
|
|
isVisible = False
|
|
widthCm = 0.0
|
|
End Select
|
|
|
|
If isVisible Then
|
|
column.Width = New GridLength(widthCm * 40, GridUnitType.Pixel)
|
|
Else
|
|
column.Width = New GridLength(0.1, GridUnitType.Pixel) ' Colonna nascosta
|
|
End If
|
|
table.Columns.Add(column)
|
|
Next
|
|
|
|
Dim rowGroup As New TableRowGroup()
|
|
|
|
For PartIndex = -1 To countItemList
|
|
Dim row As New TableRow()
|
|
|
|
If PartIndex = -1 Then
|
|
row.Background = Brushes.Aqua
|
|
row.FontWeight = FontWeights.Bold
|
|
row.FontSize = 12
|
|
End If
|
|
|
|
Dim BTLPartVM As BTLPartVM = Nothing
|
|
Dim MachGroupVM As MyMachGroupVM = Nothing
|
|
Dim RawPart As SParam = Nothing
|
|
|
|
If PartIndex >= 0 Then
|
|
If Not bPreview Then
|
|
Select Case nListType
|
|
Case ListTypes.PART
|
|
BTLPartVM = dataList(PartIndex)
|
|
Case ListTypes.MACHGROUP
|
|
MachGroupVM = dataList(PartIndex)
|
|
Case ListTypes.RAWPART
|
|
RawPart = dataList(PartIndex)
|
|
End Select
|
|
End If
|
|
End If
|
|
|
|
Dim thickness As Thickness
|
|
|
|
For ColumnIndex = 0 To Columnlist.Count - 1
|
|
Dim cellContent As String = ""
|
|
Dim colDef As EgtDataGridColumn = Columnlist(ColumnIndex)
|
|
|
|
If PartIndex = -1 AndAlso ColumnIndex = 0 Then
|
|
thickness = New Thickness(0.0125, 0.5, 0.0125, 0.5)
|
|
ElseIf PartIndex = -1 Then
|
|
thickness = New Thickness(0, 0.5, 0.0125, 0.5)
|
|
ElseIf ColumnIndex = 0 Then
|
|
thickness = New Thickness(0.0125, 0, 0, 0.5)
|
|
ElseIf ColumnIndex = Columnlist.Count - 1 Then
|
|
thickness = New Thickness(0.0125, 0, 0.0125, 0.5)
|
|
Else
|
|
thickness = New Thickness(0.0125, 0, 0, 0.5)
|
|
End If
|
|
|
|
Dim cell As New TableCell With {
|
|
.BorderBrush = Brushes.Black,
|
|
.BorderThickness = thickness,
|
|
.Padding = New Thickness(5, 2, 5, 0),
|
|
.TextAlignment = TextAlignment.Justify,
|
|
.FontSize = 10
|
|
}
|
|
|
|
If PartIndex = -1 Then
|
|
' Intestazioni
|
|
Select Case colDef.Name
|
|
Case COL_PDN
|
|
If sPDN.bIsChecked Then cellContent = Statistic_Messages.PDN_Msg
|
|
Case COL_ID
|
|
If nListType = ListTypes.MACHGROUP Then cellContent = Map.refStatisticsVM.ID_Msg
|
|
Case COL_W
|
|
If sW.bIsChecked Then cellContent = Statistic_Messages.W_Msg
|
|
Case COL_H
|
|
If sH.bIsChecked Then cellContent = Statistic_Messages.H_Msg
|
|
Case COL_L
|
|
If sL.bIsChecked Then cellContent = Statistic_Messages.L_Msg
|
|
Case COL_DESC
|
|
If sDesc.bIsChecked Then cellContent = Statistic_Messages.NAM_Msg
|
|
Case COL_NAME
|
|
If sName.bIsChecked Then cellContent = Statistic_Messages.NAM_Msg
|
|
Case COL_MATERIAL
|
|
If sMaterial.bIsChecked Then cellContent = Statistic_Messages.MAT_Msg
|
|
Case COL_CNT
|
|
If sCNT.bIsChecked Then cellContent = Statistic_Messages.CNT_Msg
|
|
Case COL_ADDED
|
|
If sAdded.bIsChecked Then cellContent = Statistic_Messages.ADDED_Msg
|
|
Case COL_INPROD
|
|
If sINProd.bIsChecked Then cellContent = Statistic_Messages.INPROD_Msg
|
|
Case COL_DONE
|
|
If sDone.bIsChecked Then cellContent = Statistic_Messages.DONE_Msg
|
|
Case COL_USAGE
|
|
If sUsage.bIsChecked Then cellContent = Statistic_Messages.Used_Msg
|
|
Case COL_WASTE
|
|
If sWaste.bIsChecked Then cellContent = Statistic_Messages.Waste_Msg
|
|
Case COL_UNITVOLUME
|
|
If sUVolume.bIsChecked Then cellContent = Statistic_Messages.UNIT_VOLUME_Msg
|
|
Case COL_TOTVOLUME
|
|
If sTVolume.bIsChecked Then cellContent = Statistic_Messages.TOT_VOLUME_Msg
|
|
Case COL_UNITTIME
|
|
If sUTime.bIsChecked Then cellContent = Statistic_Messages.UNIT_TIME_Msg
|
|
Case COL_TOTTIME
|
|
If sTTime.bIsChecked Then cellContent = Statistic_Messages.TOT_TIME_Msg
|
|
Case COL_QTY
|
|
If sQty.bIsChecked Then cellContent = Statistic_Messages.QTY_Msg
|
|
End Select
|
|
Else ' PartIndex >= 0
|
|
' Righe dati
|
|
Select Case colDef.Name
|
|
Case COL_PDN
|
|
If sPDN.bIsChecked AndAlso nListType = ListTypes.PART Then
|
|
cellContent = If(bPreview, "1", If(BTLPartVM IsNot Nothing, BTLPartVM.nPDN.ToString(), ""))
|
|
End If
|
|
Case COL_ID
|
|
If nListType = ListTypes.MACHGROUP Then
|
|
cellContent = If(bPreview, "ID_Preview", If(MachGroupVM IsNot Nothing, MachGroupVM.Id.ToString(), ""))
|
|
End If
|
|
Case COL_W
|
|
If sW.bIsChecked Then
|
|
If bPreview Then
|
|
cellContent = If(nListType = ListTypes.PART, "200", "120")
|
|
Else
|
|
Select Case nListType
|
|
Case ListTypes.PART
|
|
cellContent = BTLPartVM.sW
|
|
Case ListTypes.MACHGROUP
|
|
cellContent = MachGroupVM.dW.ToString()
|
|
Case ListTypes.RAWPART
|
|
cellContent = RawPart.sW
|
|
End Select
|
|
End If
|
|
End If
|
|
Case COL_H
|
|
If sH.bIsChecked Then
|
|
If bPreview Then
|
|
cellContent = If(nListType = ListTypes.PART, "360", "160")
|
|
Else
|
|
Select Case nListType
|
|
Case ListTypes.PART
|
|
cellContent = BTLPartVM.sH
|
|
Case ListTypes.MACHGROUP
|
|
cellContent = MachGroupVM.dH.ToString()
|
|
Case ListTypes.RAWPART
|
|
cellContent = RawPart.sH
|
|
End Select
|
|
End If
|
|
End If
|
|
Case COL_L
|
|
If sL.bIsChecked Then
|
|
If bPreview Then
|
|
cellContent = If(nListType = ListTypes.PART, "6672.6", "15000")
|
|
Else
|
|
Select Case nListType
|
|
Case ListTypes.PART
|
|
cellContent = BTLPartVM.sL
|
|
Case ListTypes.MACHGROUP
|
|
cellContent = MachGroupVM.dL.ToString()
|
|
Case ListTypes.RAWPART
|
|
cellContent = RawPart.sL
|
|
End Select
|
|
End If
|
|
End If
|
|
Case COL_DESC
|
|
If sDesc.bIsChecked Then
|
|
If bPreview Then
|
|
cellContent = If(nListType = ListTypes.PART, EgtMsg(63032), "1")
|
|
Else
|
|
Select Case nListType
|
|
Case ListTypes.PART
|
|
cellContent = BTLPartVM.sNAM
|
|
Case ListTypes.MACHGROUP
|
|
cellContent = MachGroupVM.nName.ToString()
|
|
Case ListTypes.RAWPART
|
|
cellContent = ""
|
|
End Select
|
|
End If
|
|
End If
|
|
Case COL_NAME
|
|
If sName.bIsChecked Then
|
|
If bPreview Then
|
|
cellContent = If(nListType = ListTypes.PART, EgtMsg(63032), "1")
|
|
Else
|
|
Select Case nListType
|
|
Case ListTypes.PART
|
|
cellContent = BTLPartVM.sNAM
|
|
Case ListTypes.MACHGROUP
|
|
cellContent = MachGroupVM.nName.ToString()
|
|
Case ListTypes.RAWPART
|
|
cellContent = ""
|
|
End Select
|
|
End If
|
|
End If
|
|
Case COL_MATERIAL
|
|
If sMaterial.bIsChecked Then
|
|
If bPreview Then
|
|
cellContent = "GL24h"
|
|
Else
|
|
Select Case nListType
|
|
Case ListTypes.PART
|
|
cellContent = BTLPartVM.sMATERIAL
|
|
Case ListTypes.MACHGROUP
|
|
cellContent = MachGroupVM.sMATERIAL
|
|
Case ListTypes.RAWPART
|
|
cellContent = RawPart.sMaterial
|
|
End Select
|
|
End If
|
|
End If
|
|
Case COL_CNT
|
|
If sCNT.bIsChecked AndAlso nListType = ListTypes.PART Then
|
|
cellContent = If(bPreview, "1", If(BTLPartVM IsNot Nothing, BTLPartVM.sCNT, ""))
|
|
End If
|
|
Case COL_ADDED
|
|
If sAdded.bIsChecked AndAlso nListType = ListTypes.PART Then
|
|
cellContent = If(bPreview, "0", If(BTLPartVM IsNot Nothing, BTLPartVM.sADDED, ""))
|
|
End If
|
|
Case COL_INPROD
|
|
If sINProd.bIsChecked AndAlso nListType = ListTypes.PART Then
|
|
cellContent = If(bPreview, "0", If(BTLPartVM IsNot Nothing, BTLPartVM.nINPROD.ToString(), ""))
|
|
End If
|
|
Case COL_DONE
|
|
If sDone.bIsChecked AndAlso nListType = ListTypes.PART Then
|
|
cellContent = If(bPreview, "0", If(BTLPartVM IsNot Nothing, BTLPartVM.nDONE.ToString(), ""))
|
|
End If
|
|
Case COL_USAGE
|
|
If sUsage.bIsChecked AndAlso nListType = ListTypes.MACHGROUP Then
|
|
cellContent = If(bPreview, "99.719", If(MachGroupVM IsNot Nothing, MachGroupVM.sUsage, ""))
|
|
End If
|
|
Case COL_WASTE
|
|
If sWaste.bIsChecked AndAlso nListType = ListTypes.MACHGROUP Then
|
|
cellContent = If(bPreview, "0.5", If(MachGroupVM IsNot Nothing, MachGroupVM.sWaste, ""))
|
|
End If
|
|
Case COL_UNITVOLUME
|
|
If sUVolume.bIsChecked Then
|
|
If bPreview Then
|
|
cellContent = "0.48"
|
|
Else
|
|
cellContent = If(nListType = ListTypes.PART, BTLPartVM.sUnitVolume, MachGroupVM.dUnitVolume.ToString())
|
|
End If
|
|
End If
|
|
Case COL_TOTVOLUME
|
|
If sTVolume.bIsChecked AndAlso nListType = ListTypes.PART Then
|
|
cellContent = If(bPreview, "0.48", If(BTLPartVM IsNot Nothing, BTLPartVM.sTotVolume, ""))
|
|
End If
|
|
Case COL_UNITTIME
|
|
If sUTime.bIsChecked Then
|
|
If bPreview Then
|
|
cellContent = If(nListType = ListTypes.PART, "00:00:00", "00:13:07")
|
|
Else
|
|
cellContent = If(nListType = ListTypes.PART, BTLPartVM.sUnitTime, MachGroupVM.sUnitTime)
|
|
End If
|
|
End If
|
|
Case COL_TOTTIME
|
|
If sTTime.bIsChecked AndAlso nListType = ListTypes.PART Then
|
|
cellContent = If(bPreview, "00:00:00", If(BTLPartVM IsNot Nothing, BTLPartVM.sTotTime, ""))
|
|
End If
|
|
Case COL_QTY
|
|
If sQty.bIsChecked AndAlso nListType = ListTypes.RAWPART Then
|
|
cellContent = If(bPreview, "11", If(RawPart IsNot Nothing, RawPart.nQuantity.ToString(), ""))
|
|
End If
|
|
End Select
|
|
End If
|
|
|
|
If table.Columns(ColumnIndex).Width.Value > 0 Then
|
|
cell.Blocks.Add(New Paragraph(New Run(cellContent)))
|
|
row.Cells.Add(cell)
|
|
End If
|
|
Next
|
|
|
|
rowGroup.Rows.Add(row)
|
|
Next
|
|
|
|
table.RowGroups.Add(rowGroup)
|
|
|
|
flowDoc.Blocks.Add(table)
|
|
Return flowDoc
|
|
End Function
|
|
|
|
Private Sub CreateRawPartPages(flowDoc As FlowDocument, bPreview As Boolean)
|
|
Dim sMachGroupList As ExpanderTable = Map.refPDFEditorVM.ExpanderList.First(Function(x) x.sNameCategory = EgtMsg(61731)).ExpanderElementList.First()
|
|
|
|
Dim sPDN = sMachGroupList.RawPartColumns.First(Function(x) x.Name = COL_PDN)
|
|
Dim sW = sMachGroupList.RawPartColumns.First(Function(x) x.Name = COL_W)
|
|
Dim sH = sMachGroupList.RawPartColumns.First(Function(x) x.Name = COL_H)
|
|
Dim sL = sMachGroupList.RawPartColumns.First(Function(x) x.Name = COL_L)
|
|
Dim sDesc = sMachGroupList.RawPartColumns.First(Function(x) x.Name = COL_DESC)
|
|
Dim sMaterial = sMachGroupList.RawPartColumns.First(Function(x) x.Name = COL_MATERIAL)
|
|
|
|
If bPreview Then
|
|
CreateRawPartPage(flowDoc, sMachGroupList, sPDN, sW, sH, sL, sDesc, sMaterial, Nothing, bPreview)
|
|
Else
|
|
For Each RawPart In Map.refProjectVM.MachGroupPanelVM.MachGroupVMList
|
|
CreateRawPartPage(flowDoc, sMachGroupList, sPDN, sW, sH, sL, sDesc, sMaterial, RawPart, bPreview)
|
|
Next
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub CreateRawPartPage(flowDoc As FlowDocument, sMachGroupList As ExpanderTable, sPDN As EgtDataGridColumn, sW As EgtDataGridColumn, sH As EgtDataGridColumn, sL As EgtDataGridColumn, sDesc As EgtDataGridColumn, sMaterial As EgtDataGridColumn, RawPart As MyMachGroupVM, bPreview As Boolean)
|
|
CreateRawPartImage(flowDoc, sMachGroupList, If(IsNothing(RawPart), 44143, RawPart.Id), If(IsNothing(RawPart), "Preview", RawPart.Name), bPreview)
|
|
|
|
Dim table As New Table With {
|
|
.CellSpacing = 0,
|
|
.FontSize = 10
|
|
}
|
|
Dim Columnlist As ObservableCollection(Of EgtDataGridColumn) = sMachGroupList.RawPartColumns
|
|
Dim visibleColumns As New List(Of EgtDataGridColumn)
|
|
|
|
' Colonne visibili
|
|
For Each col In Columnlist
|
|
Dim showCol As Boolean = False
|
|
Dim width As Double = 0
|
|
Dim column As New TableColumn()
|
|
Select Case col.Name
|
|
Case COL_PDN : showCol = sPDN.bIsChecked : width = 1.0
|
|
Case COL_W : showCol = sW.bIsChecked : width = 2.0
|
|
Case COL_H : showCol = sH.bIsChecked : width = 2.0
|
|
Case COL_L : showCol = sL.bIsChecked : width = 2.0
|
|
Case COL_DESC : showCol = sDesc.bIsChecked : width = 4.0
|
|
Case COL_NAME : showCol = True : width = 4.0
|
|
Case COL_MATERIAL : showCol = sMaterial.bIsChecked : width = 2.0
|
|
End Select
|
|
If showCol Then
|
|
column.Width = New GridLength(width * 40, GridUnitType.Pixel)
|
|
table.Columns.Add(column)
|
|
visibleColumns.Add(col)
|
|
End If
|
|
Next
|
|
|
|
' Header
|
|
Dim headerGroup As New TableRowGroup()
|
|
Dim headerRow As New TableRow()
|
|
For Index As Integer = 0 To visibleColumns.Count - 1
|
|
Dim visibleCol = visibleColumns(Index)
|
|
Dim colName As String = ConvertColumnToMessage(visibleCol.Name)
|
|
Dim cell As New TableCell(New Paragraph(New Run(colName))) With {
|
|
.Background = Brushes.Aqua,
|
|
.BorderBrush = Brushes.Black,
|
|
.BorderThickness = New Thickness(1.255, 1.26, 1, 0.5),
|
|
.Padding = New Thickness(5, 2, 5, 0),
|
|
.FontSize = 12,
|
|
.FontWeight = FontWeights.Bold,
|
|
.TextAlignment = TextAlignment.Justify
|
|
}
|
|
headerRow.Cells.Add(cell)
|
|
Next
|
|
headerGroup.Rows.Add(headerRow)
|
|
table.RowGroups.Add(headerGroup)
|
|
|
|
' Dati
|
|
Dim bodyGroup As New TableRowGroup()
|
|
Dim PartVMList As IEnumerable(Of Object) = If(IsNothing(RawPart), New List(Of Object), RawPart.PartVMList)
|
|
For r As Integer = 0 To PartVMList.Count - 1
|
|
Dim part = PartVMList(r)
|
|
Dim row As New TableRow()
|
|
|
|
For Each col In visibleColumns
|
|
Dim text As String = ""
|
|
Select Case col.Name
|
|
Case COL_PDN : If sPDN.bIsChecked Then text = part.nPDN.ToString()
|
|
Case COL_W : If sW.bIsChecked Then text = part.sW
|
|
Case COL_H : If sH.bIsChecked Then text = part.sH
|
|
Case COL_L : If sL.bIsChecked Then text = part.sL
|
|
Case COL_DESC : If sDesc.bIsChecked Then text = part.sNAM
|
|
Case COL_NAME : text = part.sNAM
|
|
Case COL_MATERIAL : If sMaterial.bIsChecked Then text = part.sMATERIAL
|
|
End Select
|
|
|
|
Dim cell As New TableCell(New Paragraph(New Run(text))) With {
|
|
.BorderBrush = Brushes.Black,
|
|
.BorderThickness = New Thickness(0.5, 0.0125, 0.5, 0.0125),
|
|
.Padding = New Thickness(5, 2, 5, 0),
|
|
.TextAlignment = TextAlignment.Left,
|
|
.FontSize = 10
|
|
}
|
|
row.Cells.Add(cell)
|
|
Next
|
|
bodyGroup.Rows.Add(row)
|
|
Next
|
|
table.RowGroups.Add(bodyGroup)
|
|
|
|
flowDoc.Blocks.Add(table)
|
|
End Sub
|
|
|
|
Private Function GetValue(col As EgtDataGridColumn, p As PartVM) As String
|
|
Select Case col.Name
|
|
Case COL_PDN : Return p.nPDN.ToString()
|
|
Case COL_W : Return p.sW
|
|
Case COL_H : Return p.sH
|
|
Case COL_L : Return p.sL
|
|
Case COL_DESC : Return p.sNAM
|
|
Case COL_MATERIAL : Return p.sMATERIAL
|
|
Case Else : Return ""
|
|
End Select
|
|
End Function
|
|
|
|
Private Sub CreateRawPartImage(flowDoc As FlowDocument, sMachGroupList As ExpanderTable, RawPartId As Integer, RawPartName As String, bPreview As Boolean)
|
|
Dim sImagePath As String = Map.refMainWindowVM.MainWindowM.sTempDir & "\Image" & RawPartId & ".png"
|
|
' creo immagine
|
|
EgtSetCurrMachGroup(RawPartId)
|
|
EgtSetMachineLook(MCH_LOOK.TAB)
|
|
Core.ViewPanelVM.BWSetView(If(Core.ViewPanelVM.Type = BWType.BEAM, VT.FRONT, VT.TOP), False)
|
|
EgtZoom(ZM.ALL, False)
|
|
If Not System.IO.File.Exists(Map.refMainWindowVM.MainWindowM.sTempDir & "\Image" & RawPartId & ".png") Then
|
|
sImagePath = Map.refMainWindowVM.MainWindowM.sTempDir & "\Image" & RawPartId & ".png"
|
|
ElseIf bPreview Then
|
|
sImagePath = Map.refMainWindowVM.MainWindowM.sTempDir & "\ImageTest.png"
|
|
End If
|
|
EgtGetImage(SM.HIDDENLINE, New Color3d(255, 255, 255), New Color3d(255, 255, 255), 3000, 1000, sImagePath)
|
|
|
|
flowDoc.Blocks.Add(New Paragraph(New Run("")) With {.BreakPageBefore = True})
|
|
|
|
If sMachGroupList.bSection_IsChecked Then
|
|
flowDoc.Blocks.Add(New Paragraph(New Run(RawPartName)))
|
|
End If
|
|
|
|
' aggiungo immagine se richiesto
|
|
If sMachGroupList.bImage_IsChecked Then
|
|
Dim img As New System.Windows.Controls.Image With {
|
|
.Source = New BitmapImage(New Uri(sImagePath, UriKind.Absolute)),
|
|
.Stretch = Stretch.Uniform,
|
|
.Width = 275 * 3.78
|
|
}
|
|
|
|
' Inserisco l'immagine nel documento
|
|
Dim container As New BlockUIContainer(img)
|
|
flowDoc.Blocks.Add(container)
|
|
End If
|
|
End Sub
|
|
|
|
#Region "Stile PDF"
|
|
|
|
Private Sub DefineStyles(flowDoc As FlowDocument)
|
|
' Stile base (Normal)
|
|
Dim normalStyle As New Style(GetType(Paragraph))
|
|
normalStyle.Setters.Add(New Setter(Paragraph.FontFamilyProperty, New FontFamily("Arial")))
|
|
normalStyle.Setters.Add(New Setter(Paragraph.FontSizeProperty, 12.0))
|
|
normalStyle.Setters.Add(New Setter(Paragraph.MarginProperty, New Thickness(0, 0, 0, 6)))
|
|
flowDoc.Resources.Add(GetType(Paragraph), normalStyle)
|
|
|
|
' Heading1
|
|
Dim heading1Style As New Style(GetType(Paragraph))
|
|
heading1Style.Setters.Add(New Setter(Paragraph.FontFamilyProperty, New FontFamily("Tahoma")))
|
|
heading1Style.Setters.Add(New Setter(Paragraph.FontSizeProperty, 14.0))
|
|
heading1Style.Setters.Add(New Setter(Paragraph.FontWeightProperty, FontWeights.Bold))
|
|
heading1Style.Setters.Add(New Setter(Paragraph.ForegroundProperty, Brushes.DarkBlue))
|
|
heading1Style.Setters.Add(New Setter(Paragraph.MarginProperty, New Thickness(0, 12, 0, 6)))
|
|
flowDoc.Resources.Add("Heading1", heading1Style)
|
|
|
|
' Heading2
|
|
Dim heading2Style As New Style(GetType(Paragraph))
|
|
heading2Style.Setters.Add(New Setter(Paragraph.FontSizeProperty, 12.0))
|
|
heading2Style.Setters.Add(New Setter(Paragraph.FontWeightProperty, FontWeights.Bold))
|
|
heading2Style.Setters.Add(New Setter(Paragraph.MarginProperty, New Thickness(0, 6, 0, 6)))
|
|
flowDoc.Resources.Add("Heading2", heading2Style)
|
|
|
|
' Heading3
|
|
Dim heading3Style As New Style(GetType(Paragraph))
|
|
heading3Style.Setters.Add(New Setter(Paragraph.FontSizeProperty, 10.0))
|
|
heading3Style.Setters.Add(New Setter(Paragraph.FontWeightProperty, FontWeights.Bold))
|
|
heading3Style.Setters.Add(New Setter(Paragraph.FontStyleProperty, FontStyles.Italic))
|
|
heading3Style.Setters.Add(New Setter(Paragraph.MarginProperty, New Thickness(0, 6, 0, 3)))
|
|
flowDoc.Resources.Add("Heading3", heading3Style)
|
|
|
|
' TextBox (equivalente)
|
|
Dim textBoxStyle As New Style(GetType(Paragraph))
|
|
textBoxStyle.Setters.Add(New Setter(Paragraph.TextAlignmentProperty, TextAlignment.Justify))
|
|
textBoxStyle.Setters.Add(New Setter(Paragraph.BackgroundProperty, Brushes.SkyBlue))
|
|
textBoxStyle.Setters.Add(New Setter(Paragraph.BorderThicknessProperty, New Thickness(2.5)))
|
|
textBoxStyle.Setters.Add(New Setter(Paragraph.BorderBrushProperty, Brushes.Black))
|
|
flowDoc.Resources.Add("TextBox", textBoxStyle)
|
|
|
|
' TOC (Table of Contents)
|
|
Dim tocStyle As New Style(GetType(Paragraph))
|
|
tocStyle.Setters.Add(New Setter(Paragraph.ForegroundProperty, Brushes.Blue))
|
|
flowDoc.Resources.Add("TOC", tocStyle)
|
|
End Sub
|
|
|
|
Private Sub DefineLogo(flowDoc As FlowDocument, sImageLogo As String)
|
|
If System.IO.File.Exists(sImageLogo) Then
|
|
Dim logo As New Image With {
|
|
.Source = New BitmapImage(New Uri(sImageLogo, UriKind.Absolute)),
|
|
.Width = 245,
|
|
.Height = 40,
|
|
.Stretch = Stretch.Uniform
|
|
}
|
|
|
|
Dim container As New BlockUIContainer(logo)
|
|
flowDoc.Blocks.Add(container)
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' Stile PDF
|
|
|
|
Private Function ConvertColumnToMessage(colName As String) As String
|
|
Select Case colName
|
|
Case COL_PDN
|
|
Return Statistic_Messages.PDN_Msg
|
|
Case COL_W
|
|
Return Statistic_Messages.W_Msg
|
|
Case COL_H
|
|
Return Statistic_Messages.H_Msg
|
|
Case COL_L
|
|
Return Statistic_Messages.L_Msg
|
|
Case COL_DESC
|
|
Return Statistic_Messages.NAM_Msg
|
|
Case COL_NAME
|
|
Return Statistic_Messages.NAM_Msg
|
|
Case COL_MATERIAL
|
|
Return Statistic_Messages.MAT_Msg
|
|
Case COL_CNT
|
|
Return Statistic_Messages.CNT_Msg
|
|
Case COL_ADDED
|
|
Return Statistic_Messages.ADDED_Msg
|
|
Case COL_DONE
|
|
Return Statistic_Messages.DONE_Msg
|
|
Case COL_USAGE
|
|
Return Statistic_Messages.Used_Msg
|
|
Case COL_WASTE
|
|
Return Statistic_Messages.Waste_Msg
|
|
Case COL_UNITVOLUME
|
|
Return Statistic_Messages.UNIT_VOLUME_Msg
|
|
Case COL_TOTVOLUME
|
|
Return Statistic_Messages.TOT_VOLUME_Msg
|
|
Case COL_UNITTIME
|
|
Return Statistic_Messages.UNIT_TIME_Msg
|
|
Case COL_TOTTIME
|
|
Return Statistic_Messages.TOT_TIME_Msg
|
|
Case COL_QTY
|
|
Return Statistic_Messages.QTY_Msg
|
|
Case COL_INPROD
|
|
Return Statistic_Messages.INPROD_Msg
|
|
Case Else
|
|
Return Nothing
|
|
End Select
|
|
End Function
|
|
|
|
#End Region ' Methods
|
|
|
|
End Module
|
|
|
|
Public Class PartItem
|
|
Public Property Name As String
|
|
Public Property Material As String
|
|
Public Property W As Double
|
|
Public Property H As Double
|
|
Public Property L As Double
|
|
Public Property Qty As Integer
|
|
End Class |