first push
This commit is contained in:
0
panel/ProvinceOperator/services/__init__.py
Normal file
0
panel/ProvinceOperator/services/__init__.py
Normal file
71
panel/ProvinceOperator/services/pos_transfer_service.py
Normal file
71
panel/ProvinceOperator/services/pos_transfer_service.py
Normal file
@@ -0,0 +1,71 @@
|
||||
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
|
||||
Reference in New Issue
Block a user