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/BaseDatos/TablaClientes.pas
2007-06-26 08:08:27 +00:00

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.