2011-11-14 17:40:41 +00:00
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; const ANuevaFila : Boolean = True ) ; overload ;
procedure ActualizarDetalles( ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor) ; overload ;
function ArticulosPendientes( const ID : Integer ) : IBizDetallesPedidoProveedorPend;
procedure DesglosarPorteDetalles( ImportePorte: Currency ; ADetalles: IDAStronglyTypedDataTable) ;
function DarTotalPorteTotal( ADetalles: IDAStronglyTypedDataTable) : Double ;
end ;
TDetallesPedidoProveedorController = class( TControllerDetallesArticulos, IDetallesPedidoProveedorController)
private
FDataModule : IDataModulePedidosProveedor;
protected
procedure RellenarOtros( ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo) ; override ;
procedure RellenarImportes( ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo) ; override ;
procedure AsignarController; override ;
//Si sobreescribimos este m<> todo podremos tener en cuenta otras columnas para el calculo del importe total de un concepto
function CalcularImporteTotalConcepto( DataTable: TDADataTable) : Double ; override ;
procedure ValidarCampos( DataTable: TDADataTable) ; override ;
procedure DesglosarPorteDetalles( ImportePorte: Currency ; ADetalles: IDAStronglyTypedDataTable) ;
function DarTotalPorteTotal( ADetalles: IDAStronglyTypedDataTable) : Double ;
public
procedure AnadirArticulos( ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor; const ANuevaFila : Boolean = True ) ; 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, uDataModulePedidosProveedor,
uCalculosUtils, 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; const ANuevaFila : Boolean ) ;
var
AArticulos: IBizArticulo;
begin
if Assigned( ADetalles) then
begin
try
2021-02-07 17:20:37 +00:00
AArticulos : = ( FArticulosController. BuscarTodosPorProveedor as IBizArticulo) ;
2011-11-14 17:40:41 +00:00
//Si nueva fila es false, quiere decir que se sustituye un determinado art<72> culo, por ello la lista a seleccionar no debe ser multiselect
if ANuevaFila then
begin
AArticulos : = ( FArticulosController as IArticulosPedidoProveedorController) . ElegirArticulos( AArticulos, 'Elija los art<72> culos que desea a<> adir a este pedido a proveedor' , True , AProveedor) ;
Add( ADetalles, AArticulos)
end
else
begin
AArticulos : = ( FArticulosController as IArticulosPedidoProveedorController) . ElegirArticulos( AArticulos, 'Elija el art<72> culo que desea a<> adir a este pedido a proveedor' , False , AProveedor) ;
RellenarDetalle( ADetalles, AArticulos) ;
end ;
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 ;
function TDetallesPedidoProveedorController. CalcularImporteTotalConcepto( DataTable: TDADataTable) : Double ;
begin
2022-06-23 15:49:41 +00:00
//Calcular con 4 decimales
Result : = CalcularLineaConcepto( DataTable, 4 ) ;
2011-11-14 17:40:41 +00:00
end ;
constructor TDetallesPedidoProveedorController. Create;
begin
inherited ;
FDataModule : = TDataModulePedidosProveedor. Create( Nil ) ;
end ;
function TDetallesPedidoProveedorController. DarTotalPorteTotal( ADetalles: IDAStronglyTypedDataTable) : Double ;
begin
Result : = DarTotalPorte( ADetalles) ;
end ;
procedure TDetallesPedidoProveedorController. DesglosarPorteDetalles( ImportePorte: Currency ; ADetalles: IDAStronglyTypedDataTable) ;
begin
DesglosarPorte( ImportePorte, ADetalles) ;
ActualizarTotales( ADetalles) ;
end ;
destructor TDetallesPedidoProveedorController. Destroy;
begin
FDataModule : = Nil ;
inherited ;
end ;
procedure TDetallesPedidoProveedorController. RellenarOtros( ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo) ;
begin
if Assigned( AArticulos) then
2022-03-12 10:40:36 +00:00
begin
ADetalles. DataTable. FieldByName( CAMPO_DESCUENTO) . AsFloat : = AArticulos. DESCUENTO;
ADetalles. DataTable. FieldByName( fld_ArticulosUNIDAD_MEDIDA) . AsString : = AArticulos. UNIDAD_MEDIDA;
end
2011-11-14 17:40:41 +00:00
else
2022-03-12 10:40:36 +00:00
begin
2011-11-14 17:40:41 +00:00
ADetalles. DataTable. FieldByName( CAMPO_DESCUENTO) . AsFloat : = 0 ;
2022-03-12 10:40:36 +00:00
ADetalles. DataTable. FieldByName( fld_ArticulosUNIDAD_MEDIDA) . AsVariant : = Null;
end ;
2011-11-14 17:40:41 +00:00
end ;
procedure TDetallesPedidoProveedorController. ValidarCampos( DataTable: TDADataTable) ;
begin
inherited ;
ValidarCamposLineaConcepto( DataTable) ;
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 .