mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-10-31 15:50:03 +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 %}
 |