8
8
namespace Magento \Bundle \Model \Sales \Order \Pdf \Items ;
9
9
10
10
use Magento \Framework \Data \Collection \AbstractDb ;
11
+ use Magento \Framework \DataObject ;
11
12
use Magento \Framework \Filesystem ;
12
13
use Magento \Framework \Filter \FilterManager ;
13
14
use Magento \Framework \Model \Context ;
@@ -69,50 +70,52 @@ public function __construct(
69
70
}
70
71
71
72
/**
72
- * Draw item line
73
+ * Draw bundle product item line
73
74
*
74
75
* @return void
75
- * @SuppressWarnings(PHPMD.CyclomaticComplexity)
76
- * @SuppressWarnings(PHPMD.NPathComplexity)
77
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
78
76
*/
79
77
public function draw ()
80
78
{
81
- $ order = $ this ->getOrder ();
82
- $ item = $ this ->getItem ();
83
- $ pdf = $ this ->getPdf ();
84
- $ page = $ this ->getPage ();
79
+ $ draw = $ this ->drawChildrenItems ();
80
+ $ draw = $ this ->drawCustomOptions ($ draw );
85
81
82
+ $ page = $ this ->getPdf ()->drawLineBlocks ($ this ->getPage (), $ draw , ['table_header ' => true ]);
83
+
84
+ $ this ->setPage ($ page );
85
+ }
86
+
87
+ /**
88
+ * Draw bundle product children items
89
+ *
90
+ * @return array
91
+ */
92
+ private function drawChildrenItems (): array
93
+ {
86
94
$ this ->_setFontRegular ();
87
- $ items = $ this ->getChildren ($ item );
88
95
89
96
$ prevOptionId = '' ;
90
97
$ drawItems = [];
91
-
92
- foreach ( $ items as $ childItem ) {
93
- $ line = [];
94
-
98
+ $ optionId = 0 ;
99
+ $ lines = [];
100
+ foreach ( $ this -> getChildren ( $ this -> getItem ()) as $ childItem ) {
101
+ $ index = array_key_last ( $ lines ) !== null ? array_key_last ( $ lines ) + 1 : 0 ;
95
102
$ attributes = $ this ->getSelectionAttributes ($ childItem );
96
103
if (is_array ($ attributes )) {
97
104
$ optionId = $ attributes ['option_id ' ];
98
- } else {
99
- $ optionId = 0 ;
100
105
}
101
106
102
107
if (!isset ($ drawItems [$ optionId ])) {
103
108
$ drawItems [$ optionId ] = ['lines ' => [], 'height ' => 15 ];
104
109
}
105
110
106
111
if ($ childItem ->getOrderItem ()->getParentItem () && $ prevOptionId != $ attributes ['option_id ' ]) {
107
- $ line [ 0 ] = [
112
+ $ lines [ $ index ][ ] = [
108
113
'font ' => 'italic ' ,
109
114
'text ' => $ this ->string ->split ($ attributes ['option_label ' ], 45 , true , true ),
110
115
'feed ' => 35 ,
111
116
];
112
117
113
- $ drawItems [$ optionId ] = ['lines ' => [$ line ], 'height ' => 15 ];
114
-
115
- $ line = [];
118
+ $ index ++;
116
119
$ prevOptionId = $ attributes ['option_id ' ];
117
120
}
118
121
@@ -124,35 +127,97 @@ public function draw()
124
127
$ feed = 35 ;
125
128
$ name = $ childItem ->getName ();
126
129
}
127
- $ line [] = ['text ' => $ this ->string ->split ($ name , 35 , true , true ), 'feed ' => $ feed ];
130
+ $ lines [ $ index ] [] = ['text ' => $ this ->string ->split ($ name , 35 , true , true ), 'feed ' => $ feed ];
128
131
129
- // draw SKUs
130
- if (!$ childItem ->getOrderItem ()->getParentItem ()) {
131
- $ text = [];
132
- foreach ($ this ->string ->split ($ item ->getSku (), 17 ) as $ part ) {
133
- $ text [] = $ part ;
134
- }
135
- $ line [] = ['text ' => $ text , 'feed ' => 255 ];
136
- }
132
+ $ lines = $ this ->drawSkus ($ childItem , $ lines );
137
133
138
- // draw prices
139
- if ($ this ->canShowPriceInfo ($ childItem )) {
140
- $ price = $ order ->formatPriceTxt ($ childItem ->getPrice ());
141
- $ line [] = ['text ' => $ price , 'feed ' => 395 , 'font ' => 'bold ' , 'align ' => 'right ' ];
142
- $ line [] = ['text ' => $ childItem ->getQty () * 1 , 'feed ' => 435 , 'font ' => 'bold ' ];
134
+ $ lines = $ this ->drawPrices ($ childItem , $ lines );
135
+ }
136
+ $ drawItems [$ optionId ]['lines ' ] = $ lines ;
143
137
144
- $ tax = $ order -> formatPriceTxt ( $ childItem -> getTaxAmount ()) ;
145
- $ line [] = [ ' text ' => $ tax , ' feed ' => 495 , ' font ' => ' bold ' , ' align ' => ' right ' ];
138
+ return $ drawItems ;
139
+ }
146
140
147
- $ row_total = $ order ->formatPriceTxt ($ childItem ->getRowTotal ());
148
- $ line [] = ['text ' => $ row_total , 'feed ' => 565 , 'font ' => 'bold ' , 'align ' => 'right ' ];
141
+ /**
142
+ * Draw sku parts
143
+ *
144
+ * @param DataObject $childItem
145
+ * @param array $lines
146
+ * @return array
147
+ */
148
+ private function drawSkus (DataObject $ childItem , array $ lines ): array
149
+ {
150
+ $ index = array_key_last ($ lines );
151
+ if (!$ childItem ->getOrderItem ()->getParentItem ()) {
152
+ $ text = [];
153
+ foreach ($ this ->string ->split ($ this ->getItem ()->getSku (), 17 ) as $ part ) {
154
+ $ text [] = $ part ;
149
155
}
156
+ $ lines [$ index ][] = ['text ' => $ text , 'feed ' => 255 ];
157
+ }
158
+
159
+ return $ lines ;
160
+ }
150
161
151
- $ drawItems [$ optionId ]['lines ' ][] = $ line ;
162
+ /**
163
+ * Draw prices for bundle product children items
164
+ *
165
+ * @param DataObject $childItem
166
+ * @param array $lines
167
+ * @return array
168
+ */
169
+ private function drawPrices (DataObject $ childItem , array $ lines ): array
170
+ {
171
+ $ index = array_key_last ($ lines );
172
+ if ($ this ->canShowPriceInfo ($ childItem )) {
173
+ $ lines [$ index ][] = ['text ' => $ childItem ->getQty () * 1 , 'feed ' => 435 , 'align ' => 'right ' ];
174
+
175
+ $ tax = $ this ->getOrder ()->formatPriceTxt ($ childItem ->getTaxAmount ());
176
+ $ lines [$ index ][] = ['text ' => $ tax , 'feed ' => 495 , 'font ' => 'bold ' , 'align ' => 'right ' ];
177
+
178
+ $ item = $ this ->getItem ();
179
+ $ this ->_item = $ childItem ;
180
+ $ feedPrice = 380 ;
181
+ $ feedSubtotal = $ feedPrice + 185 ;
182
+ foreach ($ this ->getItemPricesForDisplay () as $ priceData ) {
183
+ if (isset ($ priceData ['label ' ])) {
184
+ // draw Price label
185
+ $ lines [$ index ][] = ['text ' => $ priceData ['label ' ], 'feed ' => $ feedPrice , 'align ' => 'right ' ];
186
+ // draw Subtotal label
187
+ $ lines [$ index ][] = ['text ' => $ priceData ['label ' ], 'feed ' => $ feedSubtotal , 'align ' => 'right ' ];
188
+ $ index ++;
189
+ }
190
+ // draw Price
191
+ $ lines [$ index ][] = [
192
+ 'text ' => $ priceData ['price ' ],
193
+ 'feed ' => $ feedPrice ,
194
+ 'font ' => 'bold ' ,
195
+ 'align ' => 'right ' ,
196
+ ];
197
+ // draw Subtotal
198
+ $ lines [$ index ][] = [
199
+ 'text ' => $ priceData ['subtotal ' ],
200
+ 'feed ' => $ feedSubtotal ,
201
+ 'font ' => 'bold ' ,
202
+ 'align ' => 'right ' ,
203
+ ];
204
+ $ index ++;
205
+ }
206
+ $ this ->_item = $ item ;
152
207
}
153
208
154
- // custom options
155
- $ options = $ item ->getOrderItem ()->getProductOptions ();
209
+ return $ lines ;
210
+ }
211
+
212
+ /**
213
+ * Draw bundle product custom options
214
+ *
215
+ * @param array $draw
216
+ * @return array
217
+ */
218
+ private function drawCustomOptions (array $ draw ): array
219
+ {
220
+ $ options = $ this ->getItem ()->getOrderItem ()->getProductOptions ();
156
221
if ($ options && isset ($ options ['options ' ])) {
157
222
foreach ($ options ['options ' ] as $ option ) {
158
223
$ lines = [];
@@ -180,12 +245,10 @@ public function draw()
180
245
$ lines [][] = ['text ' => $ text , 'feed ' => 40 ];
181
246
}
182
247
183
- $ drawItems [] = ['lines ' => $ lines , 'height ' => 15 ];
248
+ $ draw [] = ['lines ' => $ lines , 'height ' => 15 ];
184
249
}
185
250
}
186
251
187
- $ page = $ pdf ->drawLineBlocks ($ page , $ drawItems , ['table_header ' => true ]);
188
-
189
- $ this ->setPage ($ page );
252
+ return $ draw ;
190
253
}
191
254
}
0 commit comments