Files
egtbeamwall/EgtBEAMWALL.Optimizer/Statistics/PDFFlowHelper.vb
T
Demetrio Cassarino b87d27230c Optmizer 2.7.11.13
-piccole modifiche
2025-12-04 08:43:09 +01:00

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