* payment_proof is now a single image + migration from m2m
+ split_payment_proof
This commit is contained in:
parent
5e76ee775d
commit
5a1afdf07b
|
|
@ -0,0 +1,59 @@
|
|||
# Generated by Django 4.2.2 on 2023-08-21 10:41
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
def move_m2m_payment_proof_to_image(apps, schema_editor):
|
||||
Checklist = apps.get_model('store', 'Checklist')
|
||||
for checklist in Checklist.objects.all():
|
||||
img_obj = checklist.payment_proof.all().first()
|
||||
if img_obj:
|
||||
checklist._payment_proof = img_obj.image
|
||||
checklist.save()
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('store', '0041_remove_category_slug_remove_checklist_subcategory_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='OldChecklist',
|
||||
fields=[
|
||||
('id', models.CharField(max_length=10, primary_key=True, serialize=False)),
|
||||
('category_id', models.PositiveIntegerField()),
|
||||
('subcategory', models.CharField(blank=True, max_length=20, null=True, verbose_name='Подкатегория')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'store_checklist',
|
||||
'managed': False,
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='checklist',
|
||||
name='_payment_proof',
|
||||
field=models.ImageField(blank=True, null=True, upload_to='docs/', verbose_name='Подтверждение оплаты'),
|
||||
),
|
||||
|
||||
migrations.RunPython(code=move_m2m_payment_proof_to_image),
|
||||
|
||||
migrations.RemoveField(
|
||||
model_name='checklist',
|
||||
name='payment_proof',
|
||||
),
|
||||
|
||||
migrations.RenameField(
|
||||
model_name='checklist',
|
||||
old_name='_payment_proof',
|
||||
new_name='payment_proof',
|
||||
),
|
||||
|
||||
migrations.AddField(
|
||||
model_name='checklist',
|
||||
name='split_payment_proof',
|
||||
field=models.ImageField(blank=True, null=True, upload_to='docs/', verbose_name='Подтверждение оплаты сплита'),
|
||||
),
|
||||
]
|
||||
|
|
@ -229,7 +229,6 @@ def generate_checklist_id():
|
|||
class ChecklistQuerySet(models.QuerySet):
|
||||
def with_base_related(self):
|
||||
return self.select_related('manager', 'category', 'payment_method', 'promocode')\
|
||||
.prefetch_related('payment_proof') \
|
||||
.prefetch_related(Prefetch('images', to_attr='_images'))
|
||||
|
||||
def default_ordering(self):
|
||||
|
|
@ -337,7 +336,12 @@ class Checklist(models.Model):
|
|||
on_delete=models.SET_NULL)
|
||||
|
||||
images = models.ManyToManyField('Image', verbose_name='Изображения', related_name='+', blank=True)
|
||||
payment_proof = models.ManyToManyField('Image', verbose_name='Подтверждение оплаты', related_name='+', blank=True) # paymentprovement
|
||||
payment_proof = models.ImageField('Подтверждение оплаты', upload_to=Image.TYPE_TO_UPLOAD_PATH[Image.DOC],
|
||||
null=True, blank=True) # paymentprovement
|
||||
split_payment_proof = models.ImageField('Подтверждение оплаты сплита',
|
||||
upload_to=Image.TYPE_TO_UPLOAD_PATH[Image.DOC],
|
||||
null=True, blank=True)
|
||||
|
||||
receipt = models.ImageField('Фото чека', upload_to=Image.TYPE_TO_UPLOAD_PATH[Image.DOC], null=True, blank=True) # checkphoto
|
||||
|
||||
delivery = models.CharField('Тип доставки', max_length=15, choices=DeliveryType.CHOICES, null=True, blank=True)
|
||||
|
|
|
|||
|
|
@ -97,7 +97,8 @@ class ChecklistSerializer(serializers.ModelSerializer):
|
|||
paymenttype = serializers.SlugRelatedField(source='payment_method', slug_field='slug',
|
||||
queryset=PaymentMethod.objects.all(),
|
||||
required=False, allow_null=True)
|
||||
paymentprovement = ImageListSerializer(source='payment_proof', required=False, allow_null=True)
|
||||
paymentprovement = Base64ImageField(source='payment_proof', required=False, allow_null=True)
|
||||
split_payment_proof = Base64ImageField(required=False, allow_null=True)
|
||||
checkphoto = Base64ImageField(source='receipt', required=False, allow_null=True)
|
||||
trackid = serializers.CharField(source='poizon_tracking', required=False, allow_null=True)
|
||||
cdek_tracking = serializers.CharField(required=False, allow_null=True)
|
||||
|
|
@ -109,7 +110,7 @@ class ChecklistSerializer(serializers.ModelSerializer):
|
|||
|
||||
def _collect_images_by_fields(self, validated_data):
|
||||
images = {}
|
||||
for k in ('main_images', 'payment_proof'):
|
||||
for k in ('main_images',):
|
||||
if k in validated_data:
|
||||
images[k] = validated_data.pop(k)
|
||||
|
||||
|
|
@ -124,20 +125,11 @@ class ChecklistSerializer(serializers.ModelSerializer):
|
|||
instance.images.set(img_objs)
|
||||
instance.generate_preview(next(iter(img_objs), None))
|
||||
|
||||
def _create_payment_proofs(self, instance, images):
|
||||
if images is None:
|
||||
return
|
||||
|
||||
img_objs = [Image(image=img['image'], type=Image.DOC) for img in images]
|
||||
img_objs = Image.objects.bulk_create(img_objs)
|
||||
instance.payment_proof.set(img_objs)
|
||||
|
||||
def create(self, validated_data):
|
||||
images = self._collect_images_by_fields(validated_data)
|
||||
|
||||
instance = super().create(validated_data)
|
||||
self._create_main_images(instance, images.get('main_images'))
|
||||
self._create_payment_proofs(instance, images.get('payment_proof'))
|
||||
return instance
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
|
|
@ -147,13 +139,12 @@ class ChecklistSerializer(serializers.ModelSerializer):
|
|||
instance: Checklist = super().update(instance, validated_data)
|
||||
|
||||
self._create_main_images(instance, images.get('main_images'))
|
||||
self._create_payment_proofs(instance, images.get('payment_proof'))
|
||||
|
||||
# Invalidate prefetched images
|
||||
delattr(instance, '_images')
|
||||
|
||||
if instance.status == Checklist.Status.NEW:
|
||||
has_payment_info = instance.payment_proof.exists() and instance.payment_method is not None
|
||||
has_payment_info = instance.payment_proof is not None and instance.payment_method is not None
|
||||
if has_payment_info:
|
||||
instance.status = Checklist.Status.PAYMENT
|
||||
instance.save()
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user