unit uPedidosMontajeController; interface uses uEditorDBItem, uPedidosProveedorController, uMontajesDetallesController, uBizPedidosProveedor, uBizPedidosMontaje; type IPedidosMontajeController = interface(IPedidosProveedorController) ['{2E5321A9-03DC-4E81-A97B-C4D2D1C2ADB9}'] function GetMontajeController: IMontajesDetallesController; procedure SetMontajeController(const Value: IMontajesDetallesController); property MontajeController: IMontajesDetallesController read GetMontajeController write SetMontajeController; function BuscarPedidosMontaje(const ID: Integer): IBizPedidoMontaje; end; TPedidosMontajeController = class(TPedidosProveedorController, IPedidosMontajeController) protected FMontajeController : IMontajesDetallesController; function GetMontajeController: IMontajesDetallesController; procedure SetMontajeController(const Value: IMontajesDetallesController); procedure RecuperarMontaje(APedido : IBizPedidoMontaje); //Estos son los tres métodos a sobre escribir si se desea heredar toda la logica de //este controller procedure AsignarDataModule; override; procedure RecuperarObjetos(APedido: IBizPedidoProveedor); override; procedure AsignarEditor(out AEditor: IEditorDBItem); override; public property MontajeController: IMontajesDetallesController read GetMontajeController write SetMontajeController; function BuscarPedidosMontaje(const ID: Integer): IBizPedidoMontaje; constructor Create; destructor Destroy; override; end; implementation uses uIEditorPedidoMontaje, uDataModulePedidosMontaje, uBizMontajesDetalles, uIDataModulePedidosMontaje; { TPedidosMontajeController } procedure TPedidosMontajeController.AsignarDataModule; begin FDataModule := TDataModulePedidosMontaje.Create(Nil); end; procedure TPedidosMontajeController.AsignarEditor(out AEditor: IEditorDBItem); begin // inherited; No descomentar así crea solo el editor hijo CreateEditor('EditorPedidoMontaje', IEditorPedidoMontaje, AEditor); end; function TPedidosMontajeController.BuscarPedidosMontaje(const ID: Integer): IBizPedidoMontaje; begin Result := (FDataModule as IDataModulePedidosMontaje).GetItemsMontaje(ID); FiltrarEmpresa(Result); end; constructor TPedidosMontajeController.Create; begin inherited; FMontajeController := TMontajesDetallesController.Create; end; destructor TPedidosMontajeController.Destroy; begin FMontajeController := Nil; inherited; end; procedure TPedidosMontajeController.RecuperarMontaje(APedido: IBizPedidoMontaje); begin APedido.Montaje := (FMontajeController.Buscar(APedido.ID_MONTAJE) as IBizMontajeDetalles); end; procedure TPedidosMontajeController.RecuperarObjetos(APedido: IBizPedidoProveedor); begin inherited; if not Assigned((APedido as IBizPedidoMontaje).Montaje) or ((APedido as IBizPedidoMontaje).ID_MONTAJE <> (APedido as IBizPedidoMontaje).Montaje.ID) then RecuperarMontaje((APedido as IBizPedidoMontaje)) end; procedure TPedidosMontajeController.SetMontajeController(const Value: IMontajesDetallesController); begin FMontajeController := Value; end; function TPedidosMontajeController.GetMontajeController: IMontajesDetallesController; begin Result := FMontajeController; end; end.