{ =============================================================================== 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.7 Fecha versión actual: 08-03-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. 29-10-2001 Hacer más grande la ventana modal para facturar un albarán. 18-01-2002 Se han coloreado las filas del grid dependiendo de la situación de la factura. 07-04-2002 Se ha adaptado para la transacción única. 06-05-2002 Adaptación al grid 'TdxDBGrid'. 08-04-2003 P263. Agrupar por años los albaranes. 08-03-2004 Al hacer doble click sobre el grid, se pasará a modificar el registro o se seleccionará, dependiendo del modo en el que se encuentre la pantalla. 08-03-2004 p272. Adaptación a multiempresa. =============================================================================== } unit AlbaranesClientes; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, RdxFrameAlbaranes, Grids, DBGrids, ComCtrls, RdxBotones, ToolWin, ExtCtrls, Tipos, Menus, am2000menuitem, am2000popupmenu, am2000, Db, DBTables, RdxPaneles, RdxBarras, RXDBCtrl, dxCntner, dxTL, dxDBCtrl, dxDBGrid, StdCtrls, RdxComboBox, pngimage; type TfrAlbaranesClientes = class(TRdxFrameAlbaranes) dsAlbaranes: TDataSource; BarraAlbaranes: TRdxBarraSuperior; bAnadir: TRdxBotonSuperior; bModificar: TRdxBotonSuperior; bEliminar: TRdxBotonSuperior; bConsultar: TRdxBotonSuperior; bBuscar: TRdxBotonSuperior; pnlCuerpo: TRdxPanel; pnlGridAlbaranesCliente: TPanel; pnlExtra: TRdxBarraSuperior; bFacturar: TRdxBoton; bImprimir: TRdxBoton; bExportar: TRdxBoton; brSeleccion: TRdxBarraInferior; bSeleccionar: TRdxBoton; bCancelarGuardar: TRdxBoton; brSimple: TRdxBarraInferior; bSalir: TRdxBoton; gridAlbaranes: TdxDBGrid; imgSombra: TImage; RdxPanel1: TRdxPanel; Label1: TLabel; cbxAno: TRdxComboBox; bEnviarCorreo: TRdxBoton; procedure bAnadirClick(Sender: TObject); procedure bModificarClick(Sender: TObject); procedure bConsultarClick(Sender: TObject); procedure bBuscarClick(Sender: TObject); procedure bEliminarClick(Sender: TObject); procedure bFacturarClick(Sender: TObject); procedure bImprimirClick(Sender: TObject); procedure bSalirClick(Sender: TObject); procedure bSeleccionarClick(Sender: TObject); procedure bCancelarGuardarClick(Sender: TObject); procedure Facturas1Click(Sender: TObject); procedure bExportarClick(Sender: TObject); procedure gridAlbaranesRefreshButton(Sender: TObject); procedure gridAlbaranesCustomDrawCell(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean; var AText: String; var AColor: TColor; AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean); procedure cbxAnoChange(Sender: TObject); procedure gridAlbaranesDblClick(Sender: TObject); procedure bEnviarCorreoClick(Sender: TObject); private FCodigoCliente: String; procedure SetCodigoCliente(Value : String); procedure ActualizarBotones; protected procedure BuscarAlbaran; override; procedure FreeContenido; override; procedure VerModal; override; procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override; procedure ActualizarBarras; override; public constructor Create (AOwner : TComponent); override; destructor Destroy; override; published property CodigoCliente : String read FCodigoCliente write SetCodigoCliente; property TablaAlbaranes; property Entidad; end; var frAlbaranesClientes: TfrAlbaranesClientes; implementation {$R *.DFM} uses AlbaranCliente, BuscarAlbaranCliente, FacturaCliente, SysFunc, TablaAlbaranesCliente, BaseDatos, Configuracion, IBCustomDataSet, FacturasClientes, Mensajes, InformeAlbaranCliente, StrFunc, Constantes, Literales, RdxEmpresaActiva, Correo, TablaClientes; procedure TfrAlbaranesClientes.FreeContenido; begin if (Contenido is TRdxFrameAlbaranes) then CodigoAlbaran := (Contenido as TRdxFrameAlbaranes).CodigoAlbaran; inherited FreeContenido; BuscarAlbaran; end; procedure TfrAlbaranesClientes.bAnadirClick(Sender: TObject); begin inherited; Contenido := TfrAlbaranCliente.Create(Self); Contenido.Modo := Anadir; end; procedure TfrAlbaranesClientes.bModificarClick(Sender: TObject); begin CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString; if dmTablaAlbaranesCliente.AlbaranFacturado(EmpresaActiva.Codigo, CodigoAlbaran) then begin VerMensaje(msgAlbNoModificar); Exit; end; Contenido := TfrAlbaranCliente.Create(Self); Contenido.Modo := Modificar; end; procedure TfrAlbaranesClientes.bConsultarClick(Sender: TObject); begin CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString; Contenido := TfrAlbaranCliente.Create(Self); Contenido.Modo := Consultar; end; procedure TfrAlbaranesClientes.bBuscarClick(Sender: TObject); begin CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString; Contenido := TfrBuscarAlbaranCliente.Create(Self); end; procedure TfrAlbaranesClientes.bEliminarClick(Sender: TObject); begin CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString; if dmTablaAlbaranesCliente.AlbaranFacturado(EmpresaActiva.Codigo, CodigoAlbaran) then begin VerMensaje(msgAlbNoEliminar); Exit; end; Contenido := TfrAlbaranCliente.Create(Self); Contenido.Modo := Eliminar; end; procedure TfrAlbaranesClientes.bFacturarClick(Sender: TObject); begin CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString; if dmTablaAlbaranesCliente.AlbaranFacturado(EmpresaActiva.Codigo, CodigoAlbaran) then begin VerMensajeFmt(msgAlbYaFacturado, [FCodigoAlbaran]); Exit; end; CaptionModal := 'Facturar albarán de cliente'; WidthModal := 758; ModoModal := Anadir; EntidadModal := entFacturaCliente; ContenidoModal := TfrFacturaCliente.Create(Self); end; procedure TfrAlbaranesClientes.bImprimirClick(Sender: TObject); var FInformeAlbaran : TInformeAlbaranCliente; begin CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString; FCodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString; FInformeAlbaran := TInformeAlbaranCliente.Create(Self); try FInformeAlbaran.Imprimir(FCodigoAlbaran); finally FInformeAlbaran.Free; end; end; procedure TfrAlbaranesClientes.ActualizarBarras; begin inherited; case Modo of Facturar : begin if BarraSeleccion <> NIL then BarraSeleccion.Visible := True; if BarraSalir <> NIL then BarraSalir.Visible := False; if BarraOperacion <> NIL then BarraOperacion.Visible := False; end; end; end; procedure TfrAlbaranesClientes.ActualizarBotones; begin if BaseDatos.IsReadOnly then begin bAnadir.Enabled := False; bModificar.Enabled := False; bEliminar.Enabled := False; bConsultar.Enabled := True; bBuscar.Enabled := True; bFacturar.Enabled := False; bExportar.Enabled := True; bImprimir.Enabled := True; Exit; end; if TablaAlbaranes.RecordCount = 0 then begin bAnadir.Enabled := True; bModificar.Enabled := False; bEliminar.Enabled := False; bConsultar.Enabled := False; bBuscar.Enabled := False; bFacturar.Enabled := False; bExportar.Enabled := False; bImprimir.Enabled := False; end else begin bAnadir.Enabled := True; bModificar.Enabled := True; bEliminar.Enabled := True; bConsultar.Enabled := True; bBuscar.Enabled := True; bFacturar.Enabled := True; bExportar.Enabled := True; bImprimir.Enabled := True; end; end; procedure TfrAlbaranesClientes.BuscarAlbaran; begin with TablaAlbaranes do begin DisableControls; Close; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; Open; dmTablaAlbaranesCliente.InicializarTablaAlbaranes(@TablaAlbaranes); ActualizarBotones; EnableControls; Locate('CODIGO', CodigoAlbaran, []); end; end; procedure TfrAlbaranesClientes.CambiarModo(ModoAnterior, Modo: TRdxModo); begin with TablaAlbaranes do begin Close; case Modo of Facturar : SelectSQL.Assign(dmTablaAlbaranesCliente.sqlConsultarGridAlbaranesFacturar); end; end; inherited; end; constructor TfrAlbaranesClientes.Create(AOwner: TComponent); begin inherited Create(AOwner); Entidad := entAlbaranCliente; ConfigurarFrame(Self, Self.Entidad); BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaAlbaranes := TIBDataSet.Create(Self); dsAlbaranes.DataSet := TablaAlbaranes; with TablaAlbaranes do begin DisableControls; Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaAlbaranesCliente.sqlConsultarGridAlbaranes); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; Open; ActualizarBotones; EnableControls; end; dmTablaAlbaranesCliente.InicializarTablaAlbaranes(@TablaAlbaranes); dmTablaAlbaranesCliente.InicializarGridAlbaranes(gridAlbaranes); gridAlbaranes.GotoFirst; cbxAno.Items := dmTablaAlbaranesCliente.DarListaAnos(EmpresaActiva.Codigo); cbxAno.ItemIndex := 0; end; destructor TfrAlbaranesClientes.Destroy; begin TablaAlbaranes.Close; TablaAlbaranes.UnPrepare; TablaAlbaranes.Free; inherited; end; procedure TfrAlbaranesClientes.SetCodigoCliente(Value: String); begin if FCodigoCliente = Value then exit; FCodigoCliente := Value; with TablaAlbaranes do begin DisableControls; Close; SelectSQL.Assign(dmTablaAlbaranesCliente.sqlConsultarGridAlbaranesCli); ParamByName('CODIGOCLIENTE').AsString := FCodigoCliente; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; Open; dmTablaAlbaranesCliente.InicializarTablaAlbaranes(@TablaAlbaranes); ActualizarBotones; EnableControls; Locate('CODIGO', CodigoAlbaran, []); end; end; procedure TfrAlbaranesClientes.VerModal; begin FCodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString; if (ContenidoModal is TfrFacturaCliente) then (ContenidoModal as TfrFacturaCliente).CodigoAlbaran := CodigoAlbaran; inherited; end; procedure TfrAlbaranesClientes.bSalirClick(Sender: TObject); begin CloseFrame; end; procedure TfrAlbaranesClientes.bSeleccionarClick(Sender: TObject); begin CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString; CloseFrame; end; procedure TfrAlbaranesClientes.bCancelarGuardarClick(Sender: TObject); begin FCodigoAlbaran := ''; CloseFrame; end; procedure TfrAlbaranesClientes.Facturas1Click(Sender: TObject); begin CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString; CaptionModal := Format('Factura del albarán %s', [TablaAlbaranes.FieldByName('CODIGO').AsString]); WidthModal := 815; HeightModal := 600; ModoModal := Consultar; ContenidoModal := TfrFacturasClientes.Create(Self); end; procedure TfrAlbaranesClientes.bExportarClick(Sender: TObject); var FInformeAlbaran : TInformeAlbaranCliente; Fichero : String; begin CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString; if not DarFicheroExportar(Fichero) then Exit; FCodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString; FInformeAlbaran := TInformeAlbaranCliente.Create(Self); try FInformeAlbaran.Exportar(FCodigoAlbaran, Fichero); finally FInformeAlbaran.Free; end; end; procedure TfrAlbaranesClientes.gridAlbaranesRefreshButton(Sender: TObject); begin BuscarAlbaran; end; procedure TfrAlbaranesClientes.gridAlbaranesCustomDrawCell(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('CODIGOFACTURA').Index; if not EsCadenaVacia(ANode.Strings[IndiceCol]) then AFont.Color := COLOR_FACTURADO; end; end; procedure TfrAlbaranesClientes.cbxAnoChange(Sender: TObject); begin if cbxAno.Text = CTE_TODOS then begin gridAlbaranes.Filter.Remove(gridAlbaranes.FindColumnByFieldName(CTE_ANO)); gridAlbaranes.Filter.Clear; end else begin gridAlbaranes.Filter.Clear; gridAlbaranes.Filter.Add(gridAlbaranes.FindColumnByFieldName(CTE_ANO), cbxAno.Text, cbxAno.Text); end; gridAlbaranes.SetFocus; gridAlbaranes.GotoFirst; //Falta seleccionar tupla end; procedure TfrAlbaranesClientes.gridAlbaranesDblClick(Sender: TObject); begin if Modo = Seleccionar then bSeleccionar.Click else bModificar.Click; end; procedure TfrAlbaranesClientes.bEnviarCorreoClick(Sender: TObject); var FInforme : TInformeAlbaranCliente; Fichero : String; Datos: TDatosCorreo; CodigoCliente: String; begin CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString; CodigoCliente := TablaAlbaranes.FieldByName('CODIGOCLIENTE').AsString; Datos:= Nil; Fichero := CodigoAlbaran; Fichero := DarRutaTemporal + StringReplace(Fichero, CTE_SEPSERIADO, CTE_SEPSERIADO2, [rfReplaceAll, rfIgnoreCase]); Fichero := Fichero + CTE_DOC; //Generamos el fichero para luego adjuntaro al correo FInforme:= TInformeAlbaranCliente.Create(Self); try FInforme.Exportar(CodigoAlbaran, Fichero); finally FInforme.Free; end; try //Creamos el correo Datos:= TDatosCorreo.Create; Datos.Direcciones.add(dmTablaClientes.darCorreo(CodigoCliente)); Datos.Adjuntos.Add(Fichero); enviarCorreo(Datos); finally FreeAndNil(Datos); end; end; end.