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, uViewIncidencias, uBizPedidosProveedor, uIEditorPedidoProveedor, uPedidosProveedorController, uViewDetallesBase, uViewDetallesPedidoProveedor, dxLayoutLookAndFeels, JvExComCtrls, JvStatusBar, uViewTotales; type TfEditorPedidoProveedor = class(TfEditorDBItem, IEditorPedidoProveedor) pagContenido: TTabSheet; pagInicidencias: TTabSheet; frViewIncidenciasProv: TfrViewIncidencias; frViewDetallesPedidoProveedor1: TfrViewDetallesPedidoProveedor; dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList; dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel; frViewTotales1: TfrViewTotales; 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); 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; 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; end; procedure TfEditorPedidoProveedor.CustomEditorClose(Sender: TObject; var Action: TCloseAction); begin inherited; FViewPedido := NIL; FPedido := 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'); 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.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; frViewTotales1.DADataSource.DataTable := dsDataTable.DataTable; frViewIncidenciasProv.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; end; end; procedure TfEditorPedidoProveedor.SetViewPedido(const Value: IViewPedidoProveedor); begin FViewPedido := Value; if Assigned(FViewPedido) and Assigned(Pedido) then FViewPedido.Pedido := Pedido; end; end.