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, cxLabel, cxDBLabel;

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;
    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: TcxDBButtonEdit;
    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 : IBizPedidoProveedor;
    FController : IPedidosProveedorController;
    function GetPedidoProveedor: IBizPedidoProveedor;
    procedure SetPedidoProveedor(const Value: IBizPedidoProveedor);
    procedure CambioDireccionAlmacen;
    procedure RefrescarControles;
    procedure SetReadOnly(Value: Boolean); override;

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

implementation

{$R *.dfm}

uses
  uEditorRegistryUtils, uCustomView, uEditorElegirPersonaContactoPedido, uBizInventario;

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

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

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

  if Assigned(FPedido) then
  begin
    FController.VerDireccionEntrega(FPedido);
    FController.AsignarIDAlmacen(FPedido, Null);
  end;
  RefrescarControles;
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.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 TfrViewDireccionEntregaPedidoProv.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 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;
  FObra := NIL;
end;

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

  FAlmacenesController := Nil;
  FAlmacenes := Nil;

  FObrasController := Nil;
  FObra := NIL;

  FController := NIL;
  inherited;
end;

procedure TfrViewDireccionEntregaPedidoProv.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 TfrViewDireccionEntregaPedidoProv.GetPedidoProveedor: IBizPedidoProveedor;
begin
  Result := FPedido;
end;

procedure TfrViewDireccionEntregaPedidoProv.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 TfrViewDireccionEntregaPedidoProv.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 TfrViewDireccionEntregaPedidoProv.SetPedidoProveedor(
  const Value: IBizPedidoProveedor);
begin
  cbListaAlmacenes.Properties.OnValidate := NIL;
  dsPedido.DataTable := nil;

  FPedido := Value;

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

  if (FPedido.EsNuevo) then
     CambioDireccionAlmacen
  else begin
    if (FPedido.ID_ALMACEN > 0) then
       if FPedido.TIPO_ALMACEN = CTE_INV_ALMACEN then
          actListaAlmacenes.Checked := True
       else begin
          actListaObras.Checked := True
       end
    else
      actOtro.Checked := True;
  end;
  RefrescarControles;
end;

procedure TfrViewDireccionEntregaPedidoProv.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 TfrViewDireccionEntregaPedidoProv.txtDireccionDblClick(
  Sender: TObject);
begin
  inherited;
  actOtro.Execute;
end;

end.
