1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.ole.module.purap.pdf;
17
18 import com.lowagie.text.*;
19 import com.lowagie.text.pdf.BaseFont;
20 import com.lowagie.text.pdf.PdfPCell;
21 import com.lowagie.text.pdf.PdfPTable;
22 import com.lowagie.text.pdf.PdfWriter;
23 import org.apache.commons.lang.StringUtils;
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26 import org.kuali.ole.module.purap.document.BulkReceivingDocument;
27 import org.kuali.ole.sys.OLEConstants;
28
29 import java.io.ByteArrayOutputStream;
30
31
32
33
34 public class BulkReceivingPdf extends PurapPdf {
35
36 private static Log LOG = LogFactory.getLog(BulkReceivingPdf.class);
37 private BulkReceivingDocument blkRecDoc;
38
39 public BulkReceivingPdf() {
40 super();
41 }
42
43
44
45
46
47
48
49
50
51 public void onOpenDocument(PdfWriter writer, Document document) {
52 try {
53
54 loadHeaderTable();
55
56
57 tpl = writer.getDirectContent().createTemplate(100, 100);
58
59
60 helv = BaseFont.createFont("Helvetica", BaseFont.WINANSI, false);
61
62 } catch (Exception e) {
63 throw new ExceptionConverter(e);
64 }
65 }
66
67 private void loadHeaderTable()
68 throws Exception {
69
70 float[] headerWidths = {0.20f, 0.80f};
71
72 headerTable = new PdfPTable(headerWidths);
73 headerTable.setWidthPercentage(100);
74 headerTable.setHorizontalAlignment(Element.ALIGN_CENTER);
75 headerTable.setSplitLate(false);
76 headerTable.getDefaultCell().setBorderWidth(0);
77 headerTable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
78 headerTable.getDefaultCell().setVerticalAlignment(Element.ALIGN_CENTER);
79
80
81
82
83 if (StringUtils.isNotBlank(logoImage)) {
84 logo = Image.getInstance(logoImage);
85 logo.scalePercent(3, 3);
86 headerTable.addCell(new Phrase(new Chunk(logo, 0, 0)));
87 } else {
88 headerTable.addCell(new Phrase(new Chunk("")));
89 }
90
91
92
93
94 float[] nestedHeaderWidths = {0.70f, 0.30f};
95 nestedHeaderTable = new PdfPTable(nestedHeaderWidths);
96 nestedHeaderTable.setSplitLate(false);
97 PdfPCell cell;
98
99
100
101
102 cell = new PdfPCell(new Paragraph("RECEIVING TICKET", ver_15_normal));
103 cell.setHorizontalAlignment(Element.ALIGN_CENTER);
104 cell.setBorderWidth(0);
105 nestedHeaderTable.addCell(cell);
106
107
108
109
110 Paragraph p = new Paragraph();
111 p.add(new Chunk("Doc Number: ", ver_11_normal));
112 p.add(new Chunk(blkRecDoc.getDocumentNumber().toString(), cour_10_normal));
113 cell = new PdfPCell(p);
114 cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
115 cell.setBorderWidth(0);
116 nestedHeaderTable.addCell(cell);
117
118
119 cell = new PdfPCell(nestedHeaderTable);
120 cell.setHorizontalAlignment(Element.ALIGN_CENTER);
121 cell.setBorderWidth(0);
122 headerTable.addCell(cell);
123 }
124
125
126
127
128
129
130 public BulkReceivingPdf getPageEvents() {
131 LOG.debug("getPageEvents() started.");
132 return new BulkReceivingPdf();
133 }
134
135
136
137
138
139
140
141 public void generatePdf(BulkReceivingDocument blkRecDoc,
142 ByteArrayOutputStream byteStream,
143 String logoImage,
144 String environment) {
145
146 if (LOG.isDebugEnabled()) {
147 LOG.debug("generatePdf() started for bulk receiving - " + blkRecDoc.getDocumentNumber());
148 }
149
150 Document document = null;
151
152 try {
153
154 document = this.getDocument(9, 9, 70, 36);
155 PdfWriter writer = PdfWriter.getInstance(document, byteStream);
156
157
158 this.logoImage = logoImage;
159 this.blkRecDoc = blkRecDoc;
160 this.environment = environment;
161
162
163 BulkReceivingPdf events = new BulkReceivingPdf().getPageEvents();
164 writer.setPageEvent(this);
165
166 document.open();
167
168 document.add(createVendorAndDeliveryDetailsTable());
169 document.add(new Paragraph("\nAdditional Details\n ", ver_8_bold));
170 document.add(createAdditionalDetailsTable());
171
172 document.close();
173
174 } catch (Exception de) {
175 throw new RuntimeException("Document Exception when trying to save a Bulk Receiving PDF", de);
176 } finally {
177 if (document != null && document.isOpen()) {
178 document.close();
179 }
180 }
181 if (LOG.isDebugEnabled()) {
182 LOG.debug("generatePdf() completed for bulk receiving - " + blkRecDoc.getDocumentNumber());
183 }
184 }
185
186 private PdfPTable createVendorAndDeliveryDetailsTable() {
187
188 PdfPCell cell;
189 Paragraph p = new Paragraph();
190
191 float[] infoWidths = {0.50f, 0.50f};
192 PdfPTable infoTable = new PdfPTable(infoWidths);
193
194 infoTable.setWidthPercentage(100);
195 infoTable.setHorizontalAlignment(Element.ALIGN_CENTER);
196 infoTable.setSplitLate(false);
197
198 infoTable.addCell(getPDFCell("Vendor", getFormattedVendorAddress()));
199 infoTable.addCell(getPDFCell("Delivery", getFormattedDeliveryAddress()));
200 infoTable.addCell(getPDFCell("Reference Number\n", blkRecDoc.getShipmentReferenceNumber()));
201
202 if (blkRecDoc.getCarrier() != null) {
203 infoTable.addCell(getPDFCell("Carrier\n", blkRecDoc.getCarrier().getCarrierDescription()));
204 } else {
205 infoTable.addCell(getPDFCell("Carrier\n", StringUtils.EMPTY));
206 }
207
208 infoTable.addCell(getPDFCell("Tracking/Pro Number\n", blkRecDoc.getTrackingNumber()));
209
210 if (blkRecDoc.getPurchaseOrderIdentifier() != null) {
211 infoTable.addCell(getPDFCell("PO\n", blkRecDoc.getPurchaseOrderIdentifier().toString()));
212 } else {
213 infoTable.addCell(getPDFCell("PO\n", StringUtils.EMPTY));
214 }
215
216 infoTable.addCell(getPDFCell("# of Pieces\n", "" + blkRecDoc.getNoOfCartons()));
217 infoTable.addCell(getPDFCell("Shipment Received Date\n", blkRecDoc.getShipmentReceivedDate().toString()));
218
219 if (blkRecDoc.getShipmentWeight() != null) {
220 infoTable.addCell(getPDFCell("Weight\n", blkRecDoc.getShipmentWeight().toString()));
221 } else {
222 infoTable.addCell(getPDFCell("Weight\n", StringUtils.EMPTY));
223 }
224
225 infoTable.addCell(getPDFCell("\n", StringUtils.EMPTY));
226
227 return infoTable;
228 }
229
230 private PdfPCell getPDFCell(String fieldTitle,
231 String fieldValue) {
232
233 Paragraph p = new Paragraph();
234 p.add(new Chunk(" " + fieldTitle, ver_5_normal));
235
236 if (StringUtils.isNotEmpty(fieldValue)) {
237 p.add(new Chunk(" " + fieldValue, cour_10_normal));
238 } else {
239 p.add(new Chunk(" "));
240 }
241
242 PdfPCell cell = new PdfPCell(p);
243 cell.setHorizontalAlignment(Element.ALIGN_LEFT);
244
245 return cell;
246 }
247
248 private String getFormattedVendorAddress() {
249
250 StringBuffer vendorInfo = new StringBuffer();
251 vendorInfo.append("\n");
252
253
254
255
256 if (blkRecDoc.getGoodsDeliveredVendorNumber() == null ||
257 blkRecDoc.getGoodsDeliveredVendorNumber().equals(blkRecDoc.getVendorNumber())) {
258
259 if (StringUtils.isNotBlank(blkRecDoc.getVendorName())) {
260 vendorInfo.append(" " + blkRecDoc.getVendorName() + "\n");
261 }
262
263 if (StringUtils.isNotBlank(blkRecDoc.getVendorLine1Address())) {
264 vendorInfo.append(" " + blkRecDoc.getVendorLine1Address() + "\n");
265 }
266
267 if (StringUtils.isNotBlank(blkRecDoc.getVendorLine2Address())) {
268 vendorInfo.append(" " + blkRecDoc.getVendorLine2Address() + "\n");
269 }
270
271 if (StringUtils.isNotBlank(blkRecDoc.getVendorCityName())) {
272 vendorInfo.append(" " + blkRecDoc.getVendorCityName());
273 }
274
275 if (StringUtils.isNotBlank(blkRecDoc.getVendorStateCode())) {
276 vendorInfo.append(", " + blkRecDoc.getVendorStateCode());
277 }
278
279 if (StringUtils.isNotBlank(blkRecDoc.getVendorAddressInternationalProvinceName())) {
280 vendorInfo.append(", " + blkRecDoc.getVendorAddressInternationalProvinceName());
281 }
282
283 if (StringUtils.isNotBlank(blkRecDoc.getVendorPostalCode())) {
284 vendorInfo.append(" " + blkRecDoc.getVendorPostalCode() + "\n");
285 } else {
286 vendorInfo.append("\n");
287 }
288
289 if (!OLEConstants.COUNTRY_CODE_UNITED_STATES.equalsIgnoreCase(blkRecDoc.getVendorCountryCode()) && blkRecDoc.getVendorCountry() != null) {
290 vendorInfo.append(" " + blkRecDoc.getVendorCountry().getName() + "\n\n");
291 } else {
292 vendorInfo.append("\n\n");
293 }
294
295 } else {
296
297 if (StringUtils.isNotBlank(blkRecDoc.getAlternateVendorDetail().getVendorName())) {
298 vendorInfo.append(" " + blkRecDoc.getAlternateVendorDetail().getVendorName() + "\n");
299 }
300
301 if (StringUtils.isNotBlank(blkRecDoc.getAlternateVendorDetail().getDefaultAddressLine1())) {
302 vendorInfo.append(" " + blkRecDoc.getAlternateVendorDetail().getDefaultAddressLine1() + "\n");
303 }
304
305 if (StringUtils.isNotBlank(blkRecDoc.getAlternateVendorDetail().getDefaultAddressLine2())) {
306 vendorInfo.append(" " + blkRecDoc.getAlternateVendorDetail().getDefaultAddressLine2() + "\n");
307 }
308
309 if (StringUtils.isNotBlank(blkRecDoc.getAlternateVendorDetail().getDefaultAddressCity())) {
310 vendorInfo.append(" " + blkRecDoc.getAlternateVendorDetail().getDefaultAddressCity());
311 }
312
313 if (StringUtils.isNotBlank(blkRecDoc.getAlternateVendorDetail().getDefaultAddressStateCode())) {
314 vendorInfo.append(", " + blkRecDoc.getAlternateVendorDetail().getDefaultAddressStateCode());
315 }
316
317 if (StringUtils.isNotBlank(blkRecDoc.getAlternateVendorDetail().getDefaultAddressInternationalProvince())) {
318 vendorInfo.append(", " + blkRecDoc.getAlternateVendorDetail().getDefaultAddressInternationalProvince());
319 }
320
321 if (StringUtils.isNotBlank(blkRecDoc.getAlternateVendorDetail().getDefaultAddressPostalCode())) {
322 vendorInfo.append(" " + blkRecDoc.getAlternateVendorDetail().getDefaultAddressPostalCode() + "\n");
323 } else {
324 vendorInfo.append("\n");
325 }
326
327 if (!OLEConstants.COUNTRY_CODE_UNITED_STATES.equalsIgnoreCase(blkRecDoc.getAlternateVendorDetail().getDefaultAddressCountryCode()) && blkRecDoc.getAlternateVendorDetail().getDefaultAddressCountryCode() != null) {
328 vendorInfo.append(" " + blkRecDoc.getAlternateVendorDetail().getDefaultAddressCountryCode() + "\n\n");
329 } else {
330 vendorInfo.append("\n\n");
331 }
332 }
333
334 return vendorInfo.toString();
335 }
336
337 private String getFormattedDeliveryAddress() {
338
339 StringBuffer shipToInfo = new StringBuffer();
340
341 shipToInfo.append("\n");
342
343 if (StringUtils.isNotBlank(blkRecDoc.getDeliveryToName())) {
344 shipToInfo.append(" " + StringUtils.defaultString(blkRecDoc.getDeliveryToName()) + "\n");
345 }
346
347 String deliveryBuildingName = blkRecDoc.getDeliveryBuildingName();
348
349 if (StringUtils.isNotBlank(blkRecDoc.getDeliveryBuildingRoomNumber())) {
350 if (StringUtils.isBlank(deliveryBuildingName)) {
351 shipToInfo.append(" Room #" + blkRecDoc.getDeliveryBuildingRoomNumber() + "\n");
352 } else {
353 shipToInfo.append(" " + deliveryBuildingName + " Room #" + blkRecDoc.getDeliveryBuildingRoomNumber() + "\n");
354 }
355 } else {
356 if (StringUtils.isNotBlank(deliveryBuildingName)) {
357 shipToInfo.append(" " + deliveryBuildingName + "\n");
358 }
359 }
360
361 shipToInfo.append(" " + blkRecDoc.getDeliveryBuildingLine1Address() + "\n");
362
363 if (StringUtils.isNotBlank(blkRecDoc.getDeliveryBuildingLine2Address())) {
364 shipToInfo.append(" " + blkRecDoc.getDeliveryBuildingLine2Address() + "\n");
365 }
366
367 shipToInfo.append(" " + blkRecDoc.getDeliveryCityName() + ", " +
368 blkRecDoc.getDeliveryStateCode() + " " +
369 blkRecDoc.getDeliveryPostalCode() + "\n\n");
370
371 return shipToInfo.toString();
372 }
373
374 private PdfPTable createAdditionalDetailsTable() {
375
376 float[] additionalInfoWidths = {0.25f, 0.75f};
377 PdfPTable additionalInfoTable = new PdfPTable(additionalInfoWidths);
378 additionalInfoTable.setWidthPercentage(100);
379 additionalInfoTable.setSplitLate(false);
380
381 Paragraph p = new Paragraph();
382 PdfPCell cell;
383
384
385
386
387 p.add(new Chunk(" Notes to Vendor ", ver_5_normal));
388 cell = new PdfPCell(p);
389 cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
390 additionalInfoTable.addCell(cell);
391
392 p = new Paragraph();
393 p.add(new Chunk(" " + StringUtils.defaultString(blkRecDoc.getVendorNoteText()), cour_10_normal));
394
395 cell = new PdfPCell(p);
396 cell.setHorizontalAlignment(Element.ALIGN_LEFT);
397 additionalInfoTable.addCell(cell);
398
399
400
401
402 p = new Paragraph();
403 p.add(new Chunk(" Delivery instructions ", ver_5_normal));
404 cell = new PdfPCell(p);
405 cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
406 additionalInfoTable.addCell(cell);
407
408 p = new Paragraph();
409 p.add(new Chunk(" " + StringUtils.defaultString(blkRecDoc.getDeliveryInstructionText()), cour_10_normal));
410
411 cell = new PdfPCell(p);
412 cell.setHorizontalAlignment(Element.ALIGN_LEFT);
413 additionalInfoTable.addCell(cell);
414
415
416
417
418 p = new Paragraph();
419 p.add(new Chunk(" Additional Delivery instructions ", ver_5_normal));
420 cell = new PdfPCell(p);
421 cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
422 additionalInfoTable.addCell(cell);
423
424 p = new Paragraph();
425 p.add(new Chunk(" " + StringUtils.defaultString(blkRecDoc.getDeliveryAdditionalInstructionText()), cour_10_normal));
426
427 cell = new PdfPCell(p);
428 cell.setHorizontalAlignment(Element.ALIGN_LEFT);
429 additionalInfoTable.addCell(cell);
430
431 updateRequestorInfo(blkRecDoc, additionalInfoTable);
432
433 String campusCode = blkRecDoc.getDeliveryCampusCode();
434
435
436
437
438 p = new Paragraph();
439 p.add(new Chunk(" Contact Name ", ver_5_normal));
440 cell = new PdfPCell(p);
441 cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
442 additionalInfoTable.addCell(cell);
443
444 p = new Paragraph();
445 p.add(new Chunk(" " + StringUtils.defaultString(blkRecDoc.getInstitutionContactName()), cour_10_normal));
446
447 cell = new PdfPCell(p);
448 cell.setHorizontalAlignment(Element.ALIGN_LEFT);
449 additionalInfoTable.addCell(cell);
450
451
452
453
454 p = new Paragraph();
455 p.add(new Chunk(" Contact Phone ", ver_5_normal));
456 cell = new PdfPCell(p);
457 cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
458 additionalInfoTable.addCell(cell);
459
460 p = new Paragraph();
461 p.add(new Chunk(" " + StringUtils.defaultString(blkRecDoc.getInstitutionContactPhoneNumber()), cour_10_normal));
462
463 cell = new PdfPCell(p);
464 cell.setHorizontalAlignment(Element.ALIGN_LEFT);
465 additionalInfoTable.addCell(cell);
466
467
468
469
470 p = new Paragraph();
471 p.add(new Chunk(" Contact Email ", ver_5_normal));
472 cell = new PdfPCell(p);
473 cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
474 additionalInfoTable.addCell(cell);
475
476 p = new Paragraph();
477 p.add(new Chunk(" " + StringUtils.defaultString(blkRecDoc.getInstitutionContactEmailAddress()), cour_10_normal));
478
479 cell = new PdfPCell(p);
480 cell.setHorizontalAlignment(Element.ALIGN_LEFT);
481 additionalInfoTable.addCell(cell);
482
483
484
485
486
487 p = new Paragraph();
488 p.add(new Chunk(" " + " Signature ", ver_5_normal));
489 cell = new PdfPCell(p);
490 cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
491 additionalInfoTable.addCell(cell);
492
493 p = new Paragraph();
494 p.add(new Chunk("\n\n\n\n"));
495
496 cell = new PdfPCell(p);
497 cell.setHorizontalAlignment(Element.ALIGN_LEFT);
498 additionalInfoTable.addCell(cell);
499
500
501
502
503 p = new Paragraph();
504 p.add(new Chunk(" " + " Date ", ver_5_normal));
505 cell = new PdfPCell(p);
506 cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
507 additionalInfoTable.addCell(cell);
508
509 p = new Paragraph();
510 p.add(new Chunk("\n\n\n\n"));
511
512 cell = new PdfPCell(p);
513 cell.setHorizontalAlignment(Element.ALIGN_LEFT);
514 additionalInfoTable.addCell(cell);
515
516 return additionalInfoTable;
517 }
518
519 private void updateRequestorInfo(BulkReceivingDocument blkRecDoc,
520 PdfPTable additionalInfoTable) {
521
522
523
524 Paragraph p = new Paragraph();
525 p.add(new Chunk(" Requestor Name ", ver_5_normal));
526 PdfPCell cell = new PdfPCell(p);
527 cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
528 additionalInfoTable.addCell(cell);
529
530 p = new Paragraph();
531 p.add(new Chunk(" " + StringUtils.defaultString(blkRecDoc.getRequestorPersonName()), cour_10_normal));
532
533 cell = new PdfPCell(p);
534 cell.setHorizontalAlignment(Element.ALIGN_LEFT);
535 additionalInfoTable.addCell(cell);
536
537
538
539
540 p = new Paragraph();
541 p.add(new Chunk(" Requestor Phone ", ver_5_normal));
542 cell = new PdfPCell(p);
543 cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
544 additionalInfoTable.addCell(cell);
545
546 p = new Paragraph();
547 p.add(new Chunk(" " + StringUtils.defaultString(blkRecDoc.getRequestorPersonPhoneNumber()), cour_10_normal));
548
549 cell = new PdfPCell(p);
550 cell.setHorizontalAlignment(Element.ALIGN_LEFT);
551 additionalInfoTable.addCell(cell);
552
553
554
555
556 p = new Paragraph();
557 p.add(new Chunk(" Requestor Email ", ver_5_normal));
558 cell = new PdfPCell(p);
559 cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
560 additionalInfoTable.addCell(cell);
561
562 p = new Paragraph();
563 p.add(new Chunk(" " + StringUtils.defaultString(blkRecDoc.getRequestorPersonEmailAddress()), cour_10_normal));
564 cell = new PdfPCell(p);
565 cell.setHorizontalAlignment(Element.ALIGN_LEFT);
566 additionalInfoTable.addCell(cell);
567 }
568 }