2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-18 13:05:42 +00:00

Finally got migrations working together

This commit is contained in:
Oliver
2018-04-22 21:54:12 +10:00
parent cef3c664f9
commit 4bedf0ed4c
86 changed files with 356 additions and 2279 deletions

View File

@ -1,21 +1,16 @@
from django.contrib import admin
from import_export.admin import ImportExportModelAdmin
from .models import Company, SupplierPart
from .models import SupplierOrder
from .models import Company
#from .models import SupplierOrder
class CompanyAdmin(ImportExportModelAdmin):
list_display = ('name', 'website', 'contact')
class SupplierPartAdmin(ImportExportModelAdmin):
list_display = ('part', 'supplier', 'SKU')
class SupplierOrderAdmin(admin.ModelAdmin):
list_display = ('internal_ref', 'supplier', 'issued_date', 'delivery_date', 'status')
#class SupplierOrderAdmin(admin.ModelAdmin):
# list_display = ('internal_ref', 'supplier', 'issued_date', 'delivery_date', 'status')
admin.site.register(Company, CompanyAdmin)
admin.site.register(SupplierPart, SupplierPartAdmin)
admin.site.register(SupplierOrder, SupplierOrderAdmin)
#admin.site.register(SupplierOrder, SupplierOrderAdmin)

View File

@ -2,10 +2,10 @@ from django import forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit
from .models import Company, SupplierPart
from .models import SupplierOrder
from .models import Company
"""
class EditSupplierOrderForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
@ -26,7 +26,7 @@ class EditSupplierOrderForm(forms.ModelForm):
'notes',
'issued_date',
]
"""
class EditCompanyForm(forms.ModelForm):
@ -50,29 +50,6 @@ class EditCompanyForm(forms.ModelForm):
'phone',
'email',
'contact',
'image',
'notes'
]
class EditSupplierPartForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(EditSupplierPartForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_id = 'id-edit-part-form'
self.helper.form_class = 'blueForms'
self.helper.form_method = 'post'
self.helper.add_input(Submit('submit', 'Submit'))
class Meta:
model = SupplierPart
fields = [
'supplier',
'SKU',
'part',
'description',
'URL',
'manufacturer',
'MPN',
]

View File

@ -1,10 +1,9 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-04-12 05:02
# Generated by Django 1.11.12 on 2018-04-22 11:53
from __future__ import unicode_literals
import django.core.validators
import company.models
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
@ -12,92 +11,22 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('part', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Customer',
name='Company',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100, unique=True)),
('website', models.URLField(blank=True)),
('address', models.CharField(blank=True, max_length=200)),
('name', models.CharField(help_text='Company naem', max_length=100, unique=True)),
('description', models.CharField(max_length=500)),
('website', models.URLField(blank=True, help_text='Company website URL')),
('address', models.CharField(blank=True, help_text='Company address', max_length=200)),
('phone', models.CharField(blank=True, max_length=50)),
('email', models.EmailField(blank=True, max_length=254)),
('contact', models.CharField(blank=True, max_length=100)),
('notes', models.CharField(blank=True, max_length=500)),
('image', models.ImageField(blank=True, max_length=255, null=True, upload_to=company.models.rename_company_image)),
('notes', models.TextField(blank=True)),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='Manufacturer',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100, unique=True)),
('website', models.URLField(blank=True)),
('address', models.CharField(blank=True, max_length=200)),
('phone', models.CharField(blank=True, max_length=50)),
('email', models.EmailField(blank=True, max_length=254)),
('contact', models.CharField(blank=True, max_length=100)),
('notes', models.CharField(blank=True, max_length=500)),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='Supplier',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100, unique=True)),
('website', models.URLField(blank=True)),
('address', models.CharField(blank=True, max_length=200)),
('phone', models.CharField(blank=True, max_length=50)),
('email', models.EmailField(blank=True, max_length=254)),
('contact', models.CharField(blank=True, max_length=100)),
('notes', models.CharField(blank=True, max_length=500)),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='SupplierPart',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('SKU', models.CharField(max_length=100)),
('MPN', models.CharField(blank=True, max_length=100)),
('URL', models.URLField(blank=True)),
('description', models.CharField(blank=True, max_length=250)),
('single_price', models.DecimalField(decimal_places=3, default=0, max_digits=10)),
('base_cost', models.DecimalField(decimal_places=3, default=0, max_digits=10)),
('packaging', models.CharField(blank=True, max_length=50)),
('multiple', models.PositiveIntegerField(default=1, validators=[django.core.validators.MinValueValidator(0)])),
('minimum', models.PositiveIntegerField(default=1, validators=[django.core.validators.MinValueValidator(0)])),
('lead_time', models.DurationField(blank=True, null=True)),
('manufacturer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='supplier.Manufacturer')),
('part', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='part.Part')),
('supplier', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='supplier.Supplier')),
],
),
migrations.CreateModel(
name='SupplierPriceBreak',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('quantity', models.PositiveIntegerField(validators=[django.core.validators.MinValueValidator(0)])),
('cost', models.DecimalField(decimal_places=3, max_digits=10)),
('part', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='price_breaks', to='supplier.SupplierPart')),
],
),
migrations.AlterUniqueTogether(
name='supplierpricebreak',
unique_together=set([('part', 'quantity')]),
),
migrations.AlterUniqueTogether(
name='supplierpart',
unique_together=set([('part', 'supplier', 'SKU')]),
),
]

View File

@ -1,21 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-04-12 06:22
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('supplier', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='supplierpart',
name='part',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='supplier_parts', to='part.Part'),
),
]

View File

@ -1,30 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-04-14 05:40
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('supplier', '0002_auto_20180412_0622'),
]
operations = [
migrations.AddField(
model_name='customer',
name='description',
field=models.CharField(blank=True, max_length=500),
),
migrations.AddField(
model_name='manufacturer',
name='description',
field=models.CharField(blank=True, max_length=500),
),
migrations.AddField(
model_name='supplier',
name='description',
field=models.CharField(blank=True, max_length=500),
),
]

View File

@ -1,21 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-04-14 06:24
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('supplier', '0003_auto_20180414_0540'),
]
operations = [
migrations.AlterField(
model_name='supplierpart',
name='supplier',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='parts', to='supplier.Supplier'),
),
]

View File

@ -1,30 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-04-15 02:55
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('supplier', '0004_auto_20180414_0624'),
]
operations = [
migrations.AlterField(
model_name='customer',
name='description',
field=models.CharField(max_length=500),
),
migrations.AlterField(
model_name='manufacturer',
name='description',
field=models.CharField(max_length=500),
),
migrations.AlterField(
model_name='supplier',
name='description',
field=models.CharField(max_length=500),
),
]

View File

@ -1,26 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-04-15 10:11
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('supplier', '0005_auto_20180415_0255'),
]
operations = [
migrations.AlterField(
model_name='supplierpart',
name='manufacturer',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='supplier.Manufacturer'),
),
migrations.AlterField(
model_name='supplierpart',
name='part',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='supplier_parts', to='part.Part'),
),
]

View File

@ -1,36 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-04-16 12:53
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('supplier', '0006_auto_20180415_1011'),
]
operations = [
migrations.AlterField(
model_name='supplierpart',
name='MPN',
field=models.CharField(blank=True, help_text='Manufacturer part number', max_length=100),
),
migrations.AlterField(
model_name='supplierpart',
name='SKU',
field=models.CharField(help_text='Supplier stock keeping unit', max_length=100),
),
migrations.AlterField(
model_name='supplierpart',
name='manufacturer',
field=models.ForeignKey(blank=True, help_text='Manufacturer', null=True, on_delete=django.db.models.deletion.SET_NULL, to='supplier.Manufacturer'),
),
migrations.AlterField(
model_name='supplierpart',
name='part',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='supplier_parts', to='part.Part'),
),
]

View File

@ -1,18 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.12 on 2018-04-17 13:37
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('supplier', '0007_auto_20180416_1253'),
]
operations = [
migrations.DeleteModel(
name='Customer',
),
]

View File

@ -1,42 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.12 on 2018-04-17 14:11
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('supplier', '0008_delete_customer'),
]
operations = [
migrations.CreateModel(
name='SupplierOrder',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('internal_ref', models.CharField(max_length=25, unique=True)),
('created_date', models.DateField(auto_now_add=True)),
('issued_date', models.DateField(blank=True, help_text='Date the purchase order was issued')),
('notes', models.TextField(blank=True, help_text='Order notes')),
('supplier', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='supplier.Supplier')),
],
),
migrations.CreateModel(
name='SupplierOrderLineItem',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('line_number', models.PositiveIntegerField(default=1)),
('quantity', models.PositiveIntegerField(default=1)),
('notes', models.TextField(blank=True)),
('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='supplier.SupplierOrder')),
('part', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='supplier.SupplierPart')),
],
),
migrations.AlterUniqueTogether(
name='supplierorderlineitem',
unique_together=set([('order', 'line_number'), ('order', 'part')]),
),
]

View File

@ -1,25 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.12 on 2018-04-17 15:16
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('supplier', '0008_delete_customer'),
]
operations = [
migrations.AlterField(
model_name='manufacturer',
name='notes',
field=models.TextField(blank=True),
),
migrations.AlterField(
model_name='supplier',
name='notes',
field=models.TextField(blank=True),
),
]

View File

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.12 on 2018-04-17 14:20
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('supplier', '0009_auto_20180417_1411'),
]
operations = [
migrations.AlterField(
model_name='supplierorder',
name='issued_date',
field=models.DateField(blank=True, help_text='Date the purchase order was issued', null=True),
),
]

View File

@ -1,61 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.12 on 2018-04-17 14:36
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('supplier', '0010_auto_20180417_1420'),
]
operations = [
migrations.AlterField(
model_name='manufacturer',
name='address',
field=models.CharField(blank=True, help_text='Company address', max_length=200),
),
migrations.AlterField(
model_name='manufacturer',
name='name',
field=models.CharField(help_text='Company naem', max_length=100, unique=True),
),
migrations.AlterField(
model_name='manufacturer',
name='notes',
field=models.TextField(blank=True),
),
migrations.AlterField(
model_name='manufacturer',
name='website',
field=models.URLField(blank=True, help_text='Company website URL'),
),
migrations.AlterField(
model_name='supplier',
name='address',
field=models.CharField(blank=True, help_text='Company address', max_length=200),
),
migrations.AlterField(
model_name='supplier',
name='name',
field=models.CharField(help_text='Company naem', max_length=100, unique=True),
),
migrations.AlterField(
model_name='supplier',
name='notes',
field=models.TextField(blank=True),
),
migrations.AlterField(
model_name='supplier',
name='website',
field=models.URLField(blank=True, help_text='Company website URL'),
),
migrations.AlterField(
model_name='supplierorder',
name='supplier',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='orders', to='supplier.Supplier'),
),
]

View File

@ -1,25 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.12 on 2018-04-17 14:47
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('supplier', '0011_auto_20180417_1436'),
]
operations = [
migrations.AddField(
model_name='supplierorder',
name='delivery_date',
field=models.DateField(blank=True, null=True),
),
migrations.AddField(
model_name='supplierorder',
name='status',
field=models.PositiveIntegerField(choices=[(40, 'Cancelled'), (10, 'Pending'), (20, 'Placed'), (50, 'Lost'), (30, 'Received')], default=10),
),
]

View File

@ -1,16 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.12 on 2018-04-17 15:17
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('supplier', '0009_auto_20180417_1516'),
('supplier', '0012_auto_20180417_1447'),
]
operations = [
]

View File

@ -1,31 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.12 on 2018-04-17 15:20
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('part', '0022_auto_20180417_0819'),
('supplier', '0013_merge_20180417_1517'),
]
operations = [
migrations.RenameField(
model_name='supplierorderlineitem',
old_name='part',
new_name='supplier_part',
),
migrations.AddField(
model_name='supplierorderlineitem',
name='internal_part',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='part.Part'),
),
migrations.AlterUniqueTogether(
name='supplierorderlineitem',
unique_together=set([('order', 'line_number'), ('order', 'internal_part'), ('order', 'supplier_part')]),
),
]

View File

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.12 on 2018-04-17 15:22
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('supplier', '0014_auto_20180417_1520'),
]
operations = [
migrations.AddField(
model_name='supplierorderlineitem',
name='received',
field=models.BooleanField(default=False),
),
]

View File

@ -1,16 +1,31 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import os
from django.utils.translation import ugettext as _
from django.db import models
from django.core.validators import MinValueValidator
from part.models import Part
def rename_company_image(instance, filename):
base = 'company_images'
if filename.count('.') > 0:
ext = filename.split('.')[-1]
else:
ext = ''
fn = 'company_{pk}_img'.format(pk=instance.pk)
if ext:
fn += '.' + ext
return os.path.join(base,fn)
class Company(models.Model):
""" Abstract model representing an external company
"""
name = models.CharField(max_length=100, unique=True,
help_text='Company naem')
@ -30,6 +45,8 @@ class Company(models.Model):
contact = models.CharField(max_length=100,
blank=True)
image = models.ImageField(upload_to=rename_company_image, max_length=255, null=True, blank=True)
notes = models.TextField(blank=True)
def __str__(self):
@ -54,149 +71,3 @@ class Company(models.Model):
def has_orders(self):
return self.order_count > 0
class SupplierPart(models.Model):
""" Represents a unique part as provided by a Supplier
Each SupplierPart is identified by a MPN (Manufacturer Part Number)
Each SupplierPart is also linked to a Part object
- A Part may be available from multiple suppliers
"""
def get_absolute_url(self):
return "/supplier/part/{id}/".format(id=self.id)
class Meta:
unique_together = ('part', 'supplier', 'SKU')
# Link to an actual part
# The part will have a field 'supplier_parts' which links to the supplier part options
part = models.ForeignKey(Part, on_delete=models.CASCADE,
related_name='supplier_parts')
supplier = models.ForeignKey(Company, on_delete=models.CASCADE,
related_name='parts')
SKU = models.CharField(max_length=100, help_text='Supplier stock keeping unit')
manufacturer = models.CharField(max_length=100, blank=True, help_text='Manufacturer')
MPN = models.CharField(max_length=100, blank=True, help_text='Manufacturer part number')
URL = models.URLField(blank=True)
description = models.CharField(max_length=250, blank=True)
# Default price for a single unit
single_price = models.DecimalField(max_digits=10, decimal_places=3, default=0)
# Base charge added to order independent of quantity e.g. "Reeling Fee"
base_cost = models.DecimalField(max_digits=10, decimal_places=3, default=0)
# packaging that the part is supplied in, e.g. "Reel"
packaging = models.CharField(max_length=50, blank=True)
# multiple that the part is provided in
multiple = models.PositiveIntegerField(default=1, validators=[MinValueValidator(0)])
# Mimumum number required to order
minimum = models.PositiveIntegerField(default=1, validators=[MinValueValidator(0)])
# lead time for parts that cannot be delivered immediately
lead_time = models.DurationField(blank=True, null=True)
def __str__(self):
return "{sku} - {supplier}".format(
sku=self.SKU,
supplier=self.supplier.name)
class SupplierPriceBreak(models.Model):
""" Represents a quantity price break for a SupplierPart
- Suppliers can offer discounts at larger quantities
- SupplierPart(s) may have zero-or-more associated SupplierPriceBreak(s)
"""
part = models.ForeignKey(SupplierPart, on_delete=models.CASCADE, related_name='price_breaks')
quantity = models.PositiveIntegerField(validators=[MinValueValidator(0)])
cost = models.DecimalField(max_digits=10, decimal_places=3)
class Meta:
unique_together = ("part", "quantity")
def __str__(self):
return "{mpn} - {cost}{currency} @ {quan}".format(
mpn=self.part.MPN,
cost=self.cost,
currency=self.currency if self.currency else '',
quan=self.quantity)
class SupplierOrder(models.Model):
"""
An order of parts from a supplier, made up of multiple line items
"""
def get_absolute_url(self):
return "/supplier/order/{id}/".format(id=self.id)
# Interal reference for this order
internal_ref = models.CharField(max_length=25, unique=True)
supplier = models.ForeignKey(Company, on_delete=models.CASCADE,
related_name='orders')
created_date = models.DateField(auto_now_add=True, editable=False)
issued_date = models.DateField(blank=True, null=True, help_text="Date the purchase order was issued")
notes = models.TextField(blank=True, help_text="Order notes")
def __str__(self):
return "PO {ref} ({status})".format(ref=self.internal_ref,
status=self.get_status_display)
PENDING = 10 # Order is pending (not yet placed)
PLACED = 20 # Order has been placed
RECEIVED = 30 # Order has been received
CANCELLED = 40 # Order was cancelled
LOST = 50 # Order was lost
ORDER_STATUS_CODES = {PENDING: _("Pending"),
PLACED: _("Placed"),
CANCELLED: _("Cancelled"),
RECEIVED: _("Received"),
LOST: _("Lost")
}
status = models.PositiveIntegerField(default=PENDING,
choices=ORDER_STATUS_CODES.items())
delivery_date = models.DateField(blank=True, null=True)
class SupplierOrderLineItem(models.Model):
"""
A line item in a supplier order, corresponding to some quantity of part
"""
class Meta:
unique_together = [
('order', 'line_number'),
('order', 'supplier_part'),
('order', 'internal_part'),
]
order = models.ForeignKey(SupplierOrder, on_delete=models.CASCADE)
line_number = models.PositiveIntegerField(default=1)
internal_part = models.ForeignKey(Part, null=True, blank=True, on_delete=models.SET_NULL)
supplier_part = models.ForeignKey(SupplierPart, null=True, blank=True, on_delete=models.SET_NULL)
quantity = models.PositiveIntegerField(default=1)
notes = models.TextField(blank=True)
received = models.BooleanField(default=False)

View File

@ -2,26 +2,26 @@
{% block content %}
<h3>Suppliers</h3>
<h3>Companies</h3>
<ul class='list-group'>
{% for supplier in suppliers %}
{% for company in companies %}
<li class='list-group-item'>
<b><a href="{% url 'supplier-detail' supplier.id %}">{{ supplier.name }}</a></b>
<b><a href="{% url 'company-detail' company.id %}">{{ supplier.name }}</a></b>
<br>
{{ supplier.description }}
{% if supplier.website %}
<a href="{{ supplier.website }}">- {{ supplier.website }}</a>
{{ company.description }}
{% if company.website %}
<a href="{{ company.website }}">- {{ company.website }}</a>
{% endif %}
<span class="badge">
{{ supplier.parts.all|length }}
{{ company.parts.all|length }}
</span>
</li>
{% endfor %}
</ul>
<div class='container-fluid'>
<a href="{% url 'supplier-create' %}">
<button class="btn btn-success">New Supplier</button>
<a href="{% url 'company-create' %}">
<button class="btn btn-success">New Company</button>
</a>
</div>

View File

@ -3,94 +3,20 @@ from django.views.generic.base import RedirectView
from . import views
"""
cust_urls = [
# Customer detail
url(r'^(?P<pk>[0-9]+)/?$', api.CustomerDetail.as_view(), name='customer-detail'),
# List customers
url(r'^\?.*/?$', api.CustomerList.as_view()),
url(r'^$', api.CustomerList.as_view())
]
manu_urls = [
# Manufacturer detail
url(r'^(?P<pk>[0-9]+)/?$', api.ManufacturerDetail.as_view(), name='manufacturer-detail'),
# List manufacturers
url(r'^\?.*/?$', api.ManufacturerList.as_view()),
url(r'^$', api.ManufacturerList.as_view())
]
supplier_api_part_urls = [
url(r'^(?P<pk>[0-9]+)/?$', api.SupplierPartDetail.as_view(), name='supplierpart-detail'),
url(r'^\?.*/?$', api.SupplierPartList.as_view()),
url(r'^$', api.SupplierPartList.as_view())
]
price_break_urls = [
url(r'^(?P<pk>[0-9]+)/?$', api.SupplierPriceBreakDetail.as_view(), name='supplierpricebreak-detail'),
url(r'^\?.*/?$', api.SupplierPriceBreakList.as_view()),
url(r'^$', api.SupplierPriceBreakList.as_view())
]
supplier_api_urls = [
# Display details of a supplier
url(r'^(?P<pk>[0-9]+)/$', api.SupplierDetail.as_view(), name='supplier-detail'),
# List suppliers
url(r'^\?.*/?$', api.SupplierList.as_view()),
url(r'^$', api.SupplierList.as_view())
]
"""
company_detail_urls = [
url(r'edit/?', views.CompanyEdit.as_view(), name='company-edit'),
url(r'delete/?', views.CompanyDelete.as_view(), name='company-delete'),
url(r'orders/?', views.CompanyDetail.as_view(template_name='supplier/orders.html'), name='company-detail-orders'),
# url(r'orders/?', views.CompanyDetail.as_view(template_name='company/orders.html'), name='company-detail-orders'),
url(r'^.*$', views.CompanyDetail.as_view(), name='company-detail'),
]
supplier_part_detail_urls = [
url(r'edit/?', views.SupplierPartEdit.as_view(), name='supplier-part-edit'),
url(r'delete/?', views.SupplierPartDelete.as_view(), name='supplier-part-delete'),
url('^.*$', views.SupplierPartDetail.as_view(), name='supplier-part-detail'),
]
supplier_part_urls = [
url(r'^new/?', views.SupplierPartCreate.as_view(), name='supplier-part-create'),
url(r'^(?P<pk>\d+)/', include(supplier_part_detail_urls)),
]
"""
supplier_order_detail_urls = [
url('^.*$', views.SupplierOrderDetail.as_view(), name='supplier-order-detail'),
]
supplier_order_urls = [
url(r'^new/?', views.SupplierOrderCreate.as_view(), name='supplier-order-create'),
url(r'^(?P<pk>\d+)/', include(supplier_order_detail_urls)),
]
"""
company_urls = [
url(r'supplier_part/', include(supplier_part_urls)),
#url(r'order/', include(supplier_order_urls)),
#url(r'new/?', views.SupplierCreate.as_view(), name='supplier-create'),
url(r'new/?', views.CompanyCreate.as_view(), name='company-create'),
url(r'^(?P<pk>\d+)/', include(company_detail_urls)),

View File

@ -6,13 +6,12 @@ from django.views.generic.edit import UpdateView, DeleteView, CreateView
from part.models import Part
from .models import Company
from .models import SupplierPart
from .models import SupplierOrder
#from .models import SupplierOrder
from .forms import EditCompanyForm
from .forms import EditSupplierPartForm
from .forms import EditSupplierOrderForm
#from .forms import EditSupplierOrderForm
"""
class SupplierOrderDetail(DetailView):
context_object_name = 'order'
model = SupplierOrder
@ -35,6 +34,7 @@ class SupplierOrderCreate(CreateView):
initials['supplier'] = get_object_or_404(Supplier, pk=s_id)
return initials
"""
class CompanyIndex(ListView):
@ -44,7 +44,7 @@ class CompanyIndex(ListView):
paginate_by = 50
def get_queryset(self):
return Supplier.objects.order_by('name')
return Company.objects.order_by('name')
class CompanyDetail(DetailView):
@ -58,11 +58,12 @@ class CompanyEdit(UpdateView):
model = Company
form_class = EditCompanyForm
template_name = 'company/edit.html'
context_object_name = 'supplier'
context_object_name = 'company'
class CompanyCreate(CreateView):
model = Company
context_object_name = 'company'
form_class = EditCompanyForm
template_name = "company/create.html"
@ -79,51 +80,3 @@ class CompanyDelete(DeleteView):
return HttpResponseRedirect(self.get_object().get_absolute_url())
class SupplierPartDetail(DetailView):
model = SupplierPart
template_name = 'company/partdetail.html'
context_object_name = 'part'
queryset = SupplierPart.objects.all()
class SupplierPartEdit(UpdateView):
model = SupplierPart
template_name = 'company/partedit.html'
context_object_name = 'part'
form_class = EditSupplierPartForm
class SupplierPartCreate(CreateView):
model = SupplierPart
form_class = EditSupplierPartForm
template_name = 'company/partcreate.html'
context_object_name = 'part'
def get_initial(self):
initials = super(SupplierPartCreate, self).get_initial().copy()
supplier_id = self.request.GET.get('supplier', None)
part_id = self.request.GET.get('part', None)
if supplier_id:
initials['supplier'] = get_object_or_404(Supplier, pk=supplier_id)
# TODO
# self.fields['supplier'].disabled = True
if part_id:
initials['part'] = get_object_or_404(Part, pk=part_id)
# TODO
# self.fields['part'].disabled = True
return initials
class SupplierPartDelete(DeleteView):
model = SupplierPart
success_url = '/supplier/'
template_name = 'company/partdelete.html'
def post(self, request, *args, **kwargs):
if 'confirm' in request.POST:
return super(SupplierPartDelete, self).post(request, *args, **kwargs)
else:
return HttpResponseRedirect(self.get_object().get_absolute_url())