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/Facturas de cliente/Controller/uDetallesFacturaClienteController.pas

198 lines
6.4 KiB
ObjectPascal
Raw Blame History

unit uDetallesFacturaClienteController;
interface
uses
uDADataTable, uControllerDetallesArticulos, uBizDetallesFacturaCliente, uIDataModuleFacturasCliente,
uBizContactos, uBizArticulos;
type
IDetallesFacturaClienteController = interface(IControllerDetallesArticulos)
['{D3942A48-C55B-4A98-AC5B-B5E652ED393E}']
procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload;
procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente);
procedure AnadirDetalleFacturaAsociadaAbono(ADetalles: IBizDetallesFacturaCliente; AReferencia: String; AFecha: String);
end;
TDetallesFacturaClienteController = class(TControllerDetallesArticulos, IDetallesFacturaClienteController)
private
FDataModule : IDataModuleFacturasCliente;
protected
procedure AsignarDatos(ADetalles: IDAStronglyTypedDataTable; IDCabecera: Integer); override;
procedure RellenarDescuentos(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); overload; override;
procedure RellenarImportes(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); override;
procedure AsignarController; override;
public
procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload;
procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload;
//ABONOS
procedure AnadirDetalleFacturaAsociadaAbono(ADetalles: IBizDetallesFacturaCliente; AReferencia: String; AFecha: String);
constructor Create; override;
destructor Destroy; override;
end;
implementation
{ TDetallesFacturaClienteController }
uses Variants, uControllerDetallesDTO, uDataModuleFacturasCliente, uArticulosFacturaClienteController,
uControllerDetallesBase, Dialogs, uDialogUtils, SysUtils;
procedure TDetallesFacturaClienteController.ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente);
var
AArticulos : IBizArticulo;
begin
if Assigned(ADetalles) then
begin
try
AArticulos := (FArticulosController.BuscarTodos(ACliente) as IBizArticulo);
ActualizarDetalles(ADetalles, AArticulos);
ShowInfoMessage('Se han actualizado los descuentos para el cliente seleccionado');
finally
AArticulos := Nil;
end;
end;
end;
procedure TDetallesFacturaClienteController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente);
var
AArticulos: IBizArticulo;
begin
if Assigned(ADetalles) then
begin
AArticulos := (FArticulosController.BuscarTodos(ACliente) as IBizArticulo);
try
AArticulos := (FArticulosController as IArticulosFacturaClienteController).ElegirArticulos(AArticulos, 'Elija los art<72>culos que desea a<>adir a esta factura de cliente', True);
Add(ADetalles, AArticulos);
finally
AArticulos := Nil;
end;
end;
end;
procedure TDetallesFacturaClienteController.AnadirDetalleFacturaAsociadaAbono(ADetalles: IBizDetallesFacturaCliente; AReferencia: String; AFecha: String);
begin
AnadirConceptoInicial(ADetalles, 'ABONO DE FACTURA ' + AReferencia + ' con fecha ' + AFecha);
end;
procedure TDetallesFacturaClienteController.AsignarController;
begin
FArticulosController := TArticulosFacturaClienteController.Create;
end;
procedure TDetallesFacturaClienteController.AsignarDatos(ADetalles: IDAStronglyTypedDataTable; IDCabecera: Integer);
begin
inherited;
with (ADetalles as IBizDetallesFacturaCliente) do
begin
Edit;
ID := FDataModule.GetNextID(DataTable.LogicalName);
ID_FACTURA := IDCabecera;
Post
end;
end;
{procedure TDetallesFacturaClienteController.AsignarID(
ADetalles: IBizDetallesFacturaCliente; IDCabecera: Integer;
EsNuevo: Boolean);
begin
with ADetalles do
begin
DataTable.DisableControls;
try
if not DataTable.Active then
DataTable.Active := True;
// AuxPosicion := POSICION;
{ <20><><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<63>n de la relacion:
Master.ID = Detail.ID_PRESUPUESTO.
Por esa raz<61>n no sirve hacer un recorrido
desde el principio hasta el final porque
las detalles van desapareciendo seg<65>n asignamos
el valor al campo ID y nos mueve aleatoriamente
la posici<63>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 EsNuevo 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 ID < 0 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;
procedure TDetallesFacturaClienteController.RellenarDescuentos(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo);
begin
if Assigned(AArticulos) then
RellenarDescuento(ADetalles, AArticulos.DESCUENTO)
else
RellenarDescuento(ADetalles, 0)
end;
procedure TDetallesFacturaClienteController.RellenarImportes(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo);
begin
if Assigned(AArticulos) then
ADetalles.DataTable.FieldByName(CAMPO_IMPORTE_UNIDAD).AsVariant := AArticulos.PRECIO_COSTE
else
ADetalles.DataTable.FieldByName(CAMPO_IMPORTE_UNIDAD).AsVariant := Null;
end;
end.