/muse/licenses/serializers.py

https://gitlab.com/muse-genomics/muse-app · Python · 154 lines · 112 code · 42 blank · 0 comment · 0 complexity · e11508f67fae55fe0e042d59c86c9886 MD5 · raw file

  1. from django.db.models import Q
  2. from django.utils.translation import ugettext_lazy as _
  3. from rest_framework.renderers import JSONRenderer
  4. from rest_framework import serializers
  5. from licenses.models import Package, PackageAddOn, License,\
  6. Bill, BillPackageAddOn
  7. from licenses.licenses_validator import LicensesValidator,\
  8. BillPackageAddonValidator
  9. class PackageAddOnSerializer(serializers.ModelSerializer):
  10. creator = serializers.PrimaryKeyRelatedField(
  11. read_only=True,
  12. default=serializers.CreateOnlyDefault(
  13. serializers.CurrentUserDefault()))
  14. class Meta:
  15. model = PackageAddOn
  16. exclude = ('creator', )
  17. def __init__(self, *args, **kwargs):
  18. kwargs['partial'] = True
  19. super(self.__class__, self).__init__(*args, **kwargs)
  20. class PackageAddOnPublicSerializer(serializers.ModelSerializer):
  21. class Meta:
  22. model = PackageAddOn
  23. exclude = ('creator', 'created', 'modified', 'is_active', 'package',)
  24. def __init__(self, *args, **kwargs):
  25. kwargs['partial'] = True
  26. super(self.__class__, self).__init__(*args, **kwargs)
  27. class PackageSerializer(serializers.ModelSerializer):
  28. addons = PackageAddOnSerializer(many=True, required=False)
  29. creator = serializers.PrimaryKeyRelatedField(
  30. read_only=True,
  31. default=serializers.CreateOnlyDefault(
  32. serializers.CurrentUserDefault()))
  33. class Meta:
  34. model = Package
  35. exclude = ('creator',)
  36. def __init__(self, *args, **kwargs):
  37. kwargs['partial'] = True
  38. super(self.__class__, self).__init__(*args, **kwargs)
  39. class PackagePublicSerializer(serializers.ModelSerializer):
  40. addons = PackageAddOnPublicSerializer(many=True)
  41. class Meta:
  42. model = Package
  43. fields = (
  44. 'id', 'name', 'plan_cost', 'maximum_users', 'maximum_samples',
  45. 'plan_description', 'addons', )
  46. class CalculatorAddonSerializer(serializers.ModelSerializer):
  47. total_units = serializers.IntegerField(required=True, write_only=True)
  48. class Meta:
  49. model = PackageAddOn
  50. exclude = (
  51. 'created', 'modified', 'is_active', 'creator', 'package',
  52. 'low_value', 'high_value')
  53. class CalculatorSerializer(serializers.ModelSerializer):
  54. addons = CalculatorAddonSerializer(many=True, required=False)
  55. total_cost = serializers.DecimalField(
  56. max_digits=10, decimal_places=2, required=False)
  57. class Meta:
  58. model = Package
  59. fields = (
  60. 'addons', 'total_cost', 'plan_term_months',
  61. 'plan_cost', 'id')
  62. class BillPackageAddOnSerializer(serializers.ModelSerializer):
  63. class Meta:
  64. model = BillPackageAddOn
  65. exclude = ()
  66. class BillSerializer(serializers.ModelSerializer):
  67. addons = BillPackageAddOnSerializer(many=True, required=False)
  68. creator = serializers.PrimaryKeyRelatedField(
  69. read_only=True,
  70. default=serializers.CreateOnlyDefault(
  71. serializers.CurrentUserDefault()))
  72. class Meta:
  73. model = Bill
  74. exclude = ('internal_notes',)
  75. def __init__(self, *args, **kwargs):
  76. kwargs['partial'] = True
  77. super(self.__class__, self).__init__(*args, **kwargs)
  78. def validate(self, data):
  79. print('serializer data', data)
  80. BillPackageAddonValidator.validate(data.get('license'), data.get('addons'))
  81. return data
  82. def create(self, validated_data):
  83. addons = validated_data.pop('addons', [])
  84. print(addons)
  85. return super().create(validated_data)
  86. class LicenseSerializer(serializers.ModelSerializer):
  87. creator = serializers.PrimaryKeyRelatedField(
  88. read_only=True,
  89. default=serializers.CreateOnlyDefault(
  90. serializers.CurrentUserDefault()))
  91. bills = BillSerializer(many=True, required=False)
  92. class Meta:
  93. model = License
  94. def __init__(self, *args, **kwargs):
  95. kwargs['partial'] = True
  96. super(self.__class__, self).__init__(*args, **kwargs)
  97. def validate(self, data):
  98. LicensesValidator.validate(
  99. data.get('team'), data.get('start_date'), data.get('end_date'))
  100. return data
  101. class LicenseUpdateSerializer(serializers.ModelSerializer):
  102. creator = serializers.PrimaryKeyRelatedField(
  103. read_only=True,
  104. default=serializers.CreateOnlyDefault(
  105. serializers.CurrentUserDefault()))
  106. bills = BillSerializer(many=True, required=False)
  107. class Meta:
  108. model = License
  109. exclude = ('start_date', 'end_date', 'team',)
  110. def __init__(self, *args, **kwargs):
  111. kwargs['partial'] = True
  112. super(self.__class__, self).__init__(*args, **kwargs)