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

571 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: 26-01-2003
Versión actual: 1.0.1
Fecha versión actual: 07-06-2003
===============================================================================
Modificaciones:
Fecha Comentarios
---------------------------------------------------------------------------
07-06-2003 Se almacenaba correctamente el valor 'TIPOENTRADA' en la tabla
cuando era una salida. Siempre ponía 'E'.
===============================================================================
}
unit DetalleLibro;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
RdxBotones, StdCtrls, RdxMemo, RdxComboBox, RdxCampos, ExtCtrls,
RdxTitulos, ComCtrls, RdxCheckBox, Grids, DBGrids, RdxPaneles,
RdxBarras, Db, RdxFrame, RdxDBFrame, RXDBCtrl,
RdxPageControl, IB, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
cxEdit, cxDBData, cxClasses, cxControls, RxMemDS, Configuracion, cxMemo,
cxDBEdit, cxContainer, cxTextEdit, cxMaskEdit, cxButtonEdit, AdvPanel,
cxDropDownEdit, cxCalendar, RdxFrameDetallesLibro, Entidades,
RdxEmpresaActiva;
type
TfrDetalleLibro = class(TRdxFrameDetallesLibro)
pnlCuerpo: TPanel;
brDoble: TRdxBarraInferior;
bGuardar: TRdxBoton;
bCancelar: TRdxBoton;
brSimple: TRdxBarraInferior;
bSalir: TRdxBoton;
pnlTitulo: TRdxPanelTituloOperacion;
dsDetallesLibro: TDataSource;
pnlDetalleLibro: TAdvPanel;
eNumEntrada: TLabel;
eCuantia: TLabel;
eFechaEntrada: TLabel;
eDescripcion: TLabel;
NumeroEntrada: TcxDBButtonEdit;
Cuantia: TcxDBTextEdit;
Descripcion: TcxDBMemo;
FechaEntrada: TcxDBDateEdit;
procedure bAceptarClick(Sender: TObject);
procedure bSalirClick(Sender: TObject);
procedure bCancelarClick(Sender: TObject);
procedure CodigoPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
private
//Por si en un futuro permitimos introducir el codigo de entrada a mano
procedure asignarCodigoCajaA;
procedure asignarCodigoCajaB;
procedure asignarCodigoBancoA;
procedure asignarCodigoBancoB;
protected
procedure ActivarModoAnadir; override;
procedure ActivarModoModificar; override;
procedure ActivarModoConsultar; override;
function AnadirDatos : Boolean; override;
function ModificarDatos : Boolean; override;
function CancelarAnadir : Boolean; override;
function CancelarModificar : Boolean; override;
function ComprobarDatos : Boolean; override;
procedure VerModal; override;
procedure FreeContenido; override;
procedure SetNumEntrada (Value : Variant); override;
procedure BuscarNumEntrada; override;
procedure CuantiaSetText(Sender: TField; const Text: String);
public
constructor Create (AOwner : TComponent); override;
destructor Destroy; override;
published
end;
var
frDetalleLibro: TfrDetalleLibro;
implementation
{$R *.DFM}
uses
IBCustomDataSet, Mensajes, Variants, BaseDatos, StrFunc, Constantes,
Excepciones, IBErrorCodes, Literales, TablaLibros, DetallesLibro,
TablaEmpresas;
////////////////////////////////////////////////////////////////////////////////
// PRIVATE
////////////////////////////////////////////////////////////////////////////////
procedure TfrDetalleLibro.asignarCodigoCajaA;
begin
{
if (Length(NumeroEntrada.Text) = 0) then
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.darNuevoCodigoCajaA;
if (dmTablaLibros.validarCodigoCajaA(NumeroEntrada.Text)) then
begin
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.formatearCodigoCajaA(NumeroEntrada.Text);
if (dmTablaLibros.existeDetalleLibro(CodigoLibro, NumeroEntrada.Text)) then begin
VerMensajeFmt(msgLibNumEntRepetida, [NumeroEntrada.Text]);
NumeroEntrada.SetFocus;
end;
end
else begin
VerMensajeFmt(msgLibNumEntIncorrecta, [NumeroEntrada.Text]);
NumeroEntrada.SetFocus;
end;
}
end;
procedure TfrDetalleLibro.asignarCodigoCajaB;
begin
{
if (Length(NumeroEntrada.Text) = 0) then
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.darNuevoCodigoCajaB;
if (dmTablaLibros.validarCodigoCajaB(NumeroEntrada.Text)) then
begin
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.formatearCodigoCajaB(NumeroEntrada.Text);
if (dmTablaLibros.existeDetalleLibro(CodigoLibro, NumeroEntrada.Text)) then begin
VerMensajeFmt(msgLibNumEntRepetida, [NumeroEntrada.Text]);
NumeroEntrada.SetFocus;
end;
end
else begin
VerMensajeFmt(msgLibNumEntIncorrecta, [NumeroEntrada.Text]);
NumeroEntrada.SetFocus;
end;
}
end;
procedure TfrDetalleLibro.asignarCodigoBancoA;
begin
{
if (Length(NumeroEntrada.Text) = 0) then
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.darNuevoCodigoBancoA;
if (dmTablaLibros.validarCodigoBancoA(NumeroEntrada.Text)) then
begin
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.formatearCodigoBancoA(NumeroEntrada.Text);
if (dmTablaLibros.existeDetalleLibro(CodigoLibro, NumeroEntrada.Text)) then begin
VerMensajeFmt(msgLibNumEntRepetida, [NumeroEntrada.Text]);
NumeroEntrada.SetFocus;
end;
end
else begin
VerMensajeFmt(msgLibNumEntIncorrecta, [NumeroEntrada.Text]);
NumeroEntrada.SetFocus;
end;
}
end;
procedure TfrDetalleLibro.asignarCodigoBancoB;
begin
{
if (Length(NumeroEntrada.Text) = 0) then
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.darNuevoCodigoBancoB;
if (dmTablaLibros.validarCodigoBancoB(NumeroEntrada.Text)) then
begin
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.formatearCodigoBancoB(NumeroEntrada.Text);
if (dmTablaLibros.existeDetalleLibro(CodigoLibro, NumeroEntrada.Text)) then begin
VerMensajeFmt(msgLibNumEntRepetida, [NumeroEntrada.Text]);
NumeroEntrada.SetFocus;
end;
end
else begin
VerMensajeFmt(msgLibNumEntIncorrecta, [NumeroEntrada.Text]);
NumeroEntrada.SetFocus;
end;
}
end;
////////////////////////////////////////////////////////////////////////////////
// PROTECTED
////////////////////////////////////////////////////////////////////////////////
procedure TfrDetalleLibro.ActivarModoAnadir;
var
CodNuevo : Variant;
begin
dsDetallesLibro.AutoEdit := True;
NumeroEntrada.Properties.Buttons[0].Visible := False;
NumeroEntrada.Properties.ReadOnly := True;
FechaEntrada.Properties.ReadOnly := False;
Cuantia.Properties.ReadOnly := False;
try
if (TipoLibro = 'C') then
CodNuevo := dmTablaLibros.DarNuevoCodigoCaja
else if (TipoLibro = 'B') then
CodNuevo := dmTablaLibros.DarNuevoCodigoBanco
else
VerMensaje('LOG: fallo gordo con los contadores de libros');
with TablaDetallesLibro do
begin
Close;
Prepare;
Open;
Insert;
FieldByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
FieldByName('TIPOLIBRO').AsString := TipoLibro;
FieldByName('NUMENTRADA').AsString := CodNuevo;
FieldByName('TIPOENTRADA').AsString := 'E';
FieldByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha;
FieldByName('USUARIO').AsString := dmBaseDatos.Usuario;
FieldByName('FECHAENTRADA').AsDateTime := dmBaseDatos.DarFecha;
FieldByName('CUANTIA').AsString := '0';
FieldByName('CUANTIA').OnSetText := CuantiaSetText;
end;
dmTablaLibros.InicializarTablaDetallesLibro(@TablaDetallesLibro);
Visible := True;
Descripcion.SetFocus;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrDetalleLibro.ActivarModoModificar;
begin
dsDetallesLibro.AutoEdit := True;
NumeroEntrada.Properties.Buttons[0].Visible := True;
NumeroEntrada.Properties.ReadOnly := True;
FechaEntrada.Properties.ReadOnly := True;
Cuantia.Properties.ReadOnly := True;
try
with TablaDetallesLibro do
begin
Prepare;
Open;
if RecordCount = 0 then
begin
VerMensajeFmt(msgLibNoExisteEnt, [NumEntrada]);
CancelarAnadir;
CloseFrame;
Exit;
end;
// Bloquear la entrada
Edit;
Post;
Edit;
end;
dmTablaLibros.InicializarTablaDetallesLibro(@TablaDetallesLibro);
Visible := True;
bGuardar.SetFocus;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrDetalleLibro.ActivarModoConsultar;
begin
dsDetallesLibro.AutoEdit := False;
NumeroEntrada.Properties.Buttons[0].Visible := True;
try
with TablaDetallesLibro do
begin
Prepare;
Open;
if RecordCount = 0 then
begin
VerMensajeFmt(msgLibNoExisteEnt, [NumEntrada]);
CancelarAnadir;
CloseFrame;
Exit;
end;
end;
dmTablaLibros.InicializarTablaDetallesLibro(@TablaDetallesLibro);
Visible := True;
bSalir.SetFocus;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrDetalleLibro.AnadirDatos : boolean;
var
Importe : Double;
begin
Result := False;
try
if Entidad = entEntLibro then
begin
Importe := TablaDetallesLibro.FieldByName('CUANTIA').AsFloat;
TablaDetallesLibro.FieldByName('TIPOENTRADA').AsString := CTE_ENT;
end
else if Entidad = entSalLibro then
begin
Importe := (-1) * TablaDetallesLibro.FieldByName('CUANTIA').AsFloat;
TablaDetallesLibro.FieldByName('TIPOENTRADA').AsString := CTE_SAL;
end
else VerMensaje('LOG:Error no esta asignada la entidad');
TablaDetallesLibro.FieldByName('IMPORTEANT').AsFloat := dmTablaLibros.darUltimoImportePos(TipoLibro);
TablaDetallesLibro.FieldByName('IMPORTEPOS').AsFloat := TablaDetallesLibro.FieldByName('IMPORTEANT').AsFloat + Importe;
TablaDetallesLibro.FieldByName('CUANTIA').AsFloat := Importe;
TablaDetallesLibro.Post;
TipoLibro := TablaDetallesLibro.FieldByName('TIPOLIBRO').AsString;
NumEntrada := TablaDetallesLibro.FieldByName('NUMENTRADA').AsString;
if (TipoLibro = 'C') then
dmTablaLibros.IncrementarCodigoCaja
else if (TipoLibro = 'B') then
dmTablaLibros.IncrementarCodigoBanco
else
VerMensaje('LOG: fallo gordo con los contadores de libros');
Commit;
TablaDetallesLibro.Close;
Result := True;
except
on E : EIBError do begin
if E.IBErrorCode = isc_unique_key_violation then
begin
VerMensajeFmt(msgLibNumEntRepetida, [NumEntrada.DataBinding.Field.AsString]);
TablaDetallesLibro.Edit;
end
else
TratarExcepcion(E);
end;
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrDetalleLibro.ModificarDatos : boolean;
begin
Result := False;
try
TablaDetallesLibro.Post;
Commit;
TablaDetallesLibro.Close;
Result := True;
except
on E : EIBError do
begin
case E.IBErrorCode of
isc_lock_conflict : VerMensajeFmt(msgLibEntBloqueada, [NumeroEntrada.DataBinding.Field.AsString]);
else
TratarExcepcion(E);
end;
end;
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrDetalleLibro.CancelarAnadir: Boolean;
begin
Result := False;
try
RollBack;
TablaDetallesLibro.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrDetalleLibro.ComprobarDatos: Boolean;
begin
Result := False;
if EsCadenaVacia(Descripcion.Text) then
begin
VerMensaje(msgLibFaltaDescEnt);
Descripcion.SetFocus;
Exit;
end;
Result := True;
end;
procedure TfrDetalleLibro.VerModal;
begin
if (ContenidoModal is TRdxFrameDetallesLibro) then
(ContenidoModal as TRdxFrameDetallesLibro).TipoLibro := TipoLibro;
(ContenidoModal as TRdxFrameDetallesLibro).NumEntrada := NumEntrada;
inherited;
end;
procedure TfrDetalleLibro.FreeContenido;
begin
if (ContenidoModal is TRdxFrameDetallesLibro) then begin
TipoLibro := (ContenidoModal as TRdxFrameDetallesLibro).TipoLibro;
NumEntrada := (ContenidoModal as TRdxFrameDetallesLibro).NumEntrada;
ActivarModo;
end;
inherited FreeContenido;
end;
procedure TfrDetalleLibro.BuscarNumEntrada;
begin
if Transaccion = NIL then
exit;
try
TablaDetallesLibro.Close;
// Buscar la fila a tratar si es necesario
if not esCadenaVacia(TipoLibro) and not esCadenaVacia(NumEntrada) then
begin
TablaDetallesLibro.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
TablaDetallesLibro.ParamByName('TIPOLIBRO').AsString := TipoLibro;
TablaDetallesLibro.ParamByName('NUMENTRADA').AsString := NumEntrada;
end;
TablaDetallesLibro.Prepare;
TablaDetallesLibro.Open;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrDetalleLibro.CuantiaSetText(Sender: TField; const Text: String);
begin
if EsCadenaVacia(Text) then begin
Sender.AsString := '0';
exit;
end;
try
if StrToFloat(Text) < 0
then begin
VerMensaje (msgImportePositivo);
Sender.AsFloat := (-1) * StrToFloat(Text)
end
else Sender.AsString := Text;
except
on E : EConvertError do begin
Sender.AsString := '0'
end;
end;
end;
////////////////////////////////////////////////////////////////////////////////
// PUBLIC
////////////////////////////////////////////////////////////////////////////////
constructor TfrDetalleLibro.Create (AOwner : TComponent);
begin
inherited Create(AOwner);
BaseDatos := dmBaseDatos.BD;
Transaccion := dmBaseDatos.Transaccion;
TablaDetallesLibro := TIBDataSet.Create(Self);
dsDetallesLibro.DataSet := TablaDetallesLibro;
with TablaDetallesLibro do
begin
Database := BaseDatos;
Transaction := Transaccion;
SelectSQL.Assign(dmTablaLibros.sqlConsultarDetalleLibro);
InsertSQL.Assign(dmTablaLibros.sqlInsertarDetalleLibro);
ModifySQL.Assign(dmTablaLibros.sqlModificarDetalleLibro);
DeleteSQL.Assign(dmTablaLibros.sqlEliminarDetalleLibro);
RefreshSQL.Assign(dmTablaLibros.sqlConsultarDetalleLibro);
end;
end;
destructor TfrDetalleLibro.Destroy;
begin
TablaDetallesLibro.Close;
TablaDetallesLibro.UnPrepare;
TablaDetallesLibro.Free;
inherited;
end;
procedure TfrDetalleLibro.bAceptarClick(Sender: TObject);
begin
if (RealizarOperacion) then
CloseFrame;
end;
procedure TfrDetalleLibro.bSalirClick(Sender: TObject);
begin
try
Rollback;
CloseFrame;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrDetalleLibro.bCancelarClick(Sender: TObject);
begin
if (TratarCambios = IDOK) then
CloseFrame;
end;
procedure TfrDetalleLibro.CodigoPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
if (TratarCambios = IDCANCEL) then
exit;
ContenidoModal := TfrDetallesLibro.Create(Self);
end;
function TfrDetalleLibro.CancelarModificar: Boolean;
begin
Result := False;
try
RollBack;
TablaDetallesLibro.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrDetalleLibro.SetNumEntrada(Value: Variant);
begin
inherited;
if VarIsNull(Value) then
exit;
if (Modo <> Anadir) then begin
if (TablaDetallesLibro.FieldByName('CUANTIA').AsFloat < 0)
then Entidad := entSalLibro
else Entidad := entEntLibro;
end;
end;
end.