{
===============================================================================
  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 uViewPresupuestosObra;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewGrid, ComCtrls, ToolWin, StdCtrls, cxStyles, cxCustomData,
  cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData,
  dxPSGlbl, dxPSUtl, dxPSEngn, dxPrnPg, dxBkgnd, dxWrap, dxPrnDev,
  dxPSCompsProvider, dxPSFillPatterns, dxPSEdgePatterns, dxPSCore,
  dxPScxCommon, dxPScxGridLnk, uDADataTable, ActnList, cxGridLevel,
  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses,
  cxControls, cxGridCustomView, cxGrid, cxGroupBox, cxRadioGroup, cxDBEdit,
  cxSpinEdit, cxContainer, cxTextEdit, cxMaskEdit, cxDropDownEdit, cxCalc,
  cxLabel, dxLayoutControl, uBizObra, uViewBase, uCustomView,
  uViewPresupuestosBase, ImgList, PngImageList, Menus;

type
  IViewPresupuestosObra = interface(IViewBase)
  ['{C160D191-B5A5-484A-B8EA-80CD533C3E77}']
    function GetPresupuestos: IBizPresupuestosObra;
    procedure SetPresupuestos(const Value: IBizPresupuestosObra);
    property Presupuestos: IBizPresupuestosObra read GetPresupuestos write SetPresupuestos;
  end;

  TfrViewPresupuestosObra = class(TfrViewBase, IViewPresupuestosObra)
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton4: TToolButton;
    ToolButton3: TToolButton;
    ToolButton5: TToolButton;
    ActionList1: TActionList;
    actEditarPreObr: TAction;
    actEliminarPreObr: TAction;
    actEliminarTodoPreObr: TAction;
    actAnadirPreObr: TAction;
    DADataSourcePreObr: TDADataSource;
    cxStyleRepository1: TcxStyleRepository;
    cxStyleEven: TcxStyle;
    cxStyleOdd: TcxStyle;
    cxStyleSelection: TcxStyle;
    dxPSEngineController1: TdxPSEngineController;
    dxComponentPrinter: TdxComponentPrinter;
    dxComponentPrinterLink: TdxGridReportLink;
    ToolBar2: TToolBar;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    ToolButton9: TToolButton;
    ToolButton10: TToolButton;
    DADataSourcePreDec: TDADataSource;
    actEliminarPreDec: TAction;
    actEliminarTodoPreDec: TAction;
    actAnadirPreDec: TAction;
    actEditarPreDec: TAction;
    PngImageList: TPngImageList;
    dxLayoutControl1Group_Root: TdxLayoutGroup;
    dxLayoutControl1: TdxLayoutControl;
    dxLayoutControl1Item1: TdxLayoutItem;
    dxLayoutControl1Item2: TdxLayoutItem;
    dxLayoutControl1Item3: TdxLayoutItem;
    frViewPresupuestosPreDec: TfrViewPresupuestosBase;
    dxLayoutControl1Group1: TdxLayoutGroup;
    dxLayoutControl1Group2: TdxLayoutGroup;
    MenuPreObr: TPopupMenu;
    Modificar1: TMenuItem;
    Duplicar1: TMenuItem;
    Eliminar1: TMenuItem;
    N1: TMenuItem;
    Nuevo1: TMenuItem;
    MenuPreDec: TPopupMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem5: TMenuItem;
    dxLayoutControl1Item4: TdxLayoutItem;
    frViewPresupuestosPreObr: TfrViewPresupuestosBase;
    procedure CustomViewCreate(Sender: TObject);
    procedure CustomViewDestroy(Sender: TObject);

    procedure actEliminarPreObrExecute(Sender: TObject);
    procedure actEliminarPreDecExecute(Sender: TObject);
    procedure actEliminarTodoPreObrExecute(Sender: TObject);
    procedure actEliminarTodoPreDecExecute(Sender: TObject);

    procedure actEliminarPreObrUpdate(Sender: TObject);
    procedure actEliminarTodoPreObrUpdate(Sender: TObject);
    procedure actEliminarPreDecUpdate(Sender: TObject);
    procedure actEliminarTodoPreDecUpdate(Sender: TObject);
    procedure actEditarPreDecUpdate(Sender: TObject);
    procedure actEditarPreObrUpdate(Sender: TObject);

    procedure frViewPresupuestosPreDeccxGridViewCellDblClick(
      Sender: TcxCustomGridTableView;
      ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
      AShift: TShiftState; var AHandled: Boolean);
    procedure frViewPresupuestosPreObrcxGridViewCellDblClick(
      Sender: TcxCustomGridTableView;
      ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
      AShift: TShiftState; var AHandled: Boolean);

  private
    FPresupuestos: IBizPresupuestosObra;
    FViewPresupuestosObra: IViewGrid;
    FViewPresupuestosDecoracion: IViewGrid;
    function GetPresupuestos: IBizPresupuestosObra;
    procedure SetPresupuestos(const Value: IBizPresupuestosObra);

    function GetGridView(ViewGrid: IViewGrid): TcxCustomGridView;
  public
    property Presupuestos: IBizPresupuestosObra read GetPresupuestos write SetPresupuestos;
  end;

var
  frViewPresupuestosObra: TfrViewPresupuestosObra;

implementation
{$R *.dfm}

uses LiteralesObras, schObrasClient_Intf;

{ TfrViewPresupuestosObra }

function TfrViewPresupuestosObra.GetPresupuestos: IBizPresupuestosObra;
begin
  Result := FPresupuestos;
end;

procedure TfrViewPresupuestosObra.SetPresupuestos(const Value: IBizPresupuestosObra);
begin
  FPresupuestos := Value;

  if Assigned(FPresupuestos) then
  begin
    DADataSourcePreObr.DataTable := FPresupuestos.DataTable;
    DADataSourcePreDec.DataTable := FPresupuestos.DataTable;
  end
  else
  begin
    DADataSourcePreObr.DataTable := Nil;
    DADataSourcePreDec.DataTable := Nil;
  end;
end;

procedure TfrViewPresupuestosObra.CustomViewCreate(Sender: TObject);
var
  ColumnaClase: TcxGridDBColumn;
  ColumnaTipo: TcxGridDBColumn;
begin
  inherited;

  FViewPresupuestosObra := frViewPresupuestosPreObr;
  FViewPresupuestosDecoracion := frViewPresupuestosPreDec;

  ColumnaClase := (GetGridView(FViewPresupuestosObra) as TcxGridDBTableView).GetColumnByFieldName(fld_PresupuestosObraCLASE);
  ColumnaTipo := (GetGridView(FViewPresupuestosObra) as TcxGridDBTableView).GetColumnByFieldName(fld_PresupuestosObraTIPO);
  with GetGridView(FViewPresupuestosObra).DataController.Filter do
  begin
    BeginUpdate;
    Clear;
    Root.AddItem(ColumnaClase, foEqual, CLASE_PRESUPUESTO, CLASE_PRESUPUESTO);
    Root.AddItem(ColumnaTipo, foEqual, TIPO_OBRA, TIPO_OBRA);
    EndUpdate;
    Active := True;    
  end;

  ColumnaClase := (GetGridView(FViewPresupuestosDecoracion) as TcxGridDBTableView).GetColumnByFieldName(fld_PresupuestosObraCLASE);
  ColumnaTipo := (GetGridView(FViewPresupuestosDecoracion) as TcxGridDBTableView).GetColumnByFieldName(fld_PresupuestosObraTIPO);
  with GetGridView(FViewPresupuestosDecoracion).DataController.Filter do
  begin
    BeginUpdate;
    Clear;
    Root.AddItem(ColumnaClase, foEqual, CLASE_PRESUPUESTO, CLASE_PRESUPUESTO);
    Root.AddItem(ColumnaTipo, foEqual, TIPO_DECORACION, TIPO_DECORACION);
    EndUpdate;
    Active := True;
  end;
end;

procedure TfrViewPresupuestosObra.actEliminarPreObrUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := ((GetGridView(FViewPresupuestosObra).DataController.FocusedRowIndex <> -1) AND (GetGridView(FViewPresupuestosObra).DataController.FilteredRecordCount > 0));
end;

procedure TfrViewPresupuestosObra.actEliminarTodoPreObrUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := ((GetGridView(FViewPresupuestosObra).DataController.FocusedRowIndex <> -1) AND (GetGridView(FViewPresupuestosObra).DataController.FilteredRecordCount > 0));
end;

procedure TfrViewPresupuestosObra.actEliminarPreDecUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := ((GetGridView(FViewPresupuestosDecoracion).DataController.FocusedRowIndex <> -1) AND (GetGridView(FViewPresupuestosDecoracion).DataController.FilteredRecordCount > 0));
end;

procedure TfrViewPresupuestosObra.actEliminarTodoPreDecUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := ((GetGridView(FViewPresupuestosDecoracion).DataController.FocusedRowIndex <> -1) AND (GetGridView(FViewPresupuestosDecoracion).DataController.FilteredRecordCount > 0));
end;

function TfrViewPresupuestosObra.GetGridView(ViewGrid: IViewGrid): TcxCustomGridView;
begin
  if (ViewGrid.Grid.ViewCount > 0)
  then Result := ViewGrid.Grid.ActiveView
  else raise Exception.Create('El grid no tiene vistas');
end;

procedure TfrViewPresupuestosObra.actEliminarPreObrExecute(Sender: TObject);
begin
  inherited;
  if (MessageDlg(msgLitBorrarPO, mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
     GetGridView(FViewPresupuestosObra).DataController.DeleteSelection;
end;

procedure TfrViewPresupuestosObra.actEliminarPreDecExecute(Sender: TObject);
begin
  inherited;
  if (MessageDlg(msgLitBorrarPD, mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
     GetGridView(FViewPresupuestosDecoracion).DataController.DeleteSelection;
end;

procedure TfrViewPresupuestosObra.actEliminarTodoPreObrExecute(Sender: TObject);
var
  i: Integer;
begin
  if (MessageDlg(msgLitBorrarTPO, mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
     for i:=0 to GetGridView(FViewPresupuestosObra).DataController.FilteredRecordCount - 1 do
         GetGridView(FViewPresupuestosObra).DataController.DeleteSelection;
end;

procedure TfrViewPresupuestosObra.actEliminarTodoPreDecExecute(Sender: TObject);
var
  i: Integer;
begin
  if (MessageDlg(msgLitBorrarTPD, mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
     for i:=0 to GetGridView(FViewPresupuestosDecoracion).DataController.FilteredRecordCount - 1 do
         GetGridView(FViewPresupuestosDecoracion).DataController.DeleteSelection;
end;

procedure TfrViewPresupuestosObra.CustomViewDestroy(Sender: TObject);
begin
  FViewPresupuestosObra := Nil;
  FViewPresupuestosDecoracion := Nil;

  inherited;
end;

procedure TfrViewPresupuestosObra.actEditarPreDecUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := ((GetGridView(FViewPresupuestosDecoracion).DataController.FocusedRowIndex <> -1) AND (GetGridView(FViewPresupuestosDecoracion).DataController.FilteredRecordCount > 0));
end;

procedure TfrViewPresupuestosObra.actEditarPreObrUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := ((GetGridView(FViewPresupuestosObra).DataController.FocusedRowIndex <> -1) AND (GetGridView(FViewPresupuestosObra).DataController.FilteredRecordCount > 0));
end;

procedure TfrViewPresupuestosObra.frViewPresupuestosPreDeccxGridViewCellDblClick(
  Sender: TcxCustomGridTableView;
  ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
  AShift: TShiftState; var AHandled: Boolean);
begin
  actEditarPreDec.Execute;
end;

procedure TfrViewPresupuestosObra.frViewPresupuestosPreObrcxGridViewCellDblClick(
  Sender: TcxCustomGridTableView;
  ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
  AShift: TShiftState; var AHandled: Boolean);
begin
  actEditarPreObr.Execute;
end;

end.
