djgentelella 0.4.8__py3-none-any.whl → 0.4.10__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. djgentelella/__init__.py +1 -1
  2. djgentelella/firmador_digital/consumers/sign.py +15 -1
  3. djgentelella/firmador_digital/utils.py +11 -0
  4. djgentelella/locale/es/LC_MESSAGES/django.po +1 -0
  5. djgentelella/locale/es/LC_MESSAGES/djangojs.mo +0 -0
  6. djgentelella/locale/es/LC_MESSAGES/djangojs.po +9 -0
  7. djgentelella/serializers/firmador_digital.py +5 -0
  8. djgentelella/static/djgentelella.readonly.vendors.min.css +9 -5
  9. djgentelella/static/djgentelella.readonly.vendors.min.js +1 -1
  10. djgentelella/static/gentelella/css/custom.css +4 -0
  11. djgentelella/static/gentelella/js/base/digital_signature.js +164 -62
  12. djgentelella/static/gentelella/js/base/form.common.js +9 -4
  13. djgentelella/static/gentelella/js/base/select2_wrap.js +15 -1
  14. djgentelella/static/gentelella/js/base/select2related.js +5 -0
  15. djgentelella/static/gentelella/js/base.js +192 -65
  16. djgentelella/static/gentelella/js/custom.js +6 -1
  17. djgentelella/static/gentelella/js/obj_api_management.js +5 -3
  18. djgentelella/static/gentelella/js/widgets.js +6 -2
  19. djgentelella/static/vendors/timeline/css/timeline.css +9 -5
  20. djgentelella/static/vendors/timeline/js/timeline.js +1 -1
  21. djgentelella/templates/gentelella/app/sidebar.html +16 -16
  22. djgentelella/templates/gentelella/widgets/digital_signature.html +5 -3
  23. djgentelella/views/select2autocomplete.py +40 -0
  24. djgentelella/widgets/selects.py +47 -0
  25. {djgentelella-0.4.8.dist-info → djgentelella-0.4.10.dist-info}/METADATA +1 -1
  26. {djgentelella-0.4.8.dist-info → djgentelella-0.4.10.dist-info}/RECORD +30 -30
  27. {djgentelella-0.4.8.dist-info → djgentelella-0.4.10.dist-info}/AUTHORS +0 -0
  28. {djgentelella-0.4.8.dist-info → djgentelella-0.4.10.dist-info}/LICENSE.txt +0 -0
  29. {djgentelella-0.4.8.dist-info → djgentelella-0.4.10.dist-info}/WHEEL +0 -0
  30. {djgentelella-0.4.8.dist-info → djgentelella-0.4.10.dist-info}/top_level.txt +0 -0
djgentelella/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = '0.4.8'
1
+ __version__ = '0.4.10'
2
2
 
3
3
  if __name__ == '__main__':
4
4
  print(__version__)
@@ -12,7 +12,7 @@ from djgentelella.firmador_digital.utils import RemoteSignerClient
12
12
  from djgentelella.serializers.firmador_digital import (
13
13
  WSRequest,
14
14
  InitialSignatureSerializer,
15
- CompleteSignatureSerializer,
15
+ CompleteSignatureSerializer, ValidateDocumentSerializer,
16
16
  )
17
17
 
18
18
  logger = logging.getLogger("djgentelella")
@@ -35,6 +35,8 @@ class SignConsumer(JsonWebsocketConsumer):
35
35
  return InitialSignatureSerializer(data=content)
36
36
  if serializer.validated_data["action"] == "complete_signature":
37
37
  return CompleteSignatureSerializer(data=content)
38
+ if serializer.validated_data["action"] == "validate_document":
39
+ return ValidateDocumentSerializer(data=content)
38
40
 
39
41
  def disconnect(self, close_code):
40
42
  super().disconnect(close_code)
@@ -55,6 +57,8 @@ class SignConsumer(JsonWebsocketConsumer):
55
57
  self.do_initial_signature(serializer)
56
58
  case "complete_signature":
57
59
  self.do_complete_signature(serializer)
60
+ case "validate_document":
61
+ self.do_validate_document(serializer)
58
62
  case _:
59
63
  self.do_default(serializer)
60
64
  else:
@@ -81,6 +85,16 @@ class SignConsumer(JsonWebsocketConsumer):
81
85
  })
82
86
  logger.error("An unexpected error occurred.", exc_info=e)
83
87
 
88
+ def do_validate_document(self, serializer):
89
+ signer = RemoteSignerClient(self.scope["user"])
90
+
91
+ response = signer.validate_document(
92
+ instance=serializer.validated_data["instance"],
93
+ )
94
+
95
+ response['socket_id'] = serializer.validated_data['socket_id']
96
+ self.send_json(response)
97
+
84
98
  def do_initial_signature(self, serializer):
85
99
  signer = RemoteSignerClient(self.scope["user"])
86
100
 
@@ -47,6 +47,17 @@ class RemoteSignerClient:
47
47
  )
48
48
  return response.json()
49
49
 
50
+ def validate_document(self, instance):
51
+ b64doc = self.get_b64document(instance['value'])
52
+ files = {
53
+ "b64Document": b64doc,
54
+ "DocumentExtension": ".pdf",
55
+ }
56
+ response = requests.post(
57
+ settings.FIRMADOR_VALIDA_URL, json=files
58
+ )
59
+ return response.json()
60
+
50
61
  def _finalize_signature(self, data_to_sign, task):
51
62
  result = None
52
63
  error_msg = _("An unexpected error occurred during the signing process.")
@@ -664,3 +664,4 @@ msgstr "Razón"
664
664
 
665
665
  msgid "Visible signature"
666
666
  msgstr "Firma visible"
667
+
@@ -213,3 +213,12 @@ msgstr ""
213
213
 
214
214
  msgid "loading"
215
215
  msgstr "Cargando"
216
+
217
+ msgid "Please, sign the document before saving"
218
+ msgstr "Por favor, firme el documento antes de guardar"
219
+
220
+ msgid "The document is not digitally signed. Please sign the document before saving."
221
+ msgstr "El documento no está firmado digitalmente. Por favor, firme el documento antes de guardar."
222
+
223
+ msgid "The document was saved"
224
+ msgstr "El documento se ha guardado"
@@ -104,3 +104,8 @@ class CompleteSignatureSerializer(serializers.Serializer):
104
104
  signature = SignatureSerializer()
105
105
  logo_url = serializers.CharField(required=False, allow_null=True, allow_blank=True)
106
106
  instance = InstanceSerializer()
107
+
108
+ class ValidateDocumentSerializer(serializers.Serializer):
109
+ action = serializers.CharField()
110
+ socket_id = serializers.CharField(required=True)
111
+ instance = InstanceSerializer()
@@ -808,6 +808,7 @@
808
808
  position: relative;
809
809
  overflow: hidden;
810
810
  border-top: 1px solid #e5e5e5;
811
+ direction: ltr;
811
812
  }
812
813
  .tl-timenav .tl-timenav-line {
813
814
  position: absolute;
@@ -2018,7 +2019,6 @@
2018
2019
  .tl-slidenav-previous .tl-slidenav-content-container,
2019
2020
  .tl-slidenav-next .tl-slidenav-content-container {
2020
2021
  width: 100px;
2021
- position: absolute;
2022
2022
  }
2023
2023
  .tl-slidenav-previous .tl-slidenav-title,
2024
2024
  .tl-slidenav-next .tl-slidenav-title,
@@ -2104,7 +2104,7 @@
2104
2104
  .tl-slidenav-next {
2105
2105
  text-align: right;
2106
2106
  margin-right: 10px;
2107
- right: 100px;
2107
+ right: 0;
2108
2108
  }
2109
2109
  .tl-slidenav-next .tl-slidenav-title,
2110
2110
  .tl-slidenav-next .tl-slidenav-description {
@@ -2118,6 +2118,7 @@
2118
2118
  }
2119
2119
  .tl-slidenav-previous {
2120
2120
  text-align: left;
2121
+ left: 0;
2121
2122
  margin-left: 10px;
2122
2123
  }
2123
2124
  .tl-slidenav-previous .tl-slidenav-icon {
@@ -2126,6 +2127,12 @@
2126
2127
  .tl-slidenav-previous .tl-slidenav-icon:before {
2127
2128
  content: "\e650";
2128
2129
  }
2130
+ [dir="rtl"] .tl-slidenav-previous {
2131
+ direction: ltr;
2132
+ }
2133
+ [dir="rtl"] .tl-slidenav-next:hover .tl-slidenav-icon {
2134
+ margin-right: -4px;
2135
+ }
2129
2136
  /* NAVIGATION HOVER
2130
2137
  ================================================== */
2131
2138
  .tl-slidenav-previous:hover .tl-slidenav-title,
@@ -2154,9 +2161,6 @@
2154
2161
  .tl-slidenav-previous:focus-visible .tl-slidenav-icon {
2155
2162
  margin-left: -4px;
2156
2163
  }
2157
- .tl-skinny .tl-slidenav-next {
2158
- right: 32px;
2159
- }
2160
2164
  .tl-skinny .tl-slidenav-next .tl-slidenav-icon {
2161
2165
  margin-left: 8px;
2162
2166
  }