git-svn-id: https://192.168.0.254/svn/Proyectos.AlonsoYSal_FactuGES/trunk@5 9a1d36f3-7752-2d40-8ccb-50eb49674c68
423 lines
13 KiB
ObjectPascal
423 lines
13 KiB
ObjectPascal
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.
|