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

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uEditorDBItem, dxLayoutLookAndFeels, DB, uDADataTable,
  JvAppStorage, JvAppRegistryStorage, JvComponent, JvFormPlacement,
  ImgList, PngImageList, StdActns, ActnList, ComCtrls, TBX, TB2Item,
  TB2Dock, TB2Toolbar, ExtCtrls, JvExControls, JvNavigationPane, uViewGrid,
  ToolWin, JvComponentBase, uViewDatosYSeleccionContacto, uBizObra,
  uViewPresupuestosContacto, uCustomView, uViewBase, uBizContacto, cxGridCustomTableView;

type
  IEditorContactoObra = interface(IEditorDBItem)
  ['{37D8A488-2B72-479C-93FD-70053CBDC9D5}']
  end;

  TfEditorContactoObra = class(TfEditorDBItem, IEditorContactoObra)
    frViewContactoObra: TfrViewDatosYSeleccionContacto;
    pnlViewGrid: TPanel;
    frViewPresupuestosContacto: TfrViewPresupuestosContacto;

    procedure frViewPresupuestosContactoactAnadirExecute(Sender: TObject);
    procedure frViewPresupuestosContactoactEliminarExecute(Sender: TObject);
    procedure frViewPresupuestosContactoactEliminarTodoExecute(Sender: TObject);
    procedure frViewPresupuestosContactoactEditarExecute(Sender: TObject);

    procedure actGuardarExecute(Sender: TObject);
    procedure actGuardarCerrarExecute(Sender: TObject);
    procedure actEliminarExecute(Sender: TObject);
    procedure actEliminarUpdate(Sender: TObject);

    procedure dsDataTableDataChange(Sender: TObject; Field: TField);
    procedure frViewPresupuestosContactocxGridViewCellDblClick(
      Sender: TcxCustomGridTableView;
      ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
      AShift: TShiftState; var AHandled: Boolean);
    procedure frViewPresupuestosContactocxGridView2CellDblClick(
      Sender: TcxCustomGridTableView;
      ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
      AShift: TShiftState; var AHandled: Boolean);

  private
    FContactosObra: IBizContactosObra;
    FPresupuestosContacto: IViewPresupuestosContacto;

    function GetContactosObra: IBizContactosObra;
    procedure SetContactosObra(const Value: IBizContactosObra);

  protected
    function GetModified: Boolean; override;

  public
    property ContactosObra: IBizContactosObra read GetContactosObra write SetContactosObra;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

var
  fEditorContactoObra: TfEditorContactoObra;

implementation
{$R *.dfm}

uses uExceptions, LiteralesObras, uEditorUtils, schObrasClient_Intf,
  uEditorBase, uEditorDBBase;

function ShowEditorContactoObra (ABizObject : TDADataTableRules) : TModalResult;
var
  AEditor: TfEditorContactoObra;
begin
  AEditor := TfEditorContactoObra.Create(Application);
  try
    AEditor.ContactosObra := (ABizObject as IBizContactosObra);
    Result := AEditor.ShowModal;
  finally
    AEditor.Release;
  end;
end;

{ TfEditorContactoObra }

function TfEditorContactoObra.GetContactosObra: IBizContactosObra;
begin
  Result := FContactosObra;
end;

procedure TfEditorContactoObra.SetContactosObra(const Value: IBizContactosObra);
begin
  FContactosObra := Value;

  if Assigned(FContactosObra) then
  begin
     dsDataTable.DataTable := FContactosObra.DataTable;
     frViewContactoObra.Contacto := FContactosObra.Contacto;
     FPresupuestosContacto.PresupuestosContacto := FContactosObra.Presupuestos;
  end
  else
  begin
     dsDataTable.DataTable := Nil;  
     frViewContactoObra.Contacto := Nil;
     FPresupuestosContacto.PresupuestosContacto := Nil;
  end;
end;

procedure TfEditorContactoObra.frViewPresupuestosContactoactEditarExecute(Sender: TObject);
begin
  inherited;

  FPresupuestosContacto.DesactivarFiltros;

  ContactosObra.Presupuestos.Show;

  FPresupuestosContacto.ActivarFiltros;
  FPresupuestosContacto.RefreshGrid;
end;

procedure TfEditorContactoObra.frViewPresupuestosContactoactAnadirExecute(Sender: TObject);
begin
  inherited;

  //Orden importante no tocar
  FPresupuestosContacto.DesactivarFiltros;

  ContactosObra.Presupuestos.Insert;
  if FPresupuestosContacto.ClasePresupuesto = CLASE_PRESUPUESTO
  then ContactosObra.Presupuestos.CLASE := CLASE_PRESUPUESTO
  else ContactosObra.Presupuestos.CLASE := CLASE_TRABAJO;
  ContactosObra.Presupuestos.Contacto := ContactosObra.Contacto;
  ContactosObra.Presupuestos.Show;

  FPresupuestosContacto.ActivarFiltros;
  FPresupuestosContacto.RefreshGrid;
end;

procedure TfEditorContactoObra.frViewPresupuestosContactoactEliminarExecute(Sender: TObject);
var
  Cadena : String;
begin
  if FPresupuestosContacto.ClasePresupuesto = CLASE_PRESUPUESTO
  then Cadena := msgLitBorrarP
  else Cadena := msgLitBorrarT;

  if (MessageDlg(Cadena, mtConfirmation, [mbYes, mbNo], 0) = mrNo) then
     Exit;

  ContactosObra.Presupuestos.Delete;
  FPresupuestosContacto.RefreshGrid;
  Modified := True;
end;

procedure TfEditorContactoObra.frViewPresupuestosContactoactEliminarTodoExecute(Sender: TObject);
var
  Cadena: String;
begin
  if FPresupuestosContacto.ClasePresupuesto = CLASE_PRESUPUESTO
  then Cadena := msgLitBorrarTodosP
  else Cadena := msgLitBorrarTodosT;

  if (MessageDlg(Cadena, mtConfirmation, [mbYes, mbNo], 0) = mrNo) then
     Exit;

  with ContactosObra.Presupuestos do
  begin
    DataTable.DisableControls;
    DataTable.First;
    while not DataTable.EOF do
    begin
      if CLASE = FPresupuestosContacto.ClasePresupuesto
      then DataTable.Delete
      else DataTable.Next;
    end;
    DataTable.EnableControls;
  end;

  FPresupuestosContacto.RefreshGrid;
  Modified := True;
end;

procedure TfEditorContactoObra.actGuardarExecute(Sender: TObject);
begin
//No hacemos nada en ContactosObra
//  inherited;
end;

procedure TfEditorContactoObra.actGuardarCerrarExecute(Sender: TObject);
begin
//No hacemos nada solo cerramos
//  inherited;
  actCerrar.Execute;
end;

procedure TfEditorContactoObra.actEliminarExecute(Sender: TObject);
begin
//  inherited;
//Eliminamos el contacto seleccionado.
  ContactosObra.Delete;
  actCerrar.Execute;  
end;

procedure TfEditorContactoObra.actEliminarUpdate(Sender: TObject);
begin
//  inherited; //No quitar ya que no queremos que se lance el del padre
end;

constructor TfEditorContactoObra.Create(AOwner: TComponent);
begin
  inherited;
  FPresupuestosContacto := frViewPresupuestosContacto;
end;

destructor TfEditorContactoObra.Destroy;
begin
  FPresupuestosContacto := Nil;
  inherited;
end;

procedure TfEditorContactoObra.dsDataTableDataChange(Sender: TObject;
  Field: TField);
begin
  inherited;
  if Assigned(FContactosObra) and (not (FContactosObra.DataTable.Fetching) or
    not (FContactosObra.DataTable.Opening) or not (FContactosObra.DataTable.Closing)) then
  begin
    if Length(FContactosObra.NOMBRE) = 0 then
      JvNavPanelHeader.Caption := msgLitContactosObraNuv
    else
      JvNavPanelHeader.Caption := msgContactosObra + FContactosObra.NOMBRE;
    Self.Caption := JvNavPanelHeader.Caption;
  end;
end;

procedure TfEditorContactoObra.frViewPresupuestosContactocxGridViewCellDblClick(
  Sender: TcxCustomGridTableView;
  ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
  AShift: TShiftState; var AHandled: Boolean);
begin
  inherited;
  frViewPresupuestosContactoactEditarExecute(Self);
end;

procedure TfEditorContactoObra.frViewPresupuestosContactocxGridView2CellDblClick(
  Sender: TcxCustomGridTableView;
  ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
  AShift: TShiftState; var AHandled: Boolean);
begin
  inherited;
  frViewPresupuestosContactoactEditarExecute(Self);
end;

function TfEditorContactoObra.GetModified: Boolean;
begin
   //Para que no pregunte nunca
   Result := False;
end;

initialization
  RegisterEditor(IBizContactosObra, ShowEditorContactoObra, etItem);

end.
