unit uEditorApunte; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uEditorDBItem, ToolWin, ComCtrls, JvExControls, JvComponent, uBizApuntes, JvNavigationPane, ActnList, uEditorBase, StdActns, TB2Dock, TB2Toolbar, TBX, ImgList, PngImageList, TB2Item, uEditorItem, DB, uDADataTable, uEditorDBBase, JvFormAutoSize, uDAScriptingProvider, uDACDSDataTable, StdCtrls, pngimage, ExtCtrls, TBXDkPanels, JvButton, AppEvnts, uCustomView, uViewBase, JvAppStorage, JvAppRegistryStorage, JvFormPlacement, JvComponentBase, uViewApuntes, uIEditorApunte, uApuntesController, JvExComCtrls, JvStatusBar, dxLayoutLookAndFeels, uDAInterfaces, uViewDetallesGenerico, cxDropDownEdit, cxCalendar, cxDBEdit, dxLayoutControl, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxSpinEdit, cxControls, uViewApunte; type TfEditorApunte = class(TfEditorDBItem, IEditorApunte) dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList; dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel; procedure FormShow(Sender: TObject); procedure dsDataTableDataChange(Sender: TObject; Field: TField); procedure CustomEditorClose(Sender: TObject; var Action: TCloseAction); protected FController : IApuntesController; FApunte: IBizApunte; FViewApunte : IViewApunte; function GetController : IApuntesController; procedure SetController (const Value : IApuntesController); virtual; function GetApunte: IBizApunte; virtual; procedure SetApunte(const Value: IBizApunte); virtual; function GetViewApunte: IViewApunte; procedure SetViewApunte(const Value: IViewApunte); property ViewApunte: IViewApunte read GetViewApunte write SetViewApunte; procedure GuardarInterno; override; procedure EliminarInterno; override; procedure PonerTitulos(const ATitulo: string = ''); override; //Si queremos crear otra vista para el editor heredado solo tendriamos que //sobreescribir este metodo procedure AsignarVista; virtual; public property Apunte: IBizApunte read GetApunte write SetApunte; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation {$R *.dfm} uses uCustomEditor, uDataModuleBase, uFactuGES_App; function ShowEditorApunte (ABizObject : TDADataTableRules): TModalResult; var AEditor: TfEditorApunte; begin AEditor := TfEditorApunte.Create(Application); try AEditor.Apunte := (ABizObject as IBizApunte); Result := AEditor.ShowModal; finally AEditor.Release; end; end; { ******************************* TfEditorApunte ******************************* } function TfEditorApunte.GetApunte: IBizApunte; begin Result := FApunte; end; function TfEditorApunte.GetController: IApuntesController; begin Result := FController; end; function TfEditorApunte.GetViewApunte: IViewApunte; begin Result := FViewApunte; end; procedure TfEditorApunte.GuardarInterno; begin inherited; FController.Guardar(FApunte); Modified := False; end; procedure TfEditorApunte.PonerTitulos(const ATitulo: string); var FTitulo : String; begin if Assigned(Apunte) then begin if Apunte.EsNuevo then FTitulo := 'Nuevo apunte - ' + AppFactuGES.EjercicioActivo.NOMBRE + ' (' + AppFactuGES.EjercicioActivo.ESTADO + ')' else FTitulo := 'Apunte' + ' - ' + AppFactuGES.EjercicioActivo.NOMBRE + ' (' + AppFactuGES.EjercicioActivo.ESTADO + ')'; end; inherited PonerTitulos(FTitulo); end; procedure TfEditorApunte.SetApunte(const Value: IBizApunte); begin FApunte := Value; dsDataTable.DataTable := FApunte.DataTable; if Assigned(FViewApunte) and Assigned(Apunte) then FViewApunte.Apunte := Apunte; end; procedure TfEditorApunte.SetController(const Value: IApuntesController); begin FController := Value; // if Assigned(ViewApunte) then // ViewApunte.Controller := FController; end; procedure TfEditorApunte.SetViewApunte(const Value: IViewApunte); begin FViewApunte := Value; if Assigned(FViewApunte) and Assigned(Apunte) then FViewApunte.Apunte := Apunte; end; procedure TfEditorApunte.FormShow(Sender: TObject); begin inherited; // if not Assigned(FViewApunte) then // raise Exception.Create('No hay ninguna vista asignada'); if not Assigned(Apunte) then raise Exception.Create('No hay ningún apunte asignado'); Apunte.DataTable.Active := True; end; destructor TfEditorApunte.Destroy; begin // Utilizar mejor OnClose; inherited; end; procedure TfEditorApunte.AsignarVista; var AViewApunte: TfrViewApunte; begin AViewApunte := TfrViewApunte.create(Self); with AViewApunte do begin Parent := pagGeneral; Align := alClient; // dxLayoutControlApunte.LookAndFeel := dxLayoutOfficeLookAndFeel1; end; ViewApunte := AViewApunte; end; constructor TfEditorApunte.Create(AOwner: TComponent); begin inherited; FController := TApuntesController.Create; pgPaginas.ActivePageIndex := 0; AsignarVista; end; procedure TfEditorApunte.CustomEditorClose(Sender: TObject; var Action: TCloseAction); begin inherited; dsDataTable.DataTable := NIL; FController := Nil; FViewApunte := NIL; FApunte := NIL; end; procedure TfEditorApunte.dsDataTableDataChange(Sender: TObject; Field: TField); begin inherited; if Assigned(FApunte) and (not (FApunte.DataTable.Fetching) or not (FApunte.DataTable.Opening) or not (FApunte.DataTable.Closing)) then PonerTitulos; end; procedure TfEditorApunte.EliminarInterno; begin if (Application.MessageBox('¿Desea borrar este apunte?', 'Atención', MB_YESNO) = IDYES) then begin inherited; if not FController.Eliminar(FApunte) then actRefrescar.Execute; end; end; end.