Add new report models

This commit is contained in:
Oliver Walters 2021-03-10 16:48:20 +11:00
parent fb096bd65b
commit 727fd38978
2 changed files with 120 additions and 0 deletions

View File

@ -0,0 +1,45 @@
# Generated by Django 3.0.7 on 2021-03-10 05:46
import django.core.validators
from django.db import migrations, models
import report.models
class Migration(migrations.Migration):
dependencies = [
('report', '0013_testreport_include_installed'),
]
operations = [
migrations.CreateModel(
name='PurchaseOrderReport',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')),
('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')),
('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')),
('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Report revision number (auto-increments)', verbose_name='Revision')),
('enabled', models.BooleanField(default=True, help_text='Report template is enabled', verbose_name='Enabled')),
('filters', models.CharField(blank=True, help_text='Purchase order query filters', max_length=250, validators=[report.models.validate_purchase_order_filters], verbose_name='Filters')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='SalesOrderReport',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')),
('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')),
('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')),
('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Report revision number (auto-increments)', verbose_name='Revision')),
('enabled', models.BooleanField(default=True, help_text='Report template is enabled', verbose_name='Enabled')),
('filters', models.CharField(blank=True, help_text='Sales order query filters', max_length=250, validators=[report.models.validate_sales_order_filters], verbose_name='Filters')),
],
options={
'abstract': False,
},
),
]

View File

@ -24,6 +24,7 @@ import build.models
import common.models
import part.models
import stock.models
import order.models
from InvenTree.helpers import validateFilterString
@ -94,6 +95,22 @@ def validate_build_report_filters(filters):
return validateFilterString(filters, model=build.models.Build)
def validate_purchase_order_filters(filters):
"""
Validate filter string against PurchaseOrder model
"""
return validateFilterString(filters, model=order.models.PurchaseOrder)
def validate_sales_order_filters(filters):
"""
Validate filter string against SalesOrder model
"""
return validateFilterString(filters, model=order.models.SalesOrder)
class WeasyprintReportMixin(WeasyTemplateResponseMixin):
"""
Class for rendering a HTML template to a PDF.
@ -383,6 +400,64 @@ class BillOfMaterialsReport(ReportTemplateBase):
}
class PurchaseOrderReport(ReportTemplateBase):
"""
Render a report against a PurchaseOrder object
"""
@classmethod
def getSubdir(cls):
return 'purchaseorder'
filters = models.CharField(
blank=True,
max_length=250,
verbose_name=_('Filters'),
help_text=_('Purchase order query filters'),
validators=[
validate_purchase_order_filters,
]
)
def get_context_data(self, request):
order = self.object_to_print
return {
'order': order,
'supplier': order.supplier,
}
class SalesOrderReport(ReportTemplateBase):
"""
Render a report against a SalesOrder object
"""
@classmethod
def getSubdir(cls):
return 'salesorder'
filters = models.CharField(
blank=True,
max_length=250,
verbose_name=_('Filters'),
help_text=_('Sales order query filters'),
validators=[
validate_sales_order_filters
]
)
def get_context_data(self, request):
order = self.object_to_print
return {
'order': order,
'customer': order.customer,
}
def rename_snippet(instance, filename):
filename = os.path.basename(filename)