This repository has been archived on 2024-11-29. You can view files and clone it, but cannot push or open issues or pull requests.
Tecsitel_FactuGES/BaseDatos/TablaFacturasCliente.pas

1129 lines
36 KiB
ObjectPascal
Raw Permalink Normal View History

{
===============================================================================
Copyright (<EFBFBD>) 2001. Rodax Software.
===============================================================================
Los contenidos de este fichero son propiedad de Rodax Software titular del
copyright. Este fichero s<EFBFBD>lo podr<EFBFBD> ser copiado, distribuido y utilizado,
en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
acuerdo con los t<EFBFBD>rminos y condiciones establecidas en el acuerdo/contrato
bajo el que se suministra.
-----------------------------------------------------------------------------
Web: www.rodax-software.com
===============================================================================
Fecha primera versi<EFBFBD>n: 01-10-2001
Versi<EFBFBD>n actual: 1.1.0
Fecha versi<EFBFBD>n actual: 06-03-2004
===============================================================================
Modificaciones:
Fecha Comentarios
---------------------------------------------------------------------------
27-10-2001 Se ha eliminado el campo 'Notas' de la tabla de facturas
de cliente.
30-10-2001 A<EFBFBD>adir en el grid una columna que indique que c<EFBFBD>digo de
documento se factura (presupuesto/albar<EFBFBD>n). Si aparece
en blanco es una factura libre.
30-10-2001 Se ha a<EFBFBD>adido cliente final en facturas de cliente.
31-10-2001 Se han a<EFBFBD>adido los campos IMPORTEDESCUENTO e IMPORTEIVA.
17-02-2002 Se ha cambiado la pol<EFBFBD>tica de contadores de las facturas. Se
coje el valor m<EFBFBD>s alta que existe en FACTURASCLIENTE.
07-04-2002 Adaptar todas las funciones a la transacci<EFBFBD>n <EFBFBD>nica.
06-05-2002 Adaptaci<EFBFBD>n al grid 'TdxDBGrid'.
09-05-2002 P221. Cambio del funcionamiento de los contadores de facturas
de cliente. El c<EFBFBD>digo de factura se debe sacar a partir de la
tabla CONTADORES no a partir del m<EFBFBD>ximo c<EFBFBD>digo que exista
en la tabla de facturas de cliente.
11-08-2002 P236. A<EFBFBD>adida la funci<EFBFBD>n 'DecrementarCodigo'.
22-08-2002 La columna 'TIPO' de los detalles se ha puesto como no
requerida.
27-05-2002 Cambio a un objeto contador (TContadorFacturaCliente)
16-11-2002 p250. Poner el n<EFBFBD>mero total de facturas dadas de alta
en la inicializaci<EFBFBD>n del grid.
08-04-2003 P263. Agrupar por a<EFBFBD>os las facturas, nueva funci<EFBFBD>n DarListaAnos.
08-04-2003 P255. Agrupar por meses las facturas, ordenar las m<EFBFBD>s recientes
arriba.
21-04-2003 Arreglo en la funcion ModificarSituacionFactura,
para que no se borren todas las formas de pago de las
faturas que se cambien de una vez en 'Cambiar situacion'.
06-03-2004 P272. Adaptaci<EFBFBD>n a multiempresa.
01-03-2006 Se ha a<EFBFBD>adido el campo BaseImponible2 que nos aclara la base
imponible sobre la que se aplica el IVA
===============================================================================
}
unit TablaFacturasCliente;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
BaseDatos, dxDBGrid, Contadores;
type
TDatosFacturaCliente = class(TPersistent)
public
CodigoEmpresa : Integer;
Codigo : String;
FechaAlta : String;
FechaVencimiento : String;
FormaPago : String;
Situacion : String;
Usuario : String;
Descripcion : String;
CodigoCliente : String;
NifCif : String;
Nombre : String;
Calle : String;
Numero : String;
Piso : String;
CodigoPostal : String;
Poblacion : String;
Provincia : String;
PersonaContacto : String;
Telefono : String;
Fax : String;
CodigoPresupuestoAlbaran : String;
BaseImponible : Double;
Descuento : Integer;
Iva : Integer;
ImporteTotal : Double;
ImporteDescuento : Double;
ImporteIva : Double;
Banco : String;
Notas : String;
CodigoClienteFinal : String;
NombreClienteFinal : String;
ClaseFactura : String;
CodigoCargo : String;
end;
TdmTablaFacturasCliente = class(TDataModule)
private
procedure IniciarSQLFactura;
procedure IniciarSQLDetalles;
procedure IniciarSQLGrids;
public
sqlInsertarFactura : TStrings;
sqlModificarFactura : TStrings;
sqlConsultarFactura : TStrings;
sqlEliminarFactura : TStrings;
sqlConsultarGridFacturas : TStrings;
sqlConsultarGridFacturasCli : TStrings;
sqlConsultarGridFacturasPreAlb : TStrings;
sqlInsertarDetalles : TStrings;
sqlModificarDetalles : TStrings;
sqlConsultarDetalles : TStrings;
sqlEliminarDetalles : TStrings;
sqlConsultarGridDetalles : TStrings;
//Metodos que llamaran a contador
function DarNuevoCodigo : String;
function IncrementarCodigo : boolean;
function DecrementarCodigo : boolean;
function InsertarContador : boolean;
function ValidarCodigo(Codigo : String) : Boolean;
function FormatearCodigo(Codigo : String) : String;
function DarDatosFactura(Factura : TDatosFacturaCliente): Boolean;
function DarClaseFactura(CodigoEmpresa: Integer; Codigo : String): String;
function ExisteCodigo(CodigoEmpresa: Integer; Codigo : String) : Boolean;
procedure InicializarGridDetalles(var Grid: TdxDBGrid);
procedure InicializarGridFacturas(var Grid: TdxDBGrid);
procedure InicializarTablaFacturas(Tabla: TPTabla);
procedure InicializarTablaDetalles(Tabla: TPTabla);
constructor Create (AOwner : TComponent); override;
destructor Destroy; override;
function DarSituaciones : TStrings;
function DarSituacionFactura(CodigoEmpresa: Integer; Codigo: String): String;
function DarListaFacturas(Grid : TdxDBGrid; Tabla: TPTabla): TStringList;
function ModificarSituacionFactura(CodigoEmpresa: Integer; Codigo, Situacion, FormaPago : String): Boolean;
function DarImporteTodosAbonos(CodigoEmpresa: Integer; Codigo: String): Double;
function DarImporteOtrosAbonos(CodigoEmpresa: Integer; CodigoCargo: String; CodigoAbono : String): Double;
function ExistenAbonos(CodigoEmpresa: Integer; CodigoCargo : String) : Boolean;
function EsUltimaFactura(CodigoEmpresa: Integer; Codigo : String): Boolean;
function DarListaAnos(CodigoEmpresa: Integer;const pTodos: Boolean): TStringList;
end;
var
dmTablaFacturasCliente: TdmTablaFacturasCliente;
implementation
{$R *.DFM}
uses
IBSQL, Mensajes, StrFunc, IB, db, Excepciones,
TablaUnidadesMedida, dxDBCtrl, dxDBTLCL, IBCustomDataSet, dxTL,
Constantes, RdxGestorContadores;
{ TdmTablaFacturas }
constructor TdmTablaFacturasCliente.Create(AOwner: TComponent);
begin
inherited;
{ Cabecera }
sqlInsertarFactura := TStringList.Create;
sqlModificarFactura := TStringList.Create;
sqlConsultarFactura := TStringList.Create;
sqlEliminarFactura := TStringList.Create;
{ Detalles }
sqlInsertarDetalles := TStringList.Create;
sqlModificarDetalles := TStringList.Create;
sqlConsultarDetalles := TStringList.Create;
sqlEliminarDetalles := TStringList.Create;
sqlConsultarGridDetalles := TStringList.Create;
{ Grids }
sqlConsultarGridFacturas := TStringList.Create;
sqlConsultarGridFacturasCli := TStringList.Create;
sqlConsultarGridFacturasPreAlb := TStringList.Create;
IniciarSQLFactura;
IniciarSQLDetalles;
IniciarSQLGrids;
end;
function TdmTablaFacturasCliente.DarNuevoCodigo: String;
begin
Result := GestorContadores.DarNuevoCodigo(contFacturasCliente);
end;
function TdmTablaFacturasCliente.DarSituaciones: TStrings;
var
oSQL : TIBSQL;
Lista : TStringList;
begin
Result := NIL;
oSQL := TIBSQL.Create(Self);
Lista := TStringList.Create;
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select DESCRIPCION from SITUFACTURAS');
try
Prepare;
ExecQuery;
while not EOF do begin
Lista.Append(Fields[0].AsString);
Next;
end;
Result := Lista;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
destructor TdmTablaFacturasCliente.Destroy;
begin
{ Cabecera }
sqlInsertarFactura.Free;
sqlModificarFactura.Free;
sqlConsultarFactura.Free;
sqlEliminarFactura.Free;
{ Detalles }
sqlInsertarDetalles.Free;
sqlModificarDetalles.Free;
sqlConsultarDetalles.Free;
sqlEliminarDetalles.Free;
sqlConsultarGridDetalles.Free;
{ Grids }
sqlConsultarGridFacturas.Free;
sqlConsultarGridFacturasCli.Free;
sqlConsultarGridFacturasPreAlb.Free;
inherited;
end;
function TdmTablaFacturasCliente.ExisteCodigo(CodigoEmpresa: Integer; Codigo: String): Boolean;
var
oSQL : TIBSQL;
Contador : String;
begin
Result := False;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select CODIGO ');
SQL.Add('from FACTURASCLIENTE ');
SQL.Add('where (CODIGO = :CODIGO) and (CODIGOEMPRESA = :CODIGOEMPRESA)');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('CODIGO').AsString := Codigo;
try
Prepare;
ExecQuery;
Contador := Fields[0].AsString;
Result := (Codigo = Contador);
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaFacturasCliente.FormatearCodigo(Codigo: String): String;
begin
Result := GestorContadores.FormatearCodigo(contFacturasCliente, Codigo);
end;
function TdmTablaFacturasCliente.IncrementarCodigo: boolean;
begin
Result := GestorContadores.IncrementarValor(contFacturasCliente);
end;
procedure TdmTablaFacturasCliente.InicializarGridDetalles(var Grid: TdxDBGrid);
var
Columna : TdxDBTreeListColumn;
begin
with Grid do begin
DestroyColumns;
{Columna CODIGOFACTURA}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.Visible := False;
Columna.FieldName := 'CODIGOFACTURA';
{Columna NUMCONCEPTO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.Visible := False;
Columna.FieldName := 'NUMCONCEPTO';
{Columna TIPO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.Visible := False;
Columna.FieldName := 'TIPO';
Columna.Width := tamColTipo;
{Columna CODIGOARTICULO}
Columna := CreateColumn(TdxDBTreeListButtonColumn);
Columna.FieldName := 'CODIGOARTICULO';
Columna.Caption := 'C<>d. material';
Columna.Width := tamColCodigo;
{Columna DESCRIPCION}
Columna := CreateColumn(TdxDBTreeListButtonColumn);
Columna.FieldName := 'DESCRIPCION';
Columna.Caption := 'Descripci<63>n servicio/material';
Columna.Width := tamColDescripcion;
{Columna CANTIDAD}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CANTIDAD';
Columna.Caption := 'Cantidad';
Columna.Width := tamColCantidad;
{Columna UNIDADESMEDIDA}
Columna := CreateColumn(TdxDBTreeListPickColumn);
Columna.FieldName := 'UNIDADESMEDIDA';
Columna.Caption := 'Unid. medida';
Columna.Width := tamColUnidadesMedida;
(Columna as TdxDBTreeListPickColumn).Items := dmTablaUnidadesMedida.DarUnidadesMedida;
{Columna PRECIOUNIDAD}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'PRECIOUNIDAD';
Columna.Caption := 'Precio unidad';
Columna.Width := tamColPrecio;
{Columna MINUTOS}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'MINUTOS';
Columna.Caption := 'Num. minutos';
Columna.Width := tamColCantidad;
{Columna PRECIOMINUTO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'PRECIOMINUTO';
Columna.Caption := 'Precio minuto';
Columna.Width := tamColPrecio;
{Columna PLUS}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'PLUS';
Columna.Caption := 'Plus (%)';
Columna.Width := tamColPorcentaje;
{Columna TOTAL}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'TOTAL';
Columna.ReadOnly := True;
Columna.Caption := 'Precio total';
Columna.Width := tamColPrecio;
end;
end;
procedure TdmTablaFacturasCliente.InicializarGridFacturas(var Grid: TdxDBGrid);
var
Columna : TdxDBTreeListColumn;
begin
with Grid do begin
DestroyColumns;
ShowSummaryFooter := True;
{Columna CODIGO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODIGO';
Columna.Caption := 'C<>d. factura';
Columna.Width := tamColCodigo;
Columna.Sorted := csDown;
Columna.SummaryFooterType := cstCount;
Columna.SummaryFooterFormat := 'Total: 0 facturas';
{Columna ANO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'ANO';
Columna.Caption := 'A<>o';
Columna.Width := tamColFecha;
Columna.Visible := False;
//Para activar P255
{Columna MES}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'MES';
Columna.Caption := '';
Columna.Width := tamColFecha;
Columna.Visible := False;
// TdxDBGridColumn(Grid.ColumnByFieldName('MES')).GroupIndex := 0;
// tvOrders.DataController.Groups.FullExpand;
// TdxDBGridColumn(Grid.ColumnByFieldName('MES')).ColumnGrouping := False;
// Grid.OptionsCustomize.
{Columna CLASEFACTURA}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CLASEFACTURA';
Columna.Caption := 'Clase';
Columna.Width := tamClaseFactura;
{Columna SITUACION}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'SITUACION';
Columna.Caption := 'Situaci<63>n';
Columna.Width := tamColSituacion;
{Columna CODIGOPRESUPUESTOALBARAN}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODIGOPRESUPUESTOALBARAN';
Columna.Caption := 'Pres./Alb./Libre';
Columna.Width := tamColCodigo;
{Columna FECHAALTA}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'FECHAALTA';
Columna.Caption := 'Fecha alta';
Columna.Width := tamColFecha;
{Columna FECHAVENCIMIENTO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'FECHAVENCIMIENTO';
Columna.Caption := 'Vencimiento';
Columna.Width := tamColFecha;
{Columna CODIGOCLIENTE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODIGOCLIENTE';
Columna.Caption := 'C<>d. cliente';
Columna.Width := tamColCodigo;
{Columna NIFCIF}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'NIFCIF';
Columna.Caption := 'NIF/CIF';
Columna.Width := tamColNIFCIF;
{Columna NOMBRE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'NOMBRE';
Columna.Caption := 'Nombre';
Columna.Width := tamColNombre;
{Columna NOMBRECLIENTEFINAL}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'NOMBRECLIENTEFINAL';
Columna.Caption := 'Cliente final';
Columna.Width := tamColNombre;
{Columna IMPORTETOTAL}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'IMPORTETOTAL';
Columna.Caption := 'Importe total';
Columna.Width := tamColPrecio;
{Columna CODIGOCARGO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODIGOCARGO';
Columna.Caption := 'Cargo';
Columna.Width := tamColCodigo;
Columna.Visible := False;
end;
end;
procedure TdmTablaFacturasCliente.InicializarTablaDetalles(Tabla: TPTabla);
begin
with Tabla^.Fields do
begin
if FindField('TIPO') <> NIL then
with (FieldByName('TIPO') as TField) do begin
Required := False;
end;
if FindField('PRECIOUNIDAD') <> NIL then
with (FieldByName('PRECIOUNIDAD') as TFloatField) do begin
DisplayFormat := DISPLAY_EUROS2;
EditFormat := EDIT_EUROS2;
end;
if FindField('PRECIO') <> NIL then
with (FieldByName('PRECIO') as TFloatField) do begin
DisplayFormat := DISPLAY_EUROS2;
EditFormat := EDIT_EUROS2;
end;
if FindField('PRECIOMINUTO') <> NIL then
with (FieldByName('PRECIOMINUTO') as TFloatField) do begin
DisplayFormat := DISPLAY_EUROS2;
EditFormat := EDIT_EUROS2;
end;
if FindField('PLUS') <> NIL then
with (FieldByName('PLUS') as TFloatField) do begin
DisplayFormat := DISPLAY_DTO;
EditFormat := EDIT_DTO;
end;
if FindField('TOTAL') <> NIL then
with (FieldByName('TOTAL') as TFloatField) do begin
DisplayFormat := DISPLAY_EUROS2;
EditFormat := EDIT_EUROS2;
end;
end;
end;
procedure TdmTablaFacturasCliente.InicializarTablaFacturas(
Tabla: TPTabla);
begin
with Tabla^.Fields do
begin
if FindField('FECHAALTA') <> NIL then
with (FieldByName('FECHAALTA') as TDateField) do begin
EditMask := MASK_FECHA;
end;
if FindField('FECHAVENCIMIENTO') <> NIL then
with (FieldByName('FECHAVENCIMIENTO') as TDateField) do begin
EditMask := MASK_FECHA;
end;
if FindField('BASEIMPONIBLE') <> NIL then
with (FieldByName('BASEIMPONIBLE') as TIBBCDField) do begin
DisplayFormat := DISPLAY_EUROS2;
EditFormat := EDIT_EUROS2;
end;
if FindField('BASEIMPONIBLE2') <> NIL then
with (FieldByName('BASEIMPONIBLE2') as TIBBCDField) do begin
DisplayFormat := DISPLAY_EUROS2;
EditFormat := EDIT_EUROS2;
end;
if FindField('DESCUENTO') <> NIL then
with (FieldByName('DESCUENTO') as TFloatField) do begin
DisplayFormat := DISPLAY_DTO;
EditFormat := EDIT_DTO;
end;
if FindField('IMPORTEDESCUENTO') <> NIL then
//with (FieldByName('IMPORTEDESCUENTO') as TFloatField) do begin
with (FieldByName('IMPORTEDESCUENTO') as TIBBCDField) do begin
DisplayFormat := DISPLAY_EUROS2;
EditFormat := EDIT_EUROS2;
end;
if FindField('IVA') <> NIL then
with (FieldByName('IVA') as TFloatField) do begin
DisplayFormat := DISPLAY_DTO;
EditFormat := EDIT_DTO;
end;
if FindField('IMPORTEIVA') <> NIL then
//with (FieldByName('IMPORTEIVA') as TFloatField) do begin
with (FieldByName('IMPORTEIVA') as TIBBCDField) do begin
DisplayFormat := DISPLAY_EUROS2;
EditFormat := EDIT_EUROS2;
end;
if FindField('IMPORTETOTAL') <> NIL then
//with (FieldByName('IMPORTETOTAL') as TFloatField) do begin
with (FieldByName('IMPORTETOTAL') as TIBBCDField) do begin
DisplayFormat := DISPLAY_EUROS2;
EditFormat := EDIT_EUROS2;
end;
end;
end;
procedure TdmTablaFacturasCliente.IniciarSQLDetalles;
begin
with sqlInsertarDetalles do
begin
Add('insert into DETALLESFACTURASCLIENTE ');
Add('(CODIGOEMPRESA, CODIGOFACTURA, NUMCONCEPTO, TIPO, CODIGOARTICULO, DESCRIPCION, ');
Add('CANTIDAD, UNIDADESMEDIDA, PRECIOUNIDAD, MINUTOS, PRECIOMINUTO, PLUS, ');
Add('PRECIO, TOTAL) ');
Add('values (:CODIGOEMPRESA, :CODIGOFACTURA, :NUMCONCEPTO, :TIPO, :CODIGOARTICULO, ');
Add(':DESCRIPCION, :CANTIDAD, :UNIDADESMEDIDA, :PRECIOUNIDAD, :MINUTOS, ');
Add(':PRECIOMINUTO, :PLUS, :PRECIO, :TOTAL)');
end;
with sqlModificarDetalles do
begin
Add('update DETALLESFACTURASCLIENTE set ');
Add('CODIGOFACTURA = :CODIGOFACTURA, ');
Add('NUMCONCEPTO = :NUMCONCEPTO, ');
Add('CODIGOARTICULO = :CODIGOARTICULO, ');
Add('TIPO = :TIPO, ');
Add('DESCRIPCION = :DESCRIPCION, ');
Add('CANTIDAD = :CANTIDAD, ');
Add('UNIDADESMEDIDA = :UNIDADESMEDIDA, ');
Add('PRECIOUNIDAD = :PRECIOUNIDAD, ');
Add('MINUTOS = :MINUTOS, ');
Add('PRECIOMINUTO = :PRECIOMINUTO, ');
Add('PLUS = :PLUS, ');
Add('PRECIO = :PRECIO, ');
Add('TOTAL = :TOTAL ');
Add('where (CODIGOFACTURA = :CODIGOFACTURA) ');
Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
Add('and (NUMCONCEPTO = :NUMCONCEPTO)');
end;
with sqlEliminarDetalles do
begin
Add('delete from DETALLESFACTURASCLIENTE ');
Add('where (CODIGOFACTURA = :CODIGOFACTURA) ');
Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
Add('and (NUMCONCEPTO = :NUMCONCEPTO)');
end;
with sqlConsultarDetalles do
begin
Add('select CODIGOFACTURA, NUMCONCEPTO, TIPO, ');
Add('CODIGOARTICULO, DESCRIPCION, CANTIDAD, UNIDADESMEDIDA, PRECIOUNIDAD, ');
Add('MINUTOS, PRECIOMINUTO, PLUS, PRECIO, TOTAL ');
Add('from DETALLESFACTURASCLIENTE ');
Add('where (CODIGOFACTURA = :CODIGOFACTURA) ');
Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
Add('and (NUMCONCEPTO = :NUMCONCEPTO)');
end;
end;
procedure TdmTablaFacturasCliente.IniciarSQLGrids;
begin
with sqlConsultarGridFacturas do
begin
Add('select CODIGO, CLASEFACTURA, SITUACION, FECHAALTA, CODIGOPRESUPUESTOALBARAN, ');
Add('EXTRACT (YEAR FROM FECHAALTA) as ANO, ');
//Para activar P255
// Add('EXTRACT (MONTH FROM FECHAALTA) || ''/'' || EXTRACT (YEAR FROM FECHAALTA) as MES, ');
Add('FECHAVENCIMIENTO, CODIGOCLIENTE, NIFCIF, NOMBRE, ');
Add('CODIGOCLIENTEFINAL, NOMBRECLIENTEFINAL, IMPORTETOTAL, CODIGOCARGO ');
Add('from FACTURASCLIENTE ');
Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) ');
Add('order by CODIGO');
end;
with sqlConsultarGridFacturasCli do
begin
Add('select CODIGO, CLASEFACTURA, SITUACION, FECHAALTA, CODIGOPRESUPUESTOALBARAN, ');
Add('EXTRACT (YEAR FROM FECHAALTA) as ANO, ');
Add('FECHAVENCIMIENTO, CODIGOCLIENTE, NIFCIF, NOMBRE, ');
Add('CODIGOCLIENTEFINAL, NOMBRECLIENTEFINAL, IMPORTETOTAL, CODIGOCARGO ');
Add('from FACTURASCLIENTE ');
Add('where (CODIGOCLIENTE = :CODIGOCLIENTE) ');
Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
Add('order by CODIGO');
end;
with sqlConsultarGridFacturasPreAlb do
begin
Add('select CODIGO, CLASEFACTURA, SITUACION, FECHAALTA, CODIGOPRESUPUESTOALBARAN, ');
Add('EXTRACT (YEAR FROM FECHAALTA) as ANO, ');
Add('FECHAVENCIMIENTO, CODIGOCLIENTE, NIFCIF, NOMBRE, ');
Add('CODIGOCLIENTEFINAL, NOMBRECLIENTEFINAL, IMPORTETOTAL, CODIGOCARGO ');
Add('from FACTURASCLIENTE ');
Add('where (CODIGOPRESUPUESTOALBARAN = :CODIGOPRESUPUESTOALBARAN) ');
Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
Add('order by CODIGO');
end;
with sqlConsultarGridDetalles do
begin
Add('select CODIGOEMPRESA, CODIGOFACTURA, NUMCONCEPTO, CODIGOARTICULO, TIPO, ');
Add('DESCRIPCION, CANTIDAD, UNIDADESMEDIDA, PRECIOUNIDAD, MINUTOS, ');
Add('PRECIOMINUTO, PLUS, PRECIO, TOTAL ');
Add('from DETALLESFACTURASCLIENTE ');
Add('where (CODIGOFACTURA = :CODIGOFACTURA) ');
Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
Add('order by CODIGOFACTURA, NUMCONCEPTO');
end;
end;
procedure TdmTablaFacturasCliente.IniciarSQLFactura;
begin
with sqlInsertarFactura do
begin
Add('insert into FACTURASCLIENTE ');
Add('(CODIGOEMPRESA, CODIGO, FECHAALTA, FECHAVENCIMIENTO, FORMAPAGO, SITUACION, ');
Add('USUARIO, DESCRIPCION, CODIGOCLIENTE, NIFCIF, NOMBRE, CALLE, ');
Add('NUMERO, PISO, CODIGOPOSTAL, POBLACION, PROVINCIA, PERSONACONTACTO, ');
Add('TELEFONO, FAX, CODIGOPRESUPUESTOALBARAN, BASEIMPONIBLE, DESCUENTO, ');
Add('IVA, IMPORTETOTAL, BANCO, CODIGOCLIENTEFINAL, NOMBRECLIENTEFINAL, ');
Add('IMPORTEDESCUENTO, IMPORTEIVA, CLASEFACTURA, CODIGOCARGO) ');
Add('values (:CODIGOEMPRESA, :CODIGO, :FECHAALTA, :FECHAVENCIMIENTO, :FORMAPAGO, ');
Add(':SITUACION, :USUARIO, :DESCRIPCION, :CODIGOCLIENTE, :NIFCIF, ');
Add(':NOMBRE, :CALLE, :NUMERO, :PISO, :CODIGOPOSTAL, :POBLACION, ');
Add(':PROVINCIA, :PERSONACONTACTO, :TELEFONO, :FAX, ');
Add(':CODIGOPRESUPUESTOALBARAN, :BASEIMPONIBLE, :DESCUENTO, :IVA, ');
Add(':IMPORTETOTAL, :BANCO, :CODIGOCLIENTEFINAL, :NOMBRECLIENTEFINAL, ');
Add(':IMPORTEDESCUENTO, :IMPORTEIVA, :CLASEFACTURA, :CODIGOCARGO) ');
end;
with sqlModificarFactura do
begin
Add('update FACTURASCLIENTE set ');
Add('FECHAALTA = :FECHAALTA, ');
Add('FECHAVENCIMIENTO = :FECHAVENCIMIENTO, ');
Add('FORMAPAGO = :FORMAPAGO, ');
Add('SITUACION = :SITUACION, ');
Add('USUARIO = :USUARIO, ');
Add('DESCRIPCION = :DESCRIPCION, ');
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('PERSONACONTACTO = :PERSONACONTACTO, ');
Add('TELEFONO = :TELEFONO, ');
Add('FAX = :FAX, ');
Add('CODIGOPRESUPUESTOALBARAN = :CODIGOPRESUPUESTOALBARAN, ');
Add('BASEIMPONIBLE = :BASEIMPONIBLE, ');
Add('DESCUENTO = :DESCUENTO, ');
Add('IMPORTEDESCUENTO = :IMPORTEDESCUENTO, ');
Add('IVA = :IVA, ');
Add('IMPORTEIVA = :IMPORTEIVA, ');
Add('IMPORTETOTAL = :IMPORTETOTAL, ');
Add('BANCO = :BANCO, ');
Add('CODIGOCLIENTEFINAL = :CODIGOCLIENTEFINAL, ');
Add('NOMBRECLIENTEFINAL = :NOMBRECLIENTEFINAL ');
Add('where (CODIGO = :CODIGO)');
Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
end;
with sqlEliminarFactura do
begin
Add('delete from FACTURASCLIENTE ');
Add('where (CODIGO = :CODIGO)');
Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
end;
with sqlConsultarFactura do
begin
Add('SELECT * FROM FACTURASCLIENTE ');
Add('where (CODIGO = :CODIGO)');
Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
end;
end;
function TdmTablaFacturasCliente.InsertarContador: boolean;
begin
Result := GestorContadores.InsertarContador(contFacturasCliente);
end;
function TdmTablaFacturasCliente.ValidarCodigo(Codigo: String): Boolean;
begin
Result := GestorContadores.ValidarCodigo(contFacturasCliente, Codigo);
end;
function TdmTablaFacturasCliente.DarSituacionFactura(CodigoEmpresa: Integer;
Codigo: String): String;
var
oSQL : TIBSQL;
begin
Result := '-1';
if EsCadenaVacia(Codigo) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select SITUACION ');
SQL.Add('from FACTURASCLIENTE ');
SQL.Add('where (CODIGO = :CODIGO)');
SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('CODIGO').AsString := Codigo;
try
Prepare;
ExecQuery;
Result := Fields[0].AsString;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaFacturasCliente.ModificarSituacionFactura(CodigoEmpresa: Integer;
Codigo, Situacion, FormaPago: String): Boolean;
var
oSQL : TIBSQL;
begin
Result := False;
if EsCadenaVacia(Codigo) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('update FACTURASCLIENTE ');
SQL.Add('set SITUACION = :SITUACION ');
// Si recibimos la forma de pago a null o vacia, quiere decir que no se debe
// cambiar ya que afectaria a todas las facturas seleccionadas
if not esCadenaVacia(FormaPago) then
SQL.Add(',FORMAPAGO = :FORMAPAGO ');
SQL.Add('where (CODIGO = :CODIGO)');
SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('CODIGO').AsString := Codigo;
ParamByName('SITUACION').AsString := Situacion;
// Si recibimos la forma de pago a null o vacia, quiere decir que no se debe
// cambiar ya que afectaria a todas las facturas seleccionadas
if not esCadenaVacia(FormaPago) then
ParamByName('FORMAPAGO').AsString := FormaPago;
try
Prepare;
ExecQuery;
Result := True;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaFacturasCliente.DarListaFacturas(Grid: TdxDBGrid;
Tabla: TPTabla): TStringList;
var
i: integer;
ListaFacturas : TStringList;
begin
ListaFacturas := Nil;
if Grid.SelectedCount = 0 then
begin
Result := ListaFacturas;
exit
end;
ListaFacturas := TStringList.Create;
Tabla^.DisableControls;
for i:=0 to Grid.SelectedCount-1 do
begin
Tabla^.GotoBookmark(Pointer(Grid.SelectedRows[i]));
ListaFacturas.Add(Tabla^.FieldByName('CODIGO').AsString);
end;
Tabla^.EnableControls;
Result := ListaFacturas;
end;
function TdmTablaFacturasCliente.DecrementarCodigo: boolean;
begin
Result := GestorContadores.DecrementarValor(contFacturasCliente);
end;
function TdmTablaFacturasCliente.DarImporteTodosAbonos(CodigoEmpresa: Integer;
Codigo: String): Double;
var
oSQL : TIBSQL;
begin
Result := 0.0;
if EsCadenaVacia(Codigo) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select sum(IMPORTETOTAL) ');
SQL.Add('from FACTURASCLIENTE ');
SQL.Add('where (CODIGOCARGO = :CODIGO) ');
SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('CODIGO').AsString := Codigo;
try
Prepare;
ExecQuery;
Result := Fields[0].AsFloat;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaFacturasCliente.DarDatosFactura(
Factura: TDatosFacturaCliente): Boolean;
var
oSQL : TIBSQL;
begin
Result := False;
if EsCadenaVacia(Factura.Codigo) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select * from FACTURASCLIENTE ');
SQL.Add('where (CODIGO = :CODIGO)');
SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
ParamByName('CODIGOEMPRESA').AsInteger := Factura.CodigoEmpresa;
ParamByName('CODIGO').AsString := Factura.Codigo;
try
Prepare;
ExecQuery;
//Compruebo que el codigo de albar<61>n existe. Si no existe, devuelvo false
if (RecordCount > 0) then
begin
with Factura do
begin
FechaAlta := FieldByName('FECHAALTA').AsString;
FechaVencimiento := FieldByName('FECHAVENCIMIENTO').AsString;
FormaPago := FieldByName('FORMAPAGO').AsString;
Situacion := FieldByName('SITUACION').AsString;
Usuario := FieldByName('USUARIO').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;
PersonaContacto := FieldByName('PERSONACONTACTO').AsString;
Telefono := FieldByName('TELEFONO').AsString;
Fax := FieldByName('FAX').AsString;
CodigoPresupuestoAlbaran := FieldByName('CODIGOPRESUPUESTOALBARAN').AsString;
BaseImponible := FieldByName('BASEIMPONIBLE').AsFloat;
Descuento := FieldByName('DESCUENTO').AsInteger;
Iva := FieldByName('IVA').AsInteger;
ImporteDescuento := FieldByName('IMPORTEDESCUENTO').AsFloat;
ImporteIva := FieldByName('IMPORTEIVA').AsFloat;
ImporteTotal := FieldByName('IMPORTETOTAL').AsFloat;
Banco := FieldByName('BANCO').AsString;
Notas := FieldByName('NOTAS').AsString;
CodigoClienteFinal := FieldByName('CODIGOCLIENTEFINAL').AsString;
NombreClienteFinal := FieldByName('NOMBRECLIENTEFINAL').AsString;
ClaseFactura := FieldByName('CLASEFACTURA').AsString;
CodigoCargo := FieldByName('CODIGOCARGO').AsString;
Result := True;
end;
end;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaFacturasCliente.DarClaseFactura(CodigoEmpresa: Integer;
Codigo: String): String;
var
oSQL : TIBSQL;
begin
Result := 'C';
if EsCadenaVacia(Codigo) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select CLASEFACTURA ');
SQL.Add('from FACTURASCLIENTE ');
SQL.Add('where (CODIGO = :CODIGO) ');
SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('CODIGO').AsString := Codigo;
try
Prepare;
ExecQuery;
Result := Fields[0].AsString;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaFacturasCliente.DarImporteOtrosAbonos(CodigoEmpresa: Integer;
CodigoCargo, CodigoAbono: String): Double;
var
oSQL : TIBSQL;
begin
Result := 0.0;
if EsCadenaVacia(CodigoCargo) then
Exit;
if EsCadenaVacia(CodigoAbono) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select sum(IMPORTETOTAL) ');
SQL.Add('from FACTURASCLIENTE ');
SQL.Add('where (CODIGOCARGO = :CODIGOCARGO) ');
SQL.Add('and (CODIGO <> :CODIGO)');
SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('CODIGOCARGO').AsString := CodigoCargo;
ParamByName('CODIGO').AsString := CodigoAbono;
try
Prepare;
ExecQuery;
Result := Fields[0].AsFloat;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaFacturasCliente.EsUltimaFactura(CodigoEmpresa: Integer; Codigo: String): Boolean;
var
oSQL : TIBSQL;
begin
Result := False;
if EsCadenaVacia(Codigo) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select count(*) ');
SQL.Add('from FACTURASCLIENTE ');
SQL.Add('where (CODIGO > :CODIGO) ');
SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('CODIGO').AsString := Codigo;
try
Prepare;
ExecQuery;
if Fields[0].AsInteger = 0 then
Result := True;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaFacturasCliente.ExistenAbonos(CodigoEmpresa: Integer;
CodigoCargo: String): Boolean;
var
oSQL : TIBSQL;
begin
Result := False;
if EsCadenaVacia(CodigoCargo) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select count(*) ');
SQL.Add('from FACTURASCLIENTE ');
SQL.Add('where (CODIGOCARGO = :CODIGOCARGO) ');
SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('CODIGOCARGO').AsString := CodigoCargo;
try
Prepare;
ExecQuery;
if Fields[0].AsInteger > 0 then
Result := True;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaFacturasCliente.DarListaAnos(CodigoEmpresa: Integer;const pTodos: Boolean) : TStringList;
var
oSQL : TIBSQL;
Lista : TStringList;
begin
Lista := TStringList.Create;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select distinct (EXTRACT (YEAR FROM FECHAALTA)) ANO ');
SQL.Add('from FACTURASCLIENTE ');
SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) ');
SQL.Add('order by FECHAALTA desc');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
try
Prepare;
ExecQuery;
if pTodos then
Lista.Add(CTE_TODOS);
while not EOF do begin
Lista.Add(Fields[0].AsString);
Next;
end;
result := Lista;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
end.