Skip to content

Commit d958f33

Browse files
zwidekalangailoveagent57
authored andcommitted
chore: refactor LCR bulk actions to align with Content Assignments architecture
1 parent dfdeddf commit d958f33

8 files changed

Lines changed: 872 additions & 664 deletions

File tree

enterprise_access/apps/api/serializers/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,9 @@
6767
CouponCodeRequestSerializer,
6868
LearnerCreditRequestApproveAllSerializer,
6969
LearnerCreditRequestApproveRequestSerializer,
70-
LearnerCreditRequestBulkApproveRequestSerializer,
71-
LearnerCreditRequestBulkDeclineSerializer,
7270
LearnerCreditRequestCancelAllSerializer,
7371
LearnerCreditRequestCancelSerializer,
72+
LearnerCreditRequestDeclineAllSerializer,
7473
LearnerCreditRequestDeclineSerializer,
7574
LearnerCreditRequestRemindAllSerializer,
7675
LearnerCreditRequestRemindSerializer,

enterprise_access/apps/api/serializers/subsidy_requests.py

Lines changed: 12 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,16 @@ def update(self, instance, validated_data):
338338
raise NotImplementedError("This serializer is for validation only")
339339

340340

341+
class LearnerCreditRequestDeclineAllSerializer(serializers.Serializer):
342+
"""
343+
Request serializer to validate the decline-all action.
344+
"""
345+
policy_uuid = serializers.UUIDField(
346+
required=True,
347+
help_text="The UUID of the SubsidyAccessPolicy to filter requests by."
348+
)
349+
350+
341351
# pylint: disable=abstract-method
342352
class LearnerCreditRequestCancelSerializer(serializers.Serializer):
343353
"""
@@ -409,51 +419,14 @@ class LearnerCreditRequestRemindSerializer(serializers.Serializer):
409419
Request serializer to validate remind endpoint for LearnerCreditRequests.
410420
411421
For view: LearnerCreditRequestViewSet.remind
412-
413-
Supports both:
414-
- learner_credit_request_uuid: Single UUID (backwards-compatible)
415-
- learner_credit_request_uuids: List of UUIDs
416-
At least one must be provided.
417422
"""
418-
learner_credit_request_uuid = serializers.UUIDField(
419-
required=False,
420-
allow_null=True,
421-
help_text="A single LearnerCreditRequest UUID to be reminded (backwards-compatible)."
422-
)
423423
learner_credit_request_uuids = serializers.ListField(
424424
child=serializers.UUIDField(),
425-
required=False,
426-
allow_empty=True,
425+
required=True,
426+
allow_empty=False,
427427
help_text="A list of LearnerCreditRequest UUIDs to be reminded."
428428
)
429429

430-
def validate(self, attrs):
431-
"""
432-
Validate that at least one of learner_credit_request_uuid or learner_credit_request_uuids is provided.
433-
"""
434-
single_uuid = attrs.get('learner_credit_request_uuid')
435-
uuid_list = attrs.get('learner_credit_request_uuids', [])
436-
437-
if not single_uuid and not uuid_list:
438-
raise serializers.ValidationError(
439-
"Either 'learner_credit_request_uuid' or 'learner_credit_request_uuids' must be provided."
440-
)
441-
442-
return attrs
443-
444-
def get_learner_credit_request_uuids(self):
445-
"""
446-
Returns a list of UUIDs to remind, handling both single and list inputs.
447-
"""
448-
single_uuid = self.validated_data.get('learner_credit_request_uuid')
449-
uuid_list = self.validated_data.get('learner_credit_request_uuids', [])
450-
451-
if uuid_list:
452-
return uuid_list
453-
elif single_uuid:
454-
return [single_uuid]
455-
return []
456-
457430

458431
class LearnerCreditRequestRemindAllSerializer(serializers.Serializer):
459432
"""
@@ -465,97 +438,3 @@ class LearnerCreditRequestRemindAllSerializer(serializers.Serializer):
465438
required=True,
466439
help_text="The UUID of the SubsidyAccessPolicy to filter requests."
467440
)
468-
469-
470-
class LearnerCreditRequestBulkApproveRequestSerializer(serializers.Serializer):
471-
"""
472-
Serializer for bulk approving learner credit requests.
473-
"""
474-
policy_uuid = serializers.UUIDField(
475-
required=True,
476-
help_text='The UUID of the subsidy access policy to use for approval.',
477-
)
478-
enterprise_customer_uuid = serializers.UUIDField(
479-
required=True,
480-
help_text='The UUID of the enterprise customer.',
481-
)
482-
approve_all = serializers.BooleanField(
483-
required=False,
484-
default=False,
485-
help_text='If true, approve all pending requests for the enterprise customer.',
486-
)
487-
subsidy_request_uuids = serializers.ListField(
488-
child=serializers.UUIDField(),
489-
required=False,
490-
help_text='List of subsidy request UUIDs to approve.',
491-
)
492-
493-
def validate(self, attrs):
494-
"""
495-
Validate that either approve_all is True or subsidy_request_uuids is provided, but not both.
496-
"""
497-
approve_all = attrs.get('approve_all', False)
498-
subsidy_request_uuids = attrs.get('subsidy_request_uuids', [])
499-
500-
if approve_all and subsidy_request_uuids:
501-
raise serializers.ValidationError(
502-
'Cannot specify both approve_all and subsidy_request_uuids. Please choose one.'
503-
)
504-
505-
if not approve_all and not subsidy_request_uuids:
506-
raise serializers.ValidationError(
507-
'Must specify either approve_all=True or provide subsidy_request_uuids.'
508-
)
509-
510-
return attrs
511-
512-
513-
class LearnerCreditRequestBulkDeclineSerializer(serializers.Serializer):
514-
"""
515-
Serializer for bulk declining learner credit requests.
516-
517-
Request Payload:
518-
{
519-
"enterprise_customer_uuid": "<uuid>", # Required for permission checking
520-
"subsidy_request_uuids": [],
521-
"decline_all": false,
522-
"policy_uuid": "<uuid>"
523-
}
524-
"""
525-
enterprise_customer_uuid = serializers.UUIDField(
526-
required=True,
527-
help_text='The UUID of the enterprise customer.',
528-
)
529-
policy_uuid = serializers.UUIDField(
530-
required=True,
531-
help_text='The UUID of the subsidy access policy associated with the requests.',
532-
)
533-
decline_all = serializers.BooleanField(
534-
required=False,
535-
default=False,
536-
help_text='If true, decline all open requests associated with a budget.',
537-
)
538-
subsidy_request_uuids = serializers.ListField(
539-
child=serializers.UUIDField(),
540-
required=False,
541-
help_text='List of learner credit request UUIDs to decline.',
542-
)
543-
544-
def validate(self, attrs):
545-
"""
546-
Validate that either decline_all is True or subsidy_request_uuids is provided, but not both.
547-
"""
548-
decline_all = attrs.get('decline_all', False)
549-
subsidy_request_uuids = attrs.get('subsidy_request_uuids', [])
550-
551-
if decline_all and subsidy_request_uuids:
552-
raise serializers.ValidationError(
553-
'Cannot specify both decline_all and subsidy_request_uuids. Please choose one.'
554-
)
555-
556-
if not decline_all and not subsidy_request_uuids:
557-
raise serializers.ValidationError(
558-
'Must specify either decline_all=True or provide subsidy_request_uuids.'
559-
)
560-
561-
return attrs

0 commit comments

Comments
 (0)