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 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)