mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +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',
|
||||
'supplier.apps.SupplierConfig',
|
||||
'build.apps.BuildConfig',
|
||||
'customer_orders.apps.CustomerOrdersConfig'
|
||||
'customer.apps.CustomerConfig'
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
@ -13,7 +13,7 @@ from supplier.urls import supplier_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.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")
|
||||
|
||||
# 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?
|
||||
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
|
||||
# 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)
|
||||
# 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 supplier.models import SupplierPart
|
||||
from supplier.models import Customer
|
||||
from customer.models import Customer
|
||||
from part.models import Part
|
||||
from InvenTree.models import InvenTreeTree
|
||||
from build.models import Build
|
||||
|
@ -1,10 +1,14 @@
|
||||
from django.contrib import admin
|
||||
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')
|
||||
|
||||
|
||||
@ -12,7 +16,6 @@ class SupplierPartAdmin(ImportExportModelAdmin):
|
||||
list_display = ('part', 'supplier', 'SKU')
|
||||
|
||||
|
||||
admin.site.register(Customer, CompanyAdmin)
|
||||
admin.site.register(Supplier, CompanyAdmin)
|
||||
admin.site.register(Manufacturer, CompanyAdmin)
|
||||
admin.site.register(Supplier, SupplierAdmin)
|
||||
admin.site.register(Manufacturer, ManufacturerAdmin)
|
||||
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 supplier
|
||||
python InvenTree/manage.py makemigrations build
|
||||
python InvenTree/manage.py makemigrations customer
|
||||
python InvenTree/manage.py migrate --run-syncdb
|
||||
python InvenTree/manage.py check
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user