Subversion Repositories SmartDukaan

Rev

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