Custom Quote/ Invoice

Here you go:

1) Create custom field on non-inventory item


Label: Header and make sure show on printed is selected


It should look like that
If you want same fo inventory items just add same custom field on inventory item
2)Create/Edit template
Go to custom themes:

I did base template from first available

Open it and copy all text (CTRL+C)

Go back to themes and create new

And paste all from default template (CTRL+V)
So you should have copy of default template to edit

  1. Editing template

Lines 32 - 36 replace with:

<tr>
            {% assign column_length = table.columns | size %}
            {% for column in table.columns %}  
                {% if column.label != 'Code' and column.label != 'Header' %}
                    <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>
                {% else %}
                    {% assign column_length = column_length | minus:1 %}
                {% endif %}
            {% endfor %}
        </tr>

Lines 44-59 replace with

{% for row in table.rows %}
        <tr>
            {% for cell in row.cells %}
                {% if table.columns[forloop.index0].label != 'Code' and table.columns[forloop.index0].label != 'Header' %}
                <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 %}">
                    {% if table.columns[forloop.index0].label == 'Description' %}
                        <span><b>
                        {% for column in table.columns %} 
                            {%- if column.label == 'Header' and row.cells[forloop.index0].text.size > 0 and row.cells[forloop.index0].text != '&nbsp;' -%}
                                {{ row.cells[forloop.index0].text | newline_to_br }}
                            {%- endif -%}
                        {% endfor %}
                        {% for column in table.columns %} 
                            {%- if column.label == 'Code' and row.cells[forloop.index0].text.size > 0 and row.cells[forloop.index0].text != '&nbsp;' -%}
                                ({{ row.cells[forloop.index0].text | newline_to_br }})
                            {%- endif -%}
                        {% endfor %}
                        </b></span>
                        <p style="margin:0; padding:0;">
                        {{ cell.text | newline_to_br }}
                        </p>
                    {% else %}
                        {{ cell.text | newline_to_br }}
                    {% endif %}
                </td>
                {% endif %}
            {% endfor %}
        </tr>
        {% endfor %}
        {% for column in table.columns %}   
            {% if column.label != 'Code' and column.label != 'Header' %}
                <td style="border-bottom-width: 1px; border-left-width: 1px{% if forloop.last == true %}; border-right-width: 1px{% endif %}">&nbsp;</td>
            {% endif %}
        {% endfor %}
        {% for total in table.totals %}
        <tr>
            <td colspan="{{ column_length | minus:1 }}" style="padding: 5px 10px; text-align: right{% if total.emphasis == true %}; font-weight: bold{% endif %}">{{ total.label }}</td>
            <td style="border-color: #000; border-left-width: 1px; white-space: nowrap; border-right-width: 1px; border-bottom-width: 1px; padding: 5px 10px; text-align: right{% if total.emphasis == true %}; font-weight: bold{% endif %}">{{ total.text }}</td>
        </tr>
        {% endfor %}

Update template

4) Create non-inventory item

In the bottom you will see Header (Custom Field) - this will be you header for item
Description - obvious
Code - is optional, but if entered will be next to header in brackets

Create another service without code

5) Creating invoice

Add 3 lines: service with code, wothout code, and just line without selected item

6) Result

Enjoy!

6 Likes