Subversion Repositories SmartDukaan

Rev

Rev 23568 | Rev 24215 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
21686 ashik.ali 1
package com.spice.profitmandi.common.util;
2
 
3
import java.io.OutputStream;
23001 amit.gupta 4
import java.util.List;
21915 ashik.ali 5
import java.util.Locale;
21686 ashik.ali 6
import java.util.Set;
7
 
23568 govind 8
import org.apache.logging.log4j.Logger;
9
import org.apache.logging.log4j.LogManager;
22068 ashik.ali 10
import org.springframework.util.StringUtils;
21686 ashik.ali 11
 
21915 ashik.ali 12
import com.ibm.icu.text.RuleBasedNumberFormat;
21686 ashik.ali 13
import com.itextpdf.text.Chunk;
14
import com.itextpdf.text.Document;
15
import com.itextpdf.text.DocumentException;
16
import com.itextpdf.text.Element;
17
import com.itextpdf.text.Font;
18
import com.itextpdf.text.Paragraph;
19
import com.itextpdf.text.Rectangle;
20
import com.itextpdf.text.pdf.PdfPCell;
21
import com.itextpdf.text.pdf.PdfPTable;
22
import com.itextpdf.text.pdf.PdfWriter;
23654 amit.gupta 23
import com.spice.profitmandi.common.model.CreditNotePdfModel;
21686 ashik.ali 24
import com.spice.profitmandi.common.model.CustomCustomer;
23001 amit.gupta 25
import com.spice.profitmandi.common.model.CustomInsurancePolicy;
22858 ashik.ali 26
import com.spice.profitmandi.common.model.CustomOrderItem;
23558 amit.gupta 27
import com.spice.profitmandi.common.model.CustomPaymentOption;
21686 ashik.ali 28
import com.spice.profitmandi.common.model.CustomRetailer;
23509 amit.gupta 29
import com.spice.profitmandi.common.model.DebitNotePdfModel;
21686 ashik.ali 30
import com.spice.profitmandi.common.model.PdfModel;
31
 
32
public class PdfUtils {
23509 amit.gupta 33
 
34
	private static final Font FONT_TITLE = new Font(Font.FontFamily.HELVETICA, 18, Font.BOLD);
21965 ashik.ali 35
	private static Font FONT_NORMAL = new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.NORMAL);
36
	private static Font FONT_BOLD = new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.BOLD);
23509 amit.gupta 37
	// private static Font fontTableHeader = new
38
	// Font(Font.FontFamily.TIMES_ROMAN, 14, Font.BOLD);
23374 amit.gupta 39
	private static final String INVOICE_TITLE = "TAX INVOICE";
23532 amit.gupta 40
	private static final String DEBIT_NOTE_TITLE = "DEBIT NOTE";
23509 amit.gupta 41
 
23654 amit.gupta 42
	private static float[] igstWidthsWithDiscount = new float[] { .3f, 2.6f, 0.7f, .4f, 0.7f, 0.5f, .7f, .6f, 0.6f,
43
			0.9f };
23549 amit.gupta 44
	private static float[] stateWidthsWithDiscount = new float[] { .3f, 2.1f, 0.7f, .3f, 0.6f, 0.4f, .7f, .5f, .6f, .5f,
23509 amit.gupta 45
			.6f, .8f };
46
 
23542 amit.gupta 47
	private static float[] igstWidths = new float[] { .6f, 2.6f, 0.7f, .4f, 0.7f, .7f, .6f, 0.6f, 0.9f };
48
	private static float[] stateWidths = new float[] { .6f, 2.1f, 0.7f, .3f, 0.6f, .7f, .5f, .6f, .5f, .6f, .8f };
23533 amit.gupta 49
 
23654 amit.gupta 50
	private static float[] igstWidthsCrNote = new float[] { 2.6f, 0.7f, .4f, 0.7f, .7f, .6f, 0.6f, 0.9f };
51
	private static float[] stateWidthsCrNote = new float[] { 2.1f, 0.7f, .3f, 0.6f, .7f, .5f, .6f, .5f, .6f, .8f };
52
 
21915 ashik.ali 53
	private static final Locale indianLocale = Locale.getDefault();
23509 amit.gupta 54
 
23568 govind 55
	private static final Logger LOGGER = LogManager.getLogger(PdfUtils.class);
23509 amit.gupta 56
 
57
	public static void generateAndWrite(PdfModel pdfModel, OutputStream outputStream) {
21686 ashik.ali 58
		Document document = new Document();
21926 ashik.ali 59
		document.setMargins(0, 0, 25, 0);
23509 amit.gupta 60
		try {
61
			CustomCustomer customer = pdfModel.getCustomer();
62
			CustomRetailer retailer = pdfModel.getRetailer();
63
			boolean stateGst = false;
64
			String customerAddressStateCode = "", retailerAddressStateCode = "";
65
			if (customer.getAddress().getState().equals(retailer.getAddress().getState())) {
66
				stateGst = true;
67
				customerAddressStateCode = Utils.getStateCode(customer.getAddress().getState());
68
			} else {
69
				customerAddressStateCode = Utils.getStateCode(customer.getAddress().getState());
70
				retailerAddressStateCode = Utils.getStateCode(retailer.getAddress().getState());
71
			}
72
			Set<CustomOrderItem> orderItems = pdfModel.getOrderItems();
21686 ashik.ali 73
 
23509 amit.gupta 74
			PdfWriter.getInstance(document, outputStream);
22687 amit.gupta 75
 
23509 amit.gupta 76
			document.open();
77
			document.addTitle(pdfModel.getTitle());
78
			document.addAuthor(pdfModel.getAuther());
22889 amit.gupta 79
 
23509 amit.gupta 80
			Paragraph paragraphTitle = new Paragraph(INVOICE_TITLE, FONT_TITLE);
81
			paragraphTitle.setAlignment(Element.ALIGN_CENTER);
21686 ashik.ali 82
 
23509 amit.gupta 83
			PdfPCell blankCell = new PdfPCell();
84
			blankCell.setBorder(Rectangle.NO_BORDER);
85
			PdfPTable tableCustomerRetailer = new PdfPTable(3);
86
			tableCustomerRetailer.setWidthPercentage(90);
87
			tableCustomerRetailer.getDefaultCell().setBorder(Rectangle.NO_BORDER);
88
			PdfPCell columnCustomerInfo = new PdfPCell();
89
			columnCustomerInfo.addElement(new Paragraph("Customer Details", FONT_BOLD));
90
			columnCustomerInfo.addElement(new Paragraph(
91
					StringUtils.capitalize(customer.getFirstName() + " " + customer.getLastName()), FONT_NORMAL));
92
			columnCustomerInfo.addElement(new Paragraph(StringUtils.capitalize(customer.getAddress().getLine1()) + ", "
93
					+ StringUtils.capitalize(customer.getAddress().getLine2()), FONT_NORMAL));
94
			columnCustomerInfo.addElement(new Paragraph(StringUtils.capitalize(customer.getAddress().getCity()) + ", "
95
					+ StringUtils.capitalize(customer.getAddress().getState()) + "(" + customerAddressStateCode + ")"
96
					+ "\n" + customer.getAddress().getPinCode(), FONT_NORMAL));
97
			columnCustomerInfo.addElement(new Paragraph("Mobile - " + customer.getMobileNumber(), FONT_NORMAL));
98
			if (customer.getGstNumber() != null && !customer.getGstNumber().isEmpty()) {
99
				columnCustomerInfo.addElement(new Paragraph("GST Number - " + customer.getGstNumber(), FONT_NORMAL));
100
			}
101
			columnCustomerInfo.setBorder(Rectangle.NO_BORDER);
102
			PdfPCell columnRetailerInfo = new PdfPCell();
103
			columnRetailerInfo
104
					.addElement(new Paragraph(StringUtils.capitalize(retailer.getAddress().getName()), FONT_BOLD));
105
			columnRetailerInfo.addElement(new Paragraph(StringUtils.capitalize(retailer.getAddress().getLine1()) + ", "
106
					+ StringUtils.capitalize(retailer.getAddress().getLine2()) + ", "
107
					+ StringUtils.capitalize(retailer.getAddress().getCity()) + "-" + retailer.getAddress().getPinCode()
108
					+ ", " + retailer.getAddress().getState() + "("
109
					+ (stateGst ? customerAddressStateCode : retailerAddressStateCode) + ")", FONT_BOLD));
110
			columnRetailerInfo
111
					.addElement(new Paragraph("Contact No.- " + retailer.getAddress().getPhoneNumber(), FONT_BOLD));
112
			columnRetailerInfo.addElement(new Paragraph("GST NO. " + retailer.getGstNumber(), FONT_BOLD));
113
			columnRetailerInfo.setBorder(Rectangle.NO_BORDER);
114
 
115
			PdfPTable tableInvoiceDateRetailer = new PdfPTable(1);
116
			tableInvoiceDateRetailer.getDefaultCell().setBorder(Rectangle.NO_BORDER);
117
 
118
			PdfPTable tableInvoiceDate = new PdfPTable(2);
119
			tableInvoiceDate.getDefaultCell().setBorder(Rectangle.NO_BORDER);
120
 
121
			PdfPCell invoiceNumberKey = new PdfPCell(new Paragraph("Invoice No:", FONT_NORMAL));
122
			invoiceNumberKey.setBorder(Rectangle.NO_BORDER);
123
 
124
			PdfPCell invoiceNumberValue = new PdfPCell(new Paragraph(pdfModel.getInvoiceNumber(), FONT_NORMAL));
125
			invoiceNumberValue.setBorder(Rectangle.NO_BORDER);
126
 
127
			PdfPCell dateKey = new PdfPCell(new Paragraph("Date:", FONT_NORMAL));
128
			dateKey.setBorder(Rectangle.NO_BORDER);
129
 
130
			PdfPCell dateValue = new PdfPCell(new Paragraph(pdfModel.getInvoiceDate(), FONT_NORMAL));
131
			dateValue.setBorder(Rectangle.NO_BORDER);
132
			tableInvoiceDate.addCell(invoiceNumberKey);
133
			// tableInvoiceDate.addCell(blankCell);
134
			tableInvoiceDate.addCell(invoiceNumberValue);
135
			tableInvoiceDate.addCell(dateKey);
136
			// tableInvoiceDate.addCell(blankCell);
137
			tableInvoiceDate.addCell(dateValue);
138
			tableInvoiceDateRetailer.addCell(tableInvoiceDate);
139
			tableInvoiceDateRetailer.addCell(columnRetailerInfo);
140
 
141
			tableCustomerRetailer.addCell(columnCustomerInfo);
142
			tableCustomerRetailer.addCell(blankCell);
143
			tableCustomerRetailer.addCell(tableInvoiceDateRetailer);
144
 
145
			PdfPTable orders = null;
146
			if (stateGst) {
147
				orders = new PdfPTable(stateWidthsWithDiscount.length);
148
				orders.setWidths(stateWidthsWithDiscount);
149
			} else {
150
				orders = new PdfPTable(igstWidthsWithDiscount.length);
151
				orders.setWidths(igstWidthsWithDiscount);
152
			}
153
			orders.setWidthPercentage(90);
154
			orders.addCell(new Paragraph("Sl", FONT_BOLD));
155
			orders.addCell(new Paragraph("Description", FONT_BOLD));
156
			orders.addCell(new Paragraph("HSN", FONT_BOLD));
157
			orders.addCell(new Paragraph("Qty", FONT_BOLD));
158
			orders.addCell(new Paragraph("Rate\n(Per pc)", FONT_BOLD));
159
			orders.addCell(new Paragraph("Disc.", FONT_BOLD));
160
			orders.addCell(new Paragraph("Total\nTaxable", FONT_BOLD));
161
			if (!stateGst) {
162
				orders.addCell(new Paragraph("IGST\n%", FONT_BOLD));
163
				orders.addCell(new Paragraph("IGST", FONT_BOLD));
164
				// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1});
165
				// total 8f
166
			} else {
167
				orders.addCell(new Paragraph("CGST %", FONT_BOLD));
168
				orders.addCell(new Paragraph("CGST", FONT_BOLD));
169
				orders.addCell(new Paragraph("SGST %", FONT_BOLD));
170
				orders.addCell(new Paragraph("SGST", FONT_BOLD));
171
				// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1, 1, 1});
172
				// total 8f
173
			}
174
			orders.addCell(new Paragraph("Total", FONT_BOLD));
175
 
176
			// orders.addCell(new Paragraph("Item Total (Rs)", FONT_BOLD));
177
 
178
			orders.setHeaderRows(1);
179
			// orders.setSkipFirstHeader(true);
180
 
181
			float igstTotalAmount = 0, cgstTotalAmount = 0, sgstTotalAmount = 0;
182
			int index = 1;
183
			for (CustomOrderItem orderItem : orderItems) {
184
				orders.addCell(new Paragraph(String.valueOf(index++), FONT_NORMAL));
185
				orders.addCell(new Paragraph(orderItem.getDescription(), FONT_NORMAL));
186
				orders.addCell(new Paragraph(orderItem.getHsnCode(), FONT_NORMAL));
187
				orders.addCell(new Paragraph(String.valueOf(orderItem.getQuantity()), FONT_NORMAL));
188
				orders.addCell(new Paragraph(String.format("%.2f", orderItem.getRate()), FONT_NORMAL));
189
				orders.addCell(new Paragraph(String.format("%.2f", orderItem.getDiscount()), FONT_NORMAL));
190
				orders.addCell(new Paragraph(String.format("%.2f", orderItem.getAmount()), FONT_NORMAL));
191
				if (!stateGst) {
192
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getIgstRate()), FONT_NORMAL));
193
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getIgstAmount()), FONT_NORMAL));
194
					igstTotalAmount = igstTotalAmount + orderItem.getIgstAmount();
195
				} else {
196
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getCgstRate()), FONT_NORMAL));
197
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getCgstAmount()), FONT_NORMAL));
198
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getSgstRate()), FONT_NORMAL));
199
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getSgstAmount()), FONT_NORMAL));
200
					cgstTotalAmount = cgstTotalAmount + orderItem.getCgstAmount();
201
					sgstTotalAmount = sgstTotalAmount + orderItem.getSgstAmount();
202
				}
203
				orders.addCell(new Paragraph(String.format("%.0f", orderItem.getNetAmount()), FONT_NORMAL));
204
				// orders.addCell(new Paragraph(String.format("%.2f",
205
				// orderItem.getItemTotal()), FONT_NORMAL));
206
			}
207
 
208
			for (CustomInsurancePolicy insurancePolicy : pdfModel.getInsurancePolicies()) {
209
				orders.addCell(new Paragraph(String.valueOf(index++), FONT_NORMAL));
210
				orders.addCell(new Paragraph(insurancePolicy.getDescription(), FONT_NORMAL));
211
				orders.addCell(new Paragraph(insurancePolicy.getHsnCode(), FONT_NORMAL));
212
				orders.addCell(new Paragraph("1", FONT_NORMAL));
213
				orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getRate()), FONT_NORMAL));
214
				orders.addCell(new Paragraph("-", FONT_NORMAL));
215
				orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getRate()), FONT_NORMAL));
216
				if (!stateGst) {
217
					orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getIgstRate()), FONT_NORMAL));
218
					orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getIgstAmount()), FONT_NORMAL));
219
					igstTotalAmount = igstTotalAmount + insurancePolicy.getIgstAmount();
220
				} else {
221
					orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getCgstRate()), FONT_NORMAL));
222
					orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getCgstAmount()), FONT_NORMAL));
223
					orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getSgstRate()), FONT_NORMAL));
224
					orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getSgstAmount()), FONT_NORMAL));
225
					cgstTotalAmount = cgstTotalAmount + insurancePolicy.getCgstAmount();
226
					sgstTotalAmount = sgstTotalAmount + insurancePolicy.getSgstAmount();
227
				}
228
				orders.addCell(new Paragraph(String.format("%.0f", insurancePolicy.getNetAmount()), FONT_NORMAL));
229
			}
230
 
231
			document.add(paragraphTitle);
232
			document.add(Chunk.NEWLINE);
233
			document.add(Chunk.NEWLINE);
234
			document.add(tableCustomerRetailer);
235
 
236
			document.add(Chunk.NEWLINE);
237
			document.add(orders);
238
 
239
			PdfPTable grandTotalTable = new PdfPTable(3);
23552 amit.gupta 240
			PdfPTable paymentsTable = new PdfPTable(2);
241
			paymentsTable.setWidthPercentage(95);
242
			paymentsTable.setWidths(new float[] { 8f, 2f });
23654 amit.gupta 243
 
23509 amit.gupta 244
			if (stateGst) {
245
				grandTotalTable.setWidths(new float[] { 6.6f, .6f, .8f });
246
			} else {
247
				grandTotalTable.setWidths(new float[] { 6.5f, .6f, .9f });
248
			}
249
			grandTotalTable.setWidthPercentage(90);
250
 
251
			Paragraph grandTotalParagraph = new Paragraph("Grand total", FONT_BOLD);
252
			grandTotalParagraph.setIndentationRight(20);
253
			grandTotalTable.addCell(grandTotalParagraph);
254
			Paragraph rsParagraph = new Paragraph("Rs.", FONT_BOLD);
255
			grandTotalTable.addCell(rsParagraph);
256
			Paragraph amountParagraph = new Paragraph(String.format("%.2f", pdfModel.getTotalAmount()), FONT_BOLD);
257
			grandTotalTable.addCell(amountParagraph);
258
 
259
			document.add(grandTotalTable);
260
 
261
			PdfPTable amountInWordsTable = new PdfPTable(3);
23558 amit.gupta 262
			amountInWordsTable.setWidthPercentage(90);
263
			amountInWordsTable.addCell(new Paragraph("Amount in Words:", FONT_BOLD));
23509 amit.gupta 264
			if (!stateGst) {
265
				amountInWordsTable.setWidths(new float[] { 2, 5.1f, 0.9f });
266
			} else {
267
				amountInWordsTable.setWidths(new float[] { 2, 5.2f, 0.8f });
268
			}
269
 
270
			String amountInWords = toAmountInWords(pdfModel.getTotalAmount());
271
			amountInWordsTable.addCell(new Paragraph(amountInWords.toString(), FONT_BOLD));
272
			amountInWordsTable.addCell(new Paragraph("E & O.E", FONT_NORMAL));
273
			document.add(amountInWordsTable);
23654 amit.gupta 274
 
275
			if (pdfModel.getPaymentOptions() != null) {
23566 amit.gupta 276
				PdfPTable paidAmountTable = new PdfPTable(2);
23558 amit.gupta 277
				paidAmountTable.setWidthPercentage(90);
278
				if (!stateGst) {
23566 amit.gupta 279
					paidAmountTable.setWidths(new float[] { 7.1f, 0.9f });
23558 amit.gupta 280
				} else {
23566 amit.gupta 281
					paidAmountTable.setWidths(new float[] { 7.2f, 0.8f });
23558 amit.gupta 282
				}
23566 amit.gupta 283
				float totalPaidValue = 0;
23654 amit.gupta 284
				for (CustomPaymentOption paymentOption : pdfModel.getPaymentOptions()) {
285
					PdfPCell cell = new PdfPCell(
286
							new Paragraph(10, "Paid Through " + paymentOption.getPaymentOption(), FONT_BOLD));
23558 amit.gupta 287
					cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
288
					cell.setPadding(5);
289
					paidAmountTable.addCell(cell);
23509 amit.gupta 290
 
23654 amit.gupta 291
					PdfPCell cell1 = new PdfPCell(new Paragraph(10,
292
							FormattingUtils.formatDecimalTwoDigits(paymentOption.getAmount()), FONT_BOLD));
23558 amit.gupta 293
					cell1.setPadding(5);
294
					paidAmountTable.addCell(cell1);
23566 amit.gupta 295
					totalPaidValue += paymentOption.getAmount();
23654 amit.gupta 296
 
23558 amit.gupta 297
				}
23566 amit.gupta 298
				PdfPCell totalPaidCell = new PdfPCell(new Paragraph(10, "Total Paid", FONT_BOLD));
299
				totalPaidCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
300
				totalPaidCell.setPadding(5);
301
				paidAmountTable.addCell(totalPaidCell);
23654 amit.gupta 302
 
303
				PdfPCell totalPaidValueCell = new PdfPCell(
304
						new Paragraph(10, FormattingUtils.formatDecimalTwoDigits(totalPaidValue), FONT_BOLD));
23566 amit.gupta 305
				totalPaidValueCell.setPadding(5);
306
				paidAmountTable.addCell(totalPaidValueCell);
23654 amit.gupta 307
 
23558 amit.gupta 308
				document.add(paidAmountTable);
309
			}
310
 
23509 amit.gupta 311
			StringBuffer sb = new StringBuffer();
312
			List<String> tncs = pdfModel.getTncs();
313
			for (String tnc : tncs) {
314
				sb.append(tnc).append("\n");
315
			}
316
 
317
			Paragraph warningParagraph = new Paragraph(sb.toString(), FONT_NORMAL);
318
			warningParagraph.setIndentationLeft(40);
319
			document.add(Chunk.NEWLINE);
320
			document.add(warningParagraph);
321
 
322
			document.close(); // no need to close PDFwriter?
323
 
324
		} catch (DocumentException e) {
325
			LOGGER.error("Unable to write data to pdf file : ", e);
326
		} catch (Exception e) {
21901 ashik.ali 327
			// TODO Auto-generated catch block
328
			e.printStackTrace();
329
		}
21686 ashik.ali 330
	}
23509 amit.gupta 331
 
332
	public static void generateAndWriteDebitNote(List<DebitNotePdfModel> debitNotePdfModels,
333
			OutputStream outputStream) {
334
		Document document = new Document();
335
		document.setMargins(0, 0, 25, 0);
336
		try {
337
			for (DebitNotePdfModel debitNotePdfModel : debitNotePdfModels) {
338
 
339
				PdfModel pdfModel = debitNotePdfModel.getPdfModel();
340
				CustomCustomer customer = pdfModel.getCustomer();
341
				CustomRetailer retailer = pdfModel.getRetailer();
342
				boolean stateGst = false;
343
				String customerAddressStateCode = "", retailerAddressStateCode = "";
344
				if (customer.getAddress().getState().equals(retailer.getAddress().getState())) {
345
					stateGst = true;
346
					customerAddressStateCode = Utils.getStateCode(customer.getAddress().getState());
23549 amit.gupta 347
					retailerAddressStateCode = customerAddressStateCode;
23509 amit.gupta 348
				} else {
349
					customerAddressStateCode = Utils.getStateCode(customer.getAddress().getState());
350
					retailerAddressStateCode = Utils.getStateCode(retailer.getAddress().getState());
351
				}
352
				Set<CustomOrderItem> orderItems = pdfModel.getOrderItems();
353
 
354
				PdfWriter.getInstance(document, outputStream);
355
 
356
				document.open();
357
				document.addTitle(pdfModel.getTitle());
358
				document.addAuthor(pdfModel.getAuther());
359
 
23654 amit.gupta 360
				Paragraph paragraphTitle = new Paragraph(pdfModel.getTitle(), FONT_TITLE);
23509 amit.gupta 361
				paragraphTitle.setAlignment(Element.ALIGN_CENTER);
362
 
363
				PdfPCell blankCell = new PdfPCell();
364
				blankCell.setBorder(Rectangle.NO_BORDER);
365
				PdfPTable tableCustomerRetailer = new PdfPTable(3);
23533 amit.gupta 366
				tableCustomerRetailer.setWidthPercentage(95);
23532 amit.gupta 367
				PdfPCell partnerInfo = new PdfPCell();
23549 amit.gupta 368
				partnerInfo.addElement(new Paragraph("From Party:", FONT_BOLD));
23654 amit.gupta 369
				partnerInfo.addElement(
370
						new Paragraph(StringUtils.capitalize(customer.getAddress().getName()), FONT_NORMAL));
371
				partnerInfo.addElement(new Paragraph(
372
						StringUtils.capitalize(customer.getAddress().getLine1()) + ", "
373
								+ (customer.getAddress().getLine2() == null ? ""
374
										: StringUtils.capitalize(customer.getAddress().getLine2()))
375
								+ ", " + customer.getAddress().getCity() + " - " + customer.getAddress().getPinCode(),
376
						FONT_NORMAL));
377
 
378
				partnerInfo.addElement(new Paragraph(
379
						StringUtils.capitalize(customer.getAddress().getState()) + "(" + customerAddressStateCode + ")",
380
						FONT_NORMAL));
23532 amit.gupta 381
				partnerInfo.addElement(new Paragraph("Mobile - " + customer.getMobileNumber(), FONT_NORMAL));
23509 amit.gupta 382
				if (customer.getGstNumber() != null && !customer.getGstNumber().isEmpty()) {
23549 amit.gupta 383
					partnerInfo.addElement(new Paragraph("GST No - " + customer.getGstNumber(), FONT_BOLD));
23509 amit.gupta 384
				}
23533 amit.gupta 385
 
23532 amit.gupta 386
				PdfPCell sellerParty = new PdfPCell();
23549 amit.gupta 387
				sellerParty.addElement(new Paragraph("To Party:", FONT_BOLD));
23654 amit.gupta 388
				sellerParty.addElement(
389
						new Paragraph(StringUtils.capitalize(retailer.getAddress().getName()), FONT_NORMAL));
390
				sellerParty.addElement(new Paragraph((retailer.getAddress().getLine1() == null ? ""
391
						: StringUtils.capitalize(retailer.getAddress().getLine1()) + ", ")
392
						+ (retailer.getAddress().getLine2() == null ? ""
393
								: StringUtils.capitalize(retailer.getAddress().getLine2()) + ", ")
394
						+ StringUtils.capitalize(retailer.getAddress().getCity()) + "-"
395
						+ retailer.getAddress().getPinCode() + ", ", FONT_NORMAL));
23532 amit.gupta 396
				sellerParty.addElement(new Paragraph(
23654 amit.gupta 397
						retailer.getAddress().getState() + "(" + retailerAddressStateCode + ")", FONT_NORMAL));
398
				sellerParty
399
						.addElement(new Paragraph("Mobile - " + retailer.getAddress().getPhoneNumber(), FONT_NORMAL));
23549 amit.gupta 400
				sellerParty.addElement(new Paragraph("GST No - " + retailer.getGstNumber(), FONT_BOLD));
23509 amit.gupta 401
 
402
				PdfPTable tableInvoiceDateRetailer = new PdfPTable(1);
403
				tableInvoiceDateRetailer.getDefaultCell().setBorder(Rectangle.NO_BORDER);
404
 
405
				PdfPTable tableInvoiceDate = new PdfPTable(2);
406
				tableInvoiceDate.getDefaultCell().setBorder(Rectangle.NO_BORDER);
23533 amit.gupta 407
				tableInvoiceDate.setWidthPercentage(90);
23509 amit.gupta 408
 
23533 amit.gupta 409
				PdfPCell debitNoteDetails = new PdfPCell(new Paragraph("Debit Note Details", FONT_BOLD));
410
				debitNoteDetails.setColspan(2);
411
				debitNoteDetails.setBorder(Rectangle.NO_BORDER);
23654 amit.gupta 412
 
23532 amit.gupta 413
				PdfPCell debitNoteNumberKey = new PdfPCell(new Paragraph("Debit Note No:", FONT_NORMAL));
414
				debitNoteNumberKey.setBorder(Rectangle.NO_BORDER);
23654 amit.gupta 415
				PdfPCell debitNoteNumberValue = new PdfPCell(
416
						new Paragraph(debitNotePdfModel.getDebitNoteNumber(), FONT_NORMAL));
23532 amit.gupta 417
				debitNoteNumberValue.setBorder(Rectangle.NO_BORDER);
418
 
419
				PdfPCell debitNoteDateKey = new PdfPCell(new Paragraph("Debit Note Dt:", FONT_NORMAL));
420
				debitNoteDateKey.setBorder(Rectangle.NO_BORDER);
23533 amit.gupta 421
 
422
				PdfPCell debitNoteDateValue = new PdfPCell(
423
						new Paragraph(debitNotePdfModel.getDebitNoteDate(), FONT_NORMAL));
23532 amit.gupta 424
				debitNoteDateValue.setBorder(Rectangle.NO_BORDER);
425
 
23539 amit.gupta 426
				PdfPCell invoiceNumberKey = new PdfPCell(new Paragraph("Invoice Ref No:", FONT_NORMAL));
23509 amit.gupta 427
				invoiceNumberKey.setBorder(Rectangle.NO_BORDER);
428
				PdfPCell invoiceNumberValue = new PdfPCell(new Paragraph(pdfModel.getInvoiceNumber(), FONT_NORMAL));
429
				invoiceNumberValue.setBorder(Rectangle.NO_BORDER);
430
 
23532 amit.gupta 431
				PdfPCell dateKey = new PdfPCell(new Paragraph("Invoice Dt:", FONT_NORMAL));
23509 amit.gupta 432
				dateKey.setBorder(Rectangle.NO_BORDER);
23549 amit.gupta 433
				PdfPCell dateValue = new PdfPCell(new Paragraph(pdfModel.getInvoiceDate(), FONT_NORMAL));
23509 amit.gupta 434
				dateValue.setBorder(Rectangle.NO_BORDER);
23533 amit.gupta 435
 
436
				tableInvoiceDate.addCell(debitNoteDetails);
23532 amit.gupta 437
				tableInvoiceDate.addCell(debitNoteNumberKey);
438
				tableInvoiceDate.addCell(debitNoteNumberValue);
439
				tableInvoiceDate.addCell(debitNoteDateKey);
440
				tableInvoiceDate.addCell(debitNoteDateValue);
23509 amit.gupta 441
				tableInvoiceDate.addCell(invoiceNumberKey);
442
				tableInvoiceDate.addCell(invoiceNumberValue);
443
				tableInvoiceDate.addCell(dateKey);
444
				tableInvoiceDate.addCell(dateValue);
445
 
23532 amit.gupta 446
				tableCustomerRetailer.addCell(partnerInfo);
23533 amit.gupta 447
				tableCustomerRetailer.addCell(tableInvoiceDate);
448
				tableCustomerRetailer.addCell(sellerParty);
23509 amit.gupta 449
 
450
				PdfPTable orders = null;
451
				if (stateGst) {
23532 amit.gupta 452
					orders = new PdfPTable(stateWidths.length);
453
					orders.setWidths(stateWidths);
23509 amit.gupta 454
				} else {
23532 amit.gupta 455
					orders = new PdfPTable(igstWidths.length);
456
					orders.setWidths(igstWidths);
23509 amit.gupta 457
				}
23549 amit.gupta 458
				orders.setWidthPercentage(95);
23542 amit.gupta 459
				orders.addCell(new Paragraph("Order Id", FONT_BOLD));
23509 amit.gupta 460
				orders.addCell(new Paragraph("Description", FONT_BOLD));
461
				orders.addCell(new Paragraph("HSN", FONT_BOLD));
462
				orders.addCell(new Paragraph("Qty", FONT_BOLD));
463
				orders.addCell(new Paragraph("Rate\n(Per pc)", FONT_BOLD));
464
				orders.addCell(new Paragraph("Total\nTaxable", FONT_BOLD));
465
				if (!stateGst) {
466
					orders.addCell(new Paragraph("IGST\n%", FONT_BOLD));
467
					orders.addCell(new Paragraph("IGST", FONT_BOLD));
468
					// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1});
469
					// total 8f
470
				} else {
471
					orders.addCell(new Paragraph("CGST %", FONT_BOLD));
472
					orders.addCell(new Paragraph("CGST", FONT_BOLD));
473
					orders.addCell(new Paragraph("SGST %", FONT_BOLD));
474
					orders.addCell(new Paragraph("SGST", FONT_BOLD));
475
					// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1, 1,
476
					// 1});
477
					// total 8f
478
				}
479
				orders.addCell(new Paragraph("Total", FONT_BOLD));
480
 
481
				orders.setHeaderRows(1);
482
 
483
				float igstTotalAmount = 0, cgstTotalAmount = 0, sgstTotalAmount = 0;
484
				for (CustomOrderItem orderItem : orderItems) {
23542 amit.gupta 485
					orders.addCell(new Paragraph(String.valueOf(orderItem.getOrderId()), FONT_NORMAL));
23509 amit.gupta 486
					orders.addCell(new Paragraph(orderItem.getDescription(), FONT_NORMAL));
487
					orders.addCell(new Paragraph(orderItem.getHsnCode(), FONT_NORMAL));
488
					orders.addCell(new Paragraph(String.valueOf(orderItem.getQuantity()), FONT_NORMAL));
489
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getRate()), FONT_NORMAL));
490
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getAmount()), FONT_NORMAL));
491
					if (!stateGst) {
492
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getIgstRate()), FONT_NORMAL));
493
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getIgstAmount()), FONT_NORMAL));
494
						igstTotalAmount = igstTotalAmount + orderItem.getIgstAmount();
495
					} else {
496
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getCgstRate()), FONT_NORMAL));
497
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getCgstAmount()), FONT_NORMAL));
498
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getSgstRate()), FONT_NORMAL));
499
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getSgstAmount()), FONT_NORMAL));
500
						cgstTotalAmount = cgstTotalAmount + orderItem.getCgstAmount();
501
						sgstTotalAmount = sgstTotalAmount + orderItem.getSgstAmount();
502
					}
503
					orders.addCell(new Paragraph(String.format("%.0f", orderItem.getNetAmount()), FONT_NORMAL));
23533 amit.gupta 504
					LOGGER.info("IN FOR LOOP");
23509 amit.gupta 505
				}
506
 
507
				document.add(paragraphTitle);
23533 amit.gupta 508
 
23509 amit.gupta 509
				document.add(Chunk.NEWLINE);
510
				document.add(tableCustomerRetailer);
511
 
512
				document.add(Chunk.NEWLINE);
513
				document.add(orders);
514
 
515
				PdfPTable grandTotalTable = new PdfPTable(3);
516
				if (stateGst) {
517
					grandTotalTable.setWidths(new float[] { 6.6f, .6f, .8f });
518
				} else {
519
					grandTotalTable.setWidths(new float[] { 6.5f, .6f, .9f });
520
				}
23549 amit.gupta 521
				grandTotalTable.setWidthPercentage(95);
23509 amit.gupta 522
 
523
				Paragraph grandTotalParagraph = new Paragraph("Grand total", FONT_BOLD);
524
				grandTotalParagraph.setIndentationRight(20);
525
				grandTotalTable.addCell(grandTotalParagraph);
526
				Paragraph rsParagraph = new Paragraph("Rs.", FONT_BOLD);
527
				grandTotalTable.addCell(rsParagraph);
528
				Paragraph amountParagraph = new Paragraph(String.format("%.2f", pdfModel.getTotalAmount()), FONT_BOLD);
529
				grandTotalTable.addCell(amountParagraph);
530
 
531
				document.add(grandTotalTable);
532
 
533
				PdfPTable amountInWordsTable = new PdfPTable(3);
534
				if (!stateGst) {
535
					amountInWordsTable.setWidths(new float[] { 2, 5.1f, 0.9f });
536
				} else {
537
					amountInWordsTable.setWidths(new float[] { 2, 5.2f, 0.8f });
538
				}
23549 amit.gupta 539
				amountInWordsTable.setWidthPercentage(95);
23509 amit.gupta 540
				amountInWordsTable.addCell(new Paragraph("Amount in Words:", FONT_BOLD));
541
 
542
				String amountInWords = toAmountInWords(pdfModel.getTotalAmount());
543
				amountInWordsTable.addCell(new Paragraph(amountInWords.toString(), FONT_BOLD));
544
				amountInWordsTable.addCell(new Paragraph("E & O.E", FONT_NORMAL));
545
				document.add(amountInWordsTable);
546
 
547
				document.newPage();
548
			}
549
			document.close(); // no need to close PDFwriter?
550
		} catch (DocumentException e) {
551
			LOGGER.error("Unable to write data to pdf file : ", e);
552
		} catch (Exception e) {
553
			// TODO Auto-generated catch block
554
			e.printStackTrace();
555
		}
21915 ashik.ali 556
	}
23509 amit.gupta 557
 
558
	private static String toAmountInWords(float amount) {
559
		RuleBasedNumberFormat amountInWordsFormat = new RuleBasedNumberFormat(indianLocale,
560
				RuleBasedNumberFormat.SPELLOUT);
561
		StringBuilder amountInWords = new StringBuilder("Rs. ");
562
		amountInWords.append(StringUtils.capitalize(amountInWordsFormat.format((int) amount)));
563
		amountInWords.append(" and ");
564
		amountInWords.append(StringUtils.capitalize(amountInWordsFormat.format((int) (amount * 100) % 100)));
565
		amountInWords.append(" paise");
566
		return amountInWords.toString();
567
	}
23654 amit.gupta 568
 
569
	public static void generateAndWriteCustomerCreditNotes(List<CreditNotePdfModel> creditNotes, OutputStream outputStream) {
570
		Document document = new Document();
571
		document.setMargins(0, 0, 25, 0);
572
		try {
573
			PdfWriter.getInstance(document, outputStream);
574
 
575
			document.open();
576
			document.addTitle(creditNotes.get(0).getPdfModel().getTitle());
577
			document.addAuthor(creditNotes.get(0).getPdfModel().getAuther());
578
			for (CreditNotePdfModel creditNotePdfModel : creditNotes) {
579
				PdfModel pdfModel = creditNotePdfModel.getPdfModel();
580
				CustomCustomer customer = pdfModel.getCustomer();
581
				CustomRetailer retailer = pdfModel.getRetailer();
582
				boolean stateGst = false;
583
				String customerAddressStateCode = "", retailerAddressStateCode = "";
584
				if (customer.getAddress().getState().equals(retailer.getAddress().getState())) {
585
					stateGst = true;
586
					customerAddressStateCode = Utils.getStateCode(customer.getAddress().getState());
587
					retailerAddressStateCode = customerAddressStateCode;
588
				} else {
589
					customerAddressStateCode = Utils.getStateCode(customer.getAddress().getState());
590
					retailerAddressStateCode = Utils.getStateCode(retailer.getAddress().getState());
591
				}
592
				Set<CustomOrderItem> orderItems = pdfModel.getOrderItems();
593
 
594
 
595
				Paragraph paragraphTitle = new Paragraph(pdfModel.getTitle(), FONT_TITLE);
596
				paragraphTitle.setAlignment(Element.ALIGN_CENTER);
597
 
598
				PdfPCell blankCell = new PdfPCell();
599
				blankCell.setBorder(Rectangle.NO_BORDER);
600
				PdfPTable tableCustomerRetailer = new PdfPTable(3);
601
				tableCustomerRetailer.setWidthPercentage(95);
602
				PdfPCell partnerInfo = new PdfPCell();
603
				partnerInfo.addElement(new Paragraph("To Party:", FONT_BOLD));
604
				partnerInfo.addElement(
605
						new Paragraph(StringUtils.capitalize(customer.getAddress().getName()), FONT_NORMAL));
606
				partnerInfo.addElement(new Paragraph(
607
						StringUtils.capitalize(customer.getAddress().getLine1()) + ", "
608
								+ (customer.getAddress().getLine2() == null ? ""
609
										: StringUtils.capitalize(customer.getAddress().getLine2()))
610
								+ ", " + customer.getAddress().getCity() + " - " + customer.getAddress().getPinCode(),
611
						FONT_NORMAL));
612
 
613
				partnerInfo.addElement(new Paragraph(
614
						StringUtils.capitalize(customer.getAddress().getState()) + "(" + customerAddressStateCode + ")",
615
						FONT_NORMAL));
616
				partnerInfo.addElement(new Paragraph("Mobile - " + customer.getMobileNumber(), FONT_NORMAL));
617
				if (customer.getGstNumber() != null && !customer.getGstNumber().isEmpty()) {
618
					partnerInfo.addElement(new Paragraph("GST No - " + customer.getGstNumber(), FONT_BOLD));
619
				}
620
 
621
				PdfPCell sellerParty = new PdfPCell();
622
				sellerParty.addElement(new Paragraph("From Party:", FONT_BOLD));
623
				sellerParty.addElement(
624
						new Paragraph(StringUtils.capitalize(retailer.getAddress().getName()), FONT_NORMAL));
625
				sellerParty.addElement(new Paragraph((retailer.getAddress().getLine1() == null ? ""
626
						: StringUtils.capitalize(retailer.getAddress().getLine1()) + ", ")
627
						+ (retailer.getAddress().getLine2() == null ? ""
628
								: StringUtils.capitalize(retailer.getAddress().getLine2()) + ", ")
629
						+ StringUtils.capitalize(retailer.getAddress().getCity()) + "-"
630
						+ retailer.getAddress().getPinCode() + ", ", FONT_NORMAL));
631
				sellerParty.addElement(new Paragraph(
632
						retailer.getAddress().getState() + "(" + retailerAddressStateCode + ")", FONT_NORMAL));
633
				sellerParty
634
						.addElement(new Paragraph("Mobile - " + retailer.getAddress().getPhoneNumber(), FONT_NORMAL));
635
				sellerParty.addElement(new Paragraph("GST No - " + retailer.getGstNumber(), FONT_BOLD));
636
 
637
				PdfPTable tableInvoiceDateRetailer = new PdfPTable(1);
638
				tableInvoiceDateRetailer.getDefaultCell().setBorder(Rectangle.NO_BORDER);
639
 
640
				PdfPTable tableInvoiceDate = new PdfPTable(2);
641
				tableInvoiceDate.getDefaultCell().setBorder(Rectangle.NO_BORDER);
642
				tableInvoiceDate.setWidthPercentage(90);
643
 
644
				PdfPCell debitNoteDetails = new PdfPCell(new Paragraph("Credit Note Details", FONT_BOLD));
645
				debitNoteDetails.setColspan(2);
646
				debitNoteDetails.setBorder(Rectangle.NO_BORDER);
647
 
648
				PdfPCell debitNoteNumberKey = new PdfPCell(new Paragraph("Credit Note No:", FONT_NORMAL));
649
				debitNoteNumberKey.setBorder(Rectangle.NO_BORDER);
650
				PdfPCell debitNoteNumberValue = new PdfPCell(
651
						new Paragraph(creditNotePdfModel.getCreditNoteNumber(), FONT_NORMAL));
652
				debitNoteNumberValue.setBorder(Rectangle.NO_BORDER);
653
 
654
				PdfPCell debitNoteDateKey = new PdfPCell(new Paragraph("Credit Note Dt:", FONT_NORMAL));
655
				debitNoteDateKey.setBorder(Rectangle.NO_BORDER);
656
 
657
				PdfPCell debitNoteDateValue = new PdfPCell(
658
						new Paragraph(creditNotePdfModel.getCreditNoteDate(), FONT_NORMAL));
659
				debitNoteDateValue.setBorder(Rectangle.NO_BORDER);
660
 
661
				PdfPCell invoiceNumberKey = new PdfPCell(new Paragraph("Invoice Ref No:", FONT_NORMAL));
662
				invoiceNumberKey.setBorder(Rectangle.NO_BORDER);
663
				PdfPCell invoiceNumberValue = new PdfPCell(new Paragraph(pdfModel.getInvoiceNumber(), FONT_NORMAL));
664
				invoiceNumberValue.setBorder(Rectangle.NO_BORDER);
665
 
666
				PdfPCell dateKey = new PdfPCell(new Paragraph("Invoice Dt:", FONT_NORMAL));
667
				dateKey.setBorder(Rectangle.NO_BORDER);
668
				PdfPCell dateValue = new PdfPCell(new Paragraph(pdfModel.getInvoiceDate(), FONT_NORMAL));
669
				dateValue.setBorder(Rectangle.NO_BORDER);
670
 
671
				tableInvoiceDate.addCell(debitNoteDetails);
672
				tableInvoiceDate.addCell(debitNoteNumberKey);
673
				tableInvoiceDate.addCell(debitNoteNumberValue);
674
				tableInvoiceDate.addCell(debitNoteDateKey);
675
				tableInvoiceDate.addCell(debitNoteDateValue);
676
				tableInvoiceDate.addCell(invoiceNumberKey);
677
				tableInvoiceDate.addCell(invoiceNumberValue);
678
				tableInvoiceDate.addCell(dateKey);
679
				tableInvoiceDate.addCell(dateValue);
680
 
681
				tableCustomerRetailer.addCell(partnerInfo);
682
				tableCustomerRetailer.addCell(tableInvoiceDate);
683
				tableCustomerRetailer.addCell(sellerParty);
684
 
685
				PdfPTable orders = null;
686
				if (stateGst) {
687
					orders = new PdfPTable(stateWidthsCrNote.length);
688
					orders.setWidths(stateWidthsCrNote);
689
				} else {
690
					orders = new PdfPTable(igstWidthsCrNote.length);
691
					orders.setWidths(igstWidthsCrNote);
692
				}
693
				orders.setWidthPercentage(95);
694
				orders.addCell(new Paragraph("Description", FONT_BOLD));
695
				orders.addCell(new Paragraph("HSN", FONT_BOLD));
696
				orders.addCell(new Paragraph("Qty", FONT_BOLD));
697
				orders.addCell(new Paragraph("Rate\n(Per pc)", FONT_BOLD));
698
				orders.addCell(new Paragraph("Total\nTaxable", FONT_BOLD));
699
				if (!stateGst) {
700
					orders.addCell(new Paragraph("IGST%", FONT_BOLD));
701
					orders.addCell(new Paragraph("IGST", FONT_BOLD));
702
					// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1});
703
					// total 8f
704
				} else {
705
					orders.addCell(new Paragraph("CGST %", FONT_BOLD));
706
					orders.addCell(new Paragraph("CGST", FONT_BOLD));
707
					orders.addCell(new Paragraph("SGST %", FONT_BOLD));
708
					orders.addCell(new Paragraph("SGST", FONT_BOLD));
709
					// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1, 1,
710
					// 1});
711
					// total 8f
712
				}
713
				orders.addCell(new Paragraph("Total", FONT_BOLD));
714
 
715
				orders.setHeaderRows(1);
716
 
717
				float igstTotalAmount = 0, cgstTotalAmount = 0, sgstTotalAmount = 0;
718
				for (CustomOrderItem orderItem : orderItems) {
719
					LOGGER.info("Custom Order Item - {}", orderItem);
720
					orders.addCell(new Paragraph(orderItem.getDescription(), FONT_NORMAL));
721
					orders.addCell(new Paragraph(orderItem.getHsnCode(), FONT_NORMAL));
722
					orders.addCell(new Paragraph(String.valueOf(orderItem.getQuantity()), FONT_NORMAL));
723
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getRate()), FONT_NORMAL));
724
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getAmount()), FONT_NORMAL));
725
					if (!stateGst) {
726
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getIgstRate()), FONT_NORMAL));
727
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getIgstAmount()), FONT_NORMAL));
728
						igstTotalAmount = igstTotalAmount + orderItem.getIgstAmount();
729
					} else {
730
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getCgstRate()), FONT_NORMAL));
731
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getCgstAmount()), FONT_NORMAL));
732
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getSgstRate()), FONT_NORMAL));
733
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getSgstAmount()), FONT_NORMAL));
734
						cgstTotalAmount = cgstTotalAmount + orderItem.getCgstAmount();
735
						sgstTotalAmount = sgstTotalAmount + orderItem.getSgstAmount();
736
					}
737
					orders.addCell(new Paragraph(String.format("%.0f", orderItem.getNetAmount()), FONT_NORMAL));
738
					LOGGER.info("IN FOR LOOP");
739
				}
740
 
741
				document.add(paragraphTitle);
742
 
743
				document.add(Chunk.NEWLINE);
744
				document.add(tableCustomerRetailer);
745
 
746
				document.add(Chunk.NEWLINE);
747
				document.add(orders);
748
 
749
				PdfPTable grandTotalTable = new PdfPTable(3);
750
				if (stateGst) {
751
					grandTotalTable.setWidths(new float[] { 6.6f, .6f, .8f });
752
				} else {
753
					grandTotalTable.setWidths(new float[] { 6.5f, .6f, .9f });
754
				}
755
				grandTotalTable.setWidthPercentage(95);
756
 
757
				Paragraph grandTotalParagraph = new Paragraph("Grand total", FONT_BOLD);
758
				grandTotalParagraph.setIndentationRight(20);
759
				grandTotalTable.addCell(grandTotalParagraph);
760
				Paragraph rsParagraph = new Paragraph("Rs.", FONT_BOLD);
761
				grandTotalTable.addCell(rsParagraph);
762
				Paragraph amountParagraph = new Paragraph(String.format("%.2f", pdfModel.getTotalAmount()), FONT_BOLD);
763
				grandTotalTable.addCell(amountParagraph);
764
 
765
				document.add(grandTotalTable);
766
 
767
				PdfPTable amountInWordsTable = new PdfPTable(3);
768
				if (!stateGst) {
769
					amountInWordsTable.setWidths(new float[] { 2, 5.1f, 0.9f });
770
				} else {
771
					amountInWordsTable.setWidths(new float[] { 2, 5.2f, 0.8f });
772
				}
773
				amountInWordsTable.setWidthPercentage(95);
774
				amountInWordsTable.addCell(new Paragraph("Amount in Words:", FONT_BOLD));
775
 
776
				String amountInWords = toAmountInWords(pdfModel.getTotalAmount());
777
				amountInWordsTable.addCell(new Paragraph(amountInWords.toString(), FONT_BOLD));
778
				amountInWordsTable.addCell(new Paragraph("E & O.E", FONT_NORMAL));
779
				document.add(amountInWordsTable);
780
 
781
				document.newPage();
782
			}
783
			document.close(); // no need to close PDFwriter?
784
		} catch (DocumentException e) {
785
			LOGGER.error("Unable to write data to pdf file : ", e);
786
		} catch (Exception e) {
787
			// TODO Auto-generated catch block
788
			e.printStackTrace();
789
		}
790
 
791
	}
21686 ashik.ali 792
}