This repository has been archived on 2024-12-02. You can view files and clone it, but cannot push or open issues or pull requests.
AlonsoYSal_FactuGES/Modulos/Articulos/Reglas/uBizArticulos.pas
2007-06-21 16:02:50 +00:00

423 lines
13 KiB
ObjectPascal
Raw Blame History

unit uBizArticulos;
interface
uses
uDAInterfaces, uDADataTable, schArticulosClient_Intf, Classes,
DBGrids, uDBSelectionList, DB, uExceptions, Controls,
uBizMontajes, uBizPedidosProveedor;
type
IBizArticulosAlmacen = interface(IARTICULOS)
['{97972D47-1503-4DDD-9B49-966A6E93EF5E}']
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;
TBizArticulosAlmacenDataTableRules = class(TARTICULOSDataTableRules, IBizArticulosAlmacen,
IApplyUpdateFailedException, ISelectedRowList)
private
FCodigoAlmacenEntrada : Integer;
FSelectedRows : TSelectedRowList;
FPedido : IBizPedidosProveedor;
procedure OnNewRecord(Sender: TDADataTable); override;
procedure OnPostError(DataTable: TDADataTable; Error: EDatabaseError;
var Action: TDataAction); override;
protected
function GetPedido : IBizPedidosProveedor;
procedure SetPedido (Const Value: IBizPedidosProveedor);
function GetCodigoAlmacenEntrada: Integer;
procedure SetCodigoAlmacenEntrada(const Value: Integer);
function GetSelectedRows : TSelectedRowList; virtual;
procedure ShowApplyUpdateFailed (const Error: EDAApplyUpdateFailed); virtual;
public
property CodigoAlmacenEntrada: Integer read GetCodigoAlmacenEntrada write SetCodigoAlmacenEntrada;
constructor Create(aDataTable: TDADataTable); 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;
end;
implementation
uses
Dialogs, uDACDSDataTable, SysUtils, uDataModuleBase, uDataModuleUsuarios,
uEditorUtils, uDataModuleArticulos, Variants, uBizImportesDetalleBase,
uDataModuleAlmacenes, uBizAlmacenes, schPedidosProveedorClient_Intf,
uEditorSituacionPedido, Forms, wIndows, uDataModuleMontajes;
{ TBizArticulosAlmacenDataTableRules }
constructor TBizArticulosAlmacenDataTableRules.Create(
aDataTable: TDADataTable);
begin
inherited;
FPedido := NIL;
FSelectedRows := TSelectedRowList.Create(aDataTable);
CodigoAlmacenEntrada := -1;
end;
destructor TBizArticulosAlmacenDataTableRules.Destroy;
begin
FPedido := NIL;
FSelectedRows.Free;
inherited;
end;
function TBizArticulosAlmacenDataTableRules.GetSelectedRows: TSelectedRowList;
begin
Result := FSelectedRows;
end;
procedure TBizArticulosAlmacenDataTableRules.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 TBizArticulosAlmacenDataTableRules.Show: TModalResult;
begin
Result := ShowEditor(IBizArticulosAlmacen, Self, etItem);
end;
procedure TBizArticulosAlmacenDataTableRules.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 TBizArticulosAlmacenDataTableRules.OnNewRecord(Sender: TDADataTable);
begin
inherited;
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 TBizArticulosAlmacenDataTableRules.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 TBizArticulosAlmacenDataTableRules.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 TBizArticulosAlmacenDataTableRules.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 TBizArticulosAlmacenDataTableRules.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 TBizArticulosAlmacenDataTableRules.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 TBizArticulosAlmacenDataTableRules.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 TBizArticulosAlmacenDataTableRules.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 TBizArticulosAlmacenDataTableRules.GetCodigoAlmacenEntrada: Integer;
begin
Result := FCodigoAlmacenEntrada;
end;
procedure TBizArticulosAlmacenDataTableRules.SetCodigoAlmacenEntrada(
const Value: Integer);
begin
FCodigoAlmacenEntrada := Value;
end;
function TBizArticulosAlmacenDataTableRules.ShowForSelect: TModalResult;
begin
Result := ShowEditor(IBizArticulosAlmacen, Self, etSelectItems);
end;
function TBizArticulosAlmacenDataTableRules.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 TBizArticulosAlmacenDataTableRules.GetPedido: IBizPedidosProveedor;
begin
Result := FPedido;
end;
procedure TBizArticulosAlmacenDataTableRules.SetPedido(const Value: IBizPedidosProveedor);
begin
FPedido := Value;
end;
initialization
RegisterDataTableRules('BizAlmacen', TBizAlmacenDataTableRules);
RegisterDataTableRules('BizArticulosAlmacen', TBizArticulosAlmacenDataTableRules);
finalization
end.