{ =============================================================================== Copyright (©) 2001. Rodax Software. =============================================================================== Los contenidos de este fichero son propiedad de Rodax Software titular del copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado, en su totalidad o en parte, con el permiso escrito de Rodax Software, o de acuerdo con los términos y condiciones establecidas en el acuerdo/contrato bajo el que se suministra. ----------------------------------------------------------------------------- Web: www.rodax-software.com =============================================================================== Fecha primera versión: 01-10-2001 Versión actual: 1.0.5 Fecha versión actual: 23-11-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 09-10-2001 Al pulsar la tecla ESC se activa el botón 'Cancelar'. Sólo pasa cuando este frame está en una ventana modal. 07-04-2002 Se ha adaptado para la transacción única. 12-10-2002 P244. Se han añadido los listado de clientes. 06-03-2004 Al hacer doble click sobre el grid, se pasará a modificar el registro o se seleccionará, dependiendo del modo en el que se encuentre la pantalla. 23-11-2004 p297. Solo sacar etiquetas de los clientes/proveedores etiquetados. =============================================================================== } unit Clientes; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, ComCtrls, RdxBotones, ToolWin, ExtCtrls, Tipos, Menus, am2000menuitem, am2000popupmenu, am2000, Db, DBTables, RXDBCtrl, RdxPaneles, RdxBarras, TablaClientes, RdxDBFrame, RdxFrameClientes, dxCntner, dxTL, dxDBCtrl, dxDBGrid, am2000utils, pngimage, ImgList, dxDBTLCl, dxGrClms; type TfrClientes = class(TRdxFrameClientes) menuDocumentos: TPopupMenu2000; Presupuestos1: TMenuItem2000; Albaranes1: TMenuItem2000; Facturas1: TMenuItem2000; N1: TMenuItem2000; N2: TMenuItem2000; dsClientes: TDataSource; pnlSuperior: TRdxBarraSuperior; bAnadir: TRdxBotonSuperior; bModificar: TRdxBotonSuperior; bEliminar: TRdxBotonSuperior; bConsultar: TRdxBotonSuperior; bBuscar: TRdxBotonSuperior; bDocumentos: TRdxBotonMenu; bListar: TRdxBotonMenu; menuListar: TPopupMenu2000; bListadoEtiquetas: TMenuItem2000; Listadodeclientes1: TMenuItem2000; imgSombra: TImage; pnlContenido: TRdxPanel; pnlExtra: TRdxBarraSuperior; bEtiquetar: TRdxBoton; pnlGrid: TPanel; gridClientes: TdxDBGrid; brSeleccion: TRdxBarraInferior; bSeleccionar: TRdxBoton; bCancelarGuardar: TRdxBoton; procedure bAnadirClick(Sender: TObject); procedure bModificarClick(Sender: TObject); procedure bConsultarClick(Sender: TObject); procedure bBuscarClick(Sender: TObject); procedure bEliminarClick(Sender: TObject); procedure bSeleccionarClick(Sender: TObject); procedure bCancelarGuardarClick(Sender: TObject); procedure Presupuestos1Click(Sender: TObject); procedure Albaranes1Click(Sender: TObject); procedure Facturas1Click(Sender: TObject); procedure gridClientesRefreshButton(Sender: TObject); procedure Listadodeclientes1Click(Sender: TObject); procedure bListadoEtiquetasClick(Sender: TObject); procedure gridClientesDblClick(Sender: TObject); procedure bEtiquetarClick(Sender: TObject); procedure gridClientesCustomDrawCell(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean; var AText: String; var AColor: TColor; AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean); private FEtiquetados: Boolean; procedure ActualizarBotones; procedure SetEtiquetados(const Value: Boolean); protected procedure BuscarCliente; override; procedure FreeContenido; override; procedure VerModal; override; public property SoloEtiquetados : Boolean read FEtiquetados write SetEtiquetados; constructor Create (AOwner : TComponent); override; destructor Destroy; override; published property TablaClientes; property Entidad; end; var frClientes: TfrClientes; implementation {$R *.DFM} uses IBCustomDataSet, Cliente, BuscarCliente, BaseDatos, PresupuestosClientes, AlbaranesClientes, FacturasClientes, ListarClientes, GenerarEtiquetasClientes, Configuracion, mensajes, StrFunc, Constantes; constructor TfrClientes.Create (AOwner : TComponent); begin inherited Create(AOwner); Entidad := entCliente; ConfigurarFrame(Self, Self.Entidad); BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaClientes := TIBDataSet.Create(Self); dsClientes.DataSet := TablaClientes; with TablaClientes do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaClientes.sqlGrid); Prepare; Open; ActualizarBotones; end; dmTablaClientes.InicializarGridClientes(gridClientes); with (gridClientes.ColumnByFieldName('ETIQUETADO') as TdxDBGridImageColumn) do begin Images := dmConfiguracion.ilEtiquetado; ImageIndexes.Add('0'); ImageIndexes.Add('1'); Values.Add('1'); Values.Add('0'); end; end; procedure TfrClientes.bAnadirClick(Sender: TObject); begin Contenido := TfrCliente.Create(Self); Contenido.Modo := Anadir; end; procedure TfrClientes.bModificarClick(Sender: TObject); begin CodigoCliente := TablaClientes.FieldByName('CODIGO').AsString; Contenido := TfrCliente.Create(Self); Contenido.Modo := Modificar; end; procedure TfrClientes.bConsultarClick(Sender: TObject); begin CodigoCliente := TablaClientes.FieldByName('CODIGO').AsString; Contenido := TfrCliente.Create(Self); Contenido.Modo := Consultar; end; procedure TfrClientes.bBuscarClick(Sender: TObject); begin CodigoCliente := TablaClientes.FieldByName('CODIGO').AsString; Contenido := TfrBuscarCliente.Create(Self); end; procedure TfrClientes.bEliminarClick(Sender: TObject); begin CodigoCliente := TablaClientes.FieldByName('CODIGO').AsString; Contenido := TfrCliente.Create(Self); Contenido.Modo := Eliminar; end; procedure TfrClientes.bSeleccionarClick(Sender: TObject); begin CodigoCliente := TablaClientes.FieldByName('CODIGO').AsString; CloseFrame; end; procedure TfrClientes.bCancelarGuardarClick(Sender: TObject); begin FCodigoCliente := NULL; CloseFrame; end; procedure TfrClientes.BuscarCliente; begin with TablaClientes do begin DisableControls; Close; Open; ActualizarBotones; EnableControls; Locate('CODIGO', CodigoCliente, []); end; end; destructor TfrClientes.Destroy; begin TablaClientes.Close; TablaClientes.Unprepare; TablaClientes.Free; inherited; end; procedure TfrClientes.FreeContenido; begin if (Contenido is TRdxFrameClientes) then CodigoCliente := (Contenido as TRdxFrameClientes).CodigoCliente; inherited; end; procedure TfrClientes.Presupuestos1Click(Sender: TObject); begin CodigoCliente := TablaClientes.FieldByName('CODIGO').AsString; CaptionModal := Format('Lista de presupuestos del cliente %s', [TablaClientes.FieldByName('NOMBRE').AsString]); WidthModal := 815; HeightModal := 600; ModoModal := Consultar; ContenidoModal := TfrPresupuestosClientes.Create(Self); end; procedure TfrClientes.VerModal; begin FCodigoCliente := TablaClientes.FieldByName('CODIGO').AsString; if (ContenidoModal is TfrPresupuestosClientes) then (ContenidoModal as TfrPresupuestosClientes).CodigoCliente := FCodigoCliente; if (ContenidoModal is TfrAlbaranesClientes) then (ContenidoModal as TfrAlbaranesClientes).CodigoCliente := FCodigoCliente; if (ContenidoModal is TfrFacturasClientes) then (ContenidoModal as TfrFacturasClientes).CodigoCliente := FCodigoCliente; inherited; end; procedure TfrClientes.Facturas1Click(Sender: TObject); begin CodigoCliente := TablaClientes.FieldByName('CODIGO').AsString; CaptionModal := Format('Lista de facturas del cliente %s', [TablaClientes.FieldByName('NOMBRE').AsString]); WidthModal := 815; HeightModal := 600; ModoModal := Consultar; ContenidoModal := TfrFacturasClientes.Create(Self); end; procedure TfrClientes.ActualizarBotones; begin if BaseDatos.IsReadOnly then begin bAnadir.Enabled := False; bModificar.Enabled := False; bEliminar.Enabled := False; bConsultar.Enabled := True; bDocumentos.Enabled := True; bBuscar.Enabled := True; Exit; end; if TablaClientes.RecordCount = 0 then begin bAnadir.Enabled := True; bModificar.Enabled := False; bEliminar.Enabled := False; bConsultar.Enabled := False; bDocumentos.Enabled := False; bBuscar.Enabled := False; end else begin bAnadir.Enabled := True; bModificar.Enabled := True; bEliminar.Enabled := True; bConsultar.Enabled := True; bDocumentos.Enabled := True; bBuscar.Enabled := True; end; end; procedure TfrClientes.gridClientesRefreshButton(Sender: TObject); begin BuscarCliente; end; procedure TfrClientes.Albaranes1Click(Sender: TObject); begin CodigoCliente := TablaClientes.FieldByName('CODIGO').AsString; CaptionModal := Format('Lista de albaranes del cliente %s', [TablaClientes.FieldByName('NOMBRE').AsString]); WidthModal := 815; HeightModal := 600; ModoModal := Consultar; ContenidoModal := TfrAlbaranesClientes.Create(Self); end; procedure TfrClientes.Listadodeclientes1Click(Sender: TObject); begin Contenido := TfrListarClientes.Create(Self); Contenido.Modo := Listar; end; procedure TfrClientes.bListadoEtiquetasClick(Sender: TObject); begin CaptionModal := 'Generar etiquetas de cliente'; WidthModal := 505; HeightModal := 200; ModoModal := Listar; EntidadModal := entCliente; ContenidoModal := TfrGenerarEtiquetasClientes.Create(Self); end; procedure TfrClientes.gridClientesDblClick(Sender: TObject); begin if Modo = Seleccionar then bSeleccionar.Click else bModificar.Click; end; procedure TfrClientes.bEtiquetarClick(Sender: TObject); var IndiceCol1 : Integer; IndiceCol2 : Integer; IndiceSel : Integer; CodClientes0 : TStringList; CodClientes1 : TStringList; begin IndiceCol1 := gridClientes.ColumnByFieldName('CODIGO').Index; IndiceCol2 := gridClientes.ColumnByFieldName('ETIQUETADO').Index; CodClientes0 := TStringList.Create; CodClientes1 := TStringList.Create; for IndiceSel:=0 to gridClientes.SelectedCount-1 do begin if StrToInt(gridClientes.SelectedNodes[IndiceSel].Strings[IndiceCol2]) = CTE_NOETIQUETAR then CodClientes0.Append(gridClientes.SelectedNodes[IndiceSel].Strings[IndiceCol1]) else CodClientes1.Append(gridClientes.SelectedNodes[IndiceSel].Strings[IndiceCol1]); end; //Asignamos su nuevo valor a los clientes elegidos dmTablaClientes.EtiquetarClientes(codClientes0, CTE_NOETIQUETAR); dmTablaClientes.EtiquetarClientes(codClientes1, CTE_ETIQUETAR); Commit; codClientes0.Free; codClientes1.Free; //Refrescamos CodigoCliente := gridClientes.FocusedNode.Strings[IndiceCol1]; end; procedure TfrClientes.gridClientesCustomDrawCell(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean; var AText: String; var AColor: TColor; AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean); var IndiceCol : Integer; begin { if not ASelected then begin IndiceCol := (Sender as TdxDBGrid).ColumnByFieldName('ETIQUETADO').Index; if StrToInt(ANode.Strings[IndiceCol]) = CTE_ETIQUETAR then AFont.Color := COLOR_ETIQUETADO else AFont.Color := COLOR_NOETIQUETADO; end;} end; procedure TfrClientes.SetEtiquetados(const Value: Boolean); var valor : variant; begin valor := 1; FEtiquetados := Value; if FEtiquetados then gridClientes.Filter.Add(gridClientes.FindColumnByFieldName('ETIQUETADO'), valor, valor); end; end.