unit uViewPedidoCliente;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewBase, uBizPedidosCliente, DB, uDADataTable, uCustomView,
  AppEvnts, StdCtrls, Mask, DBCtrls,

  uViewObservaciones,
  cxGraphics, cxDropDownEdit, cxImageComboBox, cxDBEdit, cxContainer, cxEdit,
  cxTextEdit, cxMaskEdit, cxCalendar, dxLayoutControl, cxControls, cxMemo,
  uViewDireccionEntregaPedidoCli, cxLookupEdit, cxDBLookupEdit,
  cxDBLookupComboBox, uFormasPagoController, ActnList, uDAInterfaces, uBizFormasPago,
  uPedidosClienteController, uViewDatosYSeleccionClientePedido;

type
  IViewPedidoCliente = interface(IViewBase)
  ['{6FF2FC16-307F-4B8B-A46A-3FEA270ED568}']
    function GetPedido: IBizPedidoCliente;
    procedure SetPedido(const Value: IBizPedidoCliente);
    property Pedido: IBizPedidoCliente read GetPedido write SetPedido;

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

    function GetViewClientePedido: IViewDatosYSeleccionClientePedido;
    property ViewClientePedido: IViewDatosYSeleccionClientePedido read GetViewClientePedido;
  end;

  TfrViewPedidoCliente = class(TfrViewBase, IViewPedidoCliente)
    DADataSource: TDADataSource;
    dxLayoutControl1Group_Root: TdxLayoutGroup;
    dxLayoutControl1: TdxLayoutControl;
    dxLayoutControl1Item2: TdxLayoutItem;
    edtFechaPedido: TcxDBDateEdit;
    dxLayoutControl1Group1: TdxLayoutGroup;
    dxLayoutControl1Group2: TdxLayoutGroup;
    dxLayoutControl1Item6: TdxLayoutItem;
    memObservaciones: TcxDBMemo;
    dxLayoutControl1Item3: TdxLayoutItem;
    eReferencia: TcxDBTextEdit;
    dxLayoutControl1Group6: TdxLayoutGroup;
    dxLayoutControl1Group7: TdxLayoutGroup;
    dxLayoutControl1Group8: TdxLayoutGroup;
    dxLayoutControl1Group3: TdxLayoutGroup;
    dxLayoutControl1Item8: TdxLayoutItem;
    frViewDireccionEntregaPedidoCli1: TfrViewDireccionEntregaPedidoCli;
    dxLayoutControl1Item9: TdxLayoutItem;
    cbFormaPago: TcxDBLookupComboBox;
    dxLayoutControl1Item10: TdxLayoutItem;
    bFormasPago: TButton;
    dxLayoutControl1Group4: TdxLayoutGroup;
    dsFormaPago: TDADataSource;
    ActionList1: TActionList;
    actVerPedidoCli: TAction;
    frViewDatosYSeleccionClientePedido1: TfrViewDatosYSeleccionClientePedido;
    dxLayoutControl1Item1: TdxLayoutItem;
    dxLayoutControl1Item14: TdxLayoutItem;
    eRefCliente: TcxDBTextEdit;
    dxLayoutControl1Item15: TdxLayoutItem;
    edtFechaPrevistaEnvio: TcxDBDateEdit;
    procedure CustomViewCreate(Sender: TObject);
    procedure CustomViewDestroy(Sender: TObject);
    procedure bFormasPagoClick(Sender: TObject);
    procedure actVerPedidoCliExecute(Sender: TObject);
    procedure actVerPedidoCliUpdate(Sender: TObject);
    procedure frViewClientePedidoButton1Click(Sender: TObject);
    procedure frViewClientePedidoButton2Click(Sender: TObject);
    procedure CustomViewShow(Sender: TObject);
  protected
    FPedido : IBizPedidoCliente;
    FController : IPedidosClienteController;
    FViewClientePedido : IViewDatosYSeleccionClientePedido;
    FFormasPago : IBizFormaPago;
    FFormasPagoController : IFormasPagoController;
    function GetPedido: IBizPedidoCliente;
    procedure SetPedido(const Value: IBizPedidoCliente); virtual;
    function GetController : IPedidosClienteController;
    procedure SetController (const Value : IPedidosClienteController);
    function GetViewClientePedido: IViewDatosYSeleccionClientePedido;
  public
    property Pedido: IBizPedidoCliente read GetPedido write SetPedido;
    property Controller : IPedidosClienteController read GetController write SetController;
    property ViewClientePedido: IViewDatosYSeleccionClientePedido read GetViewClientePedido;
  end;

implementation
{$R *.dfm}

uses uStringsUtils;


{ TfrViewPedidoCliente }

procedure TfrViewPedidoCliente.actVerPedidoCliExecute(Sender: TObject);
begin
  inherited;
//  FPedidoCliController.Ver(FPedidoCliAsociado);
end;

procedure TfrViewPedidoCliente.actVerPedidoCliUpdate(Sender: TObject);
begin
  inherited;
//  if (Sender as TAction).Enabled then
//     (Sender as TAction).Enabled := Assigned(FPedidoCliAsociado)
end;

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

procedure TfrViewPedidoCliente.CustomViewCreate(Sender: TObject);
begin
  inherited;
  FFormasPago := Nil;
  FFormasPagoController := TFormasPagoController.Create;
  FViewClientePedido := frViewDatosYSeleccionClientePedido1;
  eReferencia.Enabled := False;
end;

procedure TfrViewPedidoCliente.CustomViewDestroy(Sender: TObject);
begin
  FViewClientePedido := Nil;
  FController := Nil;
  FFormasPago := Nil;
  FFormasPagoController := NIL;
end;

procedure TfrViewPedidoCliente.CustomViewShow(Sender: TObject);
begin
  inherited;
  //
end;

procedure TfrViewPedidoCliente.frViewClientePedidoButton1Click(Sender: TObject);
begin
  if Assigned(Pedido) and Assigned(Pedido.Cliente) and
    Assigned (Pedido.Detalles) and (Pedido.Detalles.RecordCount > 0) then
  begin
    if (Application.MessageBox('Si cambia de Cliente, se eliminarán todos sus artículos del pedido actual, ¿Desea continuar?', 'Atención', MB_YESNO) = IDNO) then
      Exit;
  end;
  FViewClientePedido.ElegirCliente;
end;

procedure TfrViewPedidoCliente.frViewClientePedidoButton2Click(Sender: TObject);
begin
  if Assigned(Pedido) and Assigned(Pedido.Cliente) and
    Assigned (Pedido.Detalles) and (Pedido.Detalles.RecordCount > 0) then
  begin
    if (Application.MessageBox('Si cambia de Cliente, se eliminarán todos sus artículos del pedido actual, ¿Desea continuar?', 'Atención', MB_YESNO) = IDNO) then
      Exit;
  end;
  FViewClientePedido.AnadirNuevoCliente;
end;

function TfrViewPedidoCliente.GetController: IPedidosClienteController;
begin
  Result := FController;
end;

function TfrViewPedidoCliente.GetPedido: IBizPedidoCliente;
begin
  Result := FPedido;
end;

function TfrViewPedidoCliente.GetViewClientePedido: IViewDatosYSeleccionClientePedido;
begin
  Result := FViewClientePedido;
end;

procedure TfrViewPedidoCliente.SetController(const Value: IPedidosClienteController);
begin
  FController := Value;
end;

procedure TfrViewPedidoCliente.SetPedido(const Value: IBizPedidoCliente);
begin
  FPedido := Value;

  if Assigned(FPedido) then
  begin
    DADataSource.DataTable := FPedido.DataTable;

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

//    FPedidoCliAsociado := NIL;
//    if (FPedido.ID_PEDIDO_CLIENTE > 0) then
//    begin
//      FPedidoCliAsociado := FPedidoCliController.Buscar(FPedido.ID_PEDIDO_CLIENTE);
//      if Assigned(FPedidoCliAsociado) then
//      begin
//        FPedidoCliAsociado.DataTable.Active := True;
//        eReferenciaPedidoCli.Text := FPedidoCliAsociado.REFERENCIA
//      end
//      else
//        eReferenciaPedidoCli.Text := '';
//    end
//    else
//      eReferenciaPedidoCli.Text := 'No hay pedido asociado';

    FViewClientePedido.Pedido := FPedido;
    frViewDireccionEntregaPedidoCli1.PedidoCliente := FPedido;
  end
  else begin
    DADataSource.DataTable := NIL;
    dsFormaPago.DataTable := NIL;
//    FPedidoCliAsociado := NIL;
    FViewClientePedido.Pedido := NIL;
  end;
end;


end.
