{ =============================================================================== 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.1 Fecha versión actual: 07-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. 21-10-2001 Se ha cambiado la etiqueta 'Facturar pedido' por 'Hacer factura'. 05-11-2001 El mensaje de error al devolver un pedido estaba mal. 12-01-2002 Añadido el cliente final a los pedidos de proveedor. 18-01-2002 Se han coloreado las filas del grid dependiendo de la situación de la factura. 22-01-2002 Se permite modificar un pedido parcialmente recibido. 07-04-2002 Se ha adaptado para la transacción única. 04-05-2002 Adaptación al grid 'TdxDBGrid'. 02-08-2002 Asociar la tecla 'Esc' con el botón 'Aceptar'. 08-04-2003 P263. Agrupar por años los pedidos. 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. 07-03-2004 p272. Adaptación a multiempresa. =============================================================================== } unit PedidosProveedores; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, RdxFramePedidosProveedor, ComCtrls, RdxBotones, ToolWin, Grids, DBGrids, RdxPaneles, RdxBarras, Tipos, Db, DBTables, RXDBCtrl, RdxFrame, ExtCtrls, Ibdatabase, dxCntner, dxTL, dxDBCtrl, dxDBGrid, Menus, am2000menuitem, am2000popupmenu, am2000, StdCtrls, RdxComboBox, ActnList, am2000utils; type TfrPedidosProveedores = class(TRdxFramePedidosProveedor) dsPedidos: TDataSource; BarraPedidos: TRdxBarraSuperior; bAnadir: TRdxBotonSuperior; bModificar: TRdxBotonSuperior; bEliminar: TRdxBotonSuperior; bConsultar: TRdxBotonSuperior; bBuscar: TRdxBotonSuperior; brSeleccion: TRdxBarraInferior; bSeleccionar: TRdxBoton; bCancelarGuardar: TRdxBoton; brSimple: TRdxBarraInferior; bSalir: TRdxBoton; pnlCuerpo: TRdxPanel; pnlExtra: TRdxBarraSuperior; bEmitir: TRdxBoton; bRecibir: TRdxBoton; bCancelar: TRdxBoton; pnlGridPedidosProveedores: TPanel; bDevolver: TRdxBoton; bFacturar: TRdxBoton; bImprimir: TRdxBoton; bExportar: TRdxBoton; gridPedidos: TdxDBGrid; bListar: TRdxBotonMenu; menuListar: TPopupMenu2000; Listadodepedidosdeproveedor1: TMenuItem2000; ActionList1: TActionList; actAnadir: TAction; imgSombra: TImage; RdxPanel1: TRdxPanel; Label1: TLabel; cbxAno: TRdxComboBox; bEnviarCorreo: TRdxBoton; procedure bEmitirPedidoClick(Sender: TObject); procedure bRecibirPedidoClick(Sender: TObject); procedure bSeleccionarClick(Sender: TObject); procedure bCancelarGuardarClick(Sender: TObject); procedure bExportarClick(Sender: TObject); procedure bCancelarClick(Sender: TObject); procedure bSalirClick(Sender: TObject); procedure bDevolverClick(Sender: TObject); procedure bImprimirClick(Sender: TObject); procedure bFacturarClick(Sender: TObject); procedure gridPedidosCustomDrawCell(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 Listadodepedidosdeproveedor1Click(Sender: TObject); procedure cbxAnoChange(Sender: TObject); procedure actAnadirExecute(Sender: TObject); procedure actModificarExecute(Sender: TObject); procedure actEliminarExecute(Sender: TObject); procedure actConsultarExecute(Sender: TObject); procedure actBuscarExecute(Sender: TObject); procedure gridPedidosDblClick(Sender: TObject); procedure bEnviarCorreoClick(Sender: TObject); private FCodigoProveedor : string; procedure CancelarPedido; procedure SetCodigoProveedor(Value : String); procedure ActualizarBotones; protected procedure BuscarPedido; override; procedure FreeContenido; override; procedure VerModal; override; procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override; procedure ActualizarBarras; override; procedure SetContenido (NuevoFrame : TRdxFrame); override; public constructor Create (AOwner : TComponent); overload; override; destructor Destroy; override; published property CodigoProveedor : String read FCodigoProveedor write SetCodigoProveedor; property TablaPedidosProveedor; property Entidad; end; var frPedidosProveedores: TfrPedidosProveedores; implementation {$R *.DFM} uses PedidoProveedor, BuscarPedidoProveedor, StrFunc, Configuracion, BaseDatos, TablaPedidosProveedor, IBCustomDataSet, SysFunc, RdxFrameAlmacenes, InformePedidoProveedor, Mensajes, EmitirPedidoProveedor, MovimientoAlmacenes, FacturaProveedor, ListadoPedidosProv, Constantes, Literales, RdxEmpresaActiva, Correo, TablaProveedores; procedure TfrPedidosProveedores.bEmitirPedidoClick(Sender: TObject); var SituacionAux : String; begin FCodigoPedido := TablaPedidosProveedor.FieldByName('CODIGO').AsString; SituacionAux := dmTablaPedidosProveedor.DarSituacion(EmpresaActiva.Codigo, CodigoPedido); if SituacionAux <> 'NO EMITIDO' then begin VerMensajeFmt(msgPedidoNoEmitir, [LowerCase(SituacionAux)]); exit; end; CaptionModal := 'Emitir pedido de proveedor'; WidthModal := 425; HeightModal := 195; ModoModal := Emitir; ContenidoModal := TfrEmitirPedidoProveedor.Create(Self); end; procedure TfrPedidosProveedores.bRecibirPedidoClick(Sender: TObject); var SituacionAux : String; begin FCodigoPedido := TablaPedidosProveedor.FieldByName('CODIGO').AsString; SituacionAux := dmTablaPedidosProveedor.DarSituacion(EmpresaActiva.Codigo, CodigoPedido); if (SituacionAux <> 'EMITIDO') and (SituacionAux <> 'PARCIALMENTE RECIBIDO') then begin VerMensajeFmt(msgPedidoNoRecibir, [LowerCase(SituacionAux)]); exit; end; EntidadModal := entArticulosAlmacen; ModoModal := EntradaPedido; ContenidoModal := TfrMovimientoAlmacenes.Create(Self); end; constructor TfrPedidosProveedores.Create (AOwner : TComponent); begin inherited Create(AOwner); Entidad := entPedidoProveedor; ConfigurarFrame(Self, Self.Entidad); BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaPedidosProveedor := TIBDataSet.Create(Self); dsPedidos.DataSet := TablaPedidosProveedor; with TablaPedidosProveedor do begin DisableControls; Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaPedidosProveedor.sqlConsultarGridPedidos); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; Open; ActualizarBotones; EnableControls; end; dmTablaPedidosProveedor.InicializarTablaPedidos(@TablaPedidosProveedor); dmTablaPedidosProveedor.InicializarGridPedidos(gridPedidos); gridPedidos.GotoFirst; cbxAno.Items := dmTablaPedidosProveedor.DarListaAnos(EmpresaActiva.Codigo); cbxAno.ItemIndex := 0; end; destructor TfrPedidosProveedores.Destroy; begin TablaPedidosProveedor.Close; TablaPedidosProveedor.UnPrepare; TablaPedidosProveedor.Free; inherited; end; procedure TfrPedidosProveedores.BuscarPedido; begin with TablaPedidosProveedor do begin DisableControls; Close; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; Open; dmTablaPedidosProveedor.InicializarTablaPedidos(@TablaPedidosProveedor); ActualizarBotones; EnableControls; Locate('CODIGO', CodigoPedido, []); end; end; procedure TfrPedidosProveedores.FreeContenido; begin if (Contenido is TRdxFramePedidosProveedor) then CodigoPedido := (Contenido as TRdxFramePedidosProveedor).CodigoPedido; if (ContenidoModal is TfrEmitirPedidoProveedor) or (ContenidoModal is TfrMovimientoAlmacenes) or (ContenidoModal is TfrFacturaProveedor) then BuscarPedido; // Refrescar la tabla inherited FreeContenido; end; procedure TfrPedidosProveedores.bSeleccionarClick(Sender: TObject); var SituacionAux : String; begin SituacionAux := UpperCase(TablaPedidosProveedor.FieldByName('SITUACION').AsString); if Modo = Seleccionar then begin if SituacionAux = 'EMITIDO' then begin VerMensajeFmt(msgPedidoNoModificar, ['emitido']); exit; end; if SituacionAux = 'PARCIALMENTE RECIBIDO' then begin VerMensajeFmt(msgPedidoNoModificar, ['parcialmente recibido']); exit; end; if SituacionAux = 'TOTALMENTE RECIBIDO' then begin VerMensajeFmt(msgPedidoNoModificar, ['totalmente recibido']); exit; end; if SituacionAux = 'DEVUELTO' then begin VerMensajeFmt(msgPedidoNoModificar, ['devuelto']); exit; end; end; FCodigoPedido := TablaPedidosProveedor.FieldByName('CODIGO').AsString; CloseFrame; end; procedure TfrPedidosProveedores.bCancelarGuardarClick(Sender: TObject); begin FCodigoPedido := NULL; CloseFrame; end; procedure TfrPedidosProveedores.bExportarClick(Sender: TObject); var Fichero : String; FInformePedidoProveedor : TInformePedidoProveedor; begin if not DarFicheroExportar(Fichero) then Exit; FCodigoPedido := TablaPedidosProveedor.FieldByName('CODIGO').AsString; FInformePedidoProveedor := TInformePedidoProveedor.Create(Self); try FInformePedidoProveedor.Exportar(CodigoPedido, Fichero) finally FInformePedidoProveedor.Free; end; end; procedure TfrPedidosProveedores.CancelarPedido; begin dmTablaPedidosProveedor.CancelarPedido(EmpresaActiva.Codigo, FCodigoPedido); BuscarPedido; end; procedure TfrPedidosProveedores.bCancelarClick(Sender: TObject); var SituacionAux : String; begin FCodigoPedido := TablaPedidosProveedor.FieldByName('CODIGO').AsString; SituacionAux := dmTablaPedidosProveedor.DarSituacion(EmpresaActiva.Codigo, CodigoPedido); if SituacionAux <> 'EMITIDO' then begin VerMensajeFmt(msgPedidoNoCancelar, [LowerCase(SituacionAux)]); exit; end; case VerMensajePreguntaFmt(msgCancelarPedido, [CodigoPedido]) of IDYES : CancelarPedido; else exit; end; end; procedure TfrPedidosProveedores.VerModal; begin FCodigoPedido := TablaPedidosProveedor.FieldByName('CODIGO').AsString; FCodigoProveedor := TablaPedidosProveedor.FieldByName('CODIGOPROVEEDOR').AsString; if (ContenidoModal is TfrEmitirPedidoProveedor) then (ContenidoModal as TfrEmitirPedidoProveedor).CodigoPedido := CodigoPedido; if (ContenidoModal is TfrFacturaProveedor) then begin (ContenidoModal as TfrFacturaProveedor).CodigoProveedor := CodigoProveedor; (ContenidoModal as TfrFacturaProveedor).CodigoPedido := CodigoPedido; end; if (ContenidoModal is TfrMovimientoAlmacenes) then (ContenidoModal as TfrMovimientoAlmacenes).CodigoPedido := CodigoPedido; inherited; end; procedure TfrPedidosProveedores.SetCodigoProveedor(Value: String); begin if FCodigoProveedor = Value then exit; FCodigoProveedor := Value; with TablaPedidosProveedor do begin DisableControls; Close; case Modo of Facturar : SelectSQL.Assign(dmTablaPedidosProveedor.sqlConsultarGridPedidosFacturar); else SelectSQL.Assign(dmTablaPedidosProveedor.sqlConsultarGridPedidosProv); end; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGOPROVEEDOR').AsString := FCodigoProveedor; Prepare; Open; dmTablaPedidosProveedor.InicializarTablaPedidos(@TablaPedidosProveedor); ActualizarBotones; EnableControls; Locate('CODIGO', CodigoPedido, []); end; end; procedure TfrPedidosProveedores.bSalirClick(Sender: TObject); begin CloseFrame; end; procedure TfrPedidosProveedores.CambiarModo(ModoAnterior, Modo: TRdxModo); begin with TablaPedidosProveedor do begin Close; case Modo of Recibir : SelectSQL.Assign(dmTablaPedidosProveedor.sqlConsultarGridPedidosRecibir); Devolver : SelectSQL.Assign(dmTablaPedidosProveedor.sqlConsultarGridPedidosDevolver); Facturar : SelectSQL.Assign(dmTablaPedidosProveedor.sqlConsultarGridPedidosFacturar); end; end; inherited; end; procedure TfrPedidosProveedores.ActualizarBarras; begin inherited; case Modo of Recibir, Devolver, 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 TfrPedidosProveedores.bDevolverClick(Sender: TObject); var SituacionAux : String; begin FCodigoPedido := TablaPedidosProveedor.FieldByName('CODIGO').AsString; SituacionAux := dmTablaPedidosProveedor.DarSituacion(EmpresaActiva.Codigo, CodigoPedido); if SituacionAux <> 'TOTALMENTE RECIBIDO' then begin VerMensajeFmt(msgPedidoNoDevolver, [LowerCase(SituacionAux)]); exit; end; EntidadModal := entArticulosAlmacen; ModoModal := SalidaDevolucion; ContenidoModal := TfrMovimientoAlmacenes.Create(Self); end; procedure TfrPedidosProveedores.ActualizarBotones; begin if BaseDatos.IsReadOnly then begin bAnadir.Enabled := False; bModificar.Enabled := False; bEliminar.Enabled := False; bConsultar.Enabled := True; bBuscar.Enabled := True; bEmitir.Enabled := False; bRecibir.Enabled := False; bDevolver.Enabled := False; bCancelar.Enabled := False; bFacturar.Enabled := False; bExportar.Enabled := True; bImprimir.Enabled := True; Exit; end; if TablaPedidosProveedor.RecordCount = 0 then begin bAnadir.Enabled := True; bModificar.Enabled := False; bEliminar.Enabled := False; bConsultar.Enabled := False; bBuscar.Enabled := False; bEmitir.Enabled := False; bRecibir.Enabled := False; bDevolver.Enabled := False; bCancelar.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; bEmitir.Enabled := True; bRecibir.Enabled := True; bDevolver.Enabled := True; bCancelar.Enabled := True; bFacturar.Enabled := True; bExportar.Enabled := True; bImprimir.Enabled := True; end; end; procedure TfrPedidosProveedores.bImprimirClick(Sender: TObject); var FInformePedidoProveedor : TInformePedidoProveedor; begin FCodigoPedido := TablaPedidosProveedor.FieldByName('CODIGO').AsString; FInformePedidoProveedor := TInformePedidoProveedor.Create(Self); try FInformePedidoProveedor.Imprimir(CodigoPedido) finally FInformePedidoProveedor.Free; end; end; procedure TfrPedidosProveedores.bFacturarClick(Sender: TObject); var SituacionAux : String; FacturadoAux : boolean; begin FCodigoPedido := TablaPedidosProveedor.FieldByName('CODIGO').AsString; FCodigoProveedor := TablaPedidosProveedor.FieldByName('CODIGOPROVEEDOR').AsString; SituacionAux := dmTablaPedidosProveedor.DarSituacion(EmpresaActiva.Codigo, CodigoPedido); FacturadoAux := dmTablaPedidosProveedor.PedidoFacturado(EmpresaActiva.Codigo, CodigoPedido); if FacturadoAux then begin VerMensajeFmt(msgPedYaFacturado, ['facturado']); Exit; end; if (SituacionAux <> 'TOTALMENTE RECIBIDO') and (SituacionAux <> 'DEVUELTO') then begin VerMensajeFmt(msgPedidoNoFacturar, [LowerCase(SituacionAux)]); exit; end; CaptionModal := 'Hacer factura de pedido a proveedor'; ModoModal := Anadir; EntidadModal := entFacturaProveedor; ContenidoModal := TfrFacturaProveedor.Create(Self); end; procedure TfrPedidosProveedores.gridPedidosCustomDrawCell(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('SITUACION').Index; if UpperCase(ANode.Strings[IndiceCol]) = 'TOTALMENTE RECIBIDO' then AFont.Color := COLOR_RECIBIDO; end; end; procedure TfrPedidosProveedores.Listadodepedidosdeproveedor1Click( Sender: TObject); begin Contenido := TfrListadoPedidosProv.Create(Self); end; procedure TfrPedidosProveedores.cbxAnoChange(Sender: TObject); begin if cbxAno.Text = CTE_TODOS then begin gridPedidos.Filter.Remove(gridPedidos.FindColumnByFieldName(CTE_ANO)); gridPedidos.Filter.Clear; end else begin gridPedidos.Filter.Clear; gridPedidos.Filter.Add(gridPedidos.FindColumnByFieldName(CTE_ANO), cbxAno.Text, cbxAno.Text); end; gridPedidos.SetFocus; gridPedidos.GotoFirst; //Falta seleccionar tupla end; procedure TfrPedidosProveedores.actAnadirExecute(Sender: TObject); begin Contenido := TfrPedidoProveedor.Create(Self); Contenido.Modo := Anadir; Contenido.Visible := True; end; procedure TfrPedidosProveedores.actModificarExecute(Sender: TObject); var SituacionAux : String; FacturadoAux : Boolean; begin CodigoPedido := TablaPedidosProveedor.FieldByName('CODIGO').AsString; SituacionAux := dmTablaPedidosProveedor.DarSituacion(EmpresaActiva.Codigo, CodigoPedido); FacturadoAux := dmTablaPedidosProveedor.PedidoFacturado(EmpresaActiva.Codigo, CodigoPedido); if FacturadoAux then begin VerMensajeFmt(msgPedidoNoModificar, ['facturado']); Exit; end; if (SituacionAux = 'TOTALMENTE RECIBIDO') then begin VerMensajeFmt(msgPedidoNoModificar, ['totalmente recibido']); Exit; end; Contenido := TfrPedidoProveedor.Create(Self); Contenido.Modo := Modificar; Contenido.Visible := True; end; procedure TfrPedidosProveedores.actEliminarExecute(Sender: TObject); var SituacionAux : String; FacturadoAux : boolean; begin CodigoPedido := TablaPedidosProveedor.FieldByName('CODIGO').AsString; SituacionAux := dmTablaPedidosProveedor.DarSituacion(EmpresaActiva.Codigo, CodigoPedido); FacturadoAux := dmTablaPedidosProveedor.PedidoFacturado(EmpresaActiva.Codigo, CodigoPedido); if FacturadoAux then begin VerMensajeFmt(msgPedidoNoEliminar, ['facturado']); Exit; end; if SituacionAux <> 'NO EMITIDO' then begin VerMensajeFmt(msgPedidoNoEliminar, [LowerCase(SituacionAux)]); exit; end; Contenido := TfrPedidoProveedor.Create(Self); Contenido.Modo := Eliminar; Contenido.Visible := True; end; procedure TfrPedidosProveedores.actConsultarExecute(Sender: TObject); begin CodigoPedido := TablaPedidosProveedor.FieldByName('CODIGO').AsString; Contenido := TfrPedidoProveedor.Create(Self); Contenido.Modo := Consultar; Contenido.Visible := True; end; procedure TfrPedidosProveedores.actBuscarExecute(Sender: TObject); begin CodigoPedido := TablaPedidosProveedor.FieldByName('CODIGO').AsString; Contenido := TfrBuscarPedidoProveedor.Create(Self); end; procedure TfrPedidosProveedores.gridPedidosDblClick(Sender: TObject); begin if Modo in [Devolver, Recibir, Seleccionar] then bSeleccionar.Click else bModificar.Click; end; procedure TfrPedidosProveedores.SetContenido(NuevoFrame: TRdxFrame); begin inherited; FCodigoProveedor := TablaPedidosProveedor.FieldByName('CODIGOPROVEEDOR').AsString; if (Contenido is TfrListadoPedidosProv) then (Contenido as TfrListadoPedidosProv).CodigoProveedor := FCodigoProveedor; end; procedure TfrPedidosProveedores.bEnviarCorreoClick(Sender: TObject); var FInforme : TInformePedidoProveedor; Fichero : String; Datos: TDatosCorreo; CodigoProveedor: String; begin FCodigoPedido := TablaPedidosProveedor.FieldByName('CODIGO').AsString; CodigoProveedor := TablaPedidosProveedor.FieldByName('CODIGOPROVEEDOR').AsString; Datos:= Nil; Fichero := CodigoPedido; Fichero := DarRutaTemporal + StringReplace(Fichero, CTE_SEPSERIADO, CTE_SEPSERIADO2, [rfReplaceAll, rfIgnoreCase]); Fichero := Fichero + CTE_DOC; //Generamos el fichero para luego adjuntaro al correo FInforme:= TInformePedidoProveedor.Create(Self); try FInforme.Exportar(FCodigoPedido, Fichero); finally FInforme.Free; end; try //Creamos el correo Datos:= TDatosCorreo.Create; Datos.Direcciones.add(dmTablaProveedores.darCorreo(CodigoProveedor)); Datos.Adjuntos.Add(Fichero); enviarCorreo(Datos); finally FreeAndNil(Datos); end; end; end.