def guardar(self, widget=None): """ Guarda el contenido de los entry y demás widgets de entrada de datos en el objeto y lo sincroniza con la BD. """ proveedor = self.objeto # Si la dirección fiscal está en blanco, copio la postal: if self.wids["e_direccionfacturacion"].get_text().strip() == "": self.wids["e_direccionfacturacion"].set_text(self.wids["e_direccion"].get_text()) self.wids["e_ciudadfacturacion"].set_text(self.wids["e_ciudad"].get_text()) self.wids["e_paisfacturacion"].set_text(self.wids["e_pais"].get_text()) self.wids["e_cpfacturacion"].set_text(self.wids["e_cp"].get_text()) self.wids["e_provinciafacturacion"].set_text(self.wids["e_provincia"].get_text()) self.wids["e_email"].set_text(self.wids["e_correoe"].get_text()) # Valores por defecto para forma de pago: # CWT: # No se le paga a todos los proveedores por igual. Se debe dejar que # este valor esté vacío para especificar que no hay día de pago # concreto. # if self.wids['e_diadepago'].get_text().strip() == "": # self.wids['e_diadepago'].set_text("25") if self.leer_valor(self.wids["e_vencimiento"]).strip() == "": self.escribir_valor(self.wids["e_vencimiento"], "120 D.F.F.") if self.wids["e_documentodepago"].get_text().strip() == "": self.wids["e_documentodepago"].set_text("Pagaré a la orden") # campo formadepago DEPRECATED. Lo pongo igual que "vencimiento" # por si acaso. self.wids["e_formadepago"].set_text(self.leer_valor(self.wids["e_vencimiento"])) # Desactivo el notificador momentáneamente proveedor.notificador.set_func(lambda: None) # Actualizo los datos del objeto cif = self.wids["e_cif"].get_text() # TODO: Aquí habría que comprobar que el CIF no se duplica self.wids["e_cif"].set_text(utils.parse_cif(cif) or self.objeto.cif) for c in [c.name for c in proveedor.sqlmeta.columnList]: if c != "tipoDeProveedorID": valor = self.leer_valor(self.wids["e_%s" % c]) else: valor = utils.combo_get_value(self.wids["cb_tipo_de_proveedor"]) setattr(proveedor, c, valor) # Fuerzo la actualización de la BD y no espero a que SQLObject lo # haga por mí: proveedor.syncUpdate() pclases.Auditoria.modificado(proveedor, self.usuario, __file__) # Vuelvo a activar el notificador proveedor.notificador.set_func(self.aviso_actualizacion) self.objeto = proveedor self.actualizar_ventana() self.wids["b_guardar"].set_sensitive(False)
def crear_nuevo_proveedor(self, widget): """ Función callback del botón b_nuevo. Pide los datos básicos para crear un nuevo objeto. Una vez insertado en la BD hay que hacerlo activo en la ventana para que puedan ser editados el resto de campos que no se hayan pedido aquí. """ proveedor = self.objeto nombre = utils.dialogo_entrada( texto="Introduzca el nombre del proveedor:", titulo="NOMBRE PROVEEDOR", padre=self.wids["ventana"] ) if nombre == None: return cif = utils.dialogo_entrada( titulo="CIF DEL PROVEEDOR", texto="Introduzca CIF (campo obligatorio):", padre=self.wids["ventana"] ) if cif == None: return # TODO: Si se mete el CIF en minúsculas, se traga el duplicado. while ( utils.parse_cif(cif) == "" or pclases.Proveedor.select( pclases.AND(pclases.Proveedor.q.cif == utils.parse_cif(cif), pclases.Proveedor.q.inhabilitado == False) ).count() ): utils.dialogo_info( titulo="CIF INVÁLIDO", texto="El CIF tecleado %s no es válido o está repetido." % (cif), padre=self.wids["ventana"], ) cif = utils.dialogo_entrada( titulo="CIF DEL PROVEEDOR", texto="Introduzca CIF (campo obligatorio):", padre=self.wids["ventana"] ) if cif == None: return cif = utils.parse_cif(cif) if proveedor != None: proveedor.notificador.set_func(lambda: None) tipo_por_defecto = pclases.TipoDeProveedor.get_por_defecto() self.objeto = pclases.Proveedor( nombre=nombre, cif=cif, direccion="", # La carta de # pago se envía a # esta dirección. pais="", ciudad="", provincia="", cp="", telefono="", fax="", contacto="", observaciones="", direccionfacturacion="", # La factura lleva esta # dirección. paisfacturacion="", ciudadfacturacion="", provinciafacturacion="", cpfacturacion="", email="", formadepago="120 D.F.F.", # Campo obsoleto. documentodepago="Pagaré a la orden", vencimiento="120 D.F.F.", diadepago="25", inhabilitado=False, tipoDeProveedor=tipo_por_defecto, ) proveedor = self._objetoreciencreado = self.objeto pclases.Auditoria.nuevo(proveedor, self.usuario, __file__) proveedor.notificador.set_func(self.aviso_actualizacion) utils.dialogo_info( "PROVEEDOR CREADO", "Inserte el resto de la información del proveedor", padre=self.wids["ventana"] ) self.actualizar_ventana()