{ =============================================================================== Copyright (©) 2001. 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: 13-05-2002 Versión actual: 1.0.0 Fecha versión actual: 13-05-2002 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- =============================================================================== } unit Instalador; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Db, IBCustomDataSet, Mask, DBCtrls, Buttons, ToolEdit, IB, IBDatabase, RdxBarras, RdxBotones, RdxCampos, RdxMemo, RdxComboBox, RdxCheckBox, RdxTitulos, RdxPaneles, Colores, Mensajes, Tipos, RdxFrameInstaladores; type TfrInstalador = class(TRdxFrameInstaladores) brDoble: TRdxBarraInferior; brSimple: TRdxBarraInferior; bAceptarSimple: TRdxBoton; pnlDatos: TRdxPanel; cDatos: TRdxCabecera; eCodigo: TLabel; eNombre: TLabel; bAceptar: TRdxBoton; bCancelar: TRdxBoton; Nombre: TRdxDBEdit; dsInstalador: TDataSource; Codigo: TRdxDBEdit; Titulo: TRdxPanelTituloOperacion; Telefono: TRdxDBEdit; eTelefono: TLabel; procedure bSalirClick(Sender: TObject); procedure bCancelarGuardarClick(Sender: TObject); procedure CodigoExit(Sender: TObject); procedure CodigoButtonClick(Sender: TObject); procedure bAceptarClick(Sender: TObject); 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; procedure FreeContenido; override; procedure BuscarInstalador; override; function ComprobarDatos: Boolean; override; public constructor Create (AOwner : TComponent); override; destructor Destroy; override; published property TablaInstaladores; property CodigoInstalador; end; var frInstalador: TfrInstalador; implementation {$R *.DFM} uses BaseDatos, TablaInstaladores, Instaladores, StrFunc, Excepciones, IBErrorCodes, Configuracion, Literales; constructor TfrInstalador.Create (AOwner : TComponent); begin inherited Create(AOwner); Entidad := entInstalador; ConfigurarFrame(Self, Self.Entidad); 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; end; destructor TfrInstalador.Destroy; begin TablaInstaladores.Close; TablaInstaladores.UnPrepare; TablaInstaladores.Free; inherited; end; procedure TfrInstalador.BuscarInstalador; begin if Transaccion = NIL then exit; try TablaInstaladores.Close; // Buscar la fila a tratar si es necesario if not VarIsNull(CodigoInstalador) then TablaInstaladores.Params.ByName('CODIGO').AsString := CodigoInstalador; TablaInstaladores.Prepare; TablaInstaladores.Open; except on E : EIBError do begin VerMensaje(E.Message); end; on E : EDatabaseError do begin VerMensaje(E.Message); end; end; end; procedure TfrInstalador.FreeContenido; begin if (ContenidoModal is TRdxFrameInstaladores) then begin CodigoInstalador := (ContenidoModal as TRdxFrameInstaladores).CodigoInstalador; ActivarModo; end; inherited FreeContenido; end; procedure TfrInstalador.CodigoExit(Sender: TObject); begin { No tendria sentido comprobar si el codigo es correcto o no ya que no damos la posibilidad de introducirmanualmente el codigo de instalador if Modo <> Anadir then exit; if (Length(Codigo.Text) = 0) then Codigo.Field.AsString := dmTablaInstaladores.darNuevoCodigo; if (dmTablaInstaladores.validarCodigo(Codigo.Text)) then begin Codigo.Field.asString := dmTablaInstaladores.formatearCodigo(Codigo.Text); if (dmTablaInstaladores.existeInstalador(Codigo.Text)) then begin VerMensajeFmt(msgInsCodInstRepetido, [Codigo.Text]); Codigo.SetFocus; end; end else begin VerMensajeFmt(msgInsCodInstIncorrecto, [Codigo.Text]); Codigo.SetFocus; end; } end; function TfrInstalador.AnadirDatos : Boolean; begin Result := False; try TablaInstaladores.Post; TablaInstaladores.ApplyUpdates; dmTablaInstaladores.incrementarCodigo; FCodigoInstalador := 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(msgInsCodInsRepetido, [Codigo.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(msgInsBloqueado, [Codigo.Field.AsString]); else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; procedure TfrInstalador.activarModoAnadir; begin dsInstalador.AutoEdit := True; Telefono.VerBoton := False; try TablaInstaladores.Close; TablaInstaladores.CachedUpdates := True; TablaInstaladores.Open; TablaInstaladores.Insert; Codigo.Field.asString := dmTablaInstaladores.darNuevoCodigo; Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrInstalador.activarModoModificar; begin dsInstalador.AutoEdit := True; Telefono.VerBoton := True; try TablaInstaladores.Open; if TablaInstaladores.RecordCount = 0 then begin VerMensajeFmt(msgInsNoExiste, [CodigoInstalador]); CancelarModificar; CloseFrame; Exit; end; TablaInstaladores.Edit; TablaInstaladores.Post; TablaInstaladores.Edit; Visible := True; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : begin VerMensajeFmt(msgInsBloqueado, [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; Telefono.VerBoton := True; try TablaInstaladores.Open; if TablaInstaladores.RecordCount = 0 then begin VerMensajeFmt(msgInsNoExiste, [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; Telefono.VerBoton := True; try TablaInstaladores.Open; if TablaInstaladores.RecordCount = 0 then begin VerMensajeFmt(msgInsNoExiste, [CodigoInstalador]); CancelarEliminar; CloseFrame; Exit; end; TablaInstaladores.Cancel; Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrInstalador.CodigoButtonClick(Sender: TObject); begin inherited; 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, FCodigoArticulo es NULL y da error al activar modo porque no se inicializa los parámetros de la sql. Lo hace BuscarArticulo. } if not TablaInstaladores.Active then BuscarInstalador; ContenidoModal := TfrInstaladores.Create(Self); end; procedure TfrInstalador.bAceptarClick(Sender: TObject); begin if (RealizarOperacion) then CloseFrame; 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; 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.bCancelarGuardarClick(Sender: TObject); begin if (TratarCambios = IDOK) then CloseFrame; end; function TfrInstalador.ComprobarDatos: Boolean; begin Result := False; if EsCadenaVacia(Nombre.Text) then begin VerMensaje(msgInsFaltaNombre); Nombre.SetFocus; Exit; end; { No hay restricciones al eliminar un intalador si acaso si existiese en un pedido, pero como no hay relacion en tablas sino que es copia de nombre y apellidos y telefono en un campo persona de contacto de la tabla de pedidos, no se tendrá en cuenta. if Modo = Eliminar then begin if dmTablaInstaladores.existeInstaladorEnPedido(CodigoInstalador) then begin VerMensaje(msgExisteInstaladorEnPedido); Exit; end; end; } Result := True; end; end.