{ =============================================================================== Copyright (©) 2002. Rodax Software. =============================================================================== Los contenidos de este fichero son propiedad de Rodax Software titular del copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado, en su totalidad o en parte, con el permiso escrito de Rodax Software, o de acuerdo con los términos y condiciones establecidas en el acuerdo/contrato bajo el que se suministra. ----------------------------------------------------------------------------- Web: www.rodax-software.com =============================================================================== Fecha primera versión: 05-12-2002 Versión actual: 1.0.1 Fecha versión actual: 28-06-2003 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 28-06-2003 Arreglada precisión en campo 'Porcentaje'. =============================================================================== } unit Instalador; interface uses Windows, Db, StdCtrls, RdxMemo, RdxCampos, RdxTitulos, Forms, RdxPaneles, RdxBotones, Controls, ExtCtrls, RdxBarras, Classes, RdxFrameInstaladores, RdxFrame, RXDBCtrl, ComCtrls, cxDBEdit, cxMaskEdit, cxButtonEdit, cxControls, cxContainer, cxEdit, cxTextEdit, cxMemo, AdvPanel, Configuracion, cxSpinEdit; type TfrInstalador = class(TRdxFrameInstaladores) brDoble: TRdxBarraInferior; bAceptar: TRdxBoton; bCancelar: TRdxBoton; brSimple: TRdxBarraInferior; bSalir: TRdxBoton; dsInstalador: TDataSource; Titulo: TRdxPanelTituloOperacion; pnlCuerpo: TPanel; pnlDatos: TAdvPanel; eObservaciones: TLabel; eCodigo: TLabel; eNIFCIF: TLabel; eDescuento: TLabel; eNombre: TLabel; Observaciones: TcxDBMemo; Codigo: TcxDBButtonEdit; NIFCIF: TcxDBTextEdit; Nombre: TcxDBTextEdit; pnlDireccion: TAdvPanel; eTelefono2: TLabel; eTelefono1: TLabel; eCalle: TLabel; ePiso: TLabel; eNumero: TLabel; eProvincia: TLabel; eCodigoProtal: TLabel; ePoblacion: TLabel; eMovil1: TLabel; eMovil2: TLabel; Movil1: TcxDBTextEdit; Telefono2: TcxDBTextEdit; Telefono1: TcxDBTextEdit; CodigoPostal: TcxDBTextEdit; Calle: TcxDBTextEdit; Numero: TcxDBTextEdit; Piso: TcxDBTextEdit; Provincia: TcxDBButtonEdit; Poblacion: TcxDBButtonEdit; Movil2: TcxDBTextEdit; Porcentaje: TcxDBTextEdit; procedure bSalirClick(Sender: TObject); procedure bCancelarClick(Sender: TObject); procedure bAceptarClick(Sender: TObject); procedure ProvinciaPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure PoblacionPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure CodigoPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); private FCodigoProvincia : Variant; FCodigoPoblacion : Variant; FCodigoProvinciaDireccion : Variant; FCodigoPoblacionDireccion : Variant; procedure ProvinciaSetText(Sender: TField; const Text: String); procedure PorcentajeSetText(Sender: TField; const Text: String); protected procedure ActivarModoAnadir; override; procedure ActivarModoModificar; override; procedure ActivarModoConsultar; override; procedure ActivarModoEliminar; override; function AnadirDatos : Boolean; override; function ModificarDatos : Boolean; override; function EliminarDatos : Boolean; override; function CancelarAnadir : Boolean; override; function CancelarModificar : Boolean; override; function CancelarEliminar : Boolean; override; function ComprobarDatos : Boolean; override; procedure VerModal; override; procedure SetCodigoProvincia (Value : Variant); virtual; procedure SetCodigoPoblacion (Value : Variant); virtual; procedure SetCodigoProvinciaDireccion (Value : Variant); virtual; procedure SetCodigoPoblacionDireccion (Value : Variant); virtual; procedure FreeContenido; override; procedure BuscarInstalador; override; public property CodigoProvincia : Variant read FCodigoProvincia write SetCodigoProvincia; property CodigoPoblacion : Variant read FCodigoPoblacion write SetCodigoPoblacion; property CodigoProvinciaDireccion : Variant read FCodigoProvinciaDireccion write SetCodigoProvinciaDireccion; property CodigoPoblacionDireccion : Variant read FCodigoPoblacionDireccion write SetCodigoPoblacionDireccion; constructor Create (AOwner : TComponent); override; destructor Destroy; override; published property TablaInstaladores; property CodigoInstalador; end; var frInstalador: TfrInstalador; implementation {$R *.DFM} uses TablaInstaladores, Mensajes, IB, Colores, IBDatabase, Instaladores, Provincias, RdxFrameProvincias, Poblaciones, RdxFramePoblaciones, TablaProvincias, BaseDatos, IBCustomDataSet, Sysutils, StrFunc, TablaPoblaciones, Excepciones, IBErrorCodes, Variants, Entidades, NumFunc, Literales; constructor TfrInstalador.Create (AOwner : TComponent); begin inherited Create(AOwner); Entidad := entInstalador; FCodigoProvincia := NULL; FCodigoPoblacion := NULL; FCodigoProvinciaDireccion := NULL; FCodigoPoblacionDireccion := NULL; BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaInstaladores := TIBDataSet.Create(Self); dsInstalador.DataSet := TablaInstaladores; with TablaInstaladores do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaInstaladores.sqlConsultar); InsertSQL.Assign(dmTablaInstaladores.sqlInsertar); ModifySQL.Assign(dmTablaInstaladores.sqlModificar); DeleteSQL.Assign(dmTablaInstaladores.sqlEliminar); RefreshSQL.Assign(dmTablaInstaladores.sqlConsultar); end; bCancelar.Cancel := True; bSalir.Cancel := True; end; procedure TfrInstalador.SetCodigoProvincia(Value: Variant); begin if FCodigoProvincia <> Value then FCodigoProvincia := Value; end; procedure TfrInstalador.SetCodigoPoblacion(Value: Variant); begin if FCodigoPoblacion <> Value then FCodigoPoblacion := Value; end; procedure TfrInstalador.bSalirClick(Sender: TObject); begin try Rollback; CloseFrame; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrInstalador.bCancelarClick(Sender: TObject); begin if (TratarCambios = IDOK) then CloseFrame; end; function TfrInstalador.AnadirDatos : Boolean; begin Result := False; try TablaInstaladores.Post; TablaInstaladores.ApplyUpdates; // dmTablaInstaladores.IncrementarCodigo; CodigoInstalador := TablaInstaladores.FieldByName('CODIGO').AsString; Commit; TablaInstaladores.CachedUpdates := False; TablaInstaladores.Close; Result := True; except on E : EIBError do begin if E.IBErrorCode = isc_unique_key_violation then begin VerMensajeFmt(msgDatosCodInstRepetido, [Codigo.DataBinding.Field.AsString]); TablaInstaladores.Edit; end else TratarExcepcion(E); end; on E : Exception do TratarExcepcion(E); end; end; function TfrInstalador.ModificarDatos : Boolean; begin Result := False; try TablaInstaladores.Post; Commit; TablaInstaladores.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrInstalador.EliminarDatos : Boolean; begin Result := False; try TablaInstaladores.Delete; Commit; TablaInstaladores.Close; Result := True; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : VerMensajeFmt(msgDatosInstBloqueado, [Codigo.DataBinding.Field.AsString]); else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; procedure TfrInstalador.ActivarModoAnadir; var CodNuevo : Variant; begin dsInstalador.AutoEdit := True; Codigo.Properties.Buttons[0].Visible := False; Provincia.Properties.Buttons[0].Visible := True; Poblacion.Properties.Buttons[0].Visible := True; try with TablaInstaladores do begin Close; Prepare; CachedUpdates := True; Open; FieldByName('PROVINCIA').OnSetText := ProvinciaSetText; FieldByName('PORCENTAJE').OnSetText := PorcentajeSetText; Insert; FieldByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha; FieldByName('USUARIO').AsString := dmBaseDatos.Usuario; end; dmTablaInstaladores.InicializarTablaInstaladores(@TablaInstaladores); CodNuevo := dmTablaInstaladores.DarNuevoCodigo; Codigo.DataBinding.Field.asString := CodNuevo; Visible := True; NIFCIF.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrInstalador.ActivarModoModificar; begin dsInstalador.AutoEdit := True; Codigo.Properties.Buttons[0].Visible := True; Codigo.Properties.ReadOnly := True; Provincia.Properties.Buttons[0].Visible := True; Poblacion.Properties.Buttons[0].Visible := True; // Para que no haga dos accesos a la tabla cuando es consulta FCodigoProvinciaDireccion := dmTablaProvincias.darCodigoProvincia(Provincia.Text); try with TablaInstaladores do begin Open; FieldByName('PROVINCIA').OnSetText := ProvinciaSetText; FieldByName('PORCENTAJE').OnSetText := PorcentajeSetText; if RecordCount = 0 then begin VerMensajeFmt(msgDatosNoExisteInst, [CodigoInstalador]); CancelarModificar; CloseFrame; Exit; end; Edit; Post; Edit; end; dmTablaInstaladores.InicializarTablaInstaladores(@TablaInstaladores); Visible := True; NIFCIF.SetFocus; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : begin VerMensajeFmt(msgDatosInstBloqueado, [CodigoInstalador]); CancelarModificar; CloseFrame; Exit; end else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; procedure TfrInstalador.ActivarModoConsultar; begin dsInstalador.AutoEdit := False; Codigo.Properties.Buttons[0].Visible := True; Codigo.Properties.ReadOnly := True; Provincia.Properties.Buttons[0].Visible := False; Poblacion.Properties.Buttons[0].Visible := False; try TablaInstaladores.Open; if TablaInstaladores.RecordCount = 0 then begin VerMensajeFmt(msgDatosNoExisteInst, [CodigoInstalador]); CloseFrame; Exit; end; TablaInstaladores.Cancel; Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrInstalador.ActivarModoEliminar; begin dsInstalador.AutoEdit := False; Codigo.Properties.Buttons[0].Visible := True; Codigo.Properties.ReadOnly := True; Provincia.Properties.Buttons[0].Visible := False; Poblacion.Properties.Buttons[0].Visible := False; try TablaInstaladores.Open; if TablaInstaladores.RecordCount = 0 then begin VerMensajeFmt(msgDatosNoExisteInst, [CodigoInstalador]); CancelarEliminar; CloseFrame; Exit; end; TablaInstaladores.Cancel; Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; destructor TfrInstalador.Destroy; begin TablaInstaladores.Close; TablaInstaladores.UnPrepare; TablaInstaladores.Free; inherited; end; procedure TfrInstalador.bAceptarClick(Sender: TObject); begin if (RealizarOperacion) then CloseFrame; end; procedure TfrInstalador.FreeContenido; begin if (ContenidoModal is TRdxFrameInstaladores) then begin CodigoInstalador := (ContenidoModal as TRdxFrameInstaladores).CodigoInstalador; ActivarModo; end; if (ContenidoModal is TRdxFrameProvincias) then CodigoProvincia := (ContenidoModal as TRdxFrameProvincias).CodigoProvincia; if (ContenidoModal is TRdxFramePoblaciones) then begin CodigoProvincia := (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia; CodigoPoblacion := (ContenidoModal as TRdxFramePoblaciones).CodigoPoblacion; end; inherited FreeContenido; end; procedure TfrInstalador.VerModal; begin if (ContenidoModal is TRdxFramePoblaciones) then (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia := FCodigoProvincia; inherited; end; procedure TfrInstalador.BuscarInstalador; begin if Transaccion = NIL then Exit; try TablaInstaladores.DisableControls; TablaInstaladores.Close; // Buscar la fila a tratar si es necesario if not EsCadenaVacia(CodigoInstalador) then TablaInstaladores.Params.ByName('CODIGO').AsString := CodigoInstalador; TablaInstaladores.Prepare; TablaInstaladores.Open; TablaInstaladores.EnableControls; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrInstalador.CancelarAnadir: Boolean; begin Result := False; try TablaInstaladores.CancelUpdates; RollBack; TablaInstaladores.CachedUpdates := False; TablaInstaladores.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrInstalador.CancelarEliminar: Boolean; begin Result := False; try RollBack; TablaInstaladores.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrInstalador.CancelarModificar: Boolean; begin Result := False; try RollBack; TablaInstaladores.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrInstalador.ComprobarDatos: Boolean; begin Result := False; if EsCadenaVacia(Nombre.Text) then begin VerMensaje(msgDatosFaltaNombreInst); Nombre.SetFocus; Exit; end; Result := True; end; procedure TfrInstalador.SetCodigoPoblacionDireccion(Value: Variant); begin if (not EsCadenaVacia(FCodigoPoblacionDireccion)) and (FCodigoPoblacionDireccion = Value) then exit; if (not EsCadenaVacia(Value)) then begin FCodigoPoblacionDireccion := Value; Poblacion.DataBinding.Field.AsString := dmTablaPoblaciones.darNombrePoblacion(FCodigoProvinciaDireccion, FCodigoPoblacionDireccion); end; end; procedure TfrInstalador.SetCodigoProvinciaDireccion(Value: Variant); begin if (not EsCadenaVacia(FCodigoProvinciaDireccion)) and (FCodigoProvinciaDireccion = Value) then exit; if (not EsCadenaVacia(Value)) then begin FCodigoProvinciaDireccion := Value; Provincia.DataBinding.Field.AsString := dmTablaProvincias.darNombreProvincia(FCodigoProvinciaDireccion); end; end; procedure TfrInstalador.ProvinciaSetText(Sender: TField; const Text: String); begin FCodigoProvinciaDireccion := dmTablaProvincias.darCodigoProvincia(Text); Sender.AsString := Text; end; procedure TfrInstalador.ProvinciaPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); begin CaptionModal := msgListaProvincias; WidthModal := 280; HeightModal := 460; ContenidoModal := TfrProvincias.Create(Self); CodigoProvinciaDireccion := CodigoProvincia; end; procedure TfrInstalador.PoblacionPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); begin if (EsCadenaVacia(CodigoProvinciaDireccion)) then begin VerMensaje(msgSinProvincia); Provincia.SetFocus; Exit; end; CodigoProvincia := CodigoProvinciaDireccion; CaptionModal := Format(msgListaPoblaciones, [dmTablaProvincias.darNombreProvincia(CodigoProvincia)]); WidthModal := 280; HeightModal := 460; ContenidoModal := TfrPoblaciones.Create(Self); CodigoPoblacionDireccion := CodigoPoblacion; end; procedure TfrInstalador.CodigoPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); begin if (TratarCambios = IDCANCEL) then exit; { Esto es porque en modo 'Modificar' hacemos un cambio y pulsamos este botón se cierra la tabla y si en el frame hijo (el del grid) damos a cancelar, FCodigoInstalador es NULL y da error al activar modo porque no se inicializa los parámetros de la sql. Lo hace BuscarInstalador. } if not TablaInstaladores.Active then BuscarInstalador; ContenidoModal := TfrInstaladores.Create(Self); end; procedure TfrInstalador.PorcentajeSetText(Sender: TField; const Text: String); begin if EsCadenaVacia(Text) then Sender.AsString := '0' else begin ValidarDto(Text); Sender.AsString := Text; end; end; end.