Tecsitel_FactuGES2/Source/Modulos/Unidades de medida/Controller/uUnidadesMedidaController.pas

227 lines
6.2 KiB
ObjectPascal

unit uUnidadesMedidaController;
interface
uses
Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem,
uIDataModuleUnidadesMedida, uBizUnidadesMedida;
type
IUnidadesMedidaController = interface(IControllerBase)
['{8D56360B-0AAA-41FA-9C48-90C586B07E37}']
function BuscarTodos: IBizUnidadMedida;
procedure VerTodos(AUnidadesMedida: IBizUnidadMedida);
procedure Anadir(AUnidadMedida : IBizUnidadMedida);
function Eliminar(AUnidadMedida : IBizUnidadMedida): Boolean;
function Guardar(AUnidadMedida : IBizUnidadMedida): Boolean;
procedure DescartarCambios(AUnidadMedida : IBizUnidadMedida);
function Localizar(AUnidadesMedida: IBizUnidadMedida; ADescripcion:String): Boolean;
function DarListaUnidadesMedida: TStringList;
end;
TUnidadesMedidaController = class(TControllerBase, IUnidadesMedidaController)
protected
FDataModule : IDataModuleUnidadesMedida;
procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override;
function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean;
function ValidarUnidadesMedida(AUnidadMedida: IBizUnidadMedida): Boolean;
//Estos son los tres métodos a sobre escribir si se desea heredar toda la logica de
//este controller
procedure AsignarDataModule; virtual;
public
constructor Create; override;
destructor Destroy; override;
function Eliminar(AUnidadMedida : IBizUnidadMedida): Boolean;
function Guardar(AUnidadMedida : IBizUnidadMedida): Boolean;
procedure DescartarCambios(AUnidadMedida : IBizUnidadMedida); virtual;
procedure Anadir(AUnidadMedida : IBizUnidadMedida);
function BuscarTodos: IBizUnidadMedida;
procedure VerTodos(AUnidadesMedida: IBizUnidadMedida);
function Localizar(AUnidadesMedida: IBizUnidadMedida; ADescripcion:String): Boolean;
function DarListaUnidadesMedida: TStringList;
end;
implementation
uses
cxControls, DB, uEditorRegistryUtils, schUnidadesMedidaClient_Intf,
uIEditorUnidadesMedida, uDataModuleUnidadesMedida,
uDAInterfaces, uDataTableUtils,
uDateUtils, uROTypes, DateUtils, Controls, Windows;
{ TUnidadesMedidaController }
procedure TUnidadesMedidaController.Anadir(AUnidadMedida: IBizUnidadMedida);
begin
AUnidadMedida.Insert;
end;
procedure TUnidadesMedidaController.AsignarDataModule;
begin
FDataModule := TDataModuleUnidadesMedida.Create(Nil);
end;
function TUnidadesMedidaController.BuscarTodos: IBizUnidadMedida;
begin
Result := FDataModule.GetItems;
end;
constructor TUnidadesMedidaController.Create;
begin
inherited;
AsignarDataModule;
end;
function TUnidadesMedidaController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean;
begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end;
function TUnidadesMedidaController.DarListaUnidadesMedida: TStringList;
var
AUnidadesMedida: IBizUnidadMedida;
begin
AUnidadesMedida := BuscarTodos;
AUnidadesMedida.DataTable.Active := True;
Result := TStringList.Create;
try
with Result do
begin
AUnidadesMedida.DataTable.First;
while not AUnidadesMedida.DataTable.EOF do
begin
Add(AUnidadesMedida.DESCRIPCION);
AUnidadesMedida.DataTable.Next;
end;
end;
finally
AUnidadesMedida := NIL;
end;
end;
procedure TUnidadesMedidaController.DescartarCambios(AUnidadMedida: IBizUnidadMedida);
begin
if not Assigned(AUnidadMedida) then
raise Exception.Create ('Almacen no asignado');
ShowHourglassCursor;
try
if (AUnidadMedida.State in dsEditModes) then
AUnidadMedida.Cancel;
AUnidadMedida.DataTable.CancelUpdates;
finally
HideHourglassCursor;
end;
end;
destructor TUnidadesMedidaController.Destroy;
begin
FDataModule := Nil;
inherited;
end;
function TUnidadesMedidaController.ValidarUnidadesMedida(AUnidadMedida: IBizUnidadMedida): Boolean;
begin
Result := False;
if not Assigned(AUnidadMedida) then
raise Exception.Create ('UnidadMedida no asignada');
if (AUnidadMedida.DataTable.State in dsEditModes) then
AUnidadMedida.DataTable.Post;
Result := True;
end;
procedure TUnidadesMedidaController.VerTodos(AUnidadesMedida: IBizUnidadMedida);
var
AEditor : IEditorUnidadesMedida;
begin
AEditor := NIL;
ShowHourglassCursor;
try
CreateEditor('EditorUnidadesMedida', IEditorUnidadesMedida, AEditor);
if Assigned(AEditor) then
with AEditor do
begin
Controller := Self; //OJO ORDEN MUY IMPORTANTE
UnidadesMedida := AUnidadesMedida;
ShowModal;
Release;
end;
finally
AEditor := NIL;
HideHourglassCursor;
end;
end;
function TUnidadesMedidaController.Eliminar(AUnidadMedida: IBizUnidadMedida): Boolean;
begin
if not Assigned(AUnidadMedida) then
raise Exception.Create ('Almacen no asignada');
ShowHourglassCursor;
try
if (AUnidadMedida.State in dsEditModes) then
AUnidadMedida.Cancel;
AUnidadMedida.Delete;
AUnidadMedida.DataTable.ApplyUpdates;
HideHourglassCursor;
Result := True;
finally
HideHourglassCursor;
end;
end;
procedure TUnidadesMedidaController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable);
begin
inherited;
//
end;
function TUnidadesMedidaController.Guardar(AUnidadMedida: IBizUnidadMedida): Boolean;
begin
Result := False;
if not Assigned(AUnidadMedida) then
raise Exception.Create ('Almacen no asignada');
if ValidarUnidadesMedida(AUnidadMedida) then
begin
ShowHourglassCursor;
try
AUnidadMedida.DataTable.ApplyUpdates;
Result := True;
finally
HideHourglassCursor;
end;
end;
end;
function TUnidadesMedidaController.Localizar(AUnidadesMedida: IBizUnidadMedida; ADescripcion: String): Boolean;
begin
Result := True;
ShowHourglassCursor;
try
with AUnidadesMedida.DataTable do
begin
DisableControls;
First;
if not Locate(fld_UnidadesMedidaDESCRIPCION, ADescripcion, []) then
Result := False;
EnableControls;
end;
finally
HideHourglassCursor;
end;
end;
end.