{ =============================================================================== 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: 22-04-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 22-04-2004 Arreglado un fallo con el código de empresa al insertar un cobro a cliente nuevo. =============================================================================== } unit TablaPagosCliente; interface uses //Generales SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB, //Particulares IBCustomDataSet, cxGrid, TablaPagosProveedor, //Aplicacion Framework, StrFunc, Entidades, Constantes, BaseDatos, RdxEmpresaActiva, // Contador Contadores, RdxGestorContadores; type TDatosPagoCliente = class(TDatosPago) public CodigoCliente : String; end; type TdmTablaPagosCliente = class(TDataModule) private procedure IniciarSQL; protected public sqlInsertar : TStrings; sqlModificar : TStrings; sqlConsultar : TStrings; sqlEliminar : TStrings; sqlGrid : TStrings; sqlGridPagosCliente : TStrings; sqlGridPagosPendCliente : TStrings; //Metodos que llamaran a contador function DarNuevoCodigo : String; function IncrementarCodigo: boolean; function InsertarContador : boolean; function ValidarCodigo(Codigo : String) : Boolean; function FormatearCodigo(Codigo : String) : String; constructor Create (AOwner : TComponent); override; destructor Destroy; override; function DarDatosPagoCliente(PagoCliente : TDatosPagoCliente) : Boolean; function DarPagoClienteMax : String; function DarPagoClienteMin : String; procedure Inicializargridlistadopagoscliente(var Grid: TcxGrid); procedure InicializarGridPagosClientes(var vGrid: TcxGridDBTableView); procedure InicializarTablaPagosClientes(Tabla: TPTabla); procedure InicializarGridPagosPendClientes(var vGrid: TcxGridDBTableView); procedure InicializarTablaPagosPendClientes(Tabla: TPTabla); function ExistePagoConCliente(Codigo : Variant) : Boolean; end; var dmTablaPagosCliente: TdmTablaPagosCliente; implementation {$R *.DFM} uses Variants, TablaEmpresas; //////////////////////////////////////////////////////////////////////////////// // PRIVATE //////////////////////////////////////////////////////////////////////////////// procedure TdmTablaPagosCliente.IniciarSQL; begin with sqlInsertar do begin Add('INSERT INTO PAGOSCLIENTE (CODIGOEMPRESA, CODIGO, FECHAALTA, USUARIO, FECHAPAGO, '); Add('TIPOLIBRO, NUMENTRADA, TIPOPAGO, FORMAPAGO, DESCRIPCION, IMPORTE, CODIGOCLIENTE, NIFCIF, NOMBRE, CALLE, '); Add('NUMERO, PISO, CODIGOPOSTAL, POBLACION, PROVINCIA, TELEFONO1, TELEFONO2, '); Add('MOVIL1, MOVIL2, FAX, CORREO) '); Add('VALUES (:CODIGOEMPRESA, :CODIGO, :FECHAALTA, :USUARIO, :FECHAPAGO, '); Add(':TIPOLIBRO, :NUMENTRADA, :TIPOPAGO, :FORMAPAGO, :DESCRIPCION, :IMPORTE, :CODIGOCLIENTE, :NIFCIF, :NOMBRE, :CALLE, '); Add(':NUMERO, :PISO, :CODIGOPOSTAL, :POBLACION, :PROVINCIA, :TELEFONO1, :TELEFONO2, '); Add(':MOVIL1, :MOVIL2, :FAX, :CORREO) '); end; with sqlModificar do begin Add('update PAGOSCLIENTE set '); Add('FECHAPAGO = :FECHAPAGO, '); Add('TIPOLIBRO = :TIPOLIBRO, '); Add('NUMENTRADA = :NUMENTRADA, '); Add('TIPOPAGO = :TIPOPAGO, '); Add('FORMAPAGO = :FORMAPAGO, '); Add('DESCRIPCION = :DESCRIPCION, '); Add('IMPORTE = :IMPORTE, '); Add('CODIGOCLIENTE = :CODIGOCLIENTE, '); Add('NIFCIF = :NIFCIF, '); Add('NOMBRE = :NOMBRE, '); Add('CALLE = :CALLE, '); Add('NUMERO = :NUMERO, '); Add('PISO = :PISO, '); Add('CODIGOPOSTAL = :CODIGOPOSTAL, '); Add('POBLACION = :POBLACION, '); Add('PROVINCIA = :PROVINCIA, '); Add('TELEFONO1 = :TELEFONO1, '); Add('TELEFONO2 = :TELEFONO2, '); Add('MOVIL1 = :MOVIL1, '); Add('MOVIL2 = :MOVIL2, '); Add('FAX = :FAX, '); Add('CORREO = :CORREO '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA'); Add('and CODIGO = :CODIGO)'); end; with sqlEliminar do begin Add('DELETE FROM PAGOSCLIENTE '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA'); Add('and CODIGO = :CODIGO)'); end; with sqlConsultar do begin Add('SELECT * FROM PAGOSCLIENTE '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA'); Add('and CODIGO = :CODIGO)'); end; with sqlGrid do begin Add('SELECT CODIGO, TIPOPAGO, CODIGOCLIENTE, NOMBRE, TELEFONO1, FECHAPAGO, FORMAPAGO, IMPORTE '); Add('FROM PAGOSCLIENTE '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA)'); end; with sqlGridPagosCliente do begin Add('SELECT CODIGO, TIPOPAGO, CODIGOCLIENTE, NOMBRE, TELEFONO1, FECHAPAGO, FORMAPAGO, IMPORTE '); Add('FROM PAGOSCLIENTE '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA'); Add('and CODIGOCLIENTE = :CODIGOCLIENTE)'); end; with sqlGridPagosPendCliente do begin Add('select c.codigo as codigocliente, c.nombre, '); Add('(select sum(f2.importetotal)'); Add('from facturascliente f2'); Add('where f2.codigocliente = c.codigo and'); Add('f2.codigoempresa = :CODIGOEMPRESA) totalfacturas,'); Add('(select sum(p.importe)'); Add('from pagoscliente p'); Add('where p.codigocliente = c.codigo and'); Add('p.codigoempresa = :CODIGOEMPRESA) totalpagos,'); Add('0.00 debe'); Add('from clientes c'); Add('where (((select sum(f2.importetotal)'); Add('from facturascliente f2'); Add('where f2.codigocliente = c.codigo and'); Add('f2.codigoempresa = :CODIGOEMPRESA) is not null) or ((select sum(p.importe)'); Add('from pagoscliente p'); Add('where p.codigocliente = c.codigo and'); Add('p.codigoempresa = :CODIGOEMPRESA) is not null))'); end; end; //////////////////////////////////////////////////////////////////////////////// // PUBLIC //////////////////////////////////////////////////////////////////////////////// constructor TdmTablaPagosCliente.Create (AOwner : TComponent); begin inherited; sqlInsertar := TStringList.Create; sqlModificar := TStringList.Create; sqlConsultar := TStringList.Create; sqlEliminar := TStringList.Create; sqlGrid := TStringList.Create; sqlGridPagosCliente := TStringList.Create; sqlGridPagosPendCliente := TStringList.Create; IniciarSQL; end; destructor TdmTablaPagosCliente.Destroy; begin sqlInsertar.Free; sqlModificar.Free; sqlConsultar.Free; sqlEliminar.Free; sqlGrid.Free; sqlGridPagosCliente.Free; sqlGridPagosPendCliente.Free; inherited; end; function TdmTablaPagosCliente.DarDatosPagoCliente(PagoCliente: TDatosPagoCliente): Boolean; var oSQL : TIBSQL; begin Result := False; if EsCadenaVacia(PagoCliente.Codigo) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select * '); SQL.Add('from PAGOSCLIENTE '); SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add('and CODIGO = :CODIGO)'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := PagoCliente.Codigo; Prepare; ExecQuery; // Compruebo si se han recuperado datos if (RecordCount > 0) then begin with PagoCliente do begin FechaAlta := FieldByName('FECHAALTA').AsString; Usuario := FieldByName('USUARIO').AsString; FechaPago := FieldByName('FECHAPAGO').AsString; TipoLibro := FieldByName('TIPOLIBRO').AsString; NumEntrada := FieldByName('NUMENTRADA').AsString; TipoPago := FieldByName('TIPOPAGO').AsString; Importe := FieldByName('IMPORTE').AsDouble; FormaPago := FieldByName('FORMAPAGO').AsString; Descripcion := FieldByName('DESCRIPCION').AsString; CodigoCliente := FieldByName('CODIGOCLIENTE').AsString; NIFCIF := FieldByName('NIFCIF').AsString; Nombre := FieldByName('NOMBRE').AsString; Calle := FieldByName('CALLE').AsString; Numero := FieldByName('NUMERO').AsString; Piso := FieldByName('PISO').AsString; CodigoPostal := FieldByName('CODIGOPOSTAL').AsString; Poblacion := FieldByName('POBLACION').AsString; Provincia := FieldByName('PROVINCIA').AsString; Telefono1 := FieldByName('TELEFONO1').AsString; Telefono2 := FieldByName('TELEFONO2').AsString; Movil1 := FieldByName('MOVIL1').AsString; Movil2 := FieldByName('MOVIL2').AsString; Fax := FieldByName('MOVIL1').AsString; Correo := FieldByName('MOVIL2').AsString; Result := True; end; end; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPagosCliente.DarPagoClienteMax: String; var oSQL : TIBSQL; begin Result := ''; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select max(CODIGO) '); SQL.Add('from PAGOSCLIENTE '); SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA)'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; ExecQuery; Result := Fields[0].AsString; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPagosCliente.DarPagoClienteMin: String; var oSQL : TIBSQL; begin Result := ''; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select min(CODIGO) '); SQL.Add('from PAGOSCLIENTE '); SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA)'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; ExecQuery; Result := Fields[0].AsString; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaPagosCliente.InicializarGridPagosClientes (var vGrid: TcxGridDBTableView); var Columna : TcxGridDBColumn; begin with vGrid do begin OptionsView.Footer := True; {Columna CODIGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGO'; Columna.Caption := 'Código'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: 0 pagos'; Kind := skCount; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna TIPOPAGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'TIPOPAGO'; Columna.Caption := 'Movimiento'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; {Columna FECHAPAGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FECHAPAGO'; Columna.Caption := 'Fecha pago'; Columna.Width := tamColFecha; Columna.Options.Filtering := False; Columna.SortOrder := soDescending; {Columna FORMAPAGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FORMAPAGO'; Columna.Caption := 'Forma de pago'; Columna.Width := tamColFormaPago; Columna.Options.Filtering := False; {Columna NOMBRE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre de cliente'; Columna.Width := tamColNombre; Columna.Options.Filtering := False; {Columna TELEFONO1} Columna := CreateColumn; Columna.DataBinding.FieldName := 'TELEFONO1'; Columna.Caption := 'Telefono'; Columna.Width := tamColTelefono; Columna.Options.Filtering := False; {Columna IMPORTE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTE'; Columna.Caption := 'Importe'; Columna.Width := tamColImporte; Columna.Options.Filtering := False; end; end; procedure TdmTablaPagosCliente.InicializarTablaPagosClientes(Tabla: TPTabla); begin with Tabla^.Fields do begin if FindField('IMPORTE') <> NIL then with (FieldByName('IMPORTE') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; end; end; procedure TdmTablaPagosCliente.InicializarGridListadoPagosCliente(var Grid: TcxGrid); var Columna : TcxGridDBColumn; begin with (Grid.ActiveView as TcxGridDBTableView) do begin OptionsView.Footer := True; {Columna CODIGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGO'; Columna.Caption := 'Código'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; {Columna TIPOPAGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'TIPOPAGO'; Columna.Caption := 'Tipo pago'; Columna.Options.Filtering := False; Columna.Visible := False; {Columna FECHAPAGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FECHAPAGO'; Columna.Caption := 'Fecha'; Columna.Width := tamColFecha; Columna.Options.Filtering := False; Columna.SortOrder := soDescending; {Columna FORMAPAGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FORMAPAGO'; Columna.Caption := 'Forma pago'; Columna.Width := tamColSituacion; Columna.Options.Filtering := False; {Columna IMPORTE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTE'; Columna.Caption := 'Importe total'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: #,0.00# €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; end; end; procedure TdmTablaPagosCliente.InicializarGridPagosPendClientes(var vGrid: TcxGridDBTableView); var Columna : TcxGridDBColumn; begin with vGrid do begin {Columna CODIGOCLIENTE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOCLIENTE'; Columna.Caption := 'Código'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; {Columna NOMBRE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre'; Columna.Width := tamColNombre; Columna.Options.Filtering := False; Columna.SortOrder := soAscending; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: 0 Clientes adeudan'; Kind := skCount; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna TOTALFACTURAS} Columna := CreateColumn; Columna.DataBinding.FieldName := 'TOTALFACTURAS'; Columna.Caption := 'Importe total de facturas'; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.HeaderAlignmentHorz := taRightJustify; {Columna TOTALPAGOS} Columna := CreateColumn; Columna.DataBinding.FieldName := 'TOTALPAGOS'; Columna.Caption := 'Importe total pagado'; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.HeaderAlignmentHorz := taRightJustify; {Columna DEBE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'DEBE'; Columna.Caption := 'Debe'; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.HeaderAlignmentHorz := taRightJustify; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: #,0.00# €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; end; end; function TdmTablaPagosCliente.DarNuevoCodigo: String; begin Result := GestorContadores.darNuevoCodigo(contPagosCliente); end; function TdmTablaPagosCliente.FormatearCodigo(Codigo: String): String; begin Result := GestorContadores.formatearCodigo(contPagosCliente, Codigo); end; function TdmTablaPagosCliente.IncrementarCodigo: boolean; begin Result := GestorContadores.IncrementarValor(contPagosCliente); end; function TdmTablaPagosCliente.InsertarContador: boolean; begin Result := GestorContadores.InsertarContador(contPagosCliente); end; function TdmTablaPagosCliente.ValidarCodigo(Codigo: String): Boolean; begin Result := GestorContadores.validarCodigo(contPagosCliente, Codigo); end; procedure TdmTablaPagosCliente.InicializarTablaPagosPendClientes( Tabla: TPTabla); begin with Tabla^.Fields do begin if FindField('TOTALFACTURAS') <> NIL then with (FieldByName('TOTALFACTURAS') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('TOTALPAGOS') <> NIL then with (FieldByName('TOTALPAGOS') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('DEBE') <> NIL then with (FieldByName('DEBE') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; end; end; function TdmTablaPagosCliente.ExistePagoConCliente(Codigo: Variant): Boolean; var oSQL : TIBSQL; begin Result := False; if VarIsNull(Codigo) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGOCLIENTE '); SQL.Add('from PAGOSCLIENTE '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add(' and CODIGOCLIENTE = :CODIGOCLIENTE'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGOCLIENTE').AsString := Codigo; try Prepare; ExecQuery; Result := (RecordCount > 0); finally Close; Transaction := NIL; Free; end; end; end; end.