FactuGES2/Source/Modulos/Almacenes/Controller/uAlmacenesController.pas

409 lines
11 KiB
ObjectPascal

unit uAlmacenesController;
interface
uses
Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem,
uIDataModuleAlmacenes, uBizAlmacenes;
type
IAlmacenesController = interface(IControllerBase)
['{1F5E5845-5B29-4C08-87F0-D753E5454068}']
function Buscar(const ID: Integer): IBizAlmacen;
function BuscarTodos: IBizAlmacen;
procedure Ver(AAlmacen : IBizAlmacen);
procedure VerTodos(AAlmacenes: IBizAlmacen);
function VerLista(AAlmacenes: IBizAlmacen): IBizAlmacen;
function Nuevo : IBizAlmacen; overload;
procedure Anadir(AAlmacen : IBizAlmacen);
function Eliminar(const ID : Integer): Boolean; overload;
function Eliminar(AAlmacen : IBizAlmacen): Boolean; overload;
function Guardar(AAlmacen : IBizAlmacen): Boolean;
procedure DescartarCambios(AAlmacen : IBizAlmacen);
function Existe(const ID: Integer) : Boolean;
function Duplicar(AAlmacen: IBizAlmacen): IBizAlmacen;
procedure Preview(AAlmacen : IBizAlmacen);
procedure Print(AAlmacen : IBizAlmacen);
end;
TAlmacenesController = class(TControllerBase, IAlmacenesController)
protected
FDataModule : IDataModuleAlmacenes;
procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override;
// procedure AssignarID(AAlmacen: IBizAlmacen; ADataModule : IDataModuleAlmacenes); virtual;
function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean;
function _Vacio : IBizAlmacen;
procedure FiltrarEmpresa(AAlmacen: IBizAlmacen);
function ValidarAlmacen(AAlmacen: IBizAlmacen): Boolean;
//Estos son los tres métodos a sobre escribir si se desea heredar toda la logica de
//este controller
procedure AsignarDataModule; virtual;
procedure RecuperarObjetos(AAlmacen: IBizAlmacen); virtual;
procedure ValidarObjetos; virtual;
// procedure AsignarCodigo(AAlmacen: IBizAlmacen); virtual;
public
constructor Create; override;
destructor Destroy; override;
function Eliminar(const ID : Integer): Boolean; overload;
function Eliminar(AAlmacen : IBizAlmacen): Boolean; overload;
function Guardar(AAlmacen : IBizAlmacen): Boolean;
procedure DescartarCambios(AAlmacen : IBizAlmacen); virtual;
function Existe(const ID: Integer) : Boolean; virtual;
procedure Anadir(AAlmacen : IBizAlmacen);
function Buscar(const ID: Integer): IBizAlmacen;
function BuscarTodos: IBizAlmacen;
function Nuevo : IBizAlmacen; overload;
procedure Ver(AAlmacen : IBizAlmacen);
procedure VerTodos(AAlmacenes: IBizAlmacen);
function VerLista(AAlmacenes: IBizAlmacen): IBizAlmacen;
function Duplicar(AAlmacen: IBizAlmacen): IBizAlmacen;
procedure Preview(AAlmacen : IBizAlmacen);
procedure Print(AAlmacen : IBizAlmacen);
end;
implementation
uses
cxControls, DB, uEditorRegistryUtils, schAlmacenesClient_Intf,
uIEditorAlmacenes, uIEditorAlmacen, uDataModuleAlmacenes,
uDataModuleUsuarios, uDAInterfaces, uDataTableUtils, uFactuGES_App,
uDateUtils, uROTypes, DateUtils, Controls, Windows, uIEditorListaAlmacenes;
{ TAlmacenesController }
procedure TAlmacenesController.Anadir(AAlmacen: IBizAlmacen);
begin
AAlmacen.Insert;
end;
{procedure TAlmacenesController.AsignarCodigo(AAlmacen: IBizAlmacen);
begin
if (AAlmacen.EsNuevo) then
AssignarID(AAlmacen, (FDataModule as IDataModuleAlmacenes));
end;}
procedure TAlmacenesController.AsignarDataModule;
begin
FDataModule := TDataModuleAlmacenes.Create(Nil);
end;
{procedure TAlmacenesController.AssignarID(AAlmacen: IBizAlmacen; ADataModule : IDataModuleAlmacenes);
var
NuevoIDCabecera : Integer;
begin
if not Assigned(AAlmacen) then
raise Exception.Create ('Almacen no asignada');
NuevoIDCabecera := ADataModule.GetNextID(AAlmacen.DataTable.LogicalName);
AAlmacen.Edit;
AAlmacen.ID := NuevoIDCabecera;
AAlmacen.Post;
end;}
function TAlmacenesController.Buscar(const ID: Integer): IBizAlmacen;
begin
Result := (FDataModule as IDataModuleAlmacenes).GetItem(ID);
// FiltrarEmpresa(Result);
end;
function TAlmacenesController.BuscarTodos: IBizAlmacen;
begin
Result := FDataModule.GetItems;
// FiltrarEmpresa(Result);
end;
constructor TAlmacenesController.Create;
begin
inherited;
AsignarDataModule;
end;
function TAlmacenesController.CreateEditor(const AName: String;
const IID: TGUID; out Intf): Boolean;
begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end;
procedure TAlmacenesController.DescartarCambios(AAlmacen: IBizAlmacen);
begin
if not Assigned(AAlmacen) then
raise Exception.Create ('Almacen no asignado');
ShowHourglassCursor;
try
if (AAlmacen.State in dsEditModes) then
AAlmacen.Cancel;
AAlmacen.DataTable.CancelUpdates;
finally
HideHourglassCursor;
end;
end;
destructor TAlmacenesController.Destroy;
begin
FDataModule := Nil;
inherited;
end;
function TAlmacenesController.Duplicar(AAlmacen: IBizAlmacen): IBizAlmacen;
begin
Result := Self._Vacio;
ShowHourglassCursor;
try
DuplicarRegistros(AAlmacen.DataTable, Result.DataTable, mdrActual);
// Hay que dejar algunos campos como si fuera un almacen nuevo
Result.Edit;
with Result do
begin
ID_EMPRESA := AppFactuGES.EmpresaActiva.ID;
USUARIO := AppFactuGES.UsuarioActivo.UserName;
end;
Result.Post;
finally
HideHourglassCursor;
end;
end;
function TAlmacenesController.ValidarAlmacen(AAlmacen: IBizAlmacen): Boolean;
begin
Result := False;
if not Assigned(AAlmacen) then
raise Exception.Create ('Alamcen no asignado');
if (AAlmacen.DataTable.State in dsEditModes) then
AAlmacen.DataTable.Post;
if Length(AAlmacen.NOMBRE) = 0 then
raise Exception.Create('Debe indicar al menos el nombre de este almacén.');
// Asegurarse de valores en campos "automáticos"
AAlmacen.Edit;
try
AAlmacen.USUARIO := AppFactuGES.UsuarioActivo.UserName;
Result := True;
finally
AAlmacen.Post;
end;
end;
procedure TAlmacenesController.ValidarObjetos;
begin
//
end;
procedure TAlmacenesController.Ver(AAlmacen: IBizAlmacen);
var
AEditor : IEditorAlmacen;
begin
AEditor := NIL;
RecuperarObjetos(AAlmacen);
CreateEditor('EditorAlmacen', IEditorAlmacen, AEditor);
if Assigned(AEditor) then
try
AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE
AEditor.Almacen := AAlmacen;
AEditor.ShowModal;
finally
AEditor.Release;
AEditor := NIL;
end;
end;
function TAlmacenesController.VerLista(AAlmacenes: IBizAlmacen): IBizAlmacen;
var
AEditor : IEditorListaAlmacenes;
begin
AEditor := NIL;
Result := NIL;
CreateEditor('EditorListaAlmacenes', IEditorListaAlmacenes, AEditor);
if Assigned(AEditor) then
try
AEditor.Almacenes := AAlmacenes;
if IsPositiveResult(AEditor.ShowModal) then
Result := AEditor.AlmacenSeleccionado;
finally
AEditor.Release;
AEditor := NIL;
end;
end;
procedure TAlmacenesController.VerTodos(AAlmacenes: IBizAlmacen);
var
AEditor : IEditorAlmacenes;
begin
AEditor := NIL;
CreateEditor('EditorAlmacenes', IEditorAlmacenes, AEditor);
if Assigned(AEditor) then
with AEditor do
begin
Controller := Self; //OJO ORDEN MUY IMPORTANTE
Almacenes := AAlmacenes;
ShowEmbedded;
end;
end;
function TAlmacenesController._Vacio: IBizAlmacen;
begin
Result := Buscar(ID_NULO);
end;
function TAlmacenesController.Eliminar(const ID: Integer): Boolean;
var
AAlmacen : IBizAlmacen;
begin
AAlmacen := Buscar(ID);
if not Assigned(AAlmacen) then
raise Exception.Create(Format('No se ha encontrado el almacen con ID = %d', [ID]));
Result := Eliminar(AAlmacen);
AAlmacen := NIL;
end;
function TAlmacenesController.Eliminar(AAlmacen: IBizAlmacen): Boolean;
begin
Result := False;
if not Assigned(AAlmacen) then
raise Exception.Create ('Almacen no asignada');
ShowHourglassCursor;
try
if (AAlmacen.State in dsEditModes) then
AAlmacen.Cancel;
AAlmacen.Delete;
AAlmacen.DataTable.ApplyUpdates;
HideHourglassCursor;
Result := True;
except
on E: Exception do
begin
AAlmacen.DataTable.CancelUpdates;
HideHourglassCursor;
if (Pos('FOREIGN KEY', E.Message) > 0) then
MessageBox(0, 'No se puede borrar este almacen porque tiene artículos', 'Atención', MB_ICONWARNING or MB_OK);
end;
end;
end;
procedure TAlmacenesController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable);
begin
inherited;
//
end;
procedure TAlmacenesController.RecuperarObjetos(AAlmacen: IBizAlmacen);
begin
//
end;
function TAlmacenesController.Existe(const ID: Integer): Boolean;
var
AAlmacen : IBizAlmacen;
begin
try
AAlmacen := Buscar(ID);
Result := Assigned(AAlmacen) and (AAlmacen.ID = ID);
finally
AAlmacen := NIL;
end;
end;
procedure TAlmacenesController.FiltrarEmpresa(AAlmacen: IBizAlmacen);
var
Condicion: TDAWhereExpression;
begin
if AAlmacen.DataTable.Active then
AAlmacen.DataTable.Active := False;
// Filtrar los Almacenes actuales por empresa
with AAlmacen.DataTable.DynamicWhere do
begin
// (ID_EMPRESA >= ID)
Condicion := NewBinaryExpression(NewField('', fld_AlmacenesID_EMPRESA), NewConstant(AppFactuGES.EmpresaActiva.ID, datInteger), dboEqual);
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
end;
end;
function TAlmacenesController.Guardar(AAlmacen: IBizAlmacen): Boolean;
begin
Result := False;
if not Assigned(AAlmacen) then
raise Exception.Create ('Almacen no asignada');
ValidarObjetos;
if ValidarAlmacen(AAlmacen) then
begin
ShowHourglassCursor;
try
// AsignarCodigo(AAlmacen);
AAlmacen.DataTable.ApplyUpdates;
Result := True;
finally
HideHourglassCursor;
end;
end;
end;
function TAlmacenesController.Nuevo: IBizAlmacen;
var
AAlmacen : IBizAlmacen;
begin
AAlmacen := FDataModule.NewItem;
// FiltrarEmpresa(AAlmacen);
AAlmacen.DataTable.Active := True;
AAlmacen.Insert;
Result := AAlmacen;
end;
procedure TAlmacenesController.Preview(AAlmacen: IBizAlmacen);
//var
// AReportController : IAlmacenesReportController;
begin
{ AReportController := TAlmacenesReportController.Create;
try
AReportController.Preview(AAlmacen.ID);
finally
AReportController := NIL;
end;
}
end;
procedure TAlmacenesController.Print(AAlmacen: IBizAlmacen);
//var
// AReportController : IAlmacenesReportController;
begin
{ AReportController := TAlmacenesReportController.Create;
try
AReportController.Print(AAlmacen.ID);
finally
AReportController := NIL;
end;
}
end;
end.