Subversion Repositories SmartDukaan

Rev

Rev 24516 | Rev 24854 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 24516 Rev 24845
Line 22... Line 22...
22
import com.itextpdf.text.Font.FontFamily;
22
import com.itextpdf.text.Font.FontFamily;
23
import com.itextpdf.text.Image;
23
import com.itextpdf.text.Image;
24
import com.itextpdf.text.Paragraph;
24
import com.itextpdf.text.Paragraph;
25
import com.itextpdf.text.Phrase;
25
import com.itextpdf.text.Phrase;
26
import com.itextpdf.text.Rectangle;
26
import com.itextpdf.text.Rectangle;
27
import com.itextpdf.text.pdf.ColumnText;
-
 
28
import com.itextpdf.text.pdf.PdfContentByte;
27
import com.itextpdf.text.pdf.PdfContentByte;
29
import com.itextpdf.text.pdf.PdfGState;
28
import com.itextpdf.text.pdf.PdfGState;
30
import com.itextpdf.text.pdf.PdfPCell;
29
import com.itextpdf.text.pdf.PdfPCell;
31
import com.itextpdf.text.pdf.PdfPTable;
30
import com.itextpdf.text.pdf.PdfPTable;
32
import com.itextpdf.text.pdf.PdfReader;
31
import com.itextpdf.text.pdf.PdfReader;
Line 64... Line 63...
64
	private static float[] stateWidthsCrNote = new float[] { 2.1f, 0.7f, .3f, 0.6f, .7f, .5f, .6f, .5f, .6f, .8f };
63
	private static float[] stateWidthsCrNote = new float[] { 2.1f, 0.7f, .3f, 0.6f, .7f, .5f, .6f, .5f, .6f, .8f };
65
 
64
 
66
	private static final Locale indianLocale = Locale.getDefault();
65
	private static final Locale indianLocale = Locale.getDefault();
67
 
66
 
68
	private static final Logger LOGGER = LogManager.getLogger(PdfUtils.class);
67
	private static final Logger LOGGER = LogManager.getLogger(PdfUtils.class);
69
	
-
 
70
 
68
 
71
	public static void generateAndWrite(PdfModel pdfModel, OutputStream outputStream) {
69
	public static void generateAndWrite(List<PdfModel> pdfModels, OutputStream outputStream) {
72
		Document document = new Document();
-
 
73
		document.setMargins(0, 0, 25, 0);
-
 
74
		try {
70
		try {
-
 
71
			Document document = new Document();
-
 
72
			document.setMargins(0, 0, 25, 0);
-
 
73
			for (PdfModel pdfModel : pdfModels) {
75
			CustomCustomer customer = pdfModel.getCustomer();
74
				CustomCustomer customer = pdfModel.getCustomer();
76
			CustomRetailer retailer = pdfModel.getRetailer();
75
				CustomRetailer retailer = pdfModel.getRetailer();
77
			boolean stateGst = false;
76
				boolean stateGst = false;
78
			String customerAddressStateCode = "", retailerAddressStateCode = "";
77
				String customerAddressStateCode = "", retailerAddressStateCode = "";
79
			if (customer.getAddress().getState().equals(retailer.getAddress().getState())) {
78
				if (customer.getAddress().getState().equals(retailer.getAddress().getState())) {
80
				stateGst = true;
79
					stateGst = true;
81
				customerAddressStateCode = Utils.getStateCode(customer.getAddress().getState());
80
					customerAddressStateCode = Utils.getStateCode(customer.getAddress().getState());
82
			} else {
81
				} else {
83
				customerAddressStateCode = Utils.getStateCode(customer.getAddress().getState());
82
					customerAddressStateCode = Utils.getStateCode(customer.getAddress().getState());
84
				retailerAddressStateCode = Utils.getStateCode(retailer.getAddress().getState());
83
					retailerAddressStateCode = Utils.getStateCode(retailer.getAddress().getState());
85
			}
84
				}
86
			Set<CustomOrderItem> orderItems = pdfModel.getOrderItems();
85
				Set<CustomOrderItem> orderItems = pdfModel.getOrderItems();
87
			ByteArrayOutputStream oos = null;
86
				ByteArrayOutputStream oos = null;
88
			if(pdfModel.isCancelled()) {
87
				if (pdfModel.isCancelled()) {
89
				oos = new ByteArrayOutputStream();
88
					oos = new ByteArrayOutputStream();
90
				PdfWriter.getInstance(document, oos);
89
					PdfWriter.getInstance(document, oos);
91
			} else {
90
				} else {
92
				PdfWriter.getInstance(document, outputStream);
91
					PdfWriter.getInstance(document, outputStream);
93
			}
92
				}
94
 
93
 
95
			document.open();
94
				document.open();
96
			document.addTitle(pdfModel.getTitle());
95
				document.addTitle(pdfModel.getTitle());
97
			document.addAuthor(pdfModel.getAuther());
96
				document.addAuthor(pdfModel.getAuther());
98
 
97
 
99
			Paragraph paragraphTitle = new Paragraph(INVOICE_TITLE, FONT_TITLE);
98
				Paragraph paragraphTitle = new Paragraph(INVOICE_TITLE, FONT_TITLE);
100
			paragraphTitle.setAlignment(Element.ALIGN_CENTER);
99
				paragraphTitle.setAlignment(Element.ALIGN_CENTER);
101
 
100
 
102
			PdfPCell blankCell = new PdfPCell();
101
				PdfPCell blankCell = new PdfPCell();
103
			blankCell.setBorder(Rectangle.NO_BORDER);
102
				blankCell.setBorder(Rectangle.NO_BORDER);
104
			PdfPTable tableCustomerRetailer = new PdfPTable(3);
103
				PdfPTable tableCustomerRetailer = new PdfPTable(3);
105
			tableCustomerRetailer.setWidthPercentage(90);
104
				tableCustomerRetailer.setWidthPercentage(90);
106
			tableCustomerRetailer.getDefaultCell().setBorder(Rectangle.NO_BORDER);
105
				tableCustomerRetailer.getDefaultCell().setBorder(Rectangle.NO_BORDER);
107
			PdfPCell columnCustomerInfo = new PdfPCell();
106
				PdfPCell columnCustomerInfo = new PdfPCell();
108
			columnCustomerInfo.addElement(new Paragraph("Customer Details", FONT_BOLD));
107
				columnCustomerInfo.addElement(new Paragraph("Customer Details", FONT_BOLD));
109
			columnCustomerInfo.addElement(new Paragraph(
108
				columnCustomerInfo.addElement(new Paragraph(
110
					StringUtils.capitalize(customer.getFirstName() + " " + customer.getLastName()), FONT_NORMAL));
109
						StringUtils.capitalize(customer.getFirstName() + " " + customer.getLastName()), FONT_NORMAL));
111
			columnCustomerInfo.addElement(new Paragraph(StringUtils.capitalize(customer.getAddress().getLine1()) + ", "
110
				columnCustomerInfo.addElement(new Paragraph(StringUtils.capitalize(customer.getAddress().getLine1())
112
					+ StringUtils.capitalize(customer.getAddress().getLine2()), FONT_NORMAL));
111
						+ ", " + StringUtils.capitalize(customer.getAddress().getLine2()), FONT_NORMAL));
113
			columnCustomerInfo.addElement(new Paragraph(StringUtils.capitalize(customer.getAddress().getCity()) + ", "
112
				columnCustomerInfo.addElement(new Paragraph(
114
					+ StringUtils.capitalize(customer.getAddress().getState()) + "(" + customerAddressStateCode + ")"
113
						StringUtils.capitalize(customer.getAddress().getCity()) + ", "
115
					+ "\n" + customer.getAddress().getPinCode(), FONT_NORMAL));
114
								+ StringUtils.capitalize(customer.getAddress().getState()) + "("
116
			columnCustomerInfo.addElement(new Paragraph("Mobile - " + customer.getMobileNumber(), FONT_NORMAL));
115
								+ customerAddressStateCode + ")" + "\n" + customer.getAddress().getPinCode(),
117
			if (customer.getGstNumber() != null && !customer.getGstNumber().isEmpty()) {
116
						FONT_NORMAL));
118
				columnCustomerInfo.addElement(new Paragraph("GST Number - " + customer.getGstNumber(), FONT_NORMAL));
117
				columnCustomerInfo.addElement(new Paragraph("Mobile - " + customer.getMobileNumber(), FONT_NORMAL));
119
			}
118
				if (customer.getGstNumber() != null && !customer.getGstNumber().isEmpty()) {
120
			columnCustomerInfo.setBorder(Rectangle.NO_BORDER);
119
					columnCustomerInfo
121
			PdfPCell columnRetailerInfo = new PdfPCell();
120
							.addElement(new Paragraph("GST Number - " + customer.getGstNumber(), FONT_NORMAL));
122
			columnRetailerInfo
121
				}
123
					.addElement(new Paragraph(StringUtils.capitalize(retailer.getAddress().getName()), FONT_BOLD));
122
				columnCustomerInfo.setBorder(Rectangle.NO_BORDER);
124
			columnRetailerInfo.addElement(new Paragraph(StringUtils.capitalize(retailer.getAddress().getLine1()) + ", "
123
				PdfPCell columnRetailerInfo = new PdfPCell();
125
					+ StringUtils.capitalize(retailer.getAddress().getLine2()) + ", "
124
				columnRetailerInfo
126
					+ StringUtils.capitalize(retailer.getAddress().getCity()) + "-" + retailer.getAddress().getPinCode()
125
						.addElement(new Paragraph(StringUtils.capitalize(retailer.getAddress().getName()), FONT_BOLD));
127
					+ ", " + retailer.getAddress().getState() + "("
126
				columnRetailerInfo.addElement(new Paragraph(StringUtils.capitalize(retailer.getAddress().getLine1())
128
					+ (stateGst ? customerAddressStateCode : retailerAddressStateCode) + ")", FONT_BOLD));
127
						+ ", " + StringUtils.capitalize(retailer.getAddress().getLine2()) + ", "
129
			columnRetailerInfo
128
						+ StringUtils.capitalize(retailer.getAddress().getCity()) + "-"
130
					.addElement(new Paragraph("Contact No.- " + retailer.getAddress().getPhoneNumber(), FONT_BOLD));
129
						+ retailer.getAddress().getPinCode() + ", " + retailer.getAddress().getState() + "("
131
			columnRetailerInfo.addElement(new Paragraph("GST NO. " + retailer.getGstNumber(), FONT_BOLD));
130
						+ (stateGst ? customerAddressStateCode : retailerAddressStateCode) + ")", FONT_BOLD));
132
			columnRetailerInfo.setBorder(Rectangle.NO_BORDER);
131
				columnRetailerInfo
133
 
132
						.addElement(new Paragraph("Contact No.- " + retailer.getAddress().getPhoneNumber(), FONT_BOLD));
134
			PdfPTable tableInvoiceDateRetailer = new PdfPTable(1);
133
				columnRetailerInfo.addElement(new Paragraph("GST NO. " + retailer.getGstNumber(), FONT_BOLD));
135
			tableInvoiceDateRetailer.getDefaultCell().setBorder(Rectangle.NO_BORDER);
134
				columnRetailerInfo.setBorder(Rectangle.NO_BORDER);
136
 
135
 
137
			PdfPTable tableInvoiceDate = new PdfPTable(2);
136
				PdfPTable tableInvoiceDateRetailer = new PdfPTable(1);
138
			tableInvoiceDate.getDefaultCell().setBorder(Rectangle.NO_BORDER);
137
				tableInvoiceDateRetailer.getDefaultCell().setBorder(Rectangle.NO_BORDER);
139
 
138
 
140
			PdfPCell invoiceNumberKey = new PdfPCell(new Paragraph("Invoice No:", FONT_NORMAL));
139
				PdfPTable tableInvoiceDate = new PdfPTable(2);
141
			invoiceNumberKey.setBorder(Rectangle.NO_BORDER);
140
				tableInvoiceDate.getDefaultCell().setBorder(Rectangle.NO_BORDER);
142
 
141
 
143
			PdfPCell invoiceNumberValue = new PdfPCell(new Paragraph(pdfModel.getInvoiceNumber(), FONT_NORMAL));
142
				PdfPCell invoiceNumberKey = new PdfPCell(new Paragraph("Invoice No:", FONT_NORMAL));
144
			invoiceNumberValue.setBorder(Rectangle.NO_BORDER);
143
				invoiceNumberKey.setBorder(Rectangle.NO_BORDER);
145
 
144
 
146
			PdfPCell dateKey = new PdfPCell(new Paragraph("Date:", FONT_NORMAL));
145
				PdfPCell invoiceNumberValue = new PdfPCell(new Paragraph(pdfModel.getInvoiceNumber(), FONT_NORMAL));
147
			dateKey.setBorder(Rectangle.NO_BORDER);
146
				invoiceNumberValue.setBorder(Rectangle.NO_BORDER);
148
 
147
 
149
			PdfPCell dateValue = new PdfPCell(new Paragraph(pdfModel.getInvoiceDate(), FONT_NORMAL));
148
				PdfPCell dateKey = new PdfPCell(new Paragraph("Date:", FONT_NORMAL));
150
			dateValue.setBorder(Rectangle.NO_BORDER);
149
				dateKey.setBorder(Rectangle.NO_BORDER);
151
			tableInvoiceDate.addCell(invoiceNumberKey);
150
 
152
			// tableInvoiceDate.addCell(blankCell);
151
				PdfPCell dateValue = new PdfPCell(new Paragraph(pdfModel.getInvoiceDate(), FONT_NORMAL));
153
			tableInvoiceDate.addCell(invoiceNumberValue);
152
				dateValue.setBorder(Rectangle.NO_BORDER);
154
			tableInvoiceDate.addCell(dateKey);
153
				tableInvoiceDate.addCell(invoiceNumberKey);
155
			// tableInvoiceDate.addCell(blankCell);
154
				// tableInvoiceDate.addCell(blankCell);
156
			tableInvoiceDate.addCell(dateValue);
155
				tableInvoiceDate.addCell(invoiceNumberValue);
157
			tableInvoiceDateRetailer.addCell(tableInvoiceDate);
156
				tableInvoiceDate.addCell(dateKey);
158
			tableInvoiceDateRetailer.addCell(columnRetailerInfo);
157
				// tableInvoiceDate.addCell(blankCell);
159
 
158
				tableInvoiceDate.addCell(dateValue);
160
			tableCustomerRetailer.addCell(columnCustomerInfo);
159
				tableInvoiceDateRetailer.addCell(tableInvoiceDate);
161
			tableCustomerRetailer.addCell(blankCell);
160
				tableInvoiceDateRetailer.addCell(columnRetailerInfo);
162
			tableCustomerRetailer.addCell(tableInvoiceDateRetailer);
161
 
163
 
162
				tableCustomerRetailer.addCell(columnCustomerInfo);
164
			PdfPTable orders = null;
163
				tableCustomerRetailer.addCell(blankCell);
165
			if (stateGst) {
164
				tableCustomerRetailer.addCell(tableInvoiceDateRetailer);
166
				orders = new PdfPTable(stateWidthsWithDiscount.length);
165
 
167
				orders.setWidths(stateWidthsWithDiscount);
166
				PdfPTable orders = null;
168
			} else {
167
				if (stateGst) {
169
				orders = new PdfPTable(igstWidthsWithDiscount.length);
168
					orders = new PdfPTable(stateWidthsWithDiscount.length);
170
				orders.setWidths(igstWidthsWithDiscount);
169
					orders.setWidths(stateWidthsWithDiscount);
171
			}
170
				} else {
172
			orders.setWidthPercentage(90);
171
					orders = new PdfPTable(igstWidthsWithDiscount.length);
173
			orders.addCell(new Paragraph("Sl", FONT_BOLD));
172
					orders.setWidths(igstWidthsWithDiscount);
174
			orders.addCell(new Paragraph("Description", FONT_BOLD));
173
				}
175
			orders.addCell(new Paragraph("HSN", FONT_BOLD));
174
				orders.setWidthPercentage(90);
176
			orders.addCell(new Paragraph("Qty", FONT_BOLD));
175
				orders.addCell(new Paragraph("Sl", FONT_BOLD));
177
			orders.addCell(new Paragraph("Rate\n(Per pc)", FONT_BOLD));
176
				orders.addCell(new Paragraph("Description", FONT_BOLD));
178
			orders.addCell(new Paragraph("Disc.", FONT_BOLD));
177
				orders.addCell(new Paragraph("HSN", FONT_BOLD));
179
			orders.addCell(new Paragraph("Total\nTaxable", FONT_BOLD));
178
				orders.addCell(new Paragraph("Qty", FONT_BOLD));
180
			if (!stateGst) {
179
				orders.addCell(new Paragraph("Rate\n(Per pc)", FONT_BOLD));
181
				orders.addCell(new Paragraph("IGST\n%", FONT_BOLD));
180
				orders.addCell(new Paragraph("Disc.", FONT_BOLD));
182
				orders.addCell(new Paragraph("IGST", FONT_BOLD));
181
				orders.addCell(new Paragraph("Total\nTaxable", FONT_BOLD));
183
				// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1});
182
				if (!stateGst) {
184
				// total 8f
183
					orders.addCell(new Paragraph("IGST\n%", FONT_BOLD));
185
			} else {
184
					orders.addCell(new Paragraph("IGST", FONT_BOLD));
186
				orders.addCell(new Paragraph("CGST %", FONT_BOLD));
185
					// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1});
187
				orders.addCell(new Paragraph("CGST", FONT_BOLD));
186
					// total 8f
188
				orders.addCell(new Paragraph("SGST %", FONT_BOLD));
187
				} else {
189
				orders.addCell(new Paragraph("SGST", FONT_BOLD));
188
					orders.addCell(new Paragraph("CGST %", FONT_BOLD));
190
				// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1, 1, 1});
189
					orders.addCell(new Paragraph("CGST", FONT_BOLD));
191
				// total 8f
190
					orders.addCell(new Paragraph("SGST %", FONT_BOLD));
192
			}
191
					orders.addCell(new Paragraph("SGST", FONT_BOLD));
193
			orders.addCell(new Paragraph("Total", FONT_BOLD));
192
					// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1, 1, 1});
-
 
193
					// total 8f
-
 
194
				}
-
 
195
				orders.addCell(new Paragraph("Total", FONT_BOLD));
194
 
196
 
195
			// orders.addCell(new Paragraph("Item Total (Rs)", FONT_BOLD));
197
				// orders.addCell(new Paragraph("Item Total (Rs)", FONT_BOLD));
196
 
198
 
197
			orders.setHeaderRows(1);
199
				orders.setHeaderRows(1);
198
			// orders.setSkipFirstHeader(true);
200
				// orders.setSkipFirstHeader(true);
199
 
201
 
200
			float igstTotalAmount = 0, cgstTotalAmount = 0, sgstTotalAmount = 0;
202
				float igstTotalAmount = 0, cgstTotalAmount = 0, sgstTotalAmount = 0;
201
			int index = 1;
203
				int index = 1;
202
			for (CustomOrderItem orderItem : orderItems) {
204
				for (CustomOrderItem orderItem : orderItems) {
203
				orders.addCell(new Paragraph(String.valueOf(index++), FONT_NORMAL));
205
					orders.addCell(new Paragraph(String.valueOf(index++), FONT_NORMAL));
204
				orders.addCell(new Paragraph(orderItem.getDescription(), FONT_NORMAL));
206
					orders.addCell(new Paragraph(orderItem.getDescription(), FONT_NORMAL));
205
				orders.addCell(new Paragraph(orderItem.getHsnCode(), FONT_NORMAL));
207
					orders.addCell(new Paragraph(orderItem.getHsnCode(), FONT_NORMAL));
206
				orders.addCell(new Paragraph(String.valueOf(orderItem.getQuantity()), FONT_NORMAL));
208
					orders.addCell(new Paragraph(String.valueOf(orderItem.getQuantity()), FONT_NORMAL));
207
				orders.addCell(new Paragraph(String.format("%.2f", orderItem.getRate()), FONT_NORMAL));
209
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getRate()), FONT_NORMAL));
208
				orders.addCell(new Paragraph(String.format("%.2f", orderItem.getDiscount()), FONT_NORMAL));
210
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getDiscount()), FONT_NORMAL));
209
				orders.addCell(new Paragraph(String.format("%.2f", orderItem.getAmount()), FONT_NORMAL));
211
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getAmount()), FONT_NORMAL));
210
				if (!stateGst) {
212
					if (!stateGst) {
211
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getIgstRate()), FONT_NORMAL));
213
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getIgstRate()), FONT_NORMAL));
212
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getIgstAmount()), FONT_NORMAL));
214
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getIgstAmount()), FONT_NORMAL));
213
					igstTotalAmount = igstTotalAmount + orderItem.getIgstAmount();
215
						igstTotalAmount = igstTotalAmount + orderItem.getIgstAmount();
214
				} else {
216
					} else {
215
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getCgstRate()), FONT_NORMAL));
217
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getCgstRate()), FONT_NORMAL));
216
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getCgstAmount()), FONT_NORMAL));
218
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getCgstAmount()), FONT_NORMAL));
217
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getSgstRate()), FONT_NORMAL));
219
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getSgstRate()), FONT_NORMAL));
218
					orders.addCell(new Paragraph(String.format("%.2f", orderItem.getSgstAmount()), FONT_NORMAL));
220
						orders.addCell(new Paragraph(String.format("%.2f", orderItem.getSgstAmount()), FONT_NORMAL));
219
					cgstTotalAmount = cgstTotalAmount + orderItem.getCgstAmount();
221
						cgstTotalAmount = cgstTotalAmount + orderItem.getCgstAmount();
220
					sgstTotalAmount = sgstTotalAmount + orderItem.getSgstAmount();
222
						sgstTotalAmount = sgstTotalAmount + orderItem.getSgstAmount();
221
				}
223
					}
222
				orders.addCell(new Paragraph(String.format("%.0f", orderItem.getNetAmount()), FONT_NORMAL));
224
					orders.addCell(new Paragraph(String.format("%.0f", orderItem.getNetAmount()), FONT_NORMAL));
223
				// orders.addCell(new Paragraph(String.format("%.2f",
225
					// orders.addCell(new Paragraph(String.format("%.2f",
224
				// orderItem.getItemTotal()), FONT_NORMAL));
226
					// orderItem.getItemTotal()), FONT_NORMAL));
225
			}
227
				}
226
 
228
 
227
			for (CustomInsurancePolicy insurancePolicy : pdfModel.getInsurancePolicies()) {
229
				for (CustomInsurancePolicy insurancePolicy : pdfModel.getInsurancePolicies()) {
228
				orders.addCell(new Paragraph(String.valueOf(index++), FONT_NORMAL));
230
					orders.addCell(new Paragraph(String.valueOf(index++), FONT_NORMAL));
229
				orders.addCell(new Paragraph(insurancePolicy.getDescription(), FONT_NORMAL));
231
					orders.addCell(new Paragraph(insurancePolicy.getDescription(), FONT_NORMAL));
230
				orders.addCell(new Paragraph(insurancePolicy.getHsnCode(), FONT_NORMAL));
232
					orders.addCell(new Paragraph(insurancePolicy.getHsnCode(), FONT_NORMAL));
231
				orders.addCell(new Paragraph("1", FONT_NORMAL));
233
					orders.addCell(new Paragraph("1", FONT_NORMAL));
232
				orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getRate()), FONT_NORMAL));
234
					orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getRate()), FONT_NORMAL));
233
				orders.addCell(new Paragraph("-", FONT_NORMAL));
235
					orders.addCell(new Paragraph("-", FONT_NORMAL));
234
				orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getRate()), FONT_NORMAL));
236
					orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getRate()), FONT_NORMAL));
235
				if (!stateGst) {
237
					if (!stateGst) {
-
 
238
						orders.addCell(
236
					orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getIgstRate()), FONT_NORMAL));
239
								new Paragraph(String.format("%.2f", insurancePolicy.getIgstRate()), FONT_NORMAL));
-
 
240
						orders.addCell(
237
					orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getIgstAmount()), FONT_NORMAL));
241
								new Paragraph(String.format("%.2f", insurancePolicy.getIgstAmount()), FONT_NORMAL));
238
					igstTotalAmount = igstTotalAmount + insurancePolicy.getIgstAmount();
242
						igstTotalAmount = igstTotalAmount + insurancePolicy.getIgstAmount();
239
				} else {
243
					} else {
-
 
244
						orders.addCell(
240
					orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getCgstRate()), FONT_NORMAL));
245
								new Paragraph(String.format("%.2f", insurancePolicy.getCgstRate()), FONT_NORMAL));
-
 
246
						orders.addCell(
241
					orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getCgstAmount()), FONT_NORMAL));
247
								new Paragraph(String.format("%.2f", insurancePolicy.getCgstAmount()), FONT_NORMAL));
-
 
248
						orders.addCell(
242
					orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getSgstRate()), FONT_NORMAL));
249
								new Paragraph(String.format("%.2f", insurancePolicy.getSgstRate()), FONT_NORMAL));
-
 
250
						orders.addCell(
243
					orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getSgstAmount()), FONT_NORMAL));
251
								new Paragraph(String.format("%.2f", insurancePolicy.getSgstAmount()), FONT_NORMAL));
244
					cgstTotalAmount = cgstTotalAmount + insurancePolicy.getCgstAmount();
252
						cgstTotalAmount = cgstTotalAmount + insurancePolicy.getCgstAmount();
245
					sgstTotalAmount = sgstTotalAmount + insurancePolicy.getSgstAmount();
253
						sgstTotalAmount = sgstTotalAmount + insurancePolicy.getSgstAmount();
-
 
254
					}
-
 
255
					orders.addCell(new Paragraph(String.format("%.0f", insurancePolicy.getNetAmount()), FONT_NORMAL));
246
				}
256
				}
247
				orders.addCell(new Paragraph(String.format("%.0f", insurancePolicy.getNetAmount()), FONT_NORMAL));
-
 
248
			}
-
 
249
 
257
 
250
			document.add(paragraphTitle);
258
				document.add(paragraphTitle);
251
			document.add(Chunk.NEWLINE);
259
				document.add(Chunk.NEWLINE);
252
			document.add(Chunk.NEWLINE);
260
				document.add(Chunk.NEWLINE);
253
			document.add(tableCustomerRetailer);
261
				document.add(tableCustomerRetailer);
254
 
262
 
255
			document.add(Chunk.NEWLINE);
263
				document.add(Chunk.NEWLINE);
256
			document.add(orders);
264
				document.add(orders);
257
 
265
 
258
			PdfPTable grandTotalTable = new PdfPTable(3);
266
				PdfPTable grandTotalTable = new PdfPTable(3);
259
			PdfPTable paymentsTable = new PdfPTable(2);
267
				PdfPTable paymentsTable = new PdfPTable(2);
260
			paymentsTable.setWidthPercentage(95);
268
				paymentsTable.setWidthPercentage(95);
261
			paymentsTable.setWidths(new float[] { 8f, 2f });
269
				paymentsTable.setWidths(new float[] { 8f, 2f });
262
 
-
 
263
			if (stateGst) {
-
 
264
				grandTotalTable.setWidths(new float[] { 6.6f, .6f, .8f });
-
 
265
			} else {
-
 
266
				grandTotalTable.setWidths(new float[] { 6.5f, .6f, .9f });
-
 
267
			}
-
 
268
			grandTotalTable.setWidthPercentage(90);
-
 
269
 
270
 
270
			Paragraph grandTotalParagraph = new Paragraph("Grand total", FONT_BOLD);
-
 
271
			grandTotalParagraph.setIndentationRight(20);
-
 
272
			grandTotalTable.addCell(grandTotalParagraph);
-
 
273
			Paragraph rsParagraph = new Paragraph("Rs.", FONT_BOLD);
-
 
274
			grandTotalTable.addCell(rsParagraph);
-
 
275
			Paragraph amountParagraph = new Paragraph(String.format("%.2f", pdfModel.getTotalAmount()), FONT_BOLD);
-
 
276
			grandTotalTable.addCell(amountParagraph);
-
 
277
 
-
 
278
			document.add(grandTotalTable);
-
 
279
 
-
 
280
			PdfPTable amountInWordsTable = new PdfPTable(3);
-
 
281
			amountInWordsTable.setWidthPercentage(90);
-
 
282
			amountInWordsTable.addCell(new Paragraph("Amount in Words:", FONT_BOLD));
-
 
283
			if (!stateGst) {
271
				if (stateGst) {
284
				amountInWordsTable.setWidths(new float[] { 2, 5.1f, 0.9f });
272
					grandTotalTable.setWidths(new float[] { 6.6f, .6f, .8f });
285
			} else {
273
				} else {
286
				amountInWordsTable.setWidths(new float[] { 2, 5.2f, 0.8f });
274
					grandTotalTable.setWidths(new float[] { 6.5f, .6f, .9f });
287
			}
275
				}
-
 
276
				grandTotalTable.setWidthPercentage(90);
288
 
277
 
289
			String amountInWords = toAmountInWords(pdfModel.getTotalAmount());
278
				Paragraph grandTotalParagraph = new Paragraph("Grand total", FONT_BOLD);
-
 
279
				grandTotalParagraph.setIndentationRight(20);
290
			amountInWordsTable.addCell(new Paragraph(amountInWords.toString(), FONT_BOLD));
280
				grandTotalTable.addCell(grandTotalParagraph);
291
			amountInWordsTable.addCell(new Paragraph("E & O.E", FONT_NORMAL));
281
				Paragraph rsParagraph = new Paragraph("Rs.", FONT_BOLD);
-
 
282
				grandTotalTable.addCell(rsParagraph);
-
 
283
				Paragraph amountParagraph = new Paragraph(String.format("%.2f", pdfModel.getTotalAmount()), FONT_BOLD);
292
			document.add(amountInWordsTable);
284
				grandTotalTable.addCell(amountParagraph);
293
 
285
 
294
			if (pdfModel.getPaymentOptions() != null) {
286
				document.add(grandTotalTable);
-
 
287
 
295
				PdfPTable paidAmountTable = new PdfPTable(2);
288
				PdfPTable amountInWordsTable = new PdfPTable(3);
296
				paidAmountTable.setWidthPercentage(90);
289
				amountInWordsTable.setWidthPercentage(90);
-
 
290
				amountInWordsTable.addCell(new Paragraph("Amount in Words:", FONT_BOLD));
297
				if (!stateGst) {
291
				if (!stateGst) {
298
					paidAmountTable.setWidths(new float[] { 7.1f, 0.9f });
292
					amountInWordsTable.setWidths(new float[] { 2, 5.1f, 0.9f });
299
				} else {
293
				} else {
300
					paidAmountTable.setWidths(new float[] { 7.2f, 0.8f });
294
					amountInWordsTable.setWidths(new float[] { 2, 5.2f, 0.8f });
301
				}
295
				}
302
				float totalPaidValue = 0;
-
 
303
				for (CustomPaymentOption paymentOption : pdfModel.getPaymentOptions()) {
-
 
304
					PdfPCell cell = new PdfPCell(
-
 
305
							new Paragraph(10, "Paid Through " + paymentOption.getPaymentOption(), FONT_BOLD));
-
 
306
					cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
-
 
307
					cell.setPadding(5);
-
 
308
					paidAmountTable.addCell(cell);
-
 
309
 
-
 
310
					PdfPCell cell1 = new PdfPCell(new Paragraph(10,
-
 
311
							FormattingUtils.formatDecimalTwoDigits(paymentOption.getAmount()), FONT_BOLD));
-
 
312
					cell1.setPadding(5);
-
 
313
					paidAmountTable.addCell(cell1);
-
 
314
					totalPaidValue += paymentOption.getAmount();
-
 
315
 
-
 
316
				}
-
 
317
				PdfPCell totalPaidCell = new PdfPCell(new Paragraph(10, "Total Paid", FONT_BOLD));
-
 
318
				totalPaidCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
-
 
319
				totalPaidCell.setPadding(5);
-
 
320
				paidAmountTable.addCell(totalPaidCell);
-
 
321
 
-
 
322
				PdfPCell totalPaidValueCell = new PdfPCell(
-
 
323
						new Paragraph(10, FormattingUtils.formatDecimalTwoDigits(totalPaidValue), FONT_BOLD));
-
 
324
				totalPaidValueCell.setPadding(5);
-
 
325
				paidAmountTable.addCell(totalPaidValueCell);
-
 
326
 
296
 
-
 
297
				String amountInWords = toAmountInWords(pdfModel.getTotalAmount());
-
 
298
				amountInWordsTable.addCell(new Paragraph(amountInWords.toString(), FONT_BOLD));
-
 
299
				amountInWordsTable.addCell(new Paragraph("E & O.E", FONT_NORMAL));
327
				document.add(paidAmountTable);
300
				document.add(amountInWordsTable);
-
 
301
 
-
 
302
				if (pdfModel.getPaymentOptions() != null) {
-
 
303
					PdfPTable paidAmountTable = new PdfPTable(2);
-
 
304
					paidAmountTable.setWidthPercentage(90);
-
 
305
					if (!stateGst) {
-
 
306
						paidAmountTable.setWidths(new float[] { 7.1f, 0.9f });
-
 
307
					} else {
-
 
308
						paidAmountTable.setWidths(new float[] { 7.2f, 0.8f });
-
 
309
					}
-
 
310
					float totalPaidValue = 0;
-
 
311
					for (CustomPaymentOption paymentOption : pdfModel.getPaymentOptions()) {
-
 
312
						PdfPCell cell = new PdfPCell(
-
 
313
								new Paragraph(10, "Paid Through " + paymentOption.getPaymentOption(), FONT_BOLD));
-
 
314
						cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
-
 
315
						cell.setPadding(5);
-
 
316
						paidAmountTable.addCell(cell);
-
 
317
 
-
 
318
						PdfPCell cell1 = new PdfPCell(new Paragraph(10,
-
 
319
								FormattingUtils.formatDecimalTwoDigits(paymentOption.getAmount()), FONT_BOLD));
-
 
320
						cell1.setPadding(5);
-
 
321
						paidAmountTable.addCell(cell1);
-
 
322
						totalPaidValue += paymentOption.getAmount();
-
 
323
 
328
			}
324
					}
-
 
325
					PdfPCell totalPaidCell = new PdfPCell(new Paragraph(10, "Total Paid", FONT_BOLD));
-
 
326
					totalPaidCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
-
 
327
					totalPaidCell.setPadding(5);
-
 
328
					paidAmountTable.addCell(totalPaidCell);
-
 
329
 
-
 
330
					PdfPCell totalPaidValueCell = new PdfPCell(
-
 
331
							new Paragraph(10, FormattingUtils.formatDecimalTwoDigits(totalPaidValue), FONT_BOLD));
-
 
332
					totalPaidValueCell.setPadding(5);
-
 
333
					paidAmountTable.addCell(totalPaidValueCell);
329
 
334
 
330
			StringBuffer sb = new StringBuffer();
-
 
331
			List<String> tncs = pdfModel.getTncs();
-
 
332
			for (String tnc : tncs) {
-
 
333
				sb.append(tnc).append("\n");
335
					document.add(paidAmountTable);
334
			}
336
				}
335
 
337
 
-
 
338
				StringBuffer sb = new StringBuffer();
-
 
339
				List<String> tncs = pdfModel.getTncs();
-
 
340
				for (String tnc : tncs) {
-
 
341
					sb.append(tnc).append("\n");
-
 
342
				}
-
 
343
 
336
			Paragraph warningParagraph = new Paragraph(sb.toString(), FONT_NORMAL);
344
				Paragraph warningParagraph = new Paragraph(sb.toString(), FONT_NORMAL);
337
			warningParagraph.setIndentationLeft(40);
345
				warningParagraph.setIndentationLeft(40);
338
			document.add(Chunk.NEWLINE);
346
				document.add(Chunk.NEWLINE);
339
			document.add(warningParagraph);
347
				document.add(warningParagraph);
340
			document.close(); // no need to close PDFwriter?
348
				document.close(); // no need to close PDFwriter?
341
			if(pdfModel.isCancelled()) {
349
				if (pdfModel.isCancelled()) {
342
				stampCancelled(oos, outputStream);
350
					stampCancelled(oos, outputStream);
-
 
351
				}
-
 
352
				document.newPage();
343
			}
353
			}
344
 
354
 
345
		} catch (DocumentException e) {
355
		} catch (DocumentException e) {
346
			LOGGER.error("Unable to write data to pdf file : ", e);
356
			LOGGER.error("Unable to write data to pdf file : ", e);
347
		} catch (Exception e) {
357
		} catch (Exception e) {
Line 349... Line 359...
349
			e.printStackTrace();
359
			e.printStackTrace();
350
		}
360
		}
351
 
361
 
352
	}
362
	}
353
 
363
 
354
	private static void stampCancelled(ByteArrayOutputStream byteStream, OutputStream os) throws IOException, DocumentException {
364
	private static void stampCancelled(ByteArrayOutputStream byteStream, OutputStream os)
-
 
365
			throws IOException, DocumentException {
355
		ByteArrayInputStream bais = new ByteArrayInputStream(byteStream.toByteArray());
366
		ByteArrayInputStream bais = new ByteArrayInputStream(byteStream.toByteArray());
356
	    PdfReader pdfReader = new PdfReader(bais);
367
		PdfReader pdfReader = new PdfReader(bais);
357
	    int n = pdfReader.getNumberOfPages();
368
		int n = pdfReader.getNumberOfPages();
358
	    PdfStamper pdfStamper = new PdfStamper(pdfReader, os);
369
		PdfStamper pdfStamper = new PdfStamper(pdfReader, os);
359
	    pdfStamper.setRotateContents(false);
370
		pdfStamper.setRotateContents(false);
360
	    // text watermark
371
		// text watermark
361
        Font f = new Font(FontFamily.HELVETICA, 30);
372
		Font f = new Font(FontFamily.HELVETICA, 30);
362
        Phrase p = new Phrase("My watermark (text)", f);
373
		Phrase p = new Phrase("My watermark (text)", f);
363
        URL cancelledImgUrl = PdfUtils.class.getClassLoader().getResource("cancelled.png");
374
		URL cancelledImgUrl = PdfUtils.class.getClassLoader().getResource("cancelled.png");
364
	    Image img = Image.getInstance(cancelledImgUrl);
375
		Image img = Image.getInstance(cancelledImgUrl);
365
        float w = img.getScaledWidth()/2;
376
		float w = img.getScaledWidth() / 2;
366
        float h = img.getScaledHeight()/2;
377
		float h = img.getScaledHeight() / 2;
367
        // transparency
378
		// transparency
368
        PdfGState gs1 = new PdfGState();
379
		PdfGState gs1 = new PdfGState();
369
        gs1.setFillOpacity(0.5f);
380
		gs1.setFillOpacity(0.5f);
370
        //properties
381
		// properties
371
        PdfContentByte over;
382
		PdfContentByte over;
372
        Rectangle pagesize;
383
		Rectangle pagesize;
373
        float x, y;
384
		float x, y;
374
 
385
 
375
	    // loop over every page
386
		// loop over every page
376
	    for (int i = 1; i <= n; i++) {
387
		for (int i = 1; i <= n; i++) {
377
	    	pagesize = pdfReader.getPageSize(i);
388
			pagesize = pdfReader.getPageSize(i);
378
            x = (pagesize.getLeft() + pagesize.getRight()) / 2;
389
			x = (pagesize.getLeft() + pagesize.getRight()) / 2;
379
            y = (pagesize.getTop() + pagesize.getBottom()) / 2;
390
			y = (pagesize.getTop() + pagesize.getBottom()) / 2;
380
            over = pdfStamper.getOverContent(i);
391
			over = pdfStamper.getOverContent(i);
381
            over.saveState();
392
			over.saveState();
382
            over.setGState(gs1);
393
			over.setGState(gs1);
383
            over.addImage(img, w, 0, 0, h, x - (w / 2), y - (h / 2));
394
			over.addImage(img, w, 0, 0, h, x - (w / 2), y - (h / 2));
384
            over.restoreState();
395
			over.restoreState();
385
        }
396
		}
386
	    pdfStamper.close();
397
		pdfStamper.close();
387
        pdfReader.close();
398
		pdfReader.close();
388
 
399
 
389
	}
400
	}
390
 
401
 
391
	public static void generateAndWriteDebitNote(List<DebitNotePdfModel> debitNotePdfModels,
402
	public static void generateAndWriteDebitNote(List<DebitNotePdfModel> debitNotePdfModels,
392
			OutputStream outputStream) {
403
			OutputStream outputStream) {