unit uDetallesPedidoClienteController; interface uses uDADataTable, uControllerDetallesArticulos, uBizDetallesPedidoCliente, uIDataModulePedidosCliente, uBizArticulos, uBizContactos; type IDetallesPedidoClienteController = interface(IControllerDetallesArticulos) ['{8D1D3559-E695-4962-9999-404B26B50D6C}'] procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload; end; TDetallesPedidoClienteController = class(TControllerDetallesArticulos, IDetallesPedidoClienteController) private FDataModule : IDataModulePedidosCliente; 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); reintroduce; overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload; constructor Create; override; destructor Destroy; override; end; implementation uses Dialogs, Variants, uControllerDetallesBase, uControllerDetallesDTO, uDataModulePedidosCliente, uArticulosPedidoClienteController; { TDetallesPedidoClienteController } procedure TDetallesPedidoClienteController.ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); var AArticulos : IBizArticulo; begin if Assigned(ADetalles) then begin try AArticulos := (FArticulosController.BuscarTodos(ACliente) as IBizArticulo); ActualizarDetalles(ADetalles, AArticulos); ShowMessage('Se han actualizado los descuentos para el cliente seleccionado'); finally AArticulos := Nil; end; end; end; procedure TDetallesPedidoClienteController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); var AArticulos: IBizArticulo; begin if Assigned(ADetalles) then begin try AArticulos := (FArticulosController.BuscarTodos(ACliente) as IBizArticulo); AArticulos := (FArticulosController as IArticulosPedidoClienteController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a este pedido de cliente', True); Add(ADetalles, AArticulos); finally AArticulos := Nil; end; end; end; procedure TDetallesPedidoClienteController.AsignarController; begin FArticulosController := TArticulosPedidoClienteController.Create; end; procedure TDetallesPedidoClienteController.AsignarDatos(ADetalles: IDAStronglyTypedDataTable; IDCabecera: Integer); begin inherited; with (ADetalles as IBizDetallesPedidoCliente) do begin Edit; ID := FDataModule.GetNextID(DataTable.LogicalName); ID_PEDIDO := IDCabecera; Post end; end; constructor TDetallesPedidoClienteController.Create; begin inherited; FDataModule := TDataModulePedidosCliente.Create(Nil); end; destructor TDetallesPedidoClienteController.Destroy; begin FDataModule := Nil; inherited; end; procedure TDetallesPedidoClienteController.RellenarDescuentos(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); begin if Assigned(AArticulos) then RellenarDescuento(ADetalles, AArticulos.DESCUENTO) else RellenarDescuento(ADetalles, 0) end; procedure TDetallesPedidoClienteController.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.