unit uViewAlbaranProveedor;

interface

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

  uViewObservaciones,  uViewDatosYSeleccionProveedor,
  cxGraphics, cxDropDownEdit, cxImageComboBox, cxDBEdit, cxContainer, cxEdit,
  cxTextEdit, cxMaskEdit, cxCalendar, dxLayoutControl, cxControls, cxMemo,
  uViewDireccionEntregaAlbaranProv, Buttons, ActnList, cxLookupEdit,
  cxDBLookupEdit, cxDBLookupComboBox, uFormasPagoController,
  uBizPedidosProveedor, uPedidosProveedorController, uBizFormasPago,
  uDAInterfaces, uAlbaranesProveedorController, uViewTienda;

type
  IViewAlbaranProveedor = interface(IViewBase)
  ['{2DA099CE-359A-46E8-90A0-D004FF09040A}']
    function GetController : IAlbaranesProveedorController;
    procedure SetController (const Value : IAlbaranesProveedorController);
    property Controller : IAlbaranesProveedorController read GetController write SetController;

    function GetAlbaran: IBizAlbaranProveedor;
    procedure SetAlbaran(const Value: IBizAlbaranProveedor);
    property Albaran: IBizAlbaranProveedor read GetAlbaran write SetAlbaran;

    function GetViewProveedorAlbaran: TfrViewDatosYSeleccionProveedor;
    procedure SetViewProveedorAlbaran(const Value: TfrViewDatosYSeleccionProveedor);
    property ViewProveedorAlbaran: TfrViewDatosYSeleccionProveedor read GetViewProveedorAlbaran write SetViewProveedorAlbaran;
  end;

  TfrViewAlbaranProveedor = class(TfrViewBase, IViewAlbaranProveedor)
    DADataSource: TDADataSource;
    dxLayoutControl1Group_Root: TdxLayoutGroup;
    dxLayoutControl1: TdxLayoutControl;
    dxLayoutControl1Item2: TdxLayoutItem;
    edtFechaAlbaran: TcxDBDateEdit;
    dxLayoutControl1Group1: TdxLayoutGroup;
    dxLayoutControl1Group2: TdxLayoutGroup;
    dxLayoutControl1Item3: TdxLayoutItem;
    eReferencia: TcxDBTextEdit;
    dxLayoutControl1Group6: TdxLayoutGroup;
    dxLayoutControl1Group7: TdxLayoutGroup;
    dxLayoutControl1Group8: TdxLayoutGroup;
    dxLayoutControl1Group3: TdxLayoutGroup;
    dxLayoutControl1Item1: TdxLayoutItem;
    frViewProveedorAlbaran: TfrViewDatosYSeleccionProveedor;
    ActionList1: TActionList;
    actElegirDireccion: TAction;
    dxLayoutControl1Item4: TdxLayoutItem;
    frViewDireccionEntregaAlbaranProv1: TfrViewDireccionEntregaAlbaranProv;
    dxLayoutControl1Item5: TdxLayoutItem;
    cbFormaPago: TcxDBLookupComboBox;
    dxLayoutControl1Item7: TdxLayoutItem;
    bFormasPago: TButton;
    dxLayoutControl1Group4: TdxLayoutGroup;
    dsFormaPago: TDADataSource;
    dxLayoutControl1Item8: TdxLayoutItem;
    eReferenciaPedidoCli: TcxTextEdit;
    dxLayoutControl1Item9: TdxLayoutItem;
    Button1: TButton;
    dxLayoutControl1Group5: TdxLayoutGroup;
    actVerPedido: TAction;
    dxLayoutControl1Item10: TdxLayoutItem;
    eRefFactura: TcxDBTextEdit;
    dxLayoutControl1Item11: TdxLayoutItem;
    eReferenciaProveedor: TcxDBTextEdit;
    dxLayoutControl1Item12: TdxLayoutItem;
    eReferenciaFacturaProveedor: TcxDBTextEdit;
    dxLayoutControl1Item13: TdxLayoutItem;
    frViewTienda1: TfrViewTienda;
    dxLayoutControl1Group9: TdxLayoutGroup;
    frViewObservaciones1: TfrViewObservaciones;
    dxLayoutControl1Item6: TdxLayoutItem;
    procedure CustomViewCreate(Sender: TObject);
    procedure CustomViewDestroy(Sender: TObject);
    procedure actElegirDireccionExecute(Sender: TObject);
    procedure frViewProveedorAlbaranButton1Click(Sender: TObject);
    procedure frViewProveedorAlbaranButton2Click(Sender: TObject);
    procedure bFormasPagoClick(Sender: TObject);
    procedure actVerPedidoExecute(Sender: TObject);

    procedure frViewProveedorAlbaranactElegirContactoUpdate(Sender: TObject);
    procedure frViewProveedorAlbaranactAnadirContactoUpdate(Sender: TObject);
    procedure actElegirDireccionUpdate(Sender: TObject);
    procedure actVerPedidoUpdate(Sender: TObject);

  protected
    FAlbaran : IBizAlbaranProveedor;
    FController : IAlbaranesProveedorController;
    FViewProveedorAlbaran : TfrViewDatosYSeleccionProveedor;
    FFormasPago : IBizFormaPago;
    FFormasPagoController : IFormasPagoController;
    FPedidoAsociado : IBizPedidoProveedor;
    FPedidoController : IPedidosProveedorController;

    function GetAlbaran: IBizAlbaranProveedor;
    procedure SetAlbaran(const Value: IBizAlbaranProveedor); virtual;
    function GetController : IAlbaranesProveedorController;
    procedure SetController (const Value : IAlbaranesProveedorController);
    function GetViewProveedorAlbaran: TfrViewDatosYSeleccionProveedor;
    procedure SetViewProveedorAlbaran(const Value: TfrViewDatosYSeleccionProveedor);

  public
    property Albaran: IBizAlbaranProveedor read GetAlbaran write SetAlbaran;
    property Controller : IAlbaranesProveedorController read GetController write SetController;
    property ViewProveedorAlbaran: TfrViewDatosYSeleccionProveedor read GetViewProveedorAlbaran;
  end;

implementation

{$R *.dfm}

{ TfrViewAlbaranProveedor }

uses
  uProveedoresController, uBizDireccionesContacto, 
  schAlbaranesProveedorClient_Intf;


procedure TfrViewAlbaranProveedor.actElegirDireccionExecute(Sender: TObject);
var
  AProveedoresController : IProveedoresController;
  AAlbaranController : IAlbaranesProveedorController;
  ADireccion : IBizDireccionesContacto;
begin
  inherited;
{  AProveedoresController := TProveedoresController.Create;
  AAlbaranController := TAlbaranesProveedorController.Create;
  try
    ADireccion := AProveedoresController.ElegirDireccionEntrega(FAlbaran.Proveedor.Direcciones,
      'Seleccione la dirección del Proveedor que quiere utilizar como dirección de envio de este Albaran.');
    if Assigned(ADireccion) then
      AAlbaranController.CopiarDireccionEnvio(ADireccion, FAlbaran);
  finally
    AProveedoresController := NIL;
    AAlbaranController := NIL;
  end;
}
end;

procedure TfrViewAlbaranProveedor.actElegirDireccionUpdate(Sender: TObject);
begin
  inherited;
  if (Sender as TAction).Enabled then
  (Sender as TAction).Enabled := (not ReadOnly) and
    Assigned(FAlbaran) and
    Assigned(FViewProveedorAlbaran) and
    FAlbaran.DataTable.Active and
    Assigned(FAlbaran.Proveedor) and
    Assigned(FAlbaran.Proveedor) and
    Assigned(FAlbaran.Proveedor.Direcciones) and
    FAlbaran.Proveedor.Direcciones.DataTable.Active and
    (FAlbaran.Proveedor.Direcciones.DataTable.RecordCount > 0);
end;

procedure TfrViewAlbaranProveedor.actVerPedidoExecute(Sender: TObject);
begin
  inherited;
  FPedidoController.Ver(FPedidoAsociado);
end;

procedure TfrViewAlbaranProveedor.actVerPedidoUpdate(Sender: TObject);
begin
  inherited;
  if (Sender as TAction).Enabled then
     (Sender as TAction).Enabled := (Albaran.REF_PED_PROVEEDOR <> '')
end;

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

procedure TfrViewAlbaranProveedor.CustomViewCreate(Sender: TObject);
begin
  inherited;
  FPedidoAsociado := NIL;
  FPedidoController := TPedidosProveedorController.Create;
  FFormasPago := Nil;
  FFormasPagoController := TFormasPagoController.Create;
  FViewProveedorAlbaran := frViewProveedorAlbaran;
  FViewProveedorAlbaran.MsgElegirProveedor := 'Elija el proveedor de este albarán.';

  eReferencia.Enabled := False;
end;

procedure TfrViewAlbaranProveedor.CustomViewDestroy(Sender: TObject);
begin
  FPedidoController := NIL;
  FFormasPago := Nil;
  FFormasPagoController := NIL;
  FPedidoAsociado := NIL;
  FViewProveedorAlbaran := Nil;
  inherited;
end;

procedure TfrViewAlbaranProveedor.frViewProveedorAlbaranactAnadirContactoUpdate(Sender: TObject);
begin
  if (Sender as TAction).Enabled then
     (Sender as TAction).Enabled := not Assigned(FPedidoAsociado);
end;

procedure TfrViewAlbaranProveedor.frViewProveedorAlbaranactElegirContactoUpdate(Sender: TObject);
begin
  if (Sender as TAction).Enabled then
     (Sender as TAction).Enabled := (not Assigned(FPedidoAsociado));
end;

procedure TfrViewAlbaranProveedor.frViewProveedorAlbaranButton1Click(Sender: TObject);
begin
  if Assigned(Albaran) and Assigned(Albaran.Proveedor) and
    Assigned (Albaran.Detalles) and (Albaran.Detalles.RecordCount > 0) then
  begin
    if (Application.MessageBox('Si cambia de proveedor, se eliminarán todos sus artículos de la orden de devolución actual, ¿Desea continuar?', 'Atención', MB_YESNO) = IDNO) then
      Exit;
  end;
  frViewProveedorAlbaran.actElegirContacto.Execute;
end;

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

function TfrViewAlbaranProveedor.GetAlbaran: IBizAlbaranProveedor;
begin
  Result := FAlbaran;
end;

function TfrViewAlbaranProveedor.GetController: IAlbaranesProveedorController;
begin
  Result := FController;
end;

function TfrViewAlbaranProveedor.GetViewProveedorAlbaran: TfrViewDatosYSeleccionProveedor;
begin
  Result := FViewProveedorAlbaran;
end;

procedure TfrViewAlbaranProveedor.SetAlbaran(const Value: IBizAlbaranProveedor);
begin
  FAlbaran := Value;
  if Assigned(FAlbaran) then
  begin
    DADataSource.DataTable := FAlbaran.DataTable;
    frViewTienda1.DataItem := FAlbaran.DataTable;

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

    frViewProveedorAlbaran.Proveedor := FAlbaran.Proveedor;
    frViewDireccionEntregaAlbaranProv1.AlbaranProveedor := FAlbaran;

    eReferenciaPedidoCli.Enabled := False;
    eRefFactura.Enabled := False;

    FPedidoAsociado := NIL;
    if (FAlbaran.ID_PEDIDO > 0) then
    begin
      FPedidoAsociado := FPedidoController.Buscar(FAlbaran.ID_PEDIDO);
      if Assigned(FPedidoAsociado) then
      begin
        FPedidoAsociado.DataTable.Active := True;
        eReferenciaPedidoCli.Text := FPedidoAsociado.REFERENCIA
      end
      else
        eReferenciaPedidoCli.Text := '';
    end
    else
      eReferenciaPedidoCli.Text := 'No hay pedido asociado';
  end
  else begin
    DADataSource.DataTable := NIL;
    dsFormaPago.DataTable := NIL;
    frViewProveedorAlbaran.Proveedor := nil;
    frViewDireccionEntregaAlbaranProv1.AlbaranProveedor := Nil;
  end;
end;

procedure TfrViewAlbaranProveedor.SetController(const Value: IAlbaranesProveedorController);
begin
  FController := Value;
  if Assigned(FController) then
     ViewProveedorAlbaran.Controller := Controller.ProveedorController;
end;

procedure TfrViewAlbaranProveedor.SetViewProveedorAlbaran(const Value: TfrViewDatosYSeleccionProveedor);
begin
  FViewProveedorAlbaran := Value;
end;

end.
