This repository has been archived on 2024-11-28. You can view files and clone it, but cannot push or open issues or pull requests.
LuisLeon_FactuGES/Source/Modulos/Contactos/Controller/uDireccionesContactoController.pas

195 lines
5.5 KiB
ObjectPascal
Raw Normal View History

unit uDireccionesContactoController;
interface
uses
Windows, Forms, Classes, Controls, Contnrs, SysUtils, uDADataTable,
uBizContactos, uBizDireccionesContacto, uIDataModuleContactos;
type
IDireccionesContactoController = interface
['{9B6CB172-F32C-414F-A0E2-99920CAF88FB}']
procedure AsignarID(ADetalles: IBizDireccionesContacto; IDCabecera: Integer; AEsNuevo:Boolean);
procedure CopiarDireccionFiscal(AContacto: IBizContacto; ADireccion: IBizDireccionesContacto; AAnadir : Boolean = True);
procedure Ver(ADireccion : IBizDireccionesContacto);
function Localizar(ADirecciones: IBizDireccionesContacto; const ID : Integer): Boolean;
end;
TDireccionesContactoController = class(TInterfacedObject, IDireccionesContactoController)
private
FDataModule : IDataModuleContactos;
public
procedure CopiarDireccionFiscal(AContacto: IBizContacto; ADireccion: IBizDireccionesContacto; AAnadir : Boolean = True);
procedure Ver(ADireccion : IBizDireccionesContacto);
procedure AsignarID(ADetalles: IBizDireccionesContacto; IDCabecera: Integer; AEsNuevo:Boolean);
function Localizar(ADirecciones: IBizDireccionesContacto; const ID : Integer): Boolean;
constructor Create; virtual;
destructor Destroy; override;
end;
implementation
{ TDireccionesContactoController }
uses
uDataModuleContactos, schContactosClient_Intf, uIEditorDireccionContacto,
uEditorRegistryUtils, cxControls;
procedure TDireccionesContactoController.AsignarID(
ADetalles: IBizDireccionesContacto; IDCabecera: Integer;
AEsNuevo: Boolean);
begin
with ADetalles do
begin
DataTable.DisableControls;
try
if not DataTable.Active then
DataTable.Active := True;
// AuxPosicion := POSICION;
{ <EFBFBD><EFBFBD><EFBFBD><EFBFBD> OJO !!!!
Para asignar el ID en los detalles hay
que tener en cuenta una cosa:
Si se cambia el ID, ese detalle ya no
pertenece a esa cabecera porque ya no se
cumple la condici<EFBFBD>n de la relacion:
Master.ID = Detail.ID_PRESUPUESTO.
Por esa raz<EFBFBD>n no sirve hacer un recorrido
desde el principio hasta el final porque
las detalles van desapareciendo seg<EFBFBD>n asignamos
el valor al campo ID y nos mueve aleatoriamente
la posici<EFBFBD>n del registro actual.
Es mejor hacer un bucle sencillo hasta que
"se gasten" todos los detalles. Cuando el
RecordCount llegue a 0 quiere decir que hemos
tratado todos los detalles.
El bucle cambia en el caso de ser llamada esta funcion desde modificar
un presupuesto ya que en ese caso si que hay que hacer un recorrido
total de las tuplas de detalle.
}
if AEsNuevo then
begin
while RecordCount > 0 do
begin
DataTable.First;
Edit;
ID := FDataModule.GetNextID(DataTable.LogicalName);
ID_CONTACTO := IDCabecera;
Post
end
end
else
begin
DataTable.First;
while not DataTable.EOF do
begin
if AEsNuevo then
begin
Edit;
ID := FDataModule.GetNextID(DataTable.LogicalName);
ID_CONTACTO := IDCabecera;
Post
end;
DataTable.Next
end;
end;
finally
DataTable.EnableControls;
end;
end;
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<63>n no asignada (CopiarDireccionFiscal)');
if AAnadir then
ADireccion.DataTable.Insert
else
ADireccion.DataTable.Edit;
try
with ADireccion do
begin
NOMBRE := 'Direcci<63>n de entrega';
CALLE := AContacto.CALLE;
POBLACION := AContacto.POBLACION;
PROVINCIA := AContacto.PROVINCIA;
CODIGO_POSTAL := AContacto.CODIGO_POSTAL;
TELEFONO := AContacto.TELEFONO_1;
EMAIL := AContacto.EMAIL_1;
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;
procedure TDireccionesContactoController.Ver(
ADireccion: IBizDireccionesContacto);
var
AEditor : IEditorEditorDireccion;
begin
AEditor := NIL;
ShowHourglassCursor;
try
CreateEditor('EditorDireccion', IEditorEditorDireccion, AEditor);
with AEditor do
begin
Direccion := ADireccion;
Controller := Self;
end;
finally
HideHourglassCursor;
end;
if Assigned(AEditor) then
try
AEditor.ShowModal;
AEditor.Release;
finally
AEditor := NIL;
end;
end;
end.