@@ -466,9 +466,15 @@ def get_queryset(self, request: HttpRequest):
466466
467467 @admin .display (description = "name" )
468468 def name (self , obj ):
469- return obj .email . name
469+ return getattr ( obj .email , " name" , None )
470470
471- actions = ["export_as_csv" , "disapprove" , "approve" , "export_rebate_total" ]
471+ actions = [
472+ "export_as_csv" ,
473+ "disapprove" ,
474+ "approve" ,
475+ "export_rebate_total" ,
476+ "find_overlapping_records" ,
477+ ]
472478
473479 @admin .action (description = "Disapprove the students" )
474480 def disapprove (self , request , queryset ):
@@ -501,6 +507,8 @@ def export_as_csv(self, request, queryset):
501507 def export_rebate_total (modeladmin , request , queryset ):
502508 total_days = 0
503509 for obj in queryset :
510+ if obj .start_date > obj .end_date :
511+ continue
504512 total_days += (obj .end_date - obj .start_date ).days + 1
505513
506514 # Create the HttpResponse object with the appropriate CSV header.
@@ -513,6 +521,32 @@ def export_rebate_total(modeladmin, request, queryset):
513521
514522 return response
515523
524+ def find_overlapping_records (self , request , queryset ):
525+ response = HttpResponse (content_type = "text/csv" )
526+ response ["Content-Disposition" ] = 'attachment; filename="Rebate.csv"'
527+
528+ writer = csv .writer (response )
529+ for obj in queryset :
530+ if obj .start_date > obj .end_date :
531+ obj .delete ()
532+ rebates = (
533+ Rebate .objects .filter (email = obj .email )
534+ .filter (start_date__lte = obj .end_date )
535+ .filter (end_date__gte = obj .start_date )
536+ .exclude (pk = obj .pk )
537+ )
538+ for rebate in rebates :
539+ writer .writerow (
540+ [
541+ rebate .email ,
542+ rebate .start_date ,
543+ rebate .end_date ,
544+ getattr (rebate .email , "name" , None ),
545+ ]
546+ )
547+
548+ return response
549+
516550 export_as_csv .short_description = "Export Rebate details to CSV"
517551
518552
0 commit comments