Пример #1
0
 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')
Пример #2
0
 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"))
Пример #3
0
 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.")
Пример #4
0
 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")
     )
Пример #5
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')
Пример #6
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.")
Пример #7
0
 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')
Пример #8
0
 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")
Пример #9
0
 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")
Пример #10
0
 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)
Пример #11
0
 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)
Пример #12
0
 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")
Пример #13
0
 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')
Пример #14
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.")
Пример #15
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
Пример #16
0
 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")
     )
Пример #17
0
 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")
     )
Пример #18
0
 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")
     )
Пример #19
0
 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)
Пример #20
0
 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)
Пример #21
0
 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"))
Пример #22
0
 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"))
Пример #23
0
 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"))
Пример #24
0
 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.")
Пример #25
0
    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 &')
Пример #26
0
 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")
     )
Пример #27
0
 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"))
Пример #28
0
 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 &')
Пример #29
0
 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
Пример #30
0
 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")