git-svn-id: https://192.168.0.254/svn/Proyectos.LuisLeon_FactuGES/tags/1.2.0@6 c93665c3-c93d-084d-9b98-7d5f4a9c3376
506 lines
14 KiB
ObjectPascal
506 lines
14 KiB
ObjectPascal
unit uBizInventario;
|
||
|
||
interface
|
||
|
||
uses
|
||
uDAInterfaces, uDADataTable, schInventarioClient_Intf,
|
||
uBizArticulosProveedor, uDBSelectionListUtils;
|
||
|
||
{ uDAInterfaces, uDADataTable, schArticulosClient_Intf, Classes,
|
||
DBGrids, uDBSelectionList, DB, uExceptions, Controls,
|
||
uBizMontajes, uBizPedidosProveedor;
|
||
}
|
||
const
|
||
BIZ_CLIENT_INVENTARIO = 'Client.Inventario';
|
||
|
||
type
|
||
|
||
IBizInventario = interface(IInventario)
|
||
['{12051CDB-9BB1-43C5-AC89-181A27A35513}']
|
||
function GetIDAlmacenEntrada: Integer;
|
||
procedure SetIDAlmacenEntrada(const Value: Integer);
|
||
property IDAlmacenEntrada: Integer read GetIDAlmacenEntrada write SetIDAlmacenEntrada;
|
||
|
||
function EsNuevo : Boolean;
|
||
procedure Copiar(AArticulo: IBizArticuloProveedor);
|
||
|
||
function GetSelectedRecords: ISelectedRecords;
|
||
property SelectedRecords : ISelectedRecords read GetSelectedRecords;
|
||
|
||
{
|
||
procedure RecibirArticulos(Const APedido: IBizPedidosProveedor; Const CodigoAlmacenDes: Integer); overload;
|
||
procedure RecibirArticulos(Const CodigoAlmacenDes: Integer); overload;
|
||
procedure GuardarArticulosUnitarios;
|
||
function Trasladar: Boolean;
|
||
function Liberar: Boolean;
|
||
function Reservar(Const AMontaje: IBizMontaje): Boolean; overload;
|
||
function Reservar(Const CodigoMontaje: Integer): Boolean; overload;
|
||
function Eliminar: Boolean;
|
||
|
||
function GetCodigoAlmacenEntrada: Integer;
|
||
procedure SetCodigoAlmacenEntrada(const Value: Integer);
|
||
property CodigoAlmacenEntrada: Integer read GetCodigoAlmacenEntrada write SetCodigoAlmacenEntrada;
|
||
|
||
function GetPedido : IBizPedidosProveedor;
|
||
procedure SetPedido (Const Value: IBizPedidosProveedor);
|
||
property Pedido: IBizPedidosProveedor read GetPedido write SetPedido;
|
||
|
||
function Show: TModalResult;
|
||
function ShowForSelect : TModalResult;
|
||
// procedure ShowAll;
|
||
// procedure Preview;
|
||
}
|
||
end;
|
||
|
||
TBizInventario = class(TInventarioDataTableRules, IBizInventario, ISelectedRecords)
|
||
private
|
||
FIDAlmacenEntrada : Integer;
|
||
function GetSelected: Boolean;
|
||
procedure SetSelected(const Value: Boolean);
|
||
// FPedido : IBizPedidosProveedor;
|
||
procedure OnNewRecord(Sender: TDADataTable); override;
|
||
// procedure OnPostError(DataTable: TDADataTable; Error: EDatabaseError;
|
||
// var Action: TDataAction); override;
|
||
protected
|
||
FSelectedRecords : TSelectedRecords;
|
||
// function GetPedido : IBizPedidosProveedor;
|
||
// procedure SetPedido (Const Value: IBizPedidosProveedor);
|
||
|
||
function GetIDAlmacenEntrada: Integer;
|
||
procedure SetIDAlmacenEntrada(const Value: Integer);
|
||
// function GetSelectedRows : TSelectedRowList; virtual;
|
||
// procedure ShowApplyUpdateFailed (const Error: EDAApplyUpdateFailed); virtual;
|
||
public
|
||
property IDAlmacenEntrada: Integer read GetIDAlmacenEntrada write SetIDAlmacenEntrada;
|
||
|
||
constructor Create(aDataTable: TDADataTable); override;
|
||
destructor Destroy; override;
|
||
{
|
||
destructor Destroy; override;
|
||
function Show: TModalResult;
|
||
function ShowForSelect : TModalResult;
|
||
procedure RecibirArticulos(Const APedido: IBizPedidosProveedor; Const CodigoAlmacenDes: Integer); overload;
|
||
procedure RecibirArticulos(Const CodigoAlmacenDes: Integer); overload;
|
||
procedure GuardarArticulosUnitarios;
|
||
function Trasladar: Boolean;
|
||
function Liberar: Boolean;
|
||
function Reservar(Const AMontaje: IBizMontaje): Boolean; overload;
|
||
function Reservar(Const CodigoMontaje: Integer): Boolean; overload;
|
||
function Eliminar: Boolean;
|
||
property SelectedRows : TSelectedRowList read GetSelectedRows;
|
||
property Pedido: IBizPedidosProveedor read GetPedido write SetPedido;
|
||
}
|
||
function EsNuevo : Boolean;
|
||
procedure Copiar(AArticulo: IBizArticuloProveedor);
|
||
function GetSelectedRecords: ISelectedRecords;
|
||
property SelectedRecords : ISelectedRecords read GetSelectedRecords implements ISelectedRecords;
|
||
property Selected : Boolean read GetSelected write SetSelected;
|
||
end;
|
||
|
||
implementation
|
||
|
||
uses
|
||
Dialogs, uDACDSDataTable, SysUtils;
|
||
{ uDataModuleUsuarios,
|
||
uEditorUtils, uDataModuleArticulos, Variants, uBizImportesDetalleBase,
|
||
uDataModuleAlmacenes, uBizAlmacenes, schPedidosProveedorClient_Intf,
|
||
uEditorSituacionPedido, Forms, wIndows, uDataModuleMontajes;
|
||
}
|
||
|
||
{ TBizInventario }
|
||
|
||
procedure TBizInventario.Copiar(AArticulo: IBizArticuloProveedor);
|
||
begin
|
||
if not AArticulo.DataTable.Active then
|
||
AArticulo.DataTable.Active := True;
|
||
|
||
with AArticulo.DataTable do
|
||
begin
|
||
First;
|
||
while not EOF do
|
||
begin
|
||
Self.DataTable.Insert;
|
||
Self.ID_ALMACEN := IDAlmacenEntrada;
|
||
Self.ID_ARTICULO := AArticulo.ID;
|
||
Self.DESCRIPCION := AArticulo.DESCRIPCION;
|
||
Self.CANTIDAD := 1;
|
||
Self.DataTable.Post;
|
||
Next;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
constructor TBizInventario.Create(aDataTable: TDADataTable);
|
||
begin
|
||
inherited;
|
||
// FPedido := NIL;
|
||
IDAlmacenEntrada := -1;
|
||
FSelectedRecords := TSelectedRecords.Create(aDataTable);
|
||
end;
|
||
|
||
destructor TBizInventario.Destroy;
|
||
begin
|
||
FreeAndNIL(FSelectedRecords);
|
||
inherited;
|
||
end;
|
||
|
||
{destructor TBizInventario.Destroy;
|
||
begin
|
||
FPedido := NIL;
|
||
FSelectedRows.Free;
|
||
inherited;
|
||
end;
|
||
|
||
function TBizInventario.GetSelectedRows: TSelectedRowList;
|
||
begin
|
||
Result := FSelectedRows;
|
||
end;
|
||
|
||
procedure TBizInventario.RecibirArticulos(Const APedido: IBizPedidosProveedor; Const CodigoAlmacenDes: Integer);
|
||
var
|
||
AArticulos: IBizArticulosAlmacen;
|
||
ADetalles: IBizDetallesPedidoProveedor;
|
||
begin
|
||
try
|
||
if APedido.DataTable.FieldByName(fld_PedidosProveedorCODIGOALMACEN).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 := dmArticulos.GetItem(-1);
|
||
if not AArticulos.DataTable.Active then
|
||
AArticulos.DataTable.Active := True;
|
||
|
||
ADetalles := APedido.Detalles;
|
||
if Assigned(ADetalles) then
|
||
begin
|
||
ADetalles.First;
|
||
while not ADetalles.EOF do
|
||
begin
|
||
if (ADetalles.TIPO = TIPODETALLE_CONCEPTO)
|
||
and (Length(Trim(ADetalles.DESCRIPCION)) <> 0) then
|
||
begin
|
||
AArticulos.Insert;
|
||
if not APedido.DataTable.FieldByName(fld_PedidosProveedorCODIGOALMACEN).IsNull then
|
||
AArticulos.CODIGOALMACEN := APedido.CODIGOALMACEN;
|
||
if not APedido.DataTable.FieldByName(fld_PedidosProveedorCODIGO).IsNull then
|
||
AArticulos.CODIGOPEDIDO := APedido.CODIGO;
|
||
if not APedido.DataTable.FieldByName(fld_PedidosProveedorCODIGOMONTAJE).IsNull then
|
||
AArticulos.CODIGOMONTAJE := APedido.CODIGOMONTAJE;
|
||
AArticulos.DESCRIPCION := ADetalles.DESCRIPCION;
|
||
AArticulos.CANTIDAD := ADetalles.CANTIDAD;
|
||
AArticulos.Post;
|
||
end;
|
||
ADetalles.Next;
|
||
end;
|
||
end;
|
||
|
||
if APedido.DataTable.FieldByName(fld_PedidosProveedorCODIGOALMACEN).IsNull
|
||
then
|
||
AArticulos.CodigoAlmacenEntrada := CodigoAlmacenDes
|
||
else
|
||
begin
|
||
AArticulos.CodigoAlmacenEntrada := APedido.CODIGOALMACEN;
|
||
AArticulos.Pedido := APedido;
|
||
end;
|
||
|
||
if AArticulos.show = mrOK then
|
||
begin
|
||
with TfEditorSituacionPedido.Create(Nil) do
|
||
try
|
||
if (ShowModal = mrOk) then
|
||
begin
|
||
if rdxSituacion1.checked
|
||
then APedido.CambiarSituacion(SITUACION_RECIBIDO)
|
||
else APedido.CambiarSituacion(SITUACION_PARCIAL);
|
||
end
|
||
else
|
||
showmessage('Pedido quedar<61> con la misma situaci<63>n con la que estaba antes de ser elegido');
|
||
finally
|
||
Free;
|
||
end;
|
||
|
||
Self.DataTable.Refresh;
|
||
end;
|
||
finally
|
||
AArticulos := Nil;
|
||
end;
|
||
end;
|
||
|
||
function TBizInventario.Show: TModalResult;
|
||
begin
|
||
Result := ShowEditor(IBizArticulosAlmacen, Self, etItem);
|
||
end;
|
||
|
||
procedure TBizInventario.ShowApplyUpdateFailed(
|
||
const Error: EDAApplyUpdateFailed);
|
||
begin
|
||
if (Pos(AUF_FKVIOLATION, Error.Message) > 0) then
|
||
MessageBox(0, 'No se puede borrar este art<72>culo porque asociado a algo', 'Atenci<63>n', MB_ICONWARNING or MB_OK);
|
||
end;
|
||
}
|
||
|
||
procedure TBizInventario.OnNewRecord(Sender: TDADataTable);
|
||
begin
|
||
inherited;
|
||
ID := GetRecNo; // -1, -2, -3...
|
||
// ID_EMPRESA := dmUsuarios.IDEmpresaActual;
|
||
// USUARIO := dmUsuarios.LoginInfo.Usuario;
|
||
{
|
||
DESCRIPCION := 'Escriba aqu<71> la descripci<63>n del art<72>culo';
|
||
CODIGO := dmArticulos.GetNextAutoinc;
|
||
if CodigoAlmacenEntrada <> -1 then
|
||
CODIGOALMACEN := CodigoAlmacenEntrada;
|
||
CANTIDAD := 1;
|
||
}
|
||
end;
|
||
|
||
{function TBizInventario.Trasladar: Boolean;
|
||
var
|
||
AAlmacen: IBizAlmacen;
|
||
AObj: TSelectedRowList;
|
||
i: Integer;
|
||
begin
|
||
try
|
||
AAlmacen := dmAlmacenes.GetItems;
|
||
if AAlmacen.ShowForSelect = mrOk then
|
||
begin
|
||
AObj := Self.GetSelectedRows;
|
||
Self.DataTable.DisableControls;
|
||
for i:=0 to (AObj.Count -1) do
|
||
begin
|
||
Self.DataTable.GotoBookmark(AObj.Items[i]);
|
||
Self.Edit;
|
||
Self.CODIGOALMACEN := AAlmacen.CODIGO;
|
||
Self.Post;
|
||
end;
|
||
Self.DataTable.EnableControls;
|
||
Self.DataTable.ApplyUpdates;
|
||
end;
|
||
AAlmacen := Nil;
|
||
except
|
||
on E: EDAApplyUpdateFailed do
|
||
begin
|
||
Self.DataTable.CancelUpdates;
|
||
showmessage('Error en el traslado');
|
||
AAlmacen := Nil;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
function TBizInventario.Liberar: Boolean;
|
||
var
|
||
AObj: TSelectedRowList;
|
||
i: Integer;
|
||
begin
|
||
try
|
||
AObj := Self.GetSelectedRows;
|
||
Self.DataTable.DisableControls;
|
||
for i:=0 to (AObj.Count -1) do
|
||
begin
|
||
Self.DataTable.GotoBookmark(AObj.Items[i]);
|
||
Self.Edit;
|
||
Self.datatable.FieldByName(fld_ARTICULOSCODIGOMontaje).AsVariant := Null;
|
||
Self.Post;
|
||
end;
|
||
Self.DataTable.EnableControls;
|
||
Self.DataTable.ApplyUpdates;
|
||
except
|
||
on E: EDAApplyUpdateFailed do
|
||
begin
|
||
Self.DataTable.CancelUpdates;
|
||
showmessage('Error al liberar los art<72>culos');
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
function TBizInventario.Reservar(const AMontaje: IBizMontaje): Boolean;
|
||
var
|
||
AObj: TSelectedRowList;
|
||
i: Integer;
|
||
begin
|
||
try
|
||
AObj := Self.GetSelectedRows;
|
||
Self.DataTable.DisableControls;
|
||
for i:=0 to (AObj.Count -1) do
|
||
begin
|
||
Self.DataTable.GotoBookmark(AObj.Items[i]);
|
||
Self.Edit;
|
||
Self.CODIGOMontaje := AMontaje.CODIGO;
|
||
Self.Post;
|
||
end;
|
||
Self.DataTable.EnableControls;
|
||
Self.DataTable.ApplyUpdates;
|
||
except
|
||
on E: EDAApplyUpdateFailed do
|
||
begin
|
||
Self.DataTable.CancelUpdates;
|
||
showmessage('Error al reservar para la Montaje');
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TBizInventario.RecibirArticulos(Const CodigoAlmacenDes: Integer);
|
||
var
|
||
AArticulos: IBizArticulosAlmacen;
|
||
begin
|
||
try
|
||
AArticulos := dmArticulos.GetItem(-1);
|
||
if not AArticulos.DataTable.Active then
|
||
AArticulos.DataTable.Active := True;
|
||
|
||
AArticulos.CodigoAlmacenEntrada := CodigoAlmacenDes;
|
||
AArticulos.Show;
|
||
Self.DataTable.Refresh;
|
||
finally
|
||
AArticulos := Nil;
|
||
end;
|
||
end;
|
||
|
||
procedure TBizInventario.GuardarArticulosUnitarios;
|
||
var
|
||
AArticulosUnitarios: IBizArticulosAlmacen;
|
||
i: Integer;
|
||
begin
|
||
AArticulosUnitarios := dmArticulos.getItem(-1);
|
||
if not AArticulosUnitarios.DataTable.Active then
|
||
AArticulosUnitarios.DataTable.Active := True;
|
||
|
||
Self.First;
|
||
while not Self.DataTable.EOF do
|
||
begin
|
||
for i:=0 to (Self.CANTIDAD - 1) do
|
||
begin
|
||
AArticulosUnitarios.Insert;
|
||
AArticulosUnitarios.CODIGOALMACEN := Self.CODIGOALMACEN;
|
||
if not Self.DataTable.FieldByName(fld_ARTICULOSCODIGOPEDIDO).IsNull then
|
||
AArticulosUnitarios.CODIGOPEDIDO := Self.CODIGOPEDIDO;
|
||
if not Self.DataTable.FieldByName(fld_ARTICULOSCODIGOMONTAJE).IsNull then
|
||
AArticulosUnitarios.CODIGOMONTAJE := Self.CODIGOMONTAJE;
|
||
AArticulosUnitarios.DESCRIPCION := Self.DESCRIPCION;
|
||
AArticulosUnitarios.Post;
|
||
end;
|
||
Self.Next;
|
||
end;
|
||
|
||
Self.DataTable.CancelUpdates;
|
||
AArticulosUnitarios.DataTable.ApplyUpdates;
|
||
end;
|
||
|
||
function TBizInventario.Eliminar: Boolean;
|
||
var
|
||
AObj: TSelectedRowList;
|
||
i: Integer;
|
||
begin
|
||
try
|
||
AObj := Self.GetSelectedRows;
|
||
Self.DataTable.DisableControls;
|
||
for i:=0 to (AObj.Count -1) do
|
||
begin
|
||
Self.DataTable.GotoBookmark(AObj.Items[i]);
|
||
Self.DataTable.Delete;
|
||
end;
|
||
Self.DataTable.EnableControls;
|
||
Self.DataTable.ApplyUpdates;
|
||
|
||
// Self.SelectedRows.Clear;
|
||
// Self.SelectedRows.CurrentRowSelected := True;
|
||
|
||
except
|
||
on E: EDAApplyUpdateFailed do
|
||
begin
|
||
Self.DataTable.CancelUpdates;
|
||
showmessage('Error al eliminar los art<72>culos');
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TBizInventario.OnPostError(
|
||
DataTable: TDADataTable; Error: EDatabaseError; var Action: TDataAction);
|
||
begin
|
||
inherited;
|
||
Action := daAbort;
|
||
if (Pos(AUF_HAVEVALUE, Error.Message) > 0) then
|
||
begin
|
||
if (Pos('almac<61>n', Error.Message) > 0) then
|
||
MessageBox(0, 'Debe indicar el almac<61>n de destino', 'Atenci<63>n', MB_ICONWARNING or MB_OK)
|
||
else
|
||
raise Error;
|
||
end
|
||
else
|
||
raise Error;
|
||
end;
|
||
}
|
||
|
||
function TBizInventario.EsNuevo: Boolean;
|
||
begin
|
||
Result := (ID < 0);
|
||
end;
|
||
|
||
function TBizInventario.GetIDAlmacenEntrada: Integer;
|
||
begin
|
||
Result := FIDAlmacenEntrada;
|
||
end;
|
||
|
||
function TBizInventario.GetSelected: Boolean;
|
||
begin
|
||
Result := FSelectedRecords.CurrentRowSelected;
|
||
end;
|
||
|
||
function TBizInventario.GetSelectedRecords: ISelectedRecords;
|
||
begin
|
||
Result := FSelectedRecords;
|
||
end;
|
||
|
||
procedure TBizInventario.SetIDAlmacenEntrada(const Value: Integer);
|
||
begin
|
||
FIDAlmacenEntrada := Value;
|
||
end;
|
||
|
||
procedure TBizInventario.SetSelected(const Value: Boolean);
|
||
begin
|
||
FSelectedRecords.CurrentRowSelected := True;
|
||
end;
|
||
|
||
{
|
||
function TBizInventario.ShowForSelect: TModalResult;
|
||
begin
|
||
Result := ShowEditor(IBizArticulosAlmacen, Self, etSelectItems);
|
||
end;
|
||
|
||
function TBizInventario.Reservar(const CodigoMontaje: Integer): Boolean;
|
||
var
|
||
AMontaje: IBizMontaje;
|
||
begin
|
||
try
|
||
AMontaje := dmMontajes.GetItem(CodigoMontaje);
|
||
AMontaje.DataTable.Active := True;
|
||
Reservar(AMontaje);
|
||
finally
|
||
AMontaje := Nil;
|
||
end;
|
||
end;
|
||
|
||
function TBizInventario.GetPedido: IBizPedidosProveedor;
|
||
begin
|
||
Result := FPedido;
|
||
end;
|
||
|
||
procedure TBizInventario.SetPedido(const Value: IBizPedidosProveedor);
|
||
begin
|
||
FPedido := Value;
|
||
end;
|
||
}
|
||
|
||
initialization
|
||
RegisterDataTableRules(BIZ_CLIENT_INVENTARIO, TBizInventario);
|
||
|
||
|
||
finalization
|
||
|
||
end.
|