{ =============================================================================== 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: 16-11-2002 Versión actual: 1.0.1 Fecha versión actual: 02-04-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 02-04-2004 Se ha eliminado el atributo SERIE (P8 MULTIEMPRESA) =============================================================================== } unit ListadoPagosCliente; interface uses Windows, Db, StdCtrls, RdxMemo, RdxCampos, RdxTitulos, Forms, RdxPaneles, RdxBotones, Controls, ExtCtrls, RdxBarras, Classes, RdxFrameComisiones, RdxFrame, RXDBCtrl, RxMemDS, ComCtrls, cxDBEdit, cxMaskEdit, cxButtonEdit, Configuracion, cxControls, cxContainer, cxEdit, cxTextEdit, cxMemo, AdvPanel, cxSpinEdit, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDBData, cxGridLevel, cxClasses, cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, cxDropDownEdit, cxCalendar, InformeComisionesVendedores, vistaPrevia, RdxDBFrame, RdxFrameListadoPagosCliente, InformeListadoPagosCliente, InformeListadoPagosClientes, RdxPageControl, IBCustomDataSet, IBDatabase, RdxEmpresaActiva, cxDataStorage, Entidades; type TfrListadoPagosCliente = class(TRdxFrameListadoPagosCliente) brSimple: TRdxBarraInferior; dsFacturas: TDataSource; Titulo: TRdxPanelTituloOperacion; pnlCuerpo: TPanel; dsPagos: TDataSource; bVistaPrevia: TRdxBoton; bImprimir: TRdxBoton; bCancelar: TRdxBoton; dsClientesPagos: TDataSource; Paginas: TRdxPagesControl; pagPagosClientes: TTabSheet; pagPagosCliente: TTabSheet; pnlDatos: TAdvPanel; Panel3: TPanel; eCodigoCliente: TLabel; eNIFCIF: TLabel; eNombre: TLabel; CodCliente: TcxButtonEdit; NIFCIF: TcxTextEdit; Nombre: TcxTextEdit; Panel2: TPanel; ImportePendiente: TLabel; Panel1: TPanel; Splitter1: TSplitter; gridPagosPendClientes: TcxGrid; gridPagosPendClientescxGridDBTableView1: TcxGridDBTableView; gridPagosPendClientescxGridLevel1: TcxGridLevel; TablaClientesPagosAux: TIBDataSet; TablaClientesPagosAuxDEBE: TIBBCDField; TablaClientesPagosAuxCODIGOCLIENTE: TIBStringField; TablaClientesPagosAuxNOMBRE: TIBStringField; TablaClientesPagosAuxTOTALFACTURAS: TIBBCDField; TablaClientesPagosAuxTOTALPAGOS: TIBBCDField; Panel4: TPanel; Panel5: TPanel; Panel6: TPanel; Panel7: TPanel; Panel8: TPanel; gridFacturas: TcxGrid; cxGridDBTableView1: TcxGridDBTableView; cxGridLevel1: TcxGridLevel; Panel9: TPanel; gridPagos: TcxGrid; gridPagosDBTableView1: TcxGridDBTableView; gridPagosLevel1: TcxGridLevel; eTituloGrid1: TLabel; eTituloGrid2: TLabel; procedure bCancelarClick(Sender: TObject); procedure bImprimirClick(Sender: TObject); procedure bVistaPreviaClick(Sender: TObject); procedure CodClientePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure Panel1Resize(Sender: TObject); procedure IBDataSet1CalcFields(DataSet: TDataSet); procedure PaginasChange(Sender: TObject); procedure gridPagosPendClientescxGridDBTableView1DblClick(Sender: TObject); procedure gridFacturasDBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); procedure cxGridDBTableView1DataControllerSummaryAfterSummary(ASender: TcxDataSummary); private FInformeListadoPagosCliente : TdmInformeListadoPagosCliente; FInformeListadoPagosClientes : TdmInformeListadoPagosClientes; FPagos : Double; FDebe : Double; FTotal : Double; property Pagos: Double read FPagos write FPagos; property Debe: Double read FDebe write FDebe; property Total: Double read FTotal write FTotal; procedure Filtrar; protected procedure ActivarModoConsultar; override; procedure RecargarDatos; override; procedure FreeContenido; override; procedure BuscarFacturas; procedure BuscarPagos; public constructor Create (AOwner : TComponent); override; destructor Destroy; override; published procedure activarFacturasCobrosCliente; end; var frListadoPagosCliente: TfrListadoPagosCliente; implementation {$R *.DFM} uses Mensajes, IB, Colores, BaseDatos, Sysutils, Constantes, StrFunc, TablaPoblaciones, Excepciones, IBErrorCodes, Variants, NumFunc, Literales, TablaFacturasCliente, TablaPagosCliente, DateFunc, cxCheckBox, cxDateUtils, Graphics, Clientes, RdxFrameClientes, TablaClientes, TablaEmpresas; procedure TfrListadoPagosCliente.ActivarModoConsultar; begin Visible := True; end; procedure TfrListadoPagosCliente.BuscarFacturas; begin if Transaccion = NIL then Exit; try TablaFacturas.Close; // Buscar la fila a tratar si es necesario if not EsCadenaVacia(CodigoCliente) then begin TablaFacturas.ParamByName('CODIGOCLIENTE').AsString := CodigoCliente; TablaFacturas.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; end; TablaFacturas.Prepare; TablaFacturas.Open; dmTablaFacturasCliente.InicializarTablaFacturas(@TablaFacturas); gridFacturas.ActiveView.DataController.GotoFirst; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrListadoPagosCliente.BuscarPagos; begin if Transaccion = NIL then Exit; try TablaPagos.Close; // Buscar la fila a tratar si es necesario if not EsCadenaVacia(CodigoCliente) then begin TablaPagos.ParamByName('CODIGOCLIENTE').AsString := CodigoCliente; TablaPagos.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; end; TablaPagos.Prepare; TablaPagos.Open; dmTablaPagosCliente.InicializarTablaPagosClientes(@TablaPagos); gridPagos.ActiveView.DataController.GotoFirst; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; constructor TfrListadoPagosCliente.Create (AOwner : TComponent); var Columna : TcxGridDBColumn; begin inherited Create(AOwner); FInformeListadoPagosCliente := TdmInformeListadoPagosCliente.Create(Self); FInformeListadoPagosClientes := TdmInformeListadoPagosClientes.Create(Self); Entidad := entListadoPagosCliente; Pagos := 0; Debe := 0; Total := 0; BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaClientesPagos := TablaClientesPagosAux; TablaFacturas := TIBDataSet.Create(Self); TablaPagos := TIBDataSet.Create(Self); dsClientesPagos.DataSet := TablaClientesPagos; dsFacturas.DataSet := TablaFacturas; dsPagos.DataSet := TablaPagos; with TablaClientesPagos do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaPagosCliente.sqlGridPagosPendCliente); RefreshSQL.Assign(dmTablaPagosCliente.sqlGridPagosPendCliente); AutoCalcFields := True; OnCalcFields := IBDataSet1CalcFields; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; Open; end; with TablaFacturas do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaFacturasCliente.sqlConsultarGridFacturasCliente); RefreshSQL.Assign(dmTablaFacturasCliente.sqlConsultarGridFacturasCliente); end; with TablaPagos do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaPagosCliente.sqlGridPagosCliente); RefreshSQL.Assign(dmTablaPagosCliente.sqlGridPagosCliente); end; dmTablaPagosCliente.InicializarGridPagosPendClientes(gridPagosPendClientescxGridDBTableView1); dmTablaPagosCliente.InicializarTablaPagosPendClientes(@TablaClientesPagos); gridPagosPendClientescxGridDBTableView1.DataController.Summary.OnAfterSummary := cxGridDBTableView1DataControllerSummaryAfterSummary; gridPagosPendClientes.ActiveView.DataController.GotoFirst; dmTablaFacturasCliente.InicializarGridListadoFacturasCliente(gridFacturas); dmTablaPagosCliente.InicializarTablaPagosPendClientes(@TablaClientesPagos); dmTablaPagosCliente.InicializarGridListadoPagosCliente(gridPagos); cxGridDBTableView1.DataController.Summary.OnAfterSummary := cxGridDBTableView1DataControllerSummaryAfterSummary; gridPagosDBTableView1.DataController.Summary.OnAfterSummary := cxGridDBTableView1DataControllerSummaryAfterSummary; Filtrar; if VarIsNull(TablaClientesPagos.FieldByName('CODIGOCLIENTE').AsVariant) then CodigoCliente := dmTablaClientes.DarCodCliMin else CodigoCliente := TablaClientesPagos.FieldByName('CODIGOCLIENTE').AsVariant; Paginas.ActivePageIndex := 0; end; destructor TfrListadoPagosCliente.Destroy; begin FInformeListadoPagosCliente.Free; FInformeListadoPagosClientes.Free; TablaClientesPagos.Close; TablaClientesPagos.UnPrepare; TablaClientesPagos.Free; TablaFacturas.Close; TablaFacturas.UnPrepare; TablaFacturas.Free; TablaPagos.Close; TablaPagos.UnPrepare; TablaPagos.Free; inherited; end; procedure TfrListadoPagosCliente.bImprimirClick(Sender: TObject); begin if (Paginas.ActivePageIndex = 0) then begin FInformeListadoPagosClientes.Preview := nil; FInformeListadoPagosClientes.Imprimir; end else begin FInformeListadoPagosCliente.CodigoCliente := CodCliente.Text; FInformeListadoPagosCliente.NIFCIFCliente := NIFCIF.Text; FInformeListadoPagosCliente.NombreCliente := Nombre.Text; FInformeListadoPagosCliente.Pagos := Pagos; FInformeListadoPagosCliente.Debe := Debe; FInformeListadoPagosCliente.Total := Total; FInformeListadoPagosCliente.Preview := nil; FInformeListadoPagosCliente.Imprimir; end; end; procedure TfrListadoPagosCliente.bCancelarClick(Sender: TObject); begin CloseFrame; end; procedure TfrListadoPagosCliente.bVistaPreviaClick(Sender: TObject); var FVistaPrevia : TfrVistaPrevia; begin if (Paginas.ActivePageIndex = 0) then begin FVistaPrevia := TfrVistaPrevia.Create(Self); FInformeListadoPagosClientes.Preview := FVistaPrevia.Preview; FInformeListadoPagosClientes.Previsualizar; CaptionModal := 'Informe de listado de pagos de clientes'; end else begin FInformeListadoPagosCliente.CodigoCliente := CodCliente.Text; FInformeListadoPagosCliente.NIFCIFCliente := NIFCIF.Text; FInformeListadoPagosCliente.NombreCliente := Nombre.Text; FInformeListadoPagosCliente.Pagos := Pagos; FInformeListadoPagosCliente.Debe := Debe; FInformeListadoPagosCliente.Total := Total; FVistaPrevia := TfrVistaPrevia.Create(Self); FInformeListadoPagosCliente.Preview := FVistaPrevia.Preview; FInformeListadoPagosCliente.Previsualizar; CaptionModal := 'Informe de listado de pagos de cliente'; end; WidthModal := 800; HeightModal := 600; ModoModal := Consultar; EntidadModal := entListadoPagosCliente; ContenidoModal := FVistaPrevia; end; procedure TfrListadoPagosCliente.gridFacturasDBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); var IndiceCol : Integer; begin IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName('DEBE').Index; if (IndiceCol = AViewInfo.Item.Index) then begin if Copy(Trim(AViewInfo.GridRecord.DisplayTexts[IndiceCol]), 1, 1) = '-' then begin ACanvas.Canvas.Font.Color := $00385937; end else begin ACanvas.Canvas.Font.Color := $000000CC; end; end; end; procedure TfrListadoPagosCliente.CodClientePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); begin ContenidoModal := TfrClientes.Create(Self); end; procedure TfrListadoPagosCliente.FreeContenido; begin if (ContenidoModal is TRdxFrameClientes) then CodigoCliente := (ContenidoModal as TRdxFrameClientes).CodigoCliente; inherited FreeContenido; end; procedure TfrListadoPagosCliente.RecargarDatos; var DatosCliente : TDatosCliente; begin if not gridPagosPendClientescxGridDBTableView1.DataController.LocateByKey(CodigoCliente) then gridPagosPendClientescxGridDBTableView1.DataController.GotoFirst; DatosCliente := TDatosCliente.Create(CodigoCliente); CodCliente.Text := DatosCliente.Codigo; NIFCIF.Text := DatosCliente.NIFCIF; Nombre.Text := DatosCliente.Nombre; DatosCliente.Free; BuscarFacturas; BuscarPagos; if (not varIsNull(gridPagos.ActiveView.DataController.Summary.FooterSummaryValues[0])) then Pagos := gridPagos.ActiveView.DataController.Summary.FooterSummaryValues[0]; if (not varIsNull(gridFacturas.ActiveView.DataController.Summary.FooterSummaryValues[0])) then Debe := gridFacturas.ActiveView.DataController.Summary.FooterSummaryValues[0]; Total := Debe - Pagos; ImportePendiente.Caption := 'El importe pendiente del cliente es: ' + FormatFloat('#,##0.00 €', Total) + ' '; end; procedure TfrListadoPagosCliente.Panel1Resize(Sender: TObject); begin gridFacturas.Width := (Panel1.ClientWidth - Splitter1.Width) div 2; gridPagos.Width := gridFacturas.Width; end; procedure TfrListadoPagosCliente.IBDataSet1CalcFields(DataSet: TDataSet); begin with DataSet do begin if VarIsNull(FieldByName('TOTALPAGOS').AsVariant) then FieldByName('TOTALPAGOS').AsFloat := 0; if VarIsNull(FieldByName('TOTALFACTURAS').AsVariant) then FieldByName('TOTALFACTURAS').AsFloat := 0; FieldByName('DEBE').AsFloat := FieldByName('TOTALFACTURAS').AsFloat - FieldByName('TOTALPAGOS').AsFloat; end; end; procedure TfrListadoPagosCliente.PaginasChange(Sender: TObject); begin if (Paginas.ActivePageIndex = 1) then CodigoCliente := TablaClientesPagos.FieldByName('CODIGOCLIENTE').AsString; end; procedure TfrListadoPagosCliente.gridPagosPendClientescxGridDBTableView1DblClick(Sender: TObject); begin CodigoCliente := TablaClientesPagos.FieldByName('CODIGOCLIENTE').AsString; Paginas.ActivePageIndex := 1; end; procedure TfrListadoPagosCliente.Filtrar; var Columna : TcxGridDBColumn; AItemList: TcxFilterCriteriaItemList; begin with gridPagosPendClientes.ActiveView.DataController.Filter do begin BeginUpdate; try Root.Clear; Columna := (gridPagosPendClientes.ActiveView as TcxGridDBTableView).GetColumnByFieldName('DEBE'); AItemList := Root.AddItemList(fboOr); AItemList.AddItem(Columna, foGreater, EmpresaActiva.IntervaloPagosCli, 'Mayor'); AItemList.AddItem(Columna, foLess, - EmpresaActiva.IntervaloPagosCli, 'Menor'); Active := True; finally EndUpdate; gridPagosPendClientes.ActiveView.DataController.GotoFirst; end; end; end; procedure TfrListadoPagosCliente.cxGridDBTableView1DataControllerSummaryAfterSummary(ASender: TcxDataSummary); begin if ASender.DataController.Summary.FooterSummaryItems.Count <> 0 then if (esCadenaVacia(ASender.DataController.Summary.FooterSummaryTexts[0])) then ASender.DataController.Summary.FooterSummaryValues[0] := 0; end; procedure TfrListadoPagosCliente.activarFacturasCobrosCliente; begin Paginas.ActivePageIndex := 1; end; end.