{ =============================================================================== 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 Revisadas las sentencias SQL para que no meta valores directos en el campo 'TIPOENTRADA'. =============================================================================== } unit TablaLibros; interface uses //Generales SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB, //Particulares IBCustomDataSet, cxImageComboBox, Variants, RdxFrame, TablaPagosProveedor, cxDropDownEdit, //Aplicacion Framework, StrFunc, Entidades, Constantes, BaseDatos, RdxEmpresaActiva, // Contador Contadores, RdxGestorContadores, ImgList; type //TIPOSLIBRO //Tipo enumerado correspondiente a los tipos de libro que manejara la aplicacion TTiposLibro = (ttlCaja, ttlBanco); //////////////////////////////////////////////////////////////////////////////// //TListaLibros //////////////////////////////////////////////////////////////////////////////// TListaComboTiposLibro = (tltDefecto, tltTodos); TDatosLibro = class(TPersistent) public Codigo : String; Nombre : String; Predeterminado : Boolean; end; TListaLibros = class(TListaObjetos) private FSQL : TStringList; function GetDatosLibro(Index: Integer): TDatosLibro; procedure inicializarSQL(TipoLista:TListaComboTiposLibro); protected procedure AssignTo(Dest: TPersistent); override; procedure ObtenerListaBD; overload; procedure ObtenerLista; overload; override; public property Items[Index: Integer] : TDatosLibro read GetDatosLibro; constructor Create(TipoLista: TListaComboTiposLibro); overload; destructor Destroy; override; function cargarLista(Objcbx: TcxComboBox): Integer; end; TDatosDetalleLibro = class(TPersistent) public CodigoEmpresa : Integer; TipoLibro : String; NumEntrada : String; TipoEntrada : String; FechaAlta : String; Usuario : String; FechaEntrada : String; Descripcion : String; Cuantia : Double; ImporteAnt : Double; ImportePos : Double; end; type TdmTablaLibros = class(TDataModule) imgGridLibros: TImageList; private procedure IniciarSQL; function darTipoLibro(TipoLibro: TTiposLibro): String; function darDescripcionLibro(TipoLibro: TTiposLibro): String; overload; function existenLibros(CodigoEmpresa: Variant): Boolean; function insertarLibro(TipoLibro: TTiposLibro; CodigoEmpresa: Variant): Boolean; function insertarLibros(CodigoEmpresa: Variant): Boolean; public //DETALLES LIBRO sqlInsertarDetalleLibro : TStrings; sqlModificarDetalleLibro : TStrings; sqlConsultarDetalleLibro : TStrings; sqlEliminarDetalleLibro : TStrings; sqlGridDetallesLibro : TStrings; sqlConsultarLibros : TStrings; //Metodos que llamaran a contador de CAJA function DarNuevoCodigoCaja : String; function IncrementarCodigoCaja: boolean; function InsertarContadorCaja : boolean; function ValidarCodigoCaja(Codigo : String) : Boolean; function FormatearCodigoCaja(Codigo : String) : String; //Metodos que llamaran a contador de BANCO function DarNuevoCodigoBanco : String; function IncrementarCodigoBanco: boolean; function InsertarContadorBanco : boolean; function ValidarCodigoBanco(Codigo : String) : Boolean; function FormatearCodigoBanco(Codigo : String) : String; function darNumEntrada(psTipoLibro: String): Variant; function incrementarNumEntrada(psTipoLibro: String): Boolean; constructor Create (AOwner : TComponent); override; destructor Destroy; override; //LIBRO function crearLibros(CodigoEmpresa: Variant): boolean; // function darCodigoLibro(Descripcion : String) : String; function darLibros: TStrings; overload; procedure darLibros(var LibroTipo, TipoLibro: TStringList); overload; procedure darLibros(var TipoLibro: TStringList); overload; function darUltimoImportePos(TipoLibro: String): Double; //DETALLES LIBRO function existeDetalleLibro(TipoLibro, NumEntrada: String): Boolean; function darDatosDetalleLibro(var Datos: TDatosDetalleLibro): Boolean; function CerrarLibro(TipoLibro: String): Boolean; function EliminarDetallesLibro(TipoLibro: String): Boolean; function AnadirDetalleLibro(Datos: TDatosDetalleLibro): Boolean; function anadirEntradaLibro(Entidad: TRdxEntidad; Modo: TRdxModo; Datos: TDatosPago) : Boolean; function anularEntradaLibro(Entidad: TRdxEntidad; Modo: TRdxModo; Datos: TDatosPago) : Boolean; procedure InicializarGridDetallesLibro(var vGrid: TcxGridDBTableView); procedure InicializarTablaDetallesLibro(Tabla: TPTabla); end; var dmTablaLibros: TdmTablaLibros; implementation {$R *.DFM} uses Mensajes, Literales, TablaEmpresas; const CaptionsTiposLibro : array [TTiposLibro] of string = ( ('C'), //ttlCaja ('B') //ttlBanco ); CaptionsDescripcionLibro : array [TTiposLibro] of string = ( ('CAJA'), //ttlCaja ('BANCO') //ttlBanco ); constructor TdmTablaLibros.Create (AOwner : TComponent); begin inherited; //DETALLES LIBRO sqlInsertarDetalleLibro := TStringList.Create; sqlModificarDetalleLibro := TStringList.Create; sqlConsultarDetalleLibro := TStringList.Create; sqlEliminarDetalleLibro := TStringList.Create; sqlGridDetallesLibro := TStringList.Create; sqlConsultarLibros := TStringList.Create; IniciarSQL; end; destructor TdmTablaLibros.Destroy; begin //DETALLES LIBRO sqlInsertarDetalleLibro.Free; sqlModificarDetalleLibro.Free; sqlConsultarDetalleLibro.Free; sqlEliminarDetalleLibro.Free; sqlGridDetallesLibro.Free; sqlConsultarLibros.Free; inherited; end; procedure TdmTablaLibros.IniciarSQL; begin with sqlInsertarDetalleLibro do begin Add('INSERT INTO DETALLESLIBROS (CODIGOEMPRESA, TIPOLIBRO, NUMENTRADA, TIPOENTRADA, FECHAALTA, USUARIO, '); Add('FECHAENTRADA, DESCRIPCION, CUANTIA, IMPORTEANT, IMPORTEPOS) '); Add('VALUES (:CODIGOEMPRESA, :TIPOLIBRO, :NUMENTRADA, :TIPOENTRADA, :FECHAALTA, :USUARIO, '); Add(':FECHAENTRADA, :DESCRIPCION, :CUANTIA, :IMPORTEANT, :IMPORTEPOS) '); end; with sqlModificarDetalleLibro do begin Add('update DETALLESLIBROS set '); Add('DESCRIPCION = :DESCRIPCION '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA '); Add('and TIPOLIBRO = :TIPOLIBRO '); Add('and NUMENTRADA = :NUMENTRADA)'); end; with sqlConsultarDetalleLibro do begin Add('SELECT * FROM DETALLESLIBROS '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA '); Add('and TIPOLIBRO = :TIPOLIBRO '); Add('and NUMENTRADA = :NUMENTRADA)'); end; with sqlEliminarDetalleLibro do begin Add('DELETE FROM DETALLESLIBROS '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA '); Add('and TIPOLIBRO = :TIPOLIBRO '); Add('AND NUMENTRADA = :NUMENTRADA)'); end; with sqlGridDetallesLibro do begin Add('SELECT CODIGOEMPRESA, TIPOLIBRO, NUMENTRADA, TIPOENTRADA, FECHAENTRADA, DESCRIPCION, '); Add('CUANTIA, IMPORTEANT, IMPORTEPOS '); Add('FROM DETALLESLIBROS '); Add('WHERE CODIGOEMPRESA = :CODIGOEMPRESA '); Add('AND TIPOLIBRO = :TIPOLIBRO '); end; with sqlConsultarLibros do begin Add('select TIPO, DESCRIPCION '); Add('from LIBROS '); Add('where CODIGOEMPRESA = :CODIGOEMPRESA '); Add('order by TIPO'); end; end; function TdmTablaLibros.DarNuevoCodigoCaja : String; begin Result := GestorContadores.darNuevoCodigo(contCaja); end; function TdmTablaLibros.DarNuevoCodigoBanco : String; begin Result := GestorContadores.darNuevoCodigo(contBanco); end; function TdmTablaLibros.IncrementarCodigoCaja : boolean; begin Result := GestorContadores.IncrementarValor(contCaja); end; function TdmTablaLibros.IncrementarCodigoBanco : boolean; begin Result := GestorContadores.IncrementarValor(contBanco); end; function TdmTablaLibros.FormatearCodigoCaja(Codigo : String) : String; begin Result := GestorContadores.formatearCodigo(contCaja, Codigo); end; function TdmTablaLibros.FormatearCodigoBanco(Codigo : String) : String; begin Result := GestorContadores.formatearCodigo(contBanco, Codigo); end; function TdmTablaLibros.ValidarCodigoCaja(Codigo: String): Boolean; begin Result := GestorContadores.validarCodigo(contCaja, Codigo); end; function TdmTablaLibros.ValidarCodigoBanco(Codigo: String): Boolean; begin Result := GestorContadores.validarCodigo(contBanco, Codigo); end; function TdmTablaLibros.InsertarContadorCaja: boolean; begin Result := GestorContadores.InsertarContador(contCaja); end; function TdmTablaLibros.InsertarContadorBanco: boolean; begin Result := GestorContadores.InsertarContador(contBanco); end; //////////////////////////////////////////////////////////////////// //LIBRO //////////////////////////////////////////////////////////////////// { function TdmTablaLibros.darCodigoLibro(Descripcion: String): String; var oSQL : TIBSQL; begin Result := ''; if EsCadenaVacia(Descripcion) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGO '); SQL.Add('from LIBROS '); SQL.Add('where DESCRIPCION = :DESCRIPCION'); ParamByName('DESCRIPCION').AsString := Descripcion; try Prepare; ExecQuery; Result := Fields[0].AsString; finally Close; Transaction := NIL; Free; end; end; end; } function TdmTablaLibros.darLibros: TStrings; var oSQL : TIBSQL; Lista : TStringList; begin oSQL := TIBSQL.Create(Self); Lista := TStringList.Create; with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select DESCRIPCION from LIBROS'); SQL.Add(' where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add(' order by DESCRIPCION'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; ExecQuery; while not EOF do begin Lista.Append(Fields[0].AsString); Next; end; result := Lista; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaLibros.darLibros(var LibroTipo, TipoLibro: TStringList); var oSQL : TIBSQL; begin if (LibroTipo = nil) or (TipoLibro = nil) then Exit; //Limpiamos los valores que tubieran antes (por si acaso) LibroTipo.Clear; TipoLibro.Clear; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select TIPO, DESCRIPCION from LIBROS '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA '); SQL.Add('order by TIPO'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; ExecQuery; while not EOF do begin LibroTipo.Values[FieldByName('DESCRIPCION').AsString] := FieldByName('TIPO').AsString; TipoLibro.Values[FieldByName('TIPO').AsString] := FieldByName('DESCRIPCION').AsString; Next; end; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaLibros.darLibros(var TipoLibro: TStringList); var oSQL : TIBSQL; begin if (TipoLibro = nil) then Exit; //Limpiamos los valores que tubieran antes (por si acaso) TipoLibro.Clear; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select TIPO, DESCRIPCION from LIBROS '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA '); SQL.Add('order by TIPO'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; ExecQuery; while not EOF do begin TipoLibro.Values[FieldByName('TIPO').AsString] := FieldByName('DESCRIPCION').AsString; Next; end; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaLibros.darUltimoImportePos(TipoLibro: String): Double; var oSQL : TIBSQL; begin Result := -1; if EsCadenaVacia(TipoLibro) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('SELECT IMPORTEPOS '); SQL.Add('FROM DETALLESLIBROS '); SQL.Add('WHERE CODIGOEMPRESA = :CODIGOEMPRESA '); SQL.Add('AND TIPOLIBRO = :TIPOLIBRO '); SQL.Add('AND NUMENTRADA = (SELECT MAX(NUMENTRADA) '); SQL.Add('FROM DETALLESLIBROS '); SQL.Add('WHERE CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add('AND TIPOLIBRO = :TIPOLIBRO)'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('TIPOLIBRO').AsString := TipoLibro; Prepare; ExecQuery; if RecordCount <> 0 then Result := Fields[0].AsDouble else Result := 0; finally Close; Transaction := NIL; Free; end; end; end; //////////////////////////////////////////////////////////////////// //DETALLE LIBRO //////////////////////////////////////////////////////////////////// function TdmTablaLibros.existeDetalleLibro(TipoLibro, NumEntrada: String): Boolean; {Comprueba si existe un articulo en un determinado almacen, pasandole por parametro el codigo de articulo y el del almacen, devuelve true o false dependiendo si existe o no} var oSQL : TIBSQL; Codigo : String; begin Result := False; if (Length(Trim(TipoLibro)) = 0) or (Length(Trim(NumEntrada)) = 0) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select TIPOLIBRO '); SQL.Add('from DETALLESLIBROS '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA '); SQL.Add('and TIPOLIBRO = :TIPOLIBRO '); SQL.Add('and NUMENTRADA = :NUMENTRADA '); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('TIPOLIBRO').AsString := TipoLibro; ParamByName('NUMENTRADA').AsString := NumEntrada; Prepare; ExecQuery; Codigo := FieldByName('TIPOLIBRO').AsString; Result := (TipoLibro = Codigo); finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaLibros.darDatosDetalleLibro(var Datos: TDatosDetalleLibro): Boolean; {Devuelve los datos del articulo pasado por parametro si este existe en el almacen correspondiente, en caso de no existir devuelve false y rellena dichos datos con 0,0 y 1000 respectibamente} var oSQL : TIBSQL; begin Result := False; if (length(Datos.TipoLibro)= 0) or (length(Datos.NumEntrada)= 0) then begin //Para que cuando un articulo libre que no encuentra las existencias en //el almacen esten a cero Datos.Cuantia := 0; Exit; end; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select * '); SQL.Add('from DETALLESLIBROS '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA '); SQL.Add('and TIPOLIBRO = :TIPOLIBRO '); SQL.Add('and NUMENTRADA = :NUMENTRADA '); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('TIPOLIBRO').AsString := Datos.TipoLibro; ParamByName('NUMENTRADA').AsString := Datos.NumEntrada; Prepare; ExecQuery; if (RecordCount > 0) then begin Datos.TipoEntrada := FieldByName('TIPOENTRADA').AsString; Datos.FechaAlta := FieldByName('FECHAALTA').AsString; Datos.Usuario := FieldByName('USUARIO').AsString; Datos.FechaEntrada := FieldByName('FECHAENTRADA').AsString; Datos.Descripcion := FieldByName('DESCRIPCION').AsString; Datos.Cuantia := FieldByName('CUANTIA').AsDouble; Datos.ImporteAnt := FieldByName('IMPORTEANT').AsDouble; Datos.ImportePos := FieldByName('IMPORTEPOS').AsDouble; Result := True; end finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaLibros.EliminarDetallesLibro(TipoLibro: String): Boolean; var oSQL : TIBSQL; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('delete from DETALLESLIBRO '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA '); SQL.Add('and TIPOLIBRO = :TIPOLIBRO '); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('TIPOLIBRO').AsString := TipoLibro; Prepare; ExecQuery; Result := True; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaLibros.InicializarGridDetallesLibro(var vGrid: TcxGridDBTableView); var Columna : TcxGridDBColumn; ItemAux : TcxImageComboBoxItem; begin with vGrid do begin OptionsView.Footer := True; {Columna TIPOLIBRO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'TIPOLIBRO'; Columna.Caption := 'Libro'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; Columna.Visible := False; {Columna FECHAENTRADA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FECHAENTRADA'; Columna.Caption := 'Fecha entrada'; Columna.Width := tamColFechaEntrada; Columna.Options.Filtering := False; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: 0 entradas'; Kind := skCount; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna NUMENTRADA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NUMENTRADA'; Columna.Caption := 'Nº entrada'; Columna.Width := tamColNumEntrada; Columna.Options.Filtering := False; Columna.SortOrder := soDescending; {Columna TIPOENTRADA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'TIPOENTRADA'; Columna.Caption := 'Tipo'; Columna.Width := tamColTipoEntrada; Columna.Options.Filtering := False; Columna.Visible := True; Columna.PropertiesClassName := 'TcxImageComboBoxProperties'; with TcxImageComboBoxProperties(Columna.Properties) do begin DropDownRows := 2; Images := imgGridLibros; with TcxImageComboBoxItem(Items.Add) do begin ImageIndex := 0; Value := CTE_ENT; Description := 'Entrada'; end; with TcxImageComboBoxItem(Items.Add) do begin ImageIndex := 1; Value := CTE_SAL; Description := 'Salida'; end; with TcxImageComboBoxItem(Items.Add) do begin ImageIndex := 2; Value := CTE_CIERRE; Description := 'Cierre'; end; end; {Columna DESCRIPCION} Columna := CreateColumn; Columna.DataBinding.FieldName := 'DESCRIPCION'; Columna.Caption := 'Descripción'; Columna.Width := tamColDescripcion; Columna.Options.Filtering := False; {Columna CUANTIA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CUANTIA'; Columna.Caption := 'Cuantia'; Columna.Width := tamColImporte; Columna.Options.Filtering := False; {with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '#,0.00# €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end;} {Columna IMPORTEANT} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTEANT'; Columna.Caption := 'Importe anterior'; Columna.Width := tamColImporte; Columna.Options.Filtering := False; {with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '#,0.00# €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end;} {Columna IMPORTEPOS} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTEPOS'; Columna.Caption := 'Importe posterior'; Columna.Width := tamColImporte; Columna.Options.Filtering := False; {with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '#,0.00# €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end;} end; end; procedure TdmTablaLibros.InicializarTablaDetallesLibro(Tabla: TPTabla); begin with Tabla^.Fields do begin if FindField('CUANTIA') <> NIL then with (FieldByName('CUANTIA') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('IMPORTEANT') <> NIL then with (FieldByName('IMPORTEANT') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('IMPORTEPOS') <> NIL then with (FieldByName('IMPORTEPOS') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; end; end; function TdmTablaLibros.AnadirDetalleLibro(Datos: TDatosDetalleLibro): 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 DETALLESLIBROS (CODIGOEMPRESA, TIPOLIBRO, NUMENTRADA, TIPOENTRADA, FECHAALTA, '); SQL.Add('USUARIO, FECHAENTRADA, DESCRIPCION, CUANTIA, IMPORTEANT, IMPORTEPOS) '); SQL.Add('VALUES (:CODIGOEMPRESA, :TIPOLIBRO, :NUMENTRADA, :TIPOENTRADA, :FECHAALTA, :USUARIO, :FECHAENTRADA, '); SQL.Add(':DESCRIPCION, :CUANTIA, :IMPORTEANT, :IMPORTEPOS)'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('TIPOLIBRO').AsString := Datos.TipoLibro; ParamByName('NUMENTRADA').AsString := Datos.NumEntrada; ParamByName('TIPOENTRADA').AsString := Datos.TipoEntrada; ParamByName('FECHAALTA').AsString := Datos.FechaAlta; ParamByName('USUARIO').AsString := Datos.Usuario; ParamByName('FECHAENTRADA').AsString := Datos.FechaEntrada; ParamByName('DESCRIPCION').AsString := Datos.Descripcion; ParamByName('CUANTIA').AsDouble := Datos.Cuantia; ParamByName('IMPORTEANT').AsDouble := Datos.ImporteAnt; ParamByName('IMPORTEPOS').AsDouble := Datos.ImportePos; Prepare; ExecQuery; Result := True; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaLibros.CerrarLibro(TipoLibro : String): Boolean; var oSQL : TIBSQL; begin Result := False; if esCadenaVacia(TipoLibro) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('insert into DETALLESLIBROS (CODIGOEMPRESA, TIPOLIBRO, NUMENTRADA, TIPOENTRADA, FECHAALTA, '); SQL.Add('USUARIO, FECHAENTRADA, DESCRIPCION, CUANTIA, IMPORTEANT, IMPORTEPOS) '); SQL.Add('VALUES (:CODIGOEMPRESA, :TIPOLIBRO, :NUMENTRADA, :TIPOENTRADA, :FECHAALTA, :USUARIO, :FECHAENTRADA, '); SQL.Add(':DESCRIPCION, :CUANTIA, :IMPORTEANT, :IMPORTEPOS)'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('TIPOLIBRO').AsString := TipoLibro; ParamByName('NUMENTRADA').AsString := darNumEntrada(TipoLibro); ParamByName('TIPOENTRADA').AsString := CTE_CIERRE; ParamByName('FECHAALTA').AsString := DateToStr(dmBaseDatos.darFecha); ParamByName('USUARIO').AsString := dmBaseDatos.Usuario; ParamByName('FECHAENTRADA').AsString := ParamByName('FECHAALTA').AsString; ParamByName('DESCRIPCION').AsString := msgLibCierre; ParamByName('CUANTIA').AsDouble := 0; ParamByName('IMPORTEANT').AsDouble := darUltimoImportePos(TipoLibro); ParamByName('IMPORTEPOS').AsDouble := darUltimoImportePos(TipoLibro); Prepare; ExecQuery; if incrementarNumEntrada(TipoLibro) then Result := True; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaLibros.darNumEntrada(psTipoLibro: String): Variant; begin if (psTipoLibro = 'C') then Result := dmTablaLibros.DarNuevoCodigoCaja else if (psTipoLibro = 'B') then Result := dmTablaLibros.DarNuevoCodigoBanco else begin VerMensaje('Log: Error el codigo de libro no existe'); Result := Null; end; end; function TdmTablaLibros.incrementarNumEntrada(psTipoLibro: String): Boolean; begin if (psTipoLibro = 'C') then dmTablaLibros.IncrementarCodigoCaja else if (psTipoLibro = 'B') then dmTablaLibros.IncrementarCodigoBanco else begin VerMensaje('Log: Error el codigo de libro no existe'); Result := False; end; Result := True; end; { function TdmTablaLibros.darDescripcionLibro(Codigo: String): String; var oSQL : TIBSQL; begin Result := ''; if EsCadenaVacia(Codigo) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select DESCRIPCION '); SQL.Add('from LIBROS '); SQL.Add('where CODIGO = :CODIGO'); ParamByName('CODIGO').AsString := Codigo; try Prepare; ExecQuery; Result := Fields[0].AsString; finally Close; Transaction := NIL; Free; end; end; end; } function TdmTablaLibros.anadirEntradaLibro(Entidad: TRdxEntidad; Modo: TRdxModo; Datos: TDatosPago): Boolean; var lDatosDetalleLibro : TDatosDetalleLibro; lsAux : String; Importe : Double; lsNumEntrada : Variant; lsTipoEntrada : Variant; begin Result := False; try //Detalle libro lDatosDetalleLibro := TDatosDetalleLibro.Create; //Descripcion lsAux := msgCliSep1; lsAux := lsAux + Datos.TipoPago; Importe := Datos.Importe; case Entidad of entPagoProveedor : begin lsAux := lsAux + msgCliSep9; lsTipoEntrada := CTE_SAL; end; entAbonoProveedor : begin lsAux := lsAux + msgCliSep9; lsTipoEntrada := CTE_ENT; end; entCobroCliente : begin lsAux := lsAux + msgCliSep2; lsTipoEntrada := CTE_ENT; end; entAbonoCliente : begin lsAux := lsAux + msgCliSep2; lsTipoEntrada := CTE_SAL; end; else begin VerMensaje('Log: la entidad no se corresponde con ningun tipo de pago'); lDatosDetalleLibro.Free; exit; end; end; lDatosDetalleLibro.TipoLibro := Datos.TipoLibro; lDatosDetalleLibro.NumEntrada := Datos.NumEntrada; //Cabecera lDatosDetalleLibro.FechaAlta := Datos.FechaAlta; lDatosDetalleLibro.Usuario := Datos.Usuario; lDatosDetalleLibro.FechaEntrada := Datos.FechaPago; //Descripcion lsAux := lsAux + Datos.Codigo; lsAux := lsAux + msgCliSep3; lsAux := lsAux + Datos.Nombre; lsAux := lsAux + msgCliSep4; lDatosDetalleLibro.Descripcion := lsAux + Datos.Descripcion; lDatosDetalleLibro.TipoEntrada := lsTipoEntrada; lDatosDetalleLibro.Cuantia := Importe; lDatosDetalleLibro.ImporteAnt := darUltimoImportePos(lDatosDetalleLibro.TipoLibro); lDatosDetalleLibro.ImportePos := lDatosDetalleLibro.ImporteAnt + Importe; if AnadirDetalleLibro(lDatosDetalleLibro) then begin if incrementarNumEntrada(lDatosDetalleLibro.TipoLibro) then Result := True; end; finally lDatosDetalleLibro.Free; end; end; function TdmTablaLibros.anularEntradaLibro(Entidad: TRdxEntidad; Modo: TRdxModo; Datos: TDatosPago): Boolean; var lDatosDetalleLibro : TDatosDetalleLibro; lsAux : String; Importe : Double; lsNumEntrada : Variant; lsTipoEntrada : Variant; begin Result := False; try //Detalle libro lDatosDetalleLibro := TDatosDetalleLibro.Create; lDatosDetalleLibro.TipoLibro := Datos.TipoLibro; lsNumEntrada := dmTablaLibros.darNumEntrada(lDatosDetalleLibro.TipoLibro); if (esCadenaVacia(lsNumEntrada)) then begin VerMensaje('Log: A fallado el NumEntrada '); lDatosDetalleLibro.Free; exit; end; lDatosDetalleLibro.NumEntrada := lsNumEntrada; //Cabecera lDatosDetalleLibro.FechaAlta := DateToStr(dmBaseDatos.darFecha); lDatosDetalleLibro.Usuario := dmBaseDatos.Usuario; lDatosDetalleLibro.FechaEntrada := lDatosDetalleLibro.FechaAlta; //Descripcion lsAux := msgCliSep5; lsAux := lsAux + Datos.NumEntrada; case Modo of Modificar : lsAux := lsAux + msgCliSep6; Eliminar : lsAux := lsAux + msgCliSep7; else begin VerMensaje('Log: el modo no se corresponde con ningun tipo de pago'); lDatosDetalleLibro.Free; exit; end; end; lsAux := lsAux + Datos.TipoPago; lsAux := lsAux + msgCliSep8; lsAux := lsAux + Datos.Codigo; lsAux := lsAux + msgCliSep4; lsAux := lsAux + Datos.Descripcion; lDatosDetalleLibro.Descripcion := lsAux; Importe := (-1) * Datos.Importe; case Entidad of entPagoProveedor : lsTipoEntrada := CTE_ENT; entAbonoProveedor : lsTipoEntrada := CTE_SAL; entCobroCliente : lsTipoEntrada := CTE_SAL; entAbonoCliente : lsTipoEntrada := CTE_ENT; else begin VerMensaje('Log: la entidad no se corresponde con ningun tipo de pago'); lDatosDetalleLibro.Free; exit; end; end; lDatosDetalleLibro.TipoEntrada := lsTipoEntrada; lDatosDetalleLibro.Cuantia := Importe; lDatosDetalleLibro.ImporteAnt := dmTablaLibros.darUltimoImportePos(lDatosDetalleLibro.TipoLibro); lDatosDetalleLibro.ImportePos := lDatosDetalleLibro.ImporteAnt + Importe; if dmTablaLibros.AnadirDetalleLibro(lDatosDetalleLibro) then begin if dmTablaLibros.incrementarNumEntrada(lDatosDetalleLibro.TipoLibro) then Result := True; end; finally lDatosDetalleLibro.Free; end; end; function TdmTablaLibros.crearLibros(CodigoEmpresa: Variant): boolean; begin Result := True; if not existenLibros(CodigoEmpresa) then Result := insertarLibros(CodigoEmpresa); end; function TdmTablaLibros.existenLibros(CodigoEmpresa: Variant): Boolean; var oSQL : TIBSQL; begin Result := False; if VarIsNull(CodigoEmpresa) then exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select count(CODIGOEMPRESA) as NUMLIBROS'); SQL.Add('from LIBROS'); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); try ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; Prepare; ExecQuery; Result := (FieldByName('NUMLIBROS').AsInteger <> 0); finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaLibros.insertarLibro(TipoLibro: TTiposLibro; CodigoEmpresa: Variant): Boolean; var oSQL : TIBSQL; begin Result := False; if VarIsNull(CodigoEmpresa) then exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('insert into LIBROS'); SQL.Add('(CODIGOEMPRESA, TIPO, DESCRIPCION) '); SQL.Add('VALUES '); SQL.Add('(:CODIGOEMPRESA, :TIPO, :DESCRIPCION)'); ParamByName('CODIGOEMPRESA').AsVariant := CodigoEmpresa; ParamByName('TIPO').AsString := darTipoLibro(TipoLibro); ParamByName('DESCRIPCION').AsString := darDescripcionLibro(TipoLibro); try Prepare; ExecQuery; Result := True; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaLibros.insertarLibros(CodigoEmpresa: Variant): Boolean; begin Result := False; if not insertarLibro(ttlCaja, CodigoEmpresa) then begin exit; end; if not insertarLibro(ttlBanco, CodigoEmpresa) then begin exit; end; Result := True; end; function TdmTablaLibros.darDescripcionLibro(TipoLibro: TTiposLibro): String; begin Result := StrCapitalize(CaptionsDescripcionLibro [TipoLibro]); end; function TdmTablaLibros.darTipoLibro(TipoLibro: TTiposLibro): String; begin Result := StrCapitalize(CaptionsTiposLibro [TipoLibro]); end; { TListaLibros } procedure TListaLibros.AssignTo(Dest: TPersistent); begin // end; function TListaLibros.cargarLista(Objcbx: TcxComboBox): Integer; //Carga todos los libros en el combox y devuelve el elemento determinado por defecto var i, j : integer; begin Result := 0; //Recorremos lista j := -1; for i := 0 to FLista.Count - 1 do begin Objcbx.Properties.Items.Add(Self.Items[i].Nombre); j := j + 1; if Self.Items[i].Predeterminado then Result := j; end; end; constructor TListaLibros.Create(TipoLista: TListaComboTiposLibro); begin inherited Create; FSQL := TStringList.Create; case (TipoLista) of tltDefecto: ObtenerLista; tltTodos: begin inicializarSQL(TipoLista); ObtenerListaBD; end; end; end; destructor TListaLibros.Destroy; begin FSQL.Free; FSQL := nil; inherited Destroy; end; function TListaLibros.GetDatosLibro(Index: Integer): TDatosLibro; begin Result := TDatosLibro(FLista.Items[Index]); end; procedure TListaLibros.inicializarSQL(TipoLista: TListaComboTiposLibro); begin case (TipoLista) of tltTodos: begin with FSQL do begin Add('select LI.CODIGOEMPRESA, LI.TIPO, LI.DESCRIPCION, EM.LIBRODEFECTO'); Add('from LIBROS LI, EMPRESAS EM'); Add('where LI.CODIGOEMPRESA = :CODIGOEMPRESA'); Add('and EM.CODIGO = LI.CODIGOEMPRESA'); end; end; end; end; procedure TListaLibros.ObtenerLista; var FLibro : TDatosLibro; begin FLibro := TDatosLibro.Create(); FLibro.Codigo := dmTablaLibros.darTipoLibro(ttlCaja); FLibro.Nombre := dmTablaLibros.darDescripcionLibro(ttlCaja); FLista.Add(FLibro); FLibro := TDatosLibro.Create(); FLibro.Codigo := dmTablaLibros.darTipoLibro(ttlBanco); FLibro.Nombre := dmTablaLibros.darDescripcionLibro(ttlBanco); FLista.Add(FLibro); end; procedure TListaLibros.ObtenerListaBD; var oSQL : TIBSQL; FLibro : TDatosLibro; begin oSQL := TIBSQL.Create(nil); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Text := FSQL.Text; try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; ExecQuery; while not EOF do begin FLibro := TDatosLibro.Create(); FLibro.Codigo := FieldByName('TIPO').AsString; FLibro.Nombre := FieldByName('DESCRIPCION').AsString; FLibro.Predeterminado := (FieldByName('LIBRODEFECTO').AsString = FLibro.Codigo); FLista.Add(FLibro); Next; end; finally Close; Transaction := NIL; Free; end; end; end; end.