Files
2025-04-17 00:29:21 -06:00

447 lines
19 KiB
Python

from django.shortcuts import render, redirect, get_object_or_404
from .forms import Formulariopieza, Formularioequipo, Formulariomarca, Formularioubicacion, Formularioentrada, Formulariosalida, Formularioarea
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from .models import pieza, rentrada, rsalida, equipo, marca, ubicacion
from openpyxl import Workbook
from django.http.response import HttpResponse
import datetime
from datetime import date
# Create your views here.
def invalmacen(request):
datos = pieza.objects.all()
return render(request, 'tables.html', {"datos": datos})
@login_required(login_url='/acceder')
def crear_pieza(request):
if request.method == "POST":
form = Formulariopieza(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.save()
titulo = form.cleaned_data.get("referencia")
messages.success(request, f"La referencia {titulo} se ha creado correctamente")
return redirect("invalmacen")
else:
for field, items in form.errors.items():
for item in items:
messages.error(request, '{}: {}'.format(field, item))
datosequipo = equipo.objects.all()
datosmarca = marca.objects.all()
datosubicacion = ubicacion.objects.all()
form = Formulariopieza()
return render(request, "crear_pieza.html", {"form": form, "datosequipo": datosequipo, "datosmarca": datosmarca, "datosubicacion": datosubicacion})
@login_required(login_url='/acceder')
def ActualizarPieza(request, pieza_id):
instance= get_object_or_404(pieza, pk=pieza_id)
form = Formulariopieza(request.POST or None, instance=instance)
context= {'form': form}
if form.is_valid():
obj= form.save(commit= False)
obj.save()
messages.success(request, "La pieza fue actualizada")
return redirect("invalmacen")
else:
context= {'form': form, 'error': 'Error al actualizar'}
return render(request,'actualizar_pieza.html' , context)
############################################
@login_required(login_url='/acceder')
def crear_equipo(request):
if request.method == "POST":
form = Formularioequipo(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.save()
titulo = form.cleaned_data.get("nombre")
messages.success(request, f"El equipo {titulo} se ha creado correctamente")
return redirect("crear_pieza")
else:
for field, items in form.errors.items():
for item in items:
messages.error(request, '{}: {}'.format(field, item))
form = Formularioequipo()
return render(request, "crearequipo.html", {"form": form})
@login_required(login_url='/acceder')
def crear_marca(request):
if request.method == "POST":
form = Formulariomarca(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.save()
titulo = form.cleaned_data.get("nombre")
messages.success(request, f"La marca {titulo} se ha creado correctamente")
return redirect("crear_pieza")
else:
for field, items in form.errors.items():
for item in items:
messages.error(request, '{}: {}'.format(field, item))
form = Formulariomarca()
return render(request, "crearmarca.html", {"form": form})
@login_required(login_url='/acceder')
def crear_ubicacion(request):
if request.method == "POST":
form = Formularioubicacion(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.save()
titulo = form.cleaned_data.get("nombre")
messages.success(request, f"La ubicacion {titulo} se ha creado correctamente")
return redirect("crear_pieza")
else:
for field, items in form.errors.items():
for item in items:
messages.error(request, '{}: {}'.format(field, item))
form = Formularioubicacion()
return render(request, "crearubicacion.html", {"form": form})
@login_required(login_url='/acceder')
def crear_area(request):
if request.method == "POST":
form = Formularioarea(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.save()
titulo = form.cleaned_data.get("nombre")
messages.success(request, f"El area {titulo} se ha creado correctamente")
return redirect("crear_inventrada")
else:
for field, items in form.errors.items():
for item in items:
messages.error(request, '{}: {}'.format(field, item))
form = Formularioarea()
return render(request, "crear_area.html", {"form": form})
############################################################
def invalmacenentrada(request):
datos = rentrada.objects.all()
return render(request, 'invrentrada.html', {"datos": datos})
@login_required(login_url='/acceder')
def crear_inventrada(request, id):
if request.method == "POST":
form = Formularioentrada(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.autor = request.user
post.save()
titulo = form.cleaned_data.get("referencia")
refex = form.cleaned_data.get("referencia")
y = form.cleaned_data.get("cantidad")
x = pieza.objects.only('referencia').filter(referencia=refex)[0]
nuevo = x.cantidad + y
dateact = date.today()
update = pieza.objects.values('cantidad').filter(referencia=refex).update(cantidad=nuevo)
update = pieza.objects.values('fecha_actualizacion').filter(referencia=refex).update(fecha_actualizacion=dateact)
messages.success(request, f"La entrada con referencia {titulo} se ha creado correctamente")
return redirect("invalmacen")
else:
for field, items in form.errors.items():
for item in items:
messages.error(request, '{}: {}'.format(field, item))
datos = pieza.objects.get(id=id)
return render(request, "crearinventrada.html", {"datos": datos})
def invalmacensalida(request):
datos = rsalida.objects.all()
return render(request, 'invrsalida.html', {"datos": datos})
@login_required(login_url='/acceder')
def crear_invsalida(request, id):
if request.method == "POST":
form = Formulariosalida(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.autor = request.user
post.save()
titulo = form.cleaned_data.get("referencia")
refex = form.cleaned_data.get("referencia")
y = form.cleaned_data.get("cantidad")
x = pieza.objects.only('referencia').filter(referencia=refex)[0]
nuevo = x.cantidad - y
dateact = date.today()
update = pieza.objects.values('cantidad').filter(referencia=refex).update(cantidad=nuevo)
update = pieza.objects.values('fecha_actualizacion').filter(referencia=refex).update(fecha_actualizacion=dateact)
messages.success(request, f"La salida {titulo} se ha creado correctamente")
return redirect("invalmacen")
else:
for field, items in form.errors.items():
for item in items:
messages.error(request, '{}: {}'.format(field, item))
datos = pieza.objects.get(referencia=id)
return render(request, "crearinvsalida.html", {"datos": datos})
##Busqueda####################################################################
@login_required(login_url='/acceder')
def buscar(request):
if request.method == "POST":
datospieza = request.POST['referencia']
datosequipo = request.POST['equipo']
datosmarca = request.POST['marca']
datosubicacion = request.POST['ubicacion']
datosbuscar = request.POST['buscar']
if datospieza == "" and datosequipo == "Selecciona un Equipo" and datosmarca == "Selecciona una Marca" and datosubicacion == "Selecciona una Ubicacion" and datosbuscar == "" :
xdatospieza = pieza.objects.all()
xdatosequipo = equipo.objects.all()
xdatosmarca = marca.objects.all()
xdatosubicacion = ubicacion.objects.all()
datos = pieza.objects.all()
return render(request, "buscar.html", {"datos": datos, "datospieza": xdatospieza, "datosequipo": xdatosequipo, "datosmarca": xdatosmarca, "datosubicacion": xdatosubicacion})
elif datospieza == "" and datosequipo == "Selecciona un Equipo" and datosmarca == "Selecciona una Marca" and datosubicacion == "Selecciona una Ubicacion" :
xdatospieza = pieza.objects.all()
xdatosequipo = equipo.objects.all()
xdatosmarca = marca.objects.all()
xdatosubicacion = ubicacion.objects.all()
datos = pieza.objects.filter(descripcion_pieza__icontains=datosbuscar)
return render(request, "buscar.html", {"datos": datos, "datospieza": xdatospieza, "datosequipo": xdatosequipo, "datosmarca": xdatosmarca, "datosubicacion": xdatosubicacion})
elif datosequipo == "Selecciona un Equipo" and datosmarca == "Selecciona una Marca" and datosubicacion == "Selecciona una Ubicacion" and datosbuscar == "" :
xdatospieza = pieza.objects.all()
xdatosequipo = equipo.objects.all()
xdatosmarca = marca.objects.all()
xdatosubicacion = ubicacion.objects.all()
datos = pieza.objects.filter(referencia__icontains=datospieza)
return render(request, "buscar.html", {"datos": datos, "datospieza": xdatospieza, "datosequipo": xdatosequipo, "datosmarca": xdatosmarca, "datosubicacion": xdatosubicacion})
elif datospieza == "" and datosmarca == "Selecciona una Marca" and datosubicacion == "Selecciona una Ubicacion" and datosbuscar == "" :
xdatospieza = pieza.objects.all()
xdatosequipo = equipo.objects.all()
xdatosmarca = marca.objects.all()
xdatosubicacion = ubicacion.objects.all()
datos = pieza.objects.filter(equipo_id=datosequipo)
return render(request, "buscar.html", {"datos": datos, "datospieza": xdatospieza, "datosequipo": xdatosequipo, "datosmarca": xdatosmarca, "datosubicacion": xdatosubicacion})
elif datosequipo == "Selecciona un Equipo" and datospieza == "" and datosubicacion == "Selecciona una Ubicacion" and datosbuscar == "" :
xdatospieza = pieza.objects.all()
xdatosequipo = equipo.objects.all()
xdatosmarca = marca.objects.all()
xdatosubicacion = ubicacion.objects.all()
datos = pieza.objects.filter(marca_id=datosmarca)
return render(request, "buscar.html", {"datos": datos, "datospieza": xdatospieza, "datosequipo": xdatosequipo, "datosmarca": xdatosmarca, "datosubicacion": xdatosubicacion})
elif datosequipo == "Selecciona un Equipo" and datosmarca == "Selecciona una Marca" and datospieza == "" and datosbuscar == "" :
xdatospieza = pieza.objects.all()
xdatosequipo = equipo.objects.all()
xdatosmarca = marca.objects.all()
xdatosubicacion = ubicacion.objects.all()
datos = pieza.objects.filter(ubicacion_id=datosubicacion)
return render(request, "buscar.html", {"datos": datos, "datospieza": xdatospieza, "datosequipo": xdatosequipo, "datosmarca": xdatosmarca, "datosubicacion": xdatosubicacion})
elif datospieza == "" and datosubicacion == "Selecciona una Ubicacion" and datosbuscar == "" :
xdatospieza = pieza.objects.all()
xdatosequipo = equipo.objects.all()
xdatosmarca = marca.objects.all()
xdatosubicacion = ubicacion.objects.all()
datos = pieza.objects.filter(equipo_id=datosequipo).filter(marca_id=datosmarca)
return render(request, "buscar.html", {"datos": datos, "datospieza": xdatospieza, "datosequipo": xdatosequipo, "datosmarca": xdatosmarca, "datosubicacion": xdatosubicacion})
elif datospieza == "" and datosmarca == "Selecciona una Marca" and datosbuscar == "" :
xdatospieza = pieza.objects.all()
xdatosequipo = equipo.objects.all()
xdatosmarca = marca.objects.all()
xdatosubicacion = ubicacion.objects.all()
datos = pieza.objects.filter(equipo_id=datosequipo).filter(ubicacion_id=datosubicacion)
return render(request, "buscar.html", {"datos": datos, "datospieza": xdatospieza, "datosequipo": xdatosequipo, "datosmarca": xdatosmarca, "datosubicacion": xdatosubicacion})
elif datospieza == "" and datosequipo == "Selecciona un Equipo" and datosbuscar == "" :
xdatospieza = pieza.objects.all()
xdatosequipo = equipo.objects.all()
xdatosmarca = marca.objects.all()
xdatosubicacion = ubicacion.objects.all()
datos = pieza.objects.filter(marca_id=datosmarca).filter(ubicacion_id=datosubicacion)
return render(request, "buscar.html", {"datos": datos, "datospieza": xdatospieza, "datosequipo": xdatosequipo, "datosmarca": xdatosmarca, "datosubicacion": xdatosubicacion})
datospieza = pieza.objects.all()
datosequipo = equipo.objects.all()
datosmarca = marca.objects.all()
datosubicacion = ubicacion.objects.all()
return render(request, "buscar.html", {"datospieza": datospieza, "datosequipo": datosequipo, "datosmarca": datosmarca, "datosubicacion": datosubicacion})
####### EXCEL #########################################################################
@login_required(login_url='/acceder')
def ReporteExcelInventario(request):
inventarios = pieza.objects.all()
datosequipo = equipo.objects.all()
datosmarca = marca.objects.all()
datosubicacion = ubicacion.objects.all()
fecha = datetime.datetime.now()
fe = str(fecha)
wb = Workbook()
ws = wb.active
ws['B1'] = 'REPORTE DE INVENTARIO'
ws.merge_cells('B1:L1')
ws['B2'] = datetime.datetime.now()
ws.merge_cells('B2:D2')
ws['B3'] = 'No. DE PEDIDO'
ws['C3'] = 'REFERENCIA'
ws['D3'] = 'EQUIPO'
ws['E3'] = 'DESCRIPCIÓN DE ETIQUETA'
ws['F3'] = 'DESCRIPCIÓN'
ws['G3'] = 'MARCA'
ws['H3'] = 'ESTATUS'
ws['I3'] = 'UBICACION'
ws['J3'] = 'CANTIDAD'
ws['K3'] = 'FECHA DE ACTUALIZACION'
ws['L3'] = 'COLUMN1'
cont = 4
for inventario in inventarios:
for datoequipo in datosequipo:
if inventario.equipo_id == datoequipo.id:
excelequipo = datoequipo.nombre
for datomarca in datosmarca:
if inventario.marca_id == datomarca.id:
excelmarca = datomarca.nombre
for datoubicacion in datosubicacion:
if inventario.ubicacion_id == datoubicacion.id:
excelubicacion = datoubicacion.nombre
ws.cell(row=cont, column=2).value = inventario.n_pedido
ws.cell(row=cont, column=3).value = inventario.referencia
ws.cell(row=cont, column=4).value = excelequipo
ws.cell(row=cont, column=5).value = inventario.descripcion_etiqueta
ws.cell(row=cont, column=6).value = inventario.descripcion_pieza
ws.cell(row=cont, column=7).value = excelmarca
ws.cell(row=cont, column=8).value = inventario.estatus
ws.cell(row=cont, column=9).value = excelubicacion
ws.cell(row=cont, column=10).value = inventario.cantidad
ws.cell(row=cont, column=11).value = inventario.fecha_actualizacion
ws.cell(row=cont, column=12).value = inventario.Column1
cont += 1
nombre_archivo = "ReporteInventario "+fe+".xlsx"
response = HttpResponse(content_type="application/ms-excel")
content = "attachment; filename = {0}".format(nombre_archivo)
response['Content-Disposition'] = content
wb.save(response)
return response
@login_required(login_url='/acceder')
def ReporteExcelInvEntrada(request):
inventarios = pieza.objects.all()
datosentrada = rentrada.objects.all()
fecha = datetime.datetime.now()
fe = str(fecha)
wb = Workbook()
ws = wb.active
ws['B1'] = 'REPORTE DE INVENTARIO ENTRADA'
ws.merge_cells('B1:L1')
ws['B2'] = datetime.datetime.now()
ws.merge_cells('B2:D2')
ws['B3'] = 'NO. PEDIDO o contrato'
ws['C3'] = 'REFERENCIA'
ws['D3'] = 'CANTIDAD'
ws['E3'] = 'FECHA ALTA'
cont = 4
for datoentrada in datosentrada:
for inventario in inventarios:
if datoentrada.referencia_id == inventario.id:
excelreferencia = inventario.referencia
ws.cell(row=cont, column=2).value = datoentrada.n_pedido
ws.cell(row=cont, column=3).value = excelreferencia
ws.cell(row=cont, column=4).value = datoentrada.cantidad
ws.cell(row=cont, column=5).value = datoentrada.fecha_alta
cont += 1
nombre_archivo = "ReporteInventarioEntrada "+fe+".xlsx"
response = HttpResponse(content_type="application/ms-excel")
content = "attachment; filename = {0}".format(nombre_archivo)
response['Content-Disposition'] = content
wb.save(response)
return response
@login_required(login_url='/acceder')
def ReporteExcelInvSalida(request):
inventarios = pieza.objects.all()
datossalida = rsalida.objects.all()
datosequipo = equipo.objects.all()
datosmarca = marca.objects.all()
datosubicacion = ubicacion.objects.all()
fecha = datetime.datetime.now()
fe = str(fecha)
wb = Workbook()
ws = wb.active
ws['B1'] = 'REPORTE DE INVENTARIO SALIDA'
ws.merge_cells('B1:L1')
ws['B2'] = datetime.datetime.now()
ws.merge_cells('B2:D2')
ws['B3'] = 'QUIEN RETIRA'
ws['C3'] = 'REFERENCIA'
ws['D3'] = 'EQUIPO'
ws['E3'] = 'MARCA'
ws['F3'] = 'UBICACION'
ws['G3'] = 'CANTIDAD'
ws['H3'] = 'FECHA'
cont = 4
for datosalida in datossalida:
for inventario in inventarios:
if datosalida.referencia_id == inventario.id:
excelreferencia = inventario.referencia
for datoequipo in datosequipo:
if inventario.equipo_id == datoequipo.id:
excelequipo = datoequipo.nombre
for datomarca in datosmarca:
if inventario.marca_id == datomarca.id:
excelmarca = datomarca.nombre
for datoubicacion in datosubicacion:
if inventario.ubicacion_id == datoubicacion.id:
excelubicacion = datoubicacion.nombre
ws.cell(row=cont, column=2).value = datosalida.autor
ws.cell(row=cont, column=3).value = excelreferencia
ws.cell(row=cont, column=4).value = excelequipo
ws.cell(row=cont, column=5).value = excelmarca
ws.cell(row=cont, column=6).value = excelubicacion
ws.cell(row=cont, column=7).value = datosalida.cantidad
ws.cell(row=cont, column=8).value = datosalida.fecha_alta
cont += 1
nombre_archivo = "ReporteInventarioSalida "+fe+".xlsx"
response = HttpResponse(content_type="application/ms-excel")
content = "attachment; filename = {0}".format(nombre_archivo)
response['Content-Disposition'] = content
wb.save(response)
return response