unit uEditorEjercicio; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uEditorDBItem, ToolWin, ComCtrls, JvExControls, JvComponent, uViewEjercicio, uBizEjercicios, 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, uViewEjercicios, uIEditorEjercicio, uEjerciciosController, JvExComCtrls, JvStatusBar, dxLayoutLookAndFeels, uDAInterfaces, JSDialog, dxGDIPlusClasses; type TfEditorEjercicio = class(TfEditorDBItem, IEditorEjercicio) dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList; dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel; JsNuevoEjercicioDialog: TJSDialog; procedure FormShow(Sender: TObject); procedure dsDataTableDataChange(Sender: TObject; Field: TField); procedure CustomEditorClose(Sender: TObject; var Action: TCloseAction); protected FController : IEjerciciosController; FEjercicio: IBizEjercicio; FViewEjercicio : IViewEjercicio; function GetController : IEjerciciosController; procedure SetController (const Value : IEjerciciosController); virtual; function GetEjercicio: IBizEjercicio; virtual; procedure SetEjercicio(const Value: IBizEjercicio); virtual; function GetViewEjercicio: IViewEjercicio; procedure SetViewEjercicio(const Value: IViewEjercicio); property ViewEjercicio: IViewEjercicio read GetViewEjercicio write SetViewEjercicio; 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 Ejercicio: IBizEjercicio read GetEjercicio write SetEjercicio; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation {$R *.dfm} uses uCustomEditor, uDataModuleEjercicios, uDataModuleBase, uDialogUtils; function ShowEditorEjercicio (ABizObject : TDADataTableRules): TModalResult; var AEditor: TfEditorEjercicio; begin AEditor := TfEditorEjercicio.Create(Application); try AEditor.Ejercicio := (ABizObject as IBizEjercicio); Result := AEditor.ShowModal; finally AEditor.Release; end; end; { ******************************* TfEditorEjercicio ******************************* } function TfEditorEjercicio.GetEjercicio: IBizEjercicio; begin Result := FEjercicio; end; function TfEditorEjercicio.GetController: IEjerciciosController; begin Result := FController; end; function TfEditorEjercicio.GetViewEjercicio: IViewEjercicio; begin Result := FViewEjercicio; end; procedure TfEditorEjercicio.GuardarInterno; var bEsNuevo: Boolean; Respuesta : Integer; AEjercicio: IBizEjercicio; begin inherited; bEsNuevo := FEjercicio.EsNuevo; //Si el ejercicio guardado es nuevo generamos el pgc if bEsNuevo then begin Respuesta := JsNuevoEjercicioDialog.Execute; if Respuesta <> IDCANCEL then begin case JsNuevoEjercicioDialog.CustomButtonResult of 300 : begin // No generar PGC FController.Guardar(FEjercicio); end; 200 : begin // Utilizar un ejercicio anterior para copiar el PGC, OJO ORDEN MUY IMPORTANTE AEjercicio := FController.ElegirEjercicio(FController.BuscarTodos); if Assigned(AEjercicio) then begin FController.Guardar(FEjercicio); FController.GenerarPCG(AEjercicio.ID, FEjercicio.ID); end; end; 100 : begin // Utilizar el PGC base OJO ORDEN MUY IMPORTANTE FController.Guardar(FEjercicio); FController.GenerarPCG(0, FEjercicio.ID); end; end; end; end //Es una modificación else FController.Guardar(FEjercicio); Modified := False; RefrescarInterno; //Es necesario sino no se actualiza el campo ACTIVO de todas las tuplas end; procedure TfEditorEjercicio.PonerTitulos(const ATitulo: string); var FTitulo : String; begin if Assigned(Ejercicio) then begin if Ejercicio.EsNuevo then FTitulo := 'Nuevo ejercicio' else FTitulo := 'Ejercicio' + ' - ' + Ejercicio.NOMBRE; end; inherited PonerTitulos(FTitulo); end; procedure TfEditorEjercicio.SetEjercicio(const Value: IBizEjercicio); begin FEjercicio := Value; dsDataTable.DataTable := FEjercicio.DataTable; if Assigned(FViewEjercicio) and Assigned(Ejercicio) then FViewEjercicio.Ejercicio := Ejercicio; end; procedure TfEditorEjercicio.SetController(const Value: IEjerciciosController); begin FController := Value; end; procedure TfEditorEjercicio.SetViewEjercicio(const Value: IViewEjercicio); begin FViewEjercicio := Value; if Assigned(FViewEjercicio) and Assigned(Ejercicio) then FViewEjercicio.Ejercicio := Ejercicio; end; procedure TfEditorEjercicio.FormShow(Sender: TObject); begin inherited; if not Assigned(FViewEjercicio) then raise Exception.Create('No hay ninguna vista asignada'); if not Assigned(Ejercicio) then raise Exception.Create('No hay ningún almacén asignado'); Ejercicio.DataTable.Active := True; end; destructor TfEditorEjercicio.Destroy; begin // Utilizar mejor OnClose; inherited; end; procedure TfEditorEjercicio.AsignarVista; var AViewEjercicio: TfrViewEjercicio; begin AViewEjercicio := TfrViewEjercicio.create(Self); with AViewEjercicio do begin Parent := pagGeneral; Align := alClient; // dxLayoutControlEjercicio.LookAndFeel := dxLayoutOfficeLookAndFeel1; end; ViewEjercicio := AViewEjercicio; end; constructor TfEditorEjercicio.Create(AOwner: TComponent); begin inherited; pgPaginas.ActivePageIndex := 0; AsignarVista; end; procedure TfEditorEjercicio.CustomEditorClose(Sender: TObject; var Action: TCloseAction); begin inherited; dsDataTable.DataTable := NIL; FViewEjercicio := NIL; FEjercicio := NIL; end; procedure TfEditorEjercicio.dsDataTableDataChange(Sender: TObject; Field: TField); begin inherited; if Assigned(FEjercicio) and (not (FEjercicio.DataTable.Fetching) or not (FEjercicio.DataTable.Opening) or not (FEjercicio.DataTable.Closing)) then PonerTitulos; end; procedure TfEditorEjercicio.EliminarInterno; begin if (ShowConfirmMessage('Eliminar un ejercicio', '¿Desea borrar este ejercicio?' + #10#13 + 'Tenga en cuenta que se eliminará también todo el plan general contable asociado al ejercicio.') = IDYES) then begin inherited; if not FController.Eliminar(FEjercicio) then actRefrescar.Execute; end; end; end.