Skip to content

Commit

Permalink
fix : Error en Django al cancelar en proceso de facturacion #86
Browse files Browse the repository at this point in the history
  • Loading branch information
juancruz1990 committed Aug 19, 2023
1 parent 439781e commit e0a4c56
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 84 deletions.
4 changes: 4 additions & 0 deletions hotel/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,14 +77,18 @@ def get_paquetes(self):

def get_paquetes_busqueda(self,fechai,fechaf,cantPasajeros):
paquetesEnHotel = self.get_paquetes()
print("paquetes en hoteldasdasdasd", paquetesEnHotel)
paquetesSegunBusqueda=[]
for paquete in paquetesEnHotel:
print("dasdasdasdasda" , paquete.nombre)
if (paquete.inicio <= fechai <=paquete.fin) and (paquete.fin<=fechaf) and (paquete.get_pasajeros()>=cantPasajeros) and (paquete.estoy_vigente()):
paquetesSegunBusqueda.append(paquete)
if ( paquete.inicio <= fechai <= fechaf) and (fechaf <= paquete.fin) and (paquete.get_pasajeros()>=cantPasajeros) and (paquete.estoy_vigente()):
paquetesSegunBusqueda.append(paquete)
if (fechai <= paquete.inicio <= fechaf) and (fechaf <= paquete.fin) and (paquete.get_pasajeros()>=cantPasajeros) and (paquete.estoy_vigente()):
paquetesSegunBusqueda.append(paquete)
if (fechai <= paquete.inicio <= fechaf) and (fechaf >= paquete.fin) and (paquete.get_pasajeros()>=cantPasajeros) and (paquete.estoy_vigente()):
paquetesSegunBusqueda.append(paquete)
return paquetesSegunBusqueda


Expand Down
14 changes: 14 additions & 0 deletions venta/carrito.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,20 @@ def get_cantidad(self):
else:
count+=len(value["alquiler"])
return count


def limpiar_contador_items(self):
self.carrito.clear()


def vaciar_carrito(self):
habitaciones = self.get_alquileres_habitaciones()
paquetes = self.get_paquetes_para_alquilar()
self.quitar_paquete(paquetes)
for habitacion in habitaciones:
self.quitar_habitacion(habitacion , habitacion.fecha_inicio , habitacion.fecha_fin)
self.limpiar_contador_items()
self.save()

#*************************GESTION HABITACION DE CARRITO **************************************
def agregar_habitacion(self,habitacion,desde,hasta,pasajeros):
Expand Down
71 changes: 37 additions & 34 deletions venta/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,40 +99,43 @@ def asignar_precio_por_temporada(fecha_inicio, fecha_fin, id_hotel, tipo_habitac
resultado = 0
if (temporadas):
temporadas = devolver_temporadas_en_fechas(temporadas, fecha_inicio, fecha_fin)
for temporada in temporadas:
if (fecha_inicio <= fecha_fin <= temporada.inicio) or (temporada.fin <= fecha_inicio <= fecha_fin):
dias_sin_promocion = fecha_fin - fecha_inicio
dias_sin_promocion = dias_sin_promocion.days * precio_Hotel_temporadas.baja
total = dias_sin_promocion

if((fecha_inicio < temporada.inicio) and (temporada.inicio <= fecha_fin <= temporada.fin)):
dias_promocion = fecha_fin - temporada.inicio
dias_promocion = dias_promocion.days * precio_Hotel_temporadas.alta
dias_sin_promocion = temporada.inicio - fecha_inicio
dias_sin_promocion = dias_sin_promocion.days * precio_Hotel_temporadas.baja
total = dias_promocion + dias_sin_promocion

if((temporada.inicio <= fecha_inicio <= temporada.fin) and (temporada.fin <= fecha_fin)):
dias_promocion = temporada.fin - fecha_inicio
dias_promocion = dias_promocion.days * precio_Hotel_temporadas.alta
dias_sin_promocion = fecha_fin - temporada.fin
dias_sin_promocion = dias_sin_promocion.days * precio_Hotel_temporadas.baja
total = dias_promocion + dias_sin_promocion

if (temporada.inicio <= fecha_inicio) and (temporada.fin >= fecha_fin):
dias_promocion = fecha_fin - fecha_inicio
dias_promocion = dias_promocion.days * precio_Hotel_temporadas.alta
total = dias_promocion

if ((fecha_inicio <= temporada.inicio <= temporada.fin) and (temporada.fin <= fecha_fin)):
dias_sin_promocion = (fecha_fin - temporada.fin ) + ( temporada.inicio - fecha_inicio)
dias_sin_promocion = dias_sin_promocion.days * precio_Hotel_temporadas.baja
dias_promocion = temporada.fin - temporada.inicio
dias_promocion = dias_promocion.days * precio_Hotel_temporadas.alta
total = dias_promocion + dias_sin_promocion
resultado = resultado + total
fecha_inicio = temporada.fin
return resultado
if (temporadas):
for temporada in temporadas:
if (fecha_inicio <= fecha_fin <= temporada.inicio) or (temporada.fin <= fecha_inicio <= fecha_fin):
dias_sin_promocion = fecha_fin - fecha_inicio
dias_sin_promocion = dias_sin_promocion.days * precio_Hotel_temporadas.baja
total = dias_sin_promocion

if((fecha_inicio < temporada.inicio) and (temporada.inicio <= fecha_fin <= temporada.fin)):
dias_promocion = fecha_fin - temporada.inicio
dias_promocion = dias_promocion.days * precio_Hotel_temporadas.alta
dias_sin_promocion = temporada.inicio - fecha_inicio
dias_sin_promocion = dias_sin_promocion.days * precio_Hotel_temporadas.baja
total = dias_promocion + dias_sin_promocion

if((temporada.inicio <= fecha_inicio <= temporada.fin) and (temporada.fin <= fecha_fin)):
dias_promocion = temporada.fin - fecha_inicio
dias_promocion = dias_promocion.days * precio_Hotel_temporadas.alta
dias_sin_promocion = fecha_fin - temporada.fin
dias_sin_promocion = dias_sin_promocion.days * precio_Hotel_temporadas.baja
total = dias_promocion + dias_sin_promocion

if (temporada.inicio <= fecha_inicio) and (temporada.fin >= fecha_fin):
dias_promocion = fecha_fin - fecha_inicio
dias_promocion = dias_promocion.days * precio_Hotel_temporadas.alta
total = dias_promocion

if ((fecha_inicio <= temporada.inicio <= temporada.fin) and (temporada.fin <= fecha_fin)):
dias_sin_promocion = (fecha_fin - temporada.fin ) + ( temporada.inicio - fecha_inicio)
dias_sin_promocion = dias_sin_promocion.days * precio_Hotel_temporadas.baja
dias_promocion = temporada.fin - temporada.inicio
dias_promocion = dias_promocion.days * precio_Hotel_temporadas.alta
total = dias_promocion + dias_sin_promocion
resultado = resultado + total
fecha_inicio = temporada.fin
return resultado
else:
return (fecha_fin - fecha_inicio).days * precio_Hotel_temporadas.baja
else:
return (fecha_fin - fecha_inicio).days * precio_Hotel_temporadas.baja

Expand Down
67 changes: 31 additions & 36 deletions venta/templates/venta/facturar_carrito.html
Original file line number Diff line number Diff line change
Expand Up @@ -102,52 +102,47 @@ <h4>

<form id="form_pago_factura" onsubmit="return evitar_envio(event)"
action="{%url 'venta:pagarFactura' factura.pk %} " method="POST">
{% csrf_token %}
<div class="ml-5 mb-5 mt-5">
{% csrf_token %}
<div class="ml-5 mb-5 mt-5">


<div class="row mt-2 h3"> SELECCIONE METODO DE PAGO </div>
<div class="row mt-2 h3"> SELECCIONE METODO DE PAGO </div>

<div class="form-check mt-3">
<input class="form-check-input " type="radio" name="opcionTipoPago" id="exampleRadios1" value="Efectivo" checked>
<label class="form-check-label h5" for="exampleRadios1">
Efectivo
</label>
</div>
<div class="form-check ">
<input class="form-check-input " type="radio" name="opcionTipoPago" id="exampleRadios2" value="Tarjeta">
<label class="form-check-label h5" for="exampleRadios2">
Tarjeta
</label>
</div>
<div class="form-check {% if not alcanzanPuntos %} disabled {% endif %} ">
<input class="form-check-input " type="radio" name="opcionTipoPago" id="exampleRadios3" value="Puntos" {% if not alcanzanPuntos %} disabled {% endif %}>
<label class="form-check-label h5" for="exampleRadios3">
Puntos
</label>
</div>
</div>
<div class="row mt-2">
<div class="col-10 ml-4" style="background-color: rgb(185, 182, 182)">
<h3>TOTAL: ${{factura.total}}</h3>
<div class="form-check mt-3">
<input class="form-check-input " type="radio" name="opcionTipoPago" id="exampleRadios1" value="Efectivo" checked>
<label class="form-check-label h5" for="exampleRadios1">
Efectivo
</label>
</div>
<div class="form-check ">
<input class="form-check-input " type="radio" name="opcionTipoPago" id="exampleRadios2" value="Tarjeta">
<label class="form-check-label h5" for="exampleRadios2">
Tarjeta
</label>
</div>
<div class="col-1">
<div class="form-check {% if not alcanzanPuntos %} disabled {% endif %} ">
<input class="form-check-input " type="radio" name="opcionTipoPago" id="exampleRadios3" value="Puntos" {% if not alcanzanPuntos %} disabled {% endif %}>
<label class="form-check-label h5" for="exampleRadios3">
Puntos
</label>
</div>
</div>
<div class="row mt-2">
<div class="col-10 ml-4" style="background-color: rgb(185, 182, 182)">
<h3>TOTAL: ${{factura.total}}</h3>
</div>
<div class="col-1">


<input class="btn btn-success" type="submit" id="filtrar" name="filtrar" value=" PAGAR " >
<input class="btn btn-success" type="submit" id="filtrar" name="filtrar" value=" PAGAR " >
</form>



<button
class="btn btn-danger"

onClick="location.href='{%url 'venta:cancelarFactura' factura.pk %} '"

>
CANCELAR
</button>
</div>
<button class="btn btn-danger" style="margin-top: 15px;" onClick="location.href='{%url 'venta:cancelarFactura' factura.pk %} '">
CANCELAR
</button>
</div>
</div>
</div>

Expand Down
29 changes: 15 additions & 14 deletions venta/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ def buscarHabitaciones(request,hotel):
hotelInstancia = get_object_or_404(Hotel, pk=hotel)
coleccionHabitaciones = hotelInstancia.get_habitaciones_busqueda(fecha_inicio,fecha_fin,pasajeros)
colHabitaciones = [habitacion for habitacion in coleccionHabitaciones if habitacion.baja == False]
print("habitaciones hoteeeeel" , colHabitaciones)
ventas_habitaciones_en_carrito=carrito.get_alquileres_habitaciones()
for venta in ventas_habitaciones_en_carrito:
fecha_inicio_venta=datetime.strptime(venta.fecha_inicio, '%Y-%m-%d').date()
Expand All @@ -72,6 +73,7 @@ def buscarHabitaciones(request,hotel):
habitaciones_con_precio_final = cargar_precio_habitacion_por_temporada(colHabitaciones, hotelInstancia.pk, fecha_inicio, fecha_fin )
ventas_paquetes_en_carrito=carrito.get_alquileres_paquetes()
colPaquetes = hotelInstancia.get_paquetes_busqueda(fecha_inicio,fecha_fin,pasajeros)
print("col paquetes" , colPaquetes)
for venta in ventas_paquetes_en_carrito:
paquete=get_object_or_404(PaqueteTuristico,pk=venta.paquete)
if paquete in colPaquetes:
Expand Down Expand Up @@ -164,7 +166,11 @@ def cliente_modificar(request,cliente):

def vista_carrito(request):
carrito=Carrito(request)
coleccion_ventas = carrito.mostrar_carrito()
coleccion_ventas = []
total = 0
if carrito.get_cantidad() > 0:
coleccion_ventas = carrito.mostrar_carrito()
total=float(str(coleccion_ventas['total']).strip("['|{|}]"))
personaInstancia = request.user.persona
vendedorInstancia = get_object_or_404(Vendedor, persona = personaInstancia.id)
contador=carrito.get_cantidad()
Expand All @@ -173,7 +179,6 @@ def vista_carrito(request):
print(cliente.persona.nombre)
except Exception:
print("no hay persona seleccionada")
total=float(str(coleccion_ventas['total']).strip("['|{|}]"))
print(carrito.get_vendedor().persona.nombre)
return render(request,"venta/carrito.html",{"cliente":cliente,"vendedor":vendedorInstancia, "contador":contador, "coleccion_ventas":coleccion_ventas,"total":total})

Expand Down Expand Up @@ -224,38 +229,34 @@ def facturar_carrito(request):
def pagar_factura(request, factura):
seleccionTipoPago=request.POST.get('opcionTipoPago')
facturita= get_object_or_404(Factura, pk=factura)

if seleccionTipoPago=="Puntos":

facturita.cliente.quitar_puntos(facturita)

if seleccionTipoPago=="Puntos":
facturita.cliente.quitar_puntos(facturita)
else:
if seleccionTipoPago=="Efectivo":
print("puntos antes: ", facturita.cliente.puntos)
facturita.cliente.agregar_puntos(facturita)
print("puntos despues: ", facturita.cliente.puntos)

tipoPago= get_object_or_404(Tipo_pago, nombre=seleccionTipoPago)
facturita.tipo_pago=tipoPago
facturita.save()
carrito = Carrito(request)
carrito.vaciar_carrito()
return redirect("venta:vendedor")


def cancelar_venta(request,factura):
print("CANCELANDO VENTAAAAAAAAAA!!!!!")
facturita= get_object_or_404(Factura, pk=factura)
print(facturita.tipo_pago)
for alquiler in facturita.get_alquileres():
if alquiler.paquete is not None:
print(alquiler.paquete.nombre)
alquiler.paquete.cancelar_venta()
facturita.delete()
print(facturita.pk)
carrito = Carrito(request)
carrito.vaciar_carrito()
return redirect("venta:vendedor")


def limpiar_preferencias(request):

carrito = Carrito(request)
carrito.set_cliente(None)
if 'fecha_inicio' in request.session:
del request.session['fecha_inicio']
if 'fecha_fin' in request.session:
Expand Down

0 comments on commit e0a4c56

Please sign in to comment.