@@ -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
342352class 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
458431class 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