unit uEmpleadosController; interface uses uCustomEditor, uContactosController, uBizContactos, uIEditorEmpleados, uIEditorEmpleado, uIDataModuleContactos, uIDataModuleEmpleados; type IEmpleadosController = interface(IContactosController) ['{A3841871-7EF6-4847-9758-EA2B1C521D4A}'] function EsEliminable(AEmpleado: IBizContacto): Boolean; function Eliminar(AEmpleado: IBizContacto; AllItems: Boolean = false): Boolean; overload; procedure Preview(AEmpleado : IBizEmpleado; AllItems: Boolean = false); procedure Print(AEmpleado : IBizEmpleado; AllItems: Boolean = false); end; TEmpleadosController = class(TContactosController, IEmpleadosController) public constructor Create; override; function Duplicar(AContacto: IBizContacto): IBizContacto; override; function Buscar(const ID: Integer): IBizContacto; override; function BuscarTodos: IBizContacto; override; function Nuevo : IBizContacto; override; procedure Ver(AContacto : IBizContacto); override; procedure VerTodos(AContactos: IBizContacto); override; function Eliminar(AEmpleado: IBizContacto; AllItems: Boolean = false): Boolean; overload; function EsEliminable(AEmpleado: IBizContacto): Boolean; procedure Preview(AEmpleado : IBizEmpleado; AllItems: Boolean = false); procedure Print(AEmpleado : IBizEmpleado; AllItems: Boolean = false); end; implementation uses Classes, Windows, SysUtils, cxControls, Dialogs, uDataModuleEmpleados, uEditorRegistryUtils, uDataTableUtils, uDADataTable, DB, schContactosClient_Intf, uFichasEmpleadoReportController, uEditorGridBase; { TEmpleadoController } function TEmpleadosController.Buscar(const ID: Integer): IBizContacto; begin Result := (FDataModule as IDataModuleEmpleados).GetItem(ID); FiltrarEmpresa(Result); end; function TEmpleadosController.BuscarTodos: IBizContacto; begin Result := (FDataModule as IDataModuleEmpleados).GetItems; FiltrarEmpresa(Result); end; constructor TEmpleadosController.Create; begin inherited; FDataModule := TDataModuleEmpleados.Create(Nil); end; function TEmpleadosController.Duplicar(AContacto: IBizContacto): IBizContacto; begin Result := inherited Duplicar(AContacto); end; function TEmpleadosController.Eliminar(AEmpleado: IBizContacto; AllItems: Boolean = false): Boolean; //En el caso de eliminar almenos un elemento del conjunto se devuelve true var bEliminado: Boolean; begin Result := False; if not Assigned(AEmpleado) then raise Exception.Create ('Contacto no asignado'); ShowHourglassCursor; try if not AEmpleado.DataTable.Active then AEmpleado.DataTable.Active := True; if (AEmpleado.State in dsEditModes) then AEmpleado.Cancel; //Siempre eliminaremos el seleccionado if EsEliminable(AEmpleado) then begin AEmpleado.Delete; bEliminado := True; end; //En el caso de querer eliminar todos los items del objeto AEmpleado if AllItems then begin with AEmpleado.DataTable do begin First; while not EOF do begin if EsEliminable(AEmpleado) then begin AEmpleado.Delete; bEliminado := True end else Next; end; end; end; if bEliminado then begin AEmpleado.DataTable.ApplyUpdates; Result := True; end else Result := False; finally HideHourglassCursor; end; end; function TEmpleadosController.EsEliminable(AEmpleado: IBizContacto): Boolean; begin if not Assigned(AEmpleado) then raise Exception.Create ('Contacto no asignado: EsEliminable'); Result := True; end; function TEmpleadosController.Nuevo: IBizContacto; var AContacto : IBizEmpleado; begin AContacto := (FDataModule as IDataModuleEmpleados).NewItem; FiltrarEmpresa(AContacto); AContacto.DataTable.Active := True; AContacto.Insert; Result := AContacto; end; procedure TEmpleadosController.Preview(AEmpleado: IBizEmpleado; AllItems: Boolean); var AReportController : IFichasEmpleadoReportController; ID_Fichas: TStringList; begin AReportController := TFichasEmpleadoReportController.Create; try ID_Fichas := TStringList.Create; //Si deseamos previsualizar todos los items del objeto albaran if AllItems then begin with AEmpleado.DataTable do begin First; while not EOF do begin ID_Fichas.Add(IntToStr(AEmpleado.ID)); Next; end; end; end //Solo previsualizamos el item seleccionado else ID_Fichas.Add(IntToStr(AEmpleado.ID)); AReportController.Preview(ID_Fichas.CommaText); finally AReportController := NIL; ID_Fichas.Free; end; end; procedure TEmpleadosController.Print(AEmpleado: IBizEmpleado; AllItems: Boolean); var AReportController : IFichasEmpleadoReportController; ID_Fichas: TStringList; begin AReportController := TFichasEmpleadoReportController.Create; try ID_Fichas := TStringList.Create; //Si deseamos previsualizar todos los items del objeto albaran if AllItems then begin with AEmpleado.DataTable do begin First; while not EOF do begin ID_Fichas.Add(IntToStr(AEmpleado.ID)); Next; end; end; end //Solo previsualizamos el item seleccionado else ID_Fichas.Add(IntToStr(AEmpleado.ID)); AReportController.Print(ID_Fichas.CommaText); finally AReportController := NIL; ID_Fichas.Free; end; end; procedure TEmpleadosController.Ver(AContacto: IBizContacto); var AEditor : IEditorEmpleado; begin AEditor := NIL; ShowHourglassCursor; try CreateEditor('EditorEmpleado', IEditorEmpleado, AEditor); with AEditor do begin Contacto := AContacto; Controller := Self; end; finally HideHourglassCursor; end; if Assigned(AEditor) then try AEditor.ShowModal; AEditor.Release; finally AEditor := NIL; end; end; procedure TEmpleadosController.VerTodos(AContactos: IBizContacto); var AEditor : IEditorEmpleados; begin CreateEditor('EditorEmpleados', IEditorEmpleados, AEditor); with AEditor do begin Contactos := AContactos; Controller := Self; MultiSelect := True; ShowEmbedded; end; end; end.