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/Model/uBizInventario.pas
2007-06-11 15:35:41 +00:00

506 lines
14 KiB
ObjectPascal
Raw Blame History

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.