unit uDetallesPedidoProveedorController; interface uses uDADataTable, uControllerDetallesArticulos, uBizDetallesPedidoProveedor, uIDataModulePedidosProveedor, uBizArticulos, uBizContactos; type IDetallesPedidoProveedorController = interface(IControllerDetallesArticulos) ['{942428EC-BCB8-4C56-BFA6-EB9F05D5E0DB}'] procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload; function ArticulosPendientes(const ID : Integer): IBizDetallesPedidoProveedorPend; end; TDetallesPedidoProveedorController = class(TControllerDetallesArticulos, IDetallesPedidoProveedorController) private FDataModule : IDataModulePedidosProveedor; protected procedure AsignarDatos(ADetalles: IDAStronglyTypedDataTable; IDCabecera: Integer); override; procedure RellenarDescuentos(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); override; procedure RellenarImportes(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); override; procedure AsignarController; override; public procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload; function ArticulosPendientes(const ID : Integer): IBizDetallesPedidoProveedorPend; constructor Create; override; destructor Destroy; override; end; implementation uses Variants, uControllerDetallesBase, uControllerDetallesDTO, uDataModulePedidosProveedor, schArticulosClient_Intf, uArticulosPedidoProveedorController; { TDetallesPedidoProveedorController } procedure TDetallesPedidoProveedorController.ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); var AArticulos : IBizArticulo; begin if Assigned(ADetalles) then begin try AArticulos := (FArticulosController.BuscarTodos(AProveedor) as IBizArticulo); ActualizarDetalles(ADetalles, AArticulos); EliminarArticulosProveedor(ADetalles); finally AArticulos := Nil; end; end; end; procedure TDetallesPedidoProveedorController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); var AArticulos: IBizArticulo; begin if Assigned(ADetalles) then begin try AArticulos := (FArticulosController.BuscarTodos(AProveedor) as IBizArticulo); AArticulos := (FArticulosController as IArticulosPedidoProveedorController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a este pedido a proveedor', True); Add(ADetalles, AArticulos); finally AArticulos := Nil; end; end; end; function TDetallesPedidoProveedorController.ArticulosPendientes(const ID: Integer): IBizDetallesPedidoProveedorPend; begin Result := FDataModule.GetArticulosPendientes(ID); end; procedure TDetallesPedidoProveedorController.AsignarController; begin FArticulosController := TArticulosPedidoProveedorController.Create; end; procedure TDetallesPedidoProveedorController.AsignarDatos(ADetalles: IDAStronglyTypedDataTable; IDCabecera: Integer); begin inherited; with (ADetalles as IBizDetallesPedidoProveedor) do begin Edit; ID := FDataModule.GetNextID(DataTable.LogicalName); ID_PEDIDO := IDCabecera; Post end; end; constructor TDetallesPedidoProveedorController.Create; begin inherited; FDataModule := TDataModulePedidosProveedor.Create(Nil); end; destructor TDetallesPedidoProveedorController.Destroy; begin FDataModule := Nil; inherited; end; procedure TDetallesPedidoProveedorController.RellenarDescuentos(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); begin if Assigned(AArticulos) then RellenarDescuento(ADetalles, AArticulos.DESCUENTO) else RellenarDescuento(ADetalles, 0) end; procedure TDetallesPedidoProveedorController.RellenarImportes(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); begin if Assigned(AArticulos) then begin ADetalles.DataTable.FieldByName(CAMPO_IMPORTE_UNIDAD).AsVariant := AArticulos.PRECIO_COSTE; ADetalles.DataTable.FieldByName(CAMPO_IMPORTE_PORTE).AsVariant := AArticulos.PRECIO_PORTE; end else begin ADetalles.DataTable.FieldByName(CAMPO_IMPORTE_UNIDAD).AsVariant := Null; ADetalles.DataTable.FieldByName(CAMPO_IMPORTE_PORTE).AsVariant := Null; end; end; end.