示例#1
0
 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')
示例#2
0
 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.")
示例#3
0
    def listarProductos(self, lote_producto):
        """
        Genera el html usado para generar el pdf final del listado de los productos en stock.
        :param lote_producto: arreglo que contiene todos los productos y sus diferentes lotes.
        :return:
        """
        archivo = open("PlantillasListados/productosStock.html", "r")
        contenido = archivo.read()
        archivo.close()

        body = ""
        i = 0

        for lp in lote_producto:
            if (lp.getCantidad() > 0):
                i += 1
                producto = Producto.buscar(Producto.codigo_barra, self.sesion, lp.getIdProducto()).first()
                nr_prod = str(i)
                id_lote = str(lp.getIdLote())
                desc = str(producto.getIdMedicamento()) + """ """ + str(producto.getIdPresentacion())
                cant = str(lp.getCantidad())
                cadena = """<tr>

                <td><strong>{producto}</strong></td>
                <td class="text-right">{lote}</td>
                <td><strong>{descripcion}</strong></td>
                <td class="text-right">{cantidad}</td>
                </tr>""".format(producto=nr_prod, lote=id_lote, descripcion=desc, cantidad=cant)
                body += cadena
        contenido_nuevo = contenido.format(contenido=body)

        archivo = open("reportes/listadoProductosStock.html", "w")
        archivo.write(contenido_nuevo)
        archivo.close()
示例#4
0
 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.")
示例#5
0
 def cargarProductos(self):
     """
     Carga la tabla de los productos con los datos de todos los productos disponibles.
     :return:
     """
     self.cargarObjetos(
         self.tablaProducto,
         ProductoModel.buscarTodos("codigo_barra", self.sesion).all(),
         ("codigo_barra", "id_medicamento", "id_presentacion", "importe"))
示例#6
0
 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
示例#7
0
 def cargarProductos(self):
     """
     Carga los datos de los productos en la tabla de la ventana.
     :return:
     """
     self.cargarObjetos(self.tablaProducto,
         ProductoModel.buscarTodos("codigo_barra", self.sesion).all(),
         ("codigo_barra", "id_medicamento", "id_presentacion", "importe")
     )
示例#8
0
 def cargar_productos(self):
     for n, obj in enumerate(ProductoModel.buscarTodos("codigo_barra",self.sesion).all()):
         self.tableProductos.insertRow(n)
         self.tableProductos.setItem(n, 0, QtGui.QTableWidgetItem(str(obj.codigo_barra)))
         self.tableProductos.setItem(n, 1, QtGui.QTableWidgetItem(str(obj.id_medicamento)))
         self.tableProductos.setItem(n, 2, QtGui.QTableWidgetItem(str(obj.id_presentacion)))
         self.tableProductos.setItem(n, 3, QtGui.QTableWidgetItem(obj.getNombreMonodroga(self.sesion)))
         self.tableProductos.setItem(n, 4, QtGui.QTableWidgetItem(str(obj.getCantidad(self.sesion))))
         self.tableProductos.setItem(n, 5, QtGui.QTableWidgetItem(str(obj.importe)))
示例#9
0
 def buscarProducto(self):
     """
     Busca y carga en la tabla los datos de un producto para un codigo de barra ingresado.
     :return:
     """
     self.limpiarTabla(self.tablaProducto)
     self.cargarObjetos(
         self.tablaProducto,
         ProductoModel.buscarAlta(ProductoModel.codigo_barra, self.sesion,
                                  str(self.lineCod_Barra.text())).all(),
         ("codigo_barra", "id_medicamento", "id_presentacion", "importe"))
示例#10
0
 def buscarProducto(self):
     """
     Busca y carga en la tabla los datos de un producto para un codigo de barra ingresado.
     :return:
     """
     self.limpiarTabla(self.tablaProducto)
     self.cargarObjetos(self.tablaProducto,
         ProductoModel.buscarAlta(ProductoModel.codigo_barra, self.sesion,
                                  str(self.lineCod_Barra.text())).all(),
         ("codigo_barra", "id_medicamento", "id_presentacion", "importe")
     )
示例#11
0
 def productosStock(self, lote_producto):
     """
     Devuelve un los datos de los productos y su/s lote/s de aquellos que tengan una cantidad mayor a 0 en stock.
     :param lote_producto: arreglo de todos los lotes/productos almacenados en la base de datos.
     :return: data
     """
     data = []
     for lp in lote_producto:
         if (lp.getCantidad() > 0):
             producto = Producto.buscar(Producto.codigo_barra, self.sesion, lp.getIdProducto()).first()
             descripcion = str(producto.getIdMedicamento()) + " " + str (producto.getIdPresentacion())
             data.append((descripcion, lp.getCantidad()))
     return data
示例#12
0
 def cantidadFracciones(self, codigo, cantidad):
     """
     Calcula y devuelve la cantidad del poducto (subproducto, fracciones del producto fraccionable),
     número de fracciones * cantidad a fraccionar.
     :param codigo: Código del producto a fraccionar.
     :param cantidad: Cantidad a fraccionar.
     :return: resultado
     """
     producto = ProductoModel.buscarAlta(ProductoModel.codigo_barra, self.sesion, codigo).first()
     presentacion = PresentacionModel.buscarAlta(PresentacionModel.tipo, self.sesion,
                                                 producto.id_presentacion).first()
     resultado = int(presentacion.getCantidadFracciones()) * cantidad
     return resultado
示例#13
0
 def cantidadFracciones(self, codigo, cantidad):
     """
     Calcula y devuelve la cantidad del poducto (subproducto, fracciones del producto fraccionable),
     número de fracciones * cantidad a fraccionar.
     :param codigo: Código del producto a fraccionar.
     :param cantidad: Cantidad a fraccionar.
     :return: resultado
     """
     producto = ProductoModel.buscarAlta(ProductoModel.codigo_barra,
                                         self.sesion, codigo).first()
     presentacion = PresentacionModel.buscarAlta(
         PresentacionModel.tipo, self.sesion,
         producto.id_presentacion).first()
     resultado = int(presentacion.getCantidadFracciones()) * cantidad
     return resultado
示例#14
0
    def cargar_productos(self):
        """
            Carga los productos que se encuentran en el
            sistema en la Tabla de Productos
        :return:
        """

        self.limpiarTabla(self.tableProductos)
        for n, obj in enumerate(ProductoModel.buscarTodos("codigo_barra",self.sesion).all()):
            self.tableProductos.insertRow(n)
            self.tableProductos.setItem(n, 0, QtGui.QTableWidgetItem(str(obj.codigo_barra)))
            self.tableProductos.setItem(n, 1, QtGui.QTableWidgetItem(str(obj.id_medicamento)))
            self.tableProductos.setItem(n, 2, QtGui.QTableWidgetItem(str(obj.id_presentacion)))
            self.tableProductos.setItem(n, 3, QtGui.QTableWidgetItem(obj.getNombreMonodroga(self.sesion)))
            self.tableProductos.setItem(n, 4, QtGui.QTableWidgetItem(str(obj.getCantidad(self.sesion))))
示例#15
0
 def cargar_productos(self):
     for n, obj in enumerate(
             ProductoModel.buscarTodos("codigo_barra", self.sesion).all()):
         self.tableProductos.insertRow(n)
         self.tableProductos.setItem(
             n, 0, QtGui.QTableWidgetItem(str(obj.codigo_barra)))
         self.tableProductos.setItem(
             n, 1, QtGui.QTableWidgetItem(str(obj.id_medicamento)))
         self.tableProductos.setItem(
             n, 2, QtGui.QTableWidgetItem(str(obj.id_presentacion)))
         self.tableProductos.setItem(
             n, 3,
             QtGui.QTableWidgetItem(obj.getNombreMonodroga(self.sesion)))
         self.tableProductos.setItem(
             n, 4,
             QtGui.QTableWidgetItem(str(obj.getCantidad(self.sesion))))
         self.tableProductos.setItem(
             n, 5, QtGui.QTableWidgetItem(str(obj.importe)))
示例#16
0
    def generarExcelProductos(self):
        """
            Crea el listado en Excel correspondiente al total de los
            productos en stock en la farmacia
        :return None:
        """
        data={}
        lotesProductos={}
        for producto in (ProductoModel.buscarTodos("codigo_barra",self.sesion).all()):
            nombreProducto = '%(medicamento)s %(presentacion)s' % \
                             {"medicamento":producto.id_medicamento,
                              "presentacion":producto.id_presentacion}
            data[nombreProducto.upper()]=producto.getCantidad(self.sesion)
            lotesProductos[nombreProducto]=producto.buscarLotes(self.sesion)

        documento=xlsxwriter.Workbook(Listar.path_excel_files + "/StockProductos.xlsx")
        hoja=documento.add_worksheet('General')
        bold = documento.add_format({'bold': 1,})
        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':'column'})
        productos=list(data.keys())
        cantidades=list(data.values())
        hoja.write('A1','Producto',bold)
        hoja.write('B1','Cantidad',bold)
        hoja.write_column('A2',productos)
        hoja.write_column('B2',cantidades)
        grafico.add_series({
                'categories':[hoja.name,1,0,len(productos),0],
                'values': [hoja.name,1,1,len(cantidades),1]
        })
        grafico.set_x_axis({
            'name':'Productos',
            'name-font':{'size':16,'bold':True},
            'num_font':{'italic':True},
        })
        hoja.insert_chart('E3', grafico)
        for producto in lotesProductos:
            self.generarHojaProducto(documento,producto,lotesProductos[producto])
        documento.close()

        QtGui.QMessageBox.information(self, "Listado" , "El listado ha sido generado con exito")
示例#17
0
 def modificar(self):
     """
     Modifica los datos del producto seleccionada.
     :return:
     """
     itemActual = self.tablaProducto.currentItem()
     if itemActual != None:
         if ValidarDatos.validarCamposVacios([self.lineImporte]):
             row = itemActual.row()
             codigo_barra = str(self.tablaProducto.item(row, 0).text())
             self.producto = ProductoModel.buscarAlta(ProductoModel.codigo_barra,
                                                      self.sesion, codigo_barra).first()
             self.producto.setImporte(str(self.lineImporte.text()))
             self.producto.modificar(self.sesion)
             self.showMsjEstado("El Producto fue modificado")
             self.objectModified.emit()
             self.actualizar()
         else:
             self.showMsjEstado("Hay datos obligatorios que no fueron completados.")
     else:
         self.showMsjEstado("No se ha seleccionado un Producto de la tabla")
示例#18
0
 def eliminar(self):
     """
     Da de baja el producto seleccionado.
     :return:
     """
     #TODO consultar si hay stock antes de dar de baja.
     itemActual = self.tablaProducto.currentItem()
     if itemActual == None:
         self.showMsjEstado("No se ha seleccionado ningun Producto de la tabla")
     else:
         row = itemActual.row()
         codigo_barra = str(self.tablaProducto.item(row, 0).text())
         if self.bajaValida(codigo_barra):
             self.producto = ProductoModel.buscarAlta(ProductoModel.codigo_barra,
                                                      self.sesion, codigo_barra).first()
             self.actualizarLoteProd(self.producto.getCodigoBarra())
             self.producto.borrar(self.sesion)
             self.showMsjEstado("El Producto ha sido dado de baja")
             self.tablaProducto.removeRow(row)
             self.objectDeleted.emit()
             self.actualizar()
示例#19
0
 def modificar(self):
     """
     Modifica los datos del producto seleccionada.
     :return:
     """
     itemActual = self.tablaProducto.currentItem()
     if itemActual != None:
         if ValidarDatos.validarCamposVacios([self.lineImporte]):
             row = itemActual.row()
             codigo_barra = str(self.tablaProducto.item(row, 0).text())
             self.producto = ProductoModel.buscarAlta(ProductoModel.codigo_barra,
                                                      self.sesion, codigo_barra).first()
             self.producto.setImporte(str(self.lineImporte.text()))
             self.producto.modificar(self.sesion)
             QtGui.QMessageBox.information(self, 'Info', 'El Producto fue modificado.', '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 Producto de la tabla.', 'Aceptar')
示例#20
0
 def eliminar(self):
     """
     Da de baja el producto seleccionado.
     :return:
     """
     #TODO consultar si hay stock antes de dar de baja.
     itemActual = self.tablaProducto.currentItem()
     if itemActual == None:
         self.showMsjEstado(
             "No se ha seleccionado ningun Producto de la tabla")
     else:
         row = itemActual.row()
         codigo_barra = str(self.tablaProducto.item(row, 0).text())
         if self.bajaValida(codigo_barra):
             self.producto = ProductoModel.buscarAlta(
                 ProductoModel.codigo_barra, self.sesion,
                 codigo_barra).first()
             self.actualizarLoteProd(self.producto.getCodigoBarra())
             self.producto.borrar(self.sesion)
             self.showMsjEstado("El Producto ha sido dado de baja")
             self.tablaProducto.removeRow(row)
             self.objectDeleted.emit()
             self.actualizar()
示例#21
0
 def modificar(self):
     """
     Modifica los datos del producto seleccionada.
     :return:
     """
     itemActual = self.tablaProducto.currentItem()
     if itemActual != None:
         if ValidarDatos.validarCamposVacios([self.lineImporte]):
             row = itemActual.row()
             codigo_barra = str(self.tablaProducto.item(row, 0).text())
             self.producto = ProductoModel.buscarAlta(
                 ProductoModel.codigo_barra, self.sesion,
                 codigo_barra).first()
             self.producto.setImporte(str(self.lineImporte.text()))
             self.producto.modificar(self.sesion)
             self.showMsjEstado("El Producto fue modificado")
             self.objectModified.emit()
             self.actualizar()
         else:
             self.showMsjEstado(
                 "Hay datos obligatorios que no fueron completados.")
     else:
         self.showMsjEstado("No se ha seleccionado un Producto de la tabla")
示例#22
0
 def htmlProductosStock(self, lote_producto):
     """
     Genera el html usado para generar el pdf final del listado de los productos en stock.
     :param lote_producto: arreglo que contiene todos los productos y sus diferentes lotes.
     :return: hmtl
     """
     #TODO esta bien q se de de baja un producto para el q hay stock???
     # hay q listar los dados de baja?? esto depende de la resp a la preg anterior.
     i = 0
     html = """<html>
         <head>
         </head>
         <body>
         <div id="contenedor">
           <header id="encabezado">
             <h1 align="center">Listado Productos en Stock</h1>
           </header>
           <div id="items">
             <table border width="100%">
                 <th bgcolor="#38B0DE">Producto</th>
                 <th bgcolor="#38B0DE">Nro Lote</th>
                 <th bgcolor="#38B0DE">Descripción</th>
                 <th bgcolor="#38B0DE">Cantidad</th>"""
     for lp in lote_producto:
         if (lp.getCantidad() > 0):
             i += 1
             producto = Producto.buscar(Producto.codigo_barra, self.sesion, lp.getIdProducto()).first()
             html += """<tr><td width="10%">""" + str(i)
             html += """</td><td width="10%">""" + str(lp.getIdLote())
             html += """</td><td width="70%">""" + str(producto.getIdMedicamento()) \
                     + """ """ + str(producto.getIdPresentacion())
             html += """</td><td width="10%">""" + str(lp.getCantidad())
             html += """</td></tr>"""
     html += """</table></div></div></body></html>"""
     html += """<img src="diagBarra.png">"""
     return html
示例#23
0
 def eliminar(self):
     """
     Da de baja el producto seleccionado.
     :return:
     """
     itemActual = self.tablaProducto.currentItem()
     if itemActual == None:
         QtGui.QMessageBox.warning(self, 'Atención', 'No se ha seleccionado ningun Producto de la tabla.', 'Aceptar')
     else:
         row = itemActual.row()
         codigo_barra = str(self.tablaProducto.item(row, 0).text())
         if (self.stock(codigo_barra)):
             if self.bajaValida(codigo_barra):
                 self.producto = ProductoModel.buscarAlta(ProductoModel.codigo_barra,
                                                          self.sesion, codigo_barra).first()
                 self.actualizarLoteProd(self.producto.getCodigoBarra())
                 self.producto.borrar(self.sesion)
                 QtGui.QMessageBox.information(self, 'Info', 'El Producto ha sido dado de baja.', 'Aceptar')
                 self.tablaProducto.removeRow(row)
                 self.objectDeleted.emit()
                 self.actualizar()
         else:
             QtGui.QMessageBox.critical(self, 'Error', 'Existe stock para el Producto seleccionado. '
                                                       'No puede ser dado de baja', 'Aceptar')
示例#24
0
 def productoExiste(self, presentacion, medicamento, cod_barra):
     producto = ProductoModel.buscarProductoPresMed(self.sesion, ProductoModel, presentacion, medicamento).all()
     for prod in producto:
         if prod[0] != cod_barra:
             return True
     return False