def validate(self, curuser): result = True if not Form.validate(self): return False sum = (self.sum_nds18.data + self.sum_no_nds18.data + self.sum_nds10.data + self.sum_no_nds10.data) if not sum == self.sum_snds.data: self.sum_snds.errors.append(u"Неверно указана сумма с НДС. Расчетная сумма "+str(sum)) result = False sum18 = round(self.sum_no_nds18.data*decimal.Decimal(str(0.18)),2) fault = math.fabs(sum18-(float(self.sum_nds18.data))) if fault>0.05: self.sum_nds18.errors.append(u"Неверно указана сумма НДС 18%. Расчетная сумма "+str(sum18)) result = False sum10 = round(self.sum_no_nds10.data*decimal.Decimal(str(0.10)),2) fault = math.fabs(sum10-(float(self.sum_nds10.data))) if fault>0.05: self.sum_nds10.errors.append(u"Неверно указана сумма НДС 10%. Расчетная сумма "+str(sum10)) result = False if self.ninvoice is not None: invoice = Invoice.query.filter(Invoice.ninvoice==self.ninvoice.data, Invoice.agent_uid==self.agent_uid.data, Invoice.org_uid==self.org_uid.data, Invoice.uid!=self.uid.data).first() if invoice is not None: self.ninvoice.errors.append(u"Счет фактура с указанным номером уже добавлена") result = False if not curuser.allow_edit: if self.dinvoice.data>Settings.dend().date() or self.dinvoice.data<Settings.dbegin().date(): self.dinvoice.errors.append(u"Закрытый период. Ввод и изменение данных запрещены!") result = False return result
def report(): form = ReportForm() if current_user.is_admin: form.user.choices = [(g.uid, g.login) for g in User.query.order_by('name')] else: form.user.choices = [(g.uid, g.login) for g in current_user.subusers] form.user.choices.append((current_user.uid, current_user.login)) form.user.choices.insert(0,(-1, u"Все пользователи")) if request.method == "POST": if form.validate(): title = CONST.INVOICE_NAME[form.inv_type.data] rpt_filter = [Invoice.inv_type==form.inv_type.data] filter_text = u'' if form.org_uid.data != u'': filter_text = filter_text + u'Организация: ' + form.org.data + ' ' rpt_filter.append(Invoice.org_uid==form.org_uid.data) if form.agent_uid.data !=u'': filter_text = filter_text + u'Контрагент: ' + form.agent.data + ' ' rpt_filter.append(Invoice.agent_uid==form.agent_uid.data) if form.user.data !=-1: filter_text = filter_text + u"Пользователь: " + User.query.get(form.user.data).login + ' ' rpt_filter.append(Invoice.user_uid==form.user.data) if form.dbegin.data is not None: filter_text = filter_text + u'с ' + datetime.strftime(form.dbegin.data, '%d.%m.%Y') + ' ' rpt_filter.append(Invoice.dinvoice>=datetime.combine(form.dbegin.data, datetime.min.time())) if form.dend.data is not None: filter_text = filter_text + u'по ' + datetime.strftime(form.dend.data, '%d.%m.%Y') + ' ' rpt_filter.append(Invoice.dinvoice<=datetime.combine(form.dend.data, datetime.max.time())) invoices = current_user.available_invoices(inv_type=form.inv_type.data, rpt_filter=rpt_filter) if form.agent_inn.data != u'': filer_text = filer_text + u'ИНН Контрагента: ' + form.agent_inn.data + ' ' invoices.join(Agent).filter(Agent.inn.contains(form.agent_inn.data)) sums = invoices.with_entities(func.sum(Invoice.sum_snds), func.sum(Invoice.sum_no_nds18), func.sum(Invoice.sum_nds18), func.sum(Invoice.sum_no_nds10), func.sum(Invoice.sum_nds10), func.sum(Invoice.commission)).first() if request.form['submit']==u'excel': return export_xls(title, filter_text, invoices) else: return render_template("report.html", invoices=invoices.all(), dbegin=Settings.dbegin(), dend=Settings.dend(), sums=sums, title=title, filter_text=filter_text) return render_template("frmReport.html", form=form)