mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Add new report models
This commit is contained in:
parent
fb096bd65b
commit
727fd38978
@ -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,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
@ -24,6 +24,7 @@ import build.models
|
|||||||
import common.models
|
import common.models
|
||||||
import part.models
|
import part.models
|
||||||
import stock.models
|
import stock.models
|
||||||
|
import order.models
|
||||||
|
|
||||||
from InvenTree.helpers import validateFilterString
|
from InvenTree.helpers import validateFilterString
|
||||||
|
|
||||||
@ -94,6 +95,22 @@ def validate_build_report_filters(filters):
|
|||||||
return validateFilterString(filters, model=build.models.Build)
|
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 WeasyprintReportMixin(WeasyTemplateResponseMixin):
|
||||||
"""
|
"""
|
||||||
Class for rendering a HTML template to a PDF.
|
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):
|
def rename_snippet(instance, filename):
|
||||||
|
|
||||||
filename = os.path.basename(filename)
|
filename = os.path.basename(filename)
|
||||||
|
Loading…
Reference in New Issue
Block a user