| Line 22... |
Line 22... |
| 22 |
public class PdfUtils {
|
22 |
public class PdfUtils {
|
| 23 |
|
23 |
|
| 24 |
private static final Font FONT_TITLE = new Font(Font.FontFamily.HELVETICA, 18, Font.BOLD);
|
24 |
private static final Font FONT_TITLE = new Font(Font.FontFamily.HELVETICA, 18, Font.BOLD);
|
| 25 |
private static Font FONT_NORMAL = new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.NORMAL);
|
25 |
private static Font FONT_NORMAL = new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.NORMAL);
|
| 26 |
private static Font FONT_BOLD = new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.BOLD);
|
26 |
private static Font FONT_BOLD = new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.BOLD);
|
| 27 |
// private static Font fontTableHeader = new
|
- |
|
| 28 |
// Font(Font.FontFamily.TIMES_ROMAN, 14, Font.BOLD);
|
27 |
private static Font FONT_MARGIN_HEADER = new Font(Font.FontFamily.HELVETICA, 9, Font.BOLDITALIC);
|
| 29 |
public static final String INVOICE_TITLE = "TAX INVOICE";
|
28 |
public static final String INVOICE_TITLE = "TAX INVOICE";
|
| 30 |
public static final String DEBIT_NOTE_TITLE = "DEBIT NOTE";
|
29 |
public static final String DEBIT_NOTE_TITLE = "DEBIT NOTE";
|
| 31 |
public static final String SECURITY_DEPOSIT = "SECURITY DEPOSIT RECEIPT";
|
30 |
public static final String SECURITY_DEPOSIT = "SECURITY DEPOSIT RECEIPT";
|
| 32 |
|
31 |
|
| 33 |
private static float[] igstWidthsWithDiscount = new float[]{.2f, 2.6f, 0.7f, .4f, 0.7f, 0.6f, .7f, .6f, 0.7f};
|
32 |
private static float[] igstWidthsWithDiscount = new float[]{.2f, 2.6f, 0.7f, .4f, 0.7f, 0.6f, .7f, .6f, 0.7f};
|
| 34 |
private static float[] stateWidthsWithDiscount = new float[]{.2f, 2.1f, 0.7f, .3f, 0.6f, 0.5f, .7f, .6f, .6f, .7f};
|
33 |
private static float[] stateWidthsWithDiscount = new float[]{.2f, 2.1f, 0.7f, .3f, 0.6f, 0.5f, .7f, .6f, .6f, .7f};
|
| 35 |
|
34 |
|
| - |
|
35 |
// Column widths without discount column (for Transaction.Order invoices)
|
| - |
|
36 |
private static float[] igstWidthsNoDiscount = new float[]{.2f, 2.8f, 0.7f, .4f, 0.8f, .7f, .6f, 0.8f};
|
| - |
|
37 |
private static float[] stateWidthsNoDiscount = new float[]{.2f, 2.3f, 0.7f, .4f, 0.7f, .7f, .6f, .6f, .8f};
|
| - |
|
38 |
|
| 36 |
private static float[] igstWidths = new float[]{.6f, 2.6f, 0.7f, .4f, 0.7f, .7f, .6f, 0.6f, 0.9f};
|
39 |
private static float[] igstWidths = new float[]{.6f, 2.6f, 0.7f, .4f, 0.7f, .7f, .6f, 0.6f, 0.9f};
|
| 37 |
private static float[] stateWidths = new float[]{.6f, 2.1f, 0.7f, .3f, 0.6f, .7f, .5f, .6f, .5f, .6f, .8f};
|
40 |
private static float[] stateWidths = new float[]{.6f, 2.1f, 0.7f, .3f, 0.6f, .7f, .5f, .6f, .5f, .6f, .8f};
|
| 38 |
|
41 |
|
| 39 |
private static float[] igstWidthsCrNote = new float[]{2.6f, 0.7f, .4f, 0.7f, .7f, .6f, 0.6f, 0.9f};
|
42 |
private static float[] igstWidthsCrNote = new float[]{2.6f, 0.7f, .4f, 0.7f, .7f, .6f, 0.6f, 0.9f};
|
| 40 |
private static float[] stateWidthsCrNote = new float[]{2.1f, 0.7f, .3f, 0.6f, .7f, .5f, .6f, .5f, .6f, .8f};
|
43 |
private static float[] stateWidthsCrNote = new float[]{2.1f, 0.7f, .3f, 0.6f, .7f, .5f, .6f, .5f, .6f, .8f};
|
| Line 106... |
Line 109... |
| 106 |
|
109 |
|
| 107 |
document.add(paragraphTitle);
|
110 |
document.add(paragraphTitle);
|
| 108 |
|
111 |
|
| 109 |
Rectangle rectangle = document.getPageSize();
|
112 |
Rectangle rectangle = document.getPageSize();
|
| 110 |
|
113 |
|
| 111 |
/*Paragraph paragraphTitle = new Paragraph(INVOICE_TITLE, FONT_TITLE);
|
- |
|
| 112 |
paragraphTitle.setAlignment(Element.ALIGN_CENTER);*/
|
- |
|
| 113 |
/*pdfCell.addElement(paragraphTitle);
|
- |
|
| 114 |
pdfCell.setBorder(Rectangle.NO_BORDER);*/
|
- |
|
| 115 |
if (pdfModel.getIrnModel() != null) {
|
114 |
if (pdfModel.getIrnModel() != null) {
|
| 116 |
addIrnDetails(pdfModel.getIrnModel(), rectangle, document);
|
115 |
addIrnDetails(pdfModel.getIrnModel(), rectangle, document);
|
| 117 |
}
|
116 |
}
|
| 118 |
|
117 |
|
| 119 |
|
118 |
|
| Line 161... |
Line 160... |
| 161 |
dateKey.setBorder(Rectangle.NO_BORDER);
|
160 |
dateKey.setBorder(Rectangle.NO_BORDER);
|
| 162 |
|
161 |
|
| 163 |
PdfPCell dateValue = new PdfPCell(new Paragraph(pdfModel.getInvoiceDate(), FONT_NORMAL));
|
162 |
PdfPCell dateValue = new PdfPCell(new Paragraph(pdfModel.getInvoiceDate(), FONT_NORMAL));
|
| 164 |
dateValue.setBorder(Rectangle.NO_BORDER);
|
163 |
dateValue.setBorder(Rectangle.NO_BORDER);
|
| 165 |
tableInvoiceDate.addCell(invoiceNumberKey);
|
164 |
tableInvoiceDate.addCell(invoiceNumberKey);
|
| 166 |
// tableInvoiceDate.addCell(blankCell);
|
- |
|
| 167 |
tableInvoiceDate.addCell(invoiceNumberValue);
|
165 |
tableInvoiceDate.addCell(invoiceNumberValue);
|
| 168 |
tableInvoiceDate.addCell(dateKey);
|
166 |
tableInvoiceDate.addCell(dateKey);
|
| 169 |
// tableInvoiceDate.addCell(blankCell);
|
- |
|
| 170 |
tableInvoiceDate.addCell(dateValue);
|
167 |
tableInvoiceDate.addCell(dateValue);
|
| 171 |
tableInvoiceDateRetailer.addCell(tableInvoiceDate);
|
168 |
tableInvoiceDateRetailer.addCell(tableInvoiceDate);
|
| 172 |
tableInvoiceDateRetailer.addCell(columnRetailerInfo);
|
169 |
tableInvoiceDateRetailer.addCell(columnRetailerInfo);
|
| 173 |
|
170 |
|
| 174 |
tableCustomerRetailer.addCell(columnCustomerInfo);
|
171 |
tableCustomerRetailer.addCell(columnCustomerInfo);
|
| 175 |
tableCustomerRetailer.addCell(tableInvoiceDateRetailer);
|
172 |
tableCustomerRetailer.addCell(tableInvoiceDateRetailer);
|
| 176 |
|
173 |
|
| - |
|
174 |
boolean showDiscount = pdfModel.isShowDiscountColumn();
|
| 177 |
PdfPTable orders = null;
|
175 |
PdfPTable orders = null;
|
| 178 |
if (stateGst) {
|
176 |
if (stateGst) {
|
| - |
|
177 |
if (showDiscount) {
|
| 179 |
orders = new PdfPTable(stateWidthsWithDiscount.length);
|
178 |
orders = new PdfPTable(stateWidthsWithDiscount.length);
|
| 180 |
orders.setWidths(stateWidthsWithDiscount);
|
179 |
orders.setWidths(stateWidthsWithDiscount);
|
| - |
|
180 |
} else {
|
| - |
|
181 |
orders = new PdfPTable(stateWidthsNoDiscount.length);
|
| - |
|
182 |
orders.setWidths(stateWidthsNoDiscount);
|
| - |
|
183 |
}
|
| 181 |
} else {
|
184 |
} else {
|
| - |
|
185 |
if (showDiscount) {
|
| 182 |
orders = new PdfPTable(igstWidthsWithDiscount.length);
|
186 |
orders = new PdfPTable(igstWidthsWithDiscount.length);
|
| 183 |
orders.setWidths(igstWidthsWithDiscount);
|
187 |
orders.setWidths(igstWidthsWithDiscount);
|
| - |
|
188 |
} else {
|
| - |
|
189 |
orders = new PdfPTable(igstWidthsNoDiscount.length);
|
| - |
|
190 |
orders.setWidths(igstWidthsNoDiscount);
|
| - |
|
191 |
}
|
| 184 |
}
|
192 |
}
|
| 185 |
orders.setWidthPercentage(90);
|
193 |
orders.setWidthPercentage(90);
|
| 186 |
orders.addCell(new Paragraph("Sl", FONT_BOLD));
|
194 |
orders.addCell(new Paragraph("Sl", FONT_BOLD));
|
| 187 |
orders.addCell(new Paragraph("Description", FONT_BOLD));
|
195 |
orders.addCell(new Paragraph("Description", FONT_BOLD));
|
| 188 |
orders.addCell(new Paragraph("HSN", FONT_BOLD));
|
196 |
orders.addCell(new Paragraph("HSN", FONT_BOLD));
|
| 189 |
orders.addCell(new Paragraph("Qty", FONT_BOLD));
|
197 |
orders.addCell(new Paragraph("Qty", FONT_BOLD));
|
| 190 |
orders.addCell(new Paragraph("Rate\n(Per pc)", FONT_BOLD));
|
198 |
orders.addCell(new Paragraph("Rate\n(Per pc)", FONT_BOLD));
|
| - |
|
199 |
if (showDiscount) {
|
| 191 |
orders.addCell(new Paragraph("Discount", FONT_BOLD));
|
200 |
orders.addCell(new Paragraph("Discount", FONT_BOLD));
|
| - |
|
201 |
}
|
| 192 |
orders.addCell(new Paragraph("Total\nTaxable", FONT_BOLD));
|
202 |
orders.addCell(new Paragraph("Total\nTaxable", FONT_BOLD));
|
| 193 |
if (!stateGst) {
|
203 |
if (!stateGst) {
|
| 194 |
orders.addCell(new Paragraph("IGST", FONT_BOLD));
|
204 |
orders.addCell(new Paragraph("IGST", FONT_BOLD));
|
| 195 |
// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1});
|
- |
|
| 196 |
// total 8f
|
- |
|
| 197 |
} else {
|
205 |
} else {
|
| 198 |
orders.addCell(new Paragraph("CGST", FONT_BOLD));
|
206 |
orders.addCell(new Paragraph("CGST", FONT_BOLD));
|
| 199 |
orders.addCell(new Paragraph("SGST", FONT_BOLD));
|
207 |
orders.addCell(new Paragraph("SGST", FONT_BOLD));
|
| 200 |
// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1, 1, 1});
|
- |
|
| 201 |
// total 8f
|
- |
|
| 202 |
}
|
208 |
}
|
| 203 |
orders.addCell(new Paragraph("Total", FONT_BOLD));
|
209 |
orders.addCell(new Paragraph("Total", FONT_BOLD));
|
| 204 |
|
210 |
|
| 205 |
// orders.addCell(new Paragraph("Item Total (Rs)", FONT_BOLD));
|
- |
|
| 206 |
|
- |
|
| 207 |
orders.setHeaderRows(1);
|
211 |
orders.setHeaderRows(1);
|
| 208 |
// orders.setSkipFirstHeader(true);
|
- |
|
| 209 |
|
212 |
|
| 210 |
float igstTotalAmount = 0, cgstTotalAmount = 0, sgstTotalAmount = 0;
|
213 |
float igstTotalAmount = 0, cgstTotalAmount = 0, sgstTotalAmount = 0;
|
| 211 |
int index = 1;
|
214 |
int index = 1;
|
| - |
|
215 |
boolean marginSeparatorAdded = false;
|
| 212 |
for (CustomOrderItem orderItem : orderItems) {
|
216 |
for (CustomOrderItem orderItem : orderItems) {
|
| - |
|
217 |
// Add margin scheme separator before first margin scheme item
|
| - |
|
218 |
if (orderItem.isMarginScheme() && !marginSeparatorAdded) {
|
| - |
|
219 |
int numColumns = stateGst
|
| - |
|
220 |
? (showDiscount ? stateWidthsWithDiscount.length : stateWidthsNoDiscount.length)
|
| - |
|
221 |
: (showDiscount ? igstWidthsWithDiscount.length : igstWidthsNoDiscount.length);
|
| - |
|
222 |
addMarginSchemeSeparator(orders, numColumns);
|
| - |
|
223 |
marginSeparatorAdded = true;
|
| - |
|
224 |
}
|
| - |
|
225 |
|
| 213 |
orders.addCell(new Paragraph(String.valueOf(index++), FONT_NORMAL));
|
226 |
orders.addCell(new Paragraph(String.valueOf(index++), FONT_NORMAL));
|
| 214 |
orders.addCell(new Paragraph(orderItem.getDescription(), FONT_NORMAL));
|
227 |
orders.addCell(new Paragraph(orderItem.getDescription(), FONT_NORMAL));
|
| 215 |
orders.addCell(new Paragraph(orderItem.getHsnCode(), FONT_NORMAL));
|
228 |
orders.addCell(new Paragraph(orderItem.getHsnCode(), FONT_NORMAL));
|
| 216 |
orders.addCell(new Paragraph(String.valueOf(orderItem.getQuantity()), FONT_NORMAL));
|
229 |
orders.addCell(new Paragraph(String.valueOf(orderItem.getQuantity()), FONT_NORMAL));
|
| - |
|
230 |
|
| - |
|
231 |
if (orderItem.isMarginScheme()) {
|
| - |
|
232 |
// For margin scheme: Rate = Selling Price, Discount shows Purchase Price, Taxable = Margin
|
| 217 |
orders.addCell(new Paragraph(String.format("%.2f", orderItem.getRate()), FONT_NORMAL));
|
233 |
orders.addCell(new Paragraph(String.format("%.2f", orderItem.getSellingPrice()), FONT_NORMAL));
|
| - |
|
234 |
if (showDiscount) {
|
| - |
|
235 |
orders.addCell(new Paragraph(String.format("%.2f\n(Purchase)", orderItem.getPurchasePrice()), FONT_NORMAL));
|
| - |
|
236 |
}
|
| - |
|
237 |
} else {
|
| 218 |
orders.addCell(new Paragraph(String.format("%.2f", orderItem.getDiscount()), FONT_NORMAL));
|
238 |
orders.addCell(new Paragraph(String.format("%.2f", orderItem.getRate()), FONT_NORMAL));
|
| - |
|
239 |
if (showDiscount) {
|
| - |
|
240 |
// For FOFO: show "-" if discount is 0, otherwise show the discount value
|
| - |
|
241 |
String discountText = orderItem.getDiscount() == 0 ? "-" : String.format("%.2f", orderItem.getDiscount());
|
| - |
|
242 |
orders.addCell(new Paragraph(discountText, FONT_NORMAL));
|
| - |
|
243 |
}
|
| - |
|
244 |
}
|
| 219 |
orders.addCell(new Paragraph(String.format("%.2f", orderItem.getAmount()), FONT_NORMAL));
|
245 |
orders.addCell(new Paragraph(String.format("%.2f", orderItem.getAmount()), FONT_NORMAL));
|
| 220 |
if (!stateGst) {
|
246 |
if (!stateGst) {
|
| 221 |
orders.addCell(new Paragraph(String.format("%.2f%n(@%.0f%%)", orderItem.getIgstAmount(), orderItem.getIgstRate()), FONT_NORMAL));
|
247 |
orders.addCell(new Paragraph(String.format("%.2f%n(@%.0f%%)", orderItem.getIgstAmount(), orderItem.getIgstRate()), FONT_NORMAL));
|
| 222 |
igstTotalAmount = igstTotalAmount + orderItem.getIgstAmount();
|
248 |
igstTotalAmount = igstTotalAmount + orderItem.getIgstAmount();
|
| 223 |
} else {
|
249 |
} else {
|
| Line 225... |
Line 251... |
| 225 |
orders.addCell(new Paragraph(String.format("%.2f%n(@%.0f%%)", orderItem.getSgstAmount(), orderItem.getSgstRate()), FONT_NORMAL));
|
251 |
orders.addCell(new Paragraph(String.format("%.2f%n(@%.0f%%)", orderItem.getSgstAmount(), orderItem.getSgstRate()), FONT_NORMAL));
|
| 226 |
cgstTotalAmount = cgstTotalAmount + orderItem.getCgstAmount();
|
252 |
cgstTotalAmount = cgstTotalAmount + orderItem.getCgstAmount();
|
| 227 |
sgstTotalAmount = sgstTotalAmount + orderItem.getSgstAmount();
|
253 |
sgstTotalAmount = sgstTotalAmount + orderItem.getSgstAmount();
|
| 228 |
}
|
254 |
}
|
| 229 |
orders.addCell(new Paragraph(String.format("%.0f", orderItem.getNetAmount()), FONT_NORMAL));
|
255 |
orders.addCell(new Paragraph(String.format("%.0f", orderItem.getNetAmount()), FONT_NORMAL));
|
| 230 |
// orders.addCell(new Paragraph(String.format("%.2f",
|
- |
|
| 231 |
// orderItem.getItemTotal()), FONT_NORMAL));
|
- |
|
| 232 |
}
|
256 |
}
|
| 233 |
if (pdfModel.getInsurancePolicies() != null) {
|
257 |
if (pdfModel.getInsurancePolicies() != null) {
|
| 234 |
for (CustomInsurancePolicy insurancePolicy : pdfModel.getInsurancePolicies()) {
|
258 |
for (CustomInsurancePolicy insurancePolicy : pdfModel.getInsurancePolicies()) {
|
| 235 |
orders.addCell(new Paragraph(String.valueOf(index++), FONT_NORMAL));
|
259 |
orders.addCell(new Paragraph(String.valueOf(index++), FONT_NORMAL));
|
| 236 |
orders.addCell(new Paragraph(insurancePolicy.getDescription(), FONT_NORMAL));
|
260 |
orders.addCell(new Paragraph(insurancePolicy.getDescription(), FONT_NORMAL));
|
| 237 |
orders.addCell(new Paragraph(insurancePolicy.getHsnCode(), FONT_NORMAL));
|
261 |
orders.addCell(new Paragraph(insurancePolicy.getHsnCode(), FONT_NORMAL));
|
| 238 |
orders.addCell(new Paragraph("1", FONT_NORMAL));
|
262 |
orders.addCell(new Paragraph("1", FONT_NORMAL));
|
| 239 |
orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getRate()), FONT_NORMAL));
|
263 |
orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getRate()), FONT_NORMAL));
|
| - |
|
264 |
if (showDiscount) {
|
| 240 |
orders.addCell(new Paragraph("-", FONT_NORMAL));
|
265 |
orders.addCell(new Paragraph("-", FONT_NORMAL));
|
| - |
|
266 |
}
|
| 241 |
orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getRate()), FONT_NORMAL));
|
267 |
orders.addCell(new Paragraph(String.format("%.2f", insurancePolicy.getRate()), FONT_NORMAL));
|
| 242 |
if (!stateGst) {
|
268 |
if (!stateGst) {
|
| 243 |
orders.addCell(new Paragraph(String.format("%.2f%n(@%.0f%%)", insurancePolicy.getIgstAmount(), insurancePolicy.getIgstRate()), FONT_NORMAL));
|
269 |
orders.addCell(new Paragraph(String.format("%.2f%n(@%.0f%%)", insurancePolicy.getIgstAmount(), insurancePolicy.getIgstRate()), FONT_NORMAL));
|
| 244 |
igstTotalAmount = igstTotalAmount + insurancePolicy.getIgstAmount();
|
270 |
igstTotalAmount = igstTotalAmount + insurancePolicy.getIgstAmount();
|
| 245 |
} else {
|
271 |
} else {
|
| Line 338... |
Line 364... |
| 338 |
Paragraph autoGenerateParagraph = new Paragraph("Note - This is computer generated Invoice, no signature is required", FONT_NORMAL);
|
364 |
Paragraph autoGenerateParagraph = new Paragraph("Note - This is computer generated Invoice, no signature is required", FONT_NORMAL);
|
| 339 |
autoGenerateParagraph.setAlignment(Element.ALIGN_CENTER);
|
365 |
autoGenerateParagraph.setAlignment(Element.ALIGN_CENTER);
|
| 340 |
document.add(autoGenerateParagraph);
|
366 |
document.add(autoGenerateParagraph);
|
| 341 |
|
367 |
|
| 342 |
if(pdfModel.getCreditTerms()!=null) {
|
368 |
if(pdfModel.getCreditTerms()!=null) {
|
| 343 |
// Use monospaced Courier font to preserve spaces/indentation
|
- |
|
| 344 |
|
- |
|
| 345 |
// Title
|
- |
|
| 346 |
Paragraph title = new Paragraph("Credit terms :-\n", FONT_BOLD);
|
369 |
Paragraph title = new Paragraph("Credit terms :-\n", FONT_BOLD);
|
| 347 |
title.setIndentationLeft(25);
|
370 |
title.setIndentationLeft(25);
|
| 348 |
title.setIndentationRight(25);
|
371 |
title.setIndentationRight(25);
|
| 349 |
document.add(title);
|
372 |
document.add(title);
|
| 350 |
|
373 |
|
| 351 |
// Exact text block (with spaces preserved)
|
- |
|
| 352 |
StringBuffer termsBuffer = new StringBuffer();
|
374 |
StringBuffer termsBuffer = new StringBuffer();
|
| 353 |
int count = 0;
|
375 |
int count = 0;
|
| 354 |
for (String creditTerm : pdfModel.getCreditTerms()) {
|
376 |
for (String creditTerm : pdfModel.getCreditTerms()) {
|
| 355 |
count++;
|
377 |
count++;
|
| 356 |
termsBuffer.append(count).append(". ").append(creditTerm).append(".\n");
|
378 |
termsBuffer.append(count).append(". ").append(creditTerm).append(".\n");
|
| 357 |
}
|
379 |
}
|
| 358 |
|
380 |
|
| 359 |
|
- |
|
| 360 |
Paragraph body = new Paragraph(termsBuffer.toString(), FONT_NORMAL);
|
381 |
Paragraph body = new Paragraph(termsBuffer.toString(), FONT_NORMAL);
|
| 361 |
body.setIndentationLeft(25);
|
382 |
body.setIndentationLeft(25);
|
| 362 |
body.setIndentationRight(25);
|
383 |
body.setIndentationRight(25);
|
| 363 |
document.add(body);
|
384 |
document.add(body);
|
| 364 |
|
385 |
|
| 365 |
}
|
386 |
}
|
| - |
|
387 |
|
| - |
|
388 |
// Margin scheme declaration
|
| - |
|
389 |
addMarginSchemeDeclaration(document, pdfModel);
|
| - |
|
390 |
|
| 366 |
if (pdfModel.getTncs() != null) {
|
391 |
if (pdfModel.getTncs() != null) {
|
| 367 |
StringBuffer sb = new StringBuffer();
|
392 |
StringBuffer sb = new StringBuffer();
|
| 368 |
for (String tnc : pdfModel.getTncs()) {
|
393 |
for (String tnc : pdfModel.getTncs()) {
|
| 369 |
sb.append(tnc).append("\n");
|
394 |
sb.append(tnc).append("\n");
|
| 370 |
}
|
395 |
}
|
| Line 415... |
Line 440... |
| 415 |
pdfCell.addElement(ackDateParagraph);
|
440 |
pdfCell.addElement(ackDateParagraph);
|
| 416 |
taxTable.addCell(pdfCell);
|
441 |
taxTable.addCell(pdfCell);
|
| 417 |
document.add(taxTable);
|
442 |
document.add(taxTable);
|
| 418 |
}
|
443 |
}
|
| 419 |
|
444 |
|
| - |
|
445 |
private static void addMarginSchemeSeparator(PdfPTable table, int numColumns) {
|
| - |
|
446 |
PdfPCell separatorCell = new PdfPCell(new Paragraph("Items under Margin Scheme \u2013 Rule 32(5) of CGST Rules, 2017", FONT_MARGIN_HEADER));
|
| - |
|
447 |
separatorCell.setColspan(numColumns);
|
| - |
|
448 |
separatorCell.setBackgroundColor(new BaseColor(240, 240, 240));
|
| - |
|
449 |
separatorCell.setPadding(5);
|
| - |
|
450 |
separatorCell.setHorizontalAlignment(Element.ALIGN_CENTER);
|
| - |
|
451 |
table.addCell(separatorCell);
|
| - |
|
452 |
}
|
| - |
|
453 |
|
| - |
|
454 |
private static void addMarginSchemeDeclaration(Document document, InvoicePdfModel pdfModel) throws DocumentException {
|
| - |
|
455 |
if (pdfModel.getMarginSchemeDeclarations() != null && !pdfModel.getMarginSchemeDeclarations().isEmpty()) {
|
| - |
|
456 |
document.add(Chunk.NEWLINE);
|
| - |
|
457 |
Paragraph declarationTitle = new Paragraph("Margin Scheme Declaration:", FONT_BOLD);
|
| - |
|
458 |
declarationTitle.setIndentationLeft(25);
|
| - |
|
459 |
document.add(declarationTitle);
|
| - |
|
460 |
for (String declaration : pdfModel.getMarginSchemeDeclarations()) {
|
| - |
|
461 |
Paragraph declarationParagraph = new Paragraph("- " + declaration, FONT_NORMAL);
|
| - |
|
462 |
declarationParagraph.setIndentationLeft(30);
|
| - |
|
463 |
document.add(declarationParagraph);
|
| - |
|
464 |
}
|
| - |
|
465 |
}
|
| - |
|
466 |
}
|
| - |
|
467 |
|
| 420 |
private static void stampCancelled(ByteArrayOutputStream byteStream, List<Integer> cancelledPage) throws IOException, DocumentException {
|
468 |
private static void stampCancelled(ByteArrayOutputStream byteStream, List<Integer> cancelledPage) throws IOException, DocumentException {
|
| 421 |
ByteArrayInputStream bais = new ByteArrayInputStream(byteStream.toByteArray());
|
469 |
ByteArrayInputStream bais = new ByteArrayInputStream(byteStream.toByteArray());
|
| 422 |
PdfReader pdfReader = new PdfReader(bais);
|
470 |
PdfReader pdfReader = new PdfReader(bais);
|
| 423 |
int n = pdfReader.getNumberOfPages();
|
471 |
int n = pdfReader.getNumberOfPages();
|
| 424 |
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
472 |
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
| Line 590... |
Line 638... |
| 590 |
orders.addCell(new Paragraph("Rate\n(Per pc)", FONT_BOLD));
|
638 |
orders.addCell(new Paragraph("Rate\n(Per pc)", FONT_BOLD));
|
| 591 |
orders.addCell(new Paragraph("Total\nTaxable", FONT_BOLD));
|
639 |
orders.addCell(new Paragraph("Total\nTaxable", FONT_BOLD));
|
| 592 |
if (!stateGst) {
|
640 |
if (!stateGst) {
|
| 593 |
orders.addCell(new Paragraph("IGST\n%", FONT_BOLD));
|
641 |
orders.addCell(new Paragraph("IGST\n%", FONT_BOLD));
|
| 594 |
orders.addCell(new Paragraph("IGST", FONT_BOLD));
|
642 |
orders.addCell(new Paragraph("IGST", FONT_BOLD));
|
| 595 |
// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1});
|
- |
|
| 596 |
// total 8f
|
- |
|
| 597 |
} else {
|
643 |
} else {
|
| 598 |
orders.addCell(new Paragraph("CGST %", FONT_BOLD));
|
644 |
orders.addCell(new Paragraph("CGST %", FONT_BOLD));
|
| 599 |
orders.addCell(new Paragraph("CGST", FONT_BOLD));
|
645 |
orders.addCell(new Paragraph("CGST", FONT_BOLD));
|
| 600 |
orders.addCell(new Paragraph("SGST %", FONT_BOLD));
|
646 |
orders.addCell(new Paragraph("SGST %", FONT_BOLD));
|
| 601 |
orders.addCell(new Paragraph("SGST", FONT_BOLD));
|
647 |
orders.addCell(new Paragraph("SGST", FONT_BOLD));
|
| 602 |
// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1, 1,
|
- |
|
| 603 |
// 1});
|
- |
|
| 604 |
// total 8f
|
- |
|
| 605 |
}
|
648 |
}
|
| 606 |
orders.addCell(new Paragraph("Total", FONT_BOLD));
|
649 |
orders.addCell(new Paragraph("Total", FONT_BOLD));
|
| 607 |
|
650 |
|
| 608 |
orders.setHeaderRows(1);
|
651 |
orders.setHeaderRows(1);
|
| 609 |
|
652 |
|
| 610 |
float igstTotalAmount = 0, cgstTotalAmount = 0, sgstTotalAmount = 0;
|
653 |
float igstTotalAmount = 0, cgstTotalAmount = 0, sgstTotalAmount = 0;
|
| - |
|
654 |
boolean marginSeparatorAdded = false;
|
| 611 |
for (CustomOrderItem orderItem : orderItems) {
|
655 |
for (CustomOrderItem orderItem : orderItems) {
|
| - |
|
656 |
if (orderItem.isMarginScheme() && !marginSeparatorAdded) {
|
| - |
|
657 |
addMarginSchemeSeparator(orders, stateGst ? stateWidths.length : igstWidths.length);
|
| - |
|
658 |
marginSeparatorAdded = true;
|
| - |
|
659 |
}
|
| - |
|
660 |
|
| 612 |
orders.addCell(new Paragraph(String.valueOf(orderItem.getOrderId()), FONT_NORMAL));
|
661 |
orders.addCell(new Paragraph(String.valueOf(orderItem.getOrderId()), FONT_NORMAL));
|
| 613 |
orders.addCell(new Paragraph(orderItem.getDescription(), FONT_NORMAL));
|
662 |
orders.addCell(new Paragraph(orderItem.getDescription(), FONT_NORMAL));
|
| 614 |
orders.addCell(new Paragraph(orderItem.getHsnCode(), FONT_NORMAL));
|
663 |
orders.addCell(new Paragraph(orderItem.getHsnCode(), FONT_NORMAL));
|
| 615 |
orders.addCell(new Paragraph(String.valueOf(orderItem.getQuantity()), FONT_NORMAL));
|
664 |
orders.addCell(new Paragraph(String.valueOf(orderItem.getQuantity()), FONT_NORMAL));
|
| 616 |
orders.addCell(new Paragraph(String.format("%.2f", orderItem.getRate()), FONT_NORMAL));
|
665 |
orders.addCell(new Paragraph(String.format("%.2f", orderItem.getRate()), FONT_NORMAL));
|
| Line 669... |
Line 718... |
| 669 |
String amountInWords = toAmountInWords(pdfModel.getTotalAmount());
|
718 |
String amountInWords = toAmountInWords(pdfModel.getTotalAmount());
|
| 670 |
amountInWordsTable.addCell(new Paragraph(amountInWords.toString(), FONT_BOLD));
|
719 |
amountInWordsTable.addCell(new Paragraph(amountInWords.toString(), FONT_BOLD));
|
| 671 |
amountInWordsTable.addCell(new Paragraph("E & O.E", FONT_NORMAL));
|
720 |
amountInWordsTable.addCell(new Paragraph("E & O.E", FONT_NORMAL));
|
| 672 |
document.add(amountInWordsTable);
|
721 |
document.add(amountInWordsTable);
|
| 673 |
|
722 |
|
| - |
|
723 |
// Margin scheme declaration for debit notes
|
| - |
|
724 |
addMarginSchemeDeclaration(document, pdfModel);
|
| - |
|
725 |
|
| 674 |
document.newPage();
|
726 |
document.newPage();
|
| 675 |
}
|
727 |
}
|
| 676 |
document.close(); // no need to close PDFwriter?
|
728 |
document.close(); // no need to close PDFwriter?
|
| 677 |
|
729 |
|
| 678 |
} catch (DocumentException e) {
|
730 |
} catch (DocumentException e) {
|
| Line 807... |
Line 859... |
| 807 |
orders.addCell(new Paragraph("Rate\n(Per pc)", FONT_BOLD));
|
859 |
orders.addCell(new Paragraph("Rate\n(Per pc)", FONT_BOLD));
|
| 808 |
orders.addCell(new Paragraph("Total\nTaxable", FONT_BOLD));
|
860 |
orders.addCell(new Paragraph("Total\nTaxable", FONT_BOLD));
|
| 809 |
if (!stateGst) {
|
861 |
if (!stateGst) {
|
| 810 |
orders.addCell(new Paragraph("IGST%", FONT_BOLD));
|
862 |
orders.addCell(new Paragraph("IGST%", FONT_BOLD));
|
| 811 |
orders.addCell(new Paragraph("IGST", FONT_BOLD));
|
863 |
orders.addCell(new Paragraph("IGST", FONT_BOLD));
|
| 812 |
// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1});
|
- |
|
| 813 |
// total 8f
|
- |
|
| 814 |
} else {
|
864 |
} else {
|
| 815 |
orders.addCell(new Paragraph("CGST %", FONT_BOLD));
|
865 |
orders.addCell(new Paragraph("CGST %", FONT_BOLD));
|
| 816 |
orders.addCell(new Paragraph("CGST", FONT_BOLD));
|
866 |
orders.addCell(new Paragraph("CGST", FONT_BOLD));
|
| 817 |
orders.addCell(new Paragraph("SGST %", FONT_BOLD));
|
867 |
orders.addCell(new Paragraph("SGST %", FONT_BOLD));
|
| 818 |
orders.addCell(new Paragraph("SGST", FONT_BOLD));
|
868 |
orders.addCell(new Paragraph("SGST", FONT_BOLD));
|
| 819 |
// orders.setWidths(new float[]{1, 3, 1, 1, 1, 1, 1, 1, 1,
|
- |
|
| 820 |
// 1});
|
- |
|
| 821 |
// total 8f
|
- |
|
| 822 |
}
|
869 |
}
|
| 823 |
orders.addCell(new Paragraph("Total", FONT_BOLD));
|
870 |
orders.addCell(new Paragraph("Total", FONT_BOLD));
|
| 824 |
|
871 |
|
| 825 |
orders.setHeaderRows(1);
|
872 |
orders.setHeaderRows(1);
|
| 826 |
|
873 |
|
| 827 |
float igstTotalAmount = 0, cgstTotalAmount = 0, sgstTotalAmount = 0;
|
874 |
float igstTotalAmount = 0, cgstTotalAmount = 0, sgstTotalAmount = 0;
|
| - |
|
875 |
boolean marginSeparatorAdded = false;
|
| 828 |
for (CustomOrderItem orderItem : orderItems) {
|
876 |
for (CustomOrderItem orderItem : orderItems) {
|
| - |
|
877 |
if (orderItem.isMarginScheme() && !marginSeparatorAdded) {
|
| - |
|
878 |
addMarginSchemeSeparator(orders, stateGst ? stateWidthsCrNote.length : igstWidthsCrNote.length);
|
| - |
|
879 |
marginSeparatorAdded = true;
|
| - |
|
880 |
}
|
| - |
|
881 |
|
| 829 |
LOGGER.info("Custom Order Item - {}", orderItem);
|
882 |
LOGGER.info("Custom Order Item - {}", orderItem);
|
| 830 |
orders.addCell(new Paragraph(orderItem.getDescription(), FONT_NORMAL));
|
883 |
orders.addCell(new Paragraph(orderItem.getDescription(), FONT_NORMAL));
|
| 831 |
orders.addCell(new Paragraph(orderItem.getHsnCode(), FONT_NORMAL));
|
884 |
orders.addCell(new Paragraph(orderItem.getHsnCode(), FONT_NORMAL));
|
| 832 |
orders.addCell(new Paragraph(String.valueOf(orderItem.getQuantity()), FONT_NORMAL));
|
885 |
orders.addCell(new Paragraph(String.valueOf(orderItem.getQuantity()), FONT_NORMAL));
|
| 833 |
orders.addCell(new Paragraph(String.format("%.2f", orderItem.getRate()), FONT_NORMAL));
|
886 |
orders.addCell(new Paragraph(String.format("%.2f", orderItem.getRate()), FONT_NORMAL));
|
| Line 886... |
Line 939... |
| 886 |
String amountInWords = toAmountInWords(pdfModel.getTotalAmount());
|
939 |
String amountInWords = toAmountInWords(pdfModel.getTotalAmount());
|
| 887 |
amountInWordsTable.addCell(new Paragraph(amountInWords.toString(), FONT_BOLD));
|
940 |
amountInWordsTable.addCell(new Paragraph(amountInWords.toString(), FONT_BOLD));
|
| 888 |
amountInWordsTable.addCell(new Paragraph("E & O.E", FONT_NORMAL));
|
941 |
amountInWordsTable.addCell(new Paragraph("E & O.E", FONT_NORMAL));
|
| 889 |
document.add(amountInWordsTable);
|
942 |
document.add(amountInWordsTable);
|
| 890 |
|
943 |
|
| - |
|
944 |
// Margin scheme declaration for credit notes
|
| - |
|
945 |
addMarginSchemeDeclaration(document, pdfModel);
|
| - |
|
946 |
|
| 891 |
document.newPage();
|
947 |
document.newPage();
|
| 892 |
}
|
948 |
}
|
| 893 |
document.close(); // no need to close PDFwriter?
|
949 |
document.close(); // no need to close PDFwriter?
|
| 894 |
} catch (DocumentException e) {
|
950 |
} catch (DocumentException e) {
|
| 895 |
LOGGER.error("Unable to write data to pdf file : ", e);
|
951 |
LOGGER.error("Unable to write data to pdf file : ", e);
|