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/Modulos/Inventario/Controller/uInventarioController.pas
2007-06-11 15:35:41 +00:00

647 lines
18 KiB
ObjectPascal
Raw Blame History

unit uInventarioController;
interface
uses
Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem,
uIDataModuleInventario, uBizInventario, uArticulosProveedorController,
uAlmacenesController;
type
IInventarioController = interface(IObservador)
['{FB1DE6BA-ADCC-4A83-B4D4-37DC5892766B}']
procedure Anadir(AInventario : IBizInventario);
function Eliminar(AInventario : IBizInventario; Todos: Boolean; ApplyUpdates: Boolean): Boolean;
function Trasladar(AInventario : IBizInventario; Todos: Boolean): Boolean;
// procedure RecibirArticulos(Const APedido: IBizPedidosProveedor; Const CodigoAlmacenDes: Integer); overload;
procedure RecibirArticulos(Const CodigoAlmacenDes: Integer); overload;
procedure GuardarArticulosUnitarios(AInventario : IBizInventario);
// function Trasladar: Boolean;
// function Liberar: Boolean;
// function Reservar(Const AMontaje: IBizMontaje): Boolean; overload;
// function Reservar(Const CodigoMontaje: Integer): Boolean; overload;
// function Eliminar: Boolean;
function Buscar(const ID: Integer): IBizInventario;
function BuscarTodos: IBizInventario;
procedure VerTodos(AInventario: IBizInventario);
procedure Ver(AInventario : IBizInventario);
function ExtraerSeleccionados(AArticulos: IBizInventario) : IBizInventario;
{
function Nuevo : IBizArticulo; overload;
procedure Anadir(AArticulo : IBizArticulo);
procedure Eliminar(const ID : Integer); overload;
function Eliminar(AArticulo : IBizArticulo): Boolean; overload;
procedure Guardar(AArticulo : IBizArticulo);
procedure DescartarCambios(AArticulo : IBizArticulo);
function Existe(const ID: Integer) : Boolean;
function Duplicar(AArticulo: IBizArticulo): IBizArticulo;
procedure Preview(AArticulo : IBizArticulo);
procedure Print(AArticulo : IBizArticulo);
}
end;
TInventarioController = class(TObservador, IInventarioController)
private
FAlmacenesController: IAlmacenesController;
FArticulosController : IArticulosProveedorController;
function GetAlmacenesController: IAlmacenesController;
function GetArticulosController: IArticulosProveedorController;
procedure SetAlmacenesController(const Value: IAlmacenesController);
procedure SetArticulosController(const Value: IArticulosProveedorController);
protected
FDataModule : IDataModuleInventario;
procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override;
procedure AssignarID(AInventario: IBizInventario; ADataModule : IDataModuleInventario); virtual;
function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean;
function _Vacio : IBizInventario;
procedure FiltrarEmpresa(AInventario: IBizInventario);
function ValidarInventario(AInventario: IBizInventario): 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(AInventario: IBizInventario); virtual;
procedure AsignarEditor(out AEditor: IEditorDBItem); virtual;
procedure ValidarObjetos; virtual;
procedure AsignarCodigo(AInventario: IBizInventario); virtual;
public
property AlmacenesController: IAlmacenesController read GetAlmacenesController write SetAlmacenesController;
property ArticulosController: IArticulosProveedorController read GetArticulosController write SetArticulosController;
constructor Create;
destructor Destroy; override;
procedure Anadir(AInventario : IBizInventario);
function Eliminar(AInventario : IBizInventario; Todos: Boolean; ApplyUpdates: Boolean): Boolean;
function Trasladar(AInventario : IBizInventario; Todos: Boolean): Boolean;
procedure RecibirArticulos(Const CodigoAlmacenDes: Integer); overload;
procedure GuardarArticulosUnitarios(AInventario : IBizInventario);
// function Liberar: Boolean;
// function Reservar(Const AMontaje: IBizMontaje): Boolean; overload;
// function Reservar(Const CodigoMontaje: Integer): Boolean; overload;
// function Eliminar: Boolean;
function Buscar(const ID: Integer): IBizInventario;
function BuscarTodos: IBizInventario;
procedure VerTodos(AInventario: IBizInventario);
procedure Ver(AInventario : IBizInventario);
function ExtraerSeleccionados(AArticulos: IBizInventario) : IBizInventario;
{
procedure Eliminar(const ID : Integer); overload;
procedure Guardar(AArticulo : IBizArticulo); virtual;
procedure DescartarCambios(AArticulo : IBizArticulo); virtual;
function Existe(const ID: Integer) : Boolean; virtual;
function Buscar(const ID: Integer): IBizArticulo;
function BuscarTodos: IBizArticulo;
function Duplicar(AArticulo: IBizArticulo): IBizArticulo;
procedure Preview(AArticulo : IBizArticulo);
procedure Print(AArticulo : IBizArticulo);
}
end;
implementation
uses
cxControls, DB, schInventarioClient_Intf, uEditorRegistryUtils,
uIEditorInventario, uDataModuleInventario,
uDataModuleUsuarios, uDAInterfaces, uDataTableUtils,
uDateUtils, uROTypes, DateUtils, Controls, Windows,
dialogs,
uBizAlmacenes, uBizArticulosProveedor, uIEditorEntradaArticulosInventario;
{ TInventarioController }
{
procedure TInventarioController.Anadir(AArticulo: IBizArticulo);
begin
AArticulo.Insert;
end;
}
procedure TInventarioController.Anadir(AInventario: IBizInventario);
var
AArticulos: IBizArticuloProveedor;
begin
//Todos los cambios ser<65>n en cach<63> hasta que el usuario decida guardar
AArticulos := (FArticulosController.BuscarTodos as IBizArticuloProveedor);
AArticulos := FArticulosController.ElegirArticulos(AArticulos, '', True);
if Assigned(AArticulos) then
AInventario.Copiar(AArticulos)
end;
procedure TInventarioController.AsignarCodigo(AInventario: IBizInventario);
begin
if (AInventario.EsNuevo) then
AssignarID(AInventario, (FDataModule as IDataModuleInventario));
end;
procedure TInventarioController.AsignarDataModule;
begin
FDataModule := TDataModuleInventario.Create(Nil);
end;
procedure TInventarioController.AsignarEditor(out AEditor: IEditorDBItem);
begin
CreateEditor('EditorEntradaArticulosInventario', IEditorEntradaArticulosInventario, AEditor);
end;
procedure TInventarioController.AssignarID(AInventario: IBizInventario; ADataModule : IDataModuleInventario);
var
NuevoIDCabecera : Integer;
begin
if not Assigned(AInventario) then
raise Exception.Create ('Inventario no asignada');
NuevoIDCabecera := ADataModule.GetNextID(AInventario.DataTable.LogicalName);
AInventario.Edit;
AInventario.ID := NuevoIDCabecera;
AInventario.Post;
end;
function TInventarioController.Buscar(const ID: Integer): IBizInventario;
begin
Result := (FDataModule as IDataModuleInventario).GetItem(ID);
FiltrarEmpresa(Result);
end;
function TInventarioController.BuscarTodos: IBizInventario;
begin
Result := FDataModule.GetItems;
FiltrarEmpresa(Result);
end;
constructor TInventarioController.Create;
begin
AsignarDataModule;
FArticulosController := TArticulosProveedorController.Create;
FAlmacenesController := TAlmacenesController.Create;
end;
function TInventarioController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean;
begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end;
{
procedure TInventarioController.DescartarCambios(AArticulo: IBizArticulo);
begin
if not Assigned(AArticulo) then
raise Exception.Create ('Articulo no asignado');
ShowHourglassCursor;
try
if (AArticulo.State in dsEditModes) then
AArticulo.Cancel;
AArticulo.DataTable.CancelUpdates;
finally
HideHourglassCursor;
end;
end;
}
destructor TInventarioController.Destroy;
begin
FDataModule := Nil;
FArticulosController := Nil;
FAlmacenesController := Nil;
inherited;
end;
function TInventarioController.Eliminar(AInventario: IBizInventario; Todos: Boolean; ApplyUpdates: Boolean): Boolean;
begin
Result := False;
if Assigned(AInventario) then
begin
ShowHourglassCursor;
try
if Todos
then AInventario.DataTable.ClearRows
else AInventario.DataTable.Delete;
if ApplyUpdates then
AInventario.DataTable.ApplyUpdates;
Result := True;
finally
HideHourglassCursor;
end;
end;
end;
function TInventarioController.ExtraerSeleccionados(AArticulos: IBizInventario): IBizInventario;
var
ASeleccionados : IBizInventario;
begin
ASeleccionados := (Self.Buscar(ID_NULO) as IBizInventario);
CopyDataTable(AArticulos.DataTable, ASeleccionados.DataTable, True);
Result := ASeleccionados;
end;
{
function TInventarioController.Eliminar: Boolean;
begin
end;
function TInventarioController.Liberar: Boolean;
begin
end;
}
{
function TInventarioController.Duplicar(AArticulo: IBizArticulo): IBizArticulo;
begin
Result := Self._Vacio;
ShowHourglassCursor;
try
DuplicarRegistros(AArticulo.DataTable, Result.DataTable, mdrActual);
// Hay que dejar algunos campos como si fuera un art<72>culo nuevo
Result.Edit;
with Result do
begin
ID_EMPRESA := dmUsuarios.IDEmpresaActual;
USUARIO := dmUsuarios.LoginInfo.Usuario;
end;
Result.Post;
finally
HideHourglassCursor;
end;
end;
}
function TInventarioController.ValidarInventario(AInventario: IBizInventario): Boolean;
begin
{ Result := False;
// Asegurarse de valores en campos "autom<6F>ticos"
AInventario.Edit;
try
AInventario.USUARIO := dmUsuarios.LoginInfo.Usuario;
}
Result := True;
{ finally
AInventario.Post;
end;
}
end;
procedure TInventarioController.ValidarObjetos;
begin
//
end;
{
procedure TInventarioController.Ver(AArticulo: IBizArticulo);
var
AEditor : IEditorDBItem;
begin
AEditor := NIL;
ShowHourglassCursor;
try
RecuperarObjetos(AArticulo);
AsignarEditor(AEditor);
with (AEditor as IEditorArticulo) do
begin
Controller := Self; //OJO ORDEN MUY IMPORTANTE
Articulo := AArticulo;
end;
finally
HideHourglassCursor;
end;
if Assigned(AEditor) then
AEditor.ShowModal;
end;
}
procedure TInventarioController.Ver(AInventario: IBizInventario);
var
AEditor : IEditorDBItem;
begin
AEditor := NIL;
ShowHourglassCursor;
try
RecuperarObjetos(AInventario);
AsignarEditor(AEditor);
with (AEditor as IEditorEntradaArticulosInventario) do
begin
Controller := Self; //OJO ORDEN MUY IMPORTANTE
Articulos := AInventario;
end;
finally
HideHourglassCursor;
end;
if Assigned(AEditor) then
AEditor.ShowModal;
end;
procedure TInventarioController.VerTodos(AInventario: IBizInventario);
var
AEditor : IEditorInventario;
begin
AEditor := NIL;
ShowHourglassCursor;
try
CreateEditor('EditorInventario', IEditorInventario, AEditor);
with AEditor do
begin
Controller := Self; //OJO ORDEN MUY IMPORTANTE
Inventario := AInventario;
end;
finally
HideHourglassCursor;
end;
if Assigned(AEditor) then
AEditor.ShowEmbedded;
end;
function TInventarioController._Vacio: IBizInventario;
begin
Result := Buscar(ID_NULO);
end;
{
procedure TInventarioController.Eliminar(const ID: Integer);
var
AArticulo : IBizArticulo;
begin
AArticulo := Buscar(ID);
if not Assigned(AArticulo) then
raise Exception.Create(Format('No se ha encontrado el art<72>culo con ID = %d', [ID]));
Eliminar(AArticulo);
AArticulo := NIL;
end;
function TInventarioController.Eliminar(AArticulo: IBizArticulo): Boolean;
begin
Result := False;
if not Assigned(AArticulo) then
raise Exception.Create ('Articulo no asignada');
ShowHourglassCursor;
try
if (AArticulo.State in dsEditModes) then
AArticulo.Cancel;
AArticulo.Delete;
AArticulo.DataTable.ApplyUpdates;
HideHourglassCursor;
Result := True;
except
on E: Exception do
begin
AArticulo.DataTable.CancelUpdates;
HideHourglassCursor;
if (Pos('FOREIGN KEY', E.Message) > 0) then
MessageBox(0, 'No se puede borrar este art<72>culo porque tiene art<72>culos', 'Atenci<63>n', MB_ICONWARNING or MB_OK);
end;
end;
end;
}
procedure TInventarioController.RecibirArticulos(const CodigoAlmacenDes: Integer);
var
AInventario: IBizInventario;
begin
try
AInventario := Buscar(ID_NULO);
if not AInventario.DataTable.Active then
AInventario.DataTable.Active := True;
AInventario.IDAlmacenEntrada := CodigoAlmacenDes;
Ver(AInventario);
finally
AInventario := Nil;
end;
end;
procedure TInventarioController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable);
begin
inherited;
//
end;
procedure TInventarioController.RecuperarObjetos(AInventario: IBizInventario);
begin
//
end;
procedure TInventarioController.SetAlmacenesController(const Value: IAlmacenesController);
begin
FAlmacenesController := Value;
end;
procedure TInventarioController.SetArticulosController(const Value: IArticulosProveedorController);
begin
FArticulosController := Value
end;
function TInventarioController.Trasladar(AInventario: IBizInventario; Todos: Boolean): Boolean;
var
AAlmacenes : IBizAlmacen;
begin
Result := False;
if Assigned(AInventario) then
begin
ShowHourglassCursor;
try
//Seleccionamos almac<61>n
AAlmacenes := FAlmacenesController.BuscarTodos;
if not AAlmacenes.DataTable.Active then
AAlmacenes.DataTable.Active := True;
AAlmacenes := FAlmacenesController.VerLista(AAlmacenes);
//Aginamos el nuevo almac<61>n
if Assigned(AAlmacenes) then
begin
if not AInventario.DataTable.Editing then
AInventario.Edit;
AInventario.ID_ALMACEN := AAlmacenes.ID;
AInventario.Post;
AInventario.DataTable.ApplyUpdates;
Result := True;
// if Todos
// then AInventario.DataTable.ClearRows
// else AInventario.DataTable.Delete;
end;
finally
HideHourglassCursor;
end;
end;
end;
{
function TInventarioController.Trasladar: Boolean;
begin
end;
function TInventarioController.Existe(const ID: Integer): Boolean;
var
AArticulo : IBizArticulo;
begin
try
AArticulo := Buscar(ID);
Result := Assigned(AArticulo) and (AArticulo.ID = ID);
finally
AArticulo := NIL;
end;
end;
}
procedure TInventarioController.FiltrarEmpresa(AInventario: IBizInventario);
begin
if AInventario.DataTable.Active then
AInventario.DataTable.Active := False;
// Filtrar los inventario actuales por empresa
with AInventario.DataTable.Where do
begin
if NotEmpty then
AddOperator(opAND);
OpenBraket;
AddText('ALMACENES.' + fld_InventarioID_EMPRESA + ' = ' + IntToStr(dmUsuarios.IDEmpresaActual));
CloseBraket;
end;
end;
function TInventarioController.GetAlmacenesController: IAlmacenesController;
begin
Result := FAlmacenesController;
end;
function TInventarioController.GetArticulosController: IArticulosProveedorController;
begin
Result := FArticulosController;
end;
procedure TInventarioController.GuardarArticulosUnitarios(AInventario : IBizInventario);
var
AArticulosUnitarios: IBizInventario;
i: Integer;
begin
AArticulosUnitarios := Buscar(ID_NULO);
if not AArticulosUnitarios.DataTable.Active then
AArticulosUnitarios.DataTable.Active := True;
with AInventario do
begin
DataTable.First;
while not DataTable.EOF do
begin
for i:=0 to (CANTIDAD - 1) do
begin
AArticulosUnitarios.Insert;
AArticulosUnitarios.ID_ALMACEN := ID_ALMACEN;
AArticulosUnitarios.ID_ARTICULO := ID_ARTICULO;
if not DataTable.FieldByName(fld_INVENTARIOID_PEDIDO_PROVEEDOR).IsNull then
AArticulosUnitarios.ID_PEDIDO_PROVEEDOR := ID_PEDIDO_PROVEEDOR;
if not DataTable.FieldByName(fld_INVENTARIOID_PEDIDO_CLIENTE).IsNull then
AArticulosUnitarios.ID_PEDIDO_CLIENTE := ID_PEDIDO_CLIENTE;
AArticulosUnitarios.DESCRIPCION := DESCRIPCION;
AArticulosUnitarios.Post;
AssignarID(AArticulosUnitarios, (FDataModule as IDataModuleInventario));
end;
DataTable.Next;
end;
DataTable.CancelUpdates;
AArticulosUnitarios.DataTable.ApplyUpdates;
end;
end;
{
procedure TInventarioController.Guardar(AArticulo: IBizArticulo);
begin
if not Assigned(AArticulo) then
raise Exception.Create ('Art<72>culo no asignada');
ValidarObjetos;
if ValidarArticulo(AArticulo) then
begin
ShowHourglassCursor;
try
if (AArticulo.DataTable.State in dsEditModes) then
AArticulo.DataTable.Post;
AsignarCodigo(AArticulo);
AArticulo.DataTable.ApplyUpdates;
finally
HideHourglassCursor;
end;
end;
end;
function TInventarioController.Nuevo: IBizArticulo;
var
AArticulo : IBizArticulo;
begin
AArticulo := FDataModule.NewItem;
FiltrarEmpresa(AArticulo);
AArticulo.DataTable.Active := True;
AArticulo.Insert;
Result := AArticulo;
end;
}
{
procedure TInventarioController.Preview(AArticulo: IBizArticulo);
var
AReportController : IArticulosReportController;
begin
AReportController := TArticulosReportController.Create;
try
AReportController.Preview(AArticulo.ID);
finally
AReportController := NIL;
end;
end;
procedure TInventarioController.Print(AArticulo: IBizArticulo);
var
AReportController : IArticulosReportController;
begin
AReportController := TArticulosReportController.Create;
try
AReportController.Print(AArticulo.ID);
finally
AReportController := NIL;
end;
end;
}
end.