This repository has been archived on 2024-11-28. You can view files and clone it, but cannot push or open issues or pull requests.
LuisLeon_FactuGES/Source/Modulos/Contactos/Controller/uAgentesController.pas
2007-06-11 15:29:06 +00:00

159 lines
4.1 KiB
ObjectPascal

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.