unit uViewPedidoProveedor;

interface

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

  uViewObservaciones,
  cxGraphics, cxDropDownEdit, cxImageComboBox, cxDBEdit, cxContainer, cxEdit,
  cxTextEdit, cxMaskEdit, cxCalendar, dxLayoutControl, cxControls, cxMemo,
  uViewDireccionEntregaPedidoProv, cxLookupEdit, cxDBLookupEdit,
//  uBizPedidosCliente, uPedidosClienteController,
  cxDBLookupComboBox, uFormasPagoController, ActnList, uDAInterfaces, uBizFormasPago,
  uViewProveedorPedido, uViewObraReserva, uObrasController,
  uPedidosProveedorController, uViewDatosYSeleccionProveedorPedido;

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

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

    function GetViewProveedorPedido: IViewDatosYSeleccionProveedorPedido;
    property ViewProveedorPedido: IViewDatosYSeleccionProveedorPedido read GetViewProveedorPedido;
  end;

  TfrViewPedidoProveedor = class(TfrViewBase, IViewPedidoProveedor)
    DADataSource: TDADataSource;
    dxLayoutControl1Group_Root: TdxLayoutGroup;
    dxLayoutControl1: TdxLayoutControl;
    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;
    bVerPedidoCliente: TButton;
    dxLayoutControl1Group9: TdxLayoutGroup;
    dxLayoutControl1Group10: TdxLayoutGroup;
    ActionList1: TActionList;
    actVerPedidoCli: TAction;
    dxLayoutControl1Item13: TdxLayoutItem;
    frViewObraReserva1: TfrViewObraReserva;
    dxLayoutControl1Group11: TdxLayoutGroup;
    frViewDatosYSeleccionProveedorPedido1: TfrViewDatosYSeleccionProveedorPedido;
    dxLayoutControl1Item1: TdxLayoutItem;
    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);
    procedure ObraReservaEditValueChanged(Sender: TObject);
    procedure CustomViewShow(Sender: TObject);
  protected
    FPedido : IBizPedidoProveedor;
    FController : IPedidosProveedorController;
    FViewProveedorPedido : IViewDatosYSeleccionProveedorPedido;
    FFormasPago : IBizFormaPago;
    FFormasPagoController : IFormasPagoController;
    FObras: TStringList;
    FObrasController : IObrasController;
//    FPedidoCliAsociado : IBizPedidoCliente;
//    FPedidoCliController : IPedidosClienteController;

    function GetPedido: IBizPedidoProveedor;
    procedure SetPedido(const Value: IBizPedidoProveedor); virtual;
    function GetController : IPedidosProveedorController;
    procedure SetController (const Value : IPedidosProveedorController);
    function GetViewProveedorPedido: IViewDatosYSeleccionProveedorPedido;
  public
    property Pedido: IBizPedidoProveedor read GetPedido write SetPedido;
    property Controller : IPedidosProveedorController read GetController write SetController;
    property ViewProveedorPedido: IViewDatosYSeleccionProveedorPedido read GetViewProveedorPedido;
  end;

implementation
{$R *.dfm}

uses uStringsUtils;


{ TfrViewPedidoProveedor }

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;
  if Assigned(FFormasPago) then
     FFormasPagoController.VerTodos(FFormasPago);
end;

procedure TfrViewPedidoProveedor.CustomViewCreate(Sender: TObject);
begin
  inherited;
  FFormasPago := Nil;
  FFormasPagoController := TFormasPagoController.Create;
  FObrasController := TObrasController.Create;
  FObras := FObrasController.DarListaObras;
  FViewProveedorPedido := frViewDatosYSeleccionProveedorPedido1;
  eReferencia.Enabled := False;
end;

procedure TfrViewPedidoProveedor.CustomViewDestroy(Sender: TObject);
begin
  FViewProveedorPedido := Nil;
  FController := Nil;
  FFormasPago := Nil;
  FFormasPagoController := NIL;
  FObrasController := Nil;
  FreeAndNil(FObras)  
end;

procedure TfrViewPedidoProveedor.CustomViewShow(Sender: TObject);
begin
  inherited;
  if not FPedido.ID_OBRAISNull then
  begin
     frViewObraReserva1.ActivarObra(FPedido.ID_OBRA);
     frViewDireccionEntregaPedidoProv1.lblObra.Caption := FPedido.NOMBRE_OBRA;
  end;
     
  frViewObraReserva1.cbObraReserva.Properties.OnEditValueChanged := ObraReservaEditValueChanged;
end;

procedure TfrViewPedidoProveedor.ObraReservaEditValueChanged(Sender: TObject);
var
 IDObra: String;

begin
  inherited;

  IDObra := frViewObraReserva1.DarIDObraSeleccionada;
  Controller.AsignarIDObra(FPedido, IDObra);

  if EsCadenaVacia(IDObra) then
  begin
     frViewDireccionEntregaPedidoProv1.actListaObras.Enabled := False;
     frViewDireccionEntregaPedidoProv1.lblObra.Caption := frViewObraReserva1.cbObraReserva.Text;
     frViewDireccionEntregaPedidoProv1.actListaAlmacenes.Execute
  end
  else
  begin
     frViewDireccionEntregaPedidoProv1.actListaObras.Enabled := true;
     frViewDireccionEntregaPedidoProv1.actListaObras.Execute;
     frViewDireccionEntregaPedidoProv1.lblObra.Caption := frViewObraReserva1.cbObraReserva.Text;
  end;
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;
  FViewProveedorPedido.ElegirProveedor;
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;
  FViewProveedorPedido.AnadirNuevoProveedor;
end;

function TfrViewPedidoProveedor.GetController: IPedidosProveedorController;
begin
  Result := FController;
end;

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

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

procedure TfrViewPedidoProveedor.SetController(const Value: IPedidosProveedorController);
begin
  FController := Value;
end;

procedure TfrViewPedidoProveedor.SetPedido(const Value: IBizPedidoProveedor);
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';

    FViewProveedorPedido.Pedido := FPedido;
    frViewDireccionEntregaPedidoProv1.PedidoProveedor := FPedido;

    frViewObraReserva1.Obras := FObras;
    frViewObraReserva1.ObrasController := FObrasController;
  end
  else begin
    DADataSource.DataTable := NIL;
    dsFormaPago.DataTable := NIL;
//    FPedidoCliAsociado := NIL;
    FViewProveedorPedido.Pedido := NIL;
  end;
end;


end.
