{ =============================================================================== 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: 03-11-2002 Versión actual: 1.0.1 Fecha versión actual: 03-11-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 03-11-2004 p32. Añadido campo 'ULTIMOCAMBIO'. =============================================================================== } unit TablaClientes; interface uses //Generales SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB, //Particulares TablaSucursalesCliente, //Aplicacion Framework, StrFunc, Entidades, Constantes, BaseDatos, //Contador Contadores, RdxGestorContadores; type TDatosCliente = class(TObjeto) private FSucursales : TListaSucursales; public Codigo : String; NIFCIF : String; Nombre : String; Vendedor : String; Observaciones : String; Procedencia : String; Calle : String; Numero : String; Piso : String; CodigoPostal : String; Poblacion : String; Provincia : String; Telefono1 : String; Telefono2 : String; Movil1 : String; Movil2 : String; Fax : String; Correo : String; PersonaContacto : String; constructor Create; overload; constructor Create(CodigoCliente : String); overload; procedure ObtenerDatos; override; procedure SalvarDatos; destructor Destroy; override; property Sucursales : TListaSucursales read FSucursales; end; type TdmTablaClientes = class(TDataModule) private procedure IniciarSQL; public sqlInsertar : TStrings; sqlModificar : TStrings; sqlConsultar : TStrings; sqlEliminar : TStrings; sqlGrid : TStrings; //Metodos que llamaran a contador function DarNuevoCodigo : String; function IncrementarCodigo: boolean; function InsertarContador : boolean; function ValidarCodigo(Codigo : String) : Boolean; function FormatearCodigo(Codigo : String) : String; function ExisteCodigo(Codigo : String) : Boolean; constructor Create (AOwner : TComponent); override; destructor Destroy; override; procedure InicializarGridClientes(var vGrid: TcxGridDBTableView); function DarCodCliMin : String; function DarCodCliMax : String; function DarNombreCliMin : String; function DarNombreCliMax : String; end; var dmTablaClientes: TdmTablaClientes; implementation {$R *.DFM} uses Literales; constructor TdmTablaClientes.Create (AOwner : TComponent); begin inherited; sqlInsertar := TStringList.Create; sqlModificar := TStringList.Create; sqlConsultar := TStringList.Create; sqlEliminar := TStringList.Create; sqlGrid := TStringList.Create; IniciarSQL; end; destructor TdmTablaClientes.Destroy; begin sqlInsertar.Free; sqlModificar.Free; sqlConsultar.Free; sqlEliminar.Free; sqlGrid.Free; inherited; end; procedure TdmTablaClientes.IniciarSQL; begin with sqlInsertar do begin Add('INSERT INTO CLIENTES (CODIGO, FECHAALTA, NIFCIF, NOMBRE, '); Add('OBSERVACIONES, PROCEDENCIA, VENDEDOR, USUARIO, ULTIMOCAMBIO) '); Add('VALUES (:CODIGO, :FECHAALTA, :NIFCIF, :NOMBRE, '); Add(':OBSERVACIONES, :PROCEDENCIA, :VENDEDOR, :USUARIO, CURRENT_TIME)'); end; with sqlModificar do begin Add('UPDATE CLIENTES SET'); Add('NIFCIF = :NIFCIF, '); Add('NOMBRE = :NOMBRE, '); Add('OBSERVACIONES = :OBSERVACIONES, '); Add('PROCEDENCIA = :PROCEDENCIA, '); Add('VENDEDOR = :VENDEDOR, '); Add('ULTIMOCAMBIO = CURRENT_TIME '); Add('WHERE (CODIGO = :CODIGO)'); end; with sqlEliminar do begin Add('delete from CLIENTES '); Add('where CODIGO = :CODIGO'); end; with sqlConsultar do begin Add('select * from CLIENTES '); Add('where CODIGO = :CODIGO'); end; with sqlGrid do begin Add('select CLIENTES.CODIGO, CLIENTES.NIFCIF, CLIENTES.NOMBRE, TELEFONO1, MOVIL1, FAX '); Add('from CLIENTES left join SUCURSALESCLIENTE on '); Add('(SUCURSALESCLIENTE.CODIGOCLIENTE = CLIENTES.CODIGO and '); Add('SUCURSALESCLIENTE.TIPO = ''P'') '); end; end; function TdmTablaClientes.DarNuevoCodigo : String; begin Result := GestorContadores.darNuevoCodigo(contClientes); end; function TdmTablaClientes.IncrementarCodigo : boolean; begin Result := GestorContadores.IncrementarValor(contClientes); end; function TdmTablaClientes.FormatearCodigo(Codigo : String) : String; begin Result := GestorContadores.formatearCodigo(contClientes, Codigo); end; function TdmTablaClientes.ValidarCodigo(Codigo: String): Boolean; begin Result := GestorContadores.validarCodigo(contClientes, Codigo); end; function TdmTablaClientes.ExisteCodigo(Codigo: String): Boolean; var oSQL : TIBSQL; Contador : String; begin Result := False; if EsCadenaVacia(Codigo) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGO '); SQL.Add('from CLIENTES '); SQL.Add('where CODIGO = :CODIGO'); ParamByName('CODIGO').AsString := Codigo; try Prepare; ExecQuery; Contador := Fields[0].AsString; Result := (Codigo = Contador); finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaClientes.InicializarGridClientes (var vGrid: TcxGridDBTableView); var Columna : TcxGridDBColumn; begin with vGrid do begin OptionsView.Footer := True; {Columna CODIGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGO'; Columna.Caption := 'Código'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: 0 clientes'; Kind := skCount; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna NIFCIF} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NIFCIF'; Columna.Caption := 'NIF/CIF'; Columna.Width := tamColNIFCIF; Columna.Options.Filtering := False; {Columna NOMBRE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre'; Columna.Width := tamColNombre; Columna.Options.Filtering := False; Columna.SortOrder := soAscending; {Columna TELEFONO 1} Columna := CreateColumn; Columna.DataBinding.FieldName := 'TELEFONO1'; Columna.Caption := 'Teléfono 1'; Columna.Width := tamColTelefono; Columna.Options.Filtering := False; {Columna MOVIL 1} Columna := CreateColumn; Columna.DataBinding.FieldName := 'MOVIL1'; Columna.Caption := 'Móvil 1'; Columna.Width := tamColTelefono; Columna.Options.Filtering := False; {Columna FAX} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FAX'; Columna.Caption := 'Fax'; Columna.Width := tamColTelefono; Columna.Options.Filtering := False; {Columna CORREO} { Columna := CreateColumn; Columna.DataBinding.FieldName := 'CORREO'; Columna.Caption := 'Correo electrónico'; Columna.Width := tamColCorreo; Columna.Options.Filtering := False; } end; end; function TdmTablaClientes.InsertarContador: boolean; begin Result := GestorContadores.InsertarContador(contClientes); end; function TdmTablaClientes.DarCodCliMax: String; var oSQL : TIBSQL; begin Result := ''; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select max(CODIGO) '); SQL.Add('from CLIENTES '); try Prepare; ExecQuery; Result := Fields[0].AsString; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaClientes.DarCodCliMin: String; var oSQL : TIBSQL; begin Result := ''; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select min(CODIGO) '); SQL.Add('from CLIENTES '); try Prepare; ExecQuery; Result := Fields[0].AsString; finally Close; Transaction := NIL; Free; end; end; end; { TDatosCliente } constructor TDatosCliente.Create(CodigoCliente: String); begin inherited Create; Codigo := CodigoCliente; // Recuperar los datos ObtenerDatos; end; constructor TDatosCliente.Create; begin inherited Create; end; destructor TDatosCliente.Destroy; begin if Assigned(FSucursales) then FSucursales.Free; inherited; end; procedure TDatosCliente.ObtenerDatos; var oSQL : TIBSQL; begin if EsCadenaVacia(Codigo) and EsCadenaVacia(Nombre) then raise Exception.Create(msgCliFaltaCli); oSQL := TIBSQL.Create(NIL); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CLIENTES.NIFCIF, CLIENTES.NOMBRE, PROCEDENCIA, VENDEDOR, '); SQL.Add('CALLE, NUMERO, PISO, CODIGOPOSTAL, POBLACION, PROVINCIA, '); SQL.Add('TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, FAX, CORREO, '); SQL.Add('PERSONACONTACTO, OBSERVACIONES '); SQL.Add('from CLIENTES left join SUCURSALESCLIENTE on '); SQL.Add('(SUCURSALESCLIENTE.CODIGOCLIENTE = CLIENTES.CODIGO and '); SQL.Add('SUCURSALESCLIENTE.TIPO = ''P'') '); if (not EsCadenaVacia(Codigo)) then begin SQL.Add('where CLIENTES.CODIGO = :CODIGO'); ParamByName('CODIGO').AsString := Codigo; end else begin SQL.Add('where CLIENTES.NOMBRE = :NOMBRE'); ParamByName('NOMBRE').AsString := Nombre; end; try Prepare; ExecQuery; // Compruebo si se han recuperado datos if (RecordCount > 0) then begin NIFCIF := FieldByName('NIFCIF').AsString; Nombre := FieldByName('NOMBRE').AsString; Vendedor := FieldByName('VENDEDOR').AsString; Observaciones := FieldByName('OBSERVACIONES').AsString; Procedencia := FieldByName('PROCEDENCIA').AsString; Calle := FieldByName('CALLE').AsString; Numero := FieldByName('NUMERO').AsString; Piso := FieldByName('PISO').AsString; CodigoPostal := FieldByName('CODIGOPOSTAL').AsString; Poblacion := FieldByName('POBLACION').AsString; Provincia := FieldByName('PROVINCIA').AsString; Telefono1 := FieldByName('TELEFONO1').AsString; Telefono2 := FieldByName('TELEFONO2').AsString; Movil1 := FieldByName('MOVIL1').AsString; Movil2 := FieldByName('MOVIL2').AsString; Fax := FieldByName('FAX').AsString; Correo := FieldByName('CORREO').AsString; PersonaContacto := FieldByName('PERSONACONTACTO').AsString; // Recuperar la lista de propiedades del artículo if Assigned(FSucursales) then FSucursales.Free; FSucursales := TListaSucursales.Create(Codigo); end; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaClientes.DarNombreCliMax: String; var oSQL : TIBSQL; begin Result := ''; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select max(NOMBRE) '); SQL.Add('from CLIENTES '); try Prepare; ExecQuery; Result := Fields[0].AsString; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaClientes.DarNombreCliMin: String; var oSQL : TIBSQL; begin Result := ''; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select min(NOMBRE) '); SQL.Add('from CLIENTES '); try Prepare; ExecQuery; Result := Fields[0].AsString; finally Close; Transaction := NIL; Free; end; end; end; procedure TDatosCliente.SalvarDatos; var oSQL : TIBSQL; EsInsercion : Boolean; begin EsInsercion := False; oSQL := TIBSQL.Create(NIL); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; if EsCadenaVacia(Codigo) then begin Codigo := dmTablaClientes.DarNuevoCodigo; SQL.Assign(dmTablaClientes.sqlInsertar); ParamByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha; ParamByName('USUARIO').AsString := dmBaseDatos.Usuario; EsInsercion := True; end else SQL.Assign(dmTablaClientes.sqlModificar); ParamByName('CODIGO').AsString := Codigo; ParamByName('NIFCIF').AsString := NifCif; ParamByName('NOMBRE').AsString := Nombre; ParamByName('OBSERVACIONES').AsString := Observaciones; ParamByName('PROCEDENCIA').AsString := Procedencia; ParamByName('VENDEDOR').AsString := Vendedor; try Prepare; try ExecQuery; except end; finally Close; Transaction := NIL; Free; end; end; oSQL := TIBSQL.Create(NIL); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Clear; if EsInsercion then begin SQL.Assign(dmTablaSucursalesCliente.sqlInsertar); ParamByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha; ParamByName('USUARIO').AsString := dmBaseDatos.Usuario; ParamByName('TIPO').AsString := 'P'; // La dirección principal end else SQL.Assign(dmTablaSucursalesCliente.sqlModificar); ParamByName('CODIGOCLIENTE').AsString := Codigo; ParamByName('CODIGO').AsInteger := 1; // La dirección principal ParamByName('CALLE').AsString := Calle; ParamByName('NUMERO').AsString := Numero; ParamByName('PISO').AsString := Piso; ParamByName('CODIGOPOSTAL').AsString := CodigoPostal; ParamByName('POBLACION').AsString := Poblacion; ParamByName('PROVINCIA').AsString := Provincia; ParamByName('TELEFONO1').AsString := Telefono1; ParamByName('TELEFONO2').AsString := Telefono2; ParamByName('MOVIL1').AsString := Movil1; ParamByName('MOVIL2').AsString := Movil2; ParamByName('FAX').AsString := Fax; ParamByName('CORREO').AsString := Correo; ParamByName('PERSONACONTACTO').AsString := PersonaContacto; try Prepare; ExecQuery; dmTablaClientes.IncrementarCodigo; finally Close; Transaction := NIL; Free; end; end; end; end.