{ =============================================================================== 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.0 Fecha versión actual: 26-01-2003 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- =============================================================================== } unit DetallesLibro; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, ComCtrls, RdxBotones, ToolWin, ExtCtrls, Menus, am2000menuitem, am2000popupmenu, am2000, Db, DBTables, RXDBCtrl, RdxPaneles, RdxBarras, RdxDBFrame, RdxFrame, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxEdit, cxDBData, cxGridTableView, cxGridCustomTableView, cxGridDBTableView, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGrid, Configuracion, StdCtrls, Buttons, AdvPanel, cxContainer, cxTextEdit, cxMaskEdit, cxDropDownEdit, cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox, ActnList, RdxFrameDetallesLibro, ImgList, RdxEmpresaActiva, am2000utils, cxDataStorage; type TfrDetallesLibro = class(TRdxFrameDetallesLibro) dsDetallesLibro: TDataSource; brSeleccion: TRdxBarraInferior; bSeleccionar: TRdxBoton; bCancelar: TRdxBoton; BarraDetallesLibro: TRdxBarraSuperior; MenuOpciones: TPopupMenu2000; mnuAnadir: TMenuItem2000; mnuEliminar: TMenuItem2000; VistaDetalles: TcxGridDBTableView; gridDetallesLibroLevel1: TcxGridLevel; gridDetallesLibro: TcxGrid; mnuConsultar: TMenuItem2000; pnlCuerpo: TPanel; Acciones: TActionList; actModificar: TAction; actConsultar: TAction; actSeleccionar: TAction; actCancelar: TAction; actImprimir: TAction; mnuImprimir: TMenuItem2000; actAnular: TAction; menuAnadir: TPopupMenu2000; mnuEntrada: TMenuItem2000; mnuSalida: TMenuItem2000; actAnadirEnt: TAction; actAnadirSal: TAction; bAnadir: TRdxBotonMenu; bEliminar: TRdxBotonSuperior; bConsultar: TRdxBotonSuperior; bAnular: TRdxBotonSuperior; bCerrar: TRdxBotonSuperior; actCerrar: TAction; bSeparador1: TShape; mnuAnular: TMenuItem2000; mnuCerrar: TMenuItem2000; mnuSep: TMenuItem2000; RdxBotonSuperior1: TRdxBotonSuperior; bImprimir: TRdxBotonSuperior; bSeparador2: TShape; actCambioTrimestre: TAction; imgSombra: TImage; pnlCuerpo2: TRdxPanel; pnlExtra: TRdxBarraSuperior; bRefrescar: TRdxBoton; actGestionVentas: TAction; actGestionCompras: TAction; menuGestionar: TPopupMenu2000; MenuItem20001: TMenuItem2000; MenuItem20002: TMenuItem2000; bGestionar: TRdxBotonMenu; Panel1: TPanel; eNombre: TLabel; Buscar: TcxTextEdit; RdxBoton1: TRdxBoton; procedure actAnadirEntExecute(Sender: TObject); procedure actAnadirSalExecute(Sender: TObject); procedure actModificarExecute(Sender: TObject); procedure actConsultarExecute(Sender: TObject); procedure actAnularExecute(Sender: TObject); procedure actSeleccionarExecute(Sender: TObject); procedure actCancelarExecute(Sender: TObject); procedure actImprimirExecute(Sender: TObject); procedure bLimpiarClick(Sender: TObject); procedure RdxFrameDetallesLibroShow(Sender: TObject); procedure VistaDetallesDblClick(Sender: TObject); procedure VistaDetallesCustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); procedure actCerrarExecute(Sender: TObject); procedure actCambioTrimestreExecute(Sender: TObject); procedure actRefrescarDatosExecute(Sender: TObject); procedure actGestionVentasExecute(Sender: TObject); procedure actGestionComprasExecute(Sender: TObject); procedure BuscarPropertiesChange(Sender: TObject); private FListaTipoLibro: TStringList; procedure ActualizarBotones; protected procedure SetTipoLibro (Value : Variant); override; procedure BuscarLibro; override; procedure BuscarNumEntrada; override; procedure FreeContenido; override; public constructor Create (AOwner : TComponent); override; destructor Destroy; override; published end; var frDetallesLibro: TfrDetallesLibro; implementation {$R *.DFM} uses IBCustomDataSet, BaseDatos, Entidades, Variants, Mensajes, IBSQL, IBDatabase, IB, Excepciones, TablaLibros, Literales, DetalleLibro, ImprimirLibro, StrFunc, Constantes, TrimestrePredeterminado, TablaEmpresas, InformeTrimestral; //////////////////////////////////////////////////////////////////////////////// // PRIVATE //////////////////////////////////////////////////////////////////////////////// procedure TfrDetallesLibro.ActualizarBotones; begin if BaseDatos.IsReadOnly then begin actAnadirEnt.Enabled := False; actAnadirSal.Enabled := False; actModificar.Enabled := False; actConsultar.Enabled := True; actImprimir.Enabled := True; actAnular.Enabled := False; actCerrar.Enabled := False; Exit; end; if TablaDetallesLibro.RecordCount = 0 then begin actAnadirEnt.Enabled := True; actAnadirSal.Enabled := True; actModificar.Enabled := False; actConsultar.Enabled := False; actImprimir.Enabled := False; actAnular.Enabled := False; actCerrar.Enabled := False; end else begin actAnadirEnt.Enabled := True; actAnadirSal.Enabled := True; actModificar.Enabled := True; actConsultar.Enabled := True; actImprimir.Enabled := True; actAnular.Enabled := True; actCerrar.Enabled := True; end; end; //////////////////////////////////////////////////////////////////////////////// // PROTECTED //////////////////////////////////////////////////////////////////////////////// procedure TfrDetallesLibro.SetTipoLibro(Value: Variant); begin inherited; BarraDetallesLibro.Caption := FListaTipoLibro.Values[Value]; VistaDetalles.Controller.GoToFirst; end; procedure TfrDetallesLibro.BuscarLibro; begin if Transaccion = NIL then exit; try TablaDetallesLibro.DisableControls; TablaDetallesLibro.Close; // if not esCadenaVacia(TipoLibro) then TablaDetallesLibro.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; TablaDetallesLibro.ParamByName('TIPOLIBRO').AsString := TipoLibro; TablaDetallesLibro.Prepare; TablaDetallesLibro.Open; dmTablaLibros.InicializarTablaDetallesLibro(@TablaDetallesLibro); ActualizarBotones; TablaDetallesLibro.EnableControls; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrDetallesLibro.BuscarNumEntrada; begin with TablaDetallesLibro do begin DisableControls; Close; Open; dmTablaLibros.InicializarTablaDetallesLibro(@TablaDetallesLibro); ActualizarBotones; EnableControls; end; if not TablaDetallesLibro.Locate('NUMENTRADA',NumEntrada,[]) then VistaDetalles.Controller.GoToFirst else VistaDetalles.Controller.TopRowIndex := VistaDetalles.Controller.FocusedRowIndex; end; procedure TfrDetallesLibro.FreeContenido; begin if (Contenido is TRdxFrameDetallesLibro) then begin TipoLibro := (Contenido as TRdxFrameDetallesLibro).TipoLibro; NumEntrada := (Contenido as TRdxFrameDetallesLibro).NumEntrada; end; inherited FreeContenido; gridDetallesLibro.SetFocus; end; //////////////////////////////////////////////////////////////////////////////// // PUBLIC //////////////////////////////////////////////////////////////////////////////// constructor TfrDetallesLibro.Create (AOwner : TComponent); begin inherited Create(AOwner); Entidad := entEntLibro; FListaTipoLibro := TStringList.Create; dmTablaLibros.darLibros(FListaTipoLibro); BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaDetallesLibro := TIBDataSet.Create(Self); dsDetallesLibro.DataSet := TablaDetallesLibro; with TablaDetallesLibro do begin DisableControls; Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaLibros.sqlGridDetallesLibro); ActualizarBotones; EnableControls; end; dmTablaLibros.InicializarGridDetallesLibro(VistaDetalles); VistaDetalles.OnDblClick := VistaDetallesDblClick; VistaDetalles.Controller.GoToFirst; end; destructor TfrDetallesLibro.Destroy; begin TablaDetallesLibro.Close; TablaDetallesLibro.Unprepare; TablaDetallesLibro.Free; FListaTipoLibro.Free; FListaTipoLibro := NIL; inherited; end; procedure TfrDetallesLibro.actAnadirEntExecute(Sender: TObject); var lfrContenido : TfrDetalleLibro; begin lfrContenido := TfrDetalleLibro.Create(Self); lfrContenido.TipoLibro := TipoLibro; Contenido := lfrContenido; Contenido.Entidad := entEntLibro; Contenido.Modo := Anadir; end; procedure TfrDetallesLibro.actAnadirSalExecute(Sender: TObject); var lfrContenido : TfrDetalleLibro; begin lfrContenido := TfrDetalleLibro.Create(Self); lfrContenido.TipoLibro := TipoLibro; Contenido := lfrContenido; Contenido.Entidad := entSalLibro; Contenido.Modo := Anadir; end; procedure TfrDetallesLibro.actModificarExecute(Sender: TObject); var lfrContenido : TfrDetalleLibro; begin lfrContenido := TfrDetalleLibro.Create(Self); lfrContenido.TipoLibro := TipoLibro; Contenido := lfrContenido; Contenido.Modo := Modificar; end; procedure TfrDetallesLibro.actConsultarExecute(Sender: TObject); var lfrContenido : TfrDetalleLibro; begin lfrContenido := TfrDetalleLibro.Create(Self); lfrContenido.TipoLibro := TipoLibro; Contenido := lfrContenido; Contenido.Modo := Consultar; end; procedure TfrDetallesLibro.actAnularExecute(Sender: TObject); var lDatosDetalleLibro : TDatosDetalleLibro; Importe : Double; lsAux : Variant; begin //En el caso de ser un cierre no se anulara nunca if (TablaDetallesLibro.FieldByName('TIPOENTRADA').AsString = CTE_CIERRE) then exit; if VerMensajePregunta('Esta seguro que desea anular la entrada seleccionada') = mrYES then begin lDatosDetalleLibro := TDatosDetalleLibro.Create; lDatosDetalleLibro.TipoLibro := TipoLibro; lDatosDetalleLibro.NumEntrada := TablaDetallesLibro.FieldByName('NUMENTRADA').AsString; //Descripcion lsAux := msgCliSep5; lsAux := lsAux + lDatosDetalleLibro.NumEntrada; lsAux := lsAux + msgCliSep4; if dmTablaLibros.darDatosDetalleLibro(lDatosDetalleLibro) then begin //Añadimos descripcion lsAux := lsAux + lDatosDetalleLibro.Descripcion; lDatosDetalleLibro.Descripcion := lsAux; //Demás operaciones lDatosDetalleLibro.NumEntrada := dmTablaLibros.darNumEntrada(lDatosDetalleLibro.TipoLibro); Importe := (-1) * lDatosDetalleLibro.Cuantia; if Importe < 0 then lDatosDetalleLibro.TipoEntrada := CTE_SAL else lDatosDetalleLibro.TipoEntrada := CTE_ENT; 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 commit else begin rollback; verMensaje('No se ha podido anular la entrada'); end end else begin rollback; verMensaje('No se ha podido anular la entrada'); end; end else verMensaje('Log: error en laq recogida de datos'); lDatosDetalleLibro.Free; BuscarNumEntrada; end; end; procedure TfrDetallesLibro.actSeleccionarExecute(Sender: TObject); begin if TablaDetallesLibro.RecordCount = 0 then begin VerMensaje(msgLibNoExisteEnt); exit; end; NumEntrada := TablaDetallesLibro.FieldByName('NUMENTRADA').AsString; CloseFrame; end; procedure TfrDetallesLibro.actCancelarExecute(Sender: TObject); begin NumEntrada := NULL; CloseFrame; end; procedure TfrDetallesLibro.bLimpiarClick(Sender: TObject); begin Buscar.Text := ''; end; procedure TfrDetallesLibro.RdxFrameDetallesLibroShow(Sender: TObject); begin gridDetallesLibro.SetFocus; end; procedure TfrDetallesLibro.VistaDetallesDblClick(Sender: TObject); begin if Modo = Seleccionar then actSeleccionar.Execute else actConsultar.Execute; end; procedure TfrDetallesLibro.actImprimirExecute(Sender: TObject); var lfrContenido : TfrImprimirLibro; begin lfrContenido := TfrImprimirLibro.Create(Self); lfrContenido.TipoLibro := TipoLibro; Contenido := lfrContenido; Contenido.Modo := Imprimir; end; procedure TfrDetallesLibro.VistaDetallesCustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); var IndiceCol : Integer; begin if not AViewInfo.Selected then begin IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName('TIPOENTRADA').Index; if UpperCase(Copy(AViewInfo.GridRecord.DisplayTexts[IndiceCol], 1, 1)) = CTE_CIERRE then begin ACanvas.Canvas.Brush.Color := $006D1555; ACanvas.Canvas.Font.Color := clWhite; end; IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName('CUANTIA').Index; if (IndiceCol = AViewInfo.Item.Index) then begin if Copy(Trim(AViewInfo.GridRecord.DisplayTexts[IndiceCol]), 1, 1) = '-' then begin ACanvas.Canvas.Font.Color := $000000CC; end; end; end; end; procedure TfrDetallesLibro.actCerrarExecute(Sender: TObject); begin if dmTablaLibros.CerrarLibro(TablaDetallesLibro.FieldByName('TIPOLIBRO').AsString) then Commit else Rollback; BuscarNumEntrada; end; procedure TfrDetallesLibro.actCambioTrimestreExecute(Sender: TObject); begin fTrimestrePredeterminado := TfTrimestrePredeterminado.Create(Self); fTrimestrePredeterminado.Entidad := entEntLibro; try fTrimestrePredeterminado.ShowModal; finally fTrimestrePredeterminado.Free; end; end; procedure TfrDetallesLibro.actRefrescarDatosExecute(Sender: TObject); begin BuscarLibro; VistaDetalles.DataController.GotoFirst; end; procedure TfrDetallesLibro.actGestionVentasExecute(Sender: TObject); begin CaptionModal := 'Gestionar trimestre de ventas'; HeightModal := 600; WidthModal := 950; ModoModal := Consultar; EntidadModal := entInformeTrimestralVentas; ContenidoModal := TfrInformeTrimestral.Create(Self); end; procedure TfrDetallesLibro.actGestionComprasExecute(Sender: TObject); begin CaptionModal := 'Gestionar trimestre de compras'; HeightModal := 600; WidthModal := 950; ModoModal := Consultar; EntidadModal := entInformeTrimestralCompras; ContenidoModal := TfrInformeTrimestral.Create(Self); end; procedure TfrDetallesLibro.BuscarPropertiesChange(Sender: TObject); begin FiltrarGrid(gridDetallesLibro, Buscar.Text); end; end.