mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-30 04:26:44 +00:00
Renamed 'customer-order' app to 'customer'
- This app should manage more than just orders - Moved the 'Customer' model into this app
This commit is contained in:
parent
53d7fd2c46
commit
8856d7f793
@ -51,7 +51,7 @@ INSTALLED_APPS = [
|
|||||||
'stock.apps.StockConfig',
|
'stock.apps.StockConfig',
|
||||||
'supplier.apps.SupplierConfig',
|
'supplier.apps.SupplierConfig',
|
||||||
'build.apps.BuildConfig',
|
'build.apps.BuildConfig',
|
||||||
'customer_orders.apps.CustomerOrdersConfig'
|
'customer.apps.CustomerConfig'
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
@ -13,7 +13,7 @@ from supplier.urls import supplier_urls
|
|||||||
|
|
||||||
from build.urls import build_urls
|
from build.urls import build_urls
|
||||||
|
|
||||||
from customer_orders.urls import customer_orders_urls
|
from customer.urls import customer_orders_urls
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.conf.urls.static import static
|
from django.conf.urls.static import static
|
||||||
|
21
InvenTree/customer/admin.py
Normal file
21
InvenTree/customer/admin.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
from django.contrib import admin
|
||||||
|
from import_export.admin import ImportExportModelAdmin
|
||||||
|
|
||||||
|
from .models import Customer, CustomerOrder, CustomerOrderLine
|
||||||
|
|
||||||
|
|
||||||
|
class CustomerAdmin(ImportExportModelAdmin):
|
||||||
|
list_display = ('name', 'website', 'contact')
|
||||||
|
|
||||||
|
|
||||||
|
class CustomerOrderAdmin(admin.ModelAdmin):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class CustomerOrderLineAdmin(admin.ModelAdmin):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
admin.site.register(Customer, CustomerAdmin)
|
||||||
|
admin.site.register(CustomerOrder, CustomerOrderAdmin)
|
||||||
|
admin.site.register(CustomerOrderLine, CustomerOrderLineAdmin)
|
5
InvenTree/customer/apps.py
Normal file
5
InvenTree/customer/apps.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class CustomerConfig(AppConfig):
|
||||||
|
name = 'customer'
|
62
InvenTree/customer/migrations/0001_initial.py
Normal file
62
InvenTree/customer/migrations/0001_initial.py
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# -*- 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, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('part', '0022_auto_20180417_0819'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Customer',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('name', models.CharField(max_length=100, unique=True)),
|
||||||
|
('description', models.CharField(max_length=500)),
|
||||||
|
('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='CustomerOrder',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('internal_ref', models.CharField(max_length=100, unique=True)),
|
||||||
|
('customer_ref', models.CharField(blank=True, default=b'', max_length=100)),
|
||||||
|
('created_date', models.DateField(auto_now_add=True, help_text=b'Date order entered in system')),
|
||||||
|
('issued_date', models.DateField(blank=True, help_text=b'Date order issued by customer')),
|
||||||
|
('notes', models.TextField(blank=True, default=b'', help_text=b'Order notes')),
|
||||||
|
('customer', models.ForeignKey(blank=True, help_text=b'Customer that placed this order', null=True, on_delete=django.db.models.deletion.SET_NULL, to='customer.Customer')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='CustomerOrderLine',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('line_number', models.PositiveIntegerField(default=0, help_text=b'Line number')),
|
||||||
|
('quantity', models.PositiveIntegerField(blank=True, help_text=b'Quantity of part')),
|
||||||
|
('notes', models.TextField(blank=True, help_text=b'Line notes')),
|
||||||
|
('customer_order', models.ForeignKey(help_text=b'Order this line belongs to', on_delete=django.db.models.deletion.CASCADE, to='customer.CustomerOrder')),
|
||||||
|
('part', models.ForeignKey(blank=True, help_text=b'Part', on_delete=django.db.models.deletion.CASCADE, to='part.Part')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.AlterUniqueTogether(
|
||||||
|
name='customerorderline',
|
||||||
|
unique_together=set([('customer_order', 'line_number')]),
|
||||||
|
),
|
||||||
|
]
|
@ -60,7 +60,10 @@ class CustomerOrderLine(models.Model):
|
|||||||
line_number = models.PositiveIntegerField(default=0, help_text="Line number")
|
line_number = models.PositiveIntegerField(default=0, help_text="Line number")
|
||||||
|
|
||||||
# TODO: for now, each line corresponds to some quantity of some part, but in future we might want more flexibility
|
# TODO: for now, each line corresponds to some quantity of some part, but in future we might want more flexibility
|
||||||
part = models.ForeignKey(Part, blank=True, help_text="Part")
|
# Only 'salable' items should be allowed in a CSO
|
||||||
|
part = models.ForeignKey(Part, blank=True, help_text="Part",
|
||||||
|
limit_choices_to={'salable' : True}
|
||||||
|
)
|
||||||
|
|
||||||
# TODO: should quantity field here somehow related to quantity field of related part? Views will handle this, right?
|
# TODO: should quantity field here somehow related to quantity field of related part? Views will handle this, right?
|
||||||
quantity = models.PositiveIntegerField(blank=True, help_text="Quantity of part")
|
quantity = models.PositiveIntegerField(blank=True, help_text="Quantity of part")
|
@ -1,15 +0,0 @@
|
|||||||
from django.contrib import admin
|
|
||||||
from import_export.admin import ImportExportModelAdmin
|
|
||||||
|
|
||||||
from .models import CustomerOrder, CustomerOrderLine
|
|
||||||
|
|
||||||
|
|
||||||
class CustomerOrderAdmin(admin.ModelAdmin):
|
|
||||||
pass
|
|
||||||
|
|
||||||
class CustomerOrderLineAdmin(admin.ModelAdmin):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(CustomerOrder, CustomerOrderAdmin)
|
|
||||||
admin.site.register(CustomerOrderLine, CustomerOrderLineAdmin)
|
|
@ -1,5 +0,0 @@
|
|||||||
from django.apps import AppConfig
|
|
||||||
|
|
||||||
|
|
||||||
class CustomerOrdersConfig(AppConfig):
|
|
||||||
name = 'customer_orders'
|
|
@ -1,37 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11 on 2018-04-17 11:27
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
initial = True
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('supplier', '0007_auto_20180416_1253'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='CustomerOrder',
|
|
||||||
fields=[
|
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('customer', models.ForeignKey(blank=True, help_text='Customer that placed this order', null=True, on_delete=django.db.models.deletion.SET_NULL, to='supplier.Customer')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='CustomerOrderLine',
|
|
||||||
fields=[
|
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('line_number', models.PositiveIntegerField(default=0)),
|
|
||||||
('customer_order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='customer_orders.CustomerOrder')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.AlterUniqueTogether(
|
|
||||||
name='customerorderline',
|
|
||||||
unique_together=set([('customer_order', 'line_number')]),
|
|
||||||
),
|
|
||||||
]
|
|
@ -1,73 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11 on 2018-04-17 12:05
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
import django.utils.timezone
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('part', '0019_auto_20180416_1249'),
|
|
||||||
('customer_orders', '0001_initial'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='customerorder',
|
|
||||||
name='created_date',
|
|
||||||
field=models.DateField(auto_now_add=True, default=django.utils.timezone.now, help_text='Date order entered in system'),
|
|
||||||
preserve_default=False,
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='customerorder',
|
|
||||||
name='customer_ref',
|
|
||||||
field=models.CharField(blank=True, default='', max_length=100),
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='customerorder',
|
|
||||||
name='internal_ref',
|
|
||||||
field=models.CharField(default=0, max_length=100, unique=True),
|
|
||||||
preserve_default=False,
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='customerorder',
|
|
||||||
name='issued_date',
|
|
||||||
field=models.DateField(blank=True, default=django.utils.timezone.now, help_text='Date order issued by customer'),
|
|
||||||
preserve_default=False,
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='customerorder',
|
|
||||||
name='notes',
|
|
||||||
field=models.TextField(blank=True, default='', help_text='Order notes'),
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='customerorderline',
|
|
||||||
name='notes',
|
|
||||||
field=models.TextField(blank=True, help_text='Line notes'),
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='customerorderline',
|
|
||||||
name='part',
|
|
||||||
field=models.ForeignKey(default=0, help_text='Part', on_delete=django.db.models.deletion.CASCADE, to='part.Part'),
|
|
||||||
preserve_default=False,
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='customerorderline',
|
|
||||||
name='quantity',
|
|
||||||
field=models.IntegerField(default=1, help_text='Quantity of part'),
|
|
||||||
preserve_default=False,
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='customerorderline',
|
|
||||||
name='customer_order',
|
|
||||||
field=models.ForeignKey(help_text='Order this line belongs to', on_delete=django.db.models.deletion.CASCADE, to='customer_orders.CustomerOrder'),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='customerorderline',
|
|
||||||
name='line_number',
|
|
||||||
field=models.PositiveIntegerField(default=0, help_text='Line number'),
|
|
||||||
),
|
|
||||||
]
|
|
@ -1,48 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11.12 on 2018-04-17 13:23
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('customer_orders', '0002_auto_20180417_2205'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Customer',
|
|
||||||
fields=[
|
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('name', models.CharField(max_length=100, unique=True)),
|
|
||||||
('description', models.CharField(max_length=500)),
|
|
||||||
('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.AlterField(
|
|
||||||
model_name='customerorder',
|
|
||||||
name='customer',
|
|
||||||
field=models.ForeignKey(blank=True, help_text=b'Customer that placed this order', null=True, on_delete=django.db.models.deletion.SET_NULL, to='customer_orders.Customer'),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='customerorderline',
|
|
||||||
name='part',
|
|
||||||
field=models.ForeignKey(blank=True, help_text=b'Part', on_delete=django.db.models.deletion.CASCADE, to='part.Part'),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='customerorderline',
|
|
||||||
name='quantity',
|
|
||||||
field=models.PositiveIntegerField(blank=True, help_text=b'Quantity of part'),
|
|
||||||
),
|
|
||||||
]
|
|
@ -330,7 +330,8 @@ class BomItem(models.Model):
|
|||||||
|
|
||||||
# A link to the parent part
|
# A link to the parent part
|
||||||
# Each part will get a reverse lookup field 'bom_items'
|
# Each part will get a reverse lookup field 'bom_items'
|
||||||
part = models.ForeignKey(Part, on_delete=models.CASCADE, related_name='bom_items')
|
part = models.ForeignKey(Part, on_delete=models.CASCADE, related_name='bom_items',
|
||||||
|
limit_choices_to={'buildable': True})
|
||||||
|
|
||||||
# A link to the child item (sub-part)
|
# A link to the child item (sub-part)
|
||||||
# Each part will get a reverse lookup field 'used_in'
|
# Each part will get a reverse lookup field 'used_in'
|
||||||
|
21
InvenTree/stock/migrations/0013_auto_20180417_1337.py
Normal file
21
InvenTree/stock/migrations/0013_auto_20180417_1337.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# -*- 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, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('stock', '0012_auto_20180417_1316'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='stockitem',
|
||||||
|
name='customer',
|
||||||
|
field=models.ForeignKey(blank=True, help_text='Item assigned to customer?', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='stockitems', to='customer.Customer'),
|
||||||
|
),
|
||||||
|
]
|
@ -12,7 +12,7 @@ from django.dispatch import receiver
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from supplier.models import SupplierPart
|
from supplier.models import SupplierPart
|
||||||
from supplier.models import Customer
|
from customer.models import Customer
|
||||||
from part.models import Part
|
from part.models import Part
|
||||||
from InvenTree.models import InvenTreeTree
|
from InvenTree.models import InvenTreeTree
|
||||||
from build.models import Build
|
from build.models import Build
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from import_export.admin import ImportExportModelAdmin
|
from import_export.admin import ImportExportModelAdmin
|
||||||
|
|
||||||
from .models import Supplier, SupplierPart, Customer, Manufacturer
|
from .models import Supplier, SupplierPart, Manufacturer
|
||||||
|
|
||||||
|
|
||||||
class CompanyAdmin(ImportExportModelAdmin):
|
class SupplierAdmin(ImportExportModelAdmin):
|
||||||
|
list_display = ('name', 'website', 'contact')
|
||||||
|
|
||||||
|
|
||||||
|
class ManufacturerAdmin(ImportExportModelAdmin):
|
||||||
list_display = ('name', 'website', 'contact')
|
list_display = ('name', 'website', 'contact')
|
||||||
|
|
||||||
|
|
||||||
@ -12,7 +16,6 @@ class SupplierPartAdmin(ImportExportModelAdmin):
|
|||||||
list_display = ('part', 'supplier', 'SKU')
|
list_display = ('part', 'supplier', 'SKU')
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(Customer, CompanyAdmin)
|
admin.site.register(Supplier, SupplierAdmin)
|
||||||
admin.site.register(Supplier, CompanyAdmin)
|
admin.site.register(Manufacturer, ManufacturerAdmin)
|
||||||
admin.site.register(Manufacturer, CompanyAdmin)
|
|
||||||
admin.site.register(SupplierPart, SupplierPartAdmin)
|
admin.site.register(SupplierPart, SupplierPartAdmin)
|
||||||
|
18
InvenTree/supplier/migrations/0008_delete_customer.py
Normal file
18
InvenTree/supplier/migrations/0008_delete_customer.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# -*- 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',
|
||||||
|
),
|
||||||
|
]
|
1
Makefile
1
Makefile
@ -19,6 +19,7 @@ migrate:
|
|||||||
python InvenTree/manage.py makemigrations stock
|
python InvenTree/manage.py makemigrations stock
|
||||||
python InvenTree/manage.py makemigrations supplier
|
python InvenTree/manage.py makemigrations supplier
|
||||||
python InvenTree/manage.py makemigrations build
|
python InvenTree/manage.py makemigrations build
|
||||||
|
python InvenTree/manage.py makemigrations customer
|
||||||
python InvenTree/manage.py migrate --run-syncdb
|
python InvenTree/manage.py migrate --run-syncdb
|
||||||
python InvenTree/manage.py check
|
python InvenTree/manage.py check
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user