def confirmar_produccion(cls, id, cant, kind):
        try:
            fecha = datetime.now()
            idNuevaProd = DatosProduccion.add(id, fecha, cant, kind)
            if kind == "art":
                #sumar stock art
                DatosArticulo.addStock(id, cant)

                #restar stock ins
                insumos = DatosCantInsumo.get_from_TAid(id)
                for i in insumos:
                    DatosCantInsumo.addComponenteUtilizado(
                        i.idInsumo, idNuevaProd, i.cantidad * cant)
                    DatosInsumo.removeStock(i.idInsumo, i.cantidad * cant)

            elif kind == "ins":
                #sumar stock ins
                DatosInsumo.addStock(id, cant)

                #restar stock mat
                materiales = DatosCantMaterial.get_from_Insid(id)
                for m in materiales:
                    DatosCantMaterial.addComponenteUtilizado(
                        m.idMaterial, idNuevaProd, m.cantidad * cant)
                    DatosMaterial.removeStock(m.idMaterial, m.cantidad * cant)
        except Exception as e:
            raise e
示例#2
0
 def add_one(cls, idMaterial, cant, concepto, fecha):
     try:
         format_str = '%Y-%m-%d'  # Formato de la fecha
         fecha = datetime.strptime(fecha, format_str)
         if DatosEntradaExterna.add_one(idMaterial, cant, concepto, fecha):
             DatosMaterial.addStock(idMaterial, float(cant))
     except Exception as e:
         raise e
示例#3
0
 def update_desc(cls, idMat, desc):
     """
     Actualiza la desc de un material en la BD
     """
     try:
         DatosMaterial.update_desc(idMat, desc)
     except Exception as e:
         raise (e)
 def alta(cls, id_mat,id_pd,cantidad,cant_ep):
     """
     Añade un nuevo depósito.
     """
     try:
         DatosMaterial.addStock(id_mat,cantidad)
         return DatosDeposito.add(int(id_mat),int(id_pd),float(cantidad),float(cant_ep))
     except Exception as e:
         raise e
示例#5
0
 def add(cls, nombre, unidad, costoRecoleccion, color, estado, desc):
     """
     Agrega un material a la BD
     """
     try:
         DatosMaterial.add(nombre, unidad, costoRecoleccion, color, estado,
                           desc)
     except Exception as e:
         raise (e)
示例#6
0
 def delete(cls, id):
     """
     Elimina un material de la BD a partir de su id
     """
     try:
         DatosMaterial.delete(id)
         DatosCantMaterial.deshabilitar(id, True)
     except Exception as e:
         raise custom_exceptions.ErrorDeNegocio(
             origen="negocio_material.delete()",
             msj=str(e),
             msj_adicional=
             "Error en la capa de Negocio eliminando un material de la base de Datos"
         )
示例#7
0
    def update(cls, idMat, nombre, unidad, costoRecoleccion, color, estado):
        """
        Actualiza un material en la BD
        """
        try:
            DatosMaterial.update(idMat, nombre, unidad, costoRecoleccion,
                                 color, estado)

            ins_afectados = DatosInsumo.get_ins_afectados(idMat)
            for idIns in ins_afectados:
                print("corrigiendo valor de insumo: ", str(idIns))
                NegocioInsumo.calcular_costos(idIns)

        except Exception as e:
            raise (e)
 def get_materialesPd_by_id(cls, idPunto, json_return=True):
     """
     Obtiene los materiales que acepta un punto de depósito en base al ID que recibe como parámetro.
     """
     #Conexión con el motor de BD.
     try:
         materiales = DatosMaterial.get_all_byIdPuntoDep(idPunto)
         materiales_ = []
         if json_return == False:
             return materiales
         else:
             for material in materiales:
                 materiales_.append({
                     "id": material.id,
                     "nombre": material.nombre,
                     "unidadMedida": material.unidadMedida,
                     "color": material.color,
                     "estado": material.estado
                 })
             return materiales_
     except custom_exceptions.ErrorDeConexion as e:
         raise e
     except Exception as e:
         raise custom_exceptions.ErrorDeNegocio(
             origen="negocio.get_materialesPd_by_id()",
             msj=str(e),
             msj_adicional=
             "Error en la capa de Negocio obtieniendo los materiales que acepta un PD de la capa de Datos."
         )
    def get_by_id(cls, id):
        """
        Obtiene un Punto de Depósito de la BD segun su ID.
        """
        try:
            cls.abrir_conexion()
            sql = (
                "select * from puntosDeposito where estadoEliminacion = 'disponible' AND idPunto={} order by nombre ASC"
            ).format(id)
            cls.cursor.execute(sql)
            punto = cls.cursor.fetchall()[0]
            #Se instancia sin los horarios ya que no se muestran, para no generar tráfico de datos innecesario.
            direccion = DatosDireccion.get_one_id(punto[4])
            materiales_ = DatosMaterial.get_all_byIdPuntoDep(punto[0], True)
            materiales = []
            for mat in materiales_:
                materiales.append(mat.id)
            pd = PuntoDeposito(punto[0], direccion, punto[1], punto[2],
                               materiales, None)
            return pd

        except Exception as e:
            raise custom_exceptions.ErrorDeConexion(
                origen="data.get_by_id()",
                msj=str(e),
                msj_adicional=
                "Error obteniendo un Punto de Depósito desde la BD.")
        finally:
            cls.cerrar_conexion()
    def get_all_sin_filtro(cls, noClose=False):
        """
        Obtiene todos los Puntos de Depósito de la BD.
        """
        try:
            cls.abrir_conexion()
            sql = ("select * from puntosDeposito order by nombre ASC")
            cls.cursor.execute(sql)
            puntosDeposito = cls.cursor.fetchall()
            puntosDeposito_ = []
            for punto in puntosDeposito:
                #Se instancia sin los horarios ya que no se muestran, para no generar tráfico de datos innecesario.
                if punto[3] == 'eliminado':
                    direccion = None
                else:
                    direccion = DatosDireccion.get_one_id(punto[4])
                materiales_ = DatosMaterial.get_all_byIdPuntoDep(
                    punto[0], True)
                materiales = []
                for mat in materiales_:
                    materiales.append(mat.id)
                puntosDeposito_.append(
                    PuntoDeposito(punto[0], direccion, punto[1], punto[2],
                                  materiales, None))
            return puntosDeposito_

        except Exception as e:
            raise custom_exceptions.ErrorDeConexion(
                origen="data.get_all()",
                msj=str(e),
                msj_adicional="Error otodos los Puntos de Depósito desde la BD."
            )
        finally:
            if not (noClose):
                cls.cerrar_conexion()
    def calcular_costos(cls,id):
        """
        Recalcula los costos de un insumo
        """
        #Obtiene el insumo
        ins = cls.get_by_id(id)

        #Calcula el nuevo costo de Materiales
        nuevoCostoMat = 0
        for mat in ins.materiales:
            nuevoCostoMat += DatosMaterial.get_costo_rec(mat.idMaterial)*mat.cantidad
        
        #Si el nuevo costo de insumos es distinto al anterior
        if nuevoCostoMat != ins.costoMateriales:
            ins.costoTotal -= ins.costoMateriales
            ins.costoTotal += nuevoCostoMat
            ins.costoMateriales = nuevoCostoMat

            #Se actualizan los costos de insumos y el total
            DatosInsumo.updateCostos(ins.id,ins.costoMateriales,ins.costoTotal)

            #Y se actualizan los arts afectados
            arts_afectados = DatosArticulo.get_arts_afectados(ins.id)
            for idArt in arts_afectados:
                print("corrigiendo valor de articulo: ",str(idArt))
                NegocioArticulo.calcular_costos(idArt)
示例#12
0
 def get_by_id(cls, id):
     """
     Obtiene un Material de la BD segun su ID
     """
     try:
         material = DatosMaterial.get_by_id(id)
         return material
     except Exception as e:
         raise e
 def get_info_cancelar(cls, id):
     errores = {"EP":-1,"Stock":0}
     dep = DatosDeposito.get_by_id(id)
     if dep.isAcreditado():
         errores["EP"] = 0
         user_id = cls.get_user_id(id)
         user = NegocioUsuario.get_by_id(user_id)
         if user.totalEcopuntos < dep.ecoPuntos.cantidad:
             errores["EP"] = dep.ecoPuntos.cantidad-user.totalEcopuntos 
     
     material = DatosMaterial.get_by_id(dep.material.idMaterial)
     if material.stock < dep.material.cantidad:
         errores["Stock"] = dep.material.cantidad-material.stock
     return errores
示例#14
0
    def get_movimientos_stock(cls, id, stock):
        """
        Obtiene los movimientos de stock de un material durante el último año en base a su ID, recibiendo stock actual como parámetro.
        """
        try:

            return DatosMaterial.get_movimientos_stock(id, stock)[::-1]
        except Exception as e:
            raise custom_exceptions.ErrorDeNegocio(
                origen="negocio_material.get_movimientos_stock()",
                msj=str(e),
                msj_adicional=
                "Error en la capa de Negocio obteniendo los movimientos de stock de la base de Datos"
            )
 def cancelar(cls,id):
     """
     Cancela un depósito. Si el depósito ha sido acreditado, los EP se le restan al
     usuario. Si el usuario no tiene suficientes EP para restar, se lo deja en 0 EP.
     Se descuenta, asimismo, el stock de materiales generado por el deposito. Si no
     hay suficiente stock para restar, se genera una entrada correspondiente al
     stock faltante
     """
     try:
         dep = DatosDeposito.get_by_id(id)
         DatosDeposito.update_estado(id,"cancelado")
         if dep.isAcreditado():
             user_id = cls.get_user_id(id)
             NegocioUsuario.descontarEPDeposito(user_id,dep.ecoPuntos.cantidad)
         
         material = DatosMaterial.get_by_id(dep.material.idMaterial)
         if material.stock >= dep.material.cantidad:
             DatosMaterial.updateStock(material.id,material.stock - dep.material.cantidad)
         else:
             DatosMaterial.updateStock(material.id,0)
             restante = dep.material.cantidad-material.stock
             DatosEntradaExterna.add_one(material.id,restante,"Compensación por cancelación de depósito número "+str(id)+".",datetime.now())         
     except Exception as e:
         raise e
示例#16
0
    def get_all(cls, noFilter=False):
        """
        Obtiene todos los materiales de la BD.
        """
        try:
            materiales = DatosMaterial.get_all(noFilter)
            return materiales

        except Exception as e:
            raise custom_exceptions.ErrorDeNegocio(
                origen="negocio_materiales.get_all()",
                msj=str(e),
                msj_adicional=
                "Error en la capa de Negocio obteniendo los materiales de la capa de Datos."
            )