def bajaValida(self, codigo_barra): """ Verifica que el producto no figure en remitos pendientes de pago, facturas liquidadas pendientes de pago o facturas pendientes de liquidación. :param codigo_barra: :return: """ detalleRemito = DetalleRemitoModel.buscarAlta(DetalleRemitoModel.producto, self.sesion, codigo_barra).all() for dr in detalleRemito: remito = RemitoModel.buscarAlta(RemitoModel.numero, self.sesion, dr.getIdRemito()).first() if remito.getCobrado() == None: QtGui.QMessageBox.critical(self, 'Error', 'Existen remitos pendientes de pago ' 'en los que figura dicho Producto.', 'Aceptar') return False detalleFactura = DetalleFacturaModel.buscar(DetalleFacturaModel.producto, self.sesion, codigo_barra).all() for df in detalleFactura: if df.getDescuento() > 0: facturaLiquidacion = FacturaLiquidacionModel.buscar(FacturaLiquidacionModel.nro_factura, self.sesion, df.getIdFactura()).first() if facturaLiquidacion: cobroObraSocial = CobroObraSocialModel.buscar( CobroObraSocialModel.id_factura_liquidacion, self.sesion, facturaLiquidacion.getNumero()).first() if cobroObraSocial == None: QtGui.QMessageBox.critical(self, 'Error', 'Existen facturas liquidadas pendientes' ' de cobro a la obra social en las que figura ' 'dicho Producto.', 'Aceptar') return False else: QtGui.QMessageBox.critical(self, 'Error', 'Existen facturas pendientes de liquidación' ' en las que figura dicho Producto.', 'Aceptar') return False return True
def bajaValida(self, dni): """ Verifica que el cliente no posea remitos sin pagar. :param dni: DNI del cliente para el cual se realiza la verificación. :return: bool """ remito = RemitoModel.buscarAlta(RemitoModel.cliente, self.sesion, dni).all() for r in remito: if not r.getCobrado(): return False return True
def bajaValida(self, dni): """ Verifica que el cliente no posea remitos sin pagar. :param dni: DNI del cliente para el cual se realiza la verificación. :return: bool """ remito = RemitoModel.buscarAlta(RemitoModel.cliente, self.sesion, dni).all() for r in remito: if r.getCobrado() == None: return False return True
def generarExcelVentas(self,fechaDesde, fechaHasta): """ Crea el documento Excel correspondiente a las ventas realizadas en un periodo de tiempo dado :param fechaDesde Fecha de inicio: :param fechaHasta Fecha de fin :return None : """ ventas={} for factura in (FacturaModel.buscarTodos("numero",self.sesion).all()): if factura.fecha_emision>= fechaDesde and factura.fecha_emision <= fechaHasta: if (factura.fecha_emision in ventas): ventas[factura.fecha_emision]+=1 else: ventas[factura.fecha_emision]=1 for remito in (RemitoModel.buscarTodos("numero",self.sesion).all()): if (remito.fecha_emision in ventas): ventas[remito.fecha_emision]+=1 else: ventas[remito.fecha_emision]=1 documento=xlsxwriter.Workbook(Listar.path_excel_files + "/Ventas.xlsx") hoja=documento.add_worksheet('Ventas') bold = documento.add_format({'bold': 1,}) date_format = documento.add_format({'num_format': 'yyyy/mm/dd'}) bold.set_align('center') hoja.set_column(0,0,45) hoja.set_column(1,1,15) ##Añado un grafico al documento grafico = documento.add_chart({'type':'line'}) fechas=list(ventas.keys()) cantidades=list(ventas.values()) hoja.write('A1','Fecha',bold) hoja.write('B1','Cantidad Vtas',bold) hoja.write_column('A2',fechas,date_format) hoja.write_column('B2',cantidades) grafico.add_series({ 'categories':[hoja.name,1,0,len(fechas),0], 'values': [hoja.name,1,1,len(cantidades),1] }) grafico.set_x_axis({ 'name':'Fechas', 'name-font':{'size':16,'bold':True}, 'num_font':{'italic':True}, }) hoja.insert_chart('E3', grafico) documento.close() QtGui.QMessageBox.information(self, "Listado" , "El listado ha sido generado con exito")
def Listar(self): """ Genera el listado correspondiente de acuerdo a la opción seleccionada. :return: """ self.listado = self.cbTipoListado.currentText() if (self.listado=="Facturas Liquidadas Pendientes de Cobro"): pass elif (self.listado=="Productos en Stock"): if self.rbtnExcel.isChecked(): self.generarExcelProductos() else: lote_producto = LoteProducto.buscarTodos("id_lote", self.sesion).all() f = open('reportes/listadoProductosStock.html','w') data = self.productosStock(lote_producto) self.diagramaBarras(data) message = self.htmlProductosStock(lote_producto) f.write(message) f.close() pdfkit.from_file('reportes/listadoProductosStock.html', 'reportes/list.pdf') os.system('evince reportes/list.pdf &') elif (self.listado=="Ventas Realizadas"): if self.rbtnExcel.isChecked(): self.generarExcelVentas() else: facturas = Factura.buscarTodos(Factura.numero, self.sesion).all() remitos = Remito.buscarTodos(Remito.numero, self.sesion).all() data = self.cantidadVentas(facturas, remitos) #self.diagramaLinea(data) f = open('reportes/listadoVentas.html','w') ventas = self.cantidadVentas(facturas, remitos) message = self.htmlVentas(ventas) f.write(message) f.close() pdfkit.from_file('reportes/listadoVentas.html', 'reportes/list.pdf') os.system('evince reportes/list.pdf &') else: if self.rbtnExcel.isChecked(): self.generarExcelClientes() else: clientes = Cliente.buscarTodos(Cliente.dni, self.sesion).all() f = open('reportes/listadoClientes.html','w') message = self.htmlCliente(clientes) f.write(message) f.close() pdfkit.from_file('reportes/listadoClientes.html', 'reportes/list.pdf') os.system('evince reportes/list.pdf &')
def bajaValida(self, codigo_barra): """ Verifica que el producto no figure en remitos pendientes de pago, facturas liquidadas pendientes de pago o facturas pendientes de liquidación. :param codigo_barra: :return: """ detalleRemito = DetalleRemitoModel.buscarAlta( DetalleRemitoModel.producto, self.sesion, codigo_barra).all() for dr in detalleRemito: remito = RemitoModel.buscarAlta(RemitoModel.numero, self.sesion, dr.getIdRemito()).first() if remito.getCobrado() == None: QtGui.QMessageBox.critical( self, 'Error', 'Existen remitos pendientes de pago ' 'en los que figura dicho Producto.', 'Aceptar') return False detalleFactura = DetalleFacturaModel.buscar( DetalleFacturaModel.producto, self.sesion, codigo_barra).all() for df in detalleFactura: if df.getDescuento() > 0: facturaLiquidacion = FacturaLiquidacionModel.buscar( FacturaLiquidacionModel.nro_factura, self.sesion, df.getIdFactura()).first() if facturaLiquidacion: cobroObraSocial = CobroObraSocialModel.buscar( CobroObraSocialModel.id_factura_liquidacion, self.sesion, facturaLiquidacion.getNumero()).first() if cobroObraSocial == None: QtGui.QMessageBox.critical( self, 'Error', 'Existen facturas liquidadas pendientes' ' de cobro a la obra social en las que figura ' 'dicho Producto.', 'Aceptar') return False else: QtGui.QMessageBox.critical( self, 'Error', 'Existen facturas pendientes de liquidación' ' en las que figura dicho Producto.', 'Aceptar') return False return True
def listarVentas(self, fechaDesde,fechaHasta): """ Genera el html usado para generar el pdf final del listado de las Ventas realizadas. :return: """ facturas = filter(lambda x: x.fecha_emision >= fechaDesde and x.fecha_emision <= fechaHasta, Factura.buscarTodos(Factura.numero, self.sesion).all()) remitos = filter(lambda x: x.fecha_emision >= fechaDesde and x.fecha_emision <= fechaHasta, Remito.buscarTodos(Remito.numero, self.sesion).all()) ventasFact = self.cantidadVentasContado(facturas) ventasRem = self.cantidadVentasRemito(remitos) archivo = open("PlantillasListados/ventas.html", "r") contenido = archivo.read() archivo.close() tableFact = "" for fecha, cant in ventasFact: cadena = """<tr> <td><strong>{fecha}</strong></td> <td class="text-right">{cantidad}</td> </tr>""".format(fecha=str(fecha), cantidad=str(cant)) tableFact += cadena tableRem = "" for fecha, cant in ventasRem: cadena = """<tr> <td><strong>{fecha}</strong></td> <td class="text-right">{cantidad}</td> </tr>""".format(fecha=str(fecha), cantidad=str(cant)) tableRem += cadena contenido_nuevo = contenido.format(contenidoFact=tableFact, contenidoRem=tableRem) archivo = open("reportes/listadoVentas.html", "w") archivo.write(contenido_nuevo) archivo.close()