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/Datos/Propiedades.pas

637 lines
18 KiB
ObjectPascal
Raw Normal View History

{
===============================================================================
Copyright (<EFBFBD>) 2002. 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: 19-08-2003
Versi<EFBFBD>n actual: 1.0.0
Fecha versi<EFBFBD>n actual: 19-08-2003
===============================================================================
Modificaciones:
Fecha Comentarios
---------------------------------------------------------------------------
===============================================================================
}
unit Propiedades;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, RdxBotones, RdxBarras, Grids, DBGrids, RXDBCtrl, ExtCtrls, RdxPaneles,
IBCustomDataSet, IBQuery, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxEdit, cxDBData,
cxGridLevel, cxClasses, cxControls, cxGridCustomView, Configuracion,
cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid,
RdxDBFrame, cxGridCardView, cxGridDBCardView, IB, IBErrorCodes, StdCtrls,
cxContainer, cxTextEdit, cxMaskEdit, cxDropDownEdit, cxDBEdit, ActnList,
RdxRadioButton, Entidades, Menus, am2000menuitem, am2000utils,
am2000popupmenu, am2000, cxDataStorage;
type
TfrPropiedades = class(TRdxDBFrame)
BarraPropiedades: TRdxBarraSuperior;
dsPropiedades: TDataSource;
bAnadir: TRdxBoton;
bEliminar: TRdxBoton;
gridPropiedades: TcxGrid;
VistaPropiedades: TcxGridDBTableView;
gridPropiedadesLevel1: TcxGridLevel;
pnlOpciones: TGroupBox;
pnlGridValores: TRdxPanel;
gridValores: TcxGrid;
VistaValores: TcxGridDBTableView;
gridValoresLevel1: TcxGridLevel;
RdxPanel1: TRdxPanel;
bAnadirValor: TRdxBoton;
bEliminarValor: TRdxBoton;
dsValores: TDataSource;
Op1: TRdxRadioButton;
Op3: TRdxRadioButton;
Op2: TRdxRadioButton;
cbxPropiedad: TcxComboBox;
Acciones: TActionList;
actAnadirProp: TAction;
actEliminarProp: TAction;
actOpc1: TAction;
actOpc2: TAction;
actOpc3: TAction;
actAnadirValor: TAction;
actEliminarValor: TAction;
bAceptar: TRdxBoton;
bCancelar: TRdxBoton;
pnlCuerpo: TPanel;
brOperacion: TRdxBarraInferior;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
RdxPanel2: TRdxPanel;
imgSombra: TImage;
MenuOpcionesImg: TPopupMenu2000;
mCortar: TMenuItem2000;
mCopiar: TMenuItem2000;
mPegar: TMenuItem2000;
mInsertar: TMenuItem2000;
ActionList1: TActionList;
actInsertar: TAction;
actCopiar: TAction;
actCortar: TAction;
actPegar: TAction;
bImagen: TRdxBotonMenu;
actEliminar: TAction;
mEliminar: TMenuItem2000;
actGuardar: TAction;
mGuardar: TMenuItem2000;
MenuItem1: TMenuItem2000;
procedure bAceptarClick(Sender: TObject);
procedure bCancelarClick(Sender: TObject);
procedure actAnadirPropExecute(Sender: TObject);
procedure actEliminarPropExecute(Sender: TObject);
procedure actAnadirValorExecute(Sender: TObject);
procedure actEliminarValorExecute(Sender: TObject);
procedure actOpc2Execute(Sender: TObject);
procedure actAnadirValorUpdate(Sender: TObject);
procedure actAnadirPropUpdate(Sender: TObject);
procedure actEliminarPropUpdate(Sender: TObject);
procedure actOpc1Update(Sender: TObject);
procedure cbxPropiedadPropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
procedure actOpc1Execute(Sender: TObject);
procedure actOpc3Execute(Sender: TObject);
procedure actInsertarExecute(Sender: TObject);
procedure actCopiarExecute(Sender: TObject);
procedure actPegarExecute(Sender: TObject);
procedure actEliminarExecute(Sender: TObject);
procedure actCortarExecute(Sender: TObject);
procedure actGuardarExecute(Sender: TObject);
private
FCodigoProp : Variant;
FPropiedadCodigo : TStringList;
FCodigoPropiedad : TStringList;
TablaPropiedades : TIBDataSet;
TablaValores : TIBDataSet;
FCodigoPro: Variant;
procedure SetCodigoPro(const Value: Variant);
property CodigoPro : Variant read FCodigoPro write SetCodigoPro;
procedure RecargarDatos;
procedure GuardarDatos;
procedure BorrarTodo;
procedure ValoresOnNewRecord(DataSet: TDataSet);
procedure PropiedadesNewRecord(DataSet: TDataSet);
procedure PropiedadesAfterPost(DataSet: TDataSet);
procedure PropiedadesAfterInsert(DataSet: TDataSet);
protected
procedure ActivarModoAnadir; override;
function CambiarEntidad(EntidadAnterior, Entidad : TRdxEntidad): Boolean; override;
public
constructor Create (AOwner : TComponent); override;
destructor Destroy; override;
published
procedure AppException(Sender: TObject; E: Exception);
procedure VistaPropiedadesFocusedRecordChanged(
Sender: TcxCustomGridTableView; APrevFocusedRecord,
AFocusedRecord: TcxCustomGridRecord;
ANewItemRecordFocusingChanged: Boolean);
end;
var
frPropiedades: TfrPropiedades;
implementation
{$R *.DFM}
{ TfrPropiedades2 }
uses
BaseDatos, TablaPropiedades, TablaValores, Mensajes,
Excepciones, Literales, StrFunc, Variants, jpeg;
constructor TfrPropiedades.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Entidad := entOpciones;
ConfigurarFrame(Self, Entidad);
Application.OnException := AppException;
BaseDatos := dmBaseDatos.BD;
Transaccion := dmBaseDatos.Transaccion;
TablaPropiedades := TIBDataSet.Create(Self);
with TablaPropiedades do
begin
Database := BaseDatos;
Transaction := Transaccion;
InsertSQL.Assign(dmTablaPropiedades.sqlInsertar);
ModifySQL.Assign(dmTablaPropiedades.sqlModificar);
DeleteSQL.Assign(dmTablaPropiedades.sqlEliminar);
SelectSQL.Assign(dmTablaPropiedades.sqlConsultar);
AfterPost := PropiedadesAfterPost;
AfterInsert := PropiedadesAfterInsert;
OnNewRecord := PropiedadesNewRecord;
end;
dsPropiedades.DataSet := TablaPropiedades;
TablaValores := TIBDataSet.Create(Self);
with TablaValores do
begin
Database := BaseDatos;
Transaction := Transaccion;
InsertSQL.Assign(dmTablaValores.sqlInsertar);
ModifySQL.Assign(dmTablaValores.sqlModificar);
DeleteSQL.Assign(dmTablaValores.sqlEliminar);
SelectSQL.Assign(dmTablaValores.sqlConsultar);
OnNewRecord := ValoresOnNewRecord;
end;
dsValores.DataSet := TablaValores;
end;
destructor TfrPropiedades.Destroy;
begin
Application.OnException := NIL;
TablaPropiedades.Close;
TablaPropiedades.UnPrepare;
TablaPropiedades.Free;
TablaValores.Close;
TablaValores.UnPrepare;
TablaValores.Free;
FPropiedadCodigo.Free;
FCodigoPropiedad.Free;
inherited;
end;
procedure TfrPropiedades.bAceptarClick(Sender: TObject);
begin
if TablaPropiedades.State in dsEditModes then
TablaPropiedades.Post;
GuardarDatos;
Commit;
CloseFrame;
end;
procedure TfrPropiedades.bCancelarClick(Sender: TObject);
begin
try
Rollback;
CloseFrame;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrPropiedades.AppException(Sender: TObject; E: Exception);
begin
if E.Message = 'Field ''DESCRIPCION'' must have a value' then begin
VerMensaje(msgDatosFaltaDescripcionProp);
TablaPropiedades.Edit;
end
else if E.Message = 'violation of PRIMARY or UNIQUE KEY constraint "PK_PROPIEDADES" on table "PROPIEDADES"' then begin
VerMensajeFmt(msgDatosPropiedadRepetida, [UpperCase(TablaPropiedades.FieldByName('DESCRIPCION').AsString)]);
TablaPropiedades.Edit;
end
else
TratarExcepcion(E);
end;
procedure TfrPropiedades.ActivarModoAnadir;
begin
try
with TablaPropiedades do
begin
Prepare;
Open;
if RecordCount = 0 then
begin
Edit;
FieldByName('DESCRIPCION').AsString := ' ';
Post;
Delete
end
else begin
Edit;
Post;
end;
end;
dmTablaPropiedades.InicializarGridPropiedades(VistaPropiedades);
dmTablaValores.InicializarGridValores(VistaValores);
VistaPropiedades.OnFocusedRecordChanged := VistaPropiedadesFocusedRecordChanged;
VistaPropiedades.DataController.GotoFirst;
//Asignamos el codigo de propiedad para establecer valores de la misma
if TablaPropiedades.RecordCount > 0 then
CodigoPro := TablaPropiedades.FieldByName('CODIGO').AsString;
except
on E : EIBError do
begin
case E.IBErrorCode of
isc_lock_conflict : begin
Rollback;
VerMensaje(msgDatosTablaPropBloqueada);
CloseFrame;
end
else begin
Rollback;
TratarExcepcion(E);
end;
end;
end;
on E : Exception do begin
Rollback;
TratarExcepcion(E);
end;
end;
end;
procedure TfrPropiedades.PropiedadesAfterPost(DataSet: TDataSet);
begin
FPropiedadCodigo := TStringList.Create;
FCodigoPropiedad := TStringList.Create;
dmTablaPropiedades.darPropiedades(FPropiedadCodigo, FCodigoPropiedad);
cbxPropiedad.Properties.Items := dmTablaPropiedades.darPropiedades;
end;
procedure TfrPropiedades.VistaPropiedadesFocusedRecordChanged(
Sender: TcxCustomGridTableView; APrevFocusedRecord,
AFocusedRecord: TcxCustomGridRecord;
ANewItemRecordFocusingChanged: Boolean);
begin
if (not EsCadenaVacia(TablaPropiedades.FieldByName('CODIGO').AsString)) then
//Asignamos el codigo de propiedad para establecer valores de la misma
CodigoPro := TablaPropiedades.FieldByName('CODIGO').AsString;
end;
procedure TfrPropiedades.PropiedadesAfterInsert(DataSet: TDataSet);
begin
if DataSet.State in dsEditModes then
DataSet.Post;
DataSet.Edit;
end;
procedure TfrPropiedades.SetCodigoPro(const Value: Variant);
begin
if (FCodigoPro <> Value) then
begin
GuardarDatos;
FCodigoPro := Value;
RecargarDatos;
end;
end;
procedure TfrPropiedades.RecargarDatos;
var
lPropiedadRel : Variant;
begin
with TablaValores do
begin
Close;
Params.ByName('CODIGOPROPIEDAD').AsString := CodigoPro;
Prepare;
Open;
end;
cbxPropiedad.ItemIndex := -1;
cbxPropiedad.Enabled := False;
if (TablaValores.RecordCount > 0) then
Op3.Checked := True
else
begin
lPropiedadRel := dmTablaPropiedades.darPropiedadRelacionada(CodigoPro);
if (lPropiedadRel <> -1) then
begin
Op2.Checked := True;
cbxPropiedad.ItemIndex := cbxPropiedad.Properties.Items.IndexOf(FCodigoPropiedad.Values[lPropiedadRel]);
cbxPropiedad.Enabled := True;
end
else Op1.Checked := True;
end;
end;
procedure TfrPropiedades.GuardarDatos;
begin
if TablaValores.State in dsEditModes then
TablaValores.Post;
if (Op1.Checked) then
borrarTodo
else if (Op2.Checked) then
begin
if EsCadenaVacia(cbxPropiedad.Text) then
begin
cbxPropiedad.SetFocus;
raise Exception.Create(msgDatosCopiaVacia);
end;
borrarTodo;
dmTablaPropiedades.asignarCopiaPropiedad(CodigoPro, StrToInt(FPropiedadCodigo.Values[cbxPropiedad.Text]));
end
else if (Op3.Checked) then
begin
dmTablaPropiedades.asignarNullCopiaPropiedad(CodigoPro);
end;
end;
procedure TfrPropiedades.borrarTodo;
begin
dmTablaValores.borrarValoresPropiedad(CodigoPro);
dmTablaPropiedades.asignarNullCopiaPropiedad(CodigoPro);
end;
procedure TfrPropiedades.actAnadirPropExecute(Sender: TObject);
begin
TablaPropiedades.Append;
gridPropiedades.SetFocus;
end;
procedure TfrPropiedades.actEliminarPropExecute(Sender: TObject);
begin
if (VerMensajePregunta(msgDeseaBorrar) <> IDYES) then
Exit;
try
if TablaPropiedades.RecordCount = 0
{ Hacemos un cancel de la tabla por si el registro actual estuviera
recien creado }
then TablaPropiedades.Cancel
else TablaPropiedades.Delete;
except
on E : EIBError do
verMensaje(msgDatosPropiedadUsada);
// TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrPropiedades.actAnadirValorExecute(Sender: TObject);
begin
TablaValores.Append;
GridValores.SetFocus;
end;
procedure TfrPropiedades.actEliminarValorExecute(Sender: TObject);
begin
if (VerMensajePregunta(msgDeseaBorrar) <> IDYES) then
Exit;
try
if TablaValores.RecordCount = 0 then
{ Hacemos un cancel de la tabla por si el registro actual estuviera
recien creado }
TablaValores.Cancel
else
TablaValores.Delete;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrPropiedades.actOpc2Execute(Sender: TObject);
begin
cbxPropiedad.Enabled := True;
cbxPropiedad.SetFocus;
end;
procedure TfrPropiedades.actAnadirValorUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := Op3.Checked;
gridValores.Enabled := Op3.Checked;
end;
procedure TfrPropiedades.actAnadirPropUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := not dmBaseDatos.BD.IsReadOnly;
end;
procedure TfrPropiedades.actEliminarPropUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := (not dmBaseDatos.BD.IsReadOnly) and
(VistaPropiedades.DataController.RowCount > 0);
end;
procedure TfrPropiedades.actOpc1Update(Sender: TObject);
begin
(Sender as TAction).Enabled := TablaPropiedades.RecordCount > 0;
cbxPropiedad.Enabled := Op2.Checked;
end;
procedure TfrPropiedades.cbxPropiedadPropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
begin
if DisplayValue = TablaPropiedades.FieldByName('DESCRIPCION').AsVariant then
begin
ErrorText := msgDatosCopiaInvalida;
Error := True;
end;
end;
procedure TfrPropiedades.PropiedadesNewRecord(DataSet: TDataSet);
begin
with DataSet do
begin
CodigoPro := dmTablaPropiedades.DarContadorPropiedad;
FieldByName('CODIGO').AsInteger := CodigoPro;
FieldByName('DESCRIPCION').AsString := 'Propiedad nueva';
end;
end;
procedure TfrPropiedades.actOpc1Execute(Sender: TObject);
begin
//
end;
procedure TfrPropiedades.actOpc3Execute(Sender: TObject);
begin
//
end;
procedure TfrPropiedades.ValoresOnNewRecord(DataSet: TDataSet);
begin
DataSet.FieldByName('CODIGO').AsInteger := dmTablaValores.DarContadorValor;
DataSet.FieldByName('CODIGOPROPIEDAD').AsString := CodigoPro;
end;
function TfrPropiedades.CambiarEntidad(EntidadAnterior, Entidad: TRdxEntidad): Boolean;
begin
inherited CambiarEntidad(EntidadAnterior, Entidad);
ConfigurarFrame(Self, Self.Entidad);
end;
procedure TfrPropiedades.actInsertarExecute(Sender: TObject);
var
lImgAux: TJPEGImage;
Fichero: Variant;
begin
try
Fichero := elegirImagen;
if not esCadenaVacia(Fichero) then
begin
lImgAux := TJPEGImage.Create;
lImgAux.LoadFromFile(Fichero);
TablaValores.Edit;
TablaValores.FieldByName('IMAGEN').Assign(lImgAux);
TablaValores.Post;
FreeAndNil(lImgAux);
end;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrPropiedades.actCopiarExecute(Sender: TObject);
var
lImgAux: TJPEGImage;
lStrAux: TStream;
begin
try
lImgAux := TJPEGImage.Create;
lStrAux := TablaValores.CreateBlobStream(TablaValores.FieldByName('IMAGEN'), bmReadWrite);
lImgAux.LoadFromStream(lStrAux);
copiarAlPortapapeles(lImgAux);
FreeAndNil(lStrAux);
FreeAndNil(lImgAux);
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrPropiedades.actPegarExecute(Sender: TObject);
var
lImgAux: TJPEGImage;
begin
try
lImgAux:= TJPEGImage.Create;
lImgAux.Assign(copiarDelPortapapeles);
TablaValores.Edit;
TablaValores.FieldByName('IMAGEN').Assign(lImgAux);
TablaValores.Post;
FreeAndNil(lImgAux);
actCortar.Enabled := True;
actCopiar.Enabled := True;
actEliminar.Enabled := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrPropiedades.actEliminarExecute(Sender: TObject);
begin
try
TablaValores.Edit;
TablaValores.FieldByName('IMAGEN').Clear;
TablaValores.Post;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrPropiedades.actCortarExecute(Sender: TObject);
begin
actCopiarExecute(Self);
actEliminarExecute(Self);
actCortar.Enabled := False;
actCopiar.Enabled := False;
actEliminar.Enabled := False;
end;
procedure TfrPropiedades.actGuardarExecute(Sender: TObject);
var
lImgAux: TJPEGImage;
lStrAux: TStream;
Fichero : Variant;
begin
try
Fichero := guardarComoImagen;
if not esCadenaVacia(Fichero) then
begin
lImgAux := TJPEGImage.Create;
lStrAux := TablaValores.CreateBlobStream(TablaValores.FieldByName('IMAGEN'), bmReadWrite);
lImgAux.LoadFromStream(lStrAux);
lImgAux.SaveToFile(Fichero);
FreeAndNil(lStrAux);
FreeAndNil(lImgAux);
end;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
end.