unit uEditorPedidoProveedor; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uEditorDBItem, DB, uDADataTable, JvAppStorage, JvAppRegistryStorage, JvComponent, JvFormPlacement, ImgList, PngImageList, StdActns, ActnList, ComCtrls, TBX, TB2Item, TB2Dock, TB2Toolbar, ExtCtrls, JvExControls, JvNavigationPane, uViewPedidoProveedor, uCustomView, uViewBase, JvComponentBase, StdCtrls, pngimage, AppEvnts, cxControls, cxContainer, cxEdit, cxTextEdit, cxMemo, cxDBEdit, uViewTotalPedido, uViewIncidencias, uBizPedidosProveedor, uIEditorPedidoProveedor, uPedidosProveedorController, uViewDetallesBase, uViewDetallesPedidoProveedor, uViewDocumentosAsociados, uBizDocumentosAsociados, dxLayoutLookAndFeels, JvExComCtrls, JvStatusBar; type TfEditorPedidoProveedor = class(TfEditorDBItem, IEditorPedidoProveedor) pagContenido: TTabSheet; frViewTotalPedido: TfrViewTotalPedido; pagInicidencias: TTabSheet; frViewIncidencias: TfrViewIncidencias; frViewDetallesPedidoProveedor1: TfrViewDetallesPedidoProveedor; pagDocumentos: TTabSheet; frViewDocumentosAsociados1: TfrViewDocumentosAsociados; dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList; dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel; procedure FormShow(Sender: TObject); override; procedure actGuardarExecute(Sender: TObject); procedure actEliminarExecute(Sender: TObject); procedure CustomEditorClose(Sender: TObject; var Action: TCloseAction); procedure actPrevisualizarExecute(Sender: TObject); procedure actImprimirExecute(Sender: TObject); // procedure frViewDatosYSeleccionContactoedtlNombrePropertiesChange(Sender: TObject); private FViewDocumentos : IViewDocumentosAsociados; protected FPedido: IBizPedidoProveedor; FViewPedido: IViewPedidoProveedor; FController : IPedidosProveedorController; function GetController : IPedidosProveedorController; procedure SetController (const Value : IPedidosProveedorController); virtual; function GetPedido: IBizPedidoProveedor; procedure SetPedido(const Value: IBizPedidoProveedor); virtual; function GetViewPedido: IViewPedidoProveedor; procedure SetViewPedido(const Value: IViewPedidoProveedor); property ViewPedido: IViewPedidoProveedor read GetViewPedido write SetViewPedido; //DOCUMENTOS ASOCIADOS function GetViewDocumentos: IViewDocumentosAsociados; procedure SetViewDocumentos(const Value: IViewDocumentosAsociados); property ViewDocumentos: IViewDocumentosAsociados read GetViewDocumentos write SetViewDocumentos; procedure OnProveedorChanged(Sender : TObject); //Si queremos crear otra vista para el editor heredado solo tendriamos que //sobreescribir este metodo procedure AsignarVista; virtual; public procedure PonerTitulos(const ATitulo: string = ''); override; property Controller : IPedidosProveedorController read GetController write SetController; property Pedido: IBizPedidoProveedor read GetPedido write SetPedido; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation uses uViewDatosYSeleccionProveedor, uDataModuleUsuarios; {$R *.dfm} { TfEditorPedidoProveedor } { **************************** TfEditorPedidoProveedor **************************** } procedure TfEditorPedidoProveedor.actGuardarExecute(Sender: TObject); begin inherited; FController.Guardar(FPedido); Modified := False; end; procedure TfEditorPedidoProveedor.actImprimirExecute(Sender: TObject); begin inherited; FController.Print(FPedido); end; procedure TfEditorPedidoProveedor.actPrevisualizarExecute(Sender: TObject); begin inherited; FController.Preview(FPedido); end; procedure TfEditorPedidoProveedor.AsignarVista; var AViewPedidoProveedor: TfrViewPedidoProveedor; begin AViewPedidoProveedor := TfrViewPedidoProveedor.create(Self); AViewPedidoProveedor.Parent := pagGeneral; AViewPedidoProveedor.Align := alClient; ViewPedido := AViewPedidoProveedor; end; constructor TfEditorPedidoProveedor.Create(AOwner: TComponent); begin inherited; pgPaginas.ActivePageIndex := 0; AsignarVista; //DOCUMENTOS ASOCIADOS // FViewDocumentos := Nil; FViewDocumentos := frViewDocumentosAsociados1; end; procedure TfEditorPedidoProveedor.CustomEditorClose(Sender: TObject; var Action: TCloseAction); begin inherited; FViewPedido := NIL; FPedido := NIL; //DOCUMENTOS ASOCIADOS FViewDocumentos.DeshabilitarDocumentos; FViewDocumentos := NIL; end; destructor TfEditorPedidoProveedor.Destroy; begin // Utilizar mejor OnClose; inherited; end; procedure TfEditorPedidoProveedor.actEliminarExecute(Sender: TObject); begin if (Application.MessageBox('¿Desea borrar este pedido a proveedor?', 'Atención', MB_YESNO) = IDYES) then begin FController.Eliminar(FPedido); inherited end end; procedure TfEditorPedidoProveedor.FormShow(Sender: TObject); begin inherited; if not Assigned(FViewPedido) then raise Exception.Create('No hay ninguna vista asignada'); if not Assigned(Pedido) then raise Exception.Create('No hay ningún pedido asignado'); //DOCUMENTOS ASOCIADOS if Assigned(Pedido.GestorDocumentos) then begin ViewDocumentos := CreateView(TfrViewDocumentosAsociados) as IViewDocumentosAsociados; ViewDocumentos.ShowEmbedded(pagDocumentos); end; Pedido.DataTable.Active := True; pgPaginas.ActivePage := pagGeneral; end; function TfEditorPedidoProveedor.GetController: IPedidosProveedorController; begin Result := FController; end; function TfEditorPedidoProveedor.GetPedido: IBizPedidoProveedor; begin Result := FPedido; end; function TfEditorPedidoProveedor.GetViewDocumentos: IViewDocumentosAsociados; begin Result := FViewDocumentos; end; function TfEditorPedidoProveedor.GetViewPedido: IViewPedidoProveedor; begin Result := FViewPedido; end; procedure TfEditorPedidoProveedor.OnProveedorChanged(Sender: TObject); begin FPedido.Proveedor := ViewPedido.ViewProveedorPedido.Proveedor; end; procedure TfEditorPedidoProveedor.PonerTitulos(const ATitulo: string); var FTitulo : String; begin FTitulo := ATitulo; if (FTitulo = '') and Assigned(FPedido) then begin if FPedido.EsNuevo then FTitulo := 'Nuevo pedido' else FTitulo := 'Pedido' + ' - ' + FPedido.Proveedor.Nombre end; inherited PonerTitulos(FTitulo); Self.Caption := FTitulo + ' (' + dmUsuarios.EmpresaActual.NOMBRE + ')'; end; procedure TfEditorPedidoProveedor.SetController(const Value: IPedidosProveedorController); begin FController := Value; if Assigned(FController) then begin ViewPedido.ViewProveedorPedido.Controller := Controller.ProveedorController; frViewDetallesPedidoProveedor1.Controller := Controller.DetallesController; end; end; procedure TfEditorPedidoProveedor.SetPedido(const Value: IBizPedidoProveedor); begin FPedido := Value; if Assigned(FPedido) then begin dsDataTable.DataTable := FPedido.DataTable; frViewTotalPedido.DADataSource.DataTable := dsDataTable.DataTable; frViewIncidencias.DADataSource.DataTable := dsDataTable.DataTable; if Assigned(FViewPedido) then begin FViewPedido.Pedido := FPedido; ViewPedido.ViewProveedorPedido.Proveedor := FPedido.Proveedor; ViewPedido.ViewProveedorPedido.OnProveedorChanged := OnProveedorChanged; frViewDetallesPedidoProveedor1.Detalles := FPedido.Detalles; end; //DOCUMENTOS ASOCIADOS if Assigned(FViewDocumentos) then begin if Assigned((Pedido as IBizDocumentosAsociados).GestorDocumentos) then begin FViewDocumentos.GestorDocumentos := (Pedido as IBizDocumentosAsociados).GestorDocumentos; FViewDocumentos.GestorDocumentos.ModoInsert := (Pedido.DataTable.State = dsInsert); pagDocumentos.TabVisible := True; end else begin Showmessage('La ruta de documentos asociados no es accesible, se procederá a desactivar la funcionalidad'); pagDocumentos.TabVisible := False; end; end; end; end; procedure TfEditorPedidoProveedor.SetViewDocumentos(const Value: IViewDocumentosAsociados); begin FViewDocumentos := Value; if Assigned(FViewDocumentos) and Assigned(Pedido) then if Assigned((Pedido as IBizDocumentosASociados).GestorDocumentos) then FViewDocumentos.GestorDocumentos := (Pedido as IBizDocumentosASociados).GestorDocumentos; end; procedure TfEditorPedidoProveedor.SetViewPedido(const Value: IViewPedidoProveedor); begin FViewPedido := Value; if Assigned(FViewPedido) and Assigned(Pedido) then FViewPedido.Pedido := Pedido; end; end.