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,
  uBizContratosCliente, uContratosClienteController,
  cxDBLookupComboBox, uFormasPagoController, ActnList, uDAInterfaces, uBizFormasPago,
  uViewTienda, uPedidosProveedorController, uBizContactos, uVendedoresController;

type
  IViewPedidoProveedor = interface(IViewBase)
  ['{C5385699-C1A4-4AEB-B3D0-EE3BDB322FE2}']
    function GetController : IPedidosProveedorController;
    procedure SetController (const Value : IPedidosProveedorController);
    property Controller : IPedidosProveedorController read GetController write SetController;

    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;
    dxLayoutControl1Item3: TdxLayoutItem;
    eReferencia: TcxDBTextEdit;
    dxLayoutControl1Group5: TdxLayoutGroup;
    dxLayoutControl1Group6: 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;
    eReferenciaContratoCli: TcxTextEdit;
    dxLayoutControl1Item12: TdxLayoutItem;
    Button1: TButton;
    dxLayoutControl1Group9: TdxLayoutGroup;
    dxLayoutControl1Group10: TdxLayoutGroup;
    ActionList1: TActionList;
    actVerContratoCli: TAction;
    dxLayoutControl1Item13: TdxLayoutItem;
    frViewTienda1: TfrViewTienda;
    dxLayoutControl1Group11: TdxLayoutGroup;
    frViewObservaciones1: TfrViewObservaciones;
    dxLayoutControl1Item6: TdxLayoutItem;
    dxLayoutControl1Item14: TdxLayoutItem;
    edtlDescripcion: TcxDBTextEdit;
    dxLayoutControl1Item15: TdxLayoutItem;
    edtFechaEnvio2: TcxDBDateEdit;
    dxLayoutControl1Item16: TdxLayoutItem;
    cbVendedor: TcxDBLookupComboBox;
    dxLayoutControl1Group7: TdxLayoutGroup;
    dsVendedor: TDADataSource;
    procedure CustomViewCreate(Sender: TObject);
    procedure CustomViewDestroy(Sender: TObject);
    procedure bFormasPagoClick(Sender: TObject);
    procedure actVerContratoCliExecute(Sender: TObject);
    procedure actVerContratoCliUpdate(Sender: TObject);
    procedure frViewProveedorPedidoButton1Click(Sender: TObject);
    procedure frViewProveedorPedidoButton2Click(Sender: TObject);
  protected
    FPedido : IBizPedidoProveedor;
    FController : IPedidosProveedorController;
    FViewProveedorPedido : TfrViewDatosYSeleccionProveedor;
    FFormasPago : IBizFormaPago;
    FVendedor : IBizVendedor;
    FFormasPagoController : IFormasPagoController;
    FVendedoresController : IVendedoresController;
    FContratoCliAsociado : IBizContratoCliente;
    FContratoCliController : IContratosClienteController;

    function GetPedido: IBizPedidoProveedor;
    procedure SetPedido(const Value: IBizPedidoProveedor); virtual;
    function GetController : IPedidosProveedorController;
    procedure SetController (const Value : IPedidosProveedorController);
    function GetViewProveedorPedido: TfrViewDatosYSeleccionProveedor;
    procedure SetViewProveedorPedido(const Value: TfrViewDatosYSeleccionProveedor);

  public
    property Pedido: IBizPedidoProveedor read GetPedido write SetPedido;
    property Controller : IPedidosProveedorController read GetController write SetController;
    property ViewProveedorPedido: TfrViewDatosYSeleccionProveedor read GetViewProveedorPedido;
  end;

implementation

{$R *.dfm}

{ TfrViewPedidoProveedor }

procedure TfrViewPedidoProveedor.actVerContratoCliExecute(Sender: TObject);
begin
  inherited;
  //Lo modificamos para que el pedido de proveedor este asociado al contrato de cliente
  FContratoCliController.Ver(FContratoCliAsociado);
end;

procedure TfrViewPedidoProveedor.actVerContratoCliUpdate(Sender: TObject);
begin
  inherited;
  //Lo modificamos para que el pedido de proveedor este asociado al contrato de cliente
  if (Sender as TAction).Enabled then
     (Sender as TAction).Enabled := Assigned(FContratoCliAsociado)
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;
  FVendedor := Nil;
  FFormasPagoController := TFormasPagoController.Create;
  FVendedoresController := TVendedoresController.Create;
  FViewProveedorPedido := frViewProveedorPedido;
  FViewProveedorPedido.MsgElegirProveedor := 'Elija el proveedor al que se le realizará el pedido.';
  eReferencia.Enabled := False;
  eReferenciaContratoCli.Enabled := False;
  FContratoCliAsociado := NIL;
  FContratoCliController := TContratosClienteController.Create;
end;

procedure TfrViewPedidoProveedor.CustomViewDestroy(Sender: TObject);
begin
  FViewProveedorPedido := Nil;
  FFormasPago := Nil;
  FFormasPagoController := NIL;
  FVendedor := Nil;
  FVendedoresController := 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.GetController: IPedidosProveedorController;
begin
  Result := FController;
end;

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

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

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

  if Assigned(FController) then
     ViewProveedorPedido.Controller := Controller.ProveedorController;
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;

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

    FContratoCliAsociado := NIL;
    if (FPedido.ID_CONTRATO_CLIENTE > 0) then
    begin
      FContratoCliAsociado := FContratoCliController.Buscar(FPedido.ID_CONTRATO_CLIENTE);
      if Assigned(FContratoCliAsociado) then
      begin
        FContratoCliAsociado.DataTable.Active := True;
        eReferenciaContratoCli.Text := FContratoCliAsociado.REFERENCIA
      end
      else
        eReferenciaContratoCli.Text := '';
    end
    else
      eReferenciaContratoCli.Text := 'No hay contrato asociado';
  end
  else begin
    DADataSource.DataTable := NIL;
    dsFormaPago.DataTable := NIL;
    dsVendedor.DataTable := NIL;    
    FContratoCliAsociado := NIL;
  end;

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

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

end.
