This repository has been archived on 2024-11-29. You can view files and clone it, but cannot push or open issues or pull requests.
Tecsitel_FactuGES/Datos/Instalador.pas

458 lines
12 KiB
ObjectPascal
Raw Permalink Normal View History

{
===============================================================================
Copyright (<EFBFBD>) 2001. Rodax Software.
===============================================================================
Los contenidos de este fichero son propiedad de Rodax Software titular del
copyright. Este fichero s<EFBFBD>lo podr<EFBFBD> ser copiado, distribuido y utilizado,
en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
acuerdo con los t<EFBFBD>rminos y condiciones establecidas en el acuerdo/contrato
bajo el que se suministra.
-----------------------------------------------------------------------------
Web: www.rodax-software.com
===============================================================================
Fecha primera versi<EFBFBD>n: 13-05-2002
Versi<EFBFBD>n actual: 1.0.0
Fecha versi<EFBFBD>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<EFBFBD>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<EFBFBD>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<EFBFBD> en cuenta.
if Modo = Eliminar then
begin
if dmTablaInstaladores.existeInstaladorEnPedido(CodigoInstalador) then
begin
VerMensaje(msgExisteInstaladorEnPedido);
Exit;
end;
end;
}
Result := True;
end;
end.