git-svn-id: https://192.168.0.254/svn/Proyectos.Acana_FactuGES/trunk@4 3f40d355-893c-4141-8e64-b1d9be72e7e7
581 lines
16 KiB
ObjectPascal
581 lines
16 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: 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.
|