unit uViewDireccionEntregaPedidoProv;

interface

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

type
  IViewDireccionEntregaPedidoProv = interface(IViewBase)
  ['{7467855C-066F-4A60-B88F-2837C8050B1E}']
    function GetPedidoProveedor: IBizPedidoProveedor;
    procedure SetPedidoProveedor(const Value: IBizPedidoProveedor);
    property PedidoProveedor: IBizPedidoProveedor read GetPedidoProveedor write SetPedidoProveedor;
  end;

  TfrViewDireccionEntregaPedidoProv = class(TfrViewBase, IViewDireccionEntregaPedidoProv)
    dxLayoutControl1: TdxLayoutControl;
    rdxDestino1: TRadioButton;
    rdxDestino2: TRadioButton;
    cbListaAlmacenes: TcxDBLookupComboBox;
    dxLayoutGroup1: TdxLayoutGroup;
    dxLayoutItem1: TdxLayoutItem;
    dxLayoutControl1Item3: TdxLayoutItem;
    dxLayoutControl1Item2: TdxLayoutItem;
    ActionList1: TActionList;
    actListaAlmacenes: TAction;
    actOtro: TAction;
    dsPedido: TDADataSource;
    dsAlmacenes: TDADataSource;
    dxLayoutControl1Item1: TdxLayoutItem;
    bModificar: TBitBtn;
    txtDireccion: TStaticText;
    dxLayoutControl1Item5: TdxLayoutItem;
    dxLayoutControl1Item4: TdxLayoutItem;
    RadioButton1: TRadioButton;
    dxLayoutControl1Item6: TdxLayoutItem;
    cbListaObras: TcxDBLookupComboBox;
    dsObras: TDADataSource;
    actListaObras: TAction;
    Bevel1: TBevel;
    dxLayoutControl1Item8: TdxLayoutItem;
    edtEntregarA: TcxDBButtonEdit;
    dxLayoutControl1Item7: TdxLayoutItem;
    procedure actListaAlmacenesExecute(Sender: TObject);
    procedure actOtroExecute(Sender: TObject);
    procedure cbListaAlmacenesPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
    procedure cbListaObrasPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
    procedure bModificarClick(Sender: TObject);
    procedure txtDireccionDblClick(Sender: TObject);
    procedure actListaObrasExecute(Sender: TObject);
    procedure edtEntregarAPropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
  protected
    FAlmacenesController : IAlmacenesController;
    FAlmacenes: IBizAlmacen;
    FObrasController : IObrasController;
    FObras: IBizObra;
    FPedido : IBizPedidoProveedor;
    FController : IPedidosProveedorController;
    function GetPedidoProveedor: IBizPedidoProveedor;
    procedure SetPedidoProveedor(const Value: IBizPedidoProveedor);
    procedure CambioDireccionAlmacen;
    procedure CambioDireccionObra;
    procedure RefrescarDireccion;
    procedure SetReadOnly(Value: Boolean); override;

  public
    property PedidoProveedor: IBizPedidoProveedor read GetPedidoProveedor  write SetPedidoProveedor;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

implementation

{$R *.dfm}

uses
  uEditorRegistryUtils, uCustomView, uEditorElegirPersonaContactoPedido;

procedure TfrViewDireccionEntregaPedidoProv.actListaAlmacenesExecute(Sender: TObject);
begin
  actListaAlmacenes.Checked := True;
  RefrescarDireccion;
end;

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

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

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

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

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

procedure TfrViewDireccionEntregaPedidoProv.CambioDireccionAlmacen;
begin
  if Assigned(FPedido) and Assigned(FAlmacenes) then
  begin
    FPedido.Edit;
    FPedido.ID_OBRA := 0;
    FPedido.CALLE := FAlmacenes.CALLE;
    FPedido.POBLACION := FAlmacenes.POBLACION;
    FPedido.POBLACION := FAlmacenes.POBLACION;
    FPedido.PROVINCIA := FAlmacenes.PROVINCIA;
    FPedido.CODIGO_POSTAL := FAlmacenes.CODIGO_POSTAL;
    RefrescarDireccion;
  end;
end;

procedure TfrViewDireccionEntregaPedidoProv.CambioDireccionObra;
begin
  if Assigned(FPedido) and Assigned(FObras) then
  begin
    FPedido.Edit;
    FPedido.ID_ALMACEN := 0;
    FPedido.CALLE := FObras.CALLE;
    FPedido.POBLACION := FObras.POBLACION;
    FPedido.POBLACION := FObras.POBLACION;
    FPedido.PROVINCIA := FObras.PROVINCIA;
    FPedido.CODIGO_POSTAL := FObras.CODIGO_POSTAL;
    RefrescarDireccion;
  end;
end;

procedure TfrViewDireccionEntregaPedidoProv.cbListaObrasPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
  if Assigned(FPedido) and Assigned(FObras) and (FPedido.ID_OBRA <> FObras.ID) then
    CambioDireccionObra;
end;

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

constructor TfrViewDireccionEntregaPedidoProv.Create(AOwner: TComponent);
begin
  inherited;
  FController := TPedidosProveedorController.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 TfrViewDireccionEntregaPedidoProv.Destroy;
begin
  cbListaObras.Properties.OnValidate := Nil;
  cbListaAlmacenes.Properties.OnValidate := Nil;

  FAlmacenesController := Nil;
  FAlmacenes := Nil;

  FObrasController := Nil;
  FObras := Nil;

  FController := NIL;
  inherited;
end;

procedure TfrViewDireccionEntregaPedidoProv.edtEntregarAPropertiesButtonClick(
  Sender: TObject; AButtonIndex: Integer);
var
  AID_Subcontrata : Integer;
  APersonaContacto : String;
begin
  inherited;
  AID_Subcontrata := -1;
  if actListaObras.Checked then
    AID_Subcontrata := FObras.ID_SUBCONTRATA;
  APersonaContacto := FPedido.PERSONA_CONTACTO;

  if ElegirPersonaContactoPedido(AID_Subcontrata, APersonaContacto) then
  begin
    FPedido.Edit;
    FPedido.PERSONA_CONTACTO := APersonaContacto;
  end;
end;

function TfrViewDireccionEntregaPedidoProv.GetPedidoProveedor: IBizPedidoProveedor;
begin
  Result := FPedido;
end;

procedure TfrViewDireccionEntregaPedidoProv.RefrescarDireccion;
begin
  txtDireccion.Caption := '';
  if Assigned(FPedido) then
  begin
    if (actOtro.Checked) then
    begin
      cbListaAlmacenes.Enabled := False;
      cbListaAlmacenes.Text := '';
      cbListaObras.Enabled := False;
      cbListaObras.Text := '';

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

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

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

procedure TfrViewDireccionEntregaPedidoProv.SetPedidoProveedor(
  const Value: IBizPedidoProveedor);
begin
  cbListaAlmacenes.Properties.OnValidate := NIL;
  cbListaObras.Properties.OnValidate := NIL;
  dsPedido.DataTable := nil;

  FPedido := Value;

  dsPedido.DataTable := FPedido.DataTable;
  cbListaAlmacenes.Properties.OnValidate := cbListaAlmacenesPropertiesValidate;
  cbListaObras.Properties.OnValidate := cbListaObrasPropertiesValidate;

  if (FPedido.EsNuevo) then
     CambioDireccionAlmacen
  else begin
    if (FPedido.ID_ALMACEN >= 1) then
      actListaAlmacenes.Checked := True
    else if (FPedido.ID_OBRA >= 1) then
      actListaObras.Checked := True
    else
      actOtro.Checked := True;
  end;

  RefrescarDireccion;
end;

procedure TfrViewDireccionEntregaPedidoProv.SetReadOnly(Value: Boolean);
begin
  inherited;
  if ReadOnly then
  begin
    rdxDestino1.Enabled := False;
    rdxDestino2.Enabled := False;    
  end;
end;

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

end.
