mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Improved Owner.get_owner method and fixed tests (try#2)
This commit is contained in:
parent
49c954aa68
commit
5ca03af3e2
InvenTree
@ -154,7 +154,7 @@ def authorized_owners(group):
|
|||||||
owners = []
|
owners = []
|
||||||
|
|
||||||
try:
|
try:
|
||||||
for owner in group.get_users(include_group=True):
|
for owner in group.get_related_owners(include_group=True):
|
||||||
owners.append(owner.owner)
|
owners.append(owner.owner)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
# group is None
|
# group is None
|
||||||
|
@ -323,11 +323,9 @@ class StockOwnershipTest(StockViewTestCase):
|
|||||||
self.assertEqual(location.owner, user_group_owner)
|
self.assertEqual(location.owner, user_group_owner)
|
||||||
|
|
||||||
# Test item edit
|
# Test item edit
|
||||||
# response = self.client.post(reverse('stock-item-edit', args=(test_item_id,)),
|
response = self.client.post(reverse('stock-item-edit', args=(test_item_id,)),
|
||||||
# {'part': 1, 'status': StockStatus.OK, 'owner': new_user_as_owner.pk},
|
{'part': 1, 'status': StockStatus.OK, 'owner': new_user_as_owner.pk},
|
||||||
# HTTP_X_REQUESTED_WITH='XMLHttpRequest')
|
HTTP_X_REQUESTED_WITH='XMLHttpRequest')
|
||||||
# print(response.content)
|
|
||||||
# self.assertContains(response, '"form_valid": false', status_code=200)
|
|
||||||
|
|
||||||
# Make sure the item's owner is unchanged
|
# Make sure the item's owner is unchanged
|
||||||
item = StockItem.objects.get(pk=test_item_id)
|
item = StockItem.objects.get(pk=test_item_id)
|
||||||
@ -384,18 +382,19 @@ class StockOwnershipTest(StockViewTestCase):
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Try to create new item with no owner
|
# Try to create new item with no owner
|
||||||
# response = self.client.post(reverse('stock-item-create'),
|
response = self.client.post(reverse('stock-item-create'),
|
||||||
# new_item, HTTP_X_REQUESTED_WITH='XMLHttpRequest')
|
new_item, HTTP_X_REQUESTED_WITH='XMLHttpRequest')
|
||||||
# self.assertContains(response, '"form_valid": false', status_code=200)
|
# print(response.content)
|
||||||
|
self.assertContains(response, '"form_valid": false', status_code=200)
|
||||||
|
|
||||||
# Try to create new item with invalid owner
|
# Try to create new item with invalid owner
|
||||||
# new_item['owner'] = user_as_owner
|
new_item['owner'] = user_as_owner.pk
|
||||||
# response = self.client.post(reverse('stock-item-create'),
|
response = self.client.post(reverse('stock-item-create'),
|
||||||
# new_item, HTTP_X_REQUESTED_WITH='XMLHttpRequest')
|
new_item, HTTP_X_REQUESTED_WITH='XMLHttpRequest')
|
||||||
# self.assertContains(response, '"form_valid": false', status_code=200)
|
self.assertContains(response, '"form_valid": false', status_code=200)
|
||||||
|
|
||||||
# Try to create new item with valid owner
|
# Try to create new item with valid owner
|
||||||
new_item['owner'] = new_user_as_owner
|
new_item['owner'] = new_user_as_owner.pk
|
||||||
response = self.client.post(reverse('stock-item-create'),
|
response = self.client.post(reverse('stock-item-create'),
|
||||||
new_item, HTTP_X_REQUESTED_WITH='XMLHttpRequest')
|
new_item, HTTP_X_REQUESTED_WITH='XMLHttpRequest')
|
||||||
self.assertContains(response, '"form_valid": true', status_code=200)
|
self.assertContains(response, '"form_valid": true', status_code=200)
|
||||||
|
@ -37,6 +37,7 @@ from .models import StockItem, StockLocation, StockItemTracking, StockItemAttach
|
|||||||
|
|
||||||
import common.settings
|
import common.settings
|
||||||
from common.models import InvenTreeSetting
|
from common.models import InvenTreeSetting
|
||||||
|
from users.models import Owner
|
||||||
|
|
||||||
from .admin import StockItemResource
|
from .admin import StockItemResource
|
||||||
|
|
||||||
@ -166,7 +167,7 @@ class StockLocationEdit(AjaxUpdateView):
|
|||||||
|
|
||||||
stock_ownership_control = InvenTreeSetting.get_setting('STOCK_OWNERSHIP_CONTROL')
|
stock_ownership_control = InvenTreeSetting.get_setting('STOCK_OWNERSHIP_CONTROL')
|
||||||
if stock_ownership_control:
|
if stock_ownership_control:
|
||||||
authorized_owners = self.object.owner.get_users()
|
authorized_owners = self.object.owner.get_related_owners()
|
||||||
|
|
||||||
# Update children locations
|
# Update children locations
|
||||||
children_locations = self.object.get_children()
|
children_locations = self.object.get_children()
|
||||||
@ -1427,9 +1428,10 @@ class StockItemEdit(AjaxUpdateView):
|
|||||||
|
|
||||||
# Check location owner type and filter
|
# Check location owner type and filter
|
||||||
if type(location_owner.owner) is Group:
|
if type(location_owner.owner) is Group:
|
||||||
queryset = location_owner.get_users(include_group=True)
|
user_as_owner = Owner.get_owner(self.request.user)
|
||||||
if self.request.user in queryset:
|
queryset = location_owner.get_related_owners(include_group=True)
|
||||||
form.fields['owner'].initial = self.request.user
|
if user_as_owner in queryset:
|
||||||
|
form.fields['owner'].initial = user_as_owner
|
||||||
form.fields['owner'].queryset = queryset
|
form.fields['owner'].queryset = queryset
|
||||||
elif type(location_owner.owner) is User:
|
elif type(location_owner.owner) is User:
|
||||||
form.fields['owner'].disabled = True
|
form.fields['owner'].disabled = True
|
||||||
@ -1446,9 +1448,10 @@ class StockItemEdit(AjaxUpdateView):
|
|||||||
|
|
||||||
# Check location owner type and filter
|
# Check location owner type and filter
|
||||||
if type(item_owner.owner) is Group:
|
if type(item_owner.owner) is Group:
|
||||||
queryset = item_owner.get_users(include_group=True)
|
user_as_owner = Owner.get_owner(self.request.user)
|
||||||
if self.request.user in queryset:
|
queryset = item_owner.get_related_owners(include_group=True)
|
||||||
form.fields['owner'].initial = self.request.user
|
if user_as_owner in queryset:
|
||||||
|
form.fields['owner'].initial = user_as_owner
|
||||||
form.fields['owner'].queryset = queryset
|
form.fields['owner'].queryset = queryset
|
||||||
elif type(item_owner.owner) is User:
|
elif type(item_owner.owner) is User:
|
||||||
form.fields['owner'].disabled = True
|
form.fields['owner'].disabled = True
|
||||||
@ -1727,6 +1730,8 @@ class StockItemCreate(AjaxCreateView):
|
|||||||
ForeignKey choices based on other selections
|
ForeignKey choices based on other selections
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
print('------------ FORM ------------------')
|
||||||
|
|
||||||
form = super().get_form()
|
form = super().get_form()
|
||||||
|
|
||||||
# Hide the "expiry date" field if the feature is not enabled
|
# Hide the "expiry date" field if the feature is not enabled
|
||||||
@ -1797,17 +1802,25 @@ class StockItemCreate(AjaxCreateView):
|
|||||||
if not stock_ownership_control:
|
if not stock_ownership_control:
|
||||||
form.fields['owner'].widget = HiddenInput()
|
form.fields['owner'].widget = HiddenInput()
|
||||||
else:
|
else:
|
||||||
|
print('> Stock ownership is enabled')
|
||||||
try:
|
try:
|
||||||
location_owner = location.owner
|
location_owner = location.owner
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
location_owner = None
|
location_owner = None
|
||||||
|
|
||||||
|
print(f'{location_owner=}')
|
||||||
|
|
||||||
if location_owner:
|
if location_owner:
|
||||||
# Check location owner type and filter
|
# Check location owner type and filter
|
||||||
if type(location_owner.owner) is Group:
|
if type(location_owner.owner) is Group:
|
||||||
queryset = location_owner.get_users()
|
print(f'{self.request.user=}')
|
||||||
if self.request.user in queryset:
|
user_as_owner = Owner.get_owner(self.request.user)
|
||||||
form.fields['owner'].initial = self.request.user
|
print(f'{user_as_owner=}')
|
||||||
|
queryset = location_owner.get_related_owners()
|
||||||
|
print(f'{queryset=}')
|
||||||
|
|
||||||
|
if user_as_owner in queryset:
|
||||||
|
form.fields['owner'].initial = user_as_owner
|
||||||
form.fields['owner'].queryset = queryset
|
form.fields['owner'].queryset = queryset
|
||||||
elif type(location_owner.owner) is User:
|
elif type(location_owner.owner) is User:
|
||||||
form.fields['owner'].disabled = True
|
form.fields['owner'].disabled = True
|
||||||
|
@ -422,27 +422,62 @@ class Owner(models.Model):
|
|||||||
except IntegrityError:
|
except IntegrityError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
return existing_owner
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_owner(cls, user_or_group):
|
def get_owner(cls, user_or_group):
|
||||||
|
|
||||||
# Get corresponding owner
|
owner = None
|
||||||
try:
|
content_type_id = 0
|
||||||
group = Owner.objects.get(owner_id=user_or_group.id,
|
content_type_id_list = [ContentType.objects.get_for_model(Group).id,
|
||||||
owner_type=ContentType.objects.get_for_model(Group).id)
|
ContentType.objects.get_for_model(User).id]
|
||||||
return group
|
|
||||||
except Owner.DoesNotExist:
|
|
||||||
pass
|
|
||||||
|
|
||||||
try:
|
# If instance type is obvious: set content type
|
||||||
user = Owner.objects.get(owner_id=user_or_group.id,
|
if type(user_or_group) is Group:
|
||||||
owner_type=ContentType.objects.get_for_model(User).id)
|
content_type_id = content_type_id_list[0]
|
||||||
return user
|
elif type(user_or_group) is User:
|
||||||
except Owner.DoesNotExist:
|
content_type_id = content_type_id_list[1]
|
||||||
pass
|
|
||||||
|
|
||||||
return None
|
if content_type_id:
|
||||||
|
try:
|
||||||
|
owner = Owner.objects.get(owner_id=user_or_group.id,
|
||||||
|
owner_type=content_type_id)
|
||||||
|
except Owner.DoesNotExist:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
# Check whether user_or_group is a Group instance
|
||||||
|
try:
|
||||||
|
group = Group.objects.get(pk=user_or_group.id)
|
||||||
|
except Group.DoesNotExist:
|
||||||
|
group = None
|
||||||
|
|
||||||
def get_users(self, include_group=False):
|
if group:
|
||||||
|
try:
|
||||||
|
owner = Owner.objects.get(owner_id=user_or_group.id,
|
||||||
|
owner_type=content_type_id_list[0])
|
||||||
|
except Owner.DoesNotExist:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return owner
|
||||||
|
|
||||||
|
# Check whether user_or_group is a User instance
|
||||||
|
try:
|
||||||
|
user = User.objects.get(pk=user_or_group.id)
|
||||||
|
except User.DoesNotExist:
|
||||||
|
user = None
|
||||||
|
|
||||||
|
if user:
|
||||||
|
try:
|
||||||
|
owner = Owner.objects.get(owner_id=user_or_group.id,
|
||||||
|
owner_type=content_type_id_list[1])
|
||||||
|
except Owner.DoesNotExist:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return owner
|
||||||
|
|
||||||
|
return owner
|
||||||
|
|
||||||
|
def get_related_owners(self, include_group=False):
|
||||||
|
|
||||||
owner_users = None
|
owner_users = None
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user