kwork-poizonstore/account/migrations/0011_alter_bonusprogramtransaction_options.py
phzhik ef40e9f7e0 + Bonus system (TODO: spend bonuses)
+ Telegram bot: sign up, sign in, notifications

+ Anonymous users can't see yuan_rate_commission
* Only logged in customers can create/update orders
* Customer info migrated to separate User model
* Renamed legacy fields in serializers
* Cleanup in API classes
2024-04-27 21:29:50 +04:00

58 lines
1.8 KiB
Python

# Generated by Django 4.2.2 on 2024-04-07 23:27
from django.contrib.auth.hashers import make_password
from django.db import migrations
from phonenumber_field.phonenumber import PhoneNumber
def move_buyer_info_to_account(apps, schema_editor):
Checklist = apps.get_model("store", "Checklist")
User = apps.get_model("account", "User")
# Normalize phone numbers first
for order in Checklist.objects.all():
if order.buyer_phone is None:
continue
old_phone = order.buyer_phone
new_phone = PhoneNumber.from_string(order.buyer_phone, region="RU").as_e164
if old_phone != new_phone:
print(f"{old_phone} -> {new_phone}")
order.buyer_phone = new_phone
order.save(update_fields=['buyer_phone'])
# Move buyer info to User
for order in Checklist.objects.all():
fields_to_copy = {
'first_name': order.buyer_name,
'telegram': order.buyer_telegram,
}
if order.buyer_phone is None:
User.objects.create(**fields_to_copy)
created = True
else:
obj, created = User.objects.update_or_create(phone=order.buyer_phone, defaults=fields_to_copy)
if created:
obj.is_draft_user = True
obj.password = make_password(None)
obj.save(update_fields=['password'])
# Bind customer to order
order.customer_id = obj.id
order.save(update_fields=['customer_id'])
class Migration(migrations.Migration):
dependencies = [
('account', '0010_bonusprogramtransaction_comment'),
]
operations = [
migrations.AlterModelOptions(
name='bonusprogramtransaction',
options={'ordering': ['-date']},
),
migrations.RunPython(move_buyer_info_to_account, migrations.RunPython.noop),
]