Anatomy of India's New GST Invoice Format

Thank you @lubos for the patience shown these past weeks and helping us out.

I have modified my earlier custom template to suit the recent changes introduced in Manager. Users can feel free to use this custom template.

You can find my earlier post and instructions below.

What has changed?

  1. The value in words is default if Indian currency is set. So it has been modified accordingly.
  2. The “Shipped To:” field was not showing when it was left blank. So users had to type in the customer details again when both Billed To and Shipped To were same. This has been modified now. If the Shipped To is same as Billed To, you can leave the custom field blank and the template will automatically copy the customer details to Shipped To area.

The remaining instructions are the same as in my post linked above and as per the first post in this topic.

<table style="padding: 20px 20px">
<thead>
    <tr>
        <td colspan="99">
            <table style="margin-bottom: 10px"><tr>
                <td style="font-weight: bold; font-size: 32px">{% if title != 'Invoice' %}{{ title }}{% endif %}{% if title == 'Invoice' %}{{ title | replace: "Invoice", "Tax Invoice" }}{% endif %}</td>
                {% if business.logo != null %}<td style="text-align: right"><img src="{{ business.logo }}" style="max-height: 100px; max-width: 300px"></td>{% endif %}
            </tr></table>
            
            <table style="margin-bottom: 20px"><tr>
                <td style="width: 200px; border-left-width: 5px; padding-left: 10px; text-align: left">
                    {% for field in fields %}
                    <div style="font-weight: bold; font-size: 12px">{{ field.label }}</div>
                    <div style="margin-bottom: 10px; font-weight: bold; font-size: 16px">{{ field.text }}</div>
                    {% endfor %}
                </td>
                {% if title == 'Invoice' %}
                <td style="width: 260px; padding-left: 20px; border-color: #000000; border-left-width: 1px">
                {% for field in custom_fields %}
                {% if field.label == "Shipped To:" %}{% continue %}{% endif %}
                {% if field.label == "Notes" %}{% continue %}{% endif %}
                {% if field.label == 'Total in words' %}{% continue %}{% endif %}
                <div style="font-size: 12px; padding-bottom: 10px"><b>{{ field.label }}</b> {{ field.text | newline_to_br }}</div>
                {% endfor %}</td>{% endif %}
                <td style="width: 300px; padding-left: 10px; padding-right: 5px; text-align: left; vertical-align: top; border-top-width: 3px; border-bottom-width: 5px">
                    <div style="text-align:LEFT;font-weight: bold;font-size: 18px">{{ business.name }}</div>
                    <div style="text-align:LEFT;font-size: 12px">{{ business.address | newline_to_br }}</div>
                    <div style="text-align:LEFT;font-weight: bold;font-size: 14px">{{ business.identifier }}</div>
                </td>
            </tr></table>
            <table style="margin-bottom: 20px">
            <td style="width: 380px; text-align: left; border-color: #000000; border-bottom-width: 2px; border-top-width: 2px; border-left-width: 2px; border-right-width: 2px">
                {% if title == 'Invoice' %}<div style="padding-left: 5px; border-bottom-width: 2px; text-align:LEFT;font-weight: bold">Billed To:</div>{% endif %}
                <div style="padding-left: 20px">
                <div><b>{{ recipient.name }}</b> {{ recipient.code }}</div>
                <div>{{ recipient.address | newline_to_br }}</div>
                <div><b>{{ recipient.identifier }}</b></div></div>
            </td>
            {% if title == 'Invoice' %}
                <td style="width: 375px; padding-left: 5px; text-align: left; border-color: #000000; border-bottom-width: 2px; border-top-width: 2px; border-left-width: 0px; border-right-width: 2px">
                    {% for field in custom_fields %}{% if field.label == 'Shipped To:' %}{% assign consignee = field.text %}
                    <div style="padding-left: 5px; border-bottom-width: 2px; text-align:LEFT;font-weight: bold">{{ field.label }}</div>
                    <div style="padding-left: 20px">{{ field.text | newline_to_br }}</div>
                    {% endif %}{% endfor %}
                    {% if consignee == null %}
                    <div style="padding-left: 5px; border-bottom-width: 2px; text-align:LEFT;font-weight: bold">Shipped To:</div>
                    <div style="padding-left: 20px">
                    <div><b>{{ recipient.name }}</b> {{ recipient.code }}</div>
                    <div>{{ recipient.address | newline_to_br }}</div>
                    <div><b>{{ recipient.identifier }}</b></div></div>{% endif %}
                </td>
            {% endif %}
            </table>

            <div style="font-size: 14px; font-weight: bold; margin-bottom: 20px">{{ description }}</div>
        
    </td></tr>
    
    <tr>
        <td style="width: 25px; font-weight: bold; padding: 5px 5px; border-bottom-width: 1px; border-left-width: 1px; border-top-width: 1px; text-align:CENTER">#</td>
        {% for column in table.columns %}            
        <td style="font-weight: bold; padding: 5px 10px; text-align: {{ column.align }}; border-left-width: 1px; border-bottom-width: 1px; border-top-width: 1px{% if forloop.last == true %}; border-right-width: 1px{% endif %}{% if column.nowrap %}; white-space: nowrap; width: 80px{% endif %}">{{ column.label }}</td>
        {% endfor %}
    </tr>
</thead>
<tbody>
    {% assign i = 0 %}
    {% for row in table.rows %}
    {% assign i = i | plus: 1 %}
    <tr>
        <td style="width: 25px; padding: 5px 5px; border-left-width: 1px; text-align:CENTER">{{ i }}</td>
        {% for cell in row.cells %}
        <td style="padding: 5px 10px; text-align: {{ table.columns[forloop.index0].align }}; border-left-width: 1px{% if forloop.last == true %}; border-right-width: 1px{% endif %}{% if table.columns[forloop.index0].nowrap %}; white-space: nowrap; width: 80px{% endif %}">{{ cell.text | newline_to_br }}</td>
        {% endfor %}
    </tr>
    {% endfor %}
    <tr>
    {% for column in table.columns %}            
        <td style="border-bottom-width: 1px; border-left-width: 1px{% if forloop.last == true %}; border-right-width: 1px{% endif %}"></td>
    {% endfor %}
    </tr>
    {% for total in table.totals %}
    <tr>
        <td colspan="{{ table.columns | size }}" style="padding: 5px 10px; text-align: right{% if total.emphasis == true %}; font-weight: bold{% endif %}">{{ total.label }}</td>
        <td style="border-left-width: 1px; white-space: nowrap; border-right-width: 1px; border-bottom-width: 1px; padding: 5px 10px; text-align: right{% if forloop.first == true %}; border-top-width: 1px{% endif %}{% if total.emphasis == true %}; font-weight: bold{% endif %}">{{ total.text }}</td>
    </tr>
    {% endfor %}
    <tr><td colspan="{{ table.columns | size | plus:1 }}" style="border-right-width: 1px; border-top-width: 1px; border-bottom-width: 1px; border-left-width: 1px"><div style="font-size: 12px; padding-left: 10px; padding-right: 10px; font-weight: bold">{% for field in custom_fields %}{% if field.label == 'Total in words' %}{{ field.text }} Only</div>{% endif %}{% endfor %}</td></tr>
    {% for field in custom_fields %}
    {% if title == 'Invoice' %}
    {% if field.label != "Notes" %}{% continue %}{% endif %}
    {% endif %}
    <tr>
        <td colspan="99">
            <div style="font-weight: bold; padding-top: 20px">{{ field.label }}</div>
            <div>{{ field.text | newline_to_br }}</div>
        </td>
    </tr>
    {% endfor %}
</tbody>
<tfoot>
<tr>
    {% if title == 'Invoice' %}
    <td colspan="99">
        <div style="text-align: right; font-weight: bold">We declare that this invoice shows the actual price of the goods or<br>service described and that all particulars are true and correct.<br><br>For {{ business.name }}<br><br><br><br>Authorised Signatory</div></td>
    {% endif %}
</tr>
</tfoot>
1 Like