This repository has been archived on 2024-11-29. You can view files and clone it, but cannot push or open issues or pull requests.
Tecsitel_FactuGES/BaseDatos/TablaProveedores.pas
2007-06-21 15:47:20 +00:00

719 lines
20 KiB
ObjectPascal

{
===============================================================================
Copyright (©) 2001. 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: 01-10-2001
Versión actual: 1.0.9
Fecha versión actual: 02-02-2005
===============================================================================
Modificaciones:
Fecha Comentarios
---------------------------------------------------------------------------
18-01-2002 Ordenar por descripción el grid de materiales.
07-04-2002 Adaptar todas las funciones a la transacción única.
06-05-2002 Adaptación al grid 'TdxDBGrid'.
27-05-2002 Cambio a un objeto contador (TContadorAlbaranCliente)
16-11-2002 p250. Poner el número total de proveedores dados de alta
en la inicialización del grid.
19-11-2003 p268. Cambiar funciones min y max cliente para que en lugar
de devolverme el proveedor con mayor o menor codigo me devuelva el
proveedor cuyo nombre seria el mayor o menor alfabeticamente.
06-03-2004 P272. Adaptación a multiempresa.
08-10-2004 Se ha añadido el método darListaProveedores
23-11-2004 p297. Solo sacar etiquetas de los clientes/proveedores etiquetados.
02-02-2005 p550. Añadimos funcion darCorreo
===============================================================================
}
unit TablaProveedores;
interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms,
Dialogs, DBTables, DB, IBCustomDataSet, IBSQL, BaseDatos, IBDatabase,
dxDBGrid, Framework;
type
TDatosProveedor = class(TObjeto)
public
Codigo : String;
NIFCIF : String;
Nombre : String;
Calle : String;
Numero : String;
Piso : String;
CodigoPostal : String;
Poblacion : String;
Provincia : String;
Telefono1 : String;
Telefono2 : String;
Fax : String;
Correo : String;
PersonaContacto : String;
Observaciones : String;
constructor Create; overload;
constructor Create(CodigoProveedor : String); overload;
procedure ObtenerDatos; override;
procedure SalvarDatos;
end;
TdmTablaProveedores = 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;
function DarDatosProveedor(Proveedor : TDatosProveedor) : Boolean;
constructor Create (AOwner : TComponent); override;
destructor Destroy; override;
procedure InicializarGridProveedores(var Grid: TdxDBGrid);
function DarProveedorMin : String;
function DarProveedorMax : String;
function DarListaProveedores: TStringList;
function insertarProveedorCliEmp(CodigoProveedor, Codigo : String) : Boolean;
function modificarProveedorCliEmp(CodigoProveedor, Codigo : String) : Boolean;
function darCodigoClienteProveedor(CodigoProveedor: String): Variant;
function etiquetarProveedores(Codigos: TStringList; TipoOp: Integer): Boolean;
function DarCorreo(Codigo: String): String;
end;
var
dmTablaProveedores: TdmTablaProveedores;
implementation
{$R *.DFM}
uses
Mensajes, Constantes, IB, dxDBCtrl, StrFunc, Excepciones, Contadores,
RdxGestorContadores, RdxEmpresaActiva, dxGrClms;
constructor TdmTablaProveedores.Create (AOwner : TComponent);
begin
inherited;
sqlInsertar := TStringList.Create;
sqlModificar := TStringList.Create;
sqlConsultar := TStringList.Create;
sqlEliminar := TStringList.Create;
sqlGrid := TStringList.Create;
IniciarSQL;
end;
destructor TdmTablaProveedores.Destroy;
begin
sqlInsertar.Free;
sqlModificar.Free;
sqlConsultar.Free;
sqlEliminar.Free;
sqlGrid.Free;
inherited;
end;
procedure TdmTablaProveedores.IniciarSQL;
begin
with sqlInsertar do
begin
Add('insert into PROVEEDORES ');
Add('(CODIGO, NIFCIF, NOMBRE, CALLE, NUMERO, PISO, ');
Add('CODIGOPOSTAL, POBLACION, PROVINCIA, TELEFONO1, ');
Add('TELEFONO2, FAX, CORREO, PERSONACONTACTO, ');
Add('OBSERVACIONES, ETIQUETADO, ULTIMOCAMBIO) ');
Add('values (:CODIGO, :NIFCIF, :NOMBRE, :CALLE, :NUMERO, :PISO, ');
Add(':CODIGOPOSTAL, :POBLACION, :PROVINCIA, :TELEFONO1, ');
Add(':TELEFONO2, :FAX, :CORREO, :PERSONACONTACTO, ');
Add(':OBSERVACIONES, :ETIQUETADO, CURRENT_TIME)');
end;
with sqlModificar do
begin
Add('update PROVEEDORES set ');
Add('NIFCIF = :NIFCIF, ');
Add('NOMBRE = :NOMBRE, ');
Add('CALLE = :CALLE, ');
Add('NUMERO = :NUMERO, ');
Add('PISO = :PISO, ');
Add('CODIGOPOSTAL = :CODIGOPOSTAL, ');
Add('POBLACION = :POBLACION, ');
Add('PROVINCIA = :PROVINCIA, ');
Add('TELEFONO1 = :TELEFONO1, ');
Add('TELEFONO2 = :TELEFONO2, ');
Add('FAX = :FAX, ');
Add('CORREO = :CORREO, ');
Add('PERSONACONTACTO = :PERSONACONTACTO, ');
Add('OBSERVACIONES = :OBSERVACIONES, ');
Add('ETIQUETADO = :ETIQUETADO, ');
Add('ULTIMOCAMBIO = CURRENT_TIME ');
Add('where CODIGO = :CODIGO');
end;
with sqlEliminar do
begin
Add('delete from PROVEEDORES ');
Add('where CODIGO = :CODIGO');
end;
with sqlConsultar do
begin
Add('select CODIGO, NIFCIF, NOMBRE, CALLE, NUMERO, PISO, ');
Add('CODIGOPOSTAL, POBLACION, PROVINCIA, TELEFONO1, ');
Add('TELEFONO2, FAX, CORREO, PERSONACONTACTO, ');
Add('OBSERVACIONES, ETIQUETADO');
Add('from PROVEEDORES');
Add('where CODIGO = :CODIGO');
end;
with sqlGrid do
begin
Add('select CODIGO, ETIQUETADO, NIFCIF, NOMBRE, TELEFONO1, FAX, CORREO ');
Add('from PROVEEDORES');
Add('order by NOMBRE');
end;
end;
function TdmTablaProveedores.DarNuevoCodigo : String;
begin
Result := GestorContadores.DarNuevoCodigo(contProveedores);
end;
function TdmTablaProveedores.IncrementarCodigo: boolean;
begin
Result := GestorContadores.IncrementarValor(contProveedores);
end;
function TdmTablaProveedores.ValidarCodigo(Codigo : String) : Boolean;
begin
Result := GestorContadores.ValidarCodigo(contProveedores, Codigo);
end;
function TdmTablaProveedores.FormatearCodigo(Codigo : String) : String;
begin
Result := GestorContadores.FormatearCodigo(contProveedores, Codigo);
end;
function TdmTablaProveedores.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 PROVEEDORES ');
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;
function TdmTablaProveedores.DarDatosProveedor(Proveedor : TDatosProveedor) : Boolean;
var
oSQL : TIBSQL;
begin
Result := False;
if EsCadenaVacia(Proveedor.Codigo) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select * from PROVEEDORES ');
SQL.Add('where CODIGO = :CODIGO');
ParamByName('CODIGO').AsString := Proveedor.Codigo;
try
Prepare;
ExecQuery;
if (RecordCount > 0) then
with Proveedor do
begin
Nifcif := FieldByName('NIFCIF').AsString;
Nombre := FieldByName('NOMBRE').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;
Fax := FieldByName('FAX').AsString;
Correo := FieldByName('CORREO').AsString;
PersonaContacto := FieldByName('PERSONACONTACTO').AsString;
Observaciones := FieldByName('OBSERVACIONES').AsString;
Result := True;
end;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
procedure TdmTablaProveedores.InicializarGridProveedores(var Grid: TdxDBGrid);
var
Columna : TdxDBTreeListColumn;
begin
with Grid do begin
DestroyColumns;
ShowSummaryFooter := True;
{Columna ETIQUETADO}
{Columna ETIQUETADO}
Columna := CreateColumn(TdxDBGridImageColumn);
Columna.FieldName := 'ETIQUETADO';
Columna.Caption := 'Etiquetado';
Columna.Width := 2;
{Columna CODIGO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODIGO';
Columna.Caption := 'Código';
Columna.Width := tamColCodigo;
Columna.SummaryFooterType := cstCount;
Columna.SummaryFooterFormat := 'Total: 0 proveedores';
{Columna NIFCIF}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'NIFCIF';
Columna.Caption := 'NIF/CIF';
Columna.Width := tamColNIFCIF;
{Columna NOMBRE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'NOMBRE';
Columna.Caption := 'Nombre';
Columna.Width := tamColNombre;
{Columna TELEFONO 1}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'TELEFONO1';
Columna.Caption := 'Teléfono 1';
Columna.Width := tamColTelefono;
{Columna FAX}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.Visible := True;
Columna.FieldName := 'FAX';
Columna.Caption := 'Fax';
Columna.Width := tamColTelefono;
{Columna CORREO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.Visible := True;
Columna.FieldName := 'CORREO';
Columna.Caption := 'Correo electrónico';
Columna.Width := tamColEMail;
end;
end;
function TdmTablaProveedores.InsertarContador: boolean;
begin
Result := GestorContadores.InsertarContador(contProveedores);
end;
function TdmTablaProveedores.DarProveedorMax: String;
var
oSQL : TIBSQL;
begin
Result := '';
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select CODIGO ');
SQL.Add('from PROVEEDORES ');
SQL.Add('where NOMBRE = (select max(NOMBRE) from PROVEEDORES)');
try
Prepare;
ExecQuery;
Result := Fields[0].AsString;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaProveedores.DarProveedorMin: String;
var
oSQL : TIBSQL;
begin
Result := '';
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select CODIGO ');
SQL.Add('from PROVEEDORES ');
SQL.Add('where NOMBRE = (select min(NOMBRE) from PROVEEDORES)');
try
Prepare;
ExecQuery;
Result := Fields[0].AsString;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaProveedores.DarListaProveedores: TStringList;
var
oSQL : TIBSQL;
Lista : TStringList;
begin
Lista := TStringList.Create;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select NOMBRE ');
SQL.Add('from PROVEEDORES ');
SQL.Add('order by NOMBRE');
try
Prepare;
ExecQuery;
Lista.Add(CTE_TODOS);
while not EOF do begin
Lista.Add(Fields[0].AsString);
Next;
end;
result := Lista;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaProveedores.insertarProveedorCliEmp(CodigoProveedor,
Codigo: String): Boolean;
var
oSQL : TIBSQL;
begin
result := False;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('insert into PROVEEDORESCLIEMP ');
SQL.Add('(CODIGOEMPRESA, CODIGOPROVEEDOR, CODIGOCLIENTE)');
SQL.Add('values (:CODIGOEMPRESA, :CODIGOPROVEEDOR, :CODIGOCLIENTE)');
try
ParamByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo;
ParamByName('CODIGOPROVEEDOR').AsString := CodigoProveedor;
ParamByName('CODIGOCLIENTE').AsString := Codigo;
Prepare;
ExecQuery;
result := True;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaProveedores.modificarProveedorCliEmp(CodigoProveedor,
Codigo: String): Boolean;
var
oSQL : TIBSQL;
begin
result := False;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('update PROVEEDORESCLIEMP set');
SQL.Add('CODIGOCLIENTE = :CODIGOCLIENTE');
SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA)');
SQL.Add('and (CODIGOPROVEEDOR = :CODIGOPROVEEDOR)');
try
ParamByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo;
ParamByName('CODIGOPROVEEDOR').AsString := CodigoProveedor;
ParamByName('CODIGOCLIENTE').AsString := Codigo;
Prepare;
ExecQuery;
result := (RowsAffected <> 0);
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaProveedores.darCodigoClienteProveedor(
CodigoProveedor: String): Variant;
var
oSQL : TIBSQL;
begin
result := '';
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select CODIGOCLIENTE');
SQL.Add('from PROVEEDORESCLIEMP');
SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA)');
SQL.Add('and (CODIGOPROVEEDOR = :CODIGOPROVEEDOR)');
try
ParamByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo;
ParamByName('CODIGOPROVEEDOR').AsString := CodigoProveedor;
Prepare;
ExecQuery;
Result := Fields[0].AsString;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaProveedores.etiquetarProveedores(Codigos: TStringList;
TipoOp: Integer): Boolean;
var
oSQL : TIBSQL;
Cadena : String;
i : Integer;
begin
Result := False;
if Codigos.Count = 0 then
Exit;
//Preparamos la cadena para sql
for i:=0 to Codigos.Count - 1 do
begin
if esCadenaVacia(Cadena) then
Cadena := '''' + Codigos.Strings[i] + ''''
else
Cadena := Cadena + ', ''' + Codigos.Strings[i] + '''';
end;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
try
SQL.Add('update PROVEEDORES ');
if TipoOp = CTE_NOETIQUETAR
then SQL.Add('set ETIQUETADO = 1 ')
else SQL.Add('set ETIQUETADO = 0 ');
SQL.Add('where CODIGO in (');
SQL.Add(Cadena);
SQL.Add(')');
Prepare;
ExecQuery;
Result := True;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaProveedores.DarCorreo(Codigo: String): String;
var
oSQL : TIBSQL;
Contador : String;
begin
Result := '';
if EsCadenaVacia(Codigo) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select CORREO ');
SQL.Add('from PROVEEDORES ');
SQL.Add('where CODIGO = :CODIGO');
ParamByName('CODIGO').AsString := Codigo;
try
Prepare;
ExecQuery;
Result := Fields[0].AsString;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
{ TDatosProveedor }
constructor TDatosProveedor.Create;
begin
inherited Create;
end;
constructor TDatosProveedor.Create(CodigoProveedor: String);
begin
inherited Create;
Codigo := CodigoProveedor;
// Recuperar los datos
ObtenerDatos;
end;
procedure TDatosProveedor.ObtenerDatos;
var
oSQL : TIBSQL;
begin
oSQL := TIBSQL.Create(NIL);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select * from PROVEEDORES ');
if (not EsCadenaVacia(Codigo)) then
begin
SQL.Add('where CODIGO = :CODIGO');
ParamByName('CODIGO').AsString := Codigo;
end
else begin
SQL.Add('where 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;
Observaciones := FieldByName('OBSERVACIONES').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;
Fax := FieldByName('FAX').AsString;
Correo := FieldByName('CORREO').AsString;
PersonaContacto := FieldByName('PERSONACONTACTO').AsString;
end;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
procedure TDatosProveedor.SalvarDatos;
var
oSQL : TIBSQL;
begin
oSQL := TIBSQL.Create(NIL);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
if EsCadenaVacia(Codigo) then
begin
Codigo := dmTablaProveedores.DarNuevoCodigo;
SQL.Assign(dmTablaProveedores.sqlInsertar);
end
else
SQL.Assign(dmTablaProveedores.sqlModificar);
ParamByName('CODIGO').AsString := Codigo;
ParamByName('NIFCIF').AsString := NifCif;
ParamByName('NOMBRE').AsString := Nombre;
ParamByName('OBSERVACIONES').AsString := Observaciones;
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('FAX').AsString := Fax;
ParamByName('CORREO').AsString := Correo;
ParamByName('PERSONACONTACTO').AsString := PersonaContacto;
try
Prepare;
try
ExecQuery;
dmTablaProveedores.IncrementarCodigo;
except
end;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
end.