Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Marta Miranda
/
boletin_api
Go to a project
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
Enzo Yair
2023-10-02 10:03:49 -0300
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
b8faa3abcb2c0e65541c0273854fceb454ffde18
b8faa3ab
1 parent
0108ac43
feature/#51_quiero_visualizar_monto_a_pagar
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
109 additions
and
37 deletions
project/apps/edicto/api.py
project/apps/edicto/migrations/0003_alter_comprobantepago_edicto.py
project/apps/edicto/models.py
project/apps/edicto/precio.py
project/apps/edicto/serializers.py
project/router.py
project/apps/edicto/api.py
View file @
b8faa3a
...
...
@@ -8,9 +8,9 @@ from core.serializers import ActionSerializer
from
rest_framework.response
import
Response
from
.filters
import
EdictoFilter
,
PrecioFilter
from
.models
import
Edicto
,
Precio
from
.models
import
Edicto
,
Precio
,
ComprobantePago
from
.permissions
import
IsAdminOrAuthorized
from
.serializers
import
EdictoSerializer
,
PrecioSerializer
from
.serializers
import
EdictoSerializer
,
PrecioSerializer
,
ComprobanteSerializer
class
EdictoViewSet
(
AuditoriaMixin
,
mixins
.
CreateModelMixin
,
...
...
@@ -52,3 +52,16 @@ class PrecioViewSet(AuditoriaMixin, viewsets.ReadOnlyModelViewSet):
ordering_fields
=
(
'usuario'
,)
ordering
=
'usuario'
queryset
=
Precio
.
objects
.
all
()
class
ComprobanteViewSet
(
mixins
.
UpdateModelMixin
,
mixins
.
RetrieveModelMixin
,
mixins
.
ListModelMixin
,
viewsets
.
GenericViewSet
,
):
serializer_class
=
ComprobanteSerializer
permission_classes
=
[
IsAuthenticated
,
]
queryset
=
ComprobantePago
.
objects
.
all
()
...
...
project/apps/edicto/migrations/0003_alter_comprobantepago_edicto.py
0 → 100644
View file @
b8faa3a
# Generated by Django 4.1.9 on 2023-10-02 10:03
from
django.db
import
migrations
,
models
import
django.db.models.deletion
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'edicto'
,
'0002_remove_comprobantepago_monto_and_more'
),
]
operations
=
[
migrations
.
AlterField
(
model_name
=
'comprobantepago'
,
name
=
'edicto'
,
field
=
models
.
OneToOneField
(
editable
=
False
,
on_delete
=
django
.
db
.
models
.
deletion
.
CASCADE
,
to
=
'edicto.edicto'
),
),
]
...
...
project/apps/edicto/models.py
View file @
b8faa3a
...
...
@@ -65,8 +65,8 @@ class ComprobantePago(models.Model):
monto_descuento
=
models
.
FloatField
(
editable
=
False
,
null
=
True
)
numero_comprobante
=
models
.
CharField
(
max_length
=
300
,
blank
=
True
,
null
=
True
)
fecha_pago
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
edicto
=
models
.
OneToOneField
(
Edicto
,
on_delete
=
models
.
CASCADE
)
edicto
=
models
.
OneToOneField
(
Edicto
,
on_delete
=
models
.
CASCADE
,
editable
=
False
)
archivo
=
models
.
FileField
(
upload_to
=
"uploads/
%
Y/
%
m/
%
d/"
,
blank
=
True
)
def
__str__
(
self
):
return
self
.
numero_comprobante
return
f
"{self.numero_comprobante} - ComprobantePago"
...
...
project/apps/edicto/precio.py
View file @
b8faa3a
from
django.utils
import
timezone
from
.models
import
Edicto
,
ComprobantePago
,
Precio
from
.models
import
ComprobantePago
def
contador
(
edicto_id
,
precio_id
):
edicto
=
Edicto
.
objects
.
select_related
(
'usuario'
)
.
get
(
id
=
edicto_id
)
organismo
=
edicto
.
usuario
.
organismo
.
es_publico
def
calculadora
(
edicto
,
precio
):
try
:
descuento
=
50
organismo
=
edicto
.
creado_por
.
organismo
es_publico
=
organismo
.
es_publico
if
organismo
else
False
sellos
=
edicto
.
cantidad_sellos
palabras
=
edicto
.
cantidad_palabras
copias
=
edicto
.
cantidad_copias
publicar
=
edicto
.
dias_publicar
precio_valores
=
{
'precio'
:
precio
.
precio
,
'precio_ejemplar'
:
precio
.
precio_ejemplar
,
'precio_dia'
:
precio
.
precio_dia
}
result_palabra
=
(
sellos
+
palabras
)
*
precio_valores
[
'precio'
]
result_ejemplar
=
(
copias
*
precio_valores
[
'precio_ejemplar'
])
+
(
publicar
*
precio_valores
[
'precio_dia'
])
subtotal
=
result_ejemplar
+
result_palabra
if
es_publico
:
resultado
=
(
descuento
*
subtotal
)
/
100
else
:
resultado
=
((
100
-
descuento
)
*
subtotal
)
/
100
precio_valores
=
Precio
.
objects
.
values
(
'precio'
,
'precio_ejemplar'
,
'vigencia_desde'
,
'vigencia_hasta'
,)
.
get
(
id
=
precio_id
)
precio
=
precio_valores
[
'precio'
]
precio_ejemplar
=
precio_valores
[
'precio_ejemplar'
]
vigencia_desde
=
precio_valores
[
'vigencia_desde'
]
vigencia_hasta
=
precio_valores
[
'vigencia_hasta'
]
current_datetime
=
timezone
.
now
()
if
not
(
vigencia_desde
<=
current_datetime
<=
vigencia_hasta
):
raise
ValueError
(
"El precio seleccionado no se encuentra dentro de las fechas permitidas."
)
result_palabra
=
(
sellos
+
palabras
)
*
precio
result_ejemplar
=
(
copias
*
precio_ejemplar
)
+
(
publicar
*
precio_ejemplar
)
comprobante
=
ComprobantePago
(
monto_total
=
resultado
,
monto_subtotal
=
subtotal
,
monto_descuento
=
resultado
,
edicto
=
edicto
)
comprobante
.
save
()
if
organismo
:
resultado
=
result_ejemplar
+
result_palabra
/
2
else
:
resultado
=
result_ejemplar
+
result_palabra
return
comprobante
precio_resultado
=
ComprobantePago
(
edicto
=
edicto
,
resultado
=
resultado
)
precio_resultado
.
save
()
return
precio_resultado
except
ValueError
as
values
:
raise
ValueError
(
"Los valores proporcionados son incorrectos: "
+
str
(
values
))
\ No newline at end of file
...
...
project/apps/edicto/serializers.py
View file @
b8faa3a
...
...
@@ -2,8 +2,9 @@ from rest_framework import serializers
from
usuario.serializers
import
UsuarioListaSerializer
from
.constants
import
EXTENSIONES_VALIDAS
from
.models
import
Edicto
,
Precio
from
.models
import
Edicto
,
Precio
,
ComprobantePago
from
.utils
import
contador
from
.precio
import
calculadora
class
EdictoSerializer
(
serializers
.
ModelSerializer
):
...
...
@@ -28,7 +29,8 @@ class EdictoSerializer(serializers.ModelSerializer):
'fecha_creacion'
,
'observaciones'
,
'fecha_publicacion'
,
'fecha_modificacion'
'fecha_modificacion'
,
'tiene_descuento'
,
)
read_only_fields
=
(
'fecha_publicacion'
,)
...
...
@@ -40,9 +42,24 @@ class EdictoSerializer(serializers.ModelSerializer):
if
request
.
method
==
'POST'
:
data
[
'creado_por'
]
=
request
.
user
if
data
[
'creado_por'
]
.
organismo
and
data
[
'creado_por'
]
.
organismo
.
es_publico
:
data
[
'tiene_descuento'
]
=
True
else
:
data
[
'tiene_descuento'
]
=
False
data
[
'modificado_por'
]
=
request
.
user
return
data
def
create
(
self
,
validated_data
):
edicto
=
Edicto
.
objects
.
create
(
**
validated_data
)
precio
=
Precio
.
objects
.
latest
(
'id'
)
calculadora
(
edicto
,
precio
)
edicto
.
save
()
return
edicto
@staticmethod
def
validate_archivo
(
value
):
filename
,
extension
=
value
.
name
.
rsplit
(
"."
,
1
)
...
...
@@ -63,4 +80,28 @@ class PrecioSerializer(serializers.ModelSerializer):
'vigencia_hasta'
,
)
included_serializers
=
{
'usuario'
:
UsuarioListaSerializer
}
included_serializers
=
{
'usuario'
:
UsuarioListaSerializer
}
class
ComprobanteSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
ComprobantePago
fields
=
(
'edicto'
,
'monto_subtotal'
,
'monto_total'
,
'monto_descuento'
,
'numero_comprobante'
,
'fecha_pago'
,
'archivo'
,
)
included_serializers
=
{
'edicto'
:
EdictoSerializer
}
@staticmethod
def
validate_archivo
(
value
):
filename
,
extension
=
value
.
name
.
rsplit
(
"."
,
1
)
if
extension
.
lower
()
not
in
EXTENSIONES_VALIDAS
:
raise
serializers
.
ValidationError
(
"Archivos permitidos: .pdf"
)
return
value
...
...
project/router.py
View file @
b8faa3a
...
...
@@ -14,3 +14,4 @@ router.register(prefix='organismo', viewset=organismo_api.OrganismoViewSet)
router
.
register
(
r'edicto'
,
EdictoViewSet
,
basename
=
'edicto'
)
router
.
register
(
prefix
=
'precio'
,
viewset
=
edicto_api
.
PrecioViewSet
)
router
.
register
(
prefix
=
'auditoria'
,
viewset
=
core_api
.
AuditoriaViewSet
)
router
.
register
(
prefix
=
'comprobante'
,
viewset
=
edicto_api
.
ComprobanteViewSet
)
...
...
Please
register
or
login
to post a comment