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/Almacenes/Almacen.pas
2007-06-21 15:47:20 +00:00

997 lines
30 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.8
Fecha versión actual: 13-10-2004
===============================================================================
Modificaciones:
Fecha Comentarios
---------------------------------------------------------------------------
08-10-2001 Se ha añadido en ActivarModoAñadir la comprobación de si es
entidad entAlmacen y si es asi sacar pantalla de elección de
tipo de almacén.
27-11-2001 Se ha modificado CambiarEntidad para que cuando la entidad sea
obra los titulos correspondientes cambien.
07-04-2002 Se ha adaptado a una unica transacción.
24-09-2002 Se producía una excepción si el cursos estaba en el código
del almacén, se pulsaba la tecla 'Esc' y se elegía 'No'.
El frame estaba oculto pero saltaba el evento OnExit del
campo de código de factura.
21-12-2002 Se ha eliminado un error con el campo 'PROVINCIA'. Al estar
situado en ese campo y dar Esc para salir se puede producir
una excepción.
06-03-2004 Se ha eliminado el tratamiento de perfiles de usuario.
07-03-2004 P272. Adaptación a multiempresa.
04-10-2004 Cambio CambiarEntidad para que soporte otro color.
13-10-2004 Se añade la lista de presupuestos asociados
===============================================================================
}
unit Almacen;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Db, IBCustomDataSet, Mask, DBCtrls, Buttons, ToolEdit,
IB, IBSQL, IBDatabase, RdxBarras, RdxBotones, RdxCampos, RdxMemo, RdxComboBox,
RdxCheckBox, RdxTitulos, RdxPaneles, Colores, Mensajes, Tipos,
RdxFrameAlmacenes, cxControls, cxContainer, cxEdit, cxTextEdit, cxDBEdit,
cxMaskEdit, cxButtonEdit, dxCntner, dxTL, dxDBCtrl, dxDBGrid, dxDBTLCL;
type
TfrAlmacen = class(TRdxFrameAlmacenes)
pnlScroll: TRdxScrollPanel;
pnlDatos: TRdxPanel;
ePersona: TLabel;
eTelefono: TLabel;
eCodigoPostal: TLabel;
eProvincia: TLabel;
ePoblacion: TLabel;
eNumero: TLabel;
ePiso: TLabel;
eCalle: TLabel;
eCodigo: TLabel;
cDatosAlmacen: TRdxCabecera;
eNombre: TLabel;
eNombreCliente: TLabel;
eNifCifCliente: TLabel;
eCodigoCliente: TLabel;
Poblacion: TRdxDBEdit;
Provincia: TRdxDBEdit;
Piso: TRdxDBEdit;
Numero: TRdxDBEdit;
Calle: TRdxDBEdit;
PersonaContacto: TRdxDBEdit;
Nombre: TRdxDBEdit;
CodigoPostal: TRdxDBEdit;
Telefono: TRdxDBEdit;
brSimple: TRdxBarraInferior;
bSalir: TRdxBoton;
brDoble: TRdxBarraInferior;
bGuardar: TRdxBoton;
bCancelarGuardar: TRdxBoton;
dsAlmacen: TDataSource;
Titulo: TRdxPanelTituloOperacion;
NomCliente: TRdxDBEdit;
NifCifCliente: TRdxDBEdit;
Codigo: TcxDBButtonEdit;
CodCliente: TcxDBButtonEdit;
pnlListaPresupuestos: TRdxPanel;
bAgragar: TRdxBoton;
pnlGridArticulos: TPanel;
gridDetalles: TdxDBGrid;
RdxPanel2: TRdxPanel;
eListaProveedores: TLabel;
dsObrasPresupuestos: TDataSource;
pnlBarraGrid: TRdxPanel;
bEliminar: TRdxBoton;
bElminarTodo: TRdxBoton;
bAnadir: TRdxBoton;
eClienteAsociado: TLabel;
procedure CodigoPropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
procedure CodigoPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
procedure CodClientePropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
procedure CodClientePropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
procedure ProvinciaButtonClick(Sender: TObject);
procedure PoblacionButtonClick(Sender: TObject);
procedure bAceptarClick(Sender: TObject);
procedure bCancelarGuardarClick(Sender: TObject);
procedure bSalirClick(Sender: TObject);
procedure ProvinciaSetText(Sender: TField; const Text: String);
procedure bAnadirClick(Sender: TObject);
procedure bEliminarClick(Sender: TObject);
procedure bElminarTodoClick(Sender: TObject);
private
FCodigoProvincia : Variant;
FCodigoPoblacion : Variant;
FCodigoCliente : Variant;
FTablaObrasPresupuestos : TIBDataSet;
FCodigoPresupuesto: Variant;
procedure SetCodigoPresupuesto(const Value: Variant);
procedure limpiarCampos;
protected
procedure ActivarModoAnadir; override;
procedure ActivarModoModificar; override;
procedure ActivarModoConsultar; override;
procedure ActivarModoEliminar; override;
function AnadirDatos : Boolean; override;
function ModificarDatos : Boolean; override;
function EliminarDatos : Boolean; override;
function CancelarAnadir : Boolean; override;
function CancelarModificar : Boolean; override;
function CancelarEliminar : Boolean; override;
procedure SetCodigoProvincia (Value : Variant); virtual;
procedure SetCodigoPoblacion (Value : Variant); virtual;
procedure SetCodigoCliente (Value : Variant);
procedure BuscarAlmacen; override;
procedure BuscarCliente;
procedure VerModal; override;
procedure FreeContenido; override;
function ComprobarDatos: Boolean; override;
function CambiarEntidad (EntidadAnterior, Entidad : TRdxEntidad): Boolean; override;
public
property CodigoProvincia : Variant read FCodigoProvincia write SetCodigoProvincia;
property CodigoPoblacion : Variant read FCodigoPoblacion write SetCodigoPoblacion;
property CodigoCliente : Variant read FCodigoCliente write SetCodigoCliente;
property CodigoPresupuesto : Variant read FCodigoPresupuesto write SetCodigoPresupuesto;
constructor Create (AOwner : TComponent); override;
destructor Destroy; override;
procedure GridBotonCodigoPresupuestoClick(Sender: TObject);
published
property TablaAlmacenes;
property CodigoAlmacen;
end;
var
frAlmacen: TfrAlmacen;
implementation
{$R *.DFM}
uses
BaseDatos, TablaAlmacenes, Almacenes, RdxFrameProvincias, Provincias,
TablaProvincias, RdxFramePoblaciones, Poblaciones, RdxFrameClientes,
Clientes, TablaClientes, TablaPoblaciones, TablaPedidosProveedor,
ElegirTipoAlmacen, Excepciones, IBErrorCodes, Configuracion, NumFunc,
RdxEmpresaActiva, StrFunc, Literales, PresupuestosClientes, RdxFramePresupuestos;
constructor TfrAlmacen.Create (AOwner : TComponent);
begin
inherited Create(AOwner);
FCodigoProvincia := NULL;
FCodigoPoblacion := NULL;
FCodigoCliente := NULL;
BaseDatos := dmBaseDatos.BD;
Transaccion := dmBaseDatos.Transaccion;
TablaAlmacenes := TIBDataSet.Create(Self);
dsAlmacen.DataSet := TablaAlmacenes;
//No asignamos ninguna sentencia sql hasta que no se le asigna una entidad
with TablaAlmacenes do
begin
Database := BaseDatos;
Transaction := Transaccion;
end;
FTablaObrasPresupuestos := TIBDataSet.Create(Self);
dsObrasPresupuestos.DataSet := FTablaObrasPresupuestos;
with FTablaObrasPresupuestos do
begin
Database := BaseDatos;
Transaction := Transaccion;
SelectSQL.Assign(dmTablaAlmacenes.sqlConsultarPresupuesto);
InsertSQL.Assign(dmTablaAlmacenes.sqlInsertarPresupuesto);
ModifySQL.Assign(dmTablaAlmacenes.sqlModificarPresupuesto);
DeleteSQL.Assign(dmTablaAlmacenes.sqlEliminarPresupuesto);
RefreshSQL.Assign(dmTablaAlmacenes.sqlConsultarPresupuesto);
end;
dmTablaAlmacenes.InicializarGridDetallesPresupuestos(gridDetalles);
Entidad := entAlmacenFisico;
ConfigurarFrame(Self, Self.Entidad);
end;
destructor TfrAlmacen.Destroy;
begin
TablaAlmacenes.Close;
TablaAlmacenes.UnPrepare;
TablaAlmacenes.Free;
FTablaObrasPresupuestos.Close;
FTablaObrasPresupuestos.UnPrepare;
FTablaObrasPresupuestos.Free;
inherited;
end;
procedure TfrAlmacen.BuscarAlmacen;
begin
if Transaccion = NIL then
exit;
try
TablaAlmacenes.Close;
// Buscar la fila a tratar si es necesario
if not VarIsNull(CodigoAlmacen) then
TablaAlmacenes.Params.ByName('CODIGO').AsString := CodigoAlmacen;
TablaAlmacenes.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
TablaAlmacenes.Prepare;
TablaAlmacenes.Open;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlmacen.SetCodigoProvincia(Value: Variant);
begin
if (not VarIsNull(FCodigoProvincia)) and (FCodigoProvincia = Value) then
Exit;
if (not VarIsNull(Value)) then
begin
FCodigoProvincia := Value;
Provincia.Field.AsString := dmTablaProvincias.darNombreProvincia(FCodigoProvincia);
end;
end;
procedure TfrAlmacen.SetCodigoPoblacion(Value: Variant);
begin
if (not VarIsNull(FCodigoPoblacion)) and (FCodigoPoblacion = Value) then
Exit;
if (not VarIsNull(Value)) then
begin
FCodigoPoblacion := Value;
Poblacion.Field.AsString := dmTablaPoblaciones.darNombrePoblacion(FCodigoProvincia, FCodigoPoblacion);
end;
end;
procedure TfrAlmacen.SetCodigoCliente(Value: Variant);
begin
if (not VarIsNull(FCodigoCliente)) and (FCodigoCliente = Value) then
Exit;
if (not VarIsNull(Value)) then
begin
FCodigoCliente := Value;
CodCliente.DataBinding.Field.AsString := Value;
BuscarCliente;
end
else
limpiarCampos;
end;
procedure TfrAlmacen.BuscarCliente;
var
Datos: TDatosCliente;
begin
Datos := TDatosCliente.Create;
Datos.Codigo := CodigoCliente;
if not dmTablaClientes.darDatosCliente(Datos) then
begin
VerMensajeFmt(msgCliCodCliNoExiste, [CodCliente.Text]);
CodCliente.SetFocus;
exit;
end;
NifCifCliente.Field.asString := Datos.Nifcif;
NomCliente.Field.asString := Datos.Nombre;
if (VerMensajePreguntaSN(msgAlmDeseaRellCli) = IDYES) then
begin
Calle.Field.asString := Datos.Calle;
Numero.Field.asString := Datos.Numero;
Piso.Field.asString := Datos.Piso;
Provincia.Field.asString := Datos.Provincia;
CodigoPostal.Field.asString := Datos.CodigoPostal;
Poblacion.Field.asString := Datos.Poblacion;
Telefono.Field.asString := Datos.Telefono1;
end;
Datos.Free;
end;
procedure TfrAlmacen.FreeContenido;
begin
if (ContenidoModal is TRdxFrameAlmacenes) then begin
CodigoAlmacen := (ContenidoModal as TRdxFrameAlmacenes).CodigoAlmacen;
ActivarModo;
end;
if (ContenidoModal is TRdxFrameProvincias) then
CodigoProvincia := (ContenidoModal as TRdxFrameProvincias).CodigoProvincia;
if (ContenidoModal is TRdxFramePoblaciones) then begin
CodigoProvincia := (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia;
CodigoPoblacion := (ContenidoModal as TRdxFramePoblaciones).CodigoPoblacion;
end;
if (ContenidoModal is TRdxFrameClientes) then begin
CodigoCliente := (ContenidoModal as TRdxFrameClientes).CodigoCliente;
end;
if (ContenidoModal is TRdxFramePresupuestos) then begin
CodigoPresupuesto := (ContenidoModal as TRdxFramePresupuestos).CodigoPresupuesto;
end;
if (ContenidoModal is TfrElegirTipoAlmacen) then begin
if(ContenidoModal as TfrElegirTipoAlmacen).TipoFisico
then Entidad := entAlmacenFisico
else Entidad := entAlmacenObra;
end;
inherited FreeContenido;
end;
procedure TfrAlmacen.VerModal;
begin
if (ContenidoModal is TRdxFramePoblaciones) then
(ContenidoModal as TRdxFramePoblaciones).CodigoProvincia := CodigoProvincia;
inherited VerModal;
end;
function TfrAlmacen.AnadirDatos : Boolean;
begin
Result := False;
try
TablaAlmacenes.Post;
TablaAlmacenes.ApplyUpdates;
FTablaObrasPresupuestos.ApplyUpdates;
dmTablaAlmacenes.incrementarCodigo;
FCodigoAlmacen := TablaAlmacenes.FieldByName('CODIGO').AsString;
Commit;
TablaAlmacenes.CachedUpdates := False;
TablaAlmacenes.Close;
FTablaObrasPresupuestos.CachedUpdates := False;
FTablaObrasPresupuestos.Close;
Result := True;
except
on E : EIBError do begin
if E.IBErrorCode = isc_unique_key_violation then begin
VerMensajeFmt(msgAlmCodAlmRepetido, [Codigo.DataBinding.Field.AsString]);
TablaAlmacenes.Edit;
end
else
TratarExcepcion(E);
end;
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrAlmacen.ModificarDatos : Boolean;
begin
Result := False;
try
TablaAlmacenes.Post;
FTablaObrasPresupuestos.ApplyUpdates;
Commit;
TablaAlmacenes.Close;
FTablaObrasPresupuestos.CachedUpdates := False;
FTablaObrasPresupuestos.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrAlmacen.EliminarDatos : Boolean;
begin
Result := False;
try
TablaAlmacenes.Delete;
Commit;
TablaAlmacenes.Close;
FTablaObrasPresupuestos.Close;
Result := True;
except
on E : EIBError do
begin
case E.IBErrorCode of
isc_lock_conflict : VerMensajeFmt(msgAlmBloqueado, [Codigo.DataBinding.Field.AsString]);
else
TratarExcepcion(E);
end;
end;
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlmacen.activarModoAnadir;
begin
{Si la entidad asignada es entAlmacenes,quiere decir que el frame ha sido llamado
desde el frame pedido de proveedor, y por tanto hay que exigir que tipo de
almacen desea dar de alta}
if entidad = entAlmacen then
begin
CaptionModal := 'Añadir almacén';
WidthModal := 350;
HeightModal := 160;
ModoModal := Emitir;
ContenidoModal := TfrElegirTipoAlmacen.Create(Self);
end;
CodCliente.Properties.Buttons[0].Visible := True;
CodCliente.Properties.ReadOnly := False;
CodCliente.Properties.OnValidate := CodClientePropertiesValidate;
dsAlmacen.AutoEdit := True;
Codigo.Properties.Buttons[0].Visible := False;
Codigo.Properties.ReadOnly := False;
Codigo.Properties.OnValidate := CodigoPropertiesValidate;
Provincia.VerBoton := True;
Poblacion.VerBoton := True;
try
TablaAlmacenes.Close;
TablaAlmacenes.CachedUpdates := True;
TablaAlmacenes.Open;
TablaAlmacenes.FieldByName('PROVINCIA').OnSetText := ProvinciaSetText;
TablaAlmacenes.Insert;
TablaAlmacenes.FieldByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
//Para que no detecte que el campo not null Tipo esta vacio
TablaAlmacenes.FieldByName('TIPO').asString := '-';
Codigo.DataBinding.Field.asString := dmTablaAlmacenes.darNuevoCodigo;
pnlBarraGrid.Visible := True;
FTablaObrasPresupuestos.Close;
FTablaObrasPresupuestos.CachedUpdates := True;
FTablaObrasPresupuestos.Open;
ActivarEdicionGridDetalles(gridDetalles);
{ Inicializar la tabla de detalles }
(gridDetalles.ColumnByFieldName('CODIGOPRESUPUESTO')
as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonCodigoPresupuestoClick;
Visible := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlmacen.activarModoModificar;
begin
CodCliente.Properties.Buttons[0].Visible := True;
CodCliente.Properties.ReadOnly := False;
CodCliente.Properties.OnValidate := CodClientePropertiesValidate;
dsAlmacen.AutoEdit := True;
Codigo.Properties.Buttons[0].Visible := True;
Codigo.Properties.ReadOnly := True;
Codigo.Properties.OnValidate := nil;
Provincia.VerBoton := True;
Poblacion.VerBoton := True;
// Para que no haga dos accesos a la tabla cuando es consulta
FCodigoProvincia := dmTablaProvincias.darCodigoProvincia(Provincia.Text);
try
TablaAlmacenes.Open;
TablaAlmacenes.FieldByName('PROVINCIA').OnSetText := ProvinciaSetText;
if TablaAlmacenes.RecordCount = 0 then
begin
VerMensajeFmt(msgAlmNoExisteAlm, [CodigoAlmacen]);
CancelarModificar;
CloseFrame;
Exit;
end;
TablaAlmacenes.Edit;
TablaAlmacenes.Post;
TablaAlmacenes.Edit;
pnlBarraGrid.Visible := True;
FTablaObrasPresupuestos.Close;
FTablaObrasPresupuestos.CachedUpdates := True;
FTablaObrasPresupuestos.ParamByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo;
FTablaObrasPresupuestos.ParamByName('CODIGOALMACEN').AsString := CodigoAlmacen;
FTablaObrasPresupuestos.Prepare;
FTablaObrasPresupuestos.Open;
ActivarEdicionGridDetalles(gridDetalles);
{ Inicializar la tabla de detalles }
(gridDetalles.ColumnByFieldName('CODIGOPRESUPUESTO')
as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonCodigoPresupuestoClick;
Visible := True;
except
on E : EIBError do
begin
case E.IBErrorCode of
isc_lock_conflict : begin
VerMensajeFmt(msgAlmBloqueado, [CodigoAlmacen]);
CancelarModificar;
CloseFrame;
Exit;
end
else
TratarExcepcion(E);
end;
end;
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlmacen.activarModoConsultar;
begin
CodCliente.Properties.Buttons[0].Visible := False;
CodCliente.Properties.ReadOnly := True;
CodCliente.Properties.OnValidate := Nil;
dsAlmacen.AutoEdit := False;
Codigo.Properties.Buttons[0].Visible := True;
Codigo.Properties.OnValidate := nil;
Provincia.OnExit := nil;
Provincia.VerBoton := False;
Poblacion.VerBoton := False;
try
TablaAlmacenes.Open;
if TablaAlmacenes.RecordCount = 0 then
begin
VerMensajeFmt(msgAlmNoExisteAlm, [CodigoAlmacen]);
CloseFrame;
Exit;
end;
TablaAlmacenes.Cancel;
pnlBarraGrid.Visible := False;
FTablaObrasPresupuestos.Close;
FTablaObrasPresupuestos.ParamByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo;
FTablaObrasPresupuestos.ParamByName('CODIGOALMACEN').AsString := CodigoAlmacen;
FTablaObrasPresupuestos.Prepare;
FTablaObrasPresupuestos.Open;
DesactivarEdicionGridDetalles(gridDetalles);
{ Inicializar la tabla de detalles }
(gridDetalles.ColumnByFieldName('CODIGOPRESUPUESTO')
as TdxDBTreeListButtonColumn).OnEditButtonClick := Nil;
Visible := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlmacen.activarModoEliminar;
begin
CodCliente.Properties.Buttons[0].Visible := False;
CodCliente.Properties.ReadOnly := True;
CodCliente.Properties.OnValidate := Nil;
dsAlmacen.AutoEdit := False;
Codigo.Properties.Buttons[0].Visible := True;
Codigo.Properties.OnValidate := nil;
Provincia.OnExit := nil;
Provincia.VerBoton := False;
Poblacion.VerBoton := False;
try
TablaAlmacenes.Open;
if TablaAlmacenes.RecordCount = 0 then
begin
VerMensajeFmt(msgAlmNoExisteAlm, [CodigoAlmacen]);
CancelarEliminar;
CloseFrame;
Exit;
end;
TablaAlmacenes.Cancel;
pnlBarraGrid.Visible := False;
FTablaObrasPresupuestos.Close;
FTablaObrasPresupuestos.ParamByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo;
FTablaObrasPresupuestos.ParamByName('CODIGOALMACEN').AsString := CodigoAlmacen;
FTablaObrasPresupuestos.Prepare;
FTablaObrasPresupuestos.Open;
DesactivarEdicionGridDetalles(gridDetalles);
{ Inicializar la tabla de detalles }
(gridDetalles.ColumnByFieldName('CODIGOPRESUPUESTO')
as TdxDBTreeListButtonColumn).OnEditButtonClick := Nil;
Visible := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlmacen.ProvinciaButtonClick(Sender: TObject);
begin
CaptionModal := 'Lista de provincias';
WidthModal := 280;
HeightModal := 460;
ContenidoModal := TfrProvincias.Create(Self);
end;
procedure TfrAlmacen.PoblacionButtonClick(Sender: TObject);
begin
if (VarIsNull(CodigoProvincia)) then begin
VerMensaje(msgSinProvincia);
Provincia.SetFocus;
Exit;
end;
CaptionModal := Format(msgListaPoblaciones, [Provincia.Text]);
WidthModal := 280;
HeightModal := 460;
ContenidoModal := TfrPoblaciones.Create(Self);
end;
procedure TfrAlmacen.bAceptarClick(Sender: TObject);
begin
if (RealizarOperacion) then
CloseFrame;
end;
function TfrAlmacen.CancelarAnadir: Boolean;
begin
Result := False;
try
TablaAlmacenes.CancelUpdates;
FTablaObrasPresupuestos.CancelUpdates;
RollBack;
TablaAlmacenes.CachedUpdates := False;
TablaAlmacenes.Close;
FTablaObrasPresupuestos.CachedUpdates := False;
FTablaObrasPresupuestos.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrAlmacen.CancelarEliminar: Boolean;
begin
Result := False;
try
RollBack;
TablaAlmacenes.Close;
FTablaObrasPresupuestos.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrAlmacen.CancelarModificar: Boolean;
begin
Result := False;
try
FTablaObrasPresupuestos.CancelUpdates;
RollBack;
TablaAlmacenes.Close;
FTablaObrasPresupuestos.CachedUpdates := False;
FTablaObrasPresupuestos.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlmacen.bSalirClick(Sender: TObject);
begin
try
Rollback;
CloseFrame;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlmacen.bCancelarGuardarClick(Sender: TObject);
begin
if (TratarCambios = IDOK) then
CloseFrame;
end;
function TfrAlmacen.CambiarEntidad(EntidadAnterior, Entidad: TRdxEntidad): Boolean;
begin
{ Si se realiza el cambio de entidad en carga del dfm o no se puede cambiar
de entidad porque no se puede liberar el contenido del frame al que se
cambia de entidad, no se hace nada}
if not inherited CambiarEntidad(EntidadAnterior, Entidad) then
Exit;
ConfigurarFrame(Self, Self.Entidad);
with TablaAlmacenes do
begin
Close;
SelectSQL.Assign(dmTablaAlmacenes.sqlConsultar);
ModifySQL.Assign(dmTablaAlmacenes.sqlModificar);
DeleteSQL.Assign(dmTablaAlmacenes.sqlEliminar);
RefreshSQL.Assign(dmTablaAlmacenes.sqlConsultar);
Case Entidad of
entAlmacenFisico : begin
InsertSQL.Assign(dmTablaAlmacenes.sqlInsertarFisicos);
pnlListaPresupuestos.Visible := False;
end;
entAlmacenObra : begin
InsertSQL.Assign(dmTablaAlmacenes.sqlInsertarObras);
cDatosAlmacen.Caption := 'Datos de obra';
pnlListaPresupuestos.Visible := True;
end;
end;
end;
end;
function TfrAlmacen.ComprobarDatos: Boolean;
var
CodigoPedido : String;
Situacion : String;
begin
Result := False;
CodigoPedido := '';
Situacion := '';
if Length(Trim(Nombre.Text)) = 0 then
begin
VerMensaje(msgAlmFaltaNombre);
Nombre.SetFocus;
Exit;
end;
if (Modo = Eliminar) then
begin
if dmTablaAlmacenes.HayExistenciasEnAlmacen(EmpresaActiva.Codigo, CodigoAlmacen) then
begin
VerMensaje(msgAlmTieneExis);
Exit;
end;
if dmTablaPedidosProveedor.existeAlmacenEnPedido(EmpresaActiva.Codigo, CodigoAlmacen, CodigoPedido, Situacion) then
begin
if Situacion = 'Totalmente recibido'
then VerMensajeFmt(msgAlmCodAlmTienePedido,[CodigoPedido,Situacion])
else VerMensajeFmt(msgAlmCodAlmTienePedidoPendiente,[CodigoPedido,Situacion]);
Exit;
end;
end;
Result := True;
end;
procedure TfrAlmacen.ProvinciaSetText(Sender: TField; const Text: String);
begin
FCodigoProvincia := dmTablaProvincias.darCodigoProvincia(Text);
Sender.AsString := Text;
end;
procedure TfrAlmacen.CodigoPropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
var
Valor : Variant;
begin
if (Modo <> Anadir) or (Visible = false) then
exit;
if EsCadenaVacia(DisplayValue) then
DisplayValue := dmTablaAlmacenes.darNuevoCodigo;
if (dmTablaAlmacenes.ValidarCodigo(DisplayValue)) then
begin
//Comprueba que le numero es lo sufucientemente pequeño para ser un entero
if not EsSmallInt(DisplayValue) then
begin
VerMensajeFmt(msgAlmCodAlmIncorrecto,[DisplayValue]);
Codigo.SetFocus;
end
else if (dmTablaAlmacenes.ExisteAlmacen(EmpresaActiva.Codigo, DisplayValue)) then begin
VerMensajeFmt(msgAlmCodAlmRepetido, [DisplayValue]);
Codigo.SetFocus;
end;
end
else begin
VerMensajeFmt(msgAlmCodAlmIncorrecto, [DisplayValue]);
Codigo.SetFocus;
end;
end;
procedure TfrAlmacen.CodigoPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
begin
if (TratarCambios = IDCANCEL) then
exit;
{ Esto es porque en modo 'Modificar' hacemos un cambio y pulsamos
este botón se cierra la tabla y si en el frame hijo (el del grid) damos
a cancelar, FCodigoAlmacen es NULL y da error al activar modo porque
no se inicializa los parámetros de la sql. Lo hace BuscarAlmacenes. }
if not TablaAlmacenes.Active then
BuscarAlmacen;
EntidadModal := Entidad;
ContenidoModal := TfrAlmacenes.Create(Self);
end;
procedure TfrAlmacen.CodClientePropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
begin
inherited;
ContenidoModal := TfrClientes.Create(Self);
end;
procedure TfrAlmacen.CodClientePropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
var
Valor : String;
begin
//Por si se deja vacio el campo
if EsCadenaVacia(DisplayValue) then
begin
limpiarCampos;
exit
end;
if (dmTablaClientes.validarCodigo(DisplayValue)) then
//Comprueba que le numero es lo sufucientemente pequeño para ser un entero
if not EsInteger(DisplayValue) then
begin
VerMensajeFmt(msgCliCodCliIncorrecto,[DisplayValue]);
CodCliente.Text:= '0';
CodCliente.SetFocus;
end
else
CodigoCliente := dmTablaClientes.formatearCodigo(DisplayValue)
else
begin
VerMensajeFmt(msgCliCodCliIncorrecto, [DisplayValue]);
CodCliente.SetFocus;
end;
end;
procedure TfrAlmacen.bAnadirClick(Sender: TObject);
begin
try
with FTablaObrasPresupuestos do
begin
DisableControls;
Next;
if EOF then
Append
else
Insert;
EnableControls;
end;
gridDetalles.SetFocus;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlmacen.bEliminarClick(Sender: TObject);
begin
if (VerMensajePregunta(msgDeseaBorrar) <> IDYES) then
Exit;
if FTablaObrasPresupuestos.RecordCount = 0 then begin
{ Hacemos un cancel de la tabla por si el registro actual estuviera
recien creado }
FTablaObrasPresupuestos.Cancel;
exit
end;
try
FTablaObrasPresupuestos.Delete;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlmacen.GridBotonCodigoPresupuestoClick(Sender: TObject);
begin
// TablaDetallesMem.Edit;
WidthModal := 900;
HeightModal := 700;
ContenidoModal := TfrPresupuestosClientes.Create(Self);
end;
procedure TfrAlmacen.SetCodigoPresupuesto(const Value: Variant);
begin
FCodigoPresupuesto := Value;
FTablaObrasPresupuestos.Edit;
FTablaObrasPresupuestos.FieldByName('CODIGOPRESUPUESTO').AsString := FCodigoPresupuesto;
FTablaObrasPresupuestos.FieldByName('CODIGOALMACEN').AsString := TablaAlmacenes.FieldByName('CODIGO').AsString;
FTablaObrasPresupuestos.FieldByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo;
end;
procedure TfrAlmacen.bElminarTodoClick(Sender: TObject);
begin
if (VerMensajePregunta(msgDeseaBorrarTodo) <> IDYES) then
Exit;
try
FTablaObrasPresupuestos.DisableControls;
FTablaObrasPresupuestos.Last;
while FTablaObrasPresupuestos.RecordCount > 0 do begin
FTablaObrasPresupuestos.Delete;
FTablaObrasPresupuestos.Prior;
end;
FTablaObrasPresupuestos.EnableControls;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlmacen.limpiarCampos;
begin
CodCliente.DataBinding.Field.asString := '';
NifCifCliente.Field.asString := '';
NomCliente.Field.asString := '';
Calle.Field.asString := '';
Numero.Field.asString := '';
Piso.Field.asString := '';
Provincia.Field.asString := '';
CodigoPostal.Field.asString := '';
Poblacion.Field.asString := '';
Telefono.Field.asString := '';
end;
end.