added transfer for notes

This commit is contained in:
Anatoly 2019-11-12 15:14:35 +03:00
parent 7064790606
commit 8eac730d9f
10 changed files with 162 additions and 21 deletions

View File

@ -0,0 +1,33 @@
# Generated by Django 2.2.7 on 2019-11-12 10:07
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('establishment', '0058_merge_20191106_0921'),
]
operations = [
migrations.CreateModel(
name='EstablishmentNote',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created')),
('modified', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('old_id', models.PositiveIntegerField(blank=True, null=True)),
('text', models.TextField(verbose_name='text')),
('establishment', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='establishment_notes', to='establishment.Establishment', verbose_name='establishment')),
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='establishment_notes', to=settings.AUTH_USER_MODEL, verbose_name='author')),
],
options={
'verbose_name': 'product notes',
'verbose_name_plural': 'product note',
},
),
]

View File

@ -520,6 +520,30 @@ class Establishment(ProjectBaseMixin, URLImageMixin, TranslatedFieldsMixin):
return self.products.wines()
class EstablishmentNoteQuerySet(models.QuerySet):
"""QuerySet for model EstablishmentNote."""
class EstablishmentNote(ProjectBaseMixin):
"""Note model for Establishment entity."""
old_id = models.PositiveIntegerField(null=True, blank=True)
text = models.TextField(verbose_name=_('text'))
establishment = models.ForeignKey(Establishment, on_delete=models.PROTECT,
related_name='establishment_notes',
verbose_name=_('establishment'))
user = models.ForeignKey('account.User', on_delete=models.PROTECT,
null=True,
related_name='establishment_notes',
verbose_name=_('author'))
objects = EstablishmentNoteQuerySet.as_manager()
class Meta:
"""Meta class."""
verbose_name_plural = _('product note')
verbose_name = _('product notes')
class Position(BaseAttributes, TranslatedFieldsMixin):
"""Position model."""

View File

@ -4,8 +4,9 @@ from django.db.models import Q, F
from establishment.models import Establishment
from location.models import Address
from transfer.models import Establishments, Dishes
from transfer.serializers.establishment import EstablishmentSerializer
from transfer.models import Establishments, Dishes, EstablishmentNotes
from transfer.serializers.establishment import EstablishmentSerializer, \
EstablishmentNoteSerializer
from transfer.serializers.plate import PlateSerializer
@ -124,10 +125,26 @@ def transfer_establishment_addresses():
establishment.save()
def transfer_establishment_note():
errors = []
queryset = EstablishmentNotes.objects.exclude(text__exact='') \
.exclude(text__isnull=True) \
.exclude(establishment_id__isnull=True)
serialized_data = EstablishmentNoteSerializer(
data=list(queryset.values()),
many=True)
if serialized_data.is_valid():
serialized_data.save()
else:
for d in serialized_data.errors: errors.append(d) if d else None
pprint(f"transfer_establishment_note errors: {errors}")
data_types = {
"establishment": [
transfer_establishment,
],
"establishment_note": [transfer_establishment_note],
"location_establishment": [
transfer_establishment_addresses
],

View File

@ -1,4 +1,4 @@
# Generated by Django 2.2.7 on 2019-11-12 09:37
# Generated by Django 2.2.7 on 2019-11-12 10:07
from django.conf import settings
from django.db import migrations, models
@ -24,9 +24,10 @@ class Migration(migrations.Migration):
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created')),
('modified', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('old_id', models.PositiveIntegerField(blank=True, null=True)),
('text', models.TextField(verbose_name='text')),
('product', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='notes', to='product.Product', verbose_name='product')),
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='notes', to=settings.AUTH_USER_MODEL, verbose_name='author')),
('product', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='product_notes', to='product.Product', verbose_name='product')),
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='product_notes', to=settings.AUTH_USER_MODEL, verbose_name='author')),
],
options={
'verbose_name': 'product notes',

View File

@ -414,13 +414,14 @@ class ProductNoteQuerySet(models.QuerySet):
class ProductNote(ProjectBaseMixin):
"""Note model for Product entity."""
old_id = models.PositiveIntegerField(null=True, blank=True)
text = models.TextField(verbose_name=_('text'))
product = models.ForeignKey(Product, on_delete=models.PROTECT,
related_name='notes',
related_name='product_notes',
verbose_name=_('product'))
user = models.ForeignKey('account.User', on_delete=models.PROTECT,
null=True,
related_name='notes',
related_name='product_notes',
verbose_name=_('author'))
objects = ProductNoteQuerySet.as_manager()

View File

@ -101,6 +101,7 @@ def transfer_wine_classifications():
def transfer_product():
errors = []
queryset = transfer_models.Products.objects.all()
serialized_data = product_serializers.ProductSerializer(
data=list(queryset.values()),
@ -108,12 +109,12 @@ def transfer_product():
if serialized_data.is_valid():
serialized_data.save()
else:
errors = []
for d in serialized_data.errors: errors.append(d) if d else None
pprint(f"transfer_product errors: {errors}")
def transfer_product_note():
errors = []
queryset = transfer_models.ProductNotes.objects.exclude(text='')
serialized_data = product_serializers.ProductNoteSerializer(
data=list(queryset.values()),
@ -121,12 +122,12 @@ def transfer_product_note():
if serialized_data.is_valid():
serialized_data.save()
else:
errors = []
for d in serialized_data.errors: errors.append(d) if d else None
pprint(f"transfer_product_note errors: {errors}")
def transfer_plate():
errors = []
queryset = transfer_models.Merchandise.objects.all()
serialized_data = product_serializers.PlateSerializer(
data=list(queryset.values()),
@ -134,12 +135,12 @@ def transfer_plate():
if serialized_data.is_valid():
serialized_data.save()
else:
errors = []
for d in serialized_data.errors: errors.append(d) if d else None
pprint(f"transfer_plates errors: {errors}")
def transfer_plate_image():
errors = []
queryset = transfer_models.Merchandise.objects.all()
serialized_data = product_serializers.PlateImageSerializer(
data=list(queryset.values()),
@ -147,7 +148,6 @@ def transfer_plate_image():
if serialized_data.is_valid():
serialized_data.save()
else:
errors = []
for d in serialized_data.errors: errors.append(d) if d else None
pprint(f"transfer_plates_images errors: {errors}")

View File

@ -34,6 +34,7 @@ class Command(BaseCommand):
'product',
'product_note',
'souvenir',
'establishment_note',
]
def handle(self, *args, **options):

View File

@ -447,6 +447,18 @@ class Establishments(MigrateMixin):
db_table = 'establishments'
class EstablishmentNotes(MigrateMixin):
using = 'legacy'
establishment_id = models.IntegerField(null=True, blank=True)
account_id = models.IntegerField(null=True, blank=True)
text = models.TextField(null=True)
class Meta:
managed = False
db_table = 'notes'
class Descriptions(MigrateMixin):
using = 'legacy'
@ -973,7 +985,7 @@ class Products(MigrateMixin):
class ProductNotes(MigrateMixin):
using = 'legacy'
product = models.ForeignKey(Products, on_delete=models.DO_NOTHING)
product_id = models.IntegerField(null=True, blank=True)
text = models.CharField(max_length=255)
win_import_id = models.CharField(max_length=255)

View File

@ -1,16 +1,17 @@
from django.conf import settings
from django.core.exceptions import MultipleObjectsReturned, ValidationError
from django.db import transaction
from django.utils.text import slugify
from rest_framework import serializers
from establishment.models import Establishment, ContactEmail, ContactPhone, EstablishmentType, \
EstablishmentSubType
from account.models import User
from establishment.models import Establishment, ContactEmail, ContactPhone, \
EstablishmentType, EstablishmentSubType, EstablishmentNote
from location.models import Address
from timetable.models import Timetable
from utils.legacy_parser import parse_legacy_schedule_content
from utils.serializers import TimeZoneChoiceField
from utils.slug_generator import generate_unique_slug
from django.utils.text import slugify
class EstablishmentSerializer(serializers.ModelSerializer):
@ -173,3 +174,45 @@ class EstablishmentSerializer(serializers.ModelSerializer):
index_name=slugify(subtype_name),
establishment_type_id=establishment_type_id)
return subtype
class EstablishmentNoteSerializer(serializers.ModelSerializer):
id = serializers.IntegerField()
establishment_id = serializers.IntegerField()
account_id = serializers.IntegerField(allow_null=True)
text = serializers.CharField(allow_blank=True, allow_null=True)
class Meta:
model = EstablishmentNote
fields = (
'id',
'establishment_id',
'account_id',
'text',
)
def validate(self, attrs):
attrs['old_id'] = attrs['id']
attrs['establishment'] = self.get_establishment(attrs.pop('establishment_id'))
attrs['user'] = self.get_user(attrs.pop('account_id'))
return attrs
def create(self, validated_data):
qs = self.Meta.model.objects.filter(**validated_data)
establishment = validated_data.get('establishment')
if not qs.exists() and establishment:
obj = super().create(validated_data)
return obj
def get_establishment(self, old_id):
if old_id:
qs = Establishment.objects.filter(old_id=old_id)
if qs.exists():
return qs.first()
def get_user(self, old_id):
qs = User.objects.exclude(old_id__isnull=True).filter(old_id=old_id)
if qs.exists():
return qs.first()

View File

@ -543,25 +543,34 @@ class PlateImageSerializer(serializers.ModelSerializer):
return product_qs.first()
class ProductNoteSerializer(TransferSerializerMixin):
product_id = serializers.PrimaryKeyRelatedField(
queryset=transfer_models.Products.objects.all())
class ProductNoteSerializer(serializers.ModelSerializer):
id = serializers.IntegerField()
product_id = serializers.IntegerField()
text = serializers.CharField(allow_blank=True)
class Meta:
model = models.ProductNote
fields = (
'id',
'product_id',
'text',
)
def validate(self, attrs):
attrs['old_id'] = attrs['id']
attrs['product'] = self.get_product(attrs.pop('product_id'))
return attrs
def get_product(self, product):
if product:
old_id = product.id if hasattr(product, 'id') else product
def create(self, validated_data):
qs = self.Meta.model.objects.filter(**validated_data)
product = validated_data.get('product')
if not qs.exists() and product:
return super().create(validated_data)
def get_product(self, old_id):
if old_id:
qs = models.Product.objects.filter(old_id=old_id)
if qs.exists():
return qs.first()