unit uDireccionesContactoController;

interface

uses
  Windows, Forms, Classes, Controls, Contnrs, SysUtils, uDADataTable,
  uBizContactos, uBizDireccionesContacto, uIDataModuleContactos,
  uControllerBase;

type
  IDireccionesContactoController = interface(IControllerBase)
  ['{9B6CB172-F32C-414F-A0E2-99920CAF88FB}']
    procedure CopiarDireccionFiscal(AContacto: IBizContacto; ADireccion: IBizDireccionesContacto; AAnadir : Boolean = True);
    procedure CopiarDireccion(ADireccionOrigen: IBizDireccionesContacto; ADireccionDestino: IBizDireccionesContacto; AAnadir : Boolean = True);
    procedure Ver(ADireccion : IBizDireccionesContacto);
    function Localizar(ADirecciones: IBizDireccionesContacto; const ID : Integer): Boolean;
    function Nuevo : IBizDireccionesContacto;
  end;

  TDireccionesContactoController = class(TControllerBase, IDireccionesContactoController)
  private
    FDataModule : IDataModuleContactos;
  public
    procedure CopiarDireccionFiscal(AContacto: IBizContacto; ADireccion: IBizDireccionesContacto; AAnadir : Boolean = True);
    procedure CopiarDireccion(ADireccionOrigen: IBizDireccionesContacto; ADireccionDestino: IBizDireccionesContacto; AAnadir : Boolean = True);
    procedure Ver(ADireccion : IBizDireccionesContacto);
    function Localizar(ADirecciones: IBizDireccionesContacto; const ID : Integer): Boolean;
    function Nuevo : IBizDireccionesContacto;
    constructor Create; override;
    destructor Destroy; override;
  end;

implementation

{ TDireccionesContactoController }

uses
  uDataModuleContactos, schContactosClient_Intf, uIEditorDireccionContacto,
  uEditorRegistryUtils, cxControls, uDataTableUtils;


procedure TDireccionesContactoController.CopiarDireccion(ADireccionOrigen,
  ADireccionDestino: IBizDireccionesContacto; AAnadir: Boolean);
begin
  if not Assigned(ADireccionOrigen) then
    raise Exception.Create ('Dirección de origen no asignada (CopiarDireccion)');

  if not Assigned(ADireccionDestino) then
    raise Exception.Create ('Dirección de destino no asignada (CopiarDireccion)');

  ADireccionOrigen.Active := True;
  ADireccionDestino.Active := True;

  DuplicarRegistro(ADireccionOrigen.DataTable, ADireccionDestino.DataTable, True, True, AAnadir);
end;

procedure TDireccionesContactoController.CopiarDireccionFiscal(
  AContacto: IBizContacto; ADireccion: IBizDireccionesContacto;
  AAnadir: Boolean);
begin
  if not Assigned(AContacto) then
    raise Exception.Create ('Contacto no asignado (CopiarDireccionFiscal)');

  if not Assigned(ADireccion) then
    raise Exception.Create ('Dirección no asignada (CopiarDireccionFiscal)');

  AContacto.Active := True;
  ADireccion.Active := True;

  if AAnadir then
    ADireccion.DataTable.Insert
  else
    ADireccion.DataTable.Edit;
  try
    with ADireccion do
    begin
      NOMBRE := AContacto.NOMBRE;
      CALLE := AContacto.CALLE;
      POBLACION := AContacto.POBLACION;
      PROVINCIA := AContacto.PROVINCIA;
      CODIGO_POSTAL := AContacto.CODIGO_POSTAL;
      TELEFONO := AContacto.TELEFONO_1;
      FAX := AContacto.FAX;
      MOVIL := AContacto.MOVIL_1;
      EMAIL := AContacto.EMAIL_1;
      PERSONA_CONTACTO := AContacto.PERSONA_CONTACTO;
    end;
  finally
    ADireccion.DataTable.Post;
  end;
end;

constructor TDireccionesContactoController.Create;
begin
  inherited;
  FDataModule := TDataModuleContactos.Create(Nil);
end;

destructor TDireccionesContactoController.Destroy;
begin
  FDataModule := Nil;
  inherited;
end;

function TDireccionesContactoController.Localizar(
  ADirecciones: IBizDireccionesContacto; const ID: Integer): Boolean;
begin
  Result := True;
  ShowHourglassCursor;
  try
    with ADirecciones.DataTable do
    begin
      DisableControls;
      First;
      if not Locate(fld_DireccionesContactoID, ID, []) then
         Result := False;
      EnableControls;
    end;
  finally
    HideHourglassCursor;
  end;
end;

function TDireccionesContactoController.Nuevo: IBizDireccionesContacto;
var
  ADireccion : IBizDireccionesContacto;
begin
  ADireccion := FDataModule.NewDireccion;
  ADireccion.DataTable.Active := True;
  ADireccion.Insert;
  Result := ADireccion;
end;

procedure TDireccionesContactoController.Ver(
  ADireccion: IBizDireccionesContacto);
var
  AEditor : IEditorEditorDireccion;
begin
  AEditor := NIL;	

  CreateEditor('EditorDireccion', IEditorEditorDireccion, AEditor);
  if Assigned(AEditor) then
    try
      AEditor.Direccion := ADireccion;
      AEditor.Controller := Self;
      AEditor.ShowModal;
    finally
      AEditor.Release;
      AEditor := NIL;
    end;
end;

end.
