This repository has been archived on 2024-12-02. You can view files and clone it, but cannot push or open issues or pull requests.
FactuGES/Datos/Instalador.pas
2007-06-26 08:08:27 +00:00

608 lines
17 KiB
ObjectPascal

{
===============================================================================
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.