{ =============================================================================== 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: 25-12-2002 Versión actual: 1.0.1 Fecha versión actual: 02-02-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 02-02-2004 Se ha eliminado el atributo SERIE (P8 MULTIEMPRESA) Se ha adaptado a los nuevos contadores =============================================================================== } unit FacturasClientes; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, RdxFrameFacturasCliente, Grids, DBGrids, ComCtrls, RdxBotones, ToolWin, ExtCtrls, Menus, RXDBCtrl, Configuracion, RdxFrame, Db, RdxPaneles, RdxBarras, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxEdit, cxDBData, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, am2000menuitem, am2000popupmenu, am2000, cxContainer, cxTextEdit, cxMaskEdit, cxDropDownEdit, StdCtrls, ActnList, RdxEmpresaActiva, am2000utils, cxDataStorage; type TfrFacturasClientes = class(TRdxFrameFacturasCliente) dsFacturas: TDataSource; BarraFacturas: TRdxBarraSuperior; bModificar: TRdxBotonSuperior; bEliminar: TRdxBotonSuperior; bConsultar: TRdxBotonSuperior; pnlCuerpo: TRdxPanel; pnlGrid: TRdxPanel; brSeleccion: TRdxBarraInferior; bSeleccionar: TRdxBoton; bCancelar: TRdxBoton; brSimple: TRdxBarraInferior; bSalir: TRdxBoton; gridFacturas: TcxGrid; gridFacturasDBTableView1: TcxGridDBTableView; gridFacturasLevel1: TcxGridLevel; bSeparador1: TShape; MenuOpciones: TPopupMenu2000; miAnadir: TMenuItem2000; miModificar: TMenuItem2000; miEliminar: TMenuItem2000; miConsultar: TMenuItem2000; miSeparador: TMenuItem2000; miImprimir: TMenuItem2000; bImprimir: TRdxBotonSuperior; menuAnadir: TPopupMenu2000; mnFacturaA: TMenuItem2000; MenuItem20004: TMenuItem2000; bAnadir: TRdxBotonMenu; pnlExtra: TRdxBarraSuperior; Acciones: TActionList; actAnadir: TAction; actModificar: TAction; actEliminar: TAction; actConsultar: TAction; actImprimir: TAction; actSeleccionar: TAction; actCancelar: TAction; actAceptar: TAction; MenuItem6: TMenuItem2000; MenuItem2: TMenuItem2000; actAnadirFContrato: TAction; Panel1: TPanel; bSeparador2: TShape; eFamilia: TLabel; cbxDocumento: TcxComboBox; actAnadirAbono: TAction; imgSombra: TImage; bRefrescar: TRdxBoton; Shape1: TShape; RdxBotonSuperior1: TRdxBotonSuperior; actConsultarCobros: TAction; Shape2: TShape; bFacturar: TRdxBoton; actCambiarSituacion: TAction; Panel2: TPanel; eNombre: TLabel; Buscar: TcxTextEdit; bLimpiar: TRdxBoton; procedure RdxFrameFacturasClienteShow(Sender: TObject); procedure actImprimirExecute(Sender: TObject); procedure actAnadirExecute(Sender: TObject); procedure actAnadirBExecute(Sender: TObject); procedure actModificarExecute(Sender: TObject); procedure actEliminarExecute(Sender: TObject); procedure actConsultarExecute(Sender: TObject); procedure actSeleccionarExecute(Sender: TObject); procedure actCancelarExecute(Sender: TObject); procedure actAceptarExecute(Sender: TObject); procedure gridFacturasDBTableView1DblClick(Sender: TObject); procedure gridFacturasDBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); procedure actAnadirAbonoExecute(Sender: TObject); procedure actAnadirAbonoBExecute(Sender: TObject); procedure actAnadirFContratoExecute(Sender: TObject); procedure cbxDocumentoPropertiesEditValueChanged(Sender: TObject); procedure actRefrescarDatosExecute(Sender: TObject); procedure actConsultarCobrosExecute(Sender: TObject); procedure actCambiarSituacionExecute(Sender: TObject); procedure BuscarPropertiesChange(Sender: TObject); procedure bLimpiarClick(Sender: TObject); private FCodigoCliente : String; FCodigoContrato : Variant; procedure ActualizarBotones; procedure FiltrarDatos; protected procedure FreeContenido; override; procedure SetContenido (NuevoFrame : TRdxFrame); override; procedure BuscarFactura; override; procedure VerModal; override; procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override; public constructor Create (AOwner : TComponent); override; destructor Destroy; override; end; var frFacturasClientes: TfrFacturasClientes; implementation {$R *.DFM} uses BaseDatos, TablaFacturasCliente, IBDatabase, FacturaCliente, Literales, IBCustomDataSet, Mensajes, Entidades, Variants, ImprimirFacturasCliente, Constantes, RdxFrameContratos, ContratosClientes, StrFunc, FacturarContrato, TablaDocumentos, TablaEmpresas, ListadoPagosCliente, CambiarSituacionFacturas; procedure TfrFacturasClientes.BuscarFactura; begin with TablaFacturas do begin DisableControls; Close; Open; dmTablaFacturasCliente.InicializarTablaFacturas(@TablaFacturas); ActualizarBotones; EnableControls; if not Locate('CODIGO', CodigoFactura, []) then gridFacturasDBTableView1.Controller.GoToFirst else gridFacturasDBTableView1.Controller.TopRowIndex := gridFacturasDBTableView1.Controller.FocusedRowIndex; end; end; constructor TfrFacturasClientes.Create(AOwner: TComponent); begin inherited Create(AOwner); Entidad := entFacturaCliente; 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); gridFacturasDBTableView1.OnDblClick := gridFacturasDBTableView1DblClick; gridFacturasDBTableView1.Controller.GoToFirst; cbxDocumento.Properties.Items.Add('Todos'); cbxDocumento.Properties.Items.AddStrings(dmTablaDocumentos.DarDocumentos); cbxDocumento.ItemIndex := 0; end; destructor TfrFacturasClientes.Destroy; begin TablaFacturas.Close; TablaFacturas.UnPrepare; TablaFacturas.Free; inherited; end; procedure TfrFacturasClientes.FreeContenido; begin if (ContenidoModal is TRdxFrameContratos) then FCodigoContrato := (ContenidoModal as TRdxFrameContratos).CodigoContrato; if (Contenido is TRdxFrameFacturasCliente) then begin CodigoFactura := (Contenido as TRdxFrameFacturasCliente).CodigoFactura; end; inherited FreeContenido; //gridFacturas.SetFocus; end; procedure TfrFacturasClientes.ActualizarBotones; begin if BaseDatos.IsReadOnly then begin actAnadir.Enabled := False; actModificar.Enabled := False; actEliminar.Enabled := False; actConsultar.Enabled := True; actImprimir.Enabled := True; actConsultarCobros.Enabled := True; Exit; end; if TablaFacturas.RecordCount = 0 then begin actAnadir.Enabled := True; actModificar.Enabled := False; actEliminar.Enabled := False; actConsultar.Enabled := False; actImprimir.Enabled := False; actConsultarCobros.Enabled := False; end else begin actAnadir.Enabled := True; actModificar.Enabled := True; actEliminar.Enabled := True; actConsultar.Enabled := True; actImprimir.Enabled := True; actConsultarCobros.Enabled := True; end; end; procedure TfrFacturasClientes.RdxFrameFacturasClienteShow(Sender: TObject); begin Buscar.SetFocus end; procedure TfrFacturasClientes.SetContenido(NuevoFrame: TRdxFrame); begin inherited; if (Contenido is TfrImprimirFacturasCliente) then (Contenido as TfrImprimirFacturasCliente).CodigoFactura := FCodigoFactura; if (Contenido is TfrListadoPagosCliente) then (Contenido as TfrListadoPagosCliente).CodigoCliente := TablaFacturas.FieldByName('CODIGOCLIENTE').AsVariant; end; procedure TfrFacturasClientes.actImprimirExecute(Sender: TObject); begin Contenido := TfrImprimirFacturasCliente.Create(Self); Contenido.Modo := Imprimir; end; procedure TfrFacturasClientes.actAnadirExecute(Sender: TObject); begin Contenido := TfrFacturaCliente.Create(Self); Contenido.Entidad := entFacturaVarios; Contenido.Modo := Anadir; end; procedure TfrFacturasClientes.actAnadirBExecute(Sender: TObject); begin Contenido := TfrFacturaCliente.Create(Self); Contenido.Entidad := entFacturaVarios; Contenido.Modo := Anadir; end; procedure TfrFacturasClientes.actModificarExecute(Sender: TObject); begin Contenido := TfrFacturaCliente.Create(Self); Contenido.Modo := Modificar; end; procedure TfrFacturasClientes.actEliminarExecute(Sender: TObject); begin Contenido := TfrFacturaCliente.Create(Self); Contenido.Modo := Eliminar; end; procedure TfrFacturasClientes.actConsultarExecute(Sender: TObject); begin Contenido := TfrFacturaCliente.Create(Self); Contenido.Modo := Consultar; end; procedure TfrFacturasClientes.actSeleccionarExecute(Sender: TObject); begin CodigoFactura := TablaFacturas.FieldByName('CODIGO').AsString; CloseFrame; end; procedure TfrFacturasClientes.actCancelarExecute(Sender: TObject); begin FCodigoFactura := NULL; CloseFrame; end; procedure TfrFacturasClientes.actAceptarExecute(Sender: TObject); begin CloseFrame; end; procedure TfrFacturasClientes.gridFacturasDBTableView1DblClick( Sender: TObject); begin if Modo = Seleccionar then actSeleccionar.Execute else actModificar.Execute; end; procedure TfrFacturasClientes.gridFacturasDBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); var IndiceCol : Integer; begin if not AViewInfo.Selected then begin IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName('CLASEFACTURA').Index; if UpperCase(AViewInfo.GridRecord.DisplayTexts[IndiceCol]) = CTE_CF_ABONO then ACanvas.Canvas.Font.Color := $000000CC; end; end; procedure TfrFacturasClientes.actAnadirAbonoExecute(Sender: TObject); begin Contenido := TfrFacturaCliente.Create(Self); Contenido.Entidad := entAbonoVarios; Contenido.Modo := Anadir; end; procedure TfrFacturasClientes.actAnadirAbonoBExecute(Sender: TObject); begin Contenido := TfrFacturaCliente.Create(Self); Contenido.Entidad := entAbonoVarios; Contenido.Modo := Anadir; end; procedure TfrFacturasClientes.actAnadirFContratoExecute(Sender: TObject); var CodAux : String; begin // Mostrar la lista de contratos que se pueden facturar CaptionModal := 'Elija el contrato que quiere facturar'; ContenidoModal := TfrContratosClientes.Create(Self); if (not EsCadenaVacia(FCodigoContrato)) then begin frFacturarContrato := TfrFacturarContrato.Create(Self); with frFacturarContrato do begin try CodigoContrato := FCodigoContrato; ShowModal; if ModalResult = mrYes then begin Commit; Self.CodigoFactura := frFacturarContrato.CodigoFactura; Contenido := TfrFacturaCliente.Create(Self); Contenido.Modo := Modificar; Contenido.Visible := True; end else Rollback; finally Free; end; end; end; end; procedure TfrFacturasClientes.VerModal; begin if (ContenidoModal is TRdxFrameContratos) then (ContenidoModal as TRdxFrameContratos).Modo := Facturar; inherited; end; procedure TfrFacturasClientes.cbxDocumentoPropertiesEditValueChanged( Sender: TObject); begin FiltrarDatos; end; procedure TfrFacturasClientes.FiltrarDatos; var Columna : TcxGridDBColumn; AItemList: TcxFilterCriteriaItemList; TextoDocumento : String; begin TextoDocumento := cbxDocumento.Text; with gridFacturas.ActiveView.DataController.Filter do begin BeginUpdate; try Columna := (gridFacturas.ActiveView as TcxGridDBTableView).GetColumnByFieldName('DESCRIPCION'); if UpperCase(TextoDocumento) = 'TODOS' then begin Columna.Visible := True; Entidad := entFacturaCliente; Root.Clear; Active := True; end else begin Columna.Visible := False; Root.Clear; AItemList := Root.AddItemList(fboAnd); AItemList.AddItem(Columna, foEqual, TextoDocumento, 'Descripcion'); Active := True; Entidad := dmTablaDocumentos.DarEntidadDocumento(entFacturaCliente, TablaFacturas.FieldByName('CODIGODOCUMENTO').AsString); end; finally EndUpdate; gridFacturas.ActiveView.DataController.GotoFirst; end; end; end; procedure TfrFacturasClientes.CambiarModo(ModoAnterior, Modo: TRdxModo); begin inherited; dmTablaFacturasCliente.InicializarTablaFacturas(@TablaFacturas); end; procedure TfrFacturasClientes.actRefrescarDatosExecute(Sender: TObject); begin FCodigoFactura := TablaFacturas.FieldByName('CODIGO').AsString; BuscarFactura; end; procedure TfrFacturasClientes.actConsultarCobrosExecute(Sender: TObject); begin Contenido := TfrListadoPagosCliente.Create(Self); Contenido.Modo := Consultar; (Contenido as TfrListadoPagosCliente).activarFacturasCobrosCliente; end; procedure TfrFacturasClientes.actCambiarSituacionExecute(Sender: TObject); var IndiceCol1 : Integer; IndiceSel : Integer; fCambiarSituacionFacturas : TfrCambiarSituacionFacturas; begin fCambiarSituacionFacturas := TfrCambiarSituacionFacturas.Create(Self); fCambiarSituacionFacturas.Entidad := entFacturaCliente; //Rellenamos la propiedad de la unidad CambiarSituacion con los códigos seleccionados IndiceCol1 := gridFacturasDBTableView1.GetColumnByFieldName('CODIGO').Index; for IndiceSel:=0 to gridFacturasDBTableView1.Controller.SelectedRowCount-1 do fCambiarSituacionFacturas.CodigosFacturas.Append(gridFacturasDBTableView1.Controller.SelectedRows[IndiceSel].Values[IndiceCol1]); try fCambiarSituacionFacturas.ShowModal; finally fCambiarSituacionFacturas.Free; bRefrescar.Click; end; end; procedure TfrFacturasClientes.BuscarPropertiesChange(Sender: TObject); begin FiltrarGrid(gridFacturas, Buscar.Text); end; procedure TfrFacturasClientes.bLimpiarClick(Sender: TObject); begin Buscar.Text := ''; end; end.