diff --git a/project/docs/consts.py b/project/docs/consts.py index d984ef5..3d60337 100644 --- a/project/docs/consts.py +++ b/project/docs/consts.py @@ -19,9 +19,9 @@ NDS_TYPE_CHOICES = ( ) # ставка НДС -NDS_VALUE_0 = 1 -NDS_VALUE_10 = 2 -NDS_VALUE_18 = 3 +NDS_VALUE_0 = 0 +NDS_VALUE_10 = 0.1 +NDS_VALUE_18 = 0.18 NDS_VALUE_CHOICES = ( (NDS_VALUE_0, u'Без НДС'), diff --git a/project/docs/views/base_views.py b/project/docs/views/base_views.py index f16c18d..e70c10c 100644 --- a/project/docs/views/base_views.py +++ b/project/docs/views/base_views.py @@ -526,7 +526,8 @@ class BaseItemsViews(BaseViews): parent_model = self.MODEL, model = self.ITEM_MODEL, form = self.ITEM_FORM_CLASS, - extra=2 + extra=2, + can_delete=True, ) def get_list_qs(self): @@ -555,19 +556,15 @@ class BaseItemsViews(BaseViews): return redirect(self.REDIRECT_AFTER_ADD) if self.pformset: pformset = self.pformset(self.request.POST or None) + else: + pformset = None if self.request.method == 'POST': form = self.FORM_CLASS(self.request.user, data=self.request.POST) - if '_add_line' in self.request.POST: - post_copy = self.request.POST.copy() - total_forms_key = '%s-TOTAL_FORMS' % self.ITEM_FORM_PREFIX - post_copy[total_forms_key] = int(post_copy[total_forms_key]) + 1 - formset = self.ITEM_FORMSET_CLASS(data=post_copy, prefix=self.ITEM_FORM_PREFIX) - else: - formset = self.ITEM_FORMSET_CLASS(data=self.request.POST, prefix=self.ITEM_FORM_PREFIX) + formset = self.ITEM_FORMSET_CLASS(self.request.POST or None, prefix=self.ITEM_FORM_PREFIX) - if '_add_line' not in self.request.POST and form.is_valid() and formset.is_valid(): + if form.is_valid() and formset.is_valid() and ((not pformset) or (pformset and pformset.is_valid())): new_obj = form.save(commit=False) new_obj.user = self.request.user new_obj.save() @@ -577,13 +574,13 @@ class BaseItemsViews(BaseViews): for item in new_items: item.parent = new_obj item.save() - if pformset.is_valid(): + if pformset and pformset.is_valid(): new_items = pformset.save(commit=False) for item in new_items: item.parent = new_obj item.save() self.update_parent_on_items_save(new_obj, new_items) - return redirect(self.REDIRECT_AFTER_ADD) + return redirect(self.REDIRECT_AFTER_ADD) else: initial = kwargs.get('initial') or self.init_form() initial_items = kwargs.get('initial_items') @@ -645,39 +642,31 @@ class BaseItemsViews(BaseViews): return redirect(self.REDIRECT_AFTER_EDIT) obj = self.get_obj(kwargs['id']) - print self.pformset + if self.pformset: pformset = self.pformset(self.request.POST or None, instance=obj) - if self.request.method == 'POST': - form = self.FORM_CLASS(self.request.user, data=self.request.POST, instance=obj) - - if '_add_line' in self.request.POST: - post_copy = self.request.POST.copy() - total_forms_key = '%s-TOTAL_FORMS' % self.ITEM_FORM_PREFIX - post_copy[total_forms_key] = int(post_copy[total_forms_key]) + 1 - formset = self.ITEM_FORMSET_CLASS(data=post_copy, prefix=self.ITEM_FORM_PREFIX, instance=obj) - else: - formset = self.ITEM_FORMSET_CLASS(data=self.request.POST, prefix=self.ITEM_FORM_PREFIX, instance=obj) - - if '_add_line' not in self.request.POST and form.is_valid() and formset.is_valid(): - new_obj = form.save() - # сохранить табличную часть - if formset.is_valid(): - items = formset.save(commit=False) - for item in items: - item.parent = new_obj - item.save() - self.update_parent_on_items_save(new_obj, items) - if pformset.is_valid(): - items = pformset.save(commit=False) - for item in items: - item.parent = new_obj - item.save() - self.update_parent_on_items_save(new_obj, items) - return redirect(self.REDIRECT_AFTER_EDIT) else: - form = self.FORM_CLASS(self.request.user, instance=obj) - formset = self.ITEM_FORMSET_CLASS(instance=obj) + pformset = None + + formset = self.ITEM_FORMSET_CLASS(self.request.POST or None, prefix=self.ITEM_FORM_PREFIX, instance=obj) + form = self.FORM_CLASS(self.request.user, data=self.request.POST or None, instance=obj) + + if form.is_valid() and formset.is_valid() and ((not pformset) or (pformset and pformset.is_valid())): + new_obj = form.save() + # сохранить табличную часть + if formset.is_valid(): + items = formset.save(commit=False) + for item in items: + item.parent = new_obj + item.save() + self.update_parent_on_items_save(new_obj, items) + if pformset and pformset.is_valid(): + items = pformset.save(commit=False) + for item in items: + item.parent = new_obj + item.save() + self.update_parent_on_items_save(new_obj, items) + return redirect(self.REDIRECT_AFTER_EDIT) dictionary = { 'padeji': self.PADEJI, diff --git a/project/static/js/formset-events.js b/project/static/js/formset-events.js new file mode 100644 index 0000000..d7cc250 --- /dev/null +++ b/project/static/js/formset-events.js @@ -0,0 +1,43 @@ +$(function($) { + var calc_summa = function (e) { + var $this = $(this); + var qty = parseFloat($this.closest('tr.row').find('td.qty input').val()); + var price = parseFloat($this.closest('tr.row').find('td.price input').val()); + var total_price = qty * price; + if (total_price) { + $this.closest('tr.row').find('td.total_price input').val(qty * price); + } + } + window.calc_itogo = function (e) { + var itogo_sum = 0; + $('#tbl_items').find('.total_price input:visible').each(function(){ + var itogo_sum_row = $(this).val()? parseInt($(this).val()) : 0; + itogo_sum += itogo_sum_row; + }) + $('#itogo').html(itogo_sum); + } + var calc_itogo_nds = function() { + $('#itogo_nds_text').html('НДС ' + $('#id_nds_value option:selected').text()); + $('#itogo_nds').html($('#id_nds_value').val() * parseInt($('#itogo').html())); + } + + window.set_events = function set_events() { + $("#tbl_items tr.row td.qty input").on('keyup', calc_summa); + $("#tbl_items tr.row td.price input").on('keyup', calc_summa); + + $("#tbl_items tr.row td.qty input").blur(window.calc_itogo); + $("#tbl_items tr.row td.price input").blur(window.calc_itogo); + $("#tbl_items tr.row td.total_price input").blur(window.calc_itogo); + + //$('input[name=nds_type]').change(calc_itogo_nds); + $('#id_nds_value').change(calc_itogo_nds); + +// + //$("#tbl_items tr.row td.qty input").blur(calc_itogo_nds); + //$("#tbl_items tr.row td.price input").blur(calc_itogo_nds); + //$("#tbl_items tr.row td.total_price input").blur(calc_itogo_nds); + } + window.set_events(); + window.calc_itogo(); + calc_itogo_nds(); +}) \ No newline at end of file diff --git a/project/static/js/lib/jquery.formset.js b/project/static/js/lib/jquery.formset.js new file mode 100644 index 0000000..a659276 --- /dev/null +++ b/project/static/js/lib/jquery.formset.js @@ -0,0 +1,212 @@ +/** + * jQuery Formset 1.2.1 + * @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com) + * @requires jQuery 1.2.6 or later + * + * Copyright (c) 2009, Stanislaus Madueke + * All rights reserved. + * + * Licensed under the New BSD License + * See: http://www.opensource.org/licenses/bsd-license.php + */ +;(function($) { + $.fn.formset = function(opts) + { + var options = $.extend({}, $.fn.formset.defaults, opts), + flatExtraClasses = options.extraClasses.join(' '), + $$ = $(this), + $$formsetContainer = $$.parent(), + + applyExtraClasses = function(row, ndx) { + if (options.extraClasses) { + row.removeClass(flatExtraClasses); + row.addClass(options.extraClasses[ndx % options.extraClasses.length]); + } + }, + + updateElementIndex = function(elem, prefix, ndx) { + var idRegex = new RegExp('(' + prefix + '-\\d+-)'), + replacement = prefix + '-' + ndx + '-'; + if (elem.attr("for")) elem.attr("for", elem.attr("for").replace(idRegex, replacement)); + if (elem.attr('id')) elem.attr('id', elem.attr('id').replace(idRegex, replacement)); + if (elem.attr('name')) elem.attr('name', elem.attr('name').replace(idRegex, replacement)); + }, + + hasChildElements = function(row) { + return row.find('input,select,textarea,label').length > 0; + }, + + insertDeleteLink = function(row) { + if (row.is('TR')) { + // If the forms are laid out in table rows, insert + // the remove button into the last table cell: + row.children(':last').append('' + options.deleteText + ''); + } else if (row.is('UL') || row.is('OL')) { + // If they're laid out as an ordered/unordered list, + // insert an
| К плат. документу | От | |
|---|---|---|
| + {{ pform.num.errors }} {{ pform.num }} | + {{ pform.doc_date.errors }} {{ pform.doc_date }} | {{ pform.id }} @@ -20,13 +23,7 @@|
| - - | -||