Esempio n. 1
0
    def calcular_costos(cls, id):
        """
        Recalcula los costos de un artículo, y su precio
        """
        #Obtiene el articulo
        art = cls.get_by_id(id)

        #Calcula el nuevo costo de Insumos
        nuevoCostoIns = 0
        for ins in art.insumos:
            nuevoCostoIns += DatosInsumo.get_costo_total(
                ins.idInsumo) * ins.cantidad

        #Si el nuevo costo de insumos es distinto al anterior
        if nuevoCostoIns != art.costoInsumos:
            art.costoTotal -= art.costoInsumos
            art.costoTotal += nuevoCostoIns
            art.costoInsumos = nuevoCostoIns

            #Se actualizan los costos de insumos y el total
            DatosArticulo.updateCostos(art.id, art.costoInsumos,
                                       art.costoTotal)

            #Y se actualiza el valor
            art.valor = art.costoTotal * (1 + art.margenGanancia)
            DatosValor.add(id,
                           datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                           art.valor)
    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
Esempio n. 3
0
 def delete(cls, id):
     """
     Elimina un artículo de la BD a partir de su id
     """
     try:
         DatosArticulo.delete(id)
     except Exception as e:
         raise custom_exceptions.ErrorDeNegocio(
             origen="negocio_articulo.delete()",
             msj=str(e),
             msj_adicional=
             "Error en la capa de Negocio eliminando un artículo de la base de Datos"
         )
    def update(cls,idIns,nombre,unidad,costoMateriales,costoProduccion,otrosCostos,color,mats):
        """
        Actualiza un insumo en la BD
        """
        try:
            materiales = cls.get_by_id(int(idIns)).materiales
            for m in mats:
                if m.idMaterial in [i.idMaterial for i in materiales]:
                    if m.cantidad == 0:
                        # delete
                        DatosCantMaterial.deleteComponente(m.idMaterial,idIns)
                        print("Delete mat: " + str(m.idMaterial))
                    elif m.cantidad != [i.cantidad for i in materiales if i.idMaterial == m.idMaterial ][0]:
                            # update
                            DatosCantMaterial.updateComponente(m.idMaterial,idIns,m.cantidad)
                            print("Update mat: " + str(m.idMaterial))
                elif m.cantidad > 0:
                        # add
                        DatosCantMaterial.addComponente(m.idMaterial,idIns,m.cantidad)
                        print("Add mat: " + str(m.idMaterial))




            costoTotal = float(costoMateriales)+float(costoProduccion)+float(otrosCostos)
            DatosInsumo.update(idIns,nombre,unidad,costoMateriales,costoProduccion,otrosCostos,costoTotal,color)

            arts_afectados = DatosArticulo.get_arts_afectados(idIns)
            for idArt in arts_afectados:
                print("corrigiendo valor de articulo: ",str(idArt))
                NegocioArticulo.calcular_costos(idArt)
            
        except Exception as e:
            raise(e)
    def add(cls, carrito, usuario, idPR, totalEP, totalARS):
        #verificaciones
        for art in carrito:
            NegocioArticulo.checkStock(art.idTipoArticulo, art.cantidad)
        NegocioUsuario.checkEP(usuario.id, totalEP)

        #Pedido
        puntoRetiro = DatosPuntoRetiro.get_by_id(idPR)
        fechaEnc = datetime.now()
        fechaRet = fechaEnc + timedelta(days=puntoRetiro.demoraFija)
        idPedido = DatosPedido.add(fechaEnc, fechaRet, totalEP, totalARS, idPR,
                                   usuario.id)

        #EcoPuntos
        nuevos_ep = NegocioUsuario.useEP(usuario.id, totalEP)

        #Nivel
        NegocioUsuario.update_nivel(usuario.id, nuevos_ep)

        #Articulos y Stock
        for art in carrito:
            NegocioArticulo.disminuirStock(art.idTipoArticulo, art.cantidad)
            mg = DatosArticulo.get_margen_ganancia(art.idTipoArticulo)
            DatosCantArticulo.addArticuloPedido(art.idTipoArticulo, idPedido,
                                                art.cantidad, mg)

        return idPedido
    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)
    def update_estado(cls, id, estado):
        try:
            DatosPedido.update_estado(id, estado)
            if estado == "cancelado":
                result = DatosPedido.get_one(id)
                pedido = result[0]
                id_usuario = result[1]

                #Devovler EPs a User
                NegocioUsuario.addEP(id_usuario, pedido.totalEP)

                #Devolver Stock al articulo
                for art in pedido.articulos:
                    DatosArticulo.addStock(art.idTipoArticulo, art.cantidad)

        except Exception as e:
            raise e
Esempio n. 8
0
 def checkStock(cls, idTA, cant):
     articulo = DatosArticulo.get_by_id(idTA)
     nueva_cant = articulo.stock - cant
     if nueva_cant < 0:
         raise custom_exceptions.ErrorDeNegocio(
             origen="negocio_articulo.disminuirStock()",
             msj="error-stock",
             msj_adicional="Stock insuficiente para realizar pedido")
Esempio n. 9
0
    def update(cls, idArt, nombre, unidad, ventaUsuario, costoInsumos,
               costoProduccion, otrosCostos, costoObtencionAlt, margen, valor,
               ins):
        """
        Actualiza un articulo en la BD
        """
        try:
            insumos = cls.get_by_id(int(idArt)).insumos
            for i in ins:
                if i.idInsumo in [j.idInsumo for j in insumos]:
                    if i.cantidad == 0:
                        # delete
                        DatosCantInsumo.deleteComponente(i.idInsumo, idArt)
                        print("Delete ins: " + str(i.idInsumo))
                    elif i.cantidad != [
                            j.cantidad
                            for j in insumos if j.idInsumo == i.idInsumo
                    ][0]:
                        # update
                        DatosCantInsumo.updateComponente(
                            i.idInsumo, idArt, i.cantidad)
                        print("Update ins: " + str(i.idInsumo))
                elif i.cantidad > 0:
                    # add
                    DatosCantInsumo.addComponente(i.idInsumo, idArt,
                                                  i.cantidad)
                    print("Add mat: " + str(i.idInsumo))

            costoTotal = float(costoInsumos) + float(costoProduccion) + float(
                otrosCostos)
            margen = float(margen) / 100
            DatosArticulo.update(idArt, nombre, unidad, ventaUsuario,
                                 costoInsumos, costoProduccion, otrosCostos,
                                 costoObtencionAlt, margen, costoTotal)
            valor_anterior = DatosValor.get_from_TAid(idArt)
            if valor_anterior[2] != float(valor):
                DatosValor.add(idArt,
                               datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                               valor)
        except Exception as e:
            raise (e)
Esempio n. 10
0
 def get_movimientos_stock(cls, id, stock):
     """
     Obtiene los movimientos de stock de un artículo durante el último año en base a su ID, recibiendo stock actual como parámetro.
     """
     try:
         return DatosArticulo.get_movimientos_stock(id, stock)[::-1]
     except Exception as e:
         raise custom_exceptions.ErrorDeNegocio(
             origen="negocio_articulo.get_movimientos_stock()",
             msj=str(e),
             msj_adicional=
             "Error en la capa de Negocio obteniendo los movimientos de stock de la base de Datos"
         )
Esempio n. 11
0
 def get_by_not_in_id_array(cls, ids):
     """
     Obtiene TiposArticulos de la BD en base a los que no estan en una lista de IDs
     """
     try:
         articulos = DatosArticulo.get_by_not_in_id_array(ids)
         return articulos
     except Exception as e:
         raise custom_exceptions.ErrorDeNegocio(
             origen="negocio_articulo.get_by_not_in_id_array()",
             msj=str(e),
             msj_adicional=
             "Error en la capa de Negocio obtieniendo tipos de articulo de la capa de Datos."
         )
Esempio n. 12
0
 def get_by_id(cls, id):
     """
     Obtiene un TipoArticulo de la BD segun su ID
     """
     try:
         articulo = DatosArticulo.get_by_id(id)
         return articulo
     except Exception as e:
         raise custom_exceptions.ErrorDeNegocio(
             origen="negocio_articulo.get_by_id()",
             msj=str(e),
             msj_adicional="Error en la capa de Negocio\
                                                      obtieniendo un tipo de articulo de \
                                                      la capa de Datos.")
Esempio n. 13
0
    def get_all(cls, noFilter=False):
        """
        Obtiene todas los tipos de articulo de la BD.
        """
        try:
            articulos = DatosArticulo.get_all(noFilter)
            return articulos

        except Exception as e:
            raise custom_exceptions.ErrorDeNegocio(
                origen="negocio_articulo.get_all()",
                msj=str(e),
                msj_adicional="Error en la capa de Negocio\
                                                         obtieniendo los tipos de articulo de \
                                                         la capa de Datos.")
Esempio n. 14
0
 def add(cls, nombre, unidad, ventaUsuario, costoInsumos, costoProduccion,
         otrosCostos, costoObtencionAlt, margen, valor, cants, desc):
     """
     Agrega un articulo a la BD
     """
     try:
         costoTotal = float(costoInsumos) + float(costoProduccion) + float(
             otrosCostos)
         margen = float(margen) / 100
         idArt = DatosArticulo.add(nombre, unidad, ventaUsuario,
                                   costoInsumos, costoProduccion,
                                   otrosCostos, costoObtencionAlt, margen,
                                   costoTotal, desc)
         DatosValor.add(idArt,
                        datetime.now().strftime('%Y-%m-%d %H:%M:%S'), valor)
         for c in cants:
             DatosCantInsumo.addComponente(c["idIns"], idArt, c["cantidad"])
         return idArt
     except Exception as e:
         raise (e)
Esempio n. 15
0
 def get_nombres_by_idIns(cls, idIns):
     try:
         return DatosArticulo.get_nombres_by_idIns(idIns)
     except Exception as e:
         raise e
Esempio n. 16
0
 def cant_vendidos_mes_actual(cls, aid):
     try:
         return DatosArticulo.cant_vendidos_mes_actual(aid)
     except Exception as e:
         raise e
Esempio n. 17
0
 def update_desc(cls, aid, desc):
     try:
         DatosArticulo.update_desc(aid, desc)
     except Exception as e:
         raise e
Esempio n. 18
0
 def update_img(cls, aid, img):
     try:
         DatosArticulo.update_img(aid, img)
     except Exception as e:
         raise e
Esempio n. 19
0
 def get_recommendations(cls, id_articulo, carrito):
     filtro = [id_articulo] + [i.idTipoArticulo for i in carrito]
     return DatosArticulo.get_by_not_in_id_array_user(filtro, 4)
Esempio n. 20
0
 def disminuirStock(cls, idTA, cant):
     nueva_cant = DatosArticulo.get_by_id(idTA).stock - cant
     DatosArticulo.updateStock(idTA, nueva_cant)