{ =============================================================================== 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: 16-11-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 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ó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á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.