def edit_int(cell, path, newtext, tv, numcol, clase, atributo): """ Cambia el texto del model[path][numcol] y del objeto relacionado que saca a partir del ID de la última columna del model. """ try: numero = utils.parse_numero(newtext) except (ValueError, TypeError): parent = tv.parent while parent != None: parent = parent.parent utils.dialogo_info(titulo = "ERROR EN NÚMERO", texto = "El texto «%s» no es un número entero válido." % (newtext), padre = parent) else: model = tv.get_model() id = model[path][-1] objeto = clase.get(id) setattr(objeto, atributo, numero) objeto.syncUpdate() model[path][numcol] = getattr(objeto, atributo)
def set_loteCem(self, w): comprobar_y_preguntar_si_guardar(self) codlote = utils.dialogo_entrada(titulo = 'Nº LOTE', texto = 'Introduzca número o código de lote de fibra ' 'de cemento:', padre = self.wids['ventana']) if codlote != None: numlote = utils.parse_numero(codlote) loteCems = pclases.LoteCem.select(pclases.OR( pclases.LoteCem.q.numlote == numlote, pclases.LoteCem.q.codigo.contains(codlote))) if loteCems.count() == 0: utils.dialogo_info(titulo = 'LOTE NO ENCONTRADO', texto = 'No se encontró ningún lote de fibra de cemento' ' %s.' % (codlote), padre = self.wids['ventana']) return elif loteCems.count() > 1: filas = [(l.id, l.numlote, l.codigo, l.tenacidad, l.elongacion, l.humedad, l.encogimiento) for l in loteCems] idloteCem = utils.dialogo_resultado(filas, titulo = 'SELECCIONE LOTE', cabeceras = ('ID', 'Número', 'Código', 'Tenacidad', 'Elongación', 'Humedad', 'Encogimiento'), padre = self.wids['ventana']) if idloteCem < 0: return loteCem = pclases.LoteCem.get(idloteCem) else: loteCem = loteCems[0] if len(loteCem.bigbags) == 0: utils.dialogo_info(titulo = 'LOTE VACÍO', texto = 'El lote de cemento no contiene bigbags, no ' 'puede\nrealizar pruebas sobre un lote vacío.', padre = self.wids['ventana']) self.loteCem = None return self.loteCem = loteCem self.actualizar_ventana()
def guardar(self, widget): """ Guarda el contenido de los entry y demás widgets de entrada de datos en el objeto y lo sincroniza con la BD. """ producto = self.objeto codigo = self.wids['e_codigo'].get_text() if len(codigo) < 12: utils.dialogo_info(titulo = "CÓDIGO DEMASIADO CORTO", texto = "El código debe tener 13 dígitos para ajustarse al formato EAN-13.\nSe va a completar con ceros.", padre = self.wids['ventana']) codigo += "0" * (12 - len(codigo)) # Completo hasta 12 para que después se le haga la suma de control. if len(codigo) == 12: codigo = codigo + self.calcular_digitoc(codigo) if len(codigo) > 13: utils.dialogo_info(titulo = "CÓDIGO INCORRECTO", texto = "Código EAN-13 incorrecto. Debe tener exactamente 13 dígitos.\nPuede introducir 12 y dejar que se calcule atomáticamente el dígito de control, si le es más cómodo.\n\nA continuación se va a recortar el código a 13 dígitos y se intentará comprobar la suma de control.", padre = self.wids['ventana']) codigo = codigo[:13] if len(codigo) == 13: digitocontrol = self.calcular_digitoc(codigo[:12]) if codigo[12] != digitocontrol: utils.dialogo_info(titulo = "FALLÓ SUMA DE COMPROBACIÓN", texto = "El dígito de control no es correct" "o. Se corregirá automáticamente.", padre = self.wids['ventana']) codigo = codigo[:12] + digitocontrol descripcion = self.wids['e_descripcion'].get_text() linea = pclases.LineaDeProduccion.select( pclases.LineaDeProduccion.q.nombre.contains('fibra'))[0] lineaembol = pclases.LineaDeProduccion.select( pclases.LineaDeProduccion.q.nombre.contains('bolsa'))[0] nombre = self.wids['e_nombre'].get_text() arancel = self.wids['e_arancel'].get_text() try: precio = float(self.wids['e_precio'].get_text().replace(',','.')) except ValueError: precio = producto.preciopordefecto try: minimo = float(self.wids['e_minimo'].get_text()) except ValueError: minimo = producto.minimo try: dtex = float(self.wids['e_dtex'].get_text()) except ValueError: dtex = producto.camposEspecificosBala.dtex try: corte = int(self.wids['e_corte'].get_text()) except ValueError: dtex = producto.camposEspecificosBala.dtex gramosBolsa = utils.parse_numero(self.wids['e_gramosBolsa'].get_text()) producto.camposEspecificosBala.gramosBolsa = gramosBolsa bolsasCaja = utils.parse_numero(self.wids['e_bolsasCaja'].get_text()) producto.camposEspecificosBala.bolsasCaja = bolsasCaja cajasPale = utils.parse_numero(self.wids['e_cajasPale'].get_text()) producto.camposEspecificosBala.cajasPale = cajasPale color = self.wids['e_color'].get_text() antiuv = self.wids['chk_antiuv'].get_active() reciclada = self.wids['ch_reciclada'].get_active() idtipoMaterialBala = utils.combo_get_value(self.wids['cb_material']) prodestandar = self.wids['e_prodestandar'].get_text() try: prodestandar = float(prodestandar) except ValueError: prodestandar = 0.0 # Desactivo el notificador momentáneamente producto.notificador.activar(lambda: None) # Actualizo los datos del objeto producto.prodestandar = prodestandar try: producto.codigo = codigo except pclases.psycopg_ProgrammingError: try: producto_asignado = pclases.ProductoVenta.select( pclases.ProductoVenta.q.codigo == codigo)[0] producto_asignado = producto_asignado.descripcion except IndexError: producto_asignado = "?" utils.dialogo_info(titulo = "CÓDIGO DUPLICADO", texto = "El código EAN %s no se encuentra " "disponible.\nActualmente está asignado a:" " %s" % (codigo, producto_asignado), padre = self.wids['ventana']) producto.descripcion = descripcion if producto.camposEspecificosBala.gramosBolsa: producto.lineaDeProduccionID = lineaembol.id else: producto.lineaDeProduccionID = linea.id producto.nombre = nombre producto.preciopordefecto = precio producto.minimo = minimo producto.arancel = arancel producto.camposEspecificosBala.dtex = dtex producto.camposEspecificosBala.corte = corte producto.camposEspecificosBala.color = color producto.camposEspecificosBala.antiuv = antiuv producto.camposEspecificosBala.reciclada = reciclada producto.camposEspecificosBala.tipoMaterialBalaID = idtipoMaterialBala # Fuerzo la actualización de la BD y no espero a que SQLObject lo # haga por mí: producto.syncUpdate() # Vuelvo a activar el notificador producto.notificador.activar(self.aviso_actualizacion) self.actualizar_ventana() self.wids['b_guardar'].set_sensitive(False)