unit uViewEjecucionObra;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewBase, dxLayoutControl, cxControls, uBizObras, DB, uDAInterfaces,
  uDADataTable, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit,
  cxCalendar, cxDBEdit, uCustomView, uViewDatosYSeleccionProveedor,
  uViewSubcontrataObra, StdCtrls, ActnList, ComCtrls, ExtCtrls, cxCurrencyEdit,
  uViewListaPedidosProvObra, uViewDetallesGenerico, uViewListaPresupuestosObra,
  Buttons, uProveedoresController, uObrasController;

type
  IViewEjecucionObra = interface(IViewBase)
    ['{09B874DF-8A3B-4775-8617-4B4F834EEB25}']
    function GetObra: IBizObra;
    procedure SetObra(const Value: IBizObra);
    property Obra: IBizObra read GetObra write SetObra;

    function GetController : IObrasController;
    procedure SetController (const Value : IObrasController);
    property Controller : IObrasController read GetController write SetController;
  end;


  TfrViewEjecucionObra = class(TfrViewBase, IViewEjecucionObra)
    dxLayoutControlEjecucionObraGroup_Root: TdxLayoutGroup;
    dxLayoutControlEjecucionObra: TdxLayoutControl;
    dxLayoutControlEjecucionObraGroup1: TdxLayoutGroup;
    dxLayoutControlEjecucionObraGroup2: TdxLayoutGroup;
    dsEjecucion: TDADataSource;
    dxLayoutControlEjecucionObraItem1: TdxLayoutItem;
    edtFecha: TcxDBDateEdit;
    ActionList1: TActionList;
    actFinEjecucion: TAction;
    actCancelarEjecucion: TAction;
    dxLayoutControlEjecucionObraItem2: TdxLayoutItem;
    bCancelarEjecucion: TButton;
    dxLayoutControlEjecucionObraGroup3: TdxLayoutGroup;
    dxLayoutControlEjecucionObraItem4: TdxLayoutItem;
    ImporteBase: TcxDBCurrencyEdit;
    dxLayoutControlEjecucionObraItem5: TdxLayoutItem;
    ImporteIVA: TcxDBCurrencyEdit;
    dxLayoutControlEjecucionObraItem6: TdxLayoutItem;
    ImporteTotal: TcxDBCurrencyEdit;
    dxLayoutControlEjecucionObraItem7: TdxLayoutItem;
    Bevel4: TBevel;
    dxLayoutControlEjecucionObraItem8: TdxLayoutItem;
    frViewListaPresupuestosObra1: TfrViewListaPresupuestosObra;
    dxLayoutControlEjecucionObraItem9: TdxLayoutItem;
    frViewListaPedidosProvObra1: TfrViewListaPedidosProvObra;
    dxLayoutControlEjecucionObraGroup4: TdxLayoutGroup;
    dxLayoutControlEjecucionObraGroup5: TdxLayoutGroup;
    dxLayoutControlEjecucionObraItem11: TdxLayoutItem;
    bElegirSubcontrata: TBitBtn;
    dxLayoutControlEjecucionObraItem10: TdxLayoutItem;
    edtlNombre: TcxDBTextEdit;
    dxLayoutControlEjecucionObraGroup6: TdxLayoutGroup;
    procedure CustomViewShow(Sender: TObject);
    procedure actFinEjecucionExecute(Sender: TObject);
    procedure bElegirSubcontrataClick(Sender: TObject);
    procedure CustomViewCreate(Sender: TObject);
    procedure CustomViewDestroy(Sender: TObject);
  protected
    FObra : IBizObra;
    FEjecucion : IBizEjecucionesObra;
    FObrasController : IObrasController;
    FProveedoresController : IProveedoresController;
    FPresupuestos : IBizEjecucionPresupuestos;
    function GetObra: IBizObra;
    procedure SetObra(const Value: IBizObra);

    function GetController : IObrasController;
    procedure SetController (const Value : IObrasController);

  public
    property Controller : IObrasController read GetController write SetController;
    property Obra: IBizObra read GetObra write SetObra;
  end;

implementation

{$R *.dfm}

{ TfrViewEjecucionObra }

uses
  uDialogUtils, uEditorObra, uBizContactos;

procedure TfrViewEjecucionObra.actFinEjecucionExecute(Sender: TObject);
begin
  inherited;
  if (Parent is TfEditorObra) then
    (Parent as TfEditorObra).actFinalizarEjecucion.Execute;
end;

procedure TfrViewEjecucionObra.bElegirSubcontrataClick(Sender: TObject);
var
  ASubcontratas : IBizProveedor;
  ASubcontrata : IBizProveedor;
begin
  inherited;
  ASubcontratas := IBizProveedor(FProveedoresController.BuscarSubcontratas);
  try
    ASubcontrata := IBizProveedor(FProveedoresController.ElegirContacto(ASubcontratas, 'Elija la subcontrata de esta ejecución de obra', False));
  finally
    ASubcontratas := NIL;
  end;

  if Assigned(ASubcontrata) then
  begin
    try
      ASubcontrata.Open;
      FObra.Ejecuciones.Edit;
      FObra.Ejecuciones.ID_SUBCONTRATA := ASubcontrata.ID;
      FObra.Ejecuciones.NOMBRE := ASubcontrata.NOMBRE;
    finally
      ASubcontrata := NIL;
    end;
  end;
end;

procedure TfrViewEjecucionObra.CustomViewCreate(Sender: TObject);
begin
  inherited;
  FProveedoresController := TProveedoresController.Create;
end;

procedure TfrViewEjecucionObra.CustomViewDestroy(Sender: TObject);
begin
  inherited;
  FProveedoresController := NIL;
end;

procedure TfrViewEjecucionObra.CustomViewShow(Sender: TObject);
begin
  inherited;
  bCancelarEjecucion.Visible := False;
end;

function TfrViewEjecucionObra.GetController: IObrasController;
begin
  Result := FObrasController;
end;

function TfrViewEjecucionObra.GetObra: IBizObra;
begin
  Result := FObra;
end;

procedure TfrViewEjecucionObra.SetController(const Value: IObrasController);
begin
  FObrasController := Value;
  frViewListaPresupuestosObra1.Controller := FObrasController;
end;

procedure TfrViewEjecucionObra.SetObra(const Value: IBizObra);
begin
  FObra := Value;

  if Assigned(FObra) then
  begin
    FEjecucion := FObra.Ejecuciones;
    dsEjecucion.DataTable := FEjecucion.DataTable;

    FPresupuestos := FEjecucion.Presupuestos;
    frViewListaPresupuestosObra1.Obra := FObra;
    frViewListaPedidosProvObra1.Obra := FObra;
  end
  else begin
    FEjecucion := NIL;
    FObra := NIL;
    dsEjecucion.DataTable := NIL;
    FPresupuestos := NIL;
    frViewListaPresupuestosObra1.Obra := NIL;
    frViewListaPedidosProvObra1.Obra := NIL;
  end;
end;

end.
