def crear(self): """ Da de alta un lote nuevo y lo almacena en la base de datos. :return: """ if self.producto == None: QtGui.QMessageBox.warning(self, 'Atención', 'No se ha seleccionado ningun Producto de la tabla.', 'Aceptar') else: if ValidarDatos.validarCamposVacios(self.camposRequeridos): if self.dateFechVenc.dateTime().toPyDateTime().date() > date.today(): lote = LoteModel(str(self.lineCodigo.text()), str(self.dateFechVenc.text())) if lote.guardar(self.sesion): QtGui.QMessageBox.information(self, 'Info', 'El Lote fue dado de alta.', 'Aceptar') loteProducto = LoteProductoModel(lote.getCodigo(), self.producto, int(self.spinCantidad.value())) loteProducto.guardar(self.sesion) self.limpiarCampos() self.objectCreated.emit() else: QtGui.QMessageBox.critical(self, 'Error', 'El Lote ya existe.', 'Aceptar') else: QtGui.QMessageBox.critical(self, 'Error', 'La fecha de vencimiento debe ser mayor a la fecha actual.', 'Aceptar') else: QtGui.QMessageBox.warning(self, 'Atención', 'Hay datos obligatorios que no fueron completados.', 'Aceptar')
def buscar(self): """ Busca y carga en la tabla los datos de un producto y su/s lote/s. :return: """ obj = self.sender().objectName() if obj == 'lineCod_Barra': loteProducto = LoteProductoModel.buscarLoteProductoPorProducto( self.sesion, ProductoModel, LoteModel, str(self.lineCod_Barra.text())).all() elif obj == 'lineCod_Lote': loteProducto = LoteProductoModel.buscarLoteProductoPorLote( self.sesion, ProductoModel, LoteModel, str(self.lineCod_Lote.text())).all() elif obj == 'btnBuscar': if str(self.lineCod_Barra.text()) != "": loteProducto = LoteProductoModel.buscarLoteProductoPorProducto( self.sesion, ProductoModel, LoteModel, str(self.lineCod_Barra.text())).all() elif str(self.lineCod_Lote.text()) != "": loteProducto = LoteProductoModel.buscarLoteProductoPorLote( self.sesion, ProductoModel, LoteModel, str(self.lineCod_Lote.text())).all() else: self.showMsjEstado( "Ingrese Código de Barra del Producto o Código del Lote para realizar la" " busqueda.") return self.limpiarTabla(self.tablaLoteProducto) self.cargarObjetos(self.tablaLoteProducto, loteProducto, ("codigo_barra", "id_medicamento", "id_presentacion", "codigo", "cantidad"))
def crear(self): """ Da de alta un lote nuevo y lo almacena en la base de datos. :return: """ if self.producto == None: self.showMsjEstado( "No se ha seleccionado ningun Producto de la tabla") else: if ValidarDatos.validarCamposVacios(self.camposRequeridos): lote = LoteModel(str(self.lineCodigo.text()), str(self.dateFechVenc.text())) if lote.guardar(self.sesion): self.showMsjEstado("El Lote fue dado de alta.") loteProducto = LoteProductoModel( lote.getCodigo(), self.producto, int(self.spinCantidad.value())) if loteProducto.guardar(self.sesion): self.showMsjEstado("Lote/Producto fue dado de alta.") else: self.showMsjEstado("Lote/Producto ya existe.") self.limpiarCampos() self.objectCreated.emit() else: QtGui.QMessageBox.critical(self, 'Error', 'El Lote ya existe.', 'Aceptar') else: self.showMsjEstado( "Hay datos obligatorios que no fueron completados.")
def buscar(self): """ Busca y carga en la tabla los datos de un producto y su/s lote/s. :return: """ obj = self.sender().objectName() if obj == 'lineCod_Barra': loteProducto = LoteProductoModel.buscarLoteProductoPorProducto(self.sesion, ProductoModel, LoteModel, str(self.lineCod_Barra.text())).all() elif obj == 'lineCod_Lote': loteProducto = LoteProductoModel.buscarLoteProductoPorLote(self.sesion, ProductoModel, LoteModel, str(self.lineCod_Lote.text())).all() elif obj == 'btnBuscar': if str(self.lineCod_Barra.text()) != "": loteProducto = LoteProductoModel.buscarLoteProductoPorProducto(self.sesion, ProductoModel, LoteModel, str(self.lineCod_Barra.text())).all() elif str(self.lineCod_Lote.text()) != "": loteProducto = LoteProductoModel.buscarLoteProductoPorLote(self.sesion, ProductoModel, LoteModel, str(self.lineCod_Lote.text())).all() else: self.showMsjEstado("Ingrese Código de Barra del Producto o Código del Lote para realizar la" " busqueda.") return self.limpiarTabla(self.tablaLoteProducto) self.cargarObjetos(self.tablaLoteProducto, loteProducto, ("codigo_barra", "id_medicamento", "id_presentacion", "codigo", "cantidad") )
def crear(self): """ Da de alta un producto nuevo y lo almacena en la base de datos. :return: """ itemActualMed = self.tablaMedicamento.currentItem() if itemActualMed == None: QtGui.QMessageBox.warning(self, 'Atención', 'No se ha seleccionado ningun Medicamento de la tabla.', 'Aceptar') else: row = itemActualMed.row() medicamento = str(self.tablaMedicamento.item(row, 0).text()) itemActualPres = self.tablaPresentacion.currentItem() if itemActualPres == None: QtGui.QMessageBox.warning(self, 'Atención', 'No se ha seleccionado ninguna Presentación de la tabla.', 'Aceptar') else: row = itemActualPres.row() presentacion = str(self.tablaPresentacion.item(row, 0).text()) if ValidarDatos.validarCamposVacios(self.camposRequeridos): if not self.productoExiste(presentacion, medicamento, str(self.lineCodigo_Barra.text())): if self.cantLoteProd: producto = ProductoModel(str(self.lineCodigo_Barra.text()), medicamento, presentacion, str(self.lineImporte.text())) if self.validarLote(producto): if producto.guardar(self.sesion): QtGui.QMessageBox.information(self, 'Info', 'El Producto fue dado de alta.', 'Aceptar') producto.setDescuento(self.sesion) if self.lote == None: self.lote = LoteModel(str(self.lineCod_Lote.text()), str(self.dateFechVenc.text())) if self.lote.guardar(self.sesion): QtGui.QMessageBox.information(self, 'Info', 'El Lote fue dado de alta.', 'Aceptar') else: QtGui.QMessageBox.critical(self, 'Error', 'El Lote ya existe.', 'Aceptar') loteProducto = LoteProductoModel(self.lote.getCodigo(), str(self.lineCodigo_Barra.text()), int(self.spinCantidad.value())) loteProducto.guardar(self.sesion) self.actualizar() self.objectCreated.emit() else: QtGui.QMessageBox.critical(self, 'Error', 'El Producto ya existe.', 'Aceptar') else: QtGui.QMessageBox.critical(self, 'Error', 'El Producto no puedo asociarse a un lote ' 'asociado a otro tipo de producto (distinto ' 'medicamento).', 'Aceptar') else: QtGui.QMessageBox.critical(self, 'Error', 'El Lote ya fue asignado a dos productos.', 'Aceptar') else: QtGui.QMessageBox.critical(self, 'Error', 'Ya existe un Producto con dicha Presentación ' 'y Medicamento.', 'Aceptar') else: QtGui.QMessageBox.warning(self, 'Atención', 'Hay datos obligatorios que no fueron completados.', 'Aceptar')
def crear(self): """ Da de alta un producto nuevo y lo almacena en la base de datos. :return: """ itemActualMed = self.tablaMedicamento.currentItem() if itemActualMed == None: self.showMsjEstado( "No se ha seleccionado ningun Medicamento de la tabla") else: row = itemActualMed.row() medicamento = str(self.tablaMedicamento.item(row, 0).text()) itemActualPres = self.tablaPresentacion.currentItem() if itemActualPres == None: self.showMsjEstado( "No se ha seleccionado ninguna Presentación de la tabla") else: row = itemActualPres.row() presentacion = str(self.tablaPresentacion.item(row, 0).text()) if ValidarDatos.validarCamposVacios(self.camposRequeridos): if self.cantLoteProd: producto = ProductoModel( str(self.lineCodigo_Barra.text()), medicamento, presentacion, str(self.lineImporte.text())) if producto.guardar(self.sesion): self.showMsjEstado("El Producto fue dado de alta.") if self.lote == None: self.lote = LoteModel( str(self.lineCod_Lote.text()), str(self.dateFechVenc.text())) if self.lote.guardar(self.sesion): self.showMsjEstado( "El Lote fue dado de alta.") else: self.showMsjEstado("El Lote ya existe.") loteProducto = LoteProductoModel( self.lote.getCodigo(), str(self.lineCodigo_Barra.text()), int(self.spinCantidad.value())) if loteProducto.guardar(self.sesion): self.showMsjEstado( "Lote/Producto fue dado de alta.") else: self.showMsjEstado("Lote/Producto ya existe.") self.actualizar() self.objectCreated.emit() else: self.showMsjEstado("El Producto ya existe.") else: self.showMsjEstado( "El Lote ya fue asignado a dos productos.") else: self.showMsjEstado( "Hay datos obligatorios que no fueron completados.")
def fraccionar(self): """ Fracciona un producto. Da de alta y almacena un nuevo producto en la base de datos de acuerdo al producto seleccionado para fraccionar, o si ya existe actualiza la cantidad. :return: """ itemActual = self.tablaProducto.currentItem() if itemActual != None: if ValidarDatos.validarCamposVacios(self.camposRequeridos): if self.tablaFraccionable.rowCount() > 0: itemFracc = self.tablaFraccionable.currentItem() if itemFracc != None: row = itemActual.row() codigo_barra = str(self.tablaProducto.item(row, 0).text()) codigo_lote = str(self.tablaProducto.item(row, 3).text()) self.loteProducto = LoteProductoModel.buscarLoteProducto(self.sesion, codigo_barra, codigo_lote).first() if int(self.spinCantidad.value()) > int(self.loteProducto.getCantidad()): QtGui.QMessageBox.warning(self, 'Atención', 'La cantidad ingresada no puede ser mayor a la ' 'cantidad del Producto.', 'Aceptar') else: resto = int(self.loteProducto.getCantidad()) - int(self.spinCantidad.value()) self.loteProducto.setCantidad(resto) self.loteProducto.modificar(self.sesion) cantidadFracciones = self.cantidadFracciones(codigo_barra, int(self.spinCantidad.value())) row = itemFracc.row() codigo_barra = str(self.tablaFraccionable.item(row, 0).text()) self.loteProducto = LoteProductoModel.buscarLoteProducto(self.sesion, codigo_barra, codigo_lote).first() if self.loteProducto: suma = int(self.loteProducto.cantidad) + int(cantidadFracciones) self.loteProducto.setCantidad(suma) self.loteProducto.modificar(self.sesion) else: loteProducto = LoteProductoModel(codigo_lote, codigo_barra, int(cantidadFracciones)) if loteProducto.guardar(self.sesion): QtGui.QMessageBox.information(self, 'Info', 'Lote/Producto fue dado de alta.', 'Aceptar') else: QtGui.QMessageBox.critical(self, 'Error', 'Lote/Producto ya existe.', 'Aceptar') QtGui.QMessageBox.information(self, 'Info', 'La cantidad fue modificada.', 'Aceptar') self.actualizar() self.objectModified.emit() else: QtGui.QMessageBox.warning(self, 'Atención', 'No se ha seleccionado un Fraccionable de la tabla.', 'Aceptar') else: QtGui.QMessageBox.critical(self, 'Error', 'El Producto seleccionado no puede fraccionarse.', 'Aceptar') else: QtGui.QMessageBox.warning(self, 'Atención', 'Hay datos obligatorios que no fueron completados.', 'Aceptar') else: QtGui.QMessageBox.warning(self, 'Atención', 'No se ha seleccionado un Producto de la tabla.', 'Aceptar')
def fraccionar(self): """ Fracciona un producto. Da de alta y almacena un nuevo producto en la base de datos de acuerdo al producto seleccionado para fraccionar, o si ya existe actualiza la cantidad. :return: """ itemActual = self.tablaProducto.currentItem() if itemActual != None: if ValidarDatos.validarCamposVacios(self.camposRequeridos): if self.tablaFraccionable.rowCount() > 0: itemFracc = self.tablaFraccionable.currentItem() if itemFracc != None: row = itemActual.row() codigo_barra = str(self.tablaProducto.item(row, 0).text()) codigo_lote = str(self.tablaProducto.item(row, 3).text()) self.loteProducto = LoteProductoModel.buscarLoteProducto(self.sesion, codigo_barra, codigo_lote).first() if int(self.spinCantidad.value()) > int(self.loteProducto.getCantidad()): self.showMsjEstado("La cantidad ingresada no puede ser mayor a la " "cantidad del Producto.") else: resto = int(self.loteProducto.getCantidad()) - int(self.spinCantidad.value()) self.loteProducto.setCantidad(resto) self.loteProducto.modificar(self.sesion) cantidadFracciones = self.cantidadFracciones(codigo_barra, int(self.spinCantidad.value())) row = itemFracc.row() codigo_barra = str(self.tablaFraccionable.item(row, 0).text()) self.loteProducto = LoteProductoModel.buscarLoteProducto(self.sesion, codigo_barra, codigo_lote).first() if self.loteProducto: suma = int(self.loteProducto.cantidad) + int(cantidadFracciones) self.loteProducto.setCantidad(suma) self.loteProducto.modificar(self.sesion) else: loteProducto = LoteProductoModel(codigo_lote, codigo_barra, int(cantidadFracciones)) if loteProducto.guardar(self.sesion): self.showMsjEstado("Lote/Producto fue dado de alta.") else: self.showMsjEstado("Lote/Producto ya existe.") self.showMsjEstado("La cantidad fue modificada") self.actualizar() else: self.showMsjEstado("No se ha seleccionado un Fraccionable de la tabla.") else: self.showMsjEstado("El Producto seleccionado no puede fraccionarse.") else: self.showMsjEstado("Hay datos obligatorios que no fueron completados.") else: self.showMsjEstado("No se ha seleccionado un Producto de la tabla")
def ajuste(self): """ Actualiza la cantidad del producto seleccionado para realizar el ajuste negativo de stock. :return: """ itemActual = self.tablaLoteProducto.currentItem() if itemActual != None: if ValidarDatos.validarCamposVacios(self.camposRequeridos): row = itemActual.row() codigo_barra = str(self.tablaLoteProducto.item(row, 0).text()) codigo_lote = str(self.tablaLoteProducto.item(row, 3).text()) self.loteProducto = LoteProductoModel.buscarLoteProducto( self.sesion, codigo_barra, codigo_lote).first() resto = int(self.loteProducto.getCantidad()) - int( self.spinCantidad.value()) if resto < 0: self.showMsjEstado( "La cantidad ingresada no puede ser mayor a la cantidad del Producto" ) else: self.loteProducto.setCantidad(resto) self.loteProducto.modificar(self.sesion) self.showMsjEstado("La cantidad fue modificada") self.actualizar() else: self.showMsjEstado( "Hay datos obligatorios que no fueron completados.") else: self.showMsjEstado( "No se ha seleccionado un Lote/Producto de la tabla")
def buscarLote(self): """ Busca y carga en la tabla los datos de un lote para un código ingresado. :return: """ self.lote = LoteModel.buscar(LoteModel.codigo, self.sesion, str(self.lineCod_Lote.text())).first() if self.lote != None: loteProducto = LoteProductoModel.buscar( LoteProductoModel.id_lote, self.sesion, str(self.lineCod_Lote.text())).all() if loteProducto.__len__() < 2: self.cantLoteProd = True else: self.cantLoteProd = False self.dateFechVenc.setEnabled(False) formato = "%Y-%m-%d" fechaVenc = datetime.strptime(str(self.lote.fecha_vencimiento), formato) formato = "%d/%m/%y" f = fechaVenc.strftime(formato) formato = "dd/MM/yy" fecha = QtCore.QDate.fromString(str(f), formato) self.dateFechVenc.setDate(fecha) else: self.cantLoteProd = True self.setFecha() self.dateFechVenc.setEnabled(True)
def buscarLote(self): """ Busca y carga en la tabla los datos de un lote para un código ingresado. :return: """ self.lote = LoteModel.buscar(LoteModel.codigo, self.sesion, str(self.lineCod_Lote.text())).first() if self.lote != None: loteProducto = LoteProductoModel.buscar(LoteProductoModel.id_lote, self.sesion, str(self.lineCod_Lote.text())).all() if loteProducto.__len__() < 2: self.cantLoteProd = True else: self.cantLoteProd = False self.dateFechVenc.setEnabled(False) formato = "%Y-%m-%d" fechaVenc = datetime.strptime(str(self.lote.fecha_vencimiento), formato) formato = "%d/%m/%y" f = fechaVenc.strftime(formato) formato = "dd/MM/yy" fecha = QtCore.QDate.fromString(str(f), formato) self.dateFechVenc.setDate(fecha) else: self.cantLoteProd = True self.setFecha() self.dateFechVenc.setEnabled(True)
def ajuste(self): """ Actualiza la cantidad del producto seleccionado para realizar el ajuste negativo de stock. :return: """ itemActual = self.tablaLoteProducto.currentItem() if itemActual != None: if ValidarDatos.validarCamposVacios(self.camposRequeridos): row = itemActual.row() codigo_barra = str(self.tablaLoteProducto.item(row, 0).text()) codigo_lote = str(self.tablaLoteProducto.item(row, 3).text()) self.loteProducto = LoteProductoModel.buscarLoteProducto(self.sesion, codigo_barra, codigo_lote).first() resto = int(self.loteProducto.getCantidad()) - int(self.spinCantidad.value()) if resto < 0: self.showMsjEstado("La cantidad ingresada no puede ser mayor a la cantidad del Producto") else: self.loteProducto.setCantidad(resto) self.loteProducto.modificar(self.sesion) self.showMsjEstado("La cantidad fue modificada") self.actualizar() else: self.showMsjEstado("Hay datos obligatorios que no fueron completados.") else: self.showMsjEstado("No se ha seleccionado un Lote/Producto de la tabla")
def ajuste(self): """ Actualiza la cantidad del producto seleccionado para realizar el ajuste negativo de stock. :return: """ itemActual = self.tablaLoteProducto.currentItem() if itemActual != None: if ValidarDatos.validarCamposVacios(self.camposRequeridos): row = itemActual.row() codigo_barra = str(self.tablaLoteProducto.item(row, 0).text()) codigo_lote = str(self.tablaLoteProducto.item(row, 3).text()) self.loteProducto = LoteProductoModel.buscarLoteProducto(self.sesion, codigo_barra, codigo_lote).first() resto = int(self.loteProducto.getCantidad()) - int(self.spinCantidad.value()) if resto < 0: QtGui.QMessageBox.critical(self, 'Error', 'La cantidad ingresada no puede ser mayor ' 'a la cantidad del Producto.', 'Aceptar') else: self.loteProducto.setCantidad(resto) self.loteProducto.modificar(self.sesion) QtGui.QMessageBox.information(self, 'Info', 'La cantidad fue modificada.', 'Aceptar') self.objectModified.emit() self.actualizar() else: QtGui.QMessageBox.warning(self, 'Atención', 'Hay datos obligatorios que no fueron completados.', 'Aceptar') else: QtGui.QMessageBox.warning(self, 'Atención', 'No se ha seleccionado un Lote/Producto de la tabla.', 'Aceptar')
def crear(self): """ Da de alta un producto nuevo y lo almacena en la base de datos. :return: """ itemActualMed = self.tablaMedicamento.currentItem() if itemActualMed == None: self.showMsjEstado("No se ha seleccionado ningun Medicamento de la tabla") else: row = itemActualMed.row() medicamento = str(self.tablaMedicamento.item(row, 0).text()) itemActualPres = self.tablaPresentacion.currentItem() if itemActualPres == None: self.showMsjEstado("No se ha seleccionado ninguna Presentación de la tabla") else: row = itemActualPres.row() presentacion = str(self.tablaPresentacion.item(row, 0).text()) if ValidarDatos.validarCamposVacios(self.camposRequeridos): if self.cantLoteProd: producto = ProductoModel(str(self.lineCodigo_Barra.text()), medicamento, presentacion, str(self.lineImporte.text())) if producto.guardar(self.sesion): self.showMsjEstado("El Producto fue dado de alta.") if self.lote == None: self.lote = LoteModel(str(self.lineCod_Lote.text()), str(self.dateFechVenc.text())) if self.lote.guardar(self.sesion): self.showMsjEstado("El Lote fue dado de alta.") else: self.showMsjEstado("El Lote ya existe.") loteProducto = LoteProductoModel(self.lote.getCodigo(), str(self.lineCodigo_Barra.text()), int(self.spinCantidad.value())) if loteProducto.guardar(self.sesion): self.showMsjEstado("Lote/Producto fue dado de alta.") else: self.showMsjEstado("Lote/Producto ya existe.") self.actualizar() self.objectCreated.emit() else: self.showMsjEstado("El Producto ya existe.") else: self.showMsjEstado("El Lote ya fue asignado a dos productos.") else: self.showMsjEstado("Hay datos obligatorios que no fueron completados.")
def validarLote(self, producto): if self.lote != None: loteProd = LoteProductoModel.buscar(LoteProductoModel.id_lote, self.sesion, self.lote.getCodigo()).all() if loteProd.__len__() == 1: for lp in loteProd: prod = ProductoModel.buscar(ProductoModel.codigo_barra, self.sesion, lp.getIdProducto()).first() if prod.getIdMedicamento() != producto.getIdMedicamento(): return False return True
def cargarLoteProducto(self): """ Carga los datos de los productos y su/s lote/s en la tabla de la ventana. :return: """ self.cargarObjetos(self.tablaLoteProducto, LoteProductoModel.buscarTodosLoteProducto(self.sesion, ProductoModel, LoteModel).all(), ("codigo_barra", "id_medicamento", "id_presentacion", "codigo", "cantidad") )
def cargarProductos(self): """ Carga la tabla de los productos con los datos de todos los productos disponibles, junto con el lote al que pertenecen. :return: """ self.cargarObjetos(self.tablaProducto, LoteProductoModel.buscarTodosLoteProducto(self.sesion, ProductoModel, LoteModel).all(), ("codigo_barra", "id_medicamento", "id_presentacion", "codigo", "cantidad") )
def buscarPorProducto(self): """ Busca y carga en la tabla los datos de un producto y su/s lote/s para un código de barra ingresado. :return: """ self.limpiarTabla(self.tablaProducto) self.cargarObjetos(self.tablaProducto, LoteProductoModel.buscarLoteProductoPorProducto(self.sesion, ProductoModel, LoteModel, str(self.lineCod_Barra.text())).all(), ("codigo_barra", "id_medicamento", "id_presentacion", "codigo", "cantidad") )
def actualizarLoteProd(self, producto): """ Actualiza la cantidad de un producto para un lote determinado. :param producto: referencia del producto al cual se le actualiza la cantidad. :return: """ lote_producto = LoteProductoModel.buscar(LoteProductoModel.id_producto, self.sesion, producto).all() for lp in lote_producto: lp.setCantidad(0) lp.modificar(self.sesion)
def cargarLoteProducto(self): """ Carga los datos de los productos y su/s lote/s en la tabla de la ventana. :return: """ self.cargarObjetos( self.tablaLoteProducto, LoteProductoModel.buscarTodosLoteProducto(self.sesion, ProductoModel, LoteModel).all(), ("codigo_barra", "id_medicamento", "id_presentacion", "codigo", "cantidad"))
def cargarProductos(self): """ Carga la tabla de los productos con los datos de todos los productos disponibles, junto con el lote al que pertenecen. :return: """ self.cargarObjetos( self.tablaProducto, LoteProductoModel.buscarTodosLoteProducto(self.sesion, ProductoModel, LoteModel).all(), ("codigo_barra", "id_medicamento", "id_presentacion", "codigo", "cantidad"))
def buscarPorProducto(self): """ Busca y carga en la tabla los datos de un producto y su/s lote/s para un código de barra ingresado. :return: """ self.limpiarTabla(self.tablaProducto) self.cargarObjetos( self.tablaProducto, LoteProductoModel.buscarLoteProductoPorProducto( self.sesion, ProductoModel, LoteModel, str(self.lineCod_Barra.text())).all(), ("codigo_barra", "id_medicamento", "id_presentacion", "codigo", "cantidad"))
def crear(self): """ Da de alta un lote nuevo y lo almacena en la base de datos. :return: """ if self.producto == None: self.showMsjEstado("No se ha seleccionado ningun Producto de la tabla") else: if ValidarDatos.validarCamposVacios(self.camposRequeridos): lote = LoteModel(str(self.lineCodigo.text()), str(self.dateFechVenc.text())) if lote.guardar(self.sesion): self.showMsjEstado("El Lote fue dado de alta.") loteProducto = LoteProductoModel(lote.getCodigo(), self.producto, int(self.spinCantidad.value())) if loteProducto.guardar(self.sesion): self.showMsjEstado("Lote/Producto fue dado de alta.") else: self.showMsjEstado("Lote/Producto ya existe.") self.limpiarCampos() self.objectCreated.emit() else: QtGui.QMessageBox.critical(self, 'Error', 'El Lote ya existe.', 'Aceptar') else: self.showMsjEstado("Hay datos obligatorios que no fueron completados.")
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 cargarFraccionables(self): """ Carga la tabla de los productos (subproducto, fracciones del producto fraccionable), con los datos de todos los productos (subproducto, fraacciones del producto fraccionable). :return: """ #Recuperar la informacion de un item row = self.tablaProducto.currentItem().row() infoItem = [] for col in range(0, self.tablaProducto.columnCount()): infoItem.append(self.tablaProducto.item(row, col).text()) #Cargar la info del item en los lines self.lineCod_Barra.setText(infoItem[0]) self.limpiarTabla(self.tablaFraccionable) self.cargarObjetos(self.tablaFraccionable, LoteProductoModel.buscarFraccionable(self.sesion, ProductoModel, LoteModel, PresentacionModel, str(self.lineCod_Barra.text())).all(), ("codigo_barra", "id_medicamento", "id_presentacion", "codigo", "cantidad") )
def cargarFraccionables(self): """ Carga la tabla de los productos (subproducto, fracciones del producto fraccionable), con los datos de todos los productos (subproducto, fraacciones del producto fraccionable). :return: """ #Recuperar la informacion de un item row = self.tablaProducto.currentItem().row() infoItem = [] for col in range(0, self.tablaProducto.columnCount()): infoItem.append(self.tablaProducto.item(row, col).text()) #Cargar la info del item en los lines self.lineCod_Barra.setText(infoItem[0]) self.limpiarTabla(self.tablaFraccionable) self.cargarObjetos( self.tablaFraccionable, LoteProductoModel.buscarFraccionable( self.sesion, ProductoModel, LoteModel, PresentacionModel, str(self.lineCod_Barra.text())).all(), ("codigo_barra", "id_medicamento", "id_presentacion", "codigo", "cantidad"))
def Listar(self): """ Genera el listado correspondiente de acuerdo a la opción seleccionada. :return: """ self.listado = self.cbTipoListado.currentText() if (self.listado=="Productos en Stock"): if self.rbtnExcel.isChecked(): self.generarExcelProductos() else: lote_producto = LoteProducto.buscarTodos("id_lote", self.sesion).all() self.listarProductos(lote_producto) data = self.productosStock(lote_producto) self.diagramaBarras(data) pdfkit.from_file('reportes/listadoProductosStock.html', 'reportes/list.pdf') os.system('evince reportes/list.pdf &') elif (self.listado=="Ventas Realizadas"): fechaDesde = self.deFechaDesde.dateTime().toPyDateTime().date() fechaHasta = self.deFechaHasta.dateTime().toPyDateTime().date() if fechaDesde > fechaHasta: QtGui.QMessageBox.information(self,"Aviso","La fecha Desde es mayor a la fecha Hasta") else: if self.rbtnExcel.isChecked(): self.generarExcelVentas(fechaDesde, fechaHasta) else: self.listarVentas(fechaDesde, fechaHasta) 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() self.listarClientes(clientes) pdfkit.from_file('reportes/listadoClientes.html', 'reportes/list.pdf') os.system('evince reportes/list.pdf &')
def stock(self, cod_barra): lote_producto = LoteProductoModel.buscar(LoteProductoModel.id_producto, self.sesion, cod_barra).all() for lp in lote_producto: if (lp.getCantidad() > 0): return False return True
def fraccionar(self): """ Fracciona un producto. Da de alta y almacena un nuevo producto en la base de datos de acuerdo al producto seleccionado para fraccionar, o si ya existe actualiza la cantidad. :return: """ itemActual = self.tablaProducto.currentItem() if itemActual != None: if ValidarDatos.validarCamposVacios(self.camposRequeridos): if self.tablaFraccionable.rowCount() > 0: itemFracc = self.tablaFraccionable.currentItem() if itemFracc != None: row = itemActual.row() codigo_barra = str( self.tablaProducto.item(row, 0).text()) codigo_lote = str( self.tablaProducto.item(row, 3).text()) self.loteProducto = LoteProductoModel.buscarLoteProducto( self.sesion, codigo_barra, codigo_lote).first() if int(self.spinCantidad.value()) > int( self.loteProducto.getCantidad()): self.showMsjEstado( "La cantidad ingresada no puede ser mayor a la " "cantidad del Producto.") else: resto = int(self.loteProducto.getCantidad()) - int( self.spinCantidad.value()) self.loteProducto.setCantidad(resto) self.loteProducto.modificar(self.sesion) cantidadFracciones = self.cantidadFracciones( codigo_barra, int(self.spinCantidad.value())) row = itemFracc.row() codigo_barra = str( self.tablaFraccionable.item(row, 0).text()) self.loteProducto = LoteProductoModel.buscarLoteProducto( self.sesion, codigo_barra, codigo_lote).first() if self.loteProducto: suma = int(self.loteProducto.cantidad) + int( cantidadFracciones) self.loteProducto.setCantidad(suma) self.loteProducto.modificar(self.sesion) else: loteProducto = LoteProductoModel( codigo_lote, codigo_barra, int(cantidadFracciones)) if loteProducto.guardar(self.sesion): self.showMsjEstado( "Lote/Producto fue dado de alta.") else: self.showMsjEstado( "Lote/Producto ya existe.") self.showMsjEstado("La cantidad fue modificada") self.actualizar() else: self.showMsjEstado( "No se ha seleccionado un Fraccionable de la tabla." ) else: self.showMsjEstado( "El Producto seleccionado no puede fraccionarse.") else: self.showMsjEstado( "Hay datos obligatorios que no fueron completados.") else: self.showMsjEstado("No se ha seleccionado un Producto de la tabla")