unit uViewDireccionEntregaPedidoCli;

interface

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

type
  IViewDireccionEntregaPedidoCli = interface(IViewBase)
  ['{0F70A289-9EBA-4F78-932E-A8F87CBF4C35}']
    function GetPedidoCliente: IBizPedidoCliente;
    procedure SetPedidoCliente(const Value: IBizPedidoCliente);
    property PedidoCliente: IBizPedidoCliente read GetPedidoCliente write SetPedidoCliente;
  end;

  TfrViewDireccionEntregaPedidoCli = class(TfrViewBase, IViewDireccionEntregaPedidoCli)
    dxLayoutControl1: TdxLayoutControl;
    rdxDestino1: TRadioButton;
    rdxDestino3: 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;
    rdxDestino2: TRadioButton;
    dsObras: TDADataSource;
    actListaObras: TAction;
    Bevel1: TBevel;
    dxLayoutControl1Item8: TdxLayoutItem;
    edtEntregarA: TcxDBTextEdit;
    dxLayoutControl1Item7: TdxLayoutItem;
    dxLayoutControl1Group1: TdxLayoutGroup;
    dxLayoutControl1Group2: TdxLayoutGroup;
    dxLayoutControl1Group3: TdxLayoutGroup;
    lblObra: TLabel;
    dxLayoutControl1Item6: TdxLayoutItem;

    procedure cbListaAlmacenesPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
    procedure bModificarClick(Sender: TObject);
    procedure txtDireccionDblClick(Sender: TObject);

    procedure edtEntregarAPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
    procedure actListaAlmacenesExecute(Sender: TObject);
    procedure actOtroExecute(Sender: TObject);
    procedure actListaObrasExecute(Sender: TObject);

  protected
    FAlmacenesController : IAlmacenesController;
    FAlmacenes: IBizAlmacen;
//    FObrasController : IObrasController;
//    FObra: IBizObra;
    FPedido : IBizPedidoCliente;
    FController : IPedidosClienteController;
    function GetPedidoCliente: IBizPedidoCliente;
    procedure SetPedidoCliente(const Value: IBizPedidoCliente);
    procedure CambioDireccionAlmacen;
    procedure SetReadOnly(Value: Boolean); override;

  public
    property PedidoCliente: IBizPedidoCliente read GetPedidoCliente  write SetPedidoCliente;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure RecuperarObra;
    procedure CambioDireccionObra;
    procedure RefrescarControles;
  end;

implementation

{$R *.dfm}

uses
  uEditorRegistryUtils, uCustomView; //, uBizInventario;

procedure TfrViewDireccionEntregaPedidoCli.actListaAlmacenesExecute(
  Sender: TObject);
begin
  actListaAlmacenes.Checked := True;
  RefrescarControles;
end;

procedure TfrViewDireccionEntregaPedidoCli.actListaObrasExecute(Sender: TObject);
begin
  actListaObras.Checked := True;
  RecuperarObra;
  CambioDireccionObra;
//  FController.AsignarIDAlmacen(FPedido, FPedido.ID_OBRA);
end;

procedure TfrViewDireccionEntregaPedidoCli.actOtroExecute(Sender: TObject);
begin
  actOtro.Checked := True;

  if Assigned(FPedido) then
  begin
    FController.VerDireccionEntrega(FPedido);
//    FController.AsignarIDAlmacen(FPedido, Null);
  end;
  RefrescarControles;
end;

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

procedure TfrViewDireccionEntregaPedidoCli.CambioDireccionAlmacen;
begin
  if Assigned(FPedido) and Assigned(FAlmacenes) then
  begin
    FPedido.Edit;
    FPedido.CALLE := FAlmacenes.CALLE;
    FPedido.POBLACION := FAlmacenes.POBLACION;
    FPedido.POBLACION := FAlmacenes.POBLACION;
    FPedido.PROVINCIA := FAlmacenes.PROVINCIA;
    FPedido.CODIGO_POSTAL := FAlmacenes.CODIGO_POSTAL;
    RefrescarControles;
  end;
end;

procedure TfrViewDireccionEntregaPedidoCli.CambioDireccionObra;
begin
{
  if Assigned(FPedido) and Assigned(FObra) then
  begin
    FPedido.Edit;
    FPedido.CALLE := FObra.CALLE;
    FPedido.POBLACION := FObra.POBLACION;
    FPedido.POBLACION := FObra.POBLACION;
    FPedido.PROVINCIA := FObra.PROVINCIA;
    FPedido.CODIGO_POSTAL := FObra.CODIGO_POSTAL;
    RefrescarControles;
  end;
}  
end;

procedure TfrViewDireccionEntregaPedidoCli.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 TfrViewDireccionEntregaPedidoCli.Create(AOwner: TComponent);
begin
  inherited;
  FController := TPedidosClienteController.Create;
  FAlmacenesController := TAlmacenesController.Create;
  FAlmacenes := FAlmacenesController.BuscarTodos;
  FAlmacenes.DataTable.Active := True;
  dsAlmacenes.DataTable := FAlmacenes.DataTable;

//  FObrasController := TObrasController.Create;
//  FObra := NIL;
end;

destructor TfrViewDireccionEntregaPedidoCli.Destroy;
begin
  cbListaAlmacenes.Properties.OnValidate := Nil;

  FAlmacenesController := Nil;
  FAlmacenes := Nil;

//  FObrasController := Nil;
//  FObra := NIL;

  FController := NIL;
  inherited;
end;

procedure TfrViewDireccionEntregaPedidoCli.edtEntregarAPropertiesButtonClick(
  Sender: TObject; AButtonIndex: Integer);
var
  AID_Subcontrata : Integer;
  APersonaContacto : String;
begin
  inherited;
  AID_Subcontrata := -1;
{
  if not FPedido.ID_OBRAIsNull then
  begin
    RecuperarObra;
    if FObrasController.LocalizarEjecucionActiva(FObra.Ejecuciones) then
    begin
      if not FObra.Ejecuciones.ID_SUBCONTRATAIsNull then
        AID_Subcontrata := FObra.Ejecuciones.ID_SUBCONTRATA;
    end;
  end;
}
  APersonaContacto := FPedido.PERSONA_CONTACTO;
{
  if ElegirPersonaContactoPedido(AID_Subcontrata, APersonaContacto) then
  begin
    FPedido.Edit;
    FPedido.PERSONA_CONTACTO := APersonaContacto;
  end;
}  
end;

function TfrViewDireccionEntregaPedidoCli.GetPedidoCliente: IBizPedidoCliente;
begin
  Result := FPedido;
end;

procedure TfrViewDireccionEntregaPedidoCli.RecuperarObra;
begin
{  if Assigned(FObra) and (FObra.ID = FPedido.ID_OBRA) then
    Exit; // No hace falta volver a recuperarla

  FObra := FObrasController.Buscar(FPedido.ID_OBRA);
  FObra.Open;
}  
end;

procedure TfrViewDireccionEntregaPedidoCli.RefrescarControles;
begin
  txtDireccion.Caption := '';
  if Assigned(FPedido) then
  begin
    if (actOtro.Checked) then
    begin
      cbListaAlmacenes.Enabled := False;
      cbListaAlmacenes.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;
      if (not FPedido.TELEFONOIsNull) and (FPedido.TELEFONO <> '') then
        txtDireccion.Caption := txtDireccion.Caption + #13#10 + 'Teléfono: ' + FPedido.TELEFONO;

      bModificar.Enabled := True;
    end
    else if (actListaAlmacenes.Checked) then
    begin
      cbListaAlmacenes.Enabled := True;
      cbListaAlmacenes.DroppedDown := True;
      txtDireccion.Enabled := False;
      bModificar.Enabled := False;
    end
    else begin
      cbListaAlmacenes.Enabled := False;
      cbListaAlmacenes.Text := '';
      bModificar.Enabled := False;
      txtDireccion.Enabled := False;
    end;
  end;
end;

procedure TfrViewDireccionEntregaPedidoCli.SetPedidoCliente(
  const Value: IBizPedidoCliente);
begin
  cbListaAlmacenes.Properties.OnValidate := NIL;
  dsPedido.DataTable := nil;

  FPedido := Value;

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

  actOtro.Checked := True;
  RefrescarControles;
end;

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

  if (csLoading in Self.ComponentState) then
    Exit;

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

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

end.
