unit uViewPedidoProveedor;

interface

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

  uViewObservaciones,  uViewDatosYSeleccionProveedor,
  cxGraphics, cxDropDownEdit, cxImageComboBox, cxDBEdit, cxContainer, cxEdit,
  cxTextEdit, cxMaskEdit, cxCalendar, dxLayoutControl, cxControls, cxMemo,
  uViewDireccionEntregaPedidoProv, cxLookupEdit, cxDBLookupEdit, uBizPedidosCliente,
  uPedidosClienteController, cxDBLookupComboBox, uFormasPagoController, ActnList;

type
  IViewPedidoProveedor = interface(IViewBase)
  ['{C5385699-C1A4-4AEB-B3D0-EE3BDB322FE2}']
    function GetPedido: IBizPedidoProveedor;
    procedure SetPedido(const Value: IBizPedidoProveedor);
    property Pedido: IBizPedidoProveedor read GetPedido write SetPedido;

    function GetViewProveedorPedido: TfrViewDatosYSeleccionProveedor;
    procedure SetViewProveedorPedido(const Value: TfrViewDatosYSeleccionProveedor);
    property ViewProveedorPedido: TfrViewDatosYSeleccionProveedor read GetViewProveedorPedido write SetViewProveedorPedido;
  end;

  TfrViewPedidoProveedor = class(TfrViewBase, IViewPedidoProveedor)
    DADataSource: TDADataSource;
    frViewProveedorPedido: TfrViewDatosYSeleccionProveedor;
    dxLayoutControl1Group_Root: TdxLayoutGroup;
    dxLayoutControl1: TdxLayoutControl;
    dxLayoutControl1Item1: TdxLayoutItem;
    dxLayoutControl1Item2: TdxLayoutItem;
    edtFechaPedido: TcxDBDateEdit;
    dxLayoutControl1Item4: TdxLayoutItem;
    edtFechaConfirmacion: TcxDBDateEdit;
    dxLayoutControl1Item5: TdxLayoutItem;
    edtFechaEntrega: TcxDBDateEdit;
    dxLayoutControl1Group1: TdxLayoutGroup;
    dxLayoutControl1Group2: TdxLayoutGroup;
    dxLayoutControl1Item6: TdxLayoutItem;
    memObservaciones: TcxDBMemo;
    dxLayoutControl1Item3: TdxLayoutItem;
    eReferencia: TcxDBTextEdit;
    dxLayoutControl1Group5: TdxLayoutGroup;
    dxLayoutControl1Group6: TdxLayoutGroup;
    dxLayoutControl1Group7: TdxLayoutGroup;
    dxLayoutControl1Group8: TdxLayoutGroup;
    dxLayoutControl1Group3: TdxLayoutGroup;
    dxLayoutControl1Item8: TdxLayoutItem;
    frViewDireccionEntregaPedidoProv1: TfrViewDireccionEntregaPedidoProv;
    dxLayoutControl1Item9: TdxLayoutItem;
    cbFormaPago: TcxDBLookupComboBox;
    dxLayoutControl1Item10: TdxLayoutItem;
    bFormasPago: TButton;
    dxLayoutControl1Group4: TdxLayoutGroup;
    dsFormaPago: TDADataSource;
    dxLayoutControl1Item7: TdxLayoutItem;
    edtFechaEnvio: TcxDBDateEdit;
    dxLayoutControl1Item11: TdxLayoutItem;
    eReferenciaPedidoCli: TcxTextEdit;
    dxLayoutControl1Item12: TdxLayoutItem;
    Button1: TButton;
    dxLayoutControl1Group9: TdxLayoutGroup;
    dxLayoutControl1Group10: TdxLayoutGroup;
    ActionList1: TActionList;
    actVerPedidoCli: TAction;
    procedure CustomViewCreate(Sender: TObject);
    procedure CustomViewDestroy(Sender: TObject);
    procedure bFormasPagoClick(Sender: TObject);
    procedure actVerPedidoCliExecute(Sender: TObject);
    procedure actVerPedidoCliUpdate(Sender: TObject);
    procedure frViewProveedorPedidoButton1Click(Sender: TObject);
    procedure frViewProveedorPedidoButton2Click(Sender: TObject);
  protected
    FPedido : IBizPedidoProveedor;
    FViewProveedorPedido : TfrViewDatosYSeleccionProveedor;
    FFormasPagoController : IFormasPagoController;
    FPedidoCliAsociado : IBizPedidoCliente;
    FPedidoCliController : IPedidosClienteController;
        
    function GetPedido: IBizPedidoProveedor;
    procedure SetPedido(const Value: IBizPedidoProveedor); virtual;
    function GetViewProveedorPedido: TfrViewDatosYSeleccionProveedor;
    procedure SetViewProveedorPedido(const Value: TfrViewDatosYSeleccionProveedor);

  public
    property Pedido: IBizPedidoProveedor read GetPedido write SetPedido;
    property ViewProveedorPedido: TfrViewDatosYSeleccionProveedor read GetViewProveedorPedido;
  end;

implementation

{$R *.dfm}

{ TfrViewPedidoProveedor }

uses
  uBizFormasPago;


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

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

procedure TfrViewPedidoProveedor.bFormasPagoClick(Sender: TObject);
begin
  inherited;
  FFormasPagoController.VerTodos((dsFormaPago.DataTable) as IBizFormaPago);
end;

procedure TfrViewPedidoProveedor.CustomViewCreate(Sender: TObject);
begin
  inherited;
  FFormasPagoController := TFormasPagoController.Create;
  FViewProveedorPedido := frViewProveedorPedido;
  FViewProveedorPedido.MsgElegirProveedor := 'Elija el proveedor al que se le realizará el pedido.';
  eReferencia.Enabled := False;
  eReferenciaPedidoCli.Enabled := False;  
  FPedidoCliAsociado := NIL;
  FPedidoCliController := TPedidosClienteController.Create;
end;

procedure TfrViewPedidoProveedor.CustomViewDestroy(Sender: TObject);
begin
  FViewProveedorPedido := Nil;
  FFormasPagoController := NIL;
  inherited;
end;

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

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

function TfrViewPedidoProveedor.GetPedido: IBizPedidoProveedor;
begin
  Result := FPedido;
end;

function TfrViewPedidoProveedor.GetViewProveedorPedido: TfrViewDatosYSeleccionProveedor;
begin
  Result := FViewProveedorPedido;
end;

procedure TfrViewPedidoProveedor.SetPedido(const Value: IBizPedidoProveedor);
begin
  FPedido := Value;

  if Assigned(FPedido) then
  begin
    DADataSource.DataTable := FPedido.DataTable;
    dsFormaPago.DataTable := FFormasPagoController.BuscarTodos.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';
  end
  else begin
    DADataSource.DataTable := NIL;
    dsFormaPago.DataTable := NIL;
    FPedidoCliAsociado := NIL;
  end;

  frViewProveedorPedido.Proveedor := FPedido.Proveedor;
  frViewDireccionEntregaPedidoProv1.PedidoProveedor := FPedido;
end;

procedure TfrViewPedidoProveedor.SetViewProveedorPedido(const Value: TfrViewDatosYSeleccionProveedor);
begin
  FViewProveedorPedido := Value;
end;

end.
