diff --git a/InvenTree/order/migrations/0080_auto_20230314_0725.py b/InvenTree/order/migrations/0080_auto_20230314_0725.py new file mode 100644 index 0000000000..af3915b642 --- /dev/null +++ b/InvenTree/order/migrations/0080_auto_20230314_0725.py @@ -0,0 +1,64 @@ +# Generated by Django 3.2.18 on 2023-03-14 07:25 + +import InvenTree.fields +import InvenTree.models +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import order.validators + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('company', '0054_companyattachment'), + ('users', '0006_alter_ruleset_name'), + ('order', '0079_auto_20230304_0904'), + ] + + operations = [ + migrations.CreateModel( + name='ReturnOrder', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('metadata', models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata')), + ('reference_int', models.BigIntegerField(default=0)), + ('description', models.CharField(help_text='Order description', max_length=250, verbose_name='Description')), + ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external page', verbose_name='Link')), + ('creation_date', models.DateField(blank=True, null=True, verbose_name='Creation Date')), + ('notes', InvenTree.fields.InvenTreeNotesField(blank=True, help_text='Order notes', max_length=50000, null=True, verbose_name='Notes')), + ('reference', models.CharField(default=order.validators.generate_next_return_order_reference, help_text='Return Order reference', max_length=64, unique=True, validators=[order.validators.validate_return_order_reference], verbose_name='Reference')), + ('status', models.PositiveIntegerField(choices=[(10, 'Pending'), (30, 'Complete'), (40, 'Cancelled')], default=10, help_text='Return order status', verbose_name='Status')), + ('customer_reference', models.CharField(blank=True, help_text='Customer order reference code', max_length=64, verbose_name='Customer Reference ')), + ('issue_date', models.DateField(blank=True, help_text='Date order was issued', null=True, verbose_name='Issue Date')), + ('complete_date', models.DateField(blank=True, help_text='Date order was completed', null=True, verbose_name='Completion Date')), + ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Created By')), + ('customer', models.ForeignKey(help_text='Company from which items are being returned', limit_choices_to={'is_customer': True}, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sales_orders', to='company.company', verbose_name='Customer')), + ('responsible', models.ForeignKey(blank=True, help_text='User or group responsible for this order', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='users.owner', verbose_name='Responsible')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AlterField( + model_name='salesorder', + name='customer', + field=models.ForeignKey(help_text='Company to which the items are being sold', limit_choices_to={'is_customer': True}, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='return_orders', to='company.company', verbose_name='Customer'), + ), + migrations.CreateModel( + name='ReturnOrderAttachment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment')), + ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external URL', null=True, verbose_name='Link')), + ('comment', models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment')), + ('upload_date', models.DateField(auto_now_add=True, null=True, verbose_name='upload date')), + ('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='order.returnorder')), + ('user', models.ForeignKey(blank=True, help_text='User', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/InvenTree/order/migrations/0081_auto_20230314_1259.py b/InvenTree/order/migrations/0081_auto_20230314_1259.py new file mode 100644 index 0000000000..cae36ffdba --- /dev/null +++ b/InvenTree/order/migrations/0081_auto_20230314_1259.py @@ -0,0 +1,30 @@ +# Generated by Django 3.2.18 on 2023-03-14 12:59 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('company', '0054_companyattachment'), + ('order', '0080_auto_20230314_0725'), + ] + + operations = [ + migrations.AddField( + model_name='purchaseorder', + name='contact', + field=models.ForeignKey(blank=True, help_text='Point of contact for this order', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='company.contact', verbose_name='Contact'), + ), + migrations.AddField( + model_name='returnorder', + name='contact', + field=models.ForeignKey(blank=True, help_text='Point of contact for this order', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='company.contact', verbose_name='Contact'), + ), + migrations.AddField( + model_name='salesorder', + name='contact', + field=models.ForeignKey(blank=True, help_text='Point of contact for this order', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='company.contact', verbose_name='Contact'), + ), + ] diff --git a/InvenTree/order/models.py b/InvenTree/order/models.py index 109b2045fa..a9fd1742bc 100644 --- a/InvenTree/order/models.py +++ b/InvenTree/order/models.py @@ -28,7 +28,7 @@ import InvenTree.tasks import order.validators from common.notifications import InvenTreeNotificationBodies from common.settings import currency_code_default -from company.models import Company, SupplierPart +from company.models import Company, Contact, SupplierPart from InvenTree.exceptions import log_error from InvenTree.fields import (InvenTreeModelMoneyField, InvenTreeNotesField, InvenTreeURLField, RoundingDecimalField) @@ -192,6 +192,15 @@ class Order(MetadataMixin, ReferenceIndexingMixin): related_name='+', ) + contact = models.ForeignKey( + Contact, + on_delete=models.SET_NULL, + blank=True, null=True, + verbose_name=_('Contact'), + help_text=_('Point of contact for this order'), + related_name='+', + ) + notes = InvenTreeNotesField(help_text=_('Order notes'))