unit uBizObraRelacionada;

interface

uses uDADataTable, uBizObra;

const
  BIZ_OBRARELACIONADA = 'IBizObraRelacionada';

type
  IBizObraRelacionada = interface(IBizObra)
  ['{4C76F690-F6DF-4EEA-938B-160F5A80ACD6}']
  end;

  TBizObraRelacionada = class(TBizObraDataTableRules, IBizObraRelacionada)
  end;

  function GetItem(CodigoObra : Integer) : IBizObraRelacionada;
  function GetItems: IBizObraRelacionada;
  function GetItemsSeleccionados(ASource : IBizObraRelacionada): IBizObraRelacionada;

implementation

uses SysUtils, uDBSelectionList, uDAInterfaces, uDataModuleObras;

function GetItem(CodigoObra : Integer) : IBizObraRelacionada;
begin
  Result := GetItems;
  with Result.DataTable do
  begin
    if Active then Active := False;
    Where.Clear;
    Where.AddText('OBRAS.CODIGO' + ' = ' + IntToStr(CodigoObra));
    Active := True;
  end;
end;

function GetItems: IBizObraRelacionada;
begin
  Result := (dmObras.GetDataTableItems(BIZ_OBRARELACIONADA) as IBizObraRelacionada);
end;

function GetItemsSeleccionados(ASource : IBizObraRelacionada): IBizObraRelacionada;
var
  aObj : ISelectedRowList;
  dtObra : IBizObraRelacionada;
  i : integer;
  Cadena: Variant;
begin
  if Supports(ASource, ISelectedRowList, aObj) then
  begin
    if (aObj.SelectedRows.Count = 1) then
    begin
      ASource.DataTable.GotoBookmark(aObj.SelectedRows[0]);
      Result := GetItem(ASource.CODIGO);
      Exit;
    end
    else
      dtObra := GetItems;
  end
  else
    raise Exception.Create('Interface no soportada (GetItemsSeleccionados)');

  //Si esta abierta cerramos para poner el where
  if dtObra.DataTable.Active then
     dtObra.DataTable.Active := False;
  with dtObra.DataTable.Where do
  begin
    Cadena := '';
    for i := 0 to aObj.SelectedRows.Count - 1 do
    begin
      ASource.DataTable.GotoBookmark(aObj.SelectedRows[i]);
      if Cadena <> '' then Cadena:= Cadena + ', ';
      Cadena:= Cadena + IntToStr(ASource.CODIGO);
    end;
    Clear;
    Cadena := '(' + Cadena + ')';
    AddCondition('CODIGO', cIn, Cadena);
  end;

  Result := dtObra;
end;

initialization
  RegisterDataTableRules(BIZ_OBRARELACIONADA, TBizObraRelacionada);

finalization

end.

