예제 #1
0
class buser(Tk):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.resizable(0, 0)
        self.title("Consulta de usuarios")

        self.frameb = Frame(self)
        self.frameb.pack()
        self.frameb.config(width=750, height=550)
        self.frameb.config(bg="white")

        self.framet = ScrollableFrame(self.frameb, width=100)
        self.framet.place(x=25, y=75)

        self.lab1 = Label(self.frameb,
                          text="Buscar por...",
                          bg="white",
                          font=("Verdana", 12))
        self.lab1.place(x=25, y=25)

        self.comb = ttk.Combobox(self.frameb,
                                 width=25,
                                 height=10,
                                 state="readonly")
        self.comb.place(x=150, y=25)
        self.comb["values"] = ["Cedula", "Nombre", "ID"]
        self.comb.set("Cedula")

        self.lab2 = Label(self.frameb,
                          text="Buscar:",
                          bg="white",
                          font=("Verdana", 12))
        self.lab2.place(x=340, y=25)

        self.text = Entry(self.frameb, width=30)
        self.text.place(x=420, y=25)

        self.rellenar(alluser())

        self.bot = Button(self.frameb,
                          width=10,
                          height=1,
                          text="Aceptar",
                          command=self.val)
        self.bot.place(x=640, y=25)

        self.bot3 = Button(self.frameb,
                           text="Realizar reporte",
                           command=self.reporte)
        self.bot3.place(x=150, y=500)

        self.mainloop()

    def rellenar(self, lista):
        self.marco = []
        self.reportdata = lista
        i = 0
        for per in lista:
            self.marco.append(
                framemod(self.framet.scrollable_frame,
                         per[0],
                         width=750,
                         height=60,
                         bg="#DB7093"))
            self.marco[i].pack()
            self.marco[i].bind("<Button-1>", self.allinfo)
            self.id = Label(self.marco[i], text=per[0], fg="white")
            self.id.place(x=20, y=5)
            self.nom = Label(self.marco[i], text=per[2], fg="white")
            self.nom.place(x=50, y=5)
            self.ci = Label(self.marco[i],
                            text="Cedula: " + str(per[1]),
                            fg="white")
            self.ci.place(x=50, y=30)
            self.priv = Label(self.marco[i], text=per[3], fg="white")
            self.priv.place(x=570, y=5)
            self.id.config(bg="#DB7093")
            self.nom.config(bg="#DB7093")
            self.ci.config(bg="#DB7093")
            self.priv.config(bg="#DB7093")
            if i % 2 == 0:
                self.marco[i].config(bg="#C40233")
                self.id.config(bg="#C40233")
                self.nom.config(bg="#C40233")
                self.ci.config(bg="#C40233")
                self.priv.config(bg="#C40233")
            i += 1

    def val(self):
        if self.text.get() == "":
            messagebox.showerror("Error",
                                 "Ingrese un valor para realizar la busqueda")
            self.text.delete(0, END)
        else:
            self.buscar()

    def buscar(self):
        quer = suser(self.comb.get(), self.text.get())
        self.text.delete(0, END)
        for i in self.marco:
            i.pack_forget()
            i.destroy()
        if len(quer) < 1:
            messagebox.showerror(
                "Error", "No se han encontrado relaciones, intente otra vez")
        else:
            messagebox.showinfo(
                "Busqueda exitosa",
                "Se ha encontrado " + str(len(quer)) + " registros")
            self.rellenar(quer)

    def allinfo(self, event):
        caller = event.widget
        pos = caller.id
        nwin = userindi(self, pos)

    def refresh(self):
        for i in self.marco:
            i.pack_forget()
            i.destroy()
        self.rellenar(alluser())

    def reporte(self):
        res = messagebox.askquestion(
            "Confirmación",
            "¿Estas seguro que deseas guardar un reporte de los elementos seleccionados?"
        )
        if res == "yes":
            self.empreport = [[
                "ID", "CI Empleado", "Nombre", "Privilegios", "N° de ventas",
                "F. de registro"
            ]]
            for e in self.reportdata:
                self.empreport.append(e)
            now = datetime.now()
            titulo = "Reporte de empleados " + str(date.today()) + "  " + str(
                now.hour) + "-" + str(now.minute) + "-" + str(
                    now.second) + ".pdf"
            export_to_pdf(4, titulo, "Clientes", self.empreport)
            messagebox.showinfo("Operación Exitosa",
                                "El reporte se ha generado exitosamente")
예제 #2
0
class leventos(Tk):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.resizable(0,0)
        self.title("Listado de eventos")
        
        
        self.frameb= Frame(self)
        self.frameb.pack()
        self.frameb.config(width=750,height=550)
        self.frameb.config(bg="white")


        self.framet= ScrollableFrame(self.frameb,width=100)
        self.framet.place(x=25,y=75)

        
        self.lab1= Label(self.frameb, text="Buscar por...",bg="white",font=("Verdana",12))
        self.lab1.place(x=25,y=25)

        self.comb= ttk.Combobox(self.frameb, width=25,height=10,state="readonly")
        self.comb.place(x=150,y=25)
        self.comb["values"] = ["CI Cliente","CI Empleado","N° de Factura","Metodo"]
        self.comb.set("CI Cliente")
        
        
        self.lab2= Label(self.frameb, text="Buscar:",bg="white",font=("Verdana",12))
        self.lab2.place(x=340,y=25)

        self.text= Entry(self.frameb, width=30)
        self.text.place(x=420,y=25)

        
        
        self.bot = Button(self.frameb, width=10,height=1,text= "Aceptar", command=self.valv)
        self.bot.place(x=640,y=25)

        self.bot2 = Button(self.frameb,text="Movimiento de items",command=self.lmov)
        self.bot2.place(x=580,y=500)

        self.bot3 = Button(self.frameb,text="Operaciones de inventario",command=self.lope)
        self.bot3.place(x=400,y=500)

        self.bot4 = Button(self.frameb,text="Ventas realizadas",command=self.lventa,state="disabled")
        self.bot4.place(x=265,y=500)

        self.bot6 = Button(self.frameb,text="Realizar reporte", command=self.reportv)
        self.bot6.place(x=150,y=500)

        self.bot5 = Button(self.frameb,text="Regresar")
        self.bot5.place(x=25,y=500)

        self.rellenar(allventa())


        self.mainloop()

    def rellenar(self,lista):
        self.reportdata=lista
        self.marco=[]
        i=0
        for vent in lista:
            self.marco.append(framemod(self.framet.scrollable_frame, vent[0],width=750, height=60, bg="#DB7093"))
            self.marco[i].pack()
            self.id = Label(self.marco[i], text="N° Factura: "+str(vent[0]), fg="white", bg="#DB7093")
            self.id.place(x=20,y=5)
            self.cie = Label(self.marco[i], text="CI empleado: "+str(vent[1]), fg="white", bg="#DB7093")
            self.cie.place(x=20,y=25)
            self.cic = Label(self.marco[i], text="CI cliente: "+str(vent[2]), fg="white", bg="#DB7093")
            self.cic.place(x=250,y=25)
            self.met = Label(self.marco[i], text="Pago en: "+str(vent[3]), fg="white", bg="#DB7093")
            self.met.place(x=250,y=5)
            self.mon = Label(self.marco[i], text="Monto: Bs.S"+str(vent[4]), fg="white", bg="#DB7093")
            self.mon.place(x=500,y=5)
            if i % 2 == 0:
                self.marco[i].config(bg="#C40233")
                self.id.config(bg="#C40233")
                self.cie.config(bg="#C40233")
                self.cic.config(bg="#C40233")
                self.met.config(bg="#C40233")
                self.mon.config(bg="#C40233")
            i+=1

    def rellenarm(self,lista):
        self.reportdata=lista
        self.marco=[]
        i=0
        for mov in lista:
            self.marco.append(framemod(self.framet.scrollable_frame, mov[0],width=750, height=60, bg="#DB7093"))
            self.marco[i].pack()
            self.id =Label(self.marco[i], text="ID: " + str(mov[0]), fg="white", bg="#DB7093")
            self.id.place(x=20,y=5)
            self.prod =Label(self.marco[i], text="Producto: "+ str(mov[1]), fg="white", bg="#DB7093")
            self.prod.place(x=20,y=25)
            if mov[2]==0:
                self.iden= Label(self.marco[i], text="ID operación: "+str(mov[3]), fg="white", bg="#DB7093")
            else:
                self.iden= Label(self.marco[i], text="N° factura: "+str(mov[2]), fg="white", bg="#DB7093")  
            self.iden.place(x=250,y=5)
            self.acc =Label(self.marco[i], text="Acción: "+ str(mov[4]), fg="white", bg="#DB7093")
            self.acc.place(x=250,y=25)
            self.cant = Label(self.marco[i], text="Cantidad: "+str(mov[5]), fg="white", bg="#DB7093")
            self.cant.place(x=500,y=5)
            if i % 2 == 0:
                self.marco[i].config(bg="#C40233")
                self.id.config(bg="#C40233")
                self.prod.config(bg="#C40233")
                self.iden.config(bg="#C40233")
                self.acc.config(bg="#C40233")
                self.cant.config(bg="#C40233")
            i+=1

    def rellenaro(self,lista):
        self.reportdata=lista
        self.marco=[]
        i=0
        for ope in lista:
            self.marco.append(framemod(self.framet.scrollable_frame, ope[0],width=750, height=60, bg="#DB7093"))
            self.marco[i].pack()
            self.id = Label(self.marco[i], text="ID Operación: "+str(ope[0]), fg="white", bg="#DB7093")
            self.id.place(x=20,y=5)
            self.cie = Label(self.marco[i], text="CI empleado: "+str(ope[1]), fg="white", bg="#DB7093")
            self.cie.place(x=20,y=25)
            self.des = Label(self.marco[i], text="Acción: "+str(ope[2]), fg="white", bg="#DB7093")
            self.des.place(x=250,y=25)
            self.hora = Label(self.marco[i], text="Fecha: "+str(ope[3]), fg="white", bg="#DB7093")
            self.hora.place(x=250,y=5)
            if i % 2 == 0:
                self.marco[i].config(bg="#C40233")
                self.id.config(bg="#C40233")
                self.cie.config(bg="#C40233")
                self.des.config(bg="#C40233")
                self.hora.config(bg="#C40233")
            i+=1

    def valv(self):
        if self.text.get() == "":
            messagebox.showerror("Error","Ingrese un valor para realizar la busqueda")
            self.text.delete(0,END)
        else: 
            self.buscarv()

    def valm(self):
        if self.text.get() == "":
            messagebox.showerror("Error","Ingrese un valor para realizar la busqueda")
            self.text.delete(0,END)
        else: 
            self.buscarm()

    def valo(self):
        if self.text.get() == "":
            messagebox.showerror("Error","Ingrese un valor para realizar la busqueda")
            self.text.delete(0,END)
        else: 
            self.buscaro()


    def buscarv(self):
        quer=sventa(self.comb.get(),self.text.get())
        self.text.delete(0,END)
        for i in self.marco:
                i.pack_forget()
                i.destroy()
        if len(quer)<1:
            messagebox.showerror("Error","No se han encontrado relaciones, intente otra vez") 
        else:
            messagebox.showinfo("Busqueda exitosa","Se ha encontrado " +str(len(quer))+" registros")
            self.rellenar(quer)
    
    def buscarm(self):
        quer=smov(self.comb.get(),self.text.get())
        self.text.delete(0,END)
        for i in self.marco:
                i.pack_forget()
                i.destroy()
        if len(quer)<1:
            messagebox.showerror("Error","No se han encontrado relaciones, intente otra vez") 
        else:
            messagebox.showinfo("Busqueda exitosa","Se ha encontrado " +str(len(quer))+" registros")
            self.rellenarm(quer)

    def buscaro(self):
        quer=sope(self.comb.get(),self.text.get())
        self.text.delete(0,END)
        for i in self.marco:
                i.pack_forget()
                i.destroy()
        if len(quer)<1:
            messagebox.showerror("Error","No se han encontrado relaciones, intente otra vez") 
        else:
            messagebox.showinfo("Busqueda exitosa","Se ha encontrado " +str(len(quer))+" registros")
            self.rellenaro(quer)

    def lmov(self):
        for i in self.marco:
            i.pack_forget()
            i.destroy()
        self.rellenarm(allmov())
        self.comb["values"] = ["ID","Nombre de producto","Acción"]
        self.comb.set("ID")
        self.bot2.config(state="disabled")
        self.bot3.config(state="normal")
        self.bot4.config(state="normal")
        self.bot6.config(command=self.reportm)
        self.bot.config(command=self.valm)

    def lventa(self):
        for i in self.marco:
            i.pack_forget()
            i.destroy()
        self.rellenar(allventa())
        self.comb["values"] = ["CI Cliente","CI Empleado","N° de Factura","Metodo"]
        self.comb.set("CI Cliente")
        self.bot4.config(state="disabled")
        self.bot2.config(state="normal")
        self.bot3.config(state="normal")
        self.bot6.config(command=self.reportv)
        
        self.bot.config(command=self.valv)

    def lope(self):
        for i in self.marco:
            i.pack_forget()
            i.destroy()
        self.rellenaro(allope())
        self.comb["values"] = ["ID","CI Empleado","Descripción"]
        self.comb.set("ID")
        self.bot4.config(state="normal")
        self.bot2.config(state="normal")
        self.bot3.config(state="disabled")
        self.bot6.config(command=self.reporto)
        self.bot.config(command=self.valo)

    def reportv(self):
        res=messagebox.askquestion("Confirmación","¿Estas seguro que deseas guardar un reporte de los elementos seleccionados?")
        if res == "yes":
            self.ventreport=[["N° de factura","CI Empleado","CI Cliente","Tipo de pago","Monto(Bs.S)"]]
            for v in self.reportdata:
                self.ventreport.append(v)
            now=datetime.now()
            titulo="Reporte de ventas "+str(date.today()) +"  "+ str(now.hour) + "-" + str(now.minute) + "-" + str(now.second) + ".pdf"
            export_to_pdf(4,titulo,"Clientes",self.ventreport)
            messagebox.showinfo("Operación Exitosa","El reporte se ha generado exitosamente")
    
    def reportm(self):
        res=messagebox.askquestion("Confirmación","¿Estas seguro que deseas guardar un reporte de los elementos seleccionados?")
        if res == "yes":
            self.movreport=[["ID","Producto","N° de factura","ID operación","Acción","Cantidad"]]
            for m in self.reportdata:
                if m[2]==0:
                    m[2]="No posee"
                else:
                    m[3]="No posee" 
                self.movreport.append(m)
            now=datetime.now()
            titulo="Reporte de movimientos "+str(date.today()) +"  "+ str(now.hour) + "-" + str(now.minute) + "-" + str(now.second) + ".pdf"
            export_to_pdf(4,titulo,"Clientes",self.movreport)
            messagebox.showinfo("Operación Exitosa","El reporte se ha generado exitosamente")
            
    def reporto(self):
        res=messagebox.askquestion("Confirmación","¿Estas seguro que deseas guardar un reporte de los elementos seleccionados?")
        if res == "yes":
            self.opereport=[["ID","CI Empleado","Descripción","Fecha/Hora"]]
            for o in self.reportdata:
                self.opereport.append(o)
            now=datetime.now()
            titulo="Reporte de operaciones "+str(date.today()) +"  "+ str(now.hour) + "-" + str(now.minute) + "-" + str(now.second) + ".pdf"
            export_to_pdf(4,titulo,"Clientes",self.opereport)
            messagebox.showinfo("Operación Exitosa","El reporte se ha generado exitosamente")
예제 #3
0
class venta(Tk):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.resizable(0, 0)
        self.title("Procesar venta")

        self.frameb = Frame(self)
        self.frameb.pack()
        self.frameb.config(width=950, height=550)
        self.frameb.config(bg="white")

        self.framet = ScrollableFrame(self.frameb)
        self.framet.canvas.config(height=180)
        self.framet.place(x=25, y=330)

        self.frmcl = Frame(self.frameb,
                           width=270,
                           height=120,
                           relief="sunken",
                           bd=5,
                           bg="white")
        self.frmcl.place(x=660, y=20)

        self.titu = Label(self.frameb,
                          text="Agregar item a \n la compra",
                          font=("Verdana", 15),
                          bg="white")
        self.titu.place(x=100, y=30)

        self.lab1 = Label(self.frameb,
                          text="Código:",
                          font=("Verdana", 12),
                          bg="white")
        self.lab1.place(x=70, y=130)

        self.lab2 = Label(self.frameb,
                          text="Cantidad:",
                          font=("Verdana", 12),
                          bg="white")
        self.lab2.place(x=50, y=205)

        self.cod = Entry(self.frameb, width=30)
        self.cod.place(x=150, y=130)

        self.spin = Spinbox(self.frameb, from_=0, to=10000, width=7)
        self.spin.place(x=150, y=205)

        self.agre = Button(self.frameb, text="Agregar", command=self.val)
        self.agre.place(x=150, y=255)

        self.regr = Button(self.frameb,
                           text="Regresar al\n menu anterior",
                           width=25,
                           height=3,
                           command=self.regre)
        self.regr.place(x=730, y=332)
        self.rein = Button(self.frameb,
                           text="Reiniciar \nCompra",
                           width=25,
                           height=3,
                           command=self.reiniciar)
        self.rein.place(x=730, y=402)
        self.fin = Button(self.frameb,
                          text="Proseguir \nCompra",
                          width=25,
                          height=3,
                          command=self.sig)
        self.fin.place(x=730, y=472)

        self.lab3 = Label(self.frameb,
                          text="TOTAL",
                          font=("Verdana", 20),
                          bg="white")
        self.lab3.place(x=500, y=30)

        self.total = Label(self.frameb,
                           text="0.00",
                           font=("Verdana", 40),
                           bg="white")
        self.sum = 0.00
        self.total.place(x=480, y=150)

        nwin = bcliente(self)

        self.item = []
        self.i = 0
        self.tota = []
        self.cantidad = []
        self.facturao = []

        self.mainloop()

    def val(self):
        if self.cod.get() == "":
            messagebox.showerror("Error", "Ingrese un código de barras")
            self.cod.delete(0, END)
            self.spin.delete(0, END)
        elif len(self.cod.get()) < 7:
            messagebox.showerror(
                "Error", "El codigo debe tener un total de 13 dígitos")
            self.cod.delete(0, END)
            self.spin.delete(0, END)
        elif not self.cod.get().isdigit():
            messagebox.showerror("Error", "El codigo solo puede tener números")
            self.cod.delete(0, END)
            self.spin.delete(0, END)
        elif not self.spin.get().isdigit():
            messagebox.showerror("Error",
                                 "Ingrese una cantidad valida de elementos")
            self.cod.delete(0, END)
            self.spin.delete(0, END)
        elif not checkprodu(self.cod.get()):
            messagebox.showerror("Error", "El item no se ha encontrado")
            self.cod.delete(0, END)
            self.spin.delete(0, END)
        elif checkcant(self.cod.get()) < int(self.spin.get()):
            messagebox.showerror("Error",
                                 "El item no posee suficientes elementos")
            self.cod.delete(0, END)
            self.spin.delete(0, END)
        else:
            self.fill()

    def fill(self):
        self.item.append(
            framemod(self.framet.scrollable_frame,
                     self.cod.get(),
                     width=750,
                     height=80,
                     bg="white"))
        self.item[self.i].pack()
        info = produforventa(self.cod.get())
        self.facturao.append([
            info[1],
            self.spin.get(), info[0], (float(self.spin.get()) * info[1])
        ])
        self.nompro = Label(self.item[self.i], text=info[0], bg="white")
        self.nompro.place(x=20, y=5)
        self.costi = Label(self.item[self.i],
                           text=str(self.spin.get()) + " x Bs.S " +
                           str(info[1]),
                           bg="white")
        self.costi.place(x=20, y=25)
        self.toti = Label(self.item[self.i],
                          text=str(float(self.spin.get()) * info[1]),
                          font=("Verdana", 17),
                          bg="white")
        self.toti.place(x=250, y=5)
        self.tota.append(float(self.spin.get()) * info[1])
        self.cantidad.append(self.spin.get())
        self.canc = Button(self.item[self.i],
                           text="Cancelar",
                           bg="white",
                           command=partial(self.eli, self.item[self.i],
                                           self.tota[self.i],
                                           self.cantidad[self.i]))
        self.canc.place(x=600, y=15)
        self.sum = self.sum + (float(self.spin.get()) * info[1])
        self.total.config(text=self.sum)
        self.cod.delete("0", "end")
        self.spin.delete("0", "end")
        self.i += 1

    def eli(self, fram, tota, cant):
        rest = float(tota)
        self.sum -= rest
        self.total.config(text=self.sum)
        fram.pack_forget()
        fram.destroy()
        self.item.remove(fram)
        self.tota.remove(tota)
        self.cantidad.remove(cant)
        self.i -= 1

    def infoclient(self, ci, nom):
        self.titu2 = Label(self.frmcl,
                           text="Inf. cliente",
                           font=("Verdana", 15),
                           bg="white")
        self.titu2.place(x=40, y=5)
        self.nom = Label(self.frmcl,
                         text="Nombre: " + str(nom),
                         font=("Verdana", 12),
                         bg="white")
        self.nom.place(x=5, y=45)
        self.cic = Label(self.frmcl,
                         text="CI: " + str(ci),
                         font=("Verdana", 12),
                         bg="white")
        self.cic.place(x=5, y=85)
        self.ciclient = ci

    def regre(self):
        ans = messagebox.askquestion(
            "Confirmación", "¿Estas seguro que deseas abandonar la ventana?")
        if ans == "yes":
            self.destroy()

    def reiniciar(self):
        ans = messagebox.askquestion(
            "Confirmación", "¿Estas seguro que deseas reiniciar el proceso?")
        if ans == "yes":
            self.ini()

    def ini(self):
        for i in self.item:
            i.pack_forget()
            i.destroy()
        self.total.config(text=0)
        self.sum = 0.00
        self.i = 0
        self.item = []
        self.tota = []
        self.cantidad = []
        self.facturao = []
        nwin = bcliente(self)

    def sig(self):
        nwind = metodop(self)

    def final(self, met):
        # NOTA: CAMBIAR EL ID DEL EMPLEADO CUANDO ESTE COMPLETO LOS MENUS
        idemp = 4
        idclient = getidcliet(self.ciclient)
        factura = proceventa(idemp, idclient, met, self.sum)
        j = 0
        for i in self.item:
            movventa(i.id, factura, self.cantidad[j])
            retiitem(i.id, self.cantidad[j])
            j += 1

        messagebox.showinfo("Compra exitosa",
                            "La compra se ha procesado correctamente")
        gen_factura(self.facturao, self.sum, factura, idclient)
        self.ini()
예제 #4
0
class inventario(Tk):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.resizable(0, 0)
        self.title("Inventario de productos")

        self.frameb = Frame(self)
        self.frameb.pack()
        self.frameb.config(width=750, height=550)
        self.frameb.config(bg="white")

        self.framet = ScrollableFrame(self.frameb, width=100)
        self.framet.place(x=25, y=75)

        self.lab1 = Label(self.frameb,
                          text="Buscar por...",
                          bg="white",
                          font=("Verdana", 12))
        self.lab1.place(x=25, y=25)

        self.comb = ttk.Combobox(self.frameb,
                                 width=25,
                                 height=10,
                                 state="readonly")
        self.comb.place(x=150, y=25)
        self.comb["values"] = ["Nombre", "Código"]
        self.comb.set("Nombre")

        self.lab2 = Label(self.frameb,
                          text="Buscar:",
                          bg="white",
                          font=("Verdana", 12))
        self.lab2.place(x=340, y=25)

        self.text = Entry(self.frameb, width=30)
        self.text.place(x=420, y=25)

        self.bot = Button(self.frameb,
                          width=10,
                          height=1,
                          text="Aceptar",
                          command=self.vali)
        self.bot.place(x=640, y=25)

        self.bot2 = Button(self.frameb,
                           text="Listado de productos",
                           command=self.lprodu)
        self.bot2.place(x=580, y=500)

        self.bot3 = Button(self.frameb, text="Regresar")
        self.bot3.place(x=25, y=500)

        self.bot4 = Button(self.frameb,
                           text="Realizar reporte",
                           command=self.reporti)
        self.bot4.place(x=150, y=500)

        self.rellenar(allitem())

        self.mainloop()

    def rellenar(self, lista):
        self.reportdata = lista
        self.marco = []
        i = 0
        for item in lista:
            self.marco.append(
                framemod(self.framet.scrollable_frame,
                         item[0],
                         width=750,
                         height=60,
                         bg="#DB7093"))
            self.marco[i].pack()
            self.marco[i].bind("<Button-1>", self.iteminfo)
            self.id = Label(self.marco[i],
                            text="Codigo de barras: " + str(item[0]),
                            fg="white",
                            bg="#DB7093")
            self.id.place(x=20, y=5)
            self.nom = Label(self.marco[i],
                             text=item[1],
                             fg="white",
                             bg="#DB7093")
            self.nom.place(x=20, y=25)
            self.cant = Label(self.marco[i],
                              text="Cantidad ingresada: " + str(item[2]),
                              fg="white",
                              bg="#DB7093")
            self.cant.place(x=250, y=5)
            self.est = Label(self.marco[i],
                             text="Estado: " + str(item[3]),
                             fg="white",
                             bg="#DB7093")
            self.est.place(x=500, y=5)
            if i % 2 == 0:
                self.marco[i].config(bg="#C40233")
                self.id.config(bg="#C40233")
                self.nom.config(bg="#C40233")
                self.cant.config(bg="#C40233")
                self.est.config(bg="#C40233")
            i += 1

    def rellenarp(self, lista):
        self.marco = []
        self.reportdata = lista
        i = 0
        for item in lista:
            self.marco.append(
                framemod(self.framet.scrollable_frame,
                         item[0],
                         width=750,
                         height=60,
                         bg="#DB7093"))
            self.marco[i].pack()
            self.marco[i].bind("<Button-1>", self.prodinfo)
            self.id = Label(self.marco[i],
                            text=str(item[0]),
                            fg="white",
                            bg="#DB7093")
            self.id.place(x=20, y=5)
            self.nom = Label(self.marco[i],
                             text=item[1],
                             fg="white",
                             bg="#DB7093")
            self.nom.place(x=50, y=5)
            self.clas = Label(self.marco[i],
                              text=item[3],
                              fg="white",
                              bg="#DB7093")
            self.clas.place(x=50, y=30)
            self.cant = Label(self.marco[i],
                              text=item[2],
                              fg="white",
                              bg="#DB7093")
            self.cant.place(x=570, y=5)
            if i % 2 == 0:
                self.marco[i].config(bg="#C40233")
                self.id.config(bg="#C40233")
                self.nom.config(bg="#C40233")
                self.cant.config(bg="#C40233")
                self.clas.config(bg="#C40233")
            i += 1

    def vali(self):
        if self.text.get() == "":
            messagebox.showerror("Error",
                                 "Ingrese un valor para realizar la busqueda")
            self.text.delete(0, END)
        else:
            self.buscari()

    def valp(self):
        if self.text.get() == "":
            messagebox.showerror("Error",
                                 "Ingrese un valor para realizar la busqueda")
            self.text.delete(0, END)
        else:
            self.buscarp()

    def buscari(self):
        quer = sitem(self.comb.get(), self.text.get())
        self.text.delete(0, END)
        for i in self.marco:
            i.pack_forget()
            i.destroy()
        if len(quer) < 1:
            messagebox.showerror(
                "Error", "No se han encontrado relaciones, intente otra vez")
        else:
            messagebox.showinfo(
                "Busqueda exitosa",
                "Se ha encontrado " + str(len(quer)) + " registros")
            self.rellenar(quer)

    def buscarp(self):
        quer = sprodu(self.comb.get(), self.text.get())
        self.text.delete(0, END)
        for i in self.marco:
            i.pack_forget()
            i.destroy()
        if len(quer) < 1:
            messagebox.showerror(
                "Error", "No se han encontrado relaciones, intente otra vez")
        else:
            messagebox.showinfo(
                "Busqueda exitosa",
                "Se ha encontrado " + str(len(quer)) + " registros")
            self.rellenarp(quer)

    def lprodu(self):
        for i in self.marco:
            i.pack_forget()
            i.destroy()
        self.rellenarp(allprodu())
        self.comb["values"] = ["Nombre", "ID", "Clasificación"]
        self.comb.set("Nombre")
        self.bot2.config(command=self.litem, text="Listado de items")
        self.bot.config(command=self.valp)
        self.bot4.config(command=self.reportp)

    def litem(self):
        for i in self.marco:
            i.pack_forget()
            i.destroy()
        self.rellenar(allitem())
        self.comb["values"] = ["Nombre", "Código"]
        self.comb.set("Nombre")
        self.bot2.config(command=self.lprodu, text="Listado de productos")
        self.bot.config(command=self.vali)
        self.bot4.config(command=self.reporti)

    def iteminfo(self, event):
        caller = event.widget
        pos = caller.id
        nwin = itemindi(self, pos)

    def prodinfo(self, event):
        caller = event.widget
        pos = caller.id
        nwin = produindi(self, pos)

    def refreshi(self):
        for i in self.marco:
            i.pack_forget()
            i.destroy()
        self.rellenar(allitem())

    def refreshp(self):
        for i in self.marco:
            i.pack_forget()
            i.destroy()
        self.rellenarp(allprodu())

    def reportp(self):
        res = messagebox.askquestion(
            "Confirmación",
            "¿Estas seguro que deseas guardar un reporte de los elementos seleccionados?"
        )
        if res == "yes":
            self.prodreport = [[
                "ID", "Nombre", "disponibilidad", "Clasificación",
                "Precio(Bs.S)"
            ]]
            for p in self.reportdata:
                self.prodreport.append(p)
            now = datetime.now()
            titulo = "Reporte de productos " + str(date.today()) + "  " + str(
                now.hour) + "-" + str(now.minute) + "-" + str(
                    now.second) + ".pdf"
            export_to_pdf(4, titulo, "Clientes", self.prodreport)
            messagebox.showinfo("Operación Exitosa",
                                "El reporte se ha generado exitosamente")

    def reporti(self):
        res = messagebox.askquestion(
            "Confirmación",
            "¿Estas seguro que deseas guardar un reporte de los elementos seleccionados?"
        )
        if res == "yes":
            self.itreport = [[
                "Código", "Producto", "Cant registrada", "Estado",
                "F. registro", "F. expedición"
            ]]
            for p in self.reportdata:
                self.itreport.append(p)
            now = datetime.now()
            titulo = "Reporte de clientes " + str(date.today()) + "  " + str(
                now.hour) + "-" + str(now.minute) + "-" + str(
                    now.second) + ".pdf"
            export_to_pdf(4, titulo, "Clientes", self.itreport)
            messagebox.showinfo("Operación Exitosa",
                                "El reporte se ha generado exitosamente")