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/BaseDatos.pas

563 lines
16 KiB
ObjectPascal
Raw Permalink Normal View History

{
===============================================================================
Copyright (<EFBFBD>) 2001. Rodax Software.
===============================================================================
Los contenidos de este fichero son propiedad de Rodax Software titular del
copyright. Este fichero s<EFBFBD>lo podr<EFBFBD> ser copiado, distribuido y utilizado,
en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
acuerdo con los t<EFBFBD>rminos y condiciones establecidas en el acuerdo/contrato
bajo el que se suministra.
-----------------------------------------------------------------------------
Web: www.rodax-software.com
===============================================================================
Fecha primera versi<EFBFBD>n: 01-10-2001
Versi<EFBFBD>n actual: 1.0.8
Fecha versi<EFBFBD>n actual: 12-10-2004
===============================================================================
Modificaciones:
Fecha Comentarios
---------------------------------------------------------------------------
24-10-2001 Se ha revisado el procedimiento 'ComprobarContadores'.
07-04-2002 Se ha cambiado el constructor y la funci<EFBFBD>n 'darTransaccion'
para adaptarlo a la transacci<EFBFBD>n <EFBFBD>nica.
04-05-2002 Se han a<EFBFBD>adido constantes para los tama<EFBFBD>os de las columnas
de los grids.
15-05-2002 Se han a<EFBFBD>adido los procedimiento 'Commit' y 'Rollback'.
21-10-2002 Se han a<EFBFBD>adido la tabla Tipos de cliente.
06-03-2004 P272. Adaptaci<EFBFBD>n a multiempresa.
12-10-2004 p290. Campos nuevos de columna para peticion
===============================================================================
}
unit BaseDatos;
interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms,
Dialogs, DBTables, DB, IBDatabase, IBCustomDataSet, IBTable, IBSQLMonitor,
IBSQL, IB, IBServices, dxDBGrid, RdxGestorContadores, RxMemDS,
cxGridDBCardView, cxGrid, cxGridCustomTableView,
cxGridTableView, cxGridDBTableView;
const
tamColCalle = 200;
tamColCantidad = 35;
tamColCantidad2 = 15;
tamClaseFactura = 15;
tamColCodigo = 78;
tamColCodigo2 = 35;
tamColCodigo3 = 20;
tamColCodigo4 = 65;
tamColCodigoPostal = 45;
tamColDescripcion = 350;
tamColDescripcion1 = 250;
tamColDescripcion2 = 150;
tamColDescripcion3 = 100;
tamColDescripcion4 = 200;
tamColEMail = 100;
tamColFamilias = 95;
tamColFamilias2 = 50;
tamColFamilias3 = 75;
tamColFecha = 70;
tamColFecha2 = 30;
tamColNIFCIF = 65;
tamColNombre = 200;
tamColNombreAlmacen = 120;
tamColNumPiso = 35;
tamColPorcentaje = 35;
tamColPorcentaje2 = 50;
tamColPorcentaje3 = 30;
tamColPrecio = 65;
tamColPrecio2 = 30;
tamColPrecio3 = 35;
tamColPrecio4 = 45;
tamColPrecio5 = 50;
tamColPrecio6 = 60;
tamColProvincia = 85;
tamColSituacion = 70;
tamColTelefono = 60;
tamColTipo = 55;
tamColUnidadesMedida = 65;
tamColUnidadesMedida2 = 40;
tamColPoblacion = 95;
tamColExistencias = 15;
tamColExistencias2 = 25;
tamColStockMin = 15;
tamColStockMax = 15;
tamColHora = 10;
tamColTipoOperacion = 20;
tamColTipoMovimiento = 20;
tamColFabricante = 85;
tamColCodFabricante = 55;
tamColProveedor = 85;
tamColProveedor2 = 110;
tamColNombreProveedor = 145;
tamColCodProveedor = 65;
tamColPreAceAnuPen = 50;
USER_SYSDBA = 'sysdba';
type
TPTabla = ^TIBDataSet;
TPTablaMem = ^TRxMemoryData;
TdmBaseDatos = class(TDataModule)
private
FBD : TIBDatabase;
FTransaccionBD : TIBTransaction;
FNombreBD : string;
procedure IniciarTablasBackOffice;
procedure IniciarTablas;
function DarTransaccion: TIBTransaction;
function DarUsuario : string;
function DarRutaBD: String;
function DarNombreServidor: String;
function ValidarPrivilegios: Boolean;
public
procedure Commit;
procedure Rollback;
procedure Desconectar;
procedure Conectar (RutaBD : String; Usuario : String; Clave : String); overload;
procedure Conectar (RutaBD : String); overload;
procedure Conectar; overload;
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
function DarFecha : TDateTime;
function DarAno : string;
function DarMes : string;
function DarSeriesFacturas : TStrings;
published
property BD : TIBDatabase read FBD;
property Transaccion : TIBTransaction read FTransaccionBD;
property Usuario : String read DarUsuario;
property NombreBD : String read FNombreBD write FNombreBD;
property RutaBD : String read DarRutaBD;
property NombreServidor : String read DarNombreServidor;
end;
procedure ActivarEdicionGridDetalles(var vGrid: TcxGridDBTableView); overload;
procedure ActivarEdicionGridDetalles(var Grid : TdxDBGrid); overload;
procedure DesactivarEdicionGridDetalles(var Grid: TcxGridDBTableView); overload;
procedure DesactivarEdicionGridDetalles(var Grid : TdxDBGrid); overload;
procedure GetRecordsBookmarkList(AView: TcxGridDBTableView;
aBookMarkList: TList);
var
dmBaseDatos: TdmBaseDatos;
implementation
{$R *.DFM}
uses
Ibquery, dbgrids,
Mensajes, Literales,
TablaArticulos,
TablaProveedores,
TablaClientes,
TablaSucursalesCliente,
TablaPedidosProveedor,
TablaFacturasProveedor,
TablaProvincias,
TablaPoblaciones,
TablaAlmacenes,
TablaArticulosAlmacen,
TablaMovimientos,
TablaFormasPago,
TablaFamilias,
TablaTiposCliente,
TablaPresupuestos,
TablaBancos,
TablaUnidadesMedida,
TablaHistoricoMovimientos,
TablaFacturasCliente,
TablaAlbaranesCliente,
TablaAlbaranesProveedor,
TablaSucursalesProveedor,
TablaInstaladores,
TablaArticulosObraHistorica,
Excepciones, TablaEmpresas,
RdxEmpresaActiva, TablaAlbaranesInstalador, TablaFabricantes;
constructor TdmBaseDatos.Create(AOwner: TComponent);
begin
inherited;
FBD := TIBDatabase.Create(Self);
with FBD do
begin
SQLDialect := 3;
LoginPrompt := False;
end;
FTransaccionBD := TIBTransaction.Create(Self);
with FTransaccionBD do
begin
DefaultAction := TARollbackRetaining;
DefaultDatabase := FBD;
Params.Add('read_committed');
Params.Add('rec_version');
Params.Add('nowait');
end;
FBD.DefaultTransaction := FTransaccionBD;
end;
destructor TdmBaseDatos.Destroy;
begin
Desconectar;
FBD.DefaultTransaction := NIL;
FBD.Free;
FBD := NIL;
FTransaccionBD.Free;
FTransaccionBD := NIL;
inherited;
end;
procedure TdmBaseDatos.IniciarTablas;
begin
Application.CreateForm(TdmTablaAlmacenes, dmTablaAlmacenes);
Application.CreateForm(TdmTablaArticulos, dmTablaArticulos);
Application.CreateForm(TdmTablaProveedores, dmTablaProveedores);
Application.CreateForm(TdmTablaSucursalesProveedor, dmTablaSucursalesProveedor);
Application.CreateForm(TdmTablaPedidosProveedor, dmTablaPedidosProveedor);
Application.CreateForm(TdmTablaFacturasProveedor, dmTablaFacturasProveedor);
Application.CreateForm(TdmTablaClientes, dmTablaClientes);
Application.CreateForm(TdmTablaPresupuestos, dmTablaPresupuestos);
Application.CreateForm(TdmTablaAlbaranesCliente, dmTablaAlbaranesCliente);
Application.CreateForm(TdmTablaAlbaranesProveedor, dmTablaAlbaranesProveedor);
Application.CreateForm(TdmTablaAlbaranesInstalador, dmTablaAlbaranesInstalador);
Application.CreateForm(TdmTablaFacturasCliente, dmTablaFacturasCliente);
Application.CreateForm(TdmTablaSucursalesCliente, dmTablaSucursalesCliente);
Application.CreateForm(TdmTablaArticulosAlmacen, dmTablaArticulosAlmacen);
Application.CreateForm(TdmTablaArticulosObraHistorica, dmTablaArticulosObraHistorica);
Application.CreateForm(TdmTablaMovimientos, dmTablaMovimientos);
Application.CreateForm(TdmTablaHistoricoMovimientos, dmTablaHistoricoMovimientos);
Application.CreateForm(TdmTablaFormasPago, dmTablaFormasPago);
Application.CreateForm(TdmTablaFamilias, dmTablaFamilias);
Application.CreateForm(TdmTablaTiposCliente, dmTablaTiposCliente);
Application.CreateForm(TdmTablaBancos, dmTablaBancos);
Application.CreateForm(TdmTablaUnidadesMedida, dmTablaUnidadesMedida);
Application.CreateForm(TdmTablaInstaladores, dmTablaInstaladores);
Application.CreateForm(TdmTablaFabricantes, dmTablaFabricantes);
end;
function TdmBaseDatos.DarTransaccion: TIBTransaction;
begin
Result := FTransaccionBD;
end;
function TdmBaseDatos.DarAno : string;
var
Ano, Mes, Dia : Word;
begin
DecodeDate(darFecha, ano, mes, dia);
Result := IntToStr(ano);
end;
function TdmBaseDatos.DarMes : string;
var
Ano, Mes, Dia : Word;
begin
DecodeDate(darFecha, ano, mes, dia);
Result := IntToStr(mes);
end;
function TdmBaseDatos.DarUsuario: string;
begin
Result := BD.Params.Values['user_name'];
end;
procedure TdmBaseDatos.Commit;
begin
if FTransaccionBD = NIL then
Exit;
if FTransaccionBD.InTransaction then
FTransaccionBD.CommitRetaining;
end;
procedure TdmBaseDatos.Rollback;
begin
if FTransaccionBD = NIL then
exit;
if FTransaccionBD.InTransaction then
FTransaccionBD.RollbackRetaining;
end;
function TdmBaseDatos.DarSeriesFacturas: TStrings;
var
oSQL : TIBSQL;
Lista : TStringList;
begin
Result := NIL;
oSQL := TIBSQL.Create(Self);
Lista := TStringList.Create;
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select DESCRIPCION from SERIES');
try
Prepare;
ExecQuery;
while not EOF do begin
Lista.Append(Fields[0].AsString);
Next;
end;
Result := Lista;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmBaseDatos.DarFecha: TDateTime;
var
oSQL : TIBSQL;
Fecha : TDateTime;
begin
Result := Date;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := BD;
Transaction := DarTransaccion;
SQL.Add('select CURRENT_DATE from RDB$DATABASE');
try
Prepare;
ExecQuery;
Fecha := Fields[0].AsDateTime;
Result := Fecha;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
procedure TdmBaseDatos.Conectar(RutaBD : String; Usuario : String; Clave : String);
begin
with BD do
begin
DatabaseName := RutaBD;
Params.Clear;
Params.Add('user_name=' + LowerCase(Usuario));
Params.Add('password=' + LowerCase(Clave));
Params.Add('lc_ctype=ISO8859_1');
Params.Add('sql_role_name=usuarios');
try
Screen.Cursor := crHourGlass;
Connected := True;
FTransaccionBD.StartTransaction;
if (validarPrivilegios) then
begin
GestorContadores.BD := FBD;
GestorContadores.Transaccion := FTransaccionBD;
EmpresaActiva.BD := FBD;
EmpresaActiva.Transaccion := FTransaccionBD;
//Asignamos empresa como variable de entorno
IniciarTablasBackOffice;
IniciarTablas;
end
else
begin
Rollback;
Connected := False;
raise EIBError.Create(msgUsuarioInc);
end;
finally
Screen.Cursor := crDefault;
end;
end;
end;
function TdmBaseDatos.DarRutaBD: String;
begin
Result := Copy(BD.DatabaseName, Pos(':', BD.DatabaseName) + 1, MaxInt);
end;
function TdmBaseDatos.DarNombreServidor: String;
begin
//Result := LeftStr(BD.DatabaseName, Pos(':', BD.DatabaseName) - 1);
end;
procedure TdmBaseDatos.Desconectar;
begin
with BD do
begin
try
Screen.Cursor := crHourGlass;
if DefaultTransaction.InTransaction then
DefaultTransaction.Rollback;
Close;
finally
Screen.Cursor := crDefault;
end;
end;
end;
procedure TdmBaseDatos.Conectar;
begin
with BD do
begin
try
Screen.Cursor := crHourGlass;
Connected := True;
FTransaccionBD.StartTransaction;
finally
Screen.Cursor := crDefault;
end;
end;
end;
procedure TdmBaseDatos.Conectar(RutaBD: String);
begin
with BD do
begin
DatabaseName := RutaBD;
Params.Clear;
Params.Add('user_name=' + LowerCase('FACTUGES'));
Params.Add('password=' + LowerCase('FACTUGES'));
Params.Add('lc_ctype=ISO8859_1');
try
Screen.Cursor := crHourGlass;
Connected := True;
FTransaccionBD.StartTransaction;
finally
Screen.Cursor := crDefault;
end;
end;
end;
function TdmBaseDatos.ValidarPrivilegios: Boolean;
begin
//Por si en un futuro se desea establecer una politica de privilegios de usuario
//para cada empresa.
Result := True;
end;
procedure ActivarEdicionGridDetalles(var Grid : TdxDBGrid);
begin
if Grid = NIL then
Exit;
with Grid do
begin
OptionsDB := OptionsDB + [edgoCanAppend, edgoCanDelete, edgoCanInsert,
edgoConfirmDelete];
OptionsBehavior := OptionsBehavior + [edgoEditing, edgoImmediateEditor];
end
end;
procedure DesactivarEdicionGridDetalles(var Grid : TdxDBGrid);
begin
if Grid = NIL then
Exit;
with Grid do
begin
OptionsDB := OptionsDB - [edgoCanAppend, edgoCanDelete, edgoCanInsert,
edgoConfirmDelete];
OptionsBehavior := OptionsBehavior - [edgoEditing, edgoImmediateEditor];
end
end;
procedure TdmBaseDatos.IniciarTablasBackOffice;
begin
Application.CreateForm(TdmTablaProvincias, dmTablaProvincias);
Application.CreateForm(TdmTablaPoblaciones, dmTablaPoblaciones);
// Empresas
Application.CreateForm(TdmTablaEmpresas, dmTablaEmpresas);
end;
procedure ActivarEdicionGridDetalles(var vGrid: TcxGridDBTableView);
begin
if vGrid = NIL then
Exit;
with (vGrid as TcxCustomGridTableView) do
begin
OptionsBehavior.FocusCellOnTab := True;
OptionsBehavior.GoToNextCellOnEnter := True;
OptionsBehavior.ImmediateEditor := True;
OptionsBehavior.AlwaysShowEditor := False;
OptionsSelection.CellSelect := True;
OptionsSelection.InvertSelect := False;
OptionsSelection.HideFocusRect := False;
OptionsData.Appending := True;
OptionsData.Inserting := True;
OptionsData.Editing := True;
{ El borrado se debe controlar en cada pantalla para
que no salga el mensaje en ingl<EFBFBD>s. }
OptionsData.Deleting := False;
OptionsData.DeletingConfirmation := False;
end
end;
procedure DesactivarEdicionGridDetalles(var Grid: TcxGridDBTableView);
begin
if Grid = NIL then
Exit;
with (Grid as TcxCustomGridTableView) do
begin
OptionsBehavior.FocusCellOnTab := True;
OptionsBehavior.GoToNextCellOnEnter := True;
OptionsBehavior.ImmediateEditor := False;
OptionsBehavior.AlwaysShowEditor := False;
OptionsSelection.CellSelect := False;
OptionsSelection.InvertSelect := False;
OptionsSelection.HideFocusRect := True;
OptionsData.Appending := False;
OptionsData.Deleting := False;
OptionsData.DeletingConfirmation := False;
OptionsData.Editing := False;
OptionsData.Inserting := False;
end
end;
procedure GetRecordsBookmarkList(AView: TcxGridDBTableView;
aBookMarkList: TList);
var
AFocusedRecord: TcxCustomGridRecord;
ADataSet: TDataSet;
I: Integer;
begin
aBookMarkList.Clear;
if not Assigned(AView) then
Exit;
ADataSet := AView.DataController.DataSet;
AView.BeginUpdate;
try
AFocusedRecord := AView.Controller.FocusedRecord;
for I := 0 to AView.Controller.SelectedRecordCount - 1 do
begin
AView.Controller.SelectedRecords[I].Focused := True;
aBookMarkList.Add(TBookMarkList(ADataSet.GetBookmark)); ;
end;
if Assigned(AFocusedRecord) then
AFocusedRecord.Focused := True;
finally
AView.EndUpdate;
end;
end;
end.