unit uAgentesController; interface uses uCustomEditor, uContactosController, uBizContactos, uIEditorAgentes, uIEditorAgente, uIDataModuleContactos, uIDataModuleAgentes; type IAgentesController = interface(IContactosController) ['{23016B7A-1FDA-4092-ACE5-D27D3A50F236}'] end; TAgentesController = class(TContactosController, IAgentesController) protected procedure AsignarID(AContacto: IBizContacto; const IDNuevo: Integer); override; 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(AContacto: IBizContacto): Boolean; override; end; implementation uses Windows, SysUtils, cxControls, Dialogs, uDataModuleAgentes, uEditorRegistryUtils, uDataTableUtils, uDADataTable, DB, schContactosClient_Intf; { TAgentesController } procedure TAgentesController.AsignarID(AContacto: IBizContacto; const IDNuevo: Integer); begin if not Assigned(AContacto) then raise Exception.Create ('Contacto no asignado'); { Los datos de comisiones hay que comprobarlos siempre tanto en inserción como en modificación. } with (AContacto as IBizAgente) do if Assigned(Comisiones) then AsignarIDDetalles(AContacto, IDNuevo, Comisiones.DataTable); inherited; end; function TAgentesController.Buscar(const ID: Integer): IBizContacto; begin Result := (FDataModule as IDataModuleAgentes).GetItem(ID); FiltrarEmpresa(Result); end; function TAgentesController.BuscarTodos: IBizContacto; begin Result := (FDataModule as IDataModuleAgentes).GetItems; FiltrarEmpresa(Result); end; constructor TAgentesController.Create; begin inherited; FDataModule := TDataModuleAgentes.Create(Nil); end; function TAgentesController.Duplicar(AContacto: IBizContacto): IBizContacto; begin Result := inherited Duplicar(AContacto); if Assigned((Result as IBizAgente).Comisiones) then DuplicarRegistros((AContacto as IBizAgente).Comisiones.DataTable, (Result as IBizAgente).Comisiones.DataTable, mdrTodos); end; function TAgentesController.Eliminar(AContacto: IBizContacto): Boolean; begin Result := False; if not Assigned(AContacto) then raise Exception.Create ('Contacto no asignado'); ShowHourglassCursor; try if (AContacto.State in dsEditModes) then AContacto.Cancel; AContacto.Delete; AContacto.DataTable.ApplyUpdates; HideHourglassCursor; Result := True; except on E: Exception do begin AContacto.DataTable.CancelUpdates; HideHourglassCursor; if (Pos('FOREIGN KEY', E.Message) > 0) then MessageBox(0, 'No se puede borrar este agente porque tiene documentos dados de alta (como liquidaciones de comisiones, asignado a un cliente, etc)', 'Atención', MB_ICONWARNING or MB_OK); end; end; end; function TAgentesController.Nuevo: IBizContacto; var AContacto : IBizAgente; begin AContacto := (FDataModule as IDataModuleAgentes).NewItem; FiltrarEmpresa(AContacto); AContacto.DataTable.Active := True; AContacto.Insert; Result := AContacto; end; procedure TAgentesController.Ver(AContacto: IBizContacto); var AEditor : IEditorAgente; begin AEditor := NIL; ShowHourglassCursor; try CreateEditor('EditorAgente', IEditorAgente, 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 TAgentesController.VerTodos(AContactos: IBizContacto); var AEditor : IEditorAgentes; begin CreateEditor('EditorAgentes', IEditorAgentes, AEditor); with AEditor do begin Contactos := AContactos; Controller := Self; ShowEmbedded; end; end; end.