unit uViewDatosYSeleccionClienteAlbaran;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewDatosYSeleccionClienteBase, ImgList, PngImageList, ActnList, DB,
  uDAInterfaces, uDADataTable, dxLayoutControl, StdCtrls, Buttons, cxControls,
  cxTextEdit, cxContainer, cxEdit, cxDBEdit, ExtCtrls, cxMemo,
  uBizAlbaranesCliente;

type
  IViewDatosYSeleccionClienteAlbaran = interface(IViewDatosYSeleccionClienteBase)
    ['{41EA09A7-F21A-4D89-AC60-559CB6B430C9}']
    function GetAlbaranCliente: IBizAlbaranCliente;
    procedure SetAlbaranCliente(const Value: IBizAlbaranCliente);
    property AlbaranCliente: IBizAlbaranCliente read GetAlbaranCliente write SetAlbaranCliente;
  end;


  TfrViewDatosYSeleccionClienteAlbaran = class(TfrViewDatosYSeleccionClienteBase, IViewDatosYSeleccionClienteAlbaran)
    dxLayoutControl1Item1: TdxLayoutItem;
    edtlNombre: TcxDBTextEdit;
    dxLayoutControl1Item3: TdxLayoutItem;
    bElegirDireccion: TButton;
    dxLayoutControl1Item4: TdxLayoutItem;
    edtPersonaContacto: TcxDBTextEdit;
    dxLayoutControl1Item5: TdxLayoutItem;
    bElegirPersonaContacto: TButton;
    dxLayoutControl1Group2: TdxLayoutGroup;
    dxLayoutControl1Item6: TdxLayoutItem;
    memDireccion: TcxMemo;
    dxLayoutControl1Group4: TdxLayoutGroup;
    dsAlbaran: TDADataSource;
  protected
    FAlbaran : IBizAlbaranCliente;
    function GetAlbaranCliente: IBizAlbaranCliente;
    procedure SetAlbaranCliente(const Value: IBizAlbaranCliente);

    procedure EscribirTextoDireccion;
    procedure RefrescarDireccion;
  public
    procedure ElegirCliente; override;
    procedure ElegirDireccionCliente; override;
    procedure ElegirPersonaContacto; override;
    procedure AnadirNuevoCliente; override;
    property AlbaranCliente: IBizAlbaranCliente read GetAlbaranCliente write SetAlbaranCliente;
  end;

implementation

{$R *.dfm}

{ TfrViewDatosYSeleccionClienteAlbaran }

procedure TfrViewDatosYSeleccionClienteAlbaran.AnadirNuevoCliente;
begin
  if Assigned(FAlbaran) and Assigned(FCliente) and
    Assigned (FAlbaran.Detalles) and (FAlbaran.Detalles.RecordCount > 0) then
  begin
    if (Application.MessageBox('Los descuentos de los artículos del albarán serán actualizados con los del nuevo cliente seleccionado, ¿Desea continuar?', 'Atención', MB_YESNO) = IDNO) then
      Exit;
  end;

  inherited;
end;

procedure TfrViewDatosYSeleccionClienteAlbaran.ElegirCliente;
begin
  if Assigned(FAlbaran) and Assigned(FCliente) and
    Assigned (FAlbaran.Detalles) and (FAlbaran.Detalles.RecordCount > 0) then
  begin
    if (Application.MessageBox('Los descuentos de los artículos del albarán serán actualizados con los del nuevo cliente seleccionado, ¿Desea continuar?', 'Atención', MB_YESNO) = IDNO) then
      Exit;
  end;

  inherited;
end;

procedure TfrViewDatosYSeleccionClienteAlbaran.ElegirDireccionCliente;
begin
  inherited;

  if Assigned(FDireccion) then
  begin
    FAlbaran.Edit;

    if FDireccion.IDIsNull then
    begin
      FAlbaran.ClearField('ID_DIRECCION');
      FAlbaran.ClearField('IMPORTE_PORTE');
      FAlbaran.ClearField('CALLE');
      FAlbaran.ClearField('POBLACION');
      FAlbaran.ClearField('PROVINCIA');
      FAlbaran.ClearField('CODIGO_POSTAL');
      FAlbaran.ClearField('TELEFONO');
    end
    else begin
      FAlbaran.ID_DIRECCION := FDireccion.ID;
      FAlbaran.CALLE := FDireccion.CALLE;
      FAlbaran.POBLACION := FDireccion.POBLACION;
      FAlbaran.PROVINCIA := FDireccion.PROVINCIA;
      FAlbaran.CODIGO_POSTAL := FDireccion.CODIGO_POSTAL;
      FAlbaran.TELEFONO := FDireccion.TELEFONO;
      FAlbaran.IMPORTE_PORTE := FDireccion.PORTE;
      FAlbaran.PERSONA_CONTACTO := FDireccion.PERSONA_CONTACTO;
    end;
    EscribirTextoDireccion;
  end;

end;

procedure TfrViewDatosYSeleccionClienteAlbaran.ElegirPersonaContacto;
begin
  inherited;
  if Assigned(FPersonaContacto) then
  begin
    FAlbaran.Edit;
    FAlbaran.PERSONA_CONTACTO := FPersonaContacto.NOMBRE;
  end;
end;

procedure TfrViewDatosYSeleccionClienteAlbaran.EscribirTextoDireccion;
var
  ACadena : String;
begin
  ACadena := '';

  if Assigned(FDireccion) then
    ACadena := Format('%s %s %s %s',
      [FDireccion.CALLE, FDireccion.POBLACION,
      FDireccion.CODIGO_POSTAL, FDireccion.PROVINCIA]);

  memDireccion.Lines.Clear;
  memDireccion.Lines.Text := ACadena;
end;


function TfrViewDatosYSeleccionClienteAlbaran.GetAlbaranCliente: IBizAlbaranCliente;
begin
  Result := FAlbaran;
end;


procedure TfrViewDatosYSeleccionClienteAlbaran.RefrescarDireccion;
begin
  FDireccion := FDireccionesController.Nuevo;

  if (not FAlbaran.ID_DIRECCIONIsNull) and
    (FDireccionesController.Localizar(FCliente.Direcciones, FAlbaran.ID_DIRECCION)) then
      FDireccionesController.CopiarDireccion(FCliente.Direcciones, FDireccion)
  else
    FDireccionesController.CopiarDireccionFiscal(FCliente, FDireccion);

  EscribirTextoDireccion;
end;

procedure TfrViewDatosYSeleccionClienteAlbaran.SetAlbaranCliente(
  const Value: IBizAlbaranCliente);
begin
  FAlbaran := Value;
  if Assigned(FAlbaran) then
  begin
    dsAlbaran.DataTable := FAlbaran.DataTable;

    FCliente := FAlbaran.Cliente;
    dsCliente.DataTable := FCliente.DataTable;

    if not FCliente.DataTable.Active then
      FCliente.DataTable.Active := True;

    RefrescarDireccion;
  end
  else begin
    dsAlbaran.DataTable := NIL;
    FCliente := NIL;
    FDireccion := NIL;
  end;
end;

end.
