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/Clientes/Cliente.pas

990 lines
30 KiB
ObjectPascal
Raw 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: 01-10-2001
Versi<EFBFBD>n actual: 1.1.2
Fecha versi<EFBFBD>n actual: 18-03-2005
===============================================================================
Modificaciones:
Fecha Comentarios
---------------------------------------------------------------------------
01-10-2001 Desactivar la posibilidad de ordenar las columnas del grid
para que no desaparezcan los datos no grabados en tablas.
20-10-2001 Se ha ampliado el campo 'Domiciliaci<63>n bancaria'
porque pasa a tener 100 caracteres.
21-10-2001 Al pasar del modo Consultar/Eliminar a A<EFBFBD>adir/Modificar no se
activaban algunos botones con lupa.
04-11-2001 No se pueden eliminar clientes con almacenes u obras.
07-04-2002 Se ha adaptado para la transacci<EFBFBD>n <EFBFBD>nica.
09-04-2002 En las funciones 'CancelarAnadir', 'CancelarModificar',
'CancelarEliminar', 'AnadirDatos', 'ModificarDatos', y
'EliminarDatos' cerrar todas las tablas que se usen.
09-04-2002 En el evento 'bCancelarClick' llamar a la funci<EFBFBD>n
'TratarCambios' en vez de 'DescartarOperacion'.
06-05-2002 Adaptaci<EFBFBD>n al grid 'TdxDBGrid'.
21-08-2002 P237. Revisar los botones de 'Eliminar' y 'Eliminar todo'
para que al pulsar 'Esc' cancele la operaci<EFBFBD>n y no la
ejecute como ahora.
24-09-2002 Se produc<EFBFBD>a una excepci<EFBFBD>n si el cursos estaba en el c<EFBFBD>digo
del cliente, se pulsaba la tecla 'Esc' y se eleg<EFBFBD>a 'No'.
El frame estaba oculto pero saltaba el evento OnExit del
campo de c<EFBFBD>digo de factura.
21-10-2002 Activar p240. Se ha a<EFBFBD>adido el campo tipo de cliente
21-12-2002 Se ha eliminado un error con el campo 'PROVINCIA'. Al estar
situado en ese campo y dar Esc para salir se puede producir
una excepci<EFBFBD>n.
26-04-2004 p272. Adaptaci<EFBFBD>n a multiempresa.
18-03-2005 Establecer IVA por defecto al dar de alta un cliente 16%
===============================================================================
}
unit Cliente;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
RdxBotones, StdCtrls, RdxMemo, RdxComboBox, RdxCampos, ExtCtrls,
RdxTitulos, Tipos, ComCtrls,
RdxCheckBox, Grids, DBGrids, RdxPaneles,
RdxBarras, Db, RdxDBFrame, RdxFrameClientes, RXDBCtrl, RdxPageControl, IB,
dxCntner, dxTL, dxDBCtrl, dxDBGrid, dxExEdtr, cxControls, cxContainer,
cxEdit, cxTextEdit, cxMaskEdit, cxButtonEdit, cxDBEdit, cxCheckBox;
type
TfrCliente = class(TRdxFrameClientes)
pnlScroll: TRdxScrollPanel;
pnlCliente: TRdxPanel;
eCodigo: TLabel;
eNombre: TLabel;
eObservaciones: TLabel;
cDatos: TRdxCabecera;
eIVA: TLabel;
eDto: TLabel;
eDomiciliacion: TLabel;
eNIFCIF: TLabel;
cbxDomiciliacion: TRdxDBComboBox;
NIF: TRdxDBEdit;
Nombre: TRdxDBEdit;
IVA: TRdxDBEdit;
Dto: TRdxDBEdit;
Observaciones: TRdxDBMemo;
brDoble: TRdxBarraInferior;
bGuardar: TRdxBoton;
bCancelar: TRdxBoton;
brSimple: TRdxBarraInferior;
bSalir: TRdxBoton;
dsCliente: TDataSource;
pnlTitulo: TRdxPanelTituloOperacion;
dsSucursales: TDataSource;
PanelDirecciones: TRdxPanel;
Paginas: TRdxPagesControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
pnlDireccion: TRdxPanel;
eDireccion: TLabel;
eNumero: TLabel;
ePiso: TLabel;
eCodigoPostal: TLabel;
ePoblacion: TLabel;
eProvincia: TLabel;
eTelefono1: TLabel;
eTelefono2: TLabel;
eFax: TLabel;
eCorreo: TLabel;
ePersona: TLabel;
Provincia: TRdxDBEdit;
Poblacion: TRdxDBEdit;
Telefono1: TRdxDBEdit;
Telefono2: TRdxDBEdit;
Fax: TRdxDBEdit;
Calle: TRdxDBEdit;
Numero: TRdxDBEdit;
Piso: TRdxDBEdit;
CodigoPostal: TRdxDBEdit;
CorreoElectronico: TRdxDBEdit;
PersonaContacto: TRdxDBEdit;
pnlGridArticulos: TPanel;
pnlBarraGrid: TRdxPanel;
bAnadir: TRdxBoton;
bEliminar: TRdxBoton;
bEliminarTodo: TRdxBoton;
gridSucursales: TdxDBGrid;
cbxTipoCliente: TRdxDBComboBox;
eTipo: TLabel;
Codigo: TcxDBButtonEdit;
cxEtiquetado: TcxDBCheckBox;
procedure bSalirClick(Sender: TObject);
procedure bAceptarClick(Sender: TObject);
procedure bCancelarClick(Sender: TObject);
procedure bAnadirClick(Sender: TObject);
procedure bEliminarClick(Sender: TObject);
procedure ProvinciaButtonClick(Sender: TObject);
procedure PoblacionButtonClick(Sender: TObject);
procedure IVAExit(Sender: TObject);
procedure DtoExit(Sender: TObject);
procedure bEliminarTodoClick(Sender: TObject);
procedure CodigoPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
procedure CodigoPropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
private
FCodigoProvincia : Variant;
FCodigoPoblacion : Variant;
FCodigoProvinciaDireccion : Variant;
FCodigoPoblacionDireccion : Variant;
FCodigoProvinciaSucursal : Variant;
FCodigoPoblacionSucursal : Variant;
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 SetCodigoProvinciaSucursal (Value : Variant); virtual;
procedure SetCodigoPoblacionSucursal (Value : Variant); virtual;
procedure FreeContenido; override;
procedure BuscarCliente; 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;
property CodigoProvinciaSucursal : Variant read FCodigoProvinciaSucursal write SetCodigoProvinciaSucursal;
property CodigoPoblacionSucursal : Variant read FCodigoPoblacionSucursal write SetCodigoPoblacionSucursal;
constructor Create (AOwner : TComponent); override;
destructor Destroy; override;
published
property TablaClientes;
property TablaSucursales;
property CodigoCliente;
procedure SucursalAfterInsert(DataSet: TDataSet);
procedure GridBotonPoblacionClick(Sender: TObject);
procedure GridBotonProvinciaClick(Sender: TObject);
procedure ProvinciaSucursalSetText(Sender: TField; const Text: String);
procedure ProvinciaSetText(Sender: TField; const Text: String);
end;
var
frCliente: TfrCliente;
implementation
{$R *.DFM}
uses
IBCustomDataSet, TablaClientes, Mensajes, Provincias,
Poblaciones, Clientes, Colores, Configuracion, NumFunc,
BaseDatos, TablaSucursalesCliente, RdxFrameProvincias,
RdxFramePoblaciones, TablaProvincias, TablaBancos, StrFunc,
TablaPoblaciones, Excepciones, IBErrorCodes, dxDBTLCL, TablaTiposCliente,
Literales, Constantes;
const
eRegBloq = -901;
constructor TfrCliente.Create (AOwner : TComponent);
begin
inherited Create(AOwner);
FCodigoProvincia := NULL;
FCodigoPoblacion := NULL;
FCodigoProvinciaDireccion := NULL;
FCodigoPoblacionDireccion := NULL;
FCodigoProvinciaSucursal := NULL;
FCodigoPoblacionSucursal := NULL;
Entidad := entCliente;
ConfigurarFrame(Self, Self.Entidad);
BaseDatos := dmBaseDatos.BD;
Transaccion := dmBaseDatos.Transaccion;
TablaClientes := TIBDataSet.Create(Self);
TablaSucursales := TIBDataSet.Create(Self);
TablaSucursales.AfterInsert := SucursalAfterInsert;
dsCliente.DataSet := TablaClientes;
dsSucursales.DataSet := TablaSucursales;
with TablaClientes do
begin
Database := BaseDatos;
Transaction := Transaccion;
SelectSQL.Assign(dmTablaClientes.sqlConsultar);
InsertSQL.Assign(dmTablaClientes.sqlInsertar);
ModifySQL.Assign(dmTablaClientes.sqlModificar);
DeleteSQL.Assign(dmTablaClientes.sqlEliminar);
RefreshSQL.Assign(dmTablaClientes.sqlConsultar);
end;
with TablaSucursales do
begin
Database := BaseDatos;
Transaction := Transaccion;
SelectSQL.Assign(dmTablaSucursalesCliente.sqlGrid);
InsertSQL.Assign(dmTablaSucursalesCliente.sqlInsertar);
ModifySQL.Assign(dmTablaSucursalesCliente.sqlModificar);
DeleteSQL.Assign(dmTablaSucursalesCliente.sqlEliminar);
RefreshSQL.Assign(dmTablaSucursalesCliente.sqlConsultar);
end;
cbxDomiciliacion.Items := dmTablaBancos.DarBancos;
cbxTipoCliente.Items := dmTablaTiposCliente.DarTiposCliente;
dmTablaSucursalesCliente.InicializarGridSucursales(gridSucursales);
Paginas.ActivePageIndex := 0;
end;
procedure TfrCliente.bSalirClick(Sender: TObject);
begin
try
Rollback;
CloseFrame;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrCliente.bAceptarClick(Sender: TObject);
begin
if (RealizarOperacion) then
CloseFrame;
end;
function TfrCliente.AnadirDatos : boolean;
var
CodSucursal : Integer;
begin
Result := False;
try
CodSucursal := 0;
TablaClientes.Post;
TablaSucursales.DisableControls;
TablaSucursales.First;
while not TablaSucursales.Eof do begin
TablaSucursales.Edit;
TablaSucursales.FieldByName('CODIGO').AsInteger := CodSucursal;
TablaSucursales.FieldByName('CODIGOCLIENTE').AsString := Codigo.DataBinding.Field.AsString;
CodSucursal := CodSucursal + 1;
TablaSucursales.Next;
end;
TablaSucursales.EnableControls;
TablaClientes.ApplyUpdates;
TablaSucursales.ApplyUpdates;
dmTablaClientes.incrementarCodigo;
FCodigoCliente := TablaClientes.FieldByName('CODIGO').AsString;
Commit;
TablaClientes.CachedUpdates := False;
TablaSucursales.CachedUpdates := False;
TablaClientes.Close;
TablaSucursales.Close;
Result := True;
except
on E : EIBError do begin
if E.IBErrorCode = isc_unique_key_violation then
begin
VerMensajeFmt(msgCliCodCliRepetido, [Codigo.DataBinding.Field.AsString]);
TablaClientes.Edit;
end
else
TratarExcepcion(E);
end;
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrCliente.ModificarDatos : boolean;
var
CodSucursal : Integer;
begin
Result := False;
try
CodSucursal := 0;
TablaClientes.Post;
TablaSucursales.DisableControls;
TablaSucursales.First;
while not TablaSucursales.Eof do
begin
TablaSucursales.Edit;
TablaSucursales.FieldByName('CODIGO').AsInteger := CodSucursal;
CodSucursal := CodSucursal + 1;
TablaSucursales.Post;
TablaSucursales.Next;
end;
TablaSucursales.ApplyUpdates;
TablaSucursales.EnableControls;
Commit;
TablaSucursales.CachedUpdates := False;
TablaClientes.Close;
TablaSucursales.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrCliente.EliminarDatos : boolean;
begin
Result := False;
try
TablaClientes.Delete;
Commit;
TablaClientes.Close;
TablaSucursales.Close;
Result := True;
except
on E : EIBError do
begin
case E.IBErrorCode of
isc_lock_conflict : VerMensajeFmt(msgCliBloqueado, [Codigo.DataBinding.Field.AsString]);
isc_foreign_key : VerMensajeFmt(msgCliConAlmAso, [Codigo.DataBinding.Field.AsString]);
else
TratarExcepcion(E);
end;
end;
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrCliente.ActivarModoAnadir;
var
CodNuevo : Variant;
begin
dsCliente.AutoEdit := True;
dsSucursales.AutoEdit := True;
pnlBarraGrid.Visible := True;
ActivarEdicionGridDetalles(gridSucursales);
(gridSucursales.ColumnByFieldName('PROVINCIA')
as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonProvinciaClick;
(gridSucursales.ColumnByFieldName('POBLACION')
as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonPoblacionClick;
Codigo.Properties.Buttons[0].Visible := False;
Codigo.Properties.ReadOnly := False;
Codigo.Properties.OnValidate := CodigoPropertiesValidate;
Provincia.VerBoton := True;
Poblacion.VerBoton := True;
try
{ Antes de aplicar la cach<EFBFBD> hay que asegurarse de que la
tabla est<EFBFBD> cerrada. }
TablaClientes.Close;
TablaSucursales.Close;
CodNuevo := dmTablaClientes.darNuevoCodigo;
TablaClientes.CachedUpdates := True;
TablaSucursales.CachedUpdates := True;
TablaClientes.Open;
TablaClientes.FieldByName('PROVINCIA').OnSetText := ProvinciaSetText;
TablaSucursales.Prepare;
TablaSucursales.Params.ByName('CODIGOCLIENTE').AsString := CodNuevo;
TablaSucursales.Open;
TablaSucursales.FieldByName('PROVINCIA').OnSetText := ProvinciaSucursalSetText;
TablaClientes.Insert;
Codigo.DataBinding.Field.AsString := CodNuevo;
cxEtiquetado.DataBinding.Field.AsInteger := 0;
TablaClientes.FieldByName('IVA').AsString := CTE_IVA;
Visible := True;
NIF.SetFocus;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrCliente.ActivarModoModificar;
begin
dsCliente.AutoEdit := True;
dsSucursales.AutoEdit := True;
ActivarEdicionGridDetalles(gridSucursales);
(gridSucursales.ColumnByFieldName('PROVINCIA')
as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonProvinciaClick;
(gridSucursales.ColumnByFieldName('POBLACION')
as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonPoblacionClick;
Codigo.Properties.Buttons[0].Visible := True;
Codigo.Properties.ReadOnly := True;
Codigo.Properties.OnValidate := nil;
Provincia.VerBoton := True;
Poblacion.VerBoton := True;
// Para que no haga dos accesos a la tabla cuando es consulta
FCodigoProvinciaDireccion := dmTablaProvincias.darCodigoProvincia(Provincia.Text);
try
TablaClientes.Open;
TablaClientes.FieldByName('PROVINCIA').OnSetText := ProvinciaSetText;
if TablaClientes.RecordCount = 0 then
begin
VerMensajeFmt(msgCliNoExiste, [CodigoCliente]);
CancelarModificar;
CloseFrame;
Exit;
end;
{ Antes de aplicar la cach<EFBFBD> hay que asegurarse de que la
tabla est<EFBFBD> cerrada. }
TablaSucursales.Close;
TablaSucursales.CachedUpdates := True;
TablaSucursales.Params.ByName('CODIGOCLIENTE').AsString := Codigo.DataBinding.Field.AsString;
TablaSucursales.Prepare;
TablaSucursales.Open;
TablaSucursales.FieldByName('PROVINCIA').OnSetText := ProvinciaSucursalSetText;
TablaClientes.Edit;
TablaClientes.Post;
TablaClientes.Edit;
Visible := True;
except
on E : EIBError do
begin
case E.IBErrorCode of
isc_lock_conflict : begin
VerMensajeFmt(msgCliBloqueado, [CodigoCliente]);
CancelarModificar;
CloseFrame;
Exit;
end
else
TratarExcepcion(E);
end;
end;
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrCliente.ActivarModoConsultar;
begin
dsCliente.AutoEdit := False;
dsSucursales.AutoEdit := False;
pnlBarraGrid.Visible := False;
DesactivarEdicionGridDetalles(gridSucursales);
(gridSucursales.ColumnByFieldName('PROVINCIA')
as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL;
(gridSucursales.ColumnByFieldName('POBLACION')
as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL;
Codigo.Properties.Buttons[0].Visible := True;
Codigo.Properties.OnValidate := nil;
Provincia.VerBoton := False;
Poblacion.VerBoton := False;
try
TablaClientes.Open;
if TablaClientes.RecordCount = 0 then
begin
VerMensajeFmt(msgCliNoExiste, [CodigoCliente]);
CloseFrame;
Exit;
end;
TablaSucursales.Open;
TablaSucursales.Params.ByName('CODIGOCLIENTE').AsString := Codigo.DataBinding.Field.AsString;
TablaClientes.Cancel;
Visible := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrCliente.ActivarModoEliminar;
begin
dsCliente.AutoEdit := False;
dsSucursales.AutoEdit := False;
pnlBarraGrid.Visible := False;
DesactivarEdicionGridDetalles(gridSucursales);
(gridSucursales.ColumnByFieldName('PROVINCIA')
as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL;
(gridSucursales.ColumnByFieldName('POBLACION')
as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL;
Codigo.Properties.Buttons[0].Visible := True;
Codigo.Properties.OnValidate := nil;
Provincia.VerBoton := False;
Poblacion.VerBoton := False;
try
TablaClientes.Open;
if TablaClientes.RecordCount = 0 then
begin
VerMensajeFmt(msgCliNoExiste, [CodigoCliente]);
CancelarEliminar;
CloseFrame;
Exit;
end;
TablaSucursales.Open;
TablaSucursales.Params.ByName('CODIGOCLIENTE').AsString := CodigoCliente;
TablaClientes.Cancel;
Visible := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrCliente.BuscarCliente;
begin
if Transaccion = NIL then
exit;
try
TablaClientes.Close;
// Buscar la fila a tratar si es necesario
if not VarIsNull(CodigoCliente) then
begin
TablaClientes.Params.ByName('CODIGO').AsString := CodigoCliente;
TablaSucursales.Params.ByName('CODIGOCLIENTE').AsString := CodigoCliente;
end;
TablaClientes.Prepare;
TablaSucursales.Prepare;
TablaClientes.Open;
TablaSucursales.Open;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrCliente.CancelarAnadir: Boolean;
begin
Result := False;
try
TablaClientes.CancelUpdates;
TablaSucursales.CancelUpdates;
RollBack;
TablaClientes.CachedUpdates := False;
TablaSucursales.CachedUpdates := False;
TablaClientes.Close;
TablaSucursales.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrCliente.CancelarEliminar: Boolean;
begin
Result := False;
try
RollBack;
TablaClientes.Close;
TablaSucursales.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrCliente.CancelarModificar: Boolean;
begin
Result := False;
try
TablaSucursales.CancelUpdates;
RollBack;
TablaSucursales.CachedUpdates := False;
TablaClientes.Close;
TablaSucursales.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
destructor TfrCliente.Destroy;
begin
TablaSucursales.Close;
TablaSucursales.UnPrepare;
TablaSucursales.Free;
TablaClientes.Close;
TablaClientes.UnPrepare;
TablaClientes.Free;
inherited;
end;
procedure TfrCliente.FreeContenido;
begin
if (ContenidoModal is TRdxFrameClientes) then begin
CodigoCliente := (ContenidoModal as TRdxFrameClientes).CodigoCliente;
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 TfrCliente.SetCodigoPoblacion(Value: Variant);
begin
if FCodigoPoblacion <> Value then
FCodigoPoblacion := Value;
end;
procedure TfrCliente.SetCodigoProvincia(Value: Variant);
begin
if FCodigoProvincia <> Value then
FCodigoProvincia := Value;
end;
procedure TfrCliente.VerModal;
begin
if (ContenidoModal is TRdxFramePoblaciones) then
(ContenidoModal as TRdxFramePoblaciones).CodigoProvincia := CodigoProvincia;
inherited;
end;
procedure TfrCliente.bCancelarClick(Sender: TObject);
begin
if (TratarCambios = IDOK) then
CloseFrame;
end;
procedure TfrCliente.bAnadirClick(Sender: TObject);
begin
try
TablaSucursales.Append;
Paginas.ActivePageIndex := 1;
gridSucursales.SetFocus;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrCliente.bEliminarClick(Sender: TObject);
begin
if (VerMensajePregunta(msgDeseaBorrar) <> IDYES) then
Exit;
if TablaSucursales.RecordCount = 0 then begin
{ Hacemos un cancel de la tabla por si el registro actual estuviera
recien creado }
TablaSucursales.Cancel;
exit;
end;
try
TablaSucursales.Delete;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrCliente.GridBotonPoblacionClick(Sender: TObject);
begin
FCodigoProvinciaSucursal := dmTablaProvincias.darCodigoProvincia(TablaSucursales.FieldByName('PROVINCIA').AsString);
if (VarIsNull(CodigoProvinciaSucursal)) then begin
VerMensaje(msgSinProvincia);
Exit;
end;
TablaSucursales.Edit;
CodigoProvincia := CodigoProvinciaSucursal;
CaptionModal := Format(msgListaPoblaciones, [dmTablaProvincias.darNombreProvincia(CodigoProvincia)]);
WidthModal := 280;
HeightModal := 460;
ContenidoModal := TfrPoblaciones.Create(Self);
CodigoPoblacionSucursal := CodigoPoblacion;
end;
procedure TfrCliente.ProvinciaButtonClick(Sender: TObject);
begin
CaptionModal := 'Lista de provincias';
WidthModal := 280;
HeightModal := 460;
ContenidoModal := TfrProvincias.Create(Self);
CodigoProvinciaDireccion := CodigoProvincia;
end;
procedure TfrCliente.PoblacionButtonClick(Sender: TObject);
begin
if (VarIsNull(CodigoProvinciaDireccion)) then begin
VerMensaje(msgSinProvincia);
Paginas.ActivePageIndex := 0;
Provincia.SetFocus;
Exit;
end;
CodigoProvincia := CodigoProvinciaDireccion;
CaptionModal := Format(msgListaPoblaciones, [dmTablaProvincias.darNombreProvincia(CodigoProvincia)]);
WidthModal := 280;
HeightModal := 460;
ContenidoModal := TfrPoblaciones.Create(Self);
CodigoPoblacionDireccion := CodigoPoblacion;
end;
procedure TfrCliente.SetCodigoPoblacionDireccion(Value: Variant);
begin
if (not VarIsNull(FCodigoPoblacionDireccion)) and (FCodigoPoblacionDireccion = Value) then
exit;
if (not VarIsNull(Value)) then
begin
FCodigoPoblacionDireccion := Value;
Poblacion.Field.AsString := dmTablaPoblaciones.darNombrePoblacion(FCodigoProvinciaDireccion, FCodigoPoblacionDireccion);
end;
end;
procedure TfrCliente.SetCodigoPoblacionSucursal(Value: Variant);
begin
if (not VarIsNull(FCodigoPoblacionSucursal)) and (FCodigoPoblacionSucursal = Value) then
exit;
if (not VarIsNull(Value)) then
begin
FCodigoPoblacionSucursal := Value;
TablaSucursales.FieldByName('POBLACION').AsString := dmTablaPoblaciones.darNombrePoblacion(FCodigoProvinciaSucursal, FCodigoPoblacionSucursal);
end;
end;
procedure TfrCliente.SetCodigoProvinciaDireccion(Value: Variant);
begin
if (not VarIsNull(FCodigoProvinciaDireccion)) and (FCodigoProvinciaDireccion = Value) then
exit;
if (not VarIsNull(Value)) then
begin
FCodigoProvinciaDireccion := Value;
Provincia.Field.AsString := dmTablaProvincias.darNombreProvincia(FCodigoProvinciaDireccion);
end;
end;
procedure TfrCliente.SetCodigoProvinciaSucursal(Value: Variant);
begin
if (not VarIsNull(FCodigoProvinciaSucursal)) and (FCodigoProvinciaSucursal = Value) then
exit;
if (not VarIsNull(Value)) then
begin
FCodigoProvinciaSucursal := Value;
TablaSucursales.FieldByName('PROVINCIA').AsString := dmTablaProvincias.darNombreProvincia(FCodigoProvinciaSucursal);
end;
end;
procedure TfrCliente.IVAExit(Sender: TObject);
begin
if not (Modo in [Anadir, Modificar]) then
Exit;
try
validarIVA(IVA.Text);
except
on E : Exception do begin
IVA.SetFocus;
VerMensaje(E.Message);
end;
end;
end;
procedure TfrCliente.DtoExit(Sender: TObject);
begin
if not (Modo in [Anadir, Modificar]) then
Exit;
try
validarDto(Dto.Text);
except
on E : Exception do begin
Dto.SetFocus;
VerMensaje(E.Message);
end;
end;
end;
procedure TfrCliente.SucursalAfterInsert(DataSet: TDataSet);
begin
DataSet.FieldByName('CODIGOCLIENTE').AsString := Codigo.DataBinding.Field.AsString;
DataSet.FieldByName('CODIGO').AsInteger := -1;
DataSet.FieldByName('DB_KEY').AsString := '-';
end;
procedure TfrCliente.bEliminarTodoClick(Sender: TObject);
begin
if (VerMensajePregunta(msgDeseaBorrarTodo) <> IDYES) then
Exit;
try
TablaSucursales.DisableControls;
TablaSucursales.Last;
while TablaSucursales.RecordCount > 0 do begin
TablaSucursales.Delete;
TablaSucursales.Prior;
end;
TablaSucursales.EnableControls;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrCliente.ComprobarDatos: Boolean;
begin
Result := False;
if EsCadenaVacia(Nombre.Text) then
begin
VerMensaje(msgCliFaltaNombreCli);
Nombre.SetFocus;
Exit;
end;
if EsCadenaVacia(Calle.Text) then
begin
VerMensaje(msgCliFaltaCalle);
Paginas.ActivePageIndex := 0;
Calle.SetFocus;
Exit;
end;
Result := True;
end;
procedure TfrCliente.ProvinciaSucursalSetText(Sender: TField;
const Text: String);
var
CampoProvincia : String;
begin
CampoProvincia := AnsiUpperCase(Text);
FCodigoProvinciaSucursal := dmTablaProvincias.darCodigoProvincia(CampoProvincia);
Sender.AsString := CampoProvincia;
end;
procedure TfrCliente.GridBotonProvinciaClick(Sender: TObject);
begin
TablaSucursales.Edit;
CaptionModal := 'Lista de provincias';
WidthModal := 280;
HeightModal := 460;
ContenidoModal := TfrProvincias.Create(Self);
CodigoProvinciaSucursal := CodigoProvincia;
end;
procedure TfrCliente.ProvinciaSetText(Sender: TField; const Text: String);
begin
FCodigoProvinciaDireccion := dmTablaProvincias.darCodigoProvincia(Text);
Sender.AsString := Text;
end;
procedure TfrCliente.CodigoPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
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, FCodigoCliente es NULL y da error al activar modo porque
no se inicializa los par<EFBFBD>metros de la sql. Lo hace BuscarCliente. }
if not TablaClientes.Active then
BuscarCliente;
ContenidoModal := TfrClientes.Create(Self);
end;
procedure TfrCliente.CodigoPropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
begin
inherited;
if (Modo <> Anadir) or (Visible = false) then
exit;
if EsCadenaVacia(DisplayValue) then
DisplayValue := dmTablaClientes.darNuevoCodigo;
if (dmTablaClientes.validarCodigo(DisplayValue)) then
begin
//Comprueba que le numero es lo sufucientemente peque<75>o para ser un entero
if not EsInteger(DisplayValue) then
begin
VerMensajeFmt(msgCliCodCliIncorrecto,[DisplayValue]);
Codigo.SetFocus;
end
else
begin
DisplayValue := dmTablaClientes.formatearCodigo(DisplayValue);
if (dmTablaClientes.existeCodigo(DisplayValue)) then begin
VerMensajeFmt(msgCliCodCliRepetido, [DisplayValue]);
Codigo.SetFocus;
end;
end;
end
else begin
VerMensajeFmt(msgCliCodCliIncorrecto, [DisplayValue]);
Codigo.SetFocus;
end;
end;
end.