unit uEditorPedidoCliente; 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, uCustomView, uViewBase, JvComponentBase, StdCtrls, pngimage, AppEvnts, cxControls, cxContainer, cxEdit, cxTextEdit, cxMemo, cxDBEdit, uViewIncidencias, uPedidosClienteController, uViewDetallesBase, uViewDetallesPedidoCliente, dxLayoutLookAndFeels, JvExComCtrls, JvStatusBar, uViewTotales, uIEditorPedidoCliente, uBizPedidosCliente, uViewPedidoCliente; type TfEditorPedidoCliente = class(TfEditorDBItem, IEditorPedidoCliente) pagContenido: TTabSheet; pagInicidencias: TTabSheet; frViewIncidenciasCli: TfrViewIncidencias; dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList; dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel; frViewTotales1: TfrViewTotales; frViewDetallesPedidoCliente1: TfrViewDetallesPedidoCliente; 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: IBizPedidoCliente; FViewPedido: IViewPedidoCliente; FController : IPedidosClienteController; function GetController : IPedidosClienteController; procedure SetController (const Value : IPedidosClienteController); virtual; function GetPedido: IBizPedidoCliente; procedure SetPedido(const Value: IBizPedidoCliente); virtual; function GetViewPedido: IViewPedidoCliente; procedure SetViewPedido(const Value: IViewPedidoCliente); property ViewPedido: IViewPedidoCliente read GetViewPedido write SetViewPedido; procedure OnClienteChanged(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 : IPedidosClienteController read GetController write SetController; property Pedido: IBizPedidoCliente read GetPedido write SetPedido; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation uses uViewDatosYSeleccionCliente, uDataModuleUsuarios; {$R *.dfm} { TfEditorPedidoCliente } { **************************** TfEditorPedidoCliente **************************** } procedure TfEditorPedidoCliente.actGuardarExecute(Sender: TObject); begin inherited; FController.Guardar(FPedido); Modified := False; end; procedure TfEditorPedidoCliente.actImprimirExecute(Sender: TObject); begin inherited; // FController.Print(FPedido); end; procedure TfEditorPedidoCliente.actPrevisualizarExecute(Sender: TObject); begin inherited; // FController.Preview(FPedido); end; procedure TfEditorPedidoCliente.AsignarVista; var AViewPedidoCliente: TfrViewPedidoCliente; begin AViewPedidoCliente := TfrViewPedidoCliente.create(Self); AViewPedidoCliente.Parent := pagGeneral; AViewPedidoCliente.Align := alClient; ViewPedido := AViewPedidoCliente; end; constructor TfEditorPedidoCliente.Create(AOwner: TComponent); begin inherited; pgPaginas.ActivePageIndex := 0; AsignarVista; end; procedure TfEditorPedidoCliente.CustomEditorClose(Sender: TObject; var Action: TCloseAction); begin inherited; FViewPedido := NIL; FPedido := NIL; end; destructor TfEditorPedidoCliente.Destroy; begin // Utilizar mejor OnClose; inherited; end; procedure TfEditorPedidoCliente.actEliminarExecute(Sender: TObject); begin if (Application.MessageBox('¿Desea borrar este pedido a Cliente?', 'Atención', MB_YESNO) = IDYES) then begin FController.Eliminar(FPedido); inherited end end; procedure TfEditorPedidoCliente.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 TfEditorPedidoCliente.GetController: IPedidosClienteController; begin Result := FController; end; function TfEditorPedidoCliente.GetPedido: IBizPedidoCliente; begin Result := FPedido; end; function TfEditorPedidoCliente.GetViewPedido: IViewPedidoCliente; begin Result := FViewPedido; end; procedure TfEditorPedidoCliente.OnClienteChanged(Sender: TObject); begin FPedido.Cliente := ViewPedido.ViewClientePedido.Cliente; end; procedure TfEditorPedidoCliente.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.Cliente.Nombre end; inherited PonerTitulos(FTitulo); Self.Caption := FTitulo + ' (' + dmUsuarios.EmpresaActual.NOMBRE + ')'; end; procedure TfEditorPedidoCliente.SetController(const Value: IPedidosClienteController); begin FController := Value; if Assigned(FController) then begin ViewPedido.ViewClientePedido.Controller := Controller.ClienteController; frViewDetallesPedidoCliente1.Controller := Controller.DetallesController; end; end; procedure TfEditorPedidoCliente.SetPedido(const Value: IBizPedidoCliente); begin FPedido := Value; if Assigned(FPedido) then begin dsDataTable.DataTable := FPedido.DataTable; frViewTotales1.DADataSource.DataTable := dsDataTable.DataTable; frViewIncidenciasCli.DADataSource.DataTable := dsDataTable.DataTable; if Assigned(FViewPedido) then begin FViewPedido.Pedido := FPedido; ViewPedido.ViewClientePedido.Cliente := FPedido.Cliente; ViewPedido.ViewClientePedido.OnClienteChanged := OnClienteChanged; frViewDetallesPedidoCliente1.Detalles := FPedido.Detalles; end; end; end; procedure TfEditorPedidoCliente.SetViewPedido(const Value: IViewPedidoCliente); begin FViewPedido := Value; if Assigned(FViewPedido) and Assigned(Pedido) then FViewPedido.Pedido := Pedido; end; end.