mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-11-03 17:08:47 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			90 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
{% extends "base.html" %}
 | 
						|
{% load static %}
 | 
						|
{% load i18n %}
 | 
						|
{% load crispy_forms_tags %}
 | 
						|
{% block content %}
 | 
						|
    <p><a class="btn btn-default" href="{% url 'treasury:invoice_list' %}">{% trans "Invoices list" %}</a></p>
 | 
						|
    <form method="post" action="">
 | 
						|
        {% csrf_token %}
 | 
						|
        {# Render the invoice form #}
 | 
						|
        {% crispy form %}
 | 
						|
        {# The next part concerns the product formset #}
 | 
						|
        {# Generate some hidden fields that manage the number of products, and make easier the parsing #}
 | 
						|
        {{ formset.management_form }}
 | 
						|
        <table class="table table-condensed table-striped">
 | 
						|
            {# Fill initial data #}
 | 
						|
            {% for form in formset %}
 | 
						|
                {% if forloop.first %}
 | 
						|
                    <thead>
 | 
						|
                    <tr>
 | 
						|
                        <th>{{ form.designation.label }}<span class="asteriskField">*</span></th>
 | 
						|
                        <th>{{ form.quantity.label }}<span class="asteriskField">*</span></th>
 | 
						|
                        <th>{{ form.amount.label }}<span class="asteriskField">*</span></th>
 | 
						|
                    </tr>
 | 
						|
                    </thead>
 | 
						|
                    <tbody id="form_body">
 | 
						|
                {% endif %}
 | 
						|
                <tr class="row-formset">
 | 
						|
                    <td>{{ form.designation }}</td>
 | 
						|
                    <td>{{ form.quantity }}</td>
 | 
						|
                    <td>{{ form.amount }}</td>
 | 
						|
                    {# These fields are hidden but handled by the formset to link the id and the invoice id #}
 | 
						|
                    {{ form.invoice }}
 | 
						|
                    {{ form.id }}
 | 
						|
                </tr>
 | 
						|
            {% endfor %}
 | 
						|
            </tbody>
 | 
						|
        </table>
 | 
						|
 | 
						|
        {# Display buttons to add and remove products #}
 | 
						|
        <div class="btn-group btn-block" role="group">
 | 
						|
            <button type="button" id="add_more" class="btn btn-primary">{% trans "Add product" %}</button>
 | 
						|
            <button type="button" id="remove_one" class="btn btn-danger">{% trans "Remove product" %}</button>
 | 
						|
        </div>
 | 
						|
 | 
						|
        <div class="btn-block">
 | 
						|
            <button type="submit" class="btn btn-block btn-primary">{% trans "Submit" %}</button>
 | 
						|
        </div>
 | 
						|
    </form>
 | 
						|
 | 
						|
    <div id="empty_form" style="display: none;">
 | 
						|
        {# Hidden div that store an empty product form, to be copied into new forms #}
 | 
						|
        <table class='no_error'>
 | 
						|
            <tbody id="for_real">
 | 
						|
            <tr class="row-formset">
 | 
						|
                <td>{{ formset.empty_form.designation }}</td>
 | 
						|
                <td>{{ formset.empty_form.quantity }} </td>
 | 
						|
                <td>{{ formset.empty_form.amount }}</td>
 | 
						|
                {{ formset.empty_form.invoice }}
 | 
						|
                {{ formset.empty_form.id }}
 | 
						|
            </tr>
 | 
						|
            </tbody>
 | 
						|
        </table>
 | 
						|
    </div>
 | 
						|
{% endblock %}
 | 
						|
 | 
						|
{% block extrajavascript %}
 | 
						|
    <script>
 | 
						|
        {# Script that handles add and remove lines #}
 | 
						|
        IDS = {};
 | 
						|
 | 
						|
        $("#id_product_set-TOTAL_FORMS").val($(".row-formset").length - 1);
 | 
						|
 | 
						|
        $('#add_more').click(function () {
 | 
						|
            var form_idx = $('#id_product_set-TOTAL_FORMS').val();
 | 
						|
            $('#form_body').append($('#for_real').html().replace(/__prefix__/g, form_idx));
 | 
						|
            $('#id_product_set-TOTAL_FORMS').val(parseInt(form_idx) + 1);
 | 
						|
            $('#id_product_set-' + parseInt(form_idx) + '-id').val(IDS[parseInt(form_idx)]);
 | 
						|
        });
 | 
						|
 | 
						|
        $('#remove_one').click(function () {
 | 
						|
            let form_idx = $('#id_product_set-TOTAL_FORMS').val();
 | 
						|
            if (form_idx > 0) {
 | 
						|
                IDS[parseInt(form_idx) - 1] = $('#id_product_set-' + (parseInt(form_idx) - 1) + '-id').val();
 | 
						|
                $('#form_body tr:last-child').remove();
 | 
						|
                $('#id_product_set-TOTAL_FORMS').val(parseInt(form_idx) - 1);
 | 
						|
            }
 | 
						|
        });
 | 
						|
    </script>
 | 
						|
{% endblock %}
 |