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

636 lines
20 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: 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.