{
===============================================================================
  Copyright (©) 2006. Rodax Software.
===============================================================================
  Los contenidos de este fichero son propiedad de Rodax Software titular del
  copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
  en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
  acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
  bajo el que se suministra.
  -----------------------------------------------------------------------------
  Web:  www.rodax-software.com
===============================================================================
  Fecha primera versión: 22-05-2006
  Versión actual: 1.0.0
  Fecha versión actual: 22-05-2006
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
===============================================================================
}

unit uDataModuleObras;

interface

uses {vcl:} SysUtils, Classes, DB, DBClient,
     {RemObjects:} uDAClientDataModule, uDADataTable, uDABINAdapter,
  uROServiceComponent, uRORemoteService, uROClient, uROBinMessage,
  uROWinInetHttpChannel, uDAScriptingProvider, uDACDSDataTable,
  uBizObra;

type
  TdmObras = class(TDAClientDataModule)
    DABINAdapter: TDABINAdapter;
    RORemoteService: TRORemoteService;
    tbl_Obras: TDACDSDataTable;
    ds_Obras: TDADataSource;
    tbl_PresupuestosObra: TDACDSDataTable;
    ds_PresupuestosObra: TDADataSource;
    tbl_ContactosObra: TDACDSDataTable;
    ds_ContactosObra: TDADataSource;
    tbl_ProyectosObra: TDACDSDataTable;
    ds_ProyectosObra: TDADataSource;
    procedure DAClientDataModuleCreate(Sender: TObject);
  public
    function GetDataTableItems(Const IDBusiness: String): TDACDSDataTable;
    function GetItems: IBizObra;
//    function GetItemsSeleccionados(ASource : IBizObra): IBizObra;
//    function GetItem(Codigo: Integer): IBizObra;
    function getCodigoObra: Integer;
    function getCodigoPresupuesto: Integer;
    function getCodigoProyecto: Integer;
  end;

var
  dmObras: TdmObras;

implementation

{$R *.DFM}

uses
  Controls, Forms, uDAInterfaces, DataAbstract_Intf, FactuGES_Intf,
  uDataTableUtils, uROTypes, uEditorPreview, 
  Dialogs, schObrasClient_Intf, uDataModuleBase, uBizContacto, cxControls;

const
  MAX_RECORDS = 100;


{
********************************* TdmObras *********************************
}

procedure TdmObras.DAClientDataModuleCreate(Sender: TObject);
begin
  RORemoteService.Channel := dmBase.Channel;
  RORemoteService.Message := dmBase.Message;
end;

function TdmObras.GetItems: IBizObra;
begin
  Result := (GetDataTableItems(BIZ_OBRA) as IBizObra);
end;

function TdmObras.getCodigoObra: Integer;
begin
  Result := (RORemoteService as IsrvObras).GetCodigo('GEN_OBRAS');
end;

function TdmObras.getCodigoPresupuesto: Integer;
begin
  Result := (RORemoteService as IsrvObras).GetCodigo('GEN_PRESUPUESTOS');
end;

function TdmObras.getCodigoProyecto: Integer;
begin
  Result := (RORemoteService as IsrvObras).GetCodigo('GEN_PROYECTOS');
end;

{function TdmObras.GetItemsSeleccionados(ASource : IBizObra): IBizObra;
var
  aObj : ISelectedRowList;
  dtObra : IBizObra;
  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;               }

{function TdmObras.GetItem(Codigo: Integer): IBizObra;
var
  AObra: IBizObra;
begin
  try
    AObra := dmObras.GetItems;
    with AObra.DataTable do
    begin
      if Active then Active := False;
      Where.Clear;
      Where.AddText('OBRAS.CODIGO' + ' = ' + IntToStr(Codigo));
      Active := True;
    end;
    Result := AObra;
  finally
    AObra := Nil;
  end;
end;}

function TdmObras.GetDataTableItems(const IDBusiness: String): TDACDSDataTable;
var
  dtObras: TDACDSDataTable;
  dtContactosObra: TDACDSDataTable;
  dtPresupuestosObra: TDACDSDataTable;
  dtProyectosObra: TDACDSDataTable;
begin
  ShowHourglassCursor;
  try
    dtObras := TDACDSDataTable.Create(NIL);
    CloneDataTable(tbl_Obras, dtObras);
    with dtObras do
    begin
      BusinessRulesID := IDBusiness;
      FieldByName(fld_ObrasFECHAINIOBR).BusinessRulesID := BIZ_FECINIFIN;
      FieldByName(fld_ObrasFECHAFINOBR).BusinessRulesID := BIZ_FECINIFIN;
      FieldByName(fld_ObrasAPLICAHONORARIOS).BusinessRulesID := BIZ_CALCULOHONORARIOS;
      FieldByName(fld_ObrasHONORARIOS).BusinessRulesID := BIZ_CALCULOHONORARIOS;
      FieldByName(fld_ObrasTOTALPRESUPUESTOSINI).BusinessRulesID := BIZ_CALCULOHONORARIOS;
      FieldByName(fld_ObrasTOTALPRESUPUESTOSFIN).BusinessRulesID := BIZ_CALCULOHONORARIOS;
    end;

    dtContactosObra := TDACDSDataTable.Create(NIL);
    CloneDataTable(tbl_ContactosObra, dtContactosObra);
    with dtContactosObra do
    begin
      BusinessRulesID := BIZ_CONTACTOOBRA;
    end;
    (dtObras as IBizObra).Contactos := (dtContactosObra as IBizContactosObra);
    (dtObras as IBizObra).Contactos.Obra := (dtObras as IBizObra);

    dtPresupuestosObra := TDACDSDataTable.Create(NIL);
    CloneDataTable(tbl_PresupuestosObra, dtPresupuestosObra);
    with dtPresupuestosObra do
    begin
      BusinessRulesID := BIZ_PRESUPUESTOOBRA;
      FieldByName(fld_PresupuestosObraRETENCION).BusinessRulesID := BIZ_RETENCION;
      FieldByName(fld_PresupuestosObraPRESUPUESTOFINAL).BusinessRulesID := BIZ_RETENCION;
    end;

    dtProyectosObra := TDACDSDataTable.Create(NIL);
    CloneDataTable(tbl_ProyectosObra, dtProyectosObra);
    with dtProyectosObra do
    begin
      BusinessRulesID := BIZ_PROYECTOSOBRA;
    end;

    (dtObras as IBizObra).Proyectos := (dtProyectosObra as IBizProyectosObra);
    (dtObras as IBizObra).Presupuestos := (dtPresupuestosObra as IBizPresupuestosObra);
    (dtObras as IBizObra).Contactos.Presupuestos := (dtObras as IBizObra).Presupuestos;
    (dtObras as IBizObra).Presupuestos.Obra := (dtObras as IBizObra);
    (dtObras as IBizObra).Proyectos.Obra := (dtObras as IBizObra);

    Result := dtObras;
  finally
    HideHourglassCursor;
  end;
end;

initialization
  dmObras := TdmObras.Create(nil);

finalization
  FreeAndNil(dmObras);

end.
