git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES/trunk@4 b68bf8ae-e977-074f-a058-3cfd71dd8f45
1416 lines
42 KiB
ObjectPascal
1416 lines
42 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.1.7
|
|
Fecha versión actual: 07-03-2004
|
|
===============================================================================
|
|
Modificaciones:
|
|
|
|
Fecha Comentarios
|
|
---------------------------------------------------------------------------
|
|
09-10-2001 Se ha reestructurado la pantalla en pestañas.
|
|
|
|
21-10-2001 Las facturas de proveedor pasan a contener pedidos en vez de
|
|
material.
|
|
|
|
21-10-2001 Se utiliza una tabla de memoria para el contenido.
|
|
|
|
23-10-2001 Hay que comprobar que todos los pedidos pertenezcan al
|
|
proveedor que figura en la factura.
|
|
|
|
23-10-2001 El campo 'domiciliación bancaria' pasa a ser NO obligatorio.
|
|
|
|
27-10-2001 Se ha arreglado un fallo que al añadir un concepto estando
|
|
en la última fila lo hacia por encima del registro, no por
|
|
debajo.
|
|
|
|
29-10-2001 Cuando se elimina un concepto con <CTRL+Supr> hay que
|
|
volver a recalcular el importe total de la factura.
|
|
|
|
29-10-2001 Se ha cambiado el literal 'Notas' por 'Concepto de factura'.
|
|
|
|
29-10-2001 El campo 'Banco' se ha cambiado a campo con lista desplegable.
|
|
En esa lista aparecerán los campos dados de alta en la aplica-
|
|
ción. Se puede dejar en blanco.
|
|
|
|
31-10-2001 Se han añadido los campos IMPORTEDESCUENTO e IMPORTEIVA.
|
|
|
|
31-10-2001 Se ha cambiado el literal 'Contenido de la factura' por
|
|
'Lista de pedidos'.
|
|
|
|
27-11-2001 Si en los detalles hay alguno que es un pedido libre
|
|
saltarse la comprobación del cód.proveedor del pedido
|
|
con el cód.proveedor de la factura.
|
|
|
|
07-02-2002 Desactivada la opción de 'CancelOnExit' del grid.
|
|
|
|
10-02-2002 Repaso de CalcularTotalFactura ya que no calculaba el importe
|
|
se ha añadido CalcularTotalFactura en AnadirDatos, ModificarDatos,
|
|
setCodigoPedido, setCodigoProveedor.
|
|
|
|
07-04-2002 Se ha adaptado para la transacción única.
|
|
|
|
09-04-2002 En las funciones 'CancelarAnadir', 'CancelarModificar',
|
|
'CancelarEliminar', 'AnadirDatos', 'ModificarDatos', y
|
|
'EliminarDatos' cerrar todas las tablas que se usen.
|
|
|
|
09-04-2002 En el evento 'bCancelarClick' llamar a la función
|
|
'TratarCambios' en vez de 'DescartarOperacion'.
|
|
|
|
05-05-2002 Adaptación al grid 'TdxDBGrid'.
|
|
|
|
21-08-2002 P237. Revisar los botones de 'Eliminar' y 'Eliminar todo'
|
|
para que al pulsar 'Esc' cancele la operación y no la
|
|
ejecute como ahora.
|
|
|
|
24-09-2002 Se producía una excepción si el cursor estaba en el código
|
|
de la factura, se pulsaba la tecla 'Esc' y se elegía 'No'.
|
|
El frame estaba oculto pero saltaba el evento OnExit del
|
|
campo de código de factura.
|
|
|
|
08-03-2003 Se han puesto componentes con calendario.
|
|
|
|
07-03-2004 p272. Adaptación a multiempresa.
|
|
|
|
===============================================================================
|
|
}
|
|
|
|
unit FacturaProveedor;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
RDXFRAMEFACTURASPROVEEDOR, ExtCtrls, StdCtrls, RdxMemo, RdxComboBox,
|
|
RdxCampos, RdxTitulos, RdxPaneles, RdxBotones, RdxBarras, Grids, DBGrids,
|
|
RXDBCtrl, Db, ComCtrls, RdxPageControl, RxMemDS, dxCntner,
|
|
dxTL, dxDBCtrl, dxDBGrid, Configuracion, dxEditor, dxExEdtr, dxEdLib,
|
|
dxDBELib, cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit,
|
|
cxDropDownEdit, cxCalendar, cxDBEdit, cxButtonEdit;
|
|
|
|
type
|
|
TfrFacturaProveedor = class(TRdxFrameFacturasProveedor)
|
|
pnlTitulo: TRdxPanelTituloOperacion;
|
|
pnlScroll: TRdxScrollPanel;
|
|
pnlFactura: TRdxPanel;
|
|
cDatosFactura: TRdxCabecera;
|
|
eNumFacProve: TLabel;
|
|
eCodigoFactura: TLabel;
|
|
eFecha: TLabel;
|
|
eFechaVto: TLabel;
|
|
eFormaPago: TLabel;
|
|
eTipo: TLabel;
|
|
eBanco: TLabel;
|
|
eUsuario: TLabel;
|
|
eDescripcion: TLabel;
|
|
Codigo: TRdxDBEdit;
|
|
cbxFormaPago: TRdxDBComboBox;
|
|
cbxTipo: TRdxDBComboBox;
|
|
CodigoFacturaProv: TRdxDBEdit;
|
|
Usuario: TRdxDBEdit;
|
|
Notas: TRdxDBMemo;
|
|
dsFactura: TDataSource;
|
|
dsDetallesFacturas: TDataSource;
|
|
eSituacion: TLabel;
|
|
cbxSituacion: TRdxDBComboBox;
|
|
brDoble: TRdxBarraInferior;
|
|
bGuardar: TRdxBoton;
|
|
bCancelar: TRdxBoton;
|
|
brSimple: TRdxBarraInferior;
|
|
bSalir: TRdxBoton;
|
|
pnlPaginas: TRdxPanel;
|
|
paginas: TRdxPagesControl;
|
|
pagProveedor: TTabSheet;
|
|
pagContenido: TTabSheet;
|
|
pagImporte: TTabSheet;
|
|
pnlProveedor: TRdxPanel;
|
|
eCodigo: TLabel;
|
|
eNIFCIF: TLabel;
|
|
eCodigoAsignado: TLabel;
|
|
eNombre: TLabel;
|
|
ePersonaContacto: TLabel;
|
|
eFax: TLabel;
|
|
NIFCIF: TRdxDBEdit;
|
|
CodigoCliente: TRdxDBEdit;
|
|
Nombre: TRdxDBEdit;
|
|
PersonaContacto: TRdxDBEdit;
|
|
Fax: TRdxDBEdit;
|
|
pnlGridArticulos: TPanel;
|
|
pnlBarraGrid: TRdxPanel;
|
|
bAnadir: TRdxBoton;
|
|
bEliminar: TRdxBoton;
|
|
bEliminarTodo: TRdxBoton;
|
|
cbxBanco: TRdxDBComboBox;
|
|
pnlImporteAlbaran: TRdxPanel;
|
|
Label4: TLabel;
|
|
eDto: TLabel;
|
|
eIVA: TLabel;
|
|
Label6: TLabel;
|
|
Shape1: TShape;
|
|
BaseImponible: TRdxDBEdit;
|
|
Descuento: TRdxDBEdit;
|
|
IVA: TRdxDBEdit;
|
|
ImporteTotal: TRdxDBEdit;
|
|
ImporteDescuento: TRdxDBEdit;
|
|
ImporteIVA: TRdxDBEdit;
|
|
gridDetalles: TdxDBGrid;
|
|
Fecha: TcxDBDateEdit;
|
|
FechaVencimiento: TcxDBDateEdit;
|
|
CodProveedor: TcxDBButtonEdit;
|
|
procedure bSalirClick(Sender: TObject);
|
|
procedure bGuardarClick(Sender: TObject);
|
|
procedure bCancelarGuardarClick(Sender: TObject);
|
|
procedure CodigoButtonClick(Sender: TObject);
|
|
procedure bAnadirClick(Sender: TObject);
|
|
procedure bEliminarClick(Sender: TObject);
|
|
procedure bEliminarTodoClick(Sender: TObject);
|
|
procedure CodigoExit(Sender: TObject);
|
|
procedure FechaExit(Sender: TObject);
|
|
procedure FechaVencimientoExit(Sender: TObject);
|
|
procedure CodProveedorPropertiesButtonClick(Sender: TObject;
|
|
AButtonIndex: Integer);
|
|
procedure CodProveedorPropertiesValidate(Sender: TObject;
|
|
var DisplayValue: Variant; var ErrorText: TCaption;
|
|
var Error: Boolean);
|
|
private
|
|
FCodigoProveedor : Variant;
|
|
FCodigoPedido : Variant;
|
|
FTablaDetallesMem : TRxMemoryData;
|
|
procedure CalcularTotalFactura;
|
|
procedure BorrarDetalles;
|
|
procedure SalvarDetalles;
|
|
procedure CargarDetalles;
|
|
procedure BorrarDetallesIB;
|
|
function NoFacturarPedidos : boolean;
|
|
function FacturarPedidos : boolean;
|
|
procedure ActivarEventosCampos;
|
|
procedure DetalleAfterDelete (DataSet: TDataSet);
|
|
procedure IVASetText(Sender: TField; const Text: String);
|
|
procedure DtoSetText(Sender: TField; const Text: String);
|
|
protected
|
|
procedure ActivarModoAnadir; override;
|
|
procedure ActivarModoModificar; override;
|
|
procedure ActivarModoConsultar; override;
|
|
procedure ActivarModoEliminar; override;
|
|
function AnadirDatos : Boolean; override;
|
|
function ModificarDatos : Boolean; override;
|
|
function EliminarDatos : Boolean; override;
|
|
function CancelarAnadir : Boolean; override;
|
|
function CancelarModificar : Boolean; override;
|
|
function CancelarEliminar : Boolean; override;
|
|
function ComprobarDatos : Boolean; override;
|
|
procedure SetCodigoProveedor (Value : Variant);
|
|
procedure SetCodigoPedido (Value : Variant);
|
|
procedure FreeContenido; override;
|
|
procedure BuscarFactura; override;
|
|
procedure VerModal; override;
|
|
public
|
|
property CodigoProveedor : Variant read FCodigoProveedor write SetCodigoProveedor;
|
|
property CodigoPedido : Variant read FCodigoPedido write SetCodigoPedido;
|
|
constructor Create (AOwner : TComponent); override;
|
|
destructor Destroy; override;
|
|
published
|
|
property TablaFacturasProveedor;
|
|
property TablaDetallesFacturas;
|
|
property TablaDetallesMem : TRxMemoryData read FTablaDetallesMem write FTablaDetallesMem;
|
|
property CodigoFactura;
|
|
procedure GridBotonCodigoPedidoClick(Sender: TObject);
|
|
procedure PrecioDetalleSetText(Sender: TField; const Text: String);
|
|
procedure CodigoPedidoDetalleSetText(Sender: TField; const Text: String);
|
|
end;
|
|
|
|
var
|
|
frFacturaProveedor: TfrFacturaProveedor;
|
|
|
|
implementation
|
|
|
|
uses
|
|
BaseDatos, TablaFacturasProveedor, IB, Mensajes, TablaArticulos,
|
|
Tipos, IBCustomDataSet, TablaFormasPago, RdxFrameArticulos,
|
|
FacturasProveedores, PedidosProveedores, Proveedores, TablaProveedores,
|
|
Articulos, RdxFrameProveedores, TablaPedidosProveedor, NumFunc,
|
|
RdxFramePedidosProveedor, StrFunc, IBErrorCodes, Excepciones,
|
|
TablaBancos, dxDBTLCL, RdxEmpresaActiva, Literales;
|
|
|
|
{$R *.DFM}
|
|
|
|
{ TfrFacturaProveedor }
|
|
|
|
procedure TfrFacturaProveedor.ActivarModoAnadir;
|
|
var
|
|
CodNuevo : Variant;
|
|
begin
|
|
dsFactura.AutoEdit := True;
|
|
dsDetallesFacturas.AutoEdit := True;
|
|
Codigo.VerBoton := False;
|
|
Codigo.ReadOnly := False;
|
|
cbxTipo.ReadOnly := False;
|
|
CodProveedor.Properties.Buttons[0].Visible := True;
|
|
CodProveedor.Properties.OnValidate := CodProveedorPropertiesValidate;
|
|
|
|
ActivarEdicionGridDetalles(gridDetalles);
|
|
|
|
(gridDetalles.ColumnByFieldName('CODIGOPEDIDO')
|
|
as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonCodigoPedidoClick;
|
|
|
|
pnlBarraGrid.Visible := True;
|
|
try
|
|
{ Antes de aplicar la caché hay que asegurarse de que la
|
|
tabla está cerrada. }
|
|
TablaFacturasProveedor.DisableControls;
|
|
TablaDetallesFacturas.DisableControls;
|
|
|
|
{ Inicializar la tabla de Facturas }
|
|
TablaFacturasProveedor.Close;
|
|
CodNuevo := dmTablaFacturasProveedor.darNuevoCodigo;
|
|
with TablaFacturasProveedor do
|
|
begin
|
|
CachedUpdates := True;
|
|
Prepare;
|
|
Open;
|
|
EnableControls;
|
|
Insert;
|
|
FieldByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
end;
|
|
|
|
Codigo.Field.asString := CodNuevo;
|
|
Fecha.DataBinding.Field.AsString := DateToStr(Date);
|
|
Usuario.Field.AsString := dmBaseDatos.Usuario;
|
|
cbxSituacion.Field.AsString := cbxSituacion.Items[0];
|
|
cbxTipo.Field.AsString := cbxTipo.Items[0];
|
|
|
|
{ Inicializar la tabla de detalles }
|
|
with TablaDetallesFacturas do
|
|
begin
|
|
Close;
|
|
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
ParamByName('CODIGOFACTURA').AsString := CodNuevo;
|
|
Prepare;
|
|
Open;
|
|
EnableControls;
|
|
end;
|
|
|
|
TablaDetallesMem.Close;
|
|
TablaDetallesMem.Open;
|
|
ActivarEventosCampos;
|
|
|
|
dmTablaFacturasProveedor.InicializarTablaFacturas(@TablaFacturasProveedor);
|
|
dmTablaFacturasProveedor.InicializarTablaDetalles(@TablaDetallesMem);
|
|
|
|
FacturarPedidos;
|
|
Visible := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.ActivarModoConsultar;
|
|
begin
|
|
dsFactura.AutoEdit := False;
|
|
dsDetallesFacturas.AutoEdit := False;
|
|
|
|
Codigo.VerBoton := True;
|
|
CodProveedor.Properties.Buttons[0].Visible := False;
|
|
CodProveedor.Properties.OnValidate := nil;
|
|
|
|
DesactivarEdicionGridDetalles(gridDetalles);
|
|
|
|
(gridDetalles.ColumnByFieldName('CODIGOPEDIDO')
|
|
as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL;
|
|
|
|
pnlBarraGrid.Visible := False;
|
|
|
|
try
|
|
TablaFacturasProveedor.Prepare;
|
|
TablaFacturasProveedor.Open;
|
|
|
|
if TablaFacturasProveedor.RecordCount = 0 then
|
|
begin
|
|
VerMensajeFmt(msgFacProNoExiste, [CodigoFactura]);
|
|
CloseFrame;
|
|
Exit;
|
|
end;
|
|
|
|
TablaFacturasProveedor.Cancel;
|
|
|
|
with TablaDetallesFacturas do
|
|
begin
|
|
Close;
|
|
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
ParamByName('CODIGOFACTURA').AsString := CodigoFactura;
|
|
Prepare;
|
|
Open;
|
|
Cancel;
|
|
end;
|
|
|
|
TablaDetallesMem.Close;
|
|
TablaDetallesMem.Open;
|
|
CargarDetalles;
|
|
|
|
dmTablaFacturasProveedor.InicializarTablaFacturas(@TablaFacturasProveedor);
|
|
dmTablaFacturasProveedor.InicializarTablaDetalles(@TablaDetallesMem);
|
|
Visible := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.ActivarModoEliminar;
|
|
begin
|
|
dsFactura.AutoEdit := False;
|
|
dsDetallesFacturas.AutoEdit := False;
|
|
Codigo.VerBoton := True;
|
|
CodProveedor.Properties.Buttons[0].Visible := False;
|
|
CodProveedor.Properties.OnValidate := nil;
|
|
|
|
DesactivarEdicionGridDetalles(gridDetalles);
|
|
|
|
(gridDetalles.ColumnByFieldName('CODIGOPEDIDO')
|
|
as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL;
|
|
|
|
pnlBarraGrid.Visible := False;
|
|
|
|
try
|
|
TablaFacturasProveedor.Prepare;
|
|
TablaFacturasProveedor.Open;
|
|
|
|
if TablaFacturasProveedor.RecordCount = 0 then
|
|
begin
|
|
VerMensajeFmt(msgFacProNoExiste, [CodigoFactura]);
|
|
CancelarEliminar;
|
|
CloseFrame;
|
|
Exit;
|
|
end;
|
|
|
|
TablaFacturasProveedor.Cancel;
|
|
|
|
with TablaDetallesFacturas do
|
|
begin
|
|
Close;
|
|
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
ParamByName('CODIGOFACTURA').AsString := CodigoFactura;
|
|
Prepare;
|
|
Open;
|
|
Cancel;
|
|
end;
|
|
|
|
TablaDetallesMem.Close;
|
|
TablaDetallesMem.Open;
|
|
CargarDetalles;
|
|
|
|
dmTablaFacturasProveedor.InicializarTablaFacturas(@TablaFacturasProveedor);
|
|
dmTablaFacturasProveedor.InicializarTablaDetalles(@TablaDetallesMem);
|
|
Visible := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.ActivarModoModificar;
|
|
begin
|
|
dsFactura.AutoEdit := True;
|
|
dsDetallesFacturas.AutoEdit := True;
|
|
Codigo.VerBoton := True;
|
|
Codigo.ReadOnly := True;
|
|
cbxTipo.ReadOnly := True;
|
|
CodProveedor.Properties.Buttons[0].Visible := True;
|
|
CodProveedor.Properties.OnValidate := CodProveedorPropertiesValidate;
|
|
|
|
ActivarEdicionGridDetalles(gridDetalles);
|
|
|
|
(gridDetalles.ColumnByFieldName('CODIGOPEDIDO')
|
|
as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonCodigoPedidoClick;
|
|
|
|
pnlBarraGrid.Visible := True;
|
|
|
|
try
|
|
{ Antes de aplicar la caché hay que asegurarse de que la
|
|
tabla está cerrada. }
|
|
TablaFacturasProveedor.Prepare;
|
|
TablaFacturasProveedor.Open;
|
|
|
|
if TablaFacturasProveedor.RecordCount = 0 then
|
|
begin
|
|
VerMensajeFmt(msgFacProNoExiste, [CodigoFactura]);
|
|
CancelarModificar;
|
|
CloseFrame;
|
|
Exit;
|
|
end;
|
|
|
|
TablaFacturasProveedor.Edit;
|
|
|
|
with TablaDetallesFacturas do
|
|
begin
|
|
Close;
|
|
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
Params.ByName('CODIGOFACTURA').AsString := CodigoFactura;
|
|
Prepare;
|
|
Open;
|
|
end;
|
|
|
|
TablaDetallesMem.Close;
|
|
TablaDetallesMem.Open;
|
|
CargarDetalles;
|
|
ActivarEventosCampos;
|
|
|
|
TablaDetallesMem.FieldByName('PRECIO').OnSetText := PrecioDetalleSetText;
|
|
TablaDetallesMem.FieldByName('CODIGOPEDIDO').OnSetText := CodigoPedidoDetalleSetText;
|
|
|
|
dmTablaFacturasProveedor.InicializarTablaFacturas(@TablaFacturasProveedor);
|
|
dmTablaFacturasProveedor.InicializarTablaDetalles(@TablaDetallesMem);
|
|
CalcularTotalFactura;
|
|
Visible := True;
|
|
except
|
|
on E : EIBError do
|
|
begin
|
|
case E.IBErrorCode of
|
|
isc_lock_conflict : begin
|
|
VerMensajeFmt(msgFacProBloqueada, [CodigoFactura]);
|
|
CancelarModificar;
|
|
CloseFrame;
|
|
Exit;
|
|
end
|
|
else
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrFacturaProveedor.AnadirDatos: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
CalcularTotalFactura;
|
|
TablaFacturasProveedor.Post;
|
|
TablaFacturasProveedor.ApplyUpdates;
|
|
|
|
BorrarDetallesIB;
|
|
SalvarDetalles;
|
|
|
|
FCodigoFactura := TablaFacturasProveedor.FieldByName('CODIGO').AsString;
|
|
NoFacturarPedidos;
|
|
FacturarPedidos;
|
|
|
|
dmTablaFacturasProveedor.IncrementarCodigo;
|
|
Commit;
|
|
TablaFacturasProveedor.CachedUpdates := False;
|
|
TablaFacturasProveedor.Close;
|
|
TablaDetallesFacturas.Close;
|
|
TablaDetallesMem.Close;
|
|
Result := True;
|
|
except
|
|
on E : EIBError do begin
|
|
if E.IBErrorCode = isc_unique_key_violation then
|
|
begin
|
|
VerMensajeFmt(msgFacProCodFacRepetido, [Codigo.Field.AsString]);
|
|
TablaFacturasProveedor.Edit;
|
|
end
|
|
else
|
|
TratarExcepcion(E);
|
|
TablaFacturasProveedor.Edit;
|
|
end;
|
|
on E : Exception do begin
|
|
TratarExcepcion(E);
|
|
TablaFacturasProveedor.Edit;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.BuscarFactura;
|
|
begin
|
|
if Transaccion = NIL then
|
|
exit;
|
|
try
|
|
TablaFacturasProveedor.DisableControls;
|
|
TablaDetallesFacturas.DisableControls;
|
|
TablaDetallesMem.DisableControls;
|
|
|
|
TablaFacturasProveedor.Close;
|
|
TablaDetallesFacturas.Close;
|
|
|
|
// Buscar la fila a tratar si es necesario
|
|
if not EsCadenaVacia(FCodigoFactura) then
|
|
begin
|
|
TablaFacturasProveedor.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
TablaFacturasProveedor.ParamByName('CODIGO').AsString := FCodigoFactura;
|
|
|
|
TablaDetallesFacturas.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
TablaDetallesFacturas.ParamByName('CODIGOFACTURA').AsString := FCodigoFactura;
|
|
end;
|
|
TablaFacturasProveedor.Prepare;
|
|
TablaFacturasProveedor.Open;
|
|
|
|
TablaDetallesFacturas.Prepare;
|
|
TablaDetallesFacturas.Open;
|
|
|
|
TablaDetallesMem.Close;
|
|
TablaDetallesMem.Open;
|
|
|
|
BorrarDetalles;
|
|
CargarDetalles;
|
|
|
|
dmTablaFacturasProveedor.InicializarTablaFacturas(@TablaFacturasProveedor);
|
|
dmTablaFacturasProveedor.InicializarTablaDetalles(@TablaDetallesMem);
|
|
|
|
TablaFacturasProveedor.EnableControls;
|
|
TablaDetallesFacturas.EnableControls;
|
|
TablaDetallesMem.EnableControls;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.CalcularTotalFactura;
|
|
var
|
|
ImporteBaseImponible,
|
|
ImporteDto,
|
|
ImporteIVA,
|
|
ImporteTotal : Double;
|
|
CurBookmark: string;
|
|
begin
|
|
ImporteBaseImponible := 0;
|
|
with TablaDetallesMem do
|
|
begin
|
|
DisableControls;
|
|
CurBookmark := Bookmark;
|
|
try
|
|
First;
|
|
while not EOF do begin
|
|
ImporteBaseImponible := ImporteBaseImponible + FieldByName('PRECIO').AsFloat;
|
|
Next;
|
|
end;
|
|
|
|
ImporteDto := (ImporteBaseImponible * TablaFacturasProveedor.FieldByName('DESCUENTO').AsFloat) / 100;
|
|
ImporteTotal := ImporteBaseImponible - ImporteDto;
|
|
ImporteIVA := (ImporteTotal * TablaFacturasProveedor.FieldByName('IVA').AsFloat) / 100;
|
|
ImporteTotal := ImporteTotal + ImporteIVA;
|
|
|
|
TablaFacturasProveedor.Edit;
|
|
TablaFacturasProveedor.FieldByName('BASEIMPONIBLE').AsFloat := ImporteBaseImponible;
|
|
TablaFacturasProveedor.FieldByName('IMPORTEDESCUENTO').AsFloat := ImporteDto;
|
|
TablaFacturasProveedor.FieldByName('IMPORTEIVA').AsFloat := ImporteIVA;
|
|
TablaFacturasProveedor.FieldByName('IMPORTETOTAL').AsFloat := ImporteTotal;
|
|
finally
|
|
Bookmark := CurBookmark;
|
|
EnableControls;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TfrFacturaProveedor.CancelarAnadir: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
TablaDetallesMem.Close;
|
|
TablaFacturasProveedor.CancelUpdates;
|
|
RollBack;
|
|
TablaFacturasProveedor.CachedUpdates := False;
|
|
TablaFacturasProveedor.Close;
|
|
TablaDetallesFacturas.Close;
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrFacturaProveedor.CancelarEliminar: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
TablaDetallesMem.Close;
|
|
RollBack;
|
|
TablaFacturasProveedor.Close;
|
|
TablaDetallesFacturas.Close;
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrFacturaProveedor.CancelarModificar: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
TablaDetallesMem.Close;
|
|
RollBack;
|
|
TablaFacturasProveedor.Close;
|
|
TablaDetallesFacturas.Close;
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrFacturaProveedor.ComprobarDatos: Boolean;
|
|
var
|
|
Situacion : string;
|
|
CodPedAux : string;
|
|
CodProvPed : string;
|
|
begin
|
|
Result := False;
|
|
|
|
if not (Modo in [Anadir, Modificar]) then
|
|
begin
|
|
Result := True;
|
|
exit;
|
|
end;
|
|
|
|
if EsCadenaVacia(Fecha.DataBinding.Field.AsString) then
|
|
begin
|
|
VerMensaje(msgFacProFaltaFecha);
|
|
Fecha.SetFocus;
|
|
Exit;
|
|
end;
|
|
|
|
if EsCadenaVacia(FechaVencimiento.DataBinding.Field.AsString) then
|
|
begin
|
|
VerMensaje(msgFacProFaltaFechaVto);
|
|
FechaVencimiento.SetFocus;
|
|
Exit;
|
|
end
|
|
else
|
|
if (FechaVencimiento.DataBinding.Field.AsDateTime < Fecha.DataBinding.Field.AsDateTime) then
|
|
begin
|
|
VerMensaje(msgFacProFechaVtoAnterior);
|
|
FechaVencimiento.SetFocus;
|
|
Exit;
|
|
end;
|
|
|
|
if EsCadenaVacia(Nombre.Field.AsString) then
|
|
begin
|
|
VerMensaje(msgFacProFaltaNombreProv);
|
|
Paginas.ActivePage := pagProveedor;
|
|
Nombre.SetFocus;
|
|
Exit;
|
|
end;
|
|
|
|
if EsCadenaVacia(cbxFormaPago.Field.AsString) then
|
|
begin
|
|
VerMensaje(msgFaltaFormaPago);
|
|
cbxFormaPago.SetFocus;
|
|
Exit;
|
|
end;
|
|
|
|
if TablaDetallesMem.IsEmpty then
|
|
begin
|
|
VerMensaje(msgFacProFaltanDetalles);
|
|
Paginas.ActivePage := pagContenido;
|
|
gridDetalles.SetFocus;
|
|
Exit;
|
|
end;
|
|
|
|
with TablaDetallesMem do
|
|
begin
|
|
DisableControls;
|
|
First;
|
|
while not EOF do
|
|
begin
|
|
CodPedAux := FieldByName('CODIGOPEDIDO').AsString;
|
|
// Comprobar la situación del pedido.
|
|
Situacion := UpperCase(dmTablaPedidosProveedor.DarSituacion(EmpresaActiva.Codigo, CodPedAux));
|
|
if not EsCadenaVacia(Situacion) then
|
|
begin
|
|
if (cbxTipo.Field.AsString = 'NORMAL') and (Situacion <> 'TOTALMENTE RECIBIDO') then
|
|
begin
|
|
VerMensajeFmt(msgFacProSitPedInc, [CodPedAux, Situacion, cbxTipo.Field.AsString]);
|
|
EnableControls;
|
|
Exit;
|
|
end;
|
|
|
|
if (cbxTipo.Field.AsString = 'ABONO') and (Situacion <> 'DEVUELTO') then
|
|
begin
|
|
VerMensajeFmt(msgFacProSitPedInc, [CodPedAux, Situacion, cbxTipo.Field.AsString]);
|
|
EnableControls;
|
|
Exit;
|
|
end;
|
|
end;
|
|
|
|
// Comprobar si el proveedor de la factura es el mismo que el proveedor
|
|
// del pedido.
|
|
CodProvPed := FieldByName('CODIGOPROVEEDOR').AsString;
|
|
if (not EsCadenaVacia(CodProvPed)) and (CodProvPed <> CodProveedor.DataBinding.Field.AsString) then
|
|
begin
|
|
VerMensajeFmt(msgFacProPedNoPro, [CodPedAux]);
|
|
EnableControls;
|
|
Exit;
|
|
end;
|
|
Next;
|
|
end;
|
|
EnableControls;
|
|
end;
|
|
|
|
Result := True;
|
|
end;
|
|
|
|
constructor TfrFacturaProveedor.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FCodigoProveedor := NULL;
|
|
FCodigoPedido := NULL;
|
|
|
|
Entidad := entFacturaProveedor;
|
|
ConfigurarFrame(Self, Self.Entidad);
|
|
|
|
BaseDatos := dmBaseDatos.BD;
|
|
|
|
Transaccion := dmBaseDatos.Transaccion;
|
|
|
|
TablaFacturasProveedor := TIBDataSet.Create(Self);
|
|
TablaDetallesFacturas := TIBDataSet.Create(Self);
|
|
TablaDetallesMem := TRxMemoryData.Create(Self);
|
|
|
|
dsFactura.DataSet := TablaFacturasProveedor;
|
|
dsDetallesFacturas.DataSet := TablaDetallesMem;
|
|
|
|
with TablaFacturasProveedor do
|
|
begin
|
|
Database := BaseDatos;
|
|
Transaction := Transaccion;
|
|
SelectSQL.Assign(dmTablaFacturasProveedor.sqlConsultarFactura);
|
|
InsertSQL.Assign(dmTablaFacturasProveedor.sqlInsertarFactura);
|
|
ModifySQL.Assign(dmTablaFacturasProveedor.sqlModificarFactura);
|
|
DeleteSQL.Assign(dmTablaFacturasProveedor.sqlEliminarFactura);
|
|
end;
|
|
|
|
with TablaDetallesFacturas do
|
|
begin
|
|
Database := BaseDatos;
|
|
Transaction := Transaccion;
|
|
SelectSQL.Assign(dmTablaFacturasProveedor.sqlConsultarGridDetalles);
|
|
InsertSQL.Assign(dmTablaFacturasProveedor.sqlInsertarDetalles);
|
|
ModifySQL.Assign(dmTablaFacturasProveedor.sqlModificarDetalles);
|
|
DeleteSQL.Assign(dmTablaFacturasProveedor.sqlEliminarDetalles);
|
|
end;
|
|
|
|
TablaDetallesMem.CopyStructure(TablaDetallesFacturas);
|
|
TablaDetallesMem.FieldByName('CODIGOEMPRESA').Required := False;
|
|
TablaDetallesMem.FieldByName('CODIGOFACTURA').Required := False;
|
|
TablaDetallesMem.FieldByName('NUMCONCEPTO').Required := False;
|
|
|
|
dmTablaFacturasProveedor.InicializarGridDetalles(gridDetalles);
|
|
cbxFormaPago.Items := dmTablaFormasPago.DarFormasPago;
|
|
cbxSituacion.Items := dmTablaFacturasProveedor.DarSituaciones;
|
|
cbxBanco.Items := dmTablaBancos.DarBancos;
|
|
Paginas.ActivePage := pagProveedor;
|
|
end;
|
|
|
|
destructor TfrFacturaProveedor.Destroy;
|
|
begin
|
|
gridDetalles.DataSource := NIL;
|
|
|
|
TablaDetallesMem.Close;
|
|
TablaDetallesMem.Free;
|
|
|
|
TablaFacturasProveedor.Close;
|
|
TablaFacturasProveedor.UnPrepare;
|
|
TablaFacturasProveedor.Free;
|
|
|
|
TablaDetallesFacturas.Close;
|
|
TablaDetallesFacturas.Unprepare;
|
|
TablaDetallesFacturas.Free;
|
|
|
|
inherited;
|
|
end;
|
|
|
|
function TfrFacturaProveedor.EliminarDatos: Boolean;
|
|
begin
|
|
Result := False;
|
|
if (VerMensajePregunta(msgFacProBorrarFacPed) <> mrYes) then
|
|
Exit;
|
|
|
|
try
|
|
NoFacturarPedidos;
|
|
TablaFacturasProveedor.Delete;
|
|
Commit;
|
|
BorrarDetalles;
|
|
TablaFacturasProveedor.Close;
|
|
TablaDetallesFacturas.Close;
|
|
TablaDetallesMem.Close;
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
begin
|
|
case E.IBErrorCode of
|
|
isc_lock_conflict : VerMensajeFmt(msgFacProBloqueada, [Codigo.Field.AsString]);
|
|
else
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.FreeContenido;
|
|
begin
|
|
if (ContenidoModal is TRdxFrameFacturasProveedor) then begin
|
|
CodigoFactura := (ContenidoModal as TRdxFrameFacturasProveedor).CodigoFactura;
|
|
ActivarModo;
|
|
end;
|
|
if (ContenidoModal is TRdxFramePedidosProveedor) then
|
|
CodigoPedido := (ContenidoModal as TRdxFramePedidosProveedor).CodigoPedido;
|
|
if (ContenidoModal is TRdxFrameProveedores) then
|
|
CodigoProveedor := (ContenidoModal as TRdxFrameProveedores).CodigoProveedor;
|
|
inherited FreeContenido;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.GridBotonCodigoPedidoClick(Sender: TObject);
|
|
begin
|
|
if EsCadenaVacia(CodProveedor.DataBinding.Field.AsString) then
|
|
begin
|
|
VerMensaje(msgFacProFaltaNombreProv);
|
|
paginas.ActivePage := pagProveedor;
|
|
CodProveedor.SetFocus;
|
|
Exit;
|
|
end;
|
|
TablaDetallesMem.Edit;
|
|
ModoModal := Facturar;
|
|
ContenidoModal := TfrPedidosProveedores.Create(Self);
|
|
end;
|
|
|
|
function TfrFacturaProveedor.ModificarDatos: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
CalcularTotalFactura;
|
|
TablaFacturasProveedor.Post;
|
|
BorrarDetallesIB;
|
|
SalvarDetalles;
|
|
Commit;
|
|
TablaFacturasProveedor.Close;
|
|
TablaDetallesFacturas.Close;
|
|
TablaDetallesMem.Close;
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.PrecioDetalleSetText(Sender: TField;
|
|
const Text: String);
|
|
begin
|
|
try
|
|
if Length(Text) = 0 then
|
|
Sender.AsString := '0'
|
|
else
|
|
Sender.AsString := Text;
|
|
CalcularTotalFactura;
|
|
except
|
|
on E : EConvertError do
|
|
VerMensaje(msgPrecioNoValido);
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.SetCodigoProveedor(Value: Variant);
|
|
var
|
|
DatosProveedor : TDatosProveedor;
|
|
begin
|
|
if VarIsNull(Value) then
|
|
exit;
|
|
|
|
FCodigoProveedor := Value;
|
|
DatosProveedor := TDatosProveedor.Create;
|
|
try
|
|
DatosProveedor.Codigo := FCodigoProveedor;
|
|
dmTablaProveedores.darDatosProveedor(DatosProveedor);
|
|
CodProveedor.DataBinding.Field.AsString := DatosProveedor.Codigo;
|
|
NIFCIF.Field.AsString := DatosProveedor.Nifcif;
|
|
CodigoCliente.Field.AsString := dmTablaProveedores.darCodigoClienteProveedor(DatosProveedor.Codigo);
|
|
Nombre.Field.AsString := DatosProveedor.Nombre;
|
|
PersonaContacto.Field.AsString := DatosProveedor.PersonaContacto;
|
|
Fax.Field.AsString := DatosProveedor.Fax;
|
|
CalcularTotalFactura;
|
|
finally
|
|
DatosProveedor.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.bSalirClick(Sender: TObject);
|
|
begin
|
|
try
|
|
Rollback;
|
|
CloseFrame;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.bGuardarClick(Sender: TObject);
|
|
begin
|
|
if (RealizarOperacion) then
|
|
CloseFrame;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.bCancelarGuardarClick(Sender: TObject);
|
|
begin
|
|
if (TratarCambios = IDOK) then
|
|
CloseFrame;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.CodigoButtonClick(Sender: TObject);
|
|
begin
|
|
inherited;
|
|
if (TratarCambios = IDCANCEL) then
|
|
exit;
|
|
{ Esto es porque en modo 'Modificar' hacemos un cambio y pulsamos
|
|
este botón se cierra la tabla y si en el frame hijo (el del grid) damos
|
|
a cancelar, FCodigoFactura es NULL y da error al activar modo porque
|
|
no se inicializa los parámetros de la sql. Lo hace BuscarFactura. }
|
|
if not TablaFacturasProveedor.Active then
|
|
BuscarFactura;
|
|
ContenidoModal := TfrFacturasProveedores.Create(Self);
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.SetCodigoPedido(Value: Variant);
|
|
var
|
|
SituacionAux : String;
|
|
FacturadoAux : String;
|
|
DatosPedido : TDatosPedidoProveedor;
|
|
begin
|
|
if EsCadenaVacia(CodProveedor.DataBinding.Field.AsString) then
|
|
raise Exception.Create(msgFacProFaltaNombreProv);
|
|
|
|
if EsCadenaVacia(Value) then
|
|
Exit;
|
|
|
|
FCodigoPedido := Trim(Value);
|
|
if not dmTablaPedidosProveedor.ValidarCodigo(FCodigoPedido) then
|
|
raise Exception.CreateFmt(msgPedCodPedIncorrecto, [FCodigoPedido]);
|
|
|
|
FCodigoPedido := dmTablaPedidosProveedor.FormatearCodigo(FCodigoPedido);
|
|
|
|
DatosPedido := TDatosPedidoProveedor.Create;
|
|
DatosPedido.Codigo := FCodigoPedido;
|
|
DatosPedido.CodigoEmpresa := EmpresaActiva.Codigo;
|
|
try
|
|
if not dmTablaPedidosProveedor.DarDatosPedido(DatosPedido) then
|
|
raise Exception.CreateFmt(msgPedPedProvNoExiste, [FCodigoPedido]);
|
|
|
|
if (CodProveedor.DataBinding.Field.AsString <> DatosPedido.CodigoProveedor) then
|
|
raise Exception.CreateFmt(msgFacProPedNoPro, [DatosPedido.Codigo]);
|
|
|
|
SituacionAux := UpperCase(DatosPedido.Situacion);
|
|
FacturadoAux := UpperCase(DatosPedido.CodigoFactura);
|
|
|
|
if (SituacionAux <> 'TOTALMENTE RECIBIDO') and
|
|
(SituacionAux <> 'DEVUELTO') then
|
|
raise Exception.CreateFmt(msgPedidoNoFacturar, [LowerCase(SituacionAux)]);
|
|
|
|
if not EsCadenaVacia(FacturadoAux) then
|
|
raise Exception.CreateFmt(msgPedYaFacturado, [FCodigoPedido]);
|
|
|
|
if not EsCadenaVacia(FCodigoFactura) then
|
|
begin
|
|
if not dmTablaPedidosProveedor.FacturarPedido(EmpresaActiva.Codigo, FCodigoPedido, FCodigoFactura) then
|
|
raise Exception.CreateFmt(msgFacProErrorFacPed, [FCodigoPedido]);
|
|
end;
|
|
|
|
with TablaDetallesMem do
|
|
begin
|
|
Edit;
|
|
FieldByName('CODIGOPEDIDO').AsString := DatosPedido.Codigo;
|
|
FieldByName('SITUACION').AsString := DatosPedido.Situacion;
|
|
FieldByName('PRECIO').AsString := DatosPedido.ImporteTotal;
|
|
FieldByName('DESCRIPCION').AsString := Format('Pedido a proveedor %s con fecha %s', [DatosPedido.Codigo, DatosPedido.FechaAlta]);
|
|
FieldByName('CODIGOPROVEEDOR').AsString := DatosPedido.CodigoProveedor;
|
|
end;
|
|
CalcularTotalFactura;
|
|
finally
|
|
DatosPedido.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.bAnadirClick(Sender: TObject);
|
|
begin
|
|
try
|
|
with TablaDetallesMem do
|
|
begin
|
|
DisableControls;
|
|
Next;
|
|
if EOF then
|
|
Append
|
|
else
|
|
Insert;
|
|
EnableControls;
|
|
end;
|
|
Paginas.ActivePage := pagContenido;
|
|
gridDetalles.SetFocus;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.bEliminarClick(Sender: TObject);
|
|
var
|
|
CodPedAux : string;
|
|
begin
|
|
if (VerMensajePregunta(msgDeseaBorrar) <> IDYES) then
|
|
Exit;
|
|
|
|
if TablaDetallesMem.RecordCount = 0 then begin
|
|
{ Hacemos un cancel de la tabla por si el registro actual estuviera
|
|
recien creado }
|
|
TablaDetallesMem.Cancel;
|
|
Exit
|
|
end;
|
|
try
|
|
CodPedAux := TablaDetallesMem.FieldByName('CODIGOPEDIDO').AsString;
|
|
if not EsCadenaVacia(CodPedAux) then
|
|
dmTablaPedidosProveedor.NoFacturarPedido(EmpresaActiva.Codigo, CodPedAux);
|
|
TablaDetallesMem.Delete;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
CalcularTotalFactura;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.BorrarDetalles;
|
|
begin
|
|
with TablaDetallesMem do
|
|
begin
|
|
DisableControls;
|
|
EmptyTable;
|
|
EnableControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.CodigoExit(Sender: TObject);
|
|
begin
|
|
inherited;
|
|
if (Modo <> Anadir) or (Visible = false) then
|
|
exit;
|
|
if (Length(Codigo.Text) = 0) then
|
|
Codigo.Field.AsString := dmTablaFacturasProveedor.DarNuevoCodigo;
|
|
if (dmTablaFacturasProveedor.ValidarCodigo(Codigo.Text)) then
|
|
begin
|
|
Codigo.Field.asString := dmTablaFacturasProveedor.FormatearCodigo(Codigo.Text);
|
|
if (dmTablaFacturasProveedor.ExisteCodigo(Codigo.Text)) then begin
|
|
VerMensajeFmt(msgFacProCodFacRepetido, [Codigo.Text]);
|
|
Codigo.SetFocus;
|
|
end;
|
|
end
|
|
else begin
|
|
VerMensajeFmt(msgFacProCodFacIncorrecto, [Codigo.Text]);
|
|
Codigo.SetFocus;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.FechaExit(Sender: TObject);
|
|
begin
|
|
if not (Modo in [Anadir, Modificar]) then
|
|
exit;
|
|
if EsCadenaVacia(Fecha.Text) then
|
|
begin
|
|
VerMensaje(msgFacProFaltaFecha);
|
|
Fecha.DataBinding.Field.AsString := DateToStr(Date);
|
|
Fecha.SetFocus;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.FechaVencimientoExit(Sender: TObject);
|
|
begin
|
|
if not (Modo in [Anadir, Modificar]) then
|
|
exit;
|
|
if EsCadenaVacia(FechaVencimiento.Text) then
|
|
begin
|
|
VerMensaje(msgFacProFaltaFechaVto);
|
|
FechaVencimiento.SetFocus;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.bEliminarTodoClick(Sender: TObject);
|
|
begin
|
|
if (VerMensajePregunta(msgDeseaBorrarTodo) = IDYES) then
|
|
Exit;
|
|
NoFacturarPedidos;
|
|
BorrarDetalles;
|
|
BorrarDetallesIB;
|
|
CalcularTotalFactura;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.BorrarDetallesIB;
|
|
var
|
|
CodPedAux : string;
|
|
begin
|
|
with TablaDetallesFacturas do
|
|
begin
|
|
if IsEmpty then
|
|
Exit;
|
|
DisableControls;
|
|
Last;
|
|
while not BOF do
|
|
begin
|
|
Delete;
|
|
Prior;
|
|
end;
|
|
if not IsEmpty then
|
|
Delete;
|
|
EnableControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.CargarDetalles;
|
|
var
|
|
NumeroCampo : Integer;
|
|
begin
|
|
with TablaDetallesMem do
|
|
begin
|
|
if TablaDetallesFacturas.IsEmpty then
|
|
Exit;
|
|
DisableControls;
|
|
TablaDetallesFacturas.First;
|
|
while not TablaDetallesFacturas.EOF do
|
|
begin
|
|
Append;
|
|
for NumeroCampo := 0 to TablaDetallesFacturas.FieldCount-1 do
|
|
Fields[NumeroCampo].AsString := TablaDetallesFacturas.Fields[NumeroCampo].AsString;
|
|
Post;
|
|
TablaDetallesFacturas.Next;
|
|
end;
|
|
EnableControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.SalvarDetalles;
|
|
var
|
|
NumeroCampo : Integer;
|
|
NumConcepto : Integer;
|
|
begin
|
|
try
|
|
with TablaDetallesMem do
|
|
begin
|
|
if IsEmpty then
|
|
Exit;
|
|
NumConcepto := 0;
|
|
DisableControls;
|
|
First;
|
|
while not EOF do
|
|
begin
|
|
TablaDetallesFacturas.Append;
|
|
for NumeroCampo := 0 to FieldCount-1 do
|
|
begin
|
|
if Fields[NumeroCampo].FieldName = 'CODIGOEMPRESA' then
|
|
TablaDetallesFacturas.Fields[NumeroCampo].AsInteger := EmpresaActiva.Codigo
|
|
else begin
|
|
if Fields[NumeroCampo].FieldName = 'CODIGOFACTURA' then
|
|
TablaDetallesFacturas.Fields[NumeroCampo].AsString := Codigo.Field.AsString
|
|
else
|
|
if Fields[NumeroCampo].FieldName = 'NUMCONCEPTO' then
|
|
TablaDetallesFacturas.Fields[NumeroCampo].AsInteger := NumConcepto
|
|
else
|
|
TablaDetallesFacturas.Fields[NumeroCampo].AsString := Fields[NumeroCampo].AsString;
|
|
end;
|
|
end;
|
|
TablaDetallesFacturas.Post;
|
|
Next;
|
|
NumConcepto := NumConcepto + 1;
|
|
end;
|
|
EnableControls;
|
|
end;
|
|
except
|
|
on E : EIBError do begin
|
|
if E.IBErrorCode = isc_unique_key_violation then
|
|
begin
|
|
TablaDetallesFacturas.Delete;
|
|
TablaDetallesMem.EnableControls;
|
|
end;
|
|
raise Exception.CreateFmt(msgFacProCodPedRepetido, [TablaDetallesMem.FieldByName('CODIGOPEDIDO').AsString]);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TfrFacturaProveedor.NoFacturarPedidos: boolean;
|
|
begin
|
|
Result := True;
|
|
with TablaDetallesMem do
|
|
begin
|
|
DisableControls;
|
|
First;
|
|
while not EOF do
|
|
begin
|
|
if (not EsCadenaVacia(FieldByName('CODIGOPEDIDO').AsString)) and
|
|
(not dmTablaPedidosProveedor.NoFacturarPedido(EmpresaActiva.Codigo, FieldByName('CODIGOPEDIDO').AsString))
|
|
then begin
|
|
Result := False;
|
|
Break;
|
|
end;
|
|
Next;
|
|
end;
|
|
EnableControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.VerModal;
|
|
begin
|
|
if (ContenidoModal is TfrPedidosProveedores) then
|
|
(ContenidoModal as TfrPedidosProveedores).CodigoProveedor := CodProveedor.DataBinding.Field.AsString;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.CodigoPedidoDetalleSetText(Sender: TField;
|
|
const Text: String);
|
|
begin
|
|
CodigoPedido := Text;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.ActivarEventosCampos;
|
|
begin
|
|
with TablaFacturasProveedor do
|
|
begin
|
|
FieldByName('IVA').OnSetText := IVASetText;
|
|
FieldByName('DESCUENTO').OnSetText := DtoSetText;
|
|
end;
|
|
|
|
with TablaDetallesMem do
|
|
begin
|
|
FieldByName('PRECIO').OnSetText := PrecioDetalleSetText;
|
|
FieldByName('CODIGOPEDIDO').OnSetText := CodigoPedidoDetalleSetText;
|
|
AfterDelete := DetalleAfterDelete;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.DetalleAfterDelete(DataSet: TDataSet);
|
|
begin
|
|
CalcularTotalFactura;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.DtoSetText(Sender: TField;
|
|
const Text: String);
|
|
begin
|
|
if EsCadenaVacia(Text) then
|
|
Sender.AsString := '0'
|
|
else begin
|
|
ValidarDto(Text);
|
|
Sender.AsString := Text;
|
|
end;
|
|
CalcularTotalFactura;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.IVASetText(Sender: TField;
|
|
const Text: String);
|
|
begin
|
|
if EsCadenaVacia(Text) then
|
|
Sender.AsString := '0'
|
|
else begin
|
|
ValidarIVA(Text);
|
|
Sender.AsString := Text;
|
|
end;
|
|
CalcularTotalFactura;
|
|
end;
|
|
|
|
function TfrFacturaProveedor.FacturarPedidos: boolean;
|
|
begin
|
|
Result := True;
|
|
with TablaDetallesMem do
|
|
begin
|
|
DisableControls;
|
|
First;
|
|
while not EOF do
|
|
begin
|
|
if (not EsCadenaVacia(FieldByName('CODIGOPEDIDO').AsString)) and
|
|
(not dmTablaPedidosProveedor.FacturarPedido(EmpresaActiva.Codigo, FieldByName('CODIGOPEDIDO').AsString, FCodigoFactura))
|
|
then begin
|
|
Result := False;
|
|
Break;
|
|
end;
|
|
Next;
|
|
end;
|
|
EnableControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.CodProveedorPropertiesButtonClick(
|
|
Sender: TObject; AButtonIndex: Integer);
|
|
begin
|
|
ContenidoModal := TfrProveedores.Create(Self);
|
|
end;
|
|
|
|
procedure TfrFacturaProveedor.CodProveedorPropertiesValidate(
|
|
Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
|
|
var Error: Boolean);
|
|
begin
|
|
if not (Modo in [Anadir, Modificar]) then
|
|
Exit;
|
|
|
|
if EscadenaVacia(DisplayValue) then
|
|
exit;
|
|
|
|
if (dmTablaProveedores.validarCodigo(DisplayValue)) then begin
|
|
//Comprueba que le numero es lo sufucientemente pequeño para ser un entero
|
|
if not EsInteger(DisplayValue) then
|
|
begin
|
|
VerMensajeFmt(msgProCodProvIncorrecto,[DisplayValue]);
|
|
DisplayValue := '0';
|
|
CodProveedor.SetFocus;
|
|
end
|
|
else
|
|
begin
|
|
DisplayValue := dmTablaProveedores.formatearCodigo(DisplayValue);
|
|
if (dmTablaProveedores.existeCodigo(DisplayValue)) then
|
|
CodigoProveedor := DisplayValue
|
|
else begin
|
|
VerMensajeFmt(msgProCodProvNoExiste, [DisplayValue]);
|
|
Paginas.ActivePage := pagProveedor;
|
|
CodProveedor.SetFocus;
|
|
end;
|
|
end;
|
|
end
|
|
else begin
|
|
VerMensajeFmt(msgProCodProvIncorrecto, [DisplayValue]);
|
|
Paginas.ActivePage := pagProveedor;
|
|
CodProveedor.SetFocus;
|
|
end;
|
|
end;
|
|
|
|
end.
|