ConstruccionesCNJ_FactuGES/Modulos/Facturas de cliente/Controller/uDetallesFacturaClienteController.pas
2007-06-21 15:50:59 +00:00

108 lines
3.0 KiB
ObjectPascal

unit uDetallesFacturaClienteController;
interface
uses
uControllerDetallesBase, uBizDetallesFacturaCliente, uIDataModuleFacturasCliente;
type
IDetallesFacturaClienteController = interface(IControllerDetallesBase)
['{D3942A48-C55B-4A98-AC5B-B5E652ED393E}']
procedure AsignarID(ADetalles: IBizDetallesFacturaCliente; IDCabecera: Integer; AEsNuevo:Boolean);
end;
TDetallesFacturaClienteController = class(TControllerDetallesBase, IDetallesFacturaClienteController)
private
FDataModule : IDataModuleFacturasCliente;
public
procedure AsignarID(ADetalles: IBizDetallesFacturaCliente; IDCabecera: Integer; AEsNuevo:Boolean);
constructor Create; override;
destructor Destroy; override;
end;
implementation
{ TDetallesFacturaClienteController }
uses
uDataModuleFacturasCliente;
procedure TDetallesFacturaClienteController.AsignarID(ADetalles: IBizDetallesFacturaCliente; IDCabecera: Integer; AEsNuevo:Boolean);
begin
with ADetalles do
begin
DataTable.DisableControls;
try
if not DataTable.Active then
DataTable.Active := True;
{ ¡¡¡¡ 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ón de la relacion:
Master.ID = Detail.ID_PRESUPUESTO.
Por esa razón no sirve hacer un recorrido
desde el principio hasta el final porque
las detalles van desapareciendo según asignamos
el valor al campo ID y nos mueve aleatoriamente
la posició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_FACTURA := IDCabecera;
Post
end
end
else
begin
DataTable.First;
while not DataTable.EOF do
begin
if not AEsNuevo then
begin
Edit;
ID := FDataModule.GetNextID(DataTable.LogicalName);
ID_FACTURA := IDCabecera;
Post
end;
DataTable.Next
end;
end;
finally
DataTable.EnableControls;
end;
end;
end;
constructor TDetallesFacturaClienteController.Create;
begin
inherited;
FDataModule := TDataModuleFacturasCliente.Create(Nil);
end;
destructor TDetallesFacturaClienteController.Destroy;
begin
FDataModule := Nil;
inherited;
end;
end.