unit uViewContratoCliente;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewBase, uBizContratosCliente, DB, uDADataTable, uCustomView,
  AppEvnts, StdCtrls, Mask, DBCtrls,
  uViewObservaciones,  uViewDatosYSeleccionCliente,
  cxGraphics, cxDropDownEdit, cxImageComboBox, cxDBEdit, cxContainer, cxEdit,
  cxTextEdit, cxMaskEdit, cxCalendar, dxLayoutControl, cxControls, cxMemo,
  uViewDireccionEntregaContratoCliente, Buttons, ActnList, cxLookupEdit,
  cxDBLookupEdit, cxDBLookupComboBox, uFormasPagoController, uDAInterfaces,
  uBizFormasPago, cxButtonEdit, uBizContactos, uContratosClienteController,
  uVendedoresController, uViewClienteContrato;

type
  IViewContratoCliente = interface(IViewBase)
  ['{3DE0231D-760E-437B-88E5-144B88024797}']
    function GetController : IContratosClienteController;
    procedure SetController (const Value : IContratosClienteController);
    property Controller : IContratosClienteController read GetController  write SetController;

    function GetContrato: IBizContratoCliente;
    procedure SetContrato(const Value: IBizContratoCliente);
    property Contrato: IBizContratoCliente read GetContrato write SetContrato;
  end;

  TfrViewContratoCliente = class(TfrViewBase, IViewContratoCliente)
    DADataSource: TDADataSource;
    dxLayoutControl1Group_Root: TdxLayoutGroup;
    dxLayoutControl1: TdxLayoutControl;
    dxLayoutControl1Item2: TdxLayoutItem;
    edtFechaContrato: TcxDBDateEdit;
    dxLayoutControl1Group1: TdxLayoutGroup;
    dxLayoutControl1Group2: TdxLayoutGroup;
    dxLayoutControl1Item6: TdxLayoutItem;
    memObservaciones: TcxDBMemo;
    dxLayoutControl1Item3: TdxLayoutItem;
    eReferencia: TcxDBTextEdit;
    dxLayoutControl1Group7: TdxLayoutGroup;
    ActionList1: TActionList;
    dxLayoutControl1Item4: TdxLayoutItem;
    cbFormaPago: TcxDBLookupComboBox;
    dxLayoutControl1Item5: TdxLayoutItem;
    bFormasPago: TButton;
    dxLayoutControl1Group5: TdxLayoutGroup;
    dsFormaPago: TDADataSource;
    cbSituacion: TcxDBImageComboBox;
    dxLayoutControl1Item10: TdxLayoutItem;
    dxLayoutControl1Group8: TdxLayoutGroup;
    dxLayoutControl1Item1: TdxLayoutItem;
    dxLayoutControl1Item8: TdxLayoutItem;
    memFormaPago: TcxDBMemo;
    dxLayoutControl1Group3: TdxLayoutGroup;
    dxLayoutControl1Item9: TdxLayoutItem;
    memPlazoEntrega: TcxDBMemo;
    dxLayoutControl1Group4: TdxLayoutGroup;
    dxLayoutControl1Group6: TdxLayoutGroup;
    dxLayoutControl1Item11: TdxLayoutItem;
    dxLayoutControl1Group9: TdxLayoutGroup;
    cbVendedor: TcxDBLookupComboBox;
    dsVendedor: TDADataSource;
    dxLayoutControl1Item7: TdxLayoutItem;
    cbTipoContrato: TcxDBComboBox;
    dxLayoutControl1Group11: TdxLayoutGroup;
    dxLayoutControl1Item12: TdxLayoutItem;
    edtlREF_CLIENTE: TcxDBTextEdit;
    frViewClienteContrato1: TfrViewClienteContrato;
    dxLayoutControl1Item13: TdxLayoutItem;
    edtFechaDecision: TcxDBDateEdit;
    dxLayoutControl1Item14: TdxLayoutItem;
    edtFechaPrevMontaje: TcxDBDateEdit;
    dxLayoutControl1Item15: TdxLayoutItem;
    edtFechaUltPresentacion: TcxDBDateEdit;
    dxLayoutControl1Group10: TdxLayoutGroup;
    procedure CustomViewCreate(Sender: TObject);
    procedure CustomViewDestroy(Sender: TObject);
    procedure bFormasPagoClick(Sender: TObject);
    procedure frViewClienteContratoButton1Click(Sender: TObject);
    procedure frViewClienteContratoButton2Click(Sender: TObject);
  protected
    FContrato : IBizContratoCliente;
    FFormasPago : IBizFormaPago;
    FVendedor : IBizVendedor;
    FFormasPagoController : IFormasPagoController;
    FVendedoresController : IVendedoresController;
    FController : IContratosClienteController;

    function GetContrato: IBizContratoCliente;
    procedure SetContrato(const Value: IBizContratoCliente); virtual;

    function GetController : IContratosClienteController;
    procedure SetController (const Value : IContratosClienteController);
  public
    property Controller : IContratosClienteController read GetController  write SetController;
	property Contrato: IBizContratoCliente read GetContrato write SetContrato;
  end;

implementation

{$R *.dfm}

{ TfrViewContratoCliente }

uses
  uClientesController, uBizDireccionesContacto, uPresupuestosClienteController;


procedure TfrViewContratoCliente.bFormasPagoClick(Sender: TObject);
begin
  inherited;
  if Assigned(FFormasPago) then
     FFormasPagoController.VerTodos(FFormasPago);
end;

procedure TfrViewContratoCliente.CustomViewCreate(Sender: TObject);
begin
  inherited;
  FFormasPago := Nil;
  FVendedor := Nil;
  FFormasPagoController := TFormasPagoController.Create;
  FVendedoresController := TVendedoresController.Create;

  cbTipoContrato.Properties.Items.Clear;
  cbTipoContrato.Properties.Items.Add(CTE_COCINA);
  cbTipoContrato.Properties.Items.Add(CTE_ARMARIO);
  cbTipoContrato.Properties.Items.Add(CTE_BANO);
  cbTipoContrato.Properties.Items.Add(CTE_ELECTRODOMESTICO);
  cbTipoContrato.Properties.Items.Add(CTE_OBRA);
  cbTipoContrato.Properties.Items.Add(CTE_VARIOS);
end;

procedure TfrViewContratoCliente.CustomViewDestroy(Sender: TObject);
begin
  FFormasPago := Nil;
  FFormasPagoController := NIL;
  FVendedor := Nil;
  FVendedoresController := NIL;

  inherited;
end;

procedure TfrViewContratoCliente.frViewClienteContratoButton1Click(Sender: TObject);
begin
  if Assigned(Contrato) and Assigned(Contrato.Cliente) and
    Assigned (Contrato.Detalles) and (Contrato.Detalles.RecordCount > 0) then
  begin
    if (Application.MessageBox('Los descuentos de los artículos del Contrato serán actualizados con los del nuevo cliente seleccionado, ¿Desea continuar?', 'Atención', MB_YESNO) = IDNO) then
      Exit;
  end;
  frViewClienteContrato1.actElegirContacto.Execute;
end;

procedure TfrViewContratoCliente.frViewClienteContratoButton2Click(Sender: TObject);
begin
  if Assigned(Contrato) and Assigned(Contrato.Cliente) and
    Assigned (Contrato.Detalles) and (Contrato.Detalles.RecordCount > 0) then
  begin
    if (Application.MessageBox('Los descuentos de los artículos del Contrato serán actualizados con los del nuevo cliente seleccionado, ¿Desea continuar?', 'Atención', MB_YESNO) = IDNO) then
      Exit;
  end;
  frViewClienteContrato1.actAnadirContacto.Execute;
end;

function TfrViewContratoCliente.GetContrato: IBizContratoCliente;
begin
  Result := FContrato;
end;

function TfrViewContratoCliente.GetController: IContratosClienteController;
begin
  Result := FController;
end;

procedure TfrViewContratoCliente.SetContrato(const Value: IBizContratoCliente);
begin
  FContrato := Value;
  if Assigned(FContrato) then
  begin
    DADataSource.DataTable := FContrato.DataTable;

    FFormasPago := FFormasPagoController.BuscarTodos;
    dsFormaPago.DataTable := FFormasPago.DataTable;
    dsFormaPago.DataTable.Active := True;

    FVendedor := (FVendedoresController.BuscarTodos as IBizVendedor);
    dsVendedor.DataTable := FVendedor.DataTable;
    dsVendedor.DataTable.Active := True;

    frViewClienteContrato1.MsgElegirCliente := 'Elija el cliente al que se le realizará el contrato.';
  end
  else begin
    DADataSource.DataTable := NIL;
    dsFormaPago.DataTable := NIL;
    dsVendedor.DataTable := NIL;
    frViewClienteContrato1.Cliente := Nil;
  end;
end;

procedure TfrViewContratoCliente.SetController(
  const Value: IContratosClienteController);
begin
  FController := Value;

  if Assigned(FController) then
     frViewClienteContrato1.Controller := FController.ClienteController;
end;

end.
