Subversion Repositories SmartDukaan

Rev

Rev 35035 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 35035 Rev 35799
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);