unit uViewDireccionEntregaAlbaranProv;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewBase, uBizAlbaranesProveedor, cxGraphics, dxLayoutControl, cxMemo,
  cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit, cxLookupEdit,
  cxDBLookupEdit, cxDBLookupComboBox, StdCtrls, cxControls, DB, uDADataTable,
  ActnList, uBizAlmacenes, uAlmacenesController, uAlbaranesProveedorController,
  Buttons, uDAInterfaces, uBizObras, uObrasController;

type
  IViewDireccionEntregaAlbaranProv = interface(IViewBase)
  ['{20124A28-C343-4A70-8016-06DDF92C75E7}']
    function GetAlbaranProveedor: IBizAlbaranProveedor;
    procedure SetAlbaranProveedor(const Value: IBizAlbaranProveedor);
    property AlbaranProveedor: IBizAlbaranProveedor read GetAlbaranProveedor write SetAlbaranProveedor;
  end;

  TfrViewDireccionEntregaAlbaranProv = class(TfrViewBase, IViewDireccionEntregaAlbaranProv)
    dxLayoutControl1: TdxLayoutControl;
    rdxDestino1: TRadioButton;
    rdxDestino2: TRadioButton;
    cbLista: TcxDBLookupComboBox;
    dxLayoutGroup1: TdxLayoutGroup;
    dxLayoutItem1: TdxLayoutItem;
    dxLayoutControl1Item3: TdxLayoutItem;
    dxLayoutControl1Item2: TdxLayoutItem;
    ActionList1: TActionList;
    actLista: TAction;
    actOtro: TAction;
    dsAlbaran: TDADataSource;
    dsAlmacenes: TDADataSource;
    dxLayoutControl1Item1: TdxLayoutItem;
    bModificar: TBitBtn;
    dxLayoutControl1Item4: TdxLayoutItem;
    txtDireccion: TStaticText;
    dxLayoutControl1Item5: TdxLayoutItem;
    cbListaObras: TcxDBLookupComboBox;
    dxLayoutControl1Item6: TdxLayoutItem;
    RadioButton1: TRadioButton;
    dsObras: TDADataSource;
    actListaObras: TAction;
    procedure actListaExecute(Sender: TObject);
    procedure actOtroExecute(Sender: TObject);
    procedure cbListaPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
    procedure bModificarClick(Sender: TObject);
    procedure txtDireccionDblClick(Sender: TObject);
    procedure cbListaObrasPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
    procedure actListaObrasExecute(Sender: TObject);
  protected
    FAlmacenesController : IAlmacenesController;
    FAlmacenes: IBizAlmacen;
    FObrasController : IObrasController;
    FObras: IBizObra;
    FAlbaran : IBizAlbaranProveedor;
    FController : IAlbaranesProveedorController;
    function GetAlbaranProveedor: IBizAlbaranProveedor;
    procedure SetAlbaranProveedor(const Value: IBizAlbaranProveedor);
    procedure CambioDireccionAlmacen;
    procedure CambioDireccionObra;    
    procedure RefrescarDireccion;
    procedure SetReadOnly(Value: Boolean); override;

  public
    property AlbaranProveedor: IBizAlbaranProveedor read GetAlbaranProveedor  write SetAlbaranProveedor;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

implementation
{$R *.dfm}

uses
  uEditorRegistryUtils, uCustomView, uBizInventario;

procedure TfrViewDireccionEntregaAlbaranProv.actListaExecute(Sender: TObject);
begin
  actLista.Checked := True;
  RefrescarDireccion;
end;

procedure TfrViewDireccionEntregaAlbaranProv.actListaObrasExecute(Sender: TObject);
begin
  actListaObras.Checked := True;
  RefrescarDireccion;
end;

procedure TfrViewDireccionEntregaAlbaranProv.actOtroExecute(Sender: TObject);
begin
  actOtro.Checked := True;
//  memDireccion.Enabled := True;

  if Assigned(FAlbaran) then
  begin
    FController.VerDireccionEntrega(FAlbaran);

    if (FAlbaran.ID_ALMACEN > 0) then
    begin
      FAlbaran.Edit;
      FAlbaran.ID_ALMACEN := 0;
    end;
  end;
  RefrescarDireccion;
end;

procedure TfrViewDireccionEntregaAlbaranProv.bModificarClick(Sender: TObject);
begin
  inherited;
  actOtro.Execute;
end;

procedure TfrViewDireccionEntregaAlbaranProv.CambioDireccionAlmacen;
begin
  if Assigned(FAlbaran)
  and Assigned(FAlmacenes) then
  begin
    FAlbaran.Edit;
    FAlbaran.CALLE := FAlmacenes.CALLE;
    FAlbaran.POBLACION := FAlmacenes.POBLACION;
    FAlbaran.POBLACION := FAlmacenes.POBLACION;
    FAlbaran.PROVINCIA := FAlmacenes.PROVINCIA;
    FAlbaran.CODIGO_POSTAL := FAlmacenes.CODIGO_POSTAL;
    FAlbaran.PERSONA_CONTACTO := FAlmacenes.PERSONA_CONTACTO;
    FAlbaran.TELEFONO := FAlmacenes.TELEFONO;
    RefrescarDireccion;
  end;
end;

procedure TfrViewDireccionEntregaAlbaranProv.CambioDireccionObra;
begin
  if Assigned(FAlbaran) and Assigned(FObras) then
  begin
    FAlbaran.Edit;
    FAlbaran.CALLE := FObras.CALLE;
    FAlbaran.POBLACION := FObras.POBLACION;
    FAlbaran.POBLACION := FObras.POBLACION;
    FAlbaran.PROVINCIA := FObras.PROVINCIA;
    FAlbaran.CODIGO_POSTAL := FObras.CODIGO_POSTAL;
    RefrescarDireccion;
  end;
end;

procedure TfrViewDireccionEntregaAlbaranProv.cbListaObrasPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
  inherited;
  if Assigned(FAlbaran) and Assigned(FObras) and (FAlbaran.ID_ALMACEN <> FObras.ID) then
    CambioDireccionObra;
end;

procedure TfrViewDireccionEntregaAlbaranProv.cbListaPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
  if Assigned(FAlbaran) and Assigned(FAlmacenes)
  and (FAlbaran.ID_ALMACEN <> FAlmacenes.ID) then
     CambioDireccionAlmacen;
end;

constructor TfrViewDireccionEntregaAlbaranProv.Create(AOwner: TComponent);
begin
  inherited;
  FController := TAlbaranesProveedorController.Create;
  FAlmacenesController := TAlmacenesController.Create;
  FAlmacenes := FAlmacenesController.BuscarTodos;
  FAlmacenes.DataTable.Active := True;
  dsAlmacenes.DataTable := FAlmacenes.DataTable;

  FObrasController := TObrasController.Create;
  FObras := FObrasController.BuscarTodos;
  FObras.DataTable.Active := True;
  dsObras.DataTable := FObras.DataTable;
end;

destructor TfrViewDireccionEntregaAlbaranProv.Destroy;
begin
  cbListaObras.Properties.OnValidate := Nil;
  cbLista.Properties.OnValidate := Nil;

  FAlmacenesController := Nil;
  FAlmacenes := Nil;

  FObrasController := Nil;
  FObras := Nil;

  FController := NIL;
  inherited;
end;

function TfrViewDireccionEntregaAlbaranProv.GetAlbaranProveedor: IBizAlbaranProveedor;
begin
  Result := FAlbaran;
end;

procedure TfrViewDireccionEntregaAlbaranProv.RefrescarDireccion;
begin
  txtDireccion.Caption := '';
  if Assigned(FAlbaran) then
  begin
    if (actOtro.Checked) then
    begin
      cbLista.Enabled := False;
      cbLista.Text := '';
      cbListaObras.Enabled := False;
      cbListaObras.Text := '';

      txtDireccion.Enabled := True;
      txtDireccion.Caption := FAlbaran.CALLE;
      txtDireccion.Caption := txtDireccion.Caption + #13#10 + FAlbaran.CODIGO_POSTAL + ' ' + FAlbaran.POBLACION;
      txtDireccion.Caption := txtDireccion.Caption + #13#10 + FAlbaran.PROVINCIA;
      bModificar.Enabled := True;
    end
    else if (actLista.Checked) then
    begin
      txtDireccion.Enabled := False;
      cbListaObras.Enabled := False;
      cbListaObras.Text := '';

      cbLista.Enabled := True;
      cbLista.DroppedDown := True;
      bModificar.Enabled := False;
    end
    else begin
      txtDireccion.Enabled := False;
      cbLista.Enabled := False;
      cbLista.Text := '';

      cbListaObras.Enabled := True;
      cbListaObras.DroppedDown := True;
      bModificar.Enabled := False;
    end;
  end;
end;

procedure TfrViewDireccionEntregaAlbaranProv.SetAlbaranProveedor(const Value: IBizAlbaranProveedor);
begin
  cbLista.Properties.OnValidate := NIL;
  cbListaObras.Properties.OnValidate := NIL;
  dsAlbaran.DataTable := nil;

  FAlbaran := Value;
  if Assigned(FAlbaran) then
  begin
    dsAlbaran.DataTable := FAlbaran.DataTable;
    cbLista.Properties.OnValidate := cbListaPropertiesValidate;
    cbListaObras.Properties.OnValidate := cbListaPropertiesValidate;

    {  Para poder inicializar con el almacén por defecto en el caso de un
       albarán nuevo, antes hay que comprobar que la dirección alternativa
       está vacia porque puede ser que el albarán se haya generado
       automáticamente a partir de un pedido a proveedor con una dirección
       que no es un almacén.
    }
    if (FAlbaran.EsNuevo) and
      ((Length(FAlbaran.CALLE) = 0) and
       (Length(FAlbaran.CODIGO_POSTAL) = 0) and
       (Length(FAlbaran.POBLACION) = 0) and
       (Length(FAlbaran.PROVINCIA) = 0)) then
       if FAlbaran.TIPO_ALMACEN = CTE_INV_ALMACEN then
          CambioDireccionAlmacen
       else
          CambioDireccionObra;

    if (FAlbaran.ID_ALMACEN > 0) then
    begin
       if FAlbaran.TIPO_ALMACEN = CTE_INV_ALMACEN then
       begin
          actLista.Checked := True;
          cbLista.EditValue := FAlbaran.ID_ALMACEN;  //No quitar, si no lo asignamos asi cuando el objeto albaran viene creado a partir de un pedido no coge bien el almacen
       end
       else
       begin
          actListaObras.Checked := True;
          cbListaObras.EditValue := FAlbaran.ID_ALMACEN; //No quitar, si no lo asignamos asi cuando el objeto albaran viene creado a partir de un pedido no coge bien el almacen
       end;
    end
    else
       if not (FAlbaran.EsNuevo) then
          actOtro.Checked := True;

    RefrescarDireccion;
  end;
end;

procedure TfrViewDireccionEntregaAlbaranProv.SetReadOnly(Value: Boolean);
begin
  inherited;

  if (csLoading in Self.ComponentState) then
    Exit;

  rdxDestino1.Enabled := not ReadOnly;
  rdxDestino2.Enabled := not ReadOnly;
	RadioButton1.Enabled := not ReadOnly;
end;

procedure TfrViewDireccionEntregaAlbaranProv.txtDireccionDblClick(Sender: TObject);
begin
  inherited;
  actOtro.Execute;
end;

end.
