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/Vendedor.pas

607 lines
17 KiB
ObjectPascal
Raw Permalink Normal View History

{
===============================================================================
Copyright (<EFBFBD>) 2002. 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: 16-11-2002
Versi<EFBFBD>n actual: 1.0.1
Fecha versi<EFBFBD>n actual: 28-06-2003
===============================================================================
Modificaciones:
Fecha Comentarios
---------------------------------------------------------------------------
28-06-2003 Arreglada precisi<EFBFBD>n en campo 'Porcentaje'.
===============================================================================
}
unit Vendedor;
interface
uses
Windows, Db, StdCtrls, RdxMemo, RdxCampos, RdxTitulos, Forms, RdxPaneles,
RdxBotones, Controls, ExtCtrls, RdxBarras, Classes, RdxFrameVendedores,
RdxFrame, RXDBCtrl, ComCtrls, cxDBEdit, cxMaskEdit, cxButtonEdit, Configuracion,
cxControls, cxContainer, cxEdit, cxTextEdit, cxMemo, AdvPanel, cxSpinEdit;
type
TfrVendedor = class(TRdxFrameVendedores)
brDoble: TRdxBarraInferior;
bAceptar: TRdxBoton;
bCancelar: TRdxBoton;
brSimple: TRdxBarraInferior;
bSalir: TRdxBoton;
dsVendedor: TDataSource;
Titulo: TRdxPanelTituloOperacion;
pnlDatos: TAdvPanel;
eObservaciones: TLabel;
Observaciones: TcxDBMemo;
Codigo: TcxDBButtonEdit;
eCodigo: TLabel;
NIFCIF: TcxDBTextEdit;
eNIFCIF: TLabel;
eDescuento: TLabel;
eNombre: TLabel;
Nombre: TcxDBTextEdit;
pnlDireccion: TAdvPanel;
eCalle: TLabel;
Numero: TcxDBTextEdit;
Piso: TcxDBTextEdit;
Calle: TcxDBTextEdit;
ePiso: TLabel;
eNumero: TLabel;
eProvincia: TLabel;
eCodigoProtal: TLabel;
Provincia: TcxDBButtonEdit;
CodigoPostal: TcxDBTextEdit;
ePoblacion: TLabel;
Poblacion: TcxDBButtonEdit;
eTelefono1: TLabel;
eTelefono2: TLabel;
Telefono1: TcxDBTextEdit;
Telefono2: TcxDBTextEdit;
eMovil1: TLabel;
eMovil2: TLabel;
Movil1: TcxDBTextEdit;
Movil2: TcxDBTextEdit;
pnlCuerpo: TPanel;
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 BuscarVendedor; 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 TablaVendedores;
property CodigoVendedor;
end;
var
frVendedor: TfrVendedor;
implementation
{$R *.DFM}
uses
TablaVendedores, Mensajes, IB, Colores, IBDatabase, Vendedores,
Provincias, RdxFrameProvincias, Poblaciones, RdxFramePoblaciones,
TablaProvincias, BaseDatos, IBCustomDataSet, Sysutils,
StrFunc, TablaPoblaciones, Excepciones, IBErrorCodes,
Variants, Entidades, NumFunc, Literales;
constructor TfrVendedor.Create (AOwner : TComponent);
begin
inherited Create(AOwner);
Entidad := entVendedor;
FCodigoProvincia := NULL;
FCodigoPoblacion := NULL;
FCodigoProvinciaDireccion := NULL;
FCodigoPoblacionDireccion := NULL;
BaseDatos := dmBaseDatos.BD;
Transaccion := dmBaseDatos.Transaccion;
TablaVendedores := TIBDataSet.Create(Self);
dsVendedor.DataSet := TablaVendedores;
with TablaVendedores do
begin
Database := BaseDatos;
Transaction := Transaccion;
SelectSQL.Assign(dmTablaVendedores.sqlConsultar);
InsertSQL.Assign(dmTablaVendedores.sqlInsertar);
ModifySQL.Assign(dmTablaVendedores.sqlModificar);
DeleteSQL.Assign(dmTablaVendedores.sqlEliminar);
RefreshSQL.Assign(dmTablaVendedores.sqlConsultar);
end;
dmTablaVendedores.InicializarTablaVendedores(@TablaVendedores);
bCancelar.Cancel := True;
bSalir.Cancel := True;
end;
procedure TfrVendedor.SetCodigoProvincia(Value: Variant);
begin
if FCodigoProvincia <> Value then
FCodigoProvincia := Value;
end;
procedure TfrVendedor.SetCodigoPoblacion(Value: Variant);
begin
if FCodigoPoblacion <> Value then
FCodigoPoblacion := Value;
end;
procedure TfrVendedor.bSalirClick(Sender: TObject);
begin
try
Rollback;
CloseFrame;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrVendedor.bCancelarClick(Sender: TObject);
begin
if (TratarCambios = IDOK) then
CloseFrame;
end;
function TfrVendedor.AnadirDatos : Boolean;
begin
Result := False;
try
TablaVendedores.Post;
TablaVendedores.ApplyUpdates;
CodigoVendedor := TablaVendedores.FieldByName('CODIGO').AsString;
Commit;
TablaVendedores.CachedUpdates := False;
TablaVendedores.Close;
Result := True;
except
on E : EIBError do begin
if E.IBErrorCode = isc_unique_key_violation then
begin
VerMensajeFmt(msgDatosCodVendRepetido, [Codigo.DataBinding.Field.AsString]);
TablaVendedores.Edit;
end
else
TratarExcepcion(E);
end;
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrVendedor.ModificarDatos : Boolean;
begin
Result := False;
try
TablaVendedores.Post;
Commit;
TablaVendedores.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrVendedor.EliminarDatos : Boolean;
begin
Result := False;
try
TablaVendedores.Delete;
Commit;
TablaVendedores.Close;
Result := True;
except
on E : EIBError do
begin
case E.IBErrorCode of
isc_lock_conflict : VerMensajeFmt(msgDatosVendBloqueado, [Codigo.DataBinding.Field.AsString]);
else
TratarExcepcion(E);
end;
end;
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrVendedor.ActivarModoAnadir;
var
CodNuevo : Variant;
begin
dsVendedor.AutoEdit := True;
Codigo.Properties.Buttons[0].Visible := False;
Codigo.Properties.ReadOnly := True;
Provincia.Properties.Buttons[0].Visible := True;
Poblacion.Properties.Buttons[0].Visible := True;
try
with TablaVendedores 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;
FieldByName('PORCENTAJE').AsString := '0';
end;
dmTablaVendedores.InicializarTablaVendedores(@TablaVendedores);
CodNuevo := dmTablaVendedores.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 TfrVendedor.ActivarModoModificar;
begin
dsVendedor.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 TablaVendedores do
begin
Open;
FieldByName('PROVINCIA').OnSetText := ProvinciaSetText;
FieldByName('PORCENTAJE').OnSetText := PorcentajeSetText;
if RecordCount = 0 then
begin
VerMensajeFmt(msgDatosNoExisteVend, [CodigoVendedor]);
CancelarModificar;
CloseFrame;
Exit;
end;
Edit;
Post;
Edit;
end;
dmTablaVendedores.InicializarTablaVendedores(@TablaVendedores);
Visible := True;
NIFCIF.SetFocus;
except
on E : EIBError do
begin
case E.IBErrorCode of
isc_lock_conflict : begin
VerMensajeFmt(msgDatosVendBloqueado, [CodigoVendedor]);
CancelarModificar;
CloseFrame;
Exit;
end
else
TratarExcepcion(E);
end;
end;
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrVendedor.ActivarModoConsultar;
begin
dsVendedor.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
TablaVendedores.Open;
if TablaVendedores.RecordCount = 0 then
begin
VerMensajeFmt(msgDatosNoExisteVend, [CodigoVendedor]);
CloseFrame;
Exit;
end;
TablaVendedores.Cancel;
dmTablaVendedores.InicializarTablaVendedores(@TablaVendedores);
Visible := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrVendedor.ActivarModoEliminar;
begin
dsVendedor.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
TablaVendedores.Open;
if TablaVendedores.RecordCount = 0 then
begin
VerMensajeFmt(msgDatosNoExisteVend, [CodigoVendedor]);
CancelarEliminar;
CloseFrame;
Exit;
end;
TablaVendedores.Cancel;
Visible := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
destructor TfrVendedor.Destroy;
begin
TablaVendedores.Close;
TablaVendedores.UnPrepare;
TablaVendedores.Free;
inherited;
end;
procedure TfrVendedor.bAceptarClick(Sender: TObject);
begin
if (RealizarOperacion) then
CloseFrame;
end;
procedure TfrVendedor.FreeContenido;
begin
if (ContenidoModal is TRdxFrameVendedores) then
begin
CodigoVendedor := (ContenidoModal as TRdxFrameVendedores).CodigoVendedor;
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 TfrVendedor.VerModal;
begin
if (ContenidoModal is TRdxFramePoblaciones) then
(ContenidoModal as TRdxFramePoblaciones).CodigoProvincia := FCodigoProvincia;
inherited;
end;
procedure TfrVendedor.BuscarVendedor;
begin
if Transaccion = NIL then
Exit;
try
TablaVendedores.DisableControls;
TablaVendedores.Close;
// Buscar la fila a tratar si es necesario
if not EsCadenaVacia(CodigoVendedor) then
TablaVendedores.Params.ByName('CODIGO').AsString := CodigoVendedor;
TablaVendedores.Prepare;
TablaVendedores.Open;
TablaVendedores.EnableControls;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrVendedor.CancelarAnadir: Boolean;
begin
Result := False;
try
TablaVendedores.CancelUpdates;
RollBack;
TablaVendedores.CachedUpdates := False;
TablaVendedores.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrVendedor.CancelarEliminar: Boolean;
begin
Result := False;
try
RollBack;
TablaVendedores.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrVendedor.CancelarModificar: Boolean;
begin
Result := False;
try
RollBack;
TablaVendedores.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrVendedor.ComprobarDatos: Boolean;
begin
Result := False;
if EsCadenaVacia(Nombre.Text) then
begin
VerMensaje(msgDatosFaltaNombreVend);
Nombre.SetFocus;
Exit;
end;
Result := True;
end;
procedure TfrVendedor.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 TfrVendedor.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 TfrVendedor.ProvinciaSetText(Sender: TField; const Text: String);
begin
FCodigoProvinciaDireccion := dmTablaProvincias.darCodigoProvincia(Text);
Sender.AsString := Text;
end;
procedure TfrVendedor.ProvinciaPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
begin
CaptionModal := msgListaProvincias;
WidthModal := 280;
HeightModal := 460;
ContenidoModal := TfrProvincias.Create(Self);
CodigoProvinciaDireccion := CodigoProvincia;
end;
procedure TfrVendedor.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 TfrVendedor.CodigoPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
begin
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, FCodigoVendedor es NULL y da error al activar modo porque
no se inicializa los par<EFBFBD>metros de la sql. Lo hace BuscarVendedor. }
if not TablaVendedores.Active then
BuscarVendedor;
ContenidoModal := TfrVendedores.Create(Self);
end;
procedure TfrVendedor.PorcentajeSetText(Sender: TField; const Text: String);
begin
if EsCadenaVacia(Text) then
Sender.AsString := '0'
else begin
ValidarDto(Text);
Sender.AsString := Text;
end;
end;
end.