{ =============================================================================== 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: 05-12-2002 Versión actual: 1.0.3 Fecha versión actual: 02-02-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 21-04-2003 p1. Abonos de facturas de proveedor. 25-08-2003 Al dar de alta una factura, el proveedor debe estar también dado de alta. 01-01-2004 Quitado el botón de la celda de código de contrato. No se pueden meter los códigos a mano. Se eligen cuando se dá a 'Añadir contrato'. Si no es correcto, se elimina. 02-02-2004 Se ha eliminado el atributo SERIE (P8 MULTIEMPRESA) Se ha adaptado a los nuevos contadores =============================================================================== } unit FacturaProveedor; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, RdxMemo, RdxComboBox, RdxFrame, RdxFrameFacturasProveedor, RdxCampos, RdxTitulos, RdxPaneles, RdxBotones, RdxBarras, Grids, DBGrids, RXDBCtrl, Db, ComCtrls, RdxPageControl, RxMemDS, cxMemo, cxDBEdit, cxDropDownEdit, cxCalendar, cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxButtonEdit, AdvPanel, cxSpinEdit, cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox, IBCustomDataSet, Configuracion, DBCtrls, Entidades, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDBData, cxGridLevel, cxClasses, cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, IBQuery, TablaTrimestres, RdxEmpresaActiva, cxDataStorage; type TfrFacturaProveedor = class(TRdxFrameFacturasProveedor) pnlTitulo: TRdxPanelTituloOperacion; pnlCuerpo: TPanel; dsFactura: TDataSource; dsDetallesFacturas: TDataSource; brDoble: TRdxBarraInferior; bGuardar: TRdxBoton; bCancelar: TRdxBoton; brSimple: TRdxBarraInferior; bSalir: TRdxBoton; pnlPaginas: TRdxPanel; paginas: TRdxPagesControl; pagProveedor: TTabSheet; pagContenido: TTabSheet; pnlGridArticulos: TPanel; pnlBarraGrid: TRdxPanel; bAnadir: TRdxBoton; bEliminar: TRdxBoton; bEliminarTodo: TRdxBoton; pnlDatosFactura: TAdvPanel; eCodigoFactura: TLabel; eFechaVto: TLabel; eDescripcion: TLabel; eSituacion: TLabel; eFormaPago: TLabel; eFecha: TLabel; eNumFacProve: TLabel; Codigo: TcxDBButtonEdit; FechaVencimiento: TcxDBDateEdit; Observaciones: TcxDBMemo; FechaFactura: TcxDBDateEdit; Referencia: TcxDBTextEdit; cbxSituacion: TcxDBComboBox; cbxFormaPago: TcxDBComboBox; CodProveedor: TcxDBButtonEdit; NIFCIF: TcxDBTextEdit; Nombre: TcxDBTextEdit; Calle: TcxDBTextEdit; Provincia: TcxDBButtonEdit; Poblacion: TcxDBButtonEdit; Telefono1: TcxDBTextEdit; Movil1: TcxDBTextEdit; PersonaContacto: TcxDBTextEdit; Telefono2: TcxDBTextEdit; Movil2: TcxDBTextEdit; Piso: TcxDBTextEdit; Numero: TcxDBTextEdit; CodigoPostal: TcxDBTextEdit; Fax: TcxDBTextEdit; ePersona: TLabel; eMovil1: TLabel; eTelefono1: TLabel; ePoblacion: TLabel; eProvincia: TLabel; eDireccion: TLabel; eNombre: TLabel; eCodigo: TLabel; eNIFCIF: TLabel; eNumero: TLabel; eCodigoPostal: TLabel; eFax: TLabel; ePiso: TLabel; eTelefono2: TLabel; eMovil2: TLabel; Label1: TLabel; dsTiposFactura: TDataSource; TipoFactura: TcxDBLookupComboBox; pnlImportes: TAdvPanel; Panel1: TPanel; RdxPanel1: TRdxPanel; Label5: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Shape2: TShape; BasImp: TcxDBTextEdit; ImporteDescuento: TcxDBTextEdit; ImporteIVA: TcxDBTextEdit; ImporteTotal: TcxDBTextEdit; Panel2: TPanel; Label7: TLabel; Label8: TLabel; Label2: TLabel; Descuento: TcxDBTextEdit; IVA: TcxDBTextEdit; BaseImponible: TcxDBTextEdit; gridDetalles: TcxGrid; VistaDetalles: TcxGridDBTableView; VistaPropiedades2: TcxGridDBTableView; gridDetallesLevel1: TcxGridLevel; TablaDetallesMem: TRxMemoryData; TablaDetallesMemCodigoContrato: TStringField; TablaDetallesMemCodigoInstalador: TStringField; TablaDetallesMemNombre: TStringField; TablaDetallesMemImporte: TFloatField; dsContratos: TDataSource; TablaContratos: TIBQuery; TablaDetallesMemCODIGOEMPRESA: TIntegerField; eTrimestre: TLabel; cbxTrimestres: TcxComboBox; eTrimestreCerrado: TLabel; procedure bSalirClick(Sender: TObject); procedure bGuardarClick(Sender: TObject); procedure bCancelarGuardarClick(Sender: TObject); procedure CodProveedorExit(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 CodigoPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure CodProveedorPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure ProvinciaPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure PoblacionPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); private FListaTrimestres: TListaTrimestres; FCodigoProvincia : Variant; FCodigoPoblacion : Variant; FCodigoProveedor : Variant; FCodigoContrato : Variant; FTablaTiposFactura : TIBDataSet; procedure ActivarEventosCampos; procedure DesactivarEventosCampos; procedure CalcularTotalFactura; procedure BorrarDetalles; procedure SalvarDetalles; procedure CargarDetalles; procedure BorrarDetallesIB; procedure GridBotonCodigoContratoClick(Sender: TObject; AButtonIndex: Integer); procedure DetallesNewRecord(DataSet: TDataSet); procedure DetalleAfterDelete (DataSet: TDataSet); procedure IVASetText(Sender: TField; const Text: String); procedure BaseImponibleSetText(Sender: TField; const Text: String); procedure DtoSetText(Sender: TField; const Text: String); procedure ProvinciaSetText(Sender: TField; const Text: String); procedure CodigoContratoDetalleSetText(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 SetCodigoProvincia (Value : Variant); virtual; procedure SetCodigoPoblacion (Value : Variant); virtual; procedure SetCodigoProveedor (Value : Variant); procedure SetCodigoContrato (Value : Variant); procedure FreeContenido; override; procedure BuscarFactura; override; procedure VerModal; override; public property CodigoProvincia : Variant read FCodigoProvincia write SetCodigoProvincia; property CodigoPoblacion : Variant read FCodigoPoblacion write SetCodigoPoblacion; property CodigoProveedor : Variant read FCodigoProveedor write SetCodigoProveedor; property CodigoContrato : Variant read FCodigoContrato write SetCodigoContrato; constructor Create (AOwner : TComponent); override; destructor Destroy; override; published property TablaFacturasProveedor; property TablaDetallesFacturas; property CodigoFactura; procedure GridBotonCodigoPedidoClick(Sender: TObject); procedure PrecioDetalleSetText(Sender: TField; const Text: String); end; var frFacturaProveedor: TfrFacturaProveedor; implementation uses BaseDatos, TablaFacturasProveedor, IB, Mensajes, StrFunc, Variants, TablaFormasPago, NumFunc, RdxFramePoblaciones, FacturasProveedores, Proveedores, TablaProveedores, RdxFrameProvincias, RdxFrameProveedores, IBErrorCodes, Excepciones, Constantes, RdxFrameContratos, TablaProvincias, Provincias, Poblaciones, TablaPoblaciones, Literales, TablaContratos, ContratosClientes, TablaEmpresas; {$R *.DFM} { TfrFacturaProveedor } procedure TfrFacturaProveedor.ActivarModoAnadir; var CodNuevo : Variant; begin case Entidad of entFacturaProveedor : pnlDatosFactura.Caption.Text := 'Datos de la ' + CaptionsEntidades[entFacturaProveedor]; entAbonoProveedor : pnlDatosFactura.Caption.Text := 'Datos del ' + CaptionsEntidades[entAbonoProveedor]; end; dsFactura.AutoEdit := True; dsDetallesFacturas.AutoEdit := True; pnlBarraGrid.Visible := True; Codigo.Properties.Buttons[0].Visible := False; Codigo.Properties.ReadOnly := False; CodProveedor.Properties.Buttons[0].Visible := True; Poblacion.Properties.Buttons[0].Visible := True; Provincia.Properties.Buttons[0].Visible := True; cbxTrimestres.Enabled := True; cbxTrimestres.Properties.ReadOnly := False; ActivarEdicionGridDetalles(gridDetalles); try CodNuevo := dmTablaFacturasProveedor.DarNuevoCodigo; with TablaFacturasProveedor do begin Close; Prepare; Open; FieldByName('PROVINCIA').OnSetText := ProvinciaSetText; Insert; Codigo.DataBinding.Field.AsString := CodNuevo; FechaFactura.DataBinding.Field.AsString := DateToStr(Date); FieldByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; FieldByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha; FieldByName('FECHAVENCIMIENTO').AsDateTime := dmBaseDatos.DarFecha; FieldByName('USUARIO').AsString := dmBaseDatos.Usuario; FieldByName('IVA').AsString := CTE_IVA_DEFECTO; cbxSituacion.DataBinding.Field.AsString := cbxSituacion.Properties.Items[0]; end; with TablaDetallesFacturas do begin Close; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Params.ByName('CODIGOFACTURA').AsString := CodNuevo; Prepare; Open; end; TablaContratos.Close; TablaContratos.Open; with TablaDetallesMem do begin Close; Open; end; dmTablaFacturasProveedor.InicializarTablaFacturas(@TablaFacturasProveedor); dmTablaFacturasProveedor.InicializarTablaDetalles(@TablaDetallesMem); ActivarEventosCampos; Visible := True; FechaFactura.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrFacturaProveedor.ActivarModoConsultar; var liResultado: Integer; begin dsFactura.AutoEdit := False; dsDetallesFacturas.AutoEdit := False; pnlBarraGrid.Visible := False; Codigo.Properties.Buttons[0].Visible := True; CodProveedor.Properties.Buttons[0].Visible := False; Poblacion.Properties.Buttons[0].Visible := False; Provincia.Properties.Buttons[0].Visible := False; DesactivarEdicionGridDetalles(gridDetalles); try with TablaFacturasProveedor do begin Prepare; Open; liResultado := FListaTrimestres.getNumItem(FieldByName('CODIGOTRIMESTRE').AsString); if (liResultado = -1) then begin cbxTrimestres.EditText := dmTablaTrimestres.darDescripcionCompletaTrimestre(FieldByName('CODIGOTRIMESTRE').AsString); cbxTrimestres.Enabled := False; cbxTrimestres.Properties.ReadOnly := True; eTrimestreCerrado.Visible := True; end else begin cbxTrimestres.ItemIndex := liResultado; cbxTrimestres.Enabled := True; cbxTrimestres.Properties.ReadOnly := True; eTrimestreCerrado.Visible := False; end; if RecordCount = 0 then begin VerMensajeFmt(msgProvNoExisteFacProv, [CodigoFactura]); CloseFrame; Exit; end; Cancel; end; with TablaDetallesFacturas do begin Close; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Params.ByName('CODIGOFACTURA').AsString := CodigoFactura; Prepare; Open; Cancel; end; TablaContratos.Close; TablaContratos.Open; TablaDetallesMem.Close; TablaDetallesMem.Open; CargarDetalles; dmTablaFacturasProveedor.InicializarTablaFacturas(@TablaFacturasProveedor); dmTablaFacturasProveedor.InicializarTablaDetalles(@TablaDetallesMem); Visible := True; FechaFactura.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrFacturaProveedor.ActivarModoEliminar; var liResultado: Integer; begin dsFactura.AutoEdit := False; dsDetallesFacturas.AutoEdit := False; pnlBarraGrid.Visible := False; Codigo.Properties.Buttons[0].Visible := True; CodProveedor.Properties.Buttons[0].Visible := False; Poblacion.Properties.Buttons[0].Visible := False; Provincia.Properties.Buttons[0].Visible := False; DesactivarEdicionGridDetalles(gridDetalles); try with TablaFacturasProveedor do begin Prepare; Open; liResultado := FListaTrimestres.getNumItem(FieldByName('CODIGOTRIMESTRE').AsString); if (liResultado = -1) then begin cbxTrimestres.EditText := dmTablaTrimestres.darDescripcionCompletaTrimestre(FieldByName('CODIGOTRIMESTRE').AsString); cbxTrimestres.Enabled := False; cbxTrimestres.Properties.ReadOnly := True; eTrimestreCerrado.Visible := True; end else begin cbxTrimestres.ItemIndex := liResultado; cbxTrimestres.Enabled := True; cbxTrimestres.Properties.ReadOnly := True; eTrimestreCerrado.Visible := False; end; if RecordCount = 0 then begin VerMensajeFmt(msgProvNoExisteFacProv, [CodigoFactura]); CancelarEliminar; CloseFrame; Exit; end; Cancel; end; with TablaDetallesFacturas do begin Close; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Params.ByName('CODIGOFACTURA').AsString := CodigoFactura; Prepare; Open; Cancel; end; TablaContratos.Close; TablaContratos.Open; TablaDetallesMem.Close; TablaDetallesMem.Open; CargarDetalles; dmTablaFacturasProveedor.InicializarTablaFacturas(@TablaFacturasProveedor); dmTablaFacturasProveedor.InicializarTablaDetalles(@TablaDetallesMem); Visible := True; FechaFactura.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrFacturaProveedor.ActivarModoModificar; var liResultado: Integer; begin dsFactura.AutoEdit := True; dsDetallesFacturas.AutoEdit := True; pnlBarraGrid.Visible := True; Codigo.Properties.Buttons[0].Visible := True; Codigo.Properties.ReadOnly := True; CodProveedor.Properties.Buttons[0].Visible := True; Poblacion.Properties.Buttons[0].Visible := True; Provincia.Properties.Buttons[0].Visible := True; ActivarEdicionGridDetalles(gridDetalles); try { Antes de aplicar la caché hay que asegurarse de que la tabla está cerrada. } with TablaFacturasProveedor do begin Prepare; Open; liResultado := FListaTrimestres.getNumItem(FieldByName('CODIGOTRIMESTRE').AsString); if (liResultado = -1) then begin cbxTrimestres.EditText := dmTablaTrimestres.darDescripcionCompletaTrimestre(FieldByName('CODIGOTRIMESTRE').AsString); cbxTrimestres.Enabled := False; cbxTrimestres.Properties.ReadOnly := True; eTrimestreCerrado.Visible := True; end else begin cbxTrimestres.ItemIndex := liResultado; cbxTrimestres.Enabled := True; cbxTrimestres.Properties.ReadOnly := False; eTrimestreCerrado.Visible := False; end; FieldByName('PROVINCIA').OnSetText := ProvinciaSetText; if RecordCount = 0 then begin VerMensajeFmt(msgProvNoExisteFacProv, [CodigoFactura]); CancelarModificar; CloseFrame; Exit; end; Edit; Post; Edit; end; with TablaDetallesFacturas do begin Close; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Params.ByName('CODIGOFACTURA').AsString := CodigoFactura; Prepare; Open; end; TablaContratos.Close; TablaContratos.Open; TablaDetallesMem.Close; TablaDetallesMem.Open; CargarDetalles; ActivarEventosCampos; dmTablaFacturasProveedor.InicializarTablaFacturas(@TablaFacturasProveedor); dmTablaFacturasProveedor.InicializarTablaDetalles(@TablaDetallesMem); CalcularTotalFactura; ActivarEventosCampos; Visible := True; FechaFactura.SetFocus; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : begin VerMensajeFmt(msgProvFacProvBloqueada, [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; case Entidad of entFacturaProveedor : TablaFacturasProveedor.FieldByName('CLASEFACTURA').AsString := CTE_CF_FACTURA; entAbonoProveedor : TablaFacturasProveedor.FieldByName('CLASEFACTURA').AsString := CTE_CF_ABONO; end; TablaFacturasProveedor.FieldByName('CODIGOTRIMESTRE').AsString := dmTablaTrimestres.darCodigoTrimestre(TablaFacturasProveedor.FieldByName('FECHAFACTURA').AsDateTime); //FListaTrimestres.getCodItem(cbxTrimestres.ItemIndex); TablaFacturasProveedor.Post; BorrarDetallesIB; SalvarDetalles; dmTablaFacturasProveedor.IncrementarCodigo; Commit; FCodigoFactura := TablaFacturasProveedor.FieldByName('CODIGO').AsString; TablaFacturasProveedor.Close; TablaDetallesFacturas.Close; TablaDetallesMem.Close; Result := True; except on E : EIBError do begin if E.IBErrorCode = isc_unique_key_violation then begin VerMensajeFmt(msgProvCodFacRepetido, [Codigo.DataBinding.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; DesactivarEventosCampos; TablaFacturasProveedor.Close; TablaDetallesFacturas.Close; FTablaTiposFactura.Close; TablaContratos.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; TablaContratos.Open; with FTablaTiposFactura do begin Close; Prepare; Open; end; TablaDetallesFacturas.Prepare; TablaDetallesFacturas.Open; TablaDetallesMem.Close; TablaDetallesMem.Open; BorrarDetalles; CargarDetalles; dmTablaFacturasProveedor.InicializarTablaFacturas(@TablaFacturasProveedor); dmTablaFacturasProveedor.InicializarTablaDetalles(@TablaDetallesMem); if UpperCase(TablaFacturasProveedor.FieldByName('CLASEFACTURA').AsString) = CTE_CF_FACTURA then begin pnlDatosFactura.Caption.Text := 'Datos de la ' + CaptionsEntidades[entFacturaProveedor]; Entidad := entFacturaProveedor; end else begin pnlDatosFactura.Caption.Text := 'Datos del ' + CaptionsEntidades[entAbonoProveedor]; Entidad := entAbonoProveedor; end; ActivarEventosCampos; 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; begin with TablaFacturasProveedor do begin ImporteBaseImponible := FieldByName('BASEIMPONIBLE').AsFloat; ImporteDto := (ImporteBaseImponible * FieldByName('DESCUENTO').AsFloat) / 100; ImporteTotal := ImporteBaseImponible - ImporteDto; ImporteIVA := (ImporteTotal * FieldByName('IVA').AsFloat) / 100; ImporteTotal := ImporteTotal + ImporteIVA; Edit; FieldByName('IMPORTEDESCUENTO').AsFloat := ImporteDto; FieldByName('IMPORTEIVA').AsFloat := ImporteIVA; FieldByName('IMPORTETOTAL').AsFloat := ImporteTotal; end; end; function TfrFacturaProveedor.CancelarAnadir: Boolean; begin Result := False; try RollBack; TablaFacturasProveedor.Close; TablaDetallesFacturas.Close; TablaDetallesMem.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 RollBack; TablaFacturasProveedor.Close; TablaDetallesFacturas.Close; TablaDetallesMem.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 RollBack; TablaFacturasProveedor.Close; TablaDetallesFacturas.Close; TablaDetallesMem.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(TipoFactura.DataBinding.Field.AsString) then begin VerMensaje(msgProvFaltaTipoFac); TipoFactura.SetFocus; Exit; end; if EsCadenaVacia(FechaFactura.DataBinding.Field.AsString) then begin VerMensaje(msgProvFaltaFechaAltaFac); FechaFactura.SetFocus; Exit; end; if EsCadenaVacia(FechaVencimiento.DataBinding.Field.AsString) then begin VerMensaje(msgProvFaltaFechaVtoFac); FechaVencimiento.SetFocus; Exit; end else if (FechaVencimiento.DataBinding.Field.AsDateTime < FechaFactura.DataBinding.Field.AsDateTime) then begin VerMensaje(msgProvFechaVtoAnteriorFac); FechaVencimiento.SetFocus; Exit; end; if Modo = Anadir then begin if EsCadenaVacia(CodProveedor.DataBinding.Field.AsString) then begin VerMensaje(msgProvFaltaCodProv); Paginas.ActivePageIndex := 0; CodProveedor.SetFocus; Exit; end end else begin if EsCadenaVacia(Nombre.DataBinding.Field.AsString) then begin VerMensaje(msgProvFaltaNombreProvFac); Paginas.ActivePage := pagProveedor; Nombre.SetFocus; Exit; end; end; Result := True; end; constructor TfrFacturaProveedor.Create(AOwner: TComponent); begin inherited Create(AOwner); Entidad := entFacturaProveedor; FCodigoProvincia := NULL; FCodigoPoblacion := NULL; FCodigoProveedor := NULL; FCodigoContrato := NULL; BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaFacturasProveedor := TIBDataSet.Create(Self); TablaDetallesFacturas := TIBDataSet.Create(Self); FTablaTiposFactura := TIBDataSet.Create(Self); dsFactura.DataSet := TablaFacturasProveedor; dsTiposFactura.DataSet := FTablaTiposFactura; 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 FTablaTiposFactura do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaFacturasProveedor.sqlConsultarTiposFactura); 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; with TablaContratos do begin Database := BaseDatos; Transaction := Transaccion; end; {TablaDetallesMem.CopyStructure(TablaDetallesFacturas); TablaDetallesMem.FieldByName('CODIGOFACTURA').Required := False; TablaDetallesMem.FieldByName('CODIGOCONTRATO').Required := False;} FListaTrimestres := TListaTrimestres.Create(tlcTriAbiertos); cbxTrimestres.ItemIndex := FListaTrimestres.cargarLista(cbxTrimestres.Properties.Items); dmTablaFacturasProveedor.InicializarGridDetalles(VistaDetalles); cbxFormaPago.Properties.Items := dmTablaFormasPago.DarFormasPago; cbxSituacion.Properties.Items := dmTablaFacturasProveedor.DarSituaciones; Paginas.ActivePage := pagProveedor; end; destructor TfrFacturaProveedor.Destroy; begin VistaDetalles.DataController.DataSource := NIL; TablaContratos.Close; TablaDetallesMem.Close; TablaFacturasProveedor.Close; TablaFacturasProveedor.UnPrepare; TablaFacturasProveedor.Free; TablaDetallesFacturas.Close; TablaDetallesFacturas.UnPrepare; TablaDetallesFacturas.Free; FTablaTiposFactura.Close; FTablaTiposFactura.UnPrepare; FTablaTiposFactura.Free; FListaTrimestres.Free; FListaTrimestres := Nil; inherited; end; function TfrFacturaProveedor.EliminarDatos: Boolean; begin Result := False; try TablaFacturasProveedor.Delete; Commit; TablaFacturasProveedor.Close; TablaDetallesFacturas.Close; TablaDetallesMem.Close; Result := True; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : VerMensajeFmt(msgProvFacProvBloqueada, [Codigo.DataBinding.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 TRdxFrameProvincias) then CodigoProvincia := (ContenidoModal as TRdxFrameProvincias).CodigoProvincia; if (ContenidoModal is TRdxFramePoblaciones) then begin CodigoProvincia := (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia; CodigoPoblacion := (ContenidoModal as TRdxFramePoblaciones).CodigoPoblacion; end; if (ContenidoModal is TRdxFrameProveedores) then CodigoProveedor := (ContenidoModal as TRdxFrameProveedores).CodigoProveedor; if (ContenidoModal is TRdxFrameContratos) then CodigoContrato := (ContenidoModal as TRdxFrameContratos).CodigoContrato; inherited FreeContenido; end; procedure TfrFacturaProveedor.GridBotonCodigoPedidoClick(Sender: TObject); begin { if EsCadenaVacia(CodProveedor.DataBinding.Field.AsString) then begin VerMensaje(msgProvFaltaNombreProvFac); paginas.ActivePage := pagProveedor; CodProveedor.SetFocus; Exit; end; TablaDetallesMem.Edit; ModoModal := Facturar; ContenidoModal := TfrPedidosProveedores.Create(Self);} end; function TfrFacturaProveedor.ModificarDatos: Boolean; begin Result := False; try // if (cbxTrimestres.Enabled) then // TablaFacturasProveedor.FieldByName('CODIGOTRIMESTRE').AsString := FListaTrimestres.getCodItem(cbxTrimestres.ItemIndex); TablaFacturasProveedor.FieldByName('CODIGOTRIMESTRE').AsString := dmTablaTrimestres.darCodigoTrimestre(TablaFacturasProveedor.FieldByName('FECHAFACTURA').AsDateTime); 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(msgProvPrecioNoValido); on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrFacturaProveedor.SetCodigoProveedor(Value: Variant); var DatosProveedor : TDatosProveedor; begin if EsCadenaVacia(Value) then exit; FCodigoProveedor := Value; DatosProveedor := TDatosProveedor.Create(FCodigoProveedor); try CodProveedor.DataBinding.Field.AsString := DatosProveedor.Codigo; NIFCIF.DataBinding.Field.AsString := DatosProveedor.Nifcif; Nombre.DataBinding.Field.AsString := DatosProveedor.Nombre; Calle.DataBinding.Field.AsString := DatosProveedor.Calle; Numero.DataBinding.Field.AsString := DatosProveedor.Numero; Piso.DataBinding.Field.AsString := DatosProveedor.Piso; Provincia.DataBinding.Field.AsString := DatosProveedor.Provincia; Poblacion.DataBinding.Field.AsString := DatosProveedor.Poblacion; CodigoPostal.DataBinding.Field.AsString := DatosProveedor.CodigoPostal; Telefono1.DataBinding.Field.AsString := DatosProveedor.Telefono1; Telefono2.DataBinding.Field.AsString := DatosProveedor.Telefono2; Movil1.DataBinding.Field.AsString := DatosProveedor.Movil1; Movil2.DataBinding.Field.AsString := DatosProveedor.Movil2; Fax.DataBinding.Field.AsString := DatosProveedor.Fax; PersonaContacto.DataBinding.Field.AsString := DatosProveedor.PersonaContacto; 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.SetCodigoContrato(Value: Variant); var CodigoAux : String; FDetallesBookmark : string; begin if (EsCadenaVacia(Value)) then begin FCodigoContrato := CodigoAux; Exit; end; CodigoAux := Trim(Value); if (dmTablaContratos.ValidarCodigo(CodigoAux)) then begin CodigoAux := dmTablaContratos.FormatearCodigo(CodigoAux); if not (dmTablaContratos.ExisteCodigo(CodigoAux)) then raise Exception.CreateFmt(msgCliCodConNoExiste, [CodigoAux]); end else begin raise Exception.CreateFmt(msgCliCodConIncorrecto, [CodigoAux]); Exit; end; // Hay que comprobar si el contrato elegido ya está en la lista. with TablaDetallesMem do begin Edit; FieldByName('CODIGOCONTRATO').AsString := '-'; Post; FDetallesBookmark := Bookmark; DisableControls; First; while not EOF do begin if FieldByName('CODIGOCONTRATO').AsString = CodigoAux then begin EnableControls; Bookmark := FDetallesBookmark; Delete; VerMensajeFmt(msgProvContratoRepetido, [CodigoAux]); Exit; end else Next; end; EnableControls; Bookmark := FDetallesBookmark; end; FCodigoContrato := CodigoAux; with TablaDetallesMem do begin Edit; FieldByName('CODIGOCONTRATO').AsString := FCodigoContrato; end; end; procedure TfrFacturaProveedor.CodProveedorExit(Sender: TObject); begin if not (Modo in [Anadir, Modificar]) then Exit; if (Length(CodProveedor.Text) = 0) then exit; if (dmTablaProveedores.validarCodigo(CodProveedor.Text)) then begin CodProveedor.DataBinding.Field.AsString := dmTablaProveedores.formatearCodigo(CodProveedor.Text); if (dmTablaProveedores.existeCodigo(CodProveedor.Text)) then CodigoProveedor := CodProveedor.Text else begin VerMensajeFmt(msgProvCodProvNoExiste, [CodProveedor.Text]); Paginas.ActivePage := pagProveedor; CodProveedor.SetFocus; end; end else begin VerMensajeFmt(msgProvCodProvIncorrecto, [CodProveedor.Text]); Paginas.ActivePage := pagProveedor; CodProveedor.SetFocus; end; end; procedure TfrFacturaProveedor.bAnadirClick(Sender: TObject); begin try with TablaDetallesMem do begin DisableControls; Next; if EOF then Append else begin Prior; Insert; end; EnableControls; GridBotonCodigoContratoClick(Self, 0); 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); 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 TablaDetallesMem.Delete; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrFacturaProveedor.BorrarDetalles; begin with TablaDetallesMem do begin DisableControls; EmptyTable; EnableControls; end; end; procedure TfrFacturaProveedor.CodigoExit(Sender: TObject); begin if (Modo <> Anadir) or (Visible = false) then Exit; if not EsCadenaVacia(Codigo.Text) then begin if (dmTablaFacturasProveedor.validarCodigo(Codigo.Text)) then begin Codigo.DataBinding.Field.AsString := dmTablaFacturasProveedor.FormatearCodigo(Codigo.Text); if (dmTablaFacturasProveedor.ExisteCodigo(Codigo.Text)) then begin VerMensajeFmt(msgProvCodFacRepetido, [Codigo.Text]); Codigo.SetFocus; end; end else begin VerMensajeFmt(msgProvCodFacIncorrecto, [Codigo.Text]); Codigo.SetFocus; end end else Codigo.DataBinding.Field.AsString := dmTablaFacturasProveedor.darNuevoCodigo; end; procedure TfrFacturaProveedor.FechaExit(Sender: TObject); begin if not (Modo in [Anadir, Modificar]) then exit; if EsCadenaVacia(FechaFactura.Text) then begin VerMensaje(msgProvFaltaFechaAltaFac); FechaFactura.DataBinding.Field.AsString := DateToStr(Date); FechaFactura.SetFocus; end; end; procedure TfrFacturaProveedor.FechaVencimientoExit(Sender: TObject); begin if not (Modo in [Anadir, Modificar]) then exit; if EsCadenaVacia(FechaVencimiento.Text) then begin VerMensaje(msgProvFaltaFechaVtoFac); FechaVencimiento.SetFocus; end; end; procedure TfrFacturaProveedor.bEliminarTodoClick(Sender: TObject); begin if (VerMensajePregunta(msgDeseaBorrarTodo) <> IDYES) then Exit; BorrarDetalles; 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; begin with TablaDetallesMem do begin if TablaDetallesFacturas.IsEmpty then Exit; DisableControls; TablaDetallesFacturas.First; while not TablaDetallesFacturas.EOF do begin Append; FieldByName('CODIGOEMPRESA').AsInteger := TablaDetallesFacturas.FieldByName('CODIGOEMPRESA').AsInteger; FieldByName('CODIGOFACTURA').AsString := TablaDetallesFacturas.FieldByName('CODIGOFACTURA').AsString; FieldByName('CODIGOCONTRATO').AsString := TablaDetallesFacturas.FieldByName('CODIGOCONTRATO').AsString; FieldByName('IMPORTE').AsFloat := TablaDetallesFacturas.FieldByName('IMPORTE').AsFloat; Post; TablaDetallesFacturas.Next; end; EnableControls; end; end; procedure TfrFacturaProveedor.SalvarDetalles; begin try with TablaDetallesMem do begin if IsEmpty then Exit; DisableControls; First; while not EOF do begin TablaDetallesFacturas.Append; TablaDetallesFacturas.FieldByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; TablaDetallesFacturas.FieldByName('CODIGOFACTURA').AsString := Codigo.DataBinding.Field.AsString; TablaDetallesFacturas.FieldByName('CODIGOCONTRATO').AsString := FieldByName('CODIGOCONTRATO').AsString; TablaDetallesFacturas.FieldByName('IMPORTE').AsFloat := FieldByName('IMPORTE').AsFloat; TablaDetallesFacturas.Post; Next; end; EnableControls; end; except on E : EIBError do begin if E.IBErrorCode = isc_unique_key_violation then begin TablaDetallesFacturas.Delete; TablaDetallesMem.EnableControls; raise Exception.CreateFmt(msgCodPedRepetido, [TablaDetallesMem.FieldByName('CODIGOPEDIDO').AsString]); end else raise EIBError.Create(E.SQLCode, E.IBErrorCode, E.Message); end; end; end; procedure TfrFacturaProveedor.VerModal; begin if (ContenidoModal is TRdxFrameProveedores) then (ContenidoModal as TRdxFrameProveedores).CodigoProveedor := CodigoProveedor; if (ContenidoModal is TRdxFramePoblaciones) then (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia := CodigoProvincia; inherited; end; procedure TfrFacturaProveedor.ActivarEventosCampos; begin with TablaFacturasProveedor do begin FieldByName('IVA').OnSetText := IVASetText; FieldByName('DESCUENTO').OnSetText := DtoSetText; FieldByName('BASEIMPONIBLE').OnSetText := BaseImponibleSetText; end; with TablaDetallesMem do begin FieldByName('CODIGOCONTRATO').OnSetText := CodigoContratoDetalleSetText; OnNewRecord := DetallesNewRecord; end; {with VistaDetalles do begin TcxButtonEditProperties(GetColumnByFieldName('CODIGOCONTRATO').Properties).OnButtonClick := GridBotonCodigoContratoClick; 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; procedure TfrFacturaProveedor.SetCodigoPoblacion(Value: Variant); begin if (not EsCadenaVacia(Value)) then begin FCodigoPoblacion := Value; Poblacion.DataBinding.Field.AsString := dmTablaPoblaciones.darNombrePoblacion(FCodigoProvincia, FCodigoPoblacion); end; end; procedure TfrFacturaProveedor.SetCodigoProvincia(Value: Variant); begin if (not EsCadenaVacia(Value)) then begin FCodigoProvincia := Value; Provincia.DataBinding.Field.AsString := dmTablaProvincias.DarNombreProvincia(FCodigoProvincia); end; end; procedure TfrFacturaProveedor.ProvinciaSetText(Sender: TField; const Text: String); begin FCodigoProvincia := dmTablaProvincias.darCodigoProvincia(Text); Sender.AsString := Text; end; procedure TfrFacturaProveedor.CodigoPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); begin 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.CodProveedorPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin ContenidoModal := TfrProveedores.Create(Self); end; procedure TfrFacturaProveedor.ProvinciaPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin CaptionModal := msgListaProvincias; WidthModal := 280; HeightModal := 460; ContenidoModal := TfrProvincias.Create(Self); end; procedure TfrFacturaProveedor.PoblacionPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin if EsCadenaVacia(CodigoProvincia) then begin VerMensaje(msgSinProvincia); Paginas.ActivePageIndex := 0; Provincia.SetFocus; Exit; end; CaptionModal := Format(msgListaPoblaciones, [dmTablaProvincias.darNombreProvincia(CodigoProvincia)]); WidthModal := 280; HeightModal := 460; ContenidoModal := TfrPoblaciones.Create(Self); end; procedure TfrFacturaProveedor.BaseImponibleSetText(Sender: TField; const Text: String); begin if EsCadenaVacia(Text) then begin Sender.AsString := '0'; exit; end; if Entidad = entAbonoProveedor then begin try if StrToFloat(Text) > 0 then begin VerMensaje (msgImporteNegativo); Sender.AsFloat := (-1) * StrToFloat(Text) end else Sender.AsString := Text; except on E : EConvertError do begin Sender.AsString := '0' end; end; end else Sender.AsString := Text; CalcularTotalFactura; end; procedure TfrFacturaProveedor.DetallesNewRecord(DataSet: TDataSet); begin DataSet.FieldByName('CODIGOFACTURA').AsString := Codigo.DataBinding.Field.AsString; end; procedure TfrFacturaProveedor.DesactivarEventosCampos; begin with TablaFacturasProveedor do begin if FindField('IVA') <> NIL then FieldByName('IVA').OnSetText := NIL; if FindField('DESCUENTO') <> NIL then FieldByName('DESCUENTO').OnSetText := NIL; if FindField('BASEIMPONIBLE') <> NIL then FieldByName('BASEIMPONIBLE').OnSetText := NIL; end; with TablaDetallesMem do begin if FindField('CODIGOCONTRATO') <> NIL then FieldByName('CODIGOCONTRATO').OnSetText := NIL; AfterInsert := NIL; end; end; procedure TfrFacturaProveedor.CodigoContratoDetalleSetText(Sender: TField; const Text: String); begin CodigoContrato := Text; end; procedure TfrFacturaProveedor.GridBotonCodigoContratoClick(Sender: TObject; AButtonIndex: Integer); begin TablaDetallesMem.Edit; ContenidoModal := TfrContratosClientes.Create(Self); gridDetalles.SetFocus; end; end.