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

418 lines
11 KiB
ObjectPascal
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

unit uAlmacenesController;
interface
uses
Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem,
uIDataModuleAlmacenes, uBizAlmacenes;
type
IAlmacenesController = interface(IObservador)
['{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(TObservador, 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; virtual;
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
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 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 : IEditorDBItem;
begin
AEditor := NIL;
ShowHourglassCursor;
try
RecuperarObjetos(AAlmacen);
CreateEditor('EditorAlmacen', IEditorAlmacen, AEditor);
if Assigned(AEditor) then
with (AEditor as IEditorAlmacen) do
begin
Controller := Self; //OJO ORDEN MUY IMPORTANTE
Almacen := AAlmacen;
ShowModal;
Release;
end;
finally
AEditor := NIL;
HideHourglassCursor;
end;
end;
function TAlmacenesController.VerLista(AAlmacenes: IBizAlmacen): IBizAlmacen;
var
AEditor : IEditorListaAlmacenes;
begin
AEditor := NIL;
Result := NIL;
ShowHourglassCursor;
try
CreateEditor('EditorListaAlmacenes', IEditorListaAlmacenes, AEditor);
if Assigned(AEditor) then
with AEditor do
begin
Almacenes := AAlmacenes;
if IsPositiveResult(ShowModal) then
Result := AlmacenSeleccionado;
Release;
end;
finally
AEditor := NIL;
HideHourglassCursor;
end;
end;
procedure TAlmacenesController.VerTodos(AAlmacenes: IBizAlmacen);
var
AEditor : IEditorAlmacenes;
begin
AEditor := NIL;
ShowHourglassCursor;
try
CreateEditor('EditorAlmacenes', IEditorAlmacenes, AEditor);
if Assigned(AEditor) then
with AEditor do
begin
Controller := Self; //OJO ORDEN MUY IMPORTANTE
Almacenes := AAlmacenes;
ShowEmbedded;
end;
finally
HideHourglassCursor;
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
if (AAlmacen.DataTable.State in dsEditModes) then
AAlmacen.DataTable.Post;
// 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.