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/Clientes/FacturasClientes.pas
2007-06-21 15:47:20 +00:00

596 lines
19 KiB
ObjectPascal

{
===============================================================================
Copyright (©) 2001. 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: 01-10-2001
Versión actual: 1.0.9
Fecha versión actual: 07-01-2005
===============================================================================
Modificaciones:
Fecha Comentarios
---------------------------------------------------------------------------
09-10-2001 Al pulsar la tecla ESC se activa el botón 'Cancelar'. Sólo
pasa cuando este frame está en una ventana modal.
29-10-2001 Se ha cambiado la etiqueta 'Listado de facturas' por
'Listado de facturas pendientes'.
18-01-2002 Se han coloreado las filas del grid dependiendo de la
situación de la factura.
07-04-2002 Se ha adaptado para la transacción única.
04-05-2002 Adaptación al grid 'TdxDBGrid'.
02-08-2002 P233. Poder cambiar la situación a muchas facturas a la vez.
08-04-2003 P263. Agrupar por años las facturas.
08-03-2004 Al hacer doble click sobre el grid, se pasará a modificar el
registro o se seleccionará, dependiendo del modo en el que
se encuentre la pantalla.
08-03-2004 p272. Adaptación a multiempresa.
07-01-2005 Arreglo de informes de facturas pendientes y facturas de iva que
llaman al mismo frame y no cambiaba pero al cambiar entidad solo si funciona.
===============================================================================
}
unit FacturasClientes;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
RdxFrameFacturasCliente, Grids, DBGrids, ComCtrls, RdxBotones, ToolWin, ExtCtrls,
Tipos, Menus, am2000menuitem, am2000popupmenu, am2000, RXDBCtrl,
Db, RdxPaneles, RdxBarras, dxCntner, dxTL, dxDBCtrl, RdxFrame,
dxDBGrid, StdCtrls, RdxComboBox, am2000utils;
type
TfrFacturasClientes = class(TRdxFrameFacturasCliente)
dsFacturas: TDataSource;
menuListar: TPopupMenu2000;
MenuItem20002: TMenuItem2000;
MenuItem20004: TMenuItem2000;
MenuItem20005: TMenuItem2000;
BarraFacturas: TRdxBarraSuperior;
bAnadir: TRdxBotonMenu;
bModificar: TRdxBotonSuperior;
bEliminar: TRdxBotonSuperior;
bConsultar: TRdxBotonSuperior;
bBuscar: TRdxBotonSuperior;
bListar: TRdxBotonMenu;
pnlCuerpo: TRdxPanel;
pnlGrid: TRdxPanel;
pnlExtra: TRdxBarraSuperior;
bCambiarSituacion: TRdxBoton;
brSeleccion: TRdxBarraInferior;
bSeleccionar: TRdxBoton;
bCancelarGuardar: TRdxBoton;
brSimple: TRdxBarraInferior;
bSalir: TRdxBoton;
bImprimir: TRdxBoton;
bExportar: TRdxBoton;
gridFacturas: TdxDBGrid;
N1: TMenuItem2000;
Listadefacturasdecliente1: TMenuItem2000;
menuAnadir: TPopupMenu2000;
miFacturaLibre: TMenuItem2000;
miSep1: TMenuItem2000;
miFacturaPre: TMenuItem2000;
miSep2: TMenuItem2000;
miSep3: TMenuItem2000;
miAbono: TMenuItem2000;
miFacturaAlbaran: TMenuItem2000;
imgSombra: TImage;
RdxPanel1: TRdxPanel;
Label1: TLabel;
cbxAno: TRdxComboBox;
bEnviarCorreo: TRdxBoton;
procedure bAnadirClick(Sender: TObject);
procedure bModificarClick(Sender: TObject);
procedure bConsultarClick(Sender: TObject);
procedure bBuscarClick(Sender: TObject);
procedure bEliminarClick(Sender: TObject);
procedure bSeleccionarClick(Sender: TObject);
procedure bCancelarGuardarClick(Sender: TObject);
procedure bSalirClick(Sender: TObject);
procedure MenuItem20002Click(Sender: TObject);
procedure MenuItem20005Click(Sender: TObject);
procedure Listadefacturasdecliente1Click(Sender: TObject);
procedure bCambiarSituacionClick(Sender: TObject);
procedure bImprimirClick(Sender: TObject);
procedure bExportarClick(Sender: TObject);
procedure gridFacturasRefreshButton(Sender: TObject);
procedure gridFacturasCustomDrawCell(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn;
ASelected, AFocused, ANewItemRow: Boolean; var AText: String;
var AColor: TColor; AFont: TFont; var AAlignment: TAlignment;
var ADone: Boolean);
procedure miAbonoClick(Sender: TObject);
procedure miFacturaAlbaranClick(Sender: TObject);
procedure miFacturaPreClick(Sender: TObject);
procedure miFacturaLibreClick(Sender: TObject);
procedure cbxAnoChange(Sender: TObject);
procedure gridFacturasDblClick(Sender: TObject);
procedure bEnviarCorreoClick(Sender: TObject);
private
FCodigoCliente : String;
FCodigoPresupuesto : String;
FCodigoAlbaran : String;
procedure SetCodigoCliente (Value : String);
procedure ActualizarBotones;
protected
procedure FreeContenido; override;
procedure BuscarFactura; override;
procedure VerModal; override;
procedure SetContenido (NuevoFrame : TRdxFrame); override;
public
constructor Create (AOwner : TComponent); override;
destructor Destroy; override;
published
property CodigoCliente : String read FCodigoCliente write SetCodigoCliente;
end;
var
frFacturasClientes: TfrFacturasClientes;
implementation
{$R *.DFM}
uses
FacturaCliente, BuscarFacturaCliente, BaseDatos, Configuracion, SysFunc,
IBCustomDataSet, Mensajes, TablaFacturasCliente, RdxEmpresaActiva,
StrFunc, ListadoFacturasCliPenIVA, PagarFacturaCliente, ListadoFacturasCli,
InformeFacturaCliente, RdxFramePresupuestos, PresupuestosClientes,
RdxFrameAlbaranes, AlbaranesClientes, Constantes, Literales,
NumFunc, Correo, TablaClientes;
procedure TfrFacturasClientes.bAnadirClick(Sender: TObject);
begin
inherited;
Contenido := TfrFacturaCliente.Create(Self);
Contenido.Modo := Anadir;
Contenido.Visible := True;
end;
procedure TfrFacturasClientes.bModificarClick(Sender: TObject);
begin
CodigoFactura := TablaFacturas.FieldByName('CODIGO').AsString;
Contenido := TfrFacturaCliente.Create(Self);
Contenido.Modo := Modificar;
Contenido.Visible := True;
end;
procedure TfrFacturasClientes.bConsultarClick(Sender: TObject);
begin
CodigoFactura := TablaFacturas.FieldByName('CODIGO').AsString;
Contenido := TfrFacturaCliente.Create(Self);
Contenido.Modo := Consultar;
Contenido.Visible := True;
end;
procedure TfrFacturasClientes.bBuscarClick(Sender: TObject);
begin
CodigoFactura := TablaFacturas.FieldByName('CODIGO').AsString;
Contenido := TfrBuscarFacturaCliente.Create(Self);
Contenido.Visible := True;
end;
procedure TfrFacturasClientes.bEliminarClick(Sender: TObject);
begin
CodigoFactura := TablaFacturas.FieldByName('CODIGO').AsString;
Contenido := TfrFacturaCliente.Create(Self);
Contenido.Modo := Eliminar;
Contenido.Visible := True;
end;
procedure TfrFacturasClientes.BuscarFactura;
begin
with TablaFacturas do
begin
DisableControls;
Close;
Open;
dmTablaFacturasCliente.InicializarTablaFacturas(@TablaFacturas);
ActualizarBotones;
EnableControls;
if not Locate('CODIGO', CodigoFactura, []) then
gridFacturas.GotoFirst;
end;
end;
constructor TfrFacturasClientes.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Entidad := entFacturaCliente;
ConfigurarFrame(Self, Self.Entidad);
BaseDatos := dmBaseDatos.BD;
Transaccion := dmBaseDatos.Transaccion;
TablaFacturas := TIBDataSet.Create(Self);
dsFacturas.DataSet := TablaFacturas;
with TablaFacturas do
begin
Database := BaseDatos;
Transaction := Transaccion;
SelectSQL.Assign(dmTablaFacturasCliente.sqlConsultarGridFacturas);
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
Prepare;
Open;
ActualizarBotones;
end;
dmTablaFacturasCliente.InicializarTablaFacturas(@TablaFacturas);
dmTablaFacturasCliente.InicializarGridFacturas(gridFacturas);
gridFacturas.GotoFirst;
cbxAno.Items := dmTablaFacturasCliente.DarListaAnos(EmpresaActiva.Codigo, True);
cbxAno.ItemIndex := 0;
end;
destructor TfrFacturasClientes.Destroy;
begin
TablaFacturas.Close;
TablaFacturas.UnPrepare;
TablaFacturas.Free;
inherited;
end;
procedure TfrFacturasClientes.FreeContenido;
begin
if (ContenidoModal is TRdxFramePresupuestos) then
FCodigoPresupuesto := (ContenidoModal as TRdxFramePresupuestos).CodigoPresupuesto;
if (ContenidoModal is TRdxFrameAlbaranes) then
FCodigoAlbaran := (ContenidoModal as TRdxFrameAlbaranes).CodigoAlbaran;
if (Contenido is TRdxFrameFacturasCliente) then
CodigoFactura := (Contenido as TRdxFrameFacturasCliente).CodigoFactura;
inherited FreeContenido;
BuscarFactura;
end;
procedure TfrFacturasClientes.SetCodigoCliente(Value: String);
begin
if EsCadenaVacia(Value) then
Exit;
if FCodigoCliente = Value then
exit;
FCodigoCliente := Value;
with TablaFacturas do
begin
DisableControls;
Close;
SelectSQL.Assign(dmTablaFacturasCliente.sqlConsultarGridFacturasCli);
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
ParamByName('CODIGOCLIENTE').AsString := FCodigoCliente;
Prepare;
Open;
ActualizarBotones;
dmTablaFacturasCliente.InicializarTablaFacturas(@TablaFacturas);
EnableControls;
Locate('CODIGO', CodigoFactura, []);
end;
end;
procedure TfrFacturasClientes.VerModal;
begin
if (ContenidoModal is TRdxFramePresupuestos) then
(ContenidoModal as TRdxFramePresupuestos).Modo := Facturar;
if (ContenidoModal is TRdxFrameAlbaranes) then
(ContenidoModal as TRdxFrameAlbaranes).Modo := Facturar;
if (ContenidoModal is TfrPagarFacturaCliente) then
(ContenidoModal as TfrPagarFacturaCliente).ListaFacturas := ListaFacturas;
inherited;
end;
procedure TfrFacturasClientes.bSeleccionarClick(Sender: TObject);
begin
CodigoFactura := TablaFacturas.FieldByName('CODIGO').AsString;
CloseFrame;
end;
procedure TfrFacturasClientes.bCancelarGuardarClick(Sender: TObject);
begin
FCodigoFactura := NULL;
CloseFrame;
end;
procedure TfrFacturasClientes.bSalirClick(Sender: TObject);
begin
CloseFrame;
end;
procedure TfrFacturasClientes.ActualizarBotones;
begin
if BaseDatos.IsReadOnly then
begin
bAnadir.Enabled := False;
bModificar.Enabled := False;
bEliminar.Enabled := False;
bConsultar.Enabled := True;
bBuscar.Enabled := True;
bListar.Enabled := True;
bCambiarSituacion.Enabled := False;
bImprimir.Enabled := True;
bExportar.Enabled := True;
Exit;
end;
if TablaFacturas.RecordCount = 0 then
begin
bAnadir.Enabled := True;
bModificar.Enabled := False;
bEliminar.Enabled := False;
bConsultar.Enabled := False;
bBuscar.Enabled := False;
bListar.Enabled := False;
bCambiarSituacion.Enabled := False;
bImprimir.Enabled := False;
bExportar.Enabled := False;
end
else begin
bAnadir.Enabled := True;
bModificar.Enabled := True;
bEliminar.Enabled := True;
bConsultar.Enabled := True;
bBuscar.Enabled := True;
bListar.Enabled := True;
bCambiarSituacion.Enabled := True;
bImprimir.Enabled := True;
bExportar.Enabled := True;
end;
end;
procedure TfrFacturasClientes.MenuItem20002Click(Sender: TObject);
begin
Contenido := TfrListadoFacturasCliPenIVA.Create(Self);
Contenido.Entidad := entListadoFacturasCliPendientes;
end;
procedure TfrFacturasClientes.MenuItem20005Click(Sender: TObject);
var
ContenidoAux : TfrListadoFacturasCliPenIVA;
begin
Contenido := TfrListadoFacturasCliPenIVA.Create(Self);
Contenido.Entidad := entListadoFacturasCliIVA;
end;
procedure TfrFacturasClientes.bCambiarSituacionClick(Sender: TObject);
var
Situacion : String;
iAux : Integer;
begin
ListaFacturas := dmTablaFacturasCliente.DarListaFacturas(gridFacturas, @TablaFacturas);
if (ListaFacturas = NIL) or (ListaFacturas.Count = 0) then
exit;
// Comprobar que todas las facturas tienen la misma situación
for iAux := 0 to ListaFacturas.Count - 1 do
begin
if iAux = 0 then
Situacion := dmTablaFacturasCliente.DarSituacionFactura(EmpresaActiva.Codigo, ListaFacturas.Strings[iAux])
else begin
if Situacion <> dmTablaFacturasCliente.DarSituacionFactura(EmpresaActiva.Codigo, ListaFacturas.Strings[iAux]) then
begin
VerMensaje(msgFacSitDistinta);
Exit;
end;
end;
end;
CaptionModal := 'Cambiar situación de factura de cliente';
WidthModal := 460;
HeightModal := 200;
ModoModal := Pagar;
EntidadModal := entCliente;
ContenidoModal := TfrPagarFacturaCliente.Create(Self);
end;
procedure TfrFacturasClientes.bImprimirClick(Sender: TObject);
var
FInformeFactura : TInformeFacturaCliente;
begin
CodigoFactura := TablaFacturas.FieldByName('CODIGO').AsString;
FInformeFactura := TInformeFacturaCliente.Create(Self);
try
FInformeFactura.Imprimir(FCodigoFactura);
finally
FInformeFactura.Free;
end;
end;
procedure TfrFacturasClientes.bExportarClick(Sender: TObject);
var
FInformeFactura : TInformeFacturaCliente;
Fichero : String;
begin
if not DarFicheroExportar(Fichero) then
Exit;
CodigoFactura := TablaFacturas.FieldByName('CODIGO').AsString;
FInformeFactura := TInformeFacturaCliente.Create(Self);
try
FInformeFactura.Exportar(FCodigoFactura, Fichero);
finally
FInformeFactura.Free;
end;
end;
procedure TfrFacturasClientes.gridFacturasRefreshButton(Sender: TObject);
begin
BuscarFactura;
end;
procedure TfrFacturasClientes.gridFacturasCustomDrawCell(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;
var AText: String; var AColor: TColor; AFont: TFont;
var AAlignment: TAlignment; var ADone: Boolean);
var
IndiceCol : Integer;
begin
if not ASelected then
begin
IndiceCol := (Sender as TdxDBGrid).ColumnByFieldName('SITUACION').Index;
if UpperCase(ANode.Strings[IndiceCol]) = 'PAGADA' then
AFont.Color := COLOR_PAGADO;
IndiceCol := (Sender as TdxDBGrid).ColumnByFieldName('CLASEFACTURA').Index;
if UpperCase(ANode.Strings[IndiceCol]) = 'A' then
AFont.Color := COLOR_ABONO;
end;
end;
procedure TfrFacturasClientes.Listadefacturasdecliente1Click(
Sender: TObject);
begin
Contenido := TfrListadoFacturasCli.Create(Self);
end;
procedure TfrFacturasClientes.miAbonoClick(Sender: TObject);
begin
CodigoFactura := TablaFacturas.FieldByName('CODIGO').AsString;
// Mirar si la factura seleccionada es un cargo
if (dmTablaFacturasCliente.DarClaseFactura(EmpresaActiva.Codigo, CodigoFactura) <> 'C') then
begin
VerMensaje(msgFacCliClaseFacDistinta);
Exit;
end;
// Mirar si la factura está totalmente abonada
if (Redondear(abs(dmTablaFacturasCliente.DarImporteTodosAbonos(EmpresaActiva.Codigo, CodigoFactura)), 2) >=
Redondear(abs(TablaFacturas.FieldByName('IMPORTETOTAL').AsFloat), 2)) then
begin
VerMensaje(msgFacTotalmenteAbonada);
Exit;
end;
// Mostrar la pantalla de altas
Contenido := TfrFacturaCliente.Create(Self);
Contenido.Modo := Anadir;
(Contenido as TfrFacturaCliente).CodigoFacturaCargo := CodigoFactura;
Contenido.Visible := True;
end;
procedure TfrFacturasClientes.miFacturaAlbaranClick(Sender: TObject);
begin
// Mostrar la lista de albaranes
CaptionModal := 'Elija el albarán que desea facturar';
ContenidoModal := TfrAlbaranesClientes.Create(Self);
if (not EsCadenaVacia(FCodigoAlbaran)) then
begin
Contenido := TfrFacturaCliente.Create(Self);
Contenido.Modo := Anadir;
(Contenido as TfrFacturaCliente).CodigoAlbaran := FCodigoAlbaran;
Contenido.Visible := True;
end;
end;
procedure TfrFacturasClientes.miFacturaPreClick(Sender: TObject);
begin
// Mostrar la lista de presupuestos
CaptionModal := 'Elija el presupuesto que desea facturar';
ContenidoModal := TfrPresupuestosClientes.Create(Self);
if (not EsCadenaVacia(FCodigoPresupuesto)) then
begin
Contenido := TfrFacturaCliente.Create(Self);
Contenido.Modo := Anadir;
(Contenido as TfrFacturaCliente).CodigoPresupuesto := FCodigoPresupuesto;
Contenido.Visible := True;
end;
end;
procedure TfrFacturasClientes.miFacturaLibreClick(Sender: TObject);
begin
Contenido := TfrFacturaCliente.Create(Self);
Contenido.Modo := Anadir;
Contenido.Visible := True;
end;
procedure TfrFacturasClientes.cbxAnoChange(Sender: TObject);
begin
if cbxAno.Text = CTE_TODOS then begin
gridFacturas.Filter.Remove(gridFacturas.FindColumnByFieldName(CTE_ANO));
gridFacturas.Filter.Clear;
end
else begin
gridFacturas.Filter.Clear;
gridFacturas.Filter.Add(gridFacturas.FindColumnByFieldName(CTE_ANO), cbxAno.Text, cbxAno.Text);
//Para activar P255
// gridFacturas.Filter.Add(gridFacturas.FindColumnByFieldName('MES'), '1/2002', '1/2002');
end;
gridFacturas.SetFocus;
gridFacturas.GotoFirst;
//Falta seleccionar tupla
end;
procedure TfrFacturasClientes.gridFacturasDblClick(Sender: TObject);
begin
if Modo = Seleccionar then
bSeleccionar.Click
else
bModificar.Click;
end;
procedure TfrFacturasClientes.SetContenido(NuevoFrame: TRdxFrame);
begin
inherited;
if (Contenido is TfrListadoFacturasCli) then
(Contenido as TfrListadoFacturasCli).CodigoCliente := TablaFacturas.FieldByName('CODIGOCLIENTE').AsString;
end;
procedure TfrFacturasClientes.bEnviarCorreoClick(Sender: TObject);
var
FInforme : TInformeFacturaCliente;
Fichero : String;
Datos: TDatosCorreo;
CodigoCliente: String;
begin
CodigoFactura := TablaFacturas.FieldByName('CODIGO').AsString;
CodigoCliente := TablaFacturas.FieldByName('CODIGOCLIENTE').AsString;
Datos:= Nil;
Fichero := CodigoFactura;
Fichero := DarRutaTemporal + StringReplace(Fichero, CTE_SEPSERIADO, CTE_SEPSERIADO2, [rfReplaceAll, rfIgnoreCase]);
Fichero := Fichero + CTE_DOC;
//Generamos el fichero para luego adjuntaro al correo
FInforme:= TInformeFacturaCliente.Create(Self);
try
FInforme.Exportar(CodigoFactura, Fichero);
finally
FInforme.Free;
end;
try
//Creamos el correo
Datos:= TDatosCorreo.Create;
Datos.Direcciones.add(dmTablaClientes.darCorreo(CodigoCliente));
Datos.Adjuntos.Add(Fichero);
enviarCorreo(Datos);
finally
FreeAndNil(Datos);
end;
end;
end.