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
def get_all(cls, noFilter): """ Obtiene todos los articulos de la BD. """ try: cls.abrir_conexion() if noFilter == False: sql = ("SELECT idTipoArticulo, \ nombre, \ cProduccion, \ cInsumos, \ cTotal, \ margenGanancia, \ unidadMedida, \ cObtencionAlt, \ stock, \ otrosCostos, \ img, \ vUsuario, \ descripcion \ FROM tiposArticulo WHERE estado!=\"eliminado\";") else: sql = ("SELECT idTipoArticulo, \ nombre, \ cProduccion, \ cInsumos, \ cTotal, \ margenGanancia, \ unidadMedida, \ cObtencionAlt, \ stock, \ otrosCostos, \ img, \ vUsuario, \ descripcion \ FROM tiposArticulo;") cls.cursor.execute(sql) articulos_ = cls.cursor.fetchall() articulos = [] for a in articulos_: insumos = DatosCantInsumo.get_from_TAid(a[0]) valor = DatosValor.get_from_TAid(a[0])[2] articulo_ = TipoArticulo(a[0], a[1], insumos, a[2], a[3], a[4], valor, a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12]) articulos.append(articulo_) return articulos except Exception as e: raise custom_exceptions.ErrorDeConexion( origen="data_articulo.get_all()", msj=str(e), msj_adicional="Error obtieniendo los articulos desde la BD.") finally: cls.cerrar_conexion()
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)
def get_by_not_in_id_array_user(cls, ids, limit=0): """ Obtiene todos los articulos de la BD que no están en la lista de ids. """ try: cls.abrir_conexion() sql = ("SELECT idTipoArticulo, \ nombre, \ cProduccion, \ cInsumos, \ cTotal, \ margenGanancia, \ unidadMedida, \ cObtencionAlt, \ stock, \ otrosCostos, \ img, \ vUsuario, \ descripcion \ FROM tiposArticulo WHERE estado!=\"eliminado\" AND vUsuario=1 and stock>0" ) if ids != []: sql += " AND idTipoArticulo!={}" for _ in ids[1:]: sql += " AND idTipoArticulo!={}" sql += " ORDER BY RAND()" if limit > 0: sql += " LIMIT {}".format(limit) sql += ";" sql = sql.format(*ids) cls.cursor.execute(sql) articulos_ = cls.cursor.fetchall() articulos = [] for a in articulos_: insumos = DatosCantInsumo.get_from_TAid(a[0]) valor = DatosValor.get_from_TAid(a[0])[2] articulo_ = TipoArticulo(a[0], a[1], insumos, a[2], a[3], a[4], valor, a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12]) articulos.append(articulo_) return articulos except Exception as e: raise custom_exceptions.ErrorDeConexion( origen="data_articulo.get_by_not_in_id_array()", msj=str(e), msj_adicional="Error obtieniendo articulos desde la BD.") finally: cls.cerrar_conexion()
def get_by_id(cls, id, noClose=False): """Obtiene un articulo de la BD en base a un ID. Devuelve False si no encuentra ninguno. """ try: cls.abrir_conexion() sql = ("SELECT idTipoArticulo, \ nombre, \ cProduccion, \ cInsumos, \ cTotal, \ margenGanancia, \ unidadMedida, \ cObtencionAlt, \ stock, \ otrosCostos, \ img, \ vUsuario, \ descripcion \ FROM tiposArticulo WHERE idTipoArticulo = {} and estado!=\"eliminado\";" ).format(id) cls.cursor.execute(sql) a = cls.cursor.fetchone() if a == None: return False else: insumos = DatosCantInsumo.get_from_TAid(a[0]) valor = DatosValor.get_from_TAid(a[0])[2] articulo = TipoArticulo(a[0], a[1], insumos, a[2], a[3], a[4], valor, a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12]) return articulo except Exception as e: raise custom_exceptions.ErrorDeConexion( origen="data_articulo.get_by_id()", msj=str(e), msj_adicional= "Error obteniendo un articulo en base al id recibido como parámetro." ) finally: if not (noClose): cls.cerrar_conexion()
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)