Files
Rasadyar_Kurdestan/panel/ProvinceOperator/services/pos_transfer_service.py
2026-01-18 11:59:48 +03:30

72 lines
2.2 KiB
Python

import secrets
from panel.models import POSAuditLog, POSAccessLevel, POSMachine
from django.db import transaction
def make_unique_id():
while True:
random_number = ''.join(str(secrets.randbelow(10)) for _ in range(6))
if not POSMachine.objects.filter(pos_unique_id=random_number).exists():
return random_number
class POSTransferService:
ACTION_MAP = {
'owner': 'CHANGE_OWNER',
'current_user': 'CHANGE_CURRENT_USER',
'representative': 'CHANGE_REPRESENTATIVE',
}
@staticmethod
@transaction.atomic
def transfer(pos, recipient_type, recipient, performed_by):
old_state = {
"owner": pos.owner_id,
"current_user": pos.current_user_id,
"current_representative": pos.current_representative_id,
}
pos.current_user = None
pos.current_representative = None
if recipient_type == 'owner':
pos.owner = recipient
pos.current_user = None
pos.current_representative = None
if not pos.pos_unique_id:
pos.pos_unique_id = make_unique_id()
elif recipient_type == 'current_user':
pos.current_user = recipient
pos.current_representative = None
elif recipient_type == 'representative':
pos.current_representative = recipient
pos.current_user = None
pos.save()
if recipient_type == 'owner':
POSAccessLevel.objects.filter(pos=pos).delete()
user_roles = recipient.role.all()
for role in user_roles:
if role.name in ['KillHouse', 'Steward', 'Guilds']:
POSAccessLevel.objects.create(
pos=pos,
name=role.name
)
POSAuditLog.objects.create(
pos=pos,
action=POSTransferService.ACTION_MAP[recipient_type],
performed=performed_by,
old_value=old_state,
new_value={
"recipient_type": recipient_type,
"recipient_id": recipient.id
},
description="انتقال دستگاه پوز"
)
return pos