2007-11-16 20:58:56 +00:00
|
|
|
|
unit uInventarioController;
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uses
|
|
|
|
|
|
Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem,
|
|
|
|
|
|
uIDataModuleInventario, uBizInventario, uArticulosInventarioController,
|
2008-07-30 16:25:35 +00:00
|
|
|
|
uAlmacenesController, uObrasController, uPresupuestosClienteController,
|
|
|
|
|
|
uBizPresupuestosCliente, uPedidosProveedorController, uBizPedidosProveedor,
|
|
|
|
|
|
uBizArticulos, uBizAlmacenes, uBizObras;
|
|
|
|
|
|
|
2007-11-16 20:58:56 +00:00
|
|
|
|
|
|
|
|
|
|
type
|
2008-08-22 12:19:25 +00:00
|
|
|
|
IInventarioController = interface(IControllerBase)
|
2007-11-16 20:58:56 +00:00
|
|
|
|
['{FB1DE6BA-ADCC-4A83-B4D4-37DC5892766B}']
|
|
|
|
|
|
function Eliminar(AInventario : IBizInventario; Todos: Boolean; ApplyUpdates: Boolean): Boolean;
|
|
|
|
|
|
function Trasladar(AInventario : IBizInventario; Todos: Boolean): Boolean;
|
|
|
|
|
|
// procedure RecibirArticulos(Const APedido: IBizPedidoProveedor; Const CodigoAlmacenDes: Integer); overload;
|
|
|
|
|
|
// procedure RecibirPedidos(Const CodigoAlmacenDes: Integer);
|
|
|
|
|
|
function Liberar(AInventario : IBizInventario): Boolean;
|
|
|
|
|
|
|
|
|
|
|
|
function Ver(AArticulos: IBizInventario; AInventario : IBizInventario; APedido: IBizPedidoProveedor = Nil): Boolean;
|
2008-07-30 16:25:35 +00:00
|
|
|
|
procedure VerTodos(AInventario: IBizInventario; const pTipoInventario: String);
|
2008-11-07 21:05:48 +00:00
|
|
|
|
procedure VerReservas(AArticulo: IBizInventario; const ATipoReservas: String);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
|
|
|
|
|
|
function BuscarTodos: IBizInventario;
|
2008-07-30 16:25:35 +00:00
|
|
|
|
function BuscarTodosAlmacenes: IBizInventario;
|
|
|
|
|
|
function BuscarTodosObras: IBizInventario;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
function Buscar(const ID_ALMACEN: Integer): IBizInventario;
|
|
|
|
|
|
function BuscarDetalleReservas: IBizDetalleReservas;
|
2008-09-04 17:38:49 +00:00
|
|
|
|
function ExtraerSeleccionados(AArticulos: IBizInventario) : IBizInventario; overload;
|
|
|
|
|
|
function ExtraerSeleccionados(AArticulos: IBizDetalleReservas) : IBizDetalleReservas; overload;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
|
|
|
|
|
|
procedure Anadir(AArticulos, AInventario : IBizInventario);
|
2008-09-08 15:01:03 +00:00
|
|
|
|
function Guardar(AArticulos : IBizInventario; const FechaMovimiento: TDateTime; const CausaMovimiento: String; AValidar:Boolean = True): Boolean;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
|
|
|
|
|
|
procedure EntradaArticulosLibre(AInventario: IBizInventario; Const CodigoAlmacenDestino: Integer);
|
|
|
|
|
|
procedure SalidaArticulosLibre(AInventario: IBizInventario; Const CodigoAlmacenOrigen: Integer);
|
|
|
|
|
|
procedure TrasladarArticulosLibre(AInventario: IBizInventario; Const CodigoAlmacenOrigen: Integer; Const CodigoAlmacenDestino: Integer);
|
2008-09-04 11:46:32 +00:00
|
|
|
|
procedure ReservarArticulosLibre(AInventario: IBizInventario; Const CodigoAlmacenOrigen: Integer; Const CodigoAlmacenDestino: Integer);
|
2008-09-05 10:48:24 +00:00
|
|
|
|
procedure CancelarReservas(AReservas: IBizDetalleReservas);
|
|
|
|
|
|
procedure TrasladarReservas(AReservas: IBizDetalleReservas);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
function EntradaPedido(AInventario: IBizInventario; APedido: IBizPedidoProveedor; ADetalles: IDAStronglyTypedDataTable; var ADetallesFinal: IBizInventario): Boolean;
|
|
|
|
|
|
function SalidaAlbaran(AInventario: IBizInventario; Const CodigoAlmacenOrigen: Integer; ADetalles: IDAStronglyTypedDataTable): Boolean;
|
|
|
|
|
|
|
|
|
|
|
|
function GetAlmacenesController: IAlmacenesController;
|
|
|
|
|
|
procedure SetAlmacenesController(const Value: IAlmacenesController);
|
|
|
|
|
|
property AlmacenesController: IAlmacenesController read GetAlmacenesController write SetAlmacenesController;
|
|
|
|
|
|
|
2008-07-30 16:25:35 +00:00
|
|
|
|
function GetObrasController: IObrasController;
|
|
|
|
|
|
procedure SetObrasController(const Value: IObrasController);
|
|
|
|
|
|
property ObrasController: IObrasController read GetObrasController write SetObrasController;
|
|
|
|
|
|
|
2007-11-16 20:58:56 +00:00
|
|
|
|
procedure Copiar(AArticulos: IBizInventario; ADetalles: IDAStronglyTypedDataTable; AInventario: IBizInventario); overload;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2008-08-22 12:19:25 +00:00
|
|
|
|
TInventarioController = class(TControllerBase, IInventarioController)
|
2007-11-16 20:58:56 +00:00
|
|
|
|
private
|
|
|
|
|
|
FAlmacenesController: IAlmacenesController;
|
2008-09-04 17:38:49 +00:00
|
|
|
|
FObrasController: IObrasController;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
FArticulosController : IArticulosInventarioController;
|
2007-11-21 16:03:51 +00:00
|
|
|
|
FPresupuestosClienteController : IPresupuestosClienteController;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
FPedidosProveedorController : IPedidosProveedorController;
|
|
|
|
|
|
function GetAlmacenesController: IAlmacenesController;
|
2008-07-30 16:25:35 +00:00
|
|
|
|
function GetObrasController: IObrasController;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
function GetArticulosController: IArticulosInventarioController;
|
2007-11-21 16:03:51 +00:00
|
|
|
|
function GetPresupuestosClienteController: IPresupuestosClienteController;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
function GetPedidosProveedorController: IPedidosProveedorController;
|
|
|
|
|
|
procedure SetAlmacenesController(const Value: IAlmacenesController);
|
2008-09-04 11:46:32 +00:00
|
|
|
|
procedure SetObrasController(const Value: IObrasController);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
procedure SetArticulosController(const Value: IArticulosInventarioController);
|
2007-11-21 16:03:51 +00:00
|
|
|
|
procedure SetPresupuestosClienteController(const Value: IPresupuestosClienteController);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
procedure SetPedidosProveedorController(const Value: IPedidosProveedorController);
|
|
|
|
|
|
|
|
|
|
|
|
function Liberar(AInventario : IBizInventario; Todos: Boolean): Boolean; overload;
|
|
|
|
|
|
|
|
|
|
|
|
function EntradaSalidaArticulos(AArticulos, AInventario : IBizInventario; APedido: IBizPedidoProveedor = Nil): Boolean; overload;
|
2008-09-04 11:46:32 +00:00
|
|
|
|
function ReservarArticulos(AArticulos, AInventario : IBizInventario): Boolean;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
|
|
|
|
|
|
procedure Copiar(AArticulos: IBizInventario; ADetalles: IDAStronglyTypedDataTable; AInventario: IBizInventario); overload;
|
|
|
|
|
|
function GuardarMovimientos(AArticulos : IBizInventario; const FechaMovimiento: TDateTime; const CausaMovimiento: String): Boolean;
|
|
|
|
|
|
|
|
|
|
|
|
protected
|
|
|
|
|
|
FDataModule : IDataModuleInventario;
|
|
|
|
|
|
|
|
|
|
|
|
procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override;
|
|
|
|
|
|
function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean;
|
|
|
|
|
|
function _Vacio : IBizInventario;
|
|
|
|
|
|
|
|
|
|
|
|
procedure FiltrarEmpresa(AInventario: IBizInventario); overload;
|
|
|
|
|
|
procedure FiltrarEmpresa(ADetalleReservas: IBizDetalleReservas); overload;
|
|
|
|
|
|
procedure DeshabilitarOnCalcFields(Sender: TDADataTable);
|
|
|
|
|
|
function ValidarCantidades(AArticulos: IBizInventario): Boolean;
|
|
|
|
|
|
function Validar(AArticulos: IBizInventario): Boolean;
|
|
|
|
|
|
|
|
|
|
|
|
//Estos son los tres m<>todos a sobre escribir si se desea heredar toda la logica de
|
|
|
|
|
|
//este controller
|
|
|
|
|
|
procedure AsignarDataModule; virtual;
|
|
|
|
|
|
|
|
|
|
|
|
public
|
|
|
|
|
|
property AlmacenesController: IAlmacenesController read GetAlmacenesController write SetAlmacenesController;
|
2008-09-04 11:46:32 +00:00
|
|
|
|
property ObrasController: IObrasController read GetObrasController write SetObrasController;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
property ArticulosController: IArticulosInventarioController read GetArticulosController write SetArticulosController;
|
2007-11-21 16:03:51 +00:00
|
|
|
|
property PresupuestosClienteController: IPresupuestosClienteController read GetPresupuestosClienteController write SetPresupuestosClienteController;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
property PedidosProveedorController: IPedidosProveedorController read GetPedidosProveedorController write SetPedidosProveedorController;
|
|
|
|
|
|
|
2007-11-22 19:09:07 +00:00
|
|
|
|
constructor Create; override;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
destructor Destroy; override;
|
|
|
|
|
|
|
|
|
|
|
|
function Trasladar(AInventario : IBizInventario; Todos: Boolean): Boolean;
|
|
|
|
|
|
|
|
|
|
|
|
// procedure RecibirArticulos(Const APedido: IBizPedidoProveedor; Const CodigoAlmacenDes: Integer); overload;
|
|
|
|
|
|
|
|
|
|
|
|
// procedure RecibirPedidos(Const CodigoAlmacenDes: Integer);
|
|
|
|
|
|
|
|
|
|
|
|
function Buscar(const ID_ALMACEN: Integer): IBizInventario;
|
|
|
|
|
|
function BuscarTodos: IBizInventario;
|
2008-07-30 16:25:35 +00:00
|
|
|
|
function BuscarTodosAlmacenes: IBizInventario;
|
|
|
|
|
|
function BuscarTodosObras: IBizInventario;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
function BuscarDetalleReservas: IBizDetalleReservas;
|
|
|
|
|
|
function ElegirArticulos(AArticulos : IBizInventario; AMensaje: String; AMultiSelect: Boolean): IBizInventario;
|
2008-09-04 17:38:49 +00:00
|
|
|
|
function ExtraerSeleccionados(AArticulos: IBizInventario) : IBizInventario; overload;
|
|
|
|
|
|
function ExtraerSeleccionados(AArticulos: IBizDetalleReservas) : IBizDetalleReservas; overload;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
|
|
|
|
|
|
procedure Anadir(AArticulos, AInventario : IBizInventario);
|
|
|
|
|
|
function Eliminar(AInventario : IBizInventario; Todos: Boolean; ApplyUpdates: Boolean): Boolean;
|
|
|
|
|
|
|
|
|
|
|
|
procedure EntradaArticulosLibre(AInventario: IBizInventario; Const CodigoAlmacenDestino: Integer);
|
|
|
|
|
|
procedure SalidaArticulosLibre(AInventario: IBizInventario; Const CodigoAlmacenOrigen: Integer);
|
|
|
|
|
|
procedure TrasladarArticulosLibre(AInventario: IBizInventario; Const CodigoAlmacenOrigen: Integer; Const CodigoAlmacenDestino: Integer);
|
2008-09-04 11:46:32 +00:00
|
|
|
|
procedure ReservarArticulosLibre(AInventario: IBizInventario; Const CodigoAlmacenOrigen: Integer; Const CodigoAlmacenDestino: Integer);
|
2008-09-04 17:38:49 +00:00
|
|
|
|
procedure CancelarReservas(AReservas: IBizDetalleReservas);
|
2008-09-05 10:48:24 +00:00
|
|
|
|
procedure TrasladarReservas(AReservas: IBizDetalleReservas);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
function EntradaPedido(AInventario: IBizInventario; APedido: IBizPedidoProveedor; ADetalles: IDAStronglyTypedDataTable; var ADetallesFinal: IBizInventario): Boolean;
|
|
|
|
|
|
function SalidaAlbaran(AInventario: IBizInventario; Const CodigoAlmacenOrigen: Integer; ADetalles: IDAStronglyTypedDataTable): Boolean;
|
|
|
|
|
|
|
2008-07-30 16:25:35 +00:00
|
|
|
|
procedure VerTodos(AInventario: IBizInventario; const pTipoInventario: String);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
function Ver(AArticulos: IBizInventario; AInventario : IBizInventario; APedido: IBizPedidoProveedor = Nil): Boolean;
|
|
|
|
|
|
|
2008-11-07 21:05:48 +00:00
|
|
|
|
procedure VerReservas(AArticulo: IBizInventario; const ATipoReservas: String);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
|
2008-09-08 15:01:03 +00:00
|
|
|
|
function Guardar(AArticulos : IBizInventario; const FechaMovimiento: TDateTime; const CausaMovimiento: String; AValidar:Boolean = True): Boolean;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
|
|
|
|
|
|
function Liberar(AInventario : IBizInventario): Boolean; overload;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
implementation
|
|
|
|
|
|
|
|
|
|
|
|
uses
|
|
|
|
|
|
Forms, cxControls, DB, schInventarioClient_Intf, uEditorRegistryUtils,
|
|
|
|
|
|
uIEditorInventario, uDataModuleInventario,
|
|
|
|
|
|
uDataModuleUsuarios, uDAInterfaces, uDataTableUtils,
|
|
|
|
|
|
uDateUtils, uROTypes, DateUtils, Controls, Windows,
|
|
|
|
|
|
dialogs, Variants, schPedidosProveedorClient_Intf,
|
2007-11-21 16:03:51 +00:00
|
|
|
|
uControllerDetallesBase, uDialogUtils, uFactuGES_App,
|
2007-11-16 20:58:56 +00:00
|
|
|
|
uIEditorEntradaSalidaArticulos, schArticulosClient_Intf,
|
|
|
|
|
|
uIEditorElegirArticulosAlmacen, uInventarioUtils,
|
2008-07-30 16:25:35 +00:00
|
|
|
|
uIEditorDetalleReservas, schAlmacenesClient_Intf;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
|
|
|
|
|
|
{ TInventarioController }
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
procedure TInventarioController.Anadir(AArticulo: IBizArticulo);
|
|
|
|
|
|
begin
|
|
|
|
|
|
AArticulo.Insert;
|
|
|
|
|
|
end;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
procedure TInventarioController.Anadir(AArticulos, AInventario: IBizInventario);
|
|
|
|
|
|
var
|
|
|
|
|
|
AArticulosSeleccionados: IDAStronglyTypedDataTable;
|
|
|
|
|
|
begin
|
|
|
|
|
|
AArticulosSeleccionados := Nil;
|
|
|
|
|
|
|
|
|
|
|
|
case AArticulos.TipoMovimiento of
|
|
|
|
|
|
tEntradaLibre: begin
|
|
|
|
|
|
//IBizArticulo
|
|
|
|
|
|
AArticulosSeleccionados := FArticulosController.ElegirArticulos(FArticulosController.BuscarInventariables, '', True);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2008-09-04 11:46:32 +00:00
|
|
|
|
tSalidaLibre, tTraslado, tReserva: begin
|
2007-11-16 20:58:56 +00:00
|
|
|
|
//IBizInventario
|
|
|
|
|
|
AArticulosSeleccionados := ElegirArticulos(Buscar(AArticulos.IDAlmacenOrigen), '', True);
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
if Assigned(AArticulosSeleccionados) then
|
|
|
|
|
|
Copiar(AArticulos, AArticulosSeleccionados, AInventario)
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TInventarioController.AsignarDataModule;
|
|
|
|
|
|
begin
|
|
|
|
|
|
FDataModule := TDataModuleInventario.Create(Nil);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.Buscar(const ID_ALMACEN: Integer): IBizInventario;
|
2008-09-05 10:48:24 +00:00
|
|
|
|
var
|
|
|
|
|
|
Condicion: TDAWhereExpression;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
begin
|
|
|
|
|
|
Result := (FDataModule as IDataModuleInventario).GetItems(ID_ALMACEN);
|
|
|
|
|
|
FiltrarEmpresa(Result);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.BuscarDetalleReservas: IBizDetalleReservas;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := FDataModule.GetDetalleReservas;
|
|
|
|
|
|
FiltrarEmpresa(Result);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.BuscarTodos: IBizInventario;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := FDataModule.GetItems;
|
|
|
|
|
|
FiltrarEmpresa(Result);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2008-07-30 16:25:35 +00:00
|
|
|
|
function TInventarioController.BuscarTodosAlmacenes: IBizInventario;
|
|
|
|
|
|
var
|
|
|
|
|
|
Condicion: TDAWhereExpression;
|
|
|
|
|
|
begin
|
|
|
|
|
|
ShowHourglassCursor;
|
|
|
|
|
|
try
|
|
|
|
|
|
Result := BuscarTodos;
|
|
|
|
|
|
|
|
|
|
|
|
// Filtrar los pedidos pendientes de recepcion
|
|
|
|
|
|
with Result.DataTable.DynamicWhere do
|
|
|
|
|
|
begin
|
|
|
|
|
|
// (TIPO_ALMACEN <> ALMACEN)
|
|
|
|
|
|
Condicion := NewBinaryExpression(NewField('', fld_InventarioTIPO_ALMACEN), NewConstant(CTE_INV_ALMACEN, datString), dboEqual);
|
|
|
|
|
|
|
|
|
|
|
|
if IsEmpty then
|
|
|
|
|
|
Expression := Condicion
|
|
|
|
|
|
else
|
|
|
|
|
|
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
|
|
|
|
|
|
end;
|
|
|
|
|
|
finally
|
|
|
|
|
|
HideHourglassCursor;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.BuscarTodosObras: IBizInventario;
|
|
|
|
|
|
var
|
|
|
|
|
|
Condicion: TDAWhereExpression;
|
|
|
|
|
|
begin
|
|
|
|
|
|
ShowHourglassCursor;
|
|
|
|
|
|
try
|
|
|
|
|
|
Result := BuscarTodos;
|
|
|
|
|
|
|
|
|
|
|
|
// Filtrar los pedidos pendientes de recepcion
|
|
|
|
|
|
with Result.DataTable.DynamicWhere do
|
|
|
|
|
|
begin
|
|
|
|
|
|
// (TIPO_ALMACEN <> ALMACEN)
|
|
|
|
|
|
Condicion := NewBinaryExpression(NewField('', fld_InventarioTIPO_ALMACEN), NewConstant(CTE_INV_OBRA, datString), dboEqual);
|
|
|
|
|
|
|
|
|
|
|
|
if IsEmpty then
|
|
|
|
|
|
Expression := Condicion
|
|
|
|
|
|
else
|
|
|
|
|
|
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
|
|
|
|
|
|
end;
|
|
|
|
|
|
finally
|
|
|
|
|
|
HideHourglassCursor;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2008-09-04 17:38:49 +00:00
|
|
|
|
procedure TInventarioController.CancelarReservas(AReservas: IBizDetalleReservas);
|
|
|
|
|
|
begin
|
|
|
|
|
|
ShowHourglassCursor;
|
|
|
|
|
|
try
|
|
|
|
|
|
AReservas.DataTable.ClearRows;
|
|
|
|
|
|
AReservas.DataTable.ApplyUpdates;
|
|
|
|
|
|
finally
|
2008-09-05 10:48:24 +00:00
|
|
|
|
HideHourglassCursor;
|
2008-09-04 17:38:49 +00:00
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2007-11-16 20:58:56 +00:00
|
|
|
|
procedure TInventarioController.Copiar(AArticulos: IBizInventario; ADetalles: IDAStronglyTypedDataTable; AInventario: IBizInventario);
|
|
|
|
|
|
{
|
|
|
|
|
|
Procedimiento que copia en AArticulos, todos los detalles pasados por parametro ADetalles
|
|
|
|
|
|
a<EFBFBD>adiendo adem<EFBFBD>s el stock de cada uno de los detalles datos, siempre y cuando dichos
|
|
|
|
|
|
detalles existan en AInventario pasado por par<EFBFBD>metro.
|
|
|
|
|
|
|
|
|
|
|
|
ADetalles ser<EFBFBD> una interfaz gen<EFBFBD>rica porque pueden venir dos tipos de elementos a a<EFBFBD>adir:
|
|
|
|
|
|
- 1 Articulos de cat<EFBFBD>logo: IBizArticulo
|
|
|
|
|
|
- 2 Art<EFBFBD>culos de un almac<EFBFBD>n: IBizInventario
|
|
|
|
|
|
- 3 Detalles de un pedido de proveedor u albaran de cliente: IDAStronglyTypedDataTable (cumple con los tipos de controller detalles base
|
|
|
|
|
|
}
|
|
|
|
|
|
var
|
2008-09-30 10:06:07 +00:00
|
|
|
|
StockArticulo: Double;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
|
|
|
|
|
|
begin
|
|
|
|
|
|
if (not Assigned(AArticulos))
|
|
|
|
|
|
or (not Assigned(ADetalles)) then
|
|
|
|
|
|
exit;
|
|
|
|
|
|
|
|
|
|
|
|
if not AArticulos.DataTable.Active then
|
|
|
|
|
|
AArticulos.DataTable.Active := True;
|
|
|
|
|
|
|
|
|
|
|
|
if not ADetalles.DataTable.Active then
|
|
|
|
|
|
ADetalles.DataTable.Active := True;
|
|
|
|
|
|
|
|
|
|
|
|
if not Assigned(AInventario) then
|
|
|
|
|
|
begin
|
|
|
|
|
|
AInventario := BuscarTodos;
|
|
|
|
|
|
AInventario.DataTable.Active := True;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
//Hacemos el recorrido de los detalles para insertarlos en AArticulos
|
|
|
|
|
|
with ADetalles.DataTable do
|
|
|
|
|
|
begin
|
|
|
|
|
|
First;
|
|
|
|
|
|
while not EOF do
|
|
|
|
|
|
begin
|
|
|
|
|
|
AArticulos.DataTable.Insert;
|
|
|
|
|
|
|
|
|
|
|
|
//Estos campos ser<65>n comunes para todos los tipos de ADetalles a recibir
|
|
|
|
|
|
AArticulos.REFERENCIA := FieldByName(fld_INVENTARIOREFERENCIA).AsString;
|
|
|
|
|
|
|
|
|
|
|
|
//Caso 1 ADetalles = IBizArticulo
|
|
|
|
|
|
if Supports(ADetalles, IBizArticulo) then
|
|
|
|
|
|
begin
|
|
|
|
|
|
AArticulos.ID_ARTICULO := FieldByName(fld_ArticulosID).AsInteger;
|
2008-07-22 11:21:06 +00:00
|
|
|
|
// AArticulos.REFERENCIA_PROVEEDOR := FieldByName(fld_ArticulosREFERENCIA_PROV).AsString;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
AArticulos.DESCRIPCION := FieldByName(fld_INVENTARIODESCRIPCION).AsString;
|
|
|
|
|
|
AArticulos.CANTIDAD := 1;
|
|
|
|
|
|
end
|
|
|
|
|
|
//Casos 2, 3 ADetalles = IBizInventario, IDAStronglyTypedDataTable
|
|
|
|
|
|
else
|
|
|
|
|
|
begin
|
|
|
|
|
|
AArticulos.ID_ARTICULO := FieldByName(fld_INVENTARIOID_ARTICULO).AsInteger;
|
2008-07-22 11:21:06 +00:00
|
|
|
|
// AArticulos.REFERENCIA_PROVEEDOR := FieldByName(fld_INVENTARIOREFERENCIA_PROVEEDOR).AsString;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
if Supports(ADetalles, IBizInventario) then
|
|
|
|
|
|
begin
|
|
|
|
|
|
AArticulos.DESCRIPCION := FieldByName(fld_INVENTARIODESCRIPCION).AsString;
|
|
|
|
|
|
AArticulos.CANTIDAD := 1;
|
|
|
|
|
|
end
|
|
|
|
|
|
else
|
|
|
|
|
|
begin
|
|
|
|
|
|
AArticulos.DESCRIPCION := FieldByName(fld_PedidosProveedor_DetallesCONCEPTO).AsString;
|
2008-09-30 10:06:07 +00:00
|
|
|
|
AArticulos.CANTIDAD := FieldByName(fld_INVENTARIOCANTIDAD).Asfloat;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
//Localizamos el stock en AInventario por cada uno de los ADetalles a copiar
|
|
|
|
|
|
AInventario.DataTable.First;
|
|
|
|
|
|
if AInventario.DataTable.Locate(fld_INVENTARIOID_ALMACEN + ';' + fld_INVENTARIOID_ARTICULO, VarArrayOf([AArticulos.ID_ALMACEN, AArticulos.ID_ARTICULO]), [])
|
|
|
|
|
|
then StockArticulo := AInventario.STOCK
|
|
|
|
|
|
else StockArticulo := 0;
|
|
|
|
|
|
//Asignamos el Stock al articulo a<>adido
|
|
|
|
|
|
if not AArticulos.DataTable.Editing then
|
|
|
|
|
|
AArticulos.DataTable.Edit;
|
|
|
|
|
|
AArticulos.STOCK := StockArticulo;
|
|
|
|
|
|
|
|
|
|
|
|
AArticulos.DataTable.Post;
|
|
|
|
|
|
Next;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
constructor TInventarioController.Create;
|
|
|
|
|
|
begin
|
2007-11-22 19:09:07 +00:00
|
|
|
|
inherited;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
AsignarDataModule;
|
|
|
|
|
|
FArticulosController := TArticulosInventarioController.Create;
|
|
|
|
|
|
FAlmacenesController := TAlmacenesController.Create;
|
2008-07-30 16:25:35 +00:00
|
|
|
|
FObrasController := TObrasController.Create;
|
2007-11-21 16:03:51 +00:00
|
|
|
|
FPresupuestosClienteController := TPresupuestosClienteController.Create;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
FPedidosProveedorController := TPedidosProveedorController.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;
|
2008-07-30 16:25:35 +00:00
|
|
|
|
FObrasController := Nil;
|
2007-11-21 16:03:51 +00:00
|
|
|
|
FPresupuestosClienteController := Nil;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
FPedidosProveedorController := Nil;
|
|
|
|
|
|
inherited;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.ElegirArticulos(AArticulos: IBizInventario; AMensaje: String; AMultiSelect: Boolean): IBizInventario;
|
|
|
|
|
|
var
|
|
|
|
|
|
AEditor : IEditorElegirArticulosAlmacen;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := NIL;
|
2008-11-11 16:22:18 +00:00
|
|
|
|
|
|
|
|
|
|
CreateEditor('EditorElegirArticulosAlmacen', IEditorElegirArticulosAlmacen, AEditor);
|
|
|
|
|
|
if Assigned(AEditor) then
|
|
|
|
|
|
with AEditor do
|
|
|
|
|
|
begin
|
|
|
|
|
|
try
|
|
|
|
|
|
Controller := Self;
|
|
|
|
|
|
Inventario := AArticulos;
|
|
|
|
|
|
MultiSelect := AMultiSelect;
|
|
|
|
|
|
Mensaje := AMensaje;
|
|
|
|
|
|
if IsPositiveResult(ShowModal) then
|
2007-11-18 20:08:55 +00:00
|
|
|
|
Result := ArticulosSeleccionados;
|
2008-11-11 16:22:18 +00:00
|
|
|
|
finally
|
|
|
|
|
|
Release;
|
|
|
|
|
|
AEditor := NIL;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
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);
|
2008-05-21 15:15:41 +00:00
|
|
|
|
CopyDataTableDA5(AArticulos.DataTable, ASeleccionados.DataTable, True);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
Result := ASeleccionados;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TInventarioController.FiltrarEmpresa(ADetalleReservas: IBizDetalleReservas);
|
2007-11-18 17:23:37 +00:00
|
|
|
|
var
|
|
|
|
|
|
Condicion: TDAWhereExpression;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
begin
|
|
|
|
|
|
if ADetalleReservas.DataTable.Active then
|
|
|
|
|
|
ADetalleReservas.DataTable.Active := False;
|
|
|
|
|
|
|
|
|
|
|
|
// Filtrar los inventario actuales por empresa
|
2007-11-18 17:23:37 +00:00
|
|
|
|
with ADetalleReservas.DataTable.DynamicWhere do
|
2007-11-16 20:58:56 +00:00
|
|
|
|
begin
|
2007-11-18 17:23:37 +00:00
|
|
|
|
// (ID_EMPRESA >= ID)
|
2007-11-21 16:03:51 +00:00
|
|
|
|
Condicion := NewBinaryExpression(NewField('', fld_DetalleReservasID_EMPRESA), NewConstant(AppFactuGES.EmpresaActiva.ID, datInteger), dboEqual);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
|
2007-11-18 17:23:37 +00:00
|
|
|
|
if IsEmpty then
|
|
|
|
|
|
Expression := Condicion
|
|
|
|
|
|
else
|
|
|
|
|
|
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.Validar(AArticulos: IBizInventario): Boolean;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := True;
|
|
|
|
|
|
|
|
|
|
|
|
if not Assigned(AArticulos) then
|
|
|
|
|
|
raise Exception.Create ('Articulos no asignados');
|
|
|
|
|
|
|
|
|
|
|
|
if (AArticulos.DataTable.State in dsEditModes) then
|
|
|
|
|
|
AArticulos.DataTable.Post;
|
|
|
|
|
|
|
|
|
|
|
|
case AArticulos.TipoMovimiento of
|
2008-09-04 11:46:32 +00:00
|
|
|
|
tSalidaLibre, tSalidaAlbaranCliente, tTraslado, tReserva:
|
2007-11-16 20:58:56 +00:00
|
|
|
|
begin
|
|
|
|
|
|
Result := ValidarCantidades(AArticulos);
|
|
|
|
|
|
if not Result then
|
|
|
|
|
|
raise Exception.Create ('Revise las cantidades');
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.ValidarCantidades(AArticulos: IBizInventario): Boolean;
|
|
|
|
|
|
var
|
|
|
|
|
|
ListaArticulos: TStringList;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := False;
|
|
|
|
|
|
if Assigned(AArticulos) then
|
|
|
|
|
|
begin
|
|
|
|
|
|
ShowHourglassCursor;
|
|
|
|
|
|
try
|
|
|
|
|
|
ListaArticulos := TStringList.Create;
|
|
|
|
|
|
With AArticulos.DataTable do
|
|
|
|
|
|
begin
|
|
|
|
|
|
First;
|
|
|
|
|
|
while not eof do
|
|
|
|
|
|
begin
|
|
|
|
|
|
if (AArticulos.CANTIDAD > AArticulos.STOCK) then
|
|
|
|
|
|
ListaArticulos.Add(AArticulos.REFERENCIA + ' - ' + AArticulos.DESCRIPCION);
|
|
|
|
|
|
next;
|
|
|
|
|
|
end;
|
|
|
|
|
|
if ListaArticulos.Count > 0 then
|
|
|
|
|
|
Result := (ShowConfirmMessage_ArticulosSinStock(ListaArticulos) = IDYES)
|
|
|
|
|
|
else
|
|
|
|
|
|
Result := True;
|
|
|
|
|
|
end;
|
|
|
|
|
|
finally
|
|
|
|
|
|
FreeAndNil(ListaArticulos);
|
|
|
|
|
|
HideHourglassCursor;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.Ver(AArticulos: IBizInventario; AInventario: IBizInventario; APedido: IBizPedidoProveedor = Nil): Boolean;
|
|
|
|
|
|
var
|
|
|
|
|
|
AEditor : IEditorEntradaSalidaArticulos;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := False;
|
|
|
|
|
|
AEditor := NIL;
|
2008-11-11 16:22:18 +00:00
|
|
|
|
|
|
|
|
|
|
CreateEditor('EditorEntradaSalidaArticulos', IEditorEntradaSalidaArticulos, AEditor);
|
|
|
|
|
|
if Assigned(AEditor) then
|
|
|
|
|
|
with AEditor do
|
|
|
|
|
|
begin
|
|
|
|
|
|
try
|
|
|
|
|
|
Controller := Self; //OJO ORDEN MUY IMPORTANTE
|
|
|
|
|
|
Articulos := AArticulos;
|
|
|
|
|
|
Inventario := AInventario;
|
|
|
|
|
|
if Assigned(APedido) then
|
2007-11-18 18:42:04 +00:00
|
|
|
|
PedidoProveedor := APedido;
|
2008-11-11 16:22:18 +00:00
|
|
|
|
ShowModal;
|
|
|
|
|
|
Result := ResultadoModalOK;
|
|
|
|
|
|
finally
|
|
|
|
|
|
Release;
|
|
|
|
|
|
AEditor := NIL;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
end;
|
|
|
|
|
|
|
2008-11-07 21:05:48 +00:00
|
|
|
|
procedure TInventarioController.VerReservas(AArticulo: IBizInventario; const ATipoReservas: String);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
var
|
|
|
|
|
|
AEditor : IEditorDetalleReservas;
|
|
|
|
|
|
begin
|
|
|
|
|
|
AEditor := NIL;
|
2008-11-11 16:22:18 +00:00
|
|
|
|
|
|
|
|
|
|
CreateEditor('EditorDetalleReservas', IEditorDetalleReservas, AEditor);
|
|
|
|
|
|
if Assigned(AEditor) then
|
|
|
|
|
|
with AEditor do
|
|
|
|
|
|
begin
|
|
|
|
|
|
try
|
|
|
|
|
|
Controller := Self; //OJO ORDEN MUY IMPORTANTE
|
|
|
|
|
|
TipoReservas := ATipoReservas;
|
|
|
|
|
|
DetalleReservas := FDataModule.GetDetalleReservas;
|
|
|
|
|
|
Articulo := AArticulo;
|
|
|
|
|
|
MultiSelect := True;
|
|
|
|
|
|
ShowModal;
|
|
|
|
|
|
finally
|
|
|
|
|
|
Release;
|
|
|
|
|
|
AEditor := NIL;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
end;
|
|
|
|
|
|
|
2008-07-30 16:25:35 +00:00
|
|
|
|
procedure TInventarioController.VerTodos(AInventario: IBizInventario; const pTipoInventario: String);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
var
|
|
|
|
|
|
AEditor : IEditorInventario;
|
|
|
|
|
|
begin
|
|
|
|
|
|
AEditor := NIL;
|
2008-11-11 16:22:18 +00:00
|
|
|
|
|
|
|
|
|
|
CreateEditor('EditorInventario', IEditorInventario, AEditor);
|
|
|
|
|
|
if Assigned(AEditor) then
|
|
|
|
|
|
with AEditor do
|
|
|
|
|
|
begin
|
2008-11-11 18:56:14 +00:00
|
|
|
|
Controller := Self; //OJO ORDEN MUY IMPORTANTE
|
|
|
|
|
|
TipoInventario := pTipoInventario;
|
|
|
|
|
|
Inventario := AInventario;
|
|
|
|
|
|
MultiSelect := False;
|
|
|
|
|
|
ShowEmbedded;
|
2008-11-11 16:22:18 +00:00
|
|
|
|
end;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.EntradaSalidaArticulos(AArticulos, AInventario : IBizInventario; APedido: IBizPedidoProveedor = Nil): Boolean;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := False;
|
|
|
|
|
|
if not Assigned(AArticulos) then
|
|
|
|
|
|
Exit;
|
|
|
|
|
|
|
|
|
|
|
|
if not AArticulos.DataTable.Active then
|
|
|
|
|
|
AArticulos.DataTable.Active := True;
|
|
|
|
|
|
|
|
|
|
|
|
Result := Ver(AArticulos, AInventario, APedido);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2008-09-04 17:38:49 +00:00
|
|
|
|
function TInventarioController.ExtraerSeleccionados(AArticulos: IBizDetalleReservas): IBizDetalleReservas;
|
|
|
|
|
|
var
|
|
|
|
|
|
ASeleccionados : IBizDetalleReservas;
|
|
|
|
|
|
begin
|
|
|
|
|
|
ASeleccionados := (FDataModule as IDataModuleInventario).GetDetalleReservasVacio;
|
|
|
|
|
|
CopyDataTableDA5(AArticulos.DataTable, ASeleccionados.DataTable, True);
|
|
|
|
|
|
Result := ASeleccionados;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2007-11-16 20:58:56 +00:00
|
|
|
|
{procedure TInventarioController.RecibirArticulos(const APedido: IBizPedidoProveedor; const CodigoAlmacenDes: Integer);
|
|
|
|
|
|
{var
|
|
|
|
|
|
AArticulos: IBizInventario;
|
|
|
|
|
|
// ADetalles: IBizDetallesPedidoProveedor;
|
|
|
|
|
|
begin
|
|
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
|
if APedido.DataTable.FieldByName(fld_PedidosProveedorID_ALMACEN).IsNull then
|
|
|
|
|
|
begin
|
|
|
|
|
|
MessageBox(0, 'En el pedido que ha elegido no figura ning<6E>n almac<61>n como destino.' + #10#13 +
|
|
|
|
|
|
'Si desea recibir este pedido en alg<6C>n almac<61>n' + #10#13 +
|
|
|
|
|
|
'modifique antes el pedido para indicarlo.', 'Atenci<63>n', MB_ICONWARNING or MB_OK);
|
|
|
|
|
|
|
|
|
|
|
|
Exit;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
AArticulos := Buscar(ID_NULO);
|
|
|
|
|
|
if not AArticulos.DataTable.Active then
|
|
|
|
|
|
AArticulos.DataTable.Active := True;
|
|
|
|
|
|
|
|
|
|
|
|
if Assigned(APedido.Detalles) then
|
|
|
|
|
|
begin
|
|
|
|
|
|
APedido.Detalles.First;
|
|
|
|
|
|
while not APedido.Detalles.EOF do
|
|
|
|
|
|
begin
|
|
|
|
|
|
//Solo aquellos art<72>culos que esten dados de alta en nuestro cat<61>logo
|
|
|
|
|
|
if (APedido.Detalles.ID_ARTICULO > 0) then
|
|
|
|
|
|
begin
|
|
|
|
|
|
AArticulos.Insert;
|
|
|
|
|
|
if not APedido.DataTable.FieldByName(fld_PedidosProveedorID_ALMACEN).IsNull then
|
|
|
|
|
|
AArticulos.ID_ALMACEN := APedido.ID_ALMACEN;
|
|
|
|
|
|
if not APedido.DataTable.FieldByName(fld_PedidosProveedorID).IsNull then
|
|
|
|
|
|
AArticulos.ID_PEDIDO_PROVEEDOR := APedido.ID;
|
|
|
|
|
|
AArticulos.ID_ARTICULO := APedido.Detalles.ID_ARTICULO;
|
|
|
|
|
|
AArticulos.REFERENCIA_CLIENTE := APedido.Detalles.REFERENCIA;
|
|
|
|
|
|
AArticulos.REFERENCIA_PROVEEDOR := APedido.Detalles.REFERENCIA_PROVEEDOR;
|
|
|
|
|
|
AArticulos.DESCRIPCION := APedido.Detalles.CONCEPTO;
|
|
|
|
|
|
AArticulos.CANTIDAD := APedido.Detalles.CANTIDAD;
|
|
|
|
|
|
AArticulos.Post;
|
|
|
|
|
|
end;
|
|
|
|
|
|
APedido.Detalles.Next;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
if RecibirArticulos(AArticulos, CodigoAlmacenDes) then
|
|
|
|
|
|
PedidosProveedorController.CambiarSituacion(APedido);
|
|
|
|
|
|
|
|
|
|
|
|
finally
|
|
|
|
|
|
AArticulos := Nil;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;}
|
|
|
|
|
|
|
|
|
|
|
|
procedure TInventarioController.EntradaArticulosLibre(AInventario: IBizInventario; const CodigoAlmacenDestino: Integer);
|
|
|
|
|
|
var
|
|
|
|
|
|
AArticulos: IBizInventario;
|
|
|
|
|
|
begin
|
|
|
|
|
|
try
|
|
|
|
|
|
AArticulos := Buscar(ID_NULO);
|
|
|
|
|
|
|
|
|
|
|
|
//Se queda en la clase de negocio para as<61> todos y cada uno de los art<72>culos que
|
|
|
|
|
|
//se agreguen se asigne autom<6F>ticamente el codigo de almacen destino en OnNewRecord
|
|
|
|
|
|
AArticulos.TipoMovimiento := tEntradaLibre;
|
|
|
|
|
|
AArticulos.IDAlmacenDestino := CodigoAlmacenDestino;
|
|
|
|
|
|
EntradaSalidaArticulos(AArticulos, AInventario);
|
|
|
|
|
|
finally
|
|
|
|
|
|
AArticulos := Nil;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.EntradaPedido(AInventario: IBizInventario; APedido: IBizPedidoProveedor; ADetalles: IDAStronglyTypedDataTable; var ADetallesFinal: IBizInventario): Boolean;
|
|
|
|
|
|
var
|
|
|
|
|
|
AArticulos: IBizInventario;
|
|
|
|
|
|
begin
|
|
|
|
|
|
AArticulos := Buscar(ID_NULO);
|
|
|
|
|
|
|
|
|
|
|
|
//Se queda en la clase de negocio para as<61> todos y cada uno de los art<72>culos que
|
|
|
|
|
|
//se agreguen se asigne autom<6F>ticamente el codigo de almacen destino en OnNewRecord
|
|
|
|
|
|
AArticulos.TipoMovimiento := tEntradaPedidoProveedor;
|
|
|
|
|
|
AArticulos.IDAlmacenDestino := APedido.ID_ALMACEN;
|
|
|
|
|
|
|
|
|
|
|
|
//Inicializamos los articulos a hacer salida con los dados por parametro
|
|
|
|
|
|
Copiar(AArticulos, ADetalles, AInventario);
|
|
|
|
|
|
|
|
|
|
|
|
ADetallesFinal:= AArticulos;
|
|
|
|
|
|
Result := EntradaSalidaArticulos(AArticulos, AInventario, APedido);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TInventarioController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable);
|
|
|
|
|
|
begin
|
|
|
|
|
|
inherited;
|
|
|
|
|
|
//
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2008-09-04 11:46:32 +00:00
|
|
|
|
function TInventarioController.ReservarArticulos(AArticulos, AInventario: IBizInventario): Boolean;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := False;
|
|
|
|
|
|
if not Assigned(AArticulos) then
|
|
|
|
|
|
Exit;
|
|
|
|
|
|
|
|
|
|
|
|
if not AArticulos.DataTable.Active then
|
|
|
|
|
|
AArticulos.DataTable.Active := True;
|
|
|
|
|
|
|
|
|
|
|
|
Result := Ver(AArticulos, AInventario);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TInventarioController.ReservarArticulosLibre(AInventario: IBizInventario; const CodigoAlmacenOrigen,
|
|
|
|
|
|
CodigoAlmacenDestino: Integer);
|
2008-07-30 16:25:35 +00:00
|
|
|
|
var
|
|
|
|
|
|
AArticulos: IBizInventario;
|
|
|
|
|
|
begin
|
2008-09-04 11:46:32 +00:00
|
|
|
|
if (CodigoAlmacenOrigen <> CodigoAlmacenDestino) then
|
|
|
|
|
|
begin
|
|
|
|
|
|
try
|
|
|
|
|
|
AArticulos := Buscar(ID_NULO);
|
|
|
|
|
|
|
|
|
|
|
|
//Se queda en la clase de negocio para as<61> todos y cada uno de los art<72>culos que
|
|
|
|
|
|
//se agreguen se asigne autom<6F>ticamente el codigo de almacen destino en OnNewRecord
|
|
|
|
|
|
AArticulos.TipoMovimiento := tReserva;
|
|
|
|
|
|
AArticulos.IDAlmacenOrigen := CodigoAlmacenOrigen;
|
|
|
|
|
|
AArticulos.IDAlmacenDestino := CodigoAlmacenDestino;
|
|
|
|
|
|
ReservarArticulos(AArticulos, AInventario);
|
|
|
|
|
|
finally
|
|
|
|
|
|
AArticulos := Nil;
|
|
|
|
|
|
end;
|
2008-07-30 16:25:35 +00:00
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2007-11-16 20:58:56 +00:00
|
|
|
|
{procedure TInventarioController.RecibirPedidos(const CodigoAlmacenDes: Integer);
|
|
|
|
|
|
var
|
|
|
|
|
|
APedido: IBizPedidoProveedor;
|
|
|
|
|
|
begin
|
|
|
|
|
|
try
|
|
|
|
|
|
APedido := FPedidosProveedorController.BuscarPendientesRecepcion;
|
|
|
|
|
|
APedido := FPedidosProveedorController.ElegirPedidos(APedido, '', False);
|
|
|
|
|
|
|
|
|
|
|
|
if Assigned(APedido) then
|
|
|
|
|
|
RecibirArticulos(APedido, CodigoAlmacenDes);
|
|
|
|
|
|
|
|
|
|
|
|
finally
|
|
|
|
|
|
APedido := Nil;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
end;}
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.SalidaAlbaran(AInventario: IBizInventario; const CodigoAlmacenOrigen: Integer; ADetalles: IDAStronglyTypedDataTable): Boolean;
|
|
|
|
|
|
var
|
|
|
|
|
|
AArticulos: IBizInventario;
|
|
|
|
|
|
begin
|
|
|
|
|
|
try
|
|
|
|
|
|
Result := False;
|
|
|
|
|
|
AArticulos := Buscar(ID_NULO);
|
|
|
|
|
|
|
|
|
|
|
|
//Se queda en la clase de negocio para as<61> todos y cada uno de los art<72>culos que
|
|
|
|
|
|
//se agreguen se asigne autom<6F>ticamente el codigo de almacen destino en OnNewRecord
|
|
|
|
|
|
AArticulos.TipoMovimiento := tSalidaAlbaranCliente;
|
|
|
|
|
|
AArticulos.IDAlmacenOrigen := CodigoAlmacenOrigen;
|
|
|
|
|
|
|
|
|
|
|
|
//Inicializamos los articulos a hacer salida con los dados por parametro
|
|
|
|
|
|
Copiar(AArticulos, ADetalles, AInventario);
|
|
|
|
|
|
Result := EntradaSalidaArticulos(AArticulos, AInventario);
|
|
|
|
|
|
finally
|
|
|
|
|
|
AArticulos := Nil;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TInventarioController.SalidaArticulosLibre(AInventario: IBizInventario; Const CodigoAlmacenOrigen: Integer);
|
|
|
|
|
|
var
|
|
|
|
|
|
AArticulos: IBizInventario;
|
|
|
|
|
|
begin
|
|
|
|
|
|
try
|
|
|
|
|
|
AArticulos := Buscar(ID_NULO);
|
|
|
|
|
|
|
|
|
|
|
|
//Se queda en la clase de negocio para as<61> todos y cada uno de los art<72>culos que
|
|
|
|
|
|
//se agreguen se asigne autom<6F>ticamente el codigo de almacen destino en OnNewRecord
|
|
|
|
|
|
AArticulos.TipoMovimiento := tSalidaLibre;
|
|
|
|
|
|
AArticulos.IDAlmacenOrigen := CodigoAlmacenOrigen;
|
|
|
|
|
|
EntradaSalidaArticulos(AArticulos, AInventario);
|
|
|
|
|
|
finally
|
|
|
|
|
|
AArticulos := Nil;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TInventarioController.SetAlmacenesController(const Value: IAlmacenesController);
|
|
|
|
|
|
begin
|
|
|
|
|
|
FAlmacenesController := Value;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2008-07-30 16:25:35 +00:00
|
|
|
|
procedure TInventarioController.SetObrasController(const Value: IObrasController);
|
|
|
|
|
|
begin
|
|
|
|
|
|
FObrasController := Value;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2007-11-16 20:58:56 +00:00
|
|
|
|
procedure TInventarioController.SetArticulosController(const Value: IArticulosInventarioController);
|
|
|
|
|
|
begin
|
|
|
|
|
|
FArticulosController := Value
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2007-11-21 16:03:51 +00:00
|
|
|
|
procedure TInventarioController.SetPresupuestosClienteController(const Value: IPresupuestosClienteController);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
begin
|
2007-11-21 16:03:51 +00:00
|
|
|
|
FPresupuestosClienteController := Value
|
2007-11-16 20:58:56 +00:00
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TInventarioController.SetPedidosProveedorController(const Value: IPedidosProveedorController);
|
|
|
|
|
|
begin
|
|
|
|
|
|
FPedidosProveedorController := 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;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TInventarioController.TrasladarArticulosLibre(AInventario: IBizInventario; const CodigoAlmacenOrigen: Integer; Const CodigoAlmacenDestino: Integer);
|
|
|
|
|
|
var
|
|
|
|
|
|
AArticulos: IBizInventario;
|
|
|
|
|
|
begin
|
2008-09-04 11:46:32 +00:00
|
|
|
|
if (CodigoAlmacenOrigen <> CodigoAlmacenDestino) then
|
|
|
|
|
|
begin
|
|
|
|
|
|
try
|
|
|
|
|
|
AArticulos := Buscar(ID_NULO);
|
|
|
|
|
|
|
|
|
|
|
|
//Se queda en la clase de negocio para as<61> todos y cada uno de los art<72>culos que
|
|
|
|
|
|
//se agreguen se asigne autom<6F>ticamente el codigo de almacen destino en OnNewRecord
|
|
|
|
|
|
AArticulos.TipoMovimiento := tTraslado;
|
|
|
|
|
|
AArticulos.IDAlmacenOrigen := CodigoAlmacenOrigen;
|
|
|
|
|
|
AArticulos.IDAlmacenDestino := CodigoAlmacenDestino;
|
|
|
|
|
|
EntradaSalidaArticulos(AArticulos, AInventario);
|
|
|
|
|
|
finally
|
|
|
|
|
|
AArticulos := Nil;
|
|
|
|
|
|
end;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2008-09-05 10:48:24 +00:00
|
|
|
|
procedure TInventarioController.TrasladarReservas(AReservas: IBizDetalleReservas);
|
|
|
|
|
|
var
|
|
|
|
|
|
AArticulo: IBizInventario;
|
|
|
|
|
|
begin
|
|
|
|
|
|
ShowHourglassCursor;
|
|
|
|
|
|
try
|
|
|
|
|
|
with AReservas.DataTable do
|
|
|
|
|
|
begin
|
|
|
|
|
|
first;
|
|
|
|
|
|
while not eof do
|
|
|
|
|
|
begin
|
|
|
|
|
|
//Preparamos el articulo a trasladar con la cantidad correspondiente
|
|
|
|
|
|
AArticulo := Buscar(ID_NULO);
|
|
|
|
|
|
AArticulo.DataTable.Active := True;
|
|
|
|
|
|
// DesconectarTabla(AArticulo.DataTable);
|
|
|
|
|
|
AArticulo.Edit;
|
|
|
|
|
|
AArticulo.ID_ALMACEN := AReservas.ID_ALMACEN;
|
|
|
|
|
|
AArticulo.ID_ARTICULO := AReservas.ID_ARTICULO;
|
|
|
|
|
|
AArticulo.CANTIDAD := AReservas.CANTIDAD;
|
|
|
|
|
|
AArticulo.Post;
|
|
|
|
|
|
// ConectarTabla(AArticulo.DataTable);
|
|
|
|
|
|
|
|
|
|
|
|
//Se queda en la clase de negocio para as<61> todos y cada uno de los art<72>culos que
|
|
|
|
|
|
//se agreguen se asigne autom<6F>ticamente el codigo de almacen destino en OnNewRecord
|
|
|
|
|
|
AArticulo.TipoMovimiento := tTraslado;
|
|
|
|
|
|
AArticulo.IDAlmacenOrigen := AReservas.ID_ALMACEN;
|
|
|
|
|
|
AArticulo.IDAlmacenDestino := AReservas.ID_ALMACEN_RESERVA;
|
|
|
|
|
|
|
|
|
|
|
|
GuardarMovimientos(AArticulo, AReservas.FECHA_RESERVA, 'Traslado de material por la reserva: ' + AReservas.CAUSA_RESERVA);
|
|
|
|
|
|
// showmessage('trasladar: ' + IntToStr(AReservas.ID_ARTICULO) + ',' + IntToStr(AReservas.ID_ALMACEN) + ',' + IntToStr(AReservas.ID_ALMACEN_RESERVA));
|
|
|
|
|
|
next;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
//Eliminamos los registro de reserva relacionados en la tabla de movimientos
|
|
|
|
|
|
CancelarReservas(AReservas);
|
|
|
|
|
|
finally
|
|
|
|
|
|
HideHourglassCursor;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2007-11-16 20:58:56 +00:00
|
|
|
|
{
|
|
|
|
|
|
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);
|
2007-11-18 17:23:37 +00:00
|
|
|
|
var
|
|
|
|
|
|
Condicion: TDAWhereExpression;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
begin
|
|
|
|
|
|
if AInventario.DataTable.Active then
|
|
|
|
|
|
AInventario.DataTable.Active := False;
|
|
|
|
|
|
|
|
|
|
|
|
// Filtrar los inventario actuales por empresa
|
2007-11-21 16:03:51 +00:00
|
|
|
|
with AInventario.DataTable.DynamicWhere do
|
2007-11-16 20:58:56 +00:00
|
|
|
|
begin
|
2007-11-18 17:23:37 +00:00
|
|
|
|
// (ID_EMPRESA >= ID)
|
|
|
|
|
|
Condicion := NewBinaryExpression(NewField('', fld_InventarioID_EMPRESA), NewConstant(AppFactuGES.EmpresaActiva.ID, datInteger), dboEqual);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
|
2007-11-18 17:23:37 +00:00
|
|
|
|
if IsEmpty then
|
|
|
|
|
|
Expression := Condicion
|
|
|
|
|
|
else
|
|
|
|
|
|
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.GetAlmacenesController: IAlmacenesController;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := FAlmacenesController;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2008-07-30 16:25:35 +00:00
|
|
|
|
function TInventarioController.GetObrasController: IObrasController;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := FObrasController;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2007-11-16 20:58:56 +00:00
|
|
|
|
function TInventarioController.GetArticulosController: IArticulosInventarioController;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := FArticulosController;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2007-11-21 16:03:51 +00:00
|
|
|
|
function TInventarioController.GetPresupuestosClienteController: IPresupuestosClienteController;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
begin
|
2007-11-21 16:03:51 +00:00
|
|
|
|
Result := FPresupuestosClienteController;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.GetPedidosProveedorController: IPedidosProveedorController;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := FPedidosProveedorController;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
{procedure TInventarioController.GuardarArticulos(AInventario : IBizInventario);
|
|
|
|
|
|
var
|
|
|
|
|
|
AArticulos: 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;}
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.Liberar(AInventario: IBizInventario; Todos: Boolean): Boolean;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := False;
|
2008-05-20 18:50:02 +00:00
|
|
|
|
|
|
|
|
|
|
{ if not Assigned(AInventario) then
|
2007-11-16 20:58:56 +00:00
|
|
|
|
exit;
|
|
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
|
with AInventario.DataTable do
|
|
|
|
|
|
begin
|
|
|
|
|
|
if not Active then
|
|
|
|
|
|
Active := True;
|
|
|
|
|
|
|
|
|
|
|
|
if Todos then
|
|
|
|
|
|
begin
|
|
|
|
|
|
First;
|
|
|
|
|
|
while not EOF do
|
|
|
|
|
|
begin
|
|
|
|
|
|
Edit;
|
|
|
|
|
|
FieldByName(fld_INVENTARIOID_PEDIDO_CLIENTE).AsVariant := Null;
|
|
|
|
|
|
Post;
|
|
|
|
|
|
Next;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end
|
|
|
|
|
|
else
|
|
|
|
|
|
begin
|
|
|
|
|
|
Edit;
|
|
|
|
|
|
FieldByName(fld_INVENTARIOID_PEDIDO_CLIENTE).AsVariant := Null;
|
|
|
|
|
|
Post;
|
|
|
|
|
|
Next;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
ApplyUpdates;
|
|
|
|
|
|
Result := True;
|
|
|
|
|
|
end;
|
|
|
|
|
|
except
|
|
|
|
|
|
on E: EDAApplyUpdateFailed do
|
|
|
|
|
|
begin
|
|
|
|
|
|
AInventario.DataTable.CancelUpdates;
|
|
|
|
|
|
showmessage('Error al liberar los art<72>culos seleccionados');
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
}
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.Liberar(AInventario : IBizInventario): Boolean;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := False;
|
|
|
|
|
|
if Assigned(AInventario) then
|
|
|
|
|
|
Result := Liberar(AInventario, False);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
procedure TInventarioController.DeshabilitarOnCalcFields(Sender: TDADataTable);
|
|
|
|
|
|
begin
|
|
|
|
|
|
// Deshabilita el devolver RECID para la localizaci<63>n unica de tuplas de inventario
|
|
|
|
|
|
// Para as<61> poder utiliza ID para la inserci<63>n de movimientos
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2008-09-08 15:01:03 +00:00
|
|
|
|
function TInventarioController.Guardar(AArticulos: IBizInventario; const FechaMovimiento: TDateTime; const CausaMovimiento: String; AValidar:Boolean = True): Boolean;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
begin
|
|
|
|
|
|
Result := False;
|
|
|
|
|
|
|
|
|
|
|
|
if not Assigned(AArticulos) then
|
|
|
|
|
|
raise Exception.Create ('Art<72>culos no asignados');
|
|
|
|
|
|
|
2008-10-09 16:14:45 +00:00
|
|
|
|
if not AValidar
|
|
|
|
|
|
or (AValidar and Validar(AArticulos)) then //Evaluacion perezosa
|
2007-11-16 20:58:56 +00:00
|
|
|
|
begin
|
|
|
|
|
|
ShowHourglassCursor;
|
|
|
|
|
|
try
|
|
|
|
|
|
case AArticulos.TipoMovimiento of
|
2008-09-04 11:46:32 +00:00
|
|
|
|
tEntradaLibre, tSalidaLibre, tTraslado, tReserva: Result := GuardarMovimientos(AArticulos, FechaMovimiento, CausaMovimiento);
|
2007-11-16 20:58:56 +00:00
|
|
|
|
tSalidaAlbaranCliente : begin
|
|
|
|
|
|
AArticulos.DataTable.CancelUpdates;
|
|
|
|
|
|
Result := True;
|
|
|
|
|
|
end;
|
|
|
|
|
|
tEntradaPedidoProveedor : Result := True; //Dar de alta el albar<61>n
|
|
|
|
|
|
|
|
|
|
|
|
end;
|
|
|
|
|
|
finally
|
|
|
|
|
|
HideHourglassCursor;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end
|
|
|
|
|
|
else
|
|
|
|
|
|
AArticulos.DataTable.CancelUpdates;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TInventarioController.GuardarMovimientos(AArticulos: IBizInventario; const FechaMovimiento: TDateTime; const CausaMovimiento: String): Boolean;
|
|
|
|
|
|
var
|
|
|
|
|
|
AArticulosTraslado : IBizInventario;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := False;
|
2008-11-04 19:18:13 +00:00
|
|
|
|
|
2007-11-16 20:58:56 +00:00
|
|
|
|
if Assigned(AArticulos) then
|
|
|
|
|
|
begin
|
2008-11-04 19:18:13 +00:00
|
|
|
|
{ DesconectarTabla(AArticulos.DataTable);
|
|
|
|
|
|
repeat
|
|
|
|
|
|
if (AArticulos.ID_ARTICULO < 1) then
|
|
|
|
|
|
AArticulos.Delete;
|
|
|
|
|
|
AArticulos.First;
|
|
|
|
|
|
until (AArticulos.DataTable.Locate('ID_ARTICULO', '0', []) = false);
|
|
|
|
|
|
|
|
|
|
|
|
ConectarTabla(AArticulos.DataTable);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-11-16 20:58:56 +00:00
|
|
|
|
//Deshabilitamos el calculo de ID (RECID) para poderlo usar para la inserci<63>n de movimientos
|
|
|
|
|
|
AArticulos.DataTable.OnCalcFields := DeshabilitarOnCalcFields;
|
|
|
|
|
|
with AArticulos.DataTable do
|
|
|
|
|
|
begin
|
|
|
|
|
|
First;
|
|
|
|
|
|
while not EOF do
|
|
|
|
|
|
begin
|
|
|
|
|
|
if not Editing then
|
|
|
|
|
|
Edit;
|
|
|
|
|
|
|
|
|
|
|
|
//Realmente son los campos de la tabla movimientos los que estamos asignando
|
|
|
|
|
|
//que luego por comandos se realizar<61>n las inserciones
|
|
|
|
|
|
AArticulos.FECHA_MOVIMIENTO := FechaMovimiento;
|
|
|
|
|
|
AArticulos.CAUSA := CausaMovimiento;
|
|
|
|
|
|
case AArticulos.TipoMovimiento of
|
|
|
|
|
|
tEntradaLibre: AArticulos.TIPO := CTE_TIPO_ENTRADA;
|
|
|
|
|
|
tSalidaLibre, tTraslado: AArticulos.TIPO := CTE_TIPO_SALIDA;
|
2008-09-04 11:46:32 +00:00
|
|
|
|
tReserva: begin
|
|
|
|
|
|
AArticulos.TIPO := CTE_TIPO_RESERVA;
|
|
|
|
|
|
AArticulos.ID_ALMACEN_RESERVA := AArticulos.IDAlmacenDestino;
|
|
|
|
|
|
end;
|
2007-11-16 20:58:56 +00:00
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
Post;
|
|
|
|
|
|
Next;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
//Solo para traslados, realizaremos los mismos movimientos, pero en este caso
|
|
|
|
|
|
//de entrada en el almac<61>n destino
|
|
|
|
|
|
if (AArticulos.TipoMovimiento = tTraslado) then
|
|
|
|
|
|
begin
|
|
|
|
|
|
AArticulosTraslado := Buscar(ID_NULO);
|
|
|
|
|
|
//Deshabilitamos el calculo de ID (RECID) para poderlo usar para la inserci<63>n de movimientos
|
|
|
|
|
|
AArticulosTraslado.DataTable.OnCalcFields := DeshabilitarOnCalcFields;
|
|
|
|
|
|
AArticulosTraslado.DataTable.Active := True;
|
|
|
|
|
|
First;
|
|
|
|
|
|
while not EOF do
|
|
|
|
|
|
begin
|
|
|
|
|
|
AArticulosTraslado.Insert;
|
|
|
|
|
|
AArticulosTraslado.ID_ALMACEN := AArticulos.IDAlmacenDestino;
|
|
|
|
|
|
AArticulosTraslado.ID_ARTICULO := AArticulos.ID_ARTICULO;
|
|
|
|
|
|
AArticulosTraslado.FECHA_MOVIMIENTO := AArticulos.FECHA_MOVIMIENTO;
|
|
|
|
|
|
AArticulosTraslado.CAUSA := AArticulos.CAUSA;
|
|
|
|
|
|
AArticulosTraslado.TIPO := CTE_TIPO_ENTRADA;
|
|
|
|
|
|
AArticulosTraslado.CANTIDAD := AArticulos.CANTIDAD;
|
|
|
|
|
|
AArticulosTraslado.Post;
|
|
|
|
|
|
Next;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
AArticulosTraslado.DataTable.ApplyUpdates;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
ApplyUpdates;
|
|
|
|
|
|
Result := True;
|
|
|
|
|
|
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.
|
2008-05-21 15:15:41 +00:00
|
|
|
|
|