2011-11-14 17:40:41 +00:00
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; const ANuevaFila : Boolean = True ; const ACantidad: Integer = 1 ) ; overload ;
procedure ActualizarDetalles( ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente) ;
procedure AnadirDetalleFacturaAsociadaAbono( ADetalles: IBizDetallesFacturaCliente; AReferencia: String ; AFecha: String ) ;
procedure DesglosarPorteDetalles( ImportePorte: Currency ; ADetalles: IDAStronglyTypedDataTable) ;
function DarTotalPorteTotal( ADetalles: IDAStronglyTypedDataTable) : Double ;
2022-03-15 16:08:43 +00:00
procedure SetPrecioPunto ( const AValue: Currency ) ;
function GetPrecioPunto: Currency ;
property PrecioPunto : Currency read GetPrecioPunto write SetPrecioPunto;
2011-11-14 17:40:41 +00:00
end ;
TDetallesFacturaClienteController = class( TControllerDetallesArticulos, IDetallesFacturaClienteController)
private
FDataModule : IDataModuleFacturasCliente;
2022-03-15 16:08:43 +00:00
FPrecioPunto: Currency ;
2011-11-14 17:40:41 +00:00
protected
// procedure AsignarDatos(ADetalles: IDAStronglyTypedDataTable; IDCabecera: Integer); override;
procedure RellenarOtros( ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo) ; overload ; 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 ;
2022-03-15 16:08:43 +00:00
function GetPrecioPunto: Currency ;
procedure SetPrecioPunto( const Value: Currency ) ;
2011-11-14 17:40:41 +00:00
public
2022-03-15 16:08:43 +00:00
procedure AnadirArticulos( ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila : Boolean = True ; const ACantidad: Integer = 1 ) ; overload ;
2011-11-14 17:40:41 +00:00
procedure ActualizarDetalles( ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente) ; overload ;
//ABONOS
procedure AnadirDetalleFacturaAsociadaAbono( ADetalles: IBizDetallesFacturaCliente; AReferencia: String ; AFecha: String ) ;
constructor Create; override ;
destructor Destroy; override ;
2022-03-15 16:08:43 +00:00
property PrecioPunto : Currency read GetPrecioPunto write SetPrecioPunto;
2011-11-14 17:40:41 +00:00
end ;
implementation
{ TDetallesFacturaClienteController }
2015-05-04 15:46:17 +00:00
uses Variants, uDataModuleFacturasCliente, uArticulosFacturaClienteController, uNumUtils,
2013-04-25 17:15:39 +00:00
uControllerDetallesBase, Dialogs, uDialogUtils, SysUtils, uCalculosUtils, uFactuGES_App;
2011-11-14 17:40:41 +00:00
procedure TDetallesFacturaClienteController. ActualizarDetalles( ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente) ;
var
AArticulos : IBizArticulo;
begin
if Assigned( ADetalles) then
begin
try
2013-04-26 12:34:42 +00:00
// AArticulos := (FArticulosController.BuscarTodos(ACliente) as IBizArticulo);
// ActualizarDetalles(ADetalles, AArticulos);
ActualizarDetalles( ADetalles, ACliente. DESCUENTO_LINEA) ;
2011-11-14 17:40:41 +00:00
ShowInfoMessage( 'Se han actualizado los descuentos para el cliente seleccionado' ) ;
finally
AArticulos : = Nil ;
end ;
end ;
end ;
procedure TDetallesFacturaClienteController. AnadirArticulos( ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila : Boolean ; const ACantidad: Integer ) ;
var
AArticulos: IBizArticulo;
begin
if Assigned( ADetalles) then
begin
AArticulos : = ( FArticulosController. BuscarTodos( ACliente) as IBizArticulo) ;
try
//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 IArticulosFacturaClienteController) . ElegirArticulos( AArticulos, 'Elija los art<72> culos que desea a<> adir a esta factura de cliente' , True ) ;
Add( ADetalles, AArticulos, ACantidad)
end
else
begin
AArticulos : = ( FArticulosController as IArticulosFacturaClienteController) . ElegirArticulos( AArticulos, 'Elija el art<72> culo que desea a<> adir a esta factura de cliente' , False ) ;
RellenarDetalle( ADetalles, AArticulos, ACantidad) ;
end ;
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 ; }
function TDetallesFacturaClienteController. CalcularImporteTotalConcepto( DataTable: TDADataTable) : Double ;
begin
2022-08-31 17:27:36 +00:00
//Calcular con 4 decimales solo facturas de proveedor de momento, esto ocasionaba que no salga lo mismo el calculo que su contrato correspondiente
//incidencia de Eva 08/07/2022
Result : = CalcularLineaConcepto( DataTable) ; //, 4);
2011-11-14 17:40:41 +00:00
end ;
constructor TDetallesFacturaClienteController. Create;
begin
inherited ;
FDataModule : = TDataModuleFacturasCliente. Create( Nil ) ;
2022-03-15 16:08:43 +00:00
AppFactuGES. EmpresaActiva. PRECIO_PUNTO
2011-11-14 17:40:41 +00:00
end ;
function TDetallesFacturaClienteController. DarTotalPorteTotal( ADetalles: IDAStronglyTypedDataTable) : Double ;
begin
Result : = DarTotalPorte( ADetalles) ;
end ;
procedure TDetallesFacturaClienteController. DesglosarPorteDetalles( ImportePorte: Currency ; ADetalles: IDAStronglyTypedDataTable) ;
begin
DesglosarPorte( ImportePorte, ADetalles) ;
ActualizarTotales( ADetalles) ;
end ;
destructor TDetallesFacturaClienteController. Destroy;
begin
FDataModule : = Nil ;
inherited ;
end ;
2022-03-15 16:08:43 +00:00
function TDetallesFacturaClienteController. GetPrecioPunto: Currency ;
begin
Result : = FPrecioPunto;
end ;
2011-11-14 17:40:41 +00:00
procedure TDetallesFacturaClienteController. RellenarOtros( ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo) ;
2013-04-26 12:34:42 +00:00
var
ACadena : String ;
2011-11-14 17:40:41 +00:00
begin
2013-04-26 12:34:42 +00:00
ACadena : = ADetalles. DataTable. FieldByName( 'CONCEPTO' ) . AsString;
if ( AArticulos. REFERENCIA_PROV < > '' ) then
ACadena : = AArticulos. REFERENCIA_PROV + ' ' + ACadena;
if ( AArticulos. FAMILIA < > '' ) then
ACadena : = AArticulos. FAMILIA + ' ' + ACadena;
ADetalles. DataTable. FieldByName( 'CONCEPTO' ) . AsString : = ACadena;
2011-11-14 17:40:41 +00:00
if Assigned( AArticulos) then
ADetalles. DataTable. FieldByName( CAMPO_DESCUENTO) . AsFloat : = AArticulos. DESCUENTO
else
ADetalles. DataTable. FieldByName( CAMPO_DESCUENTO) . AsFloat : = 0 ;
end ;
2022-03-15 16:08:43 +00:00
procedure TDetallesFacturaClienteController. SetPrecioPunto(
const Value: Currency ) ;
begin
FPrecioPunto : = Value;
FArticulosController. PrecioPunto : = FPrecioPunto;
end ;
2011-11-14 17:40:41 +00:00
procedure TDetallesFacturaClienteController. ValidarCampos( DataTable: TDADataTable) ;
begin
inherited ;
ValidarCamposLineaConcepto( DataTable) ;
end ;
procedure TDetallesFacturaClienteController. RellenarImportes( ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo) ;
begin
if Assigned( AArticulos) then
2022-03-15 16:08:43 +00:00
ADetalles. DataTable. FieldByName( CAMPO_IMPORTE_UNIDAD) . AsVariant : = RoundCurrency( AArticulos. PRECIO_COSTE * FPrecioPunto)
2011-11-14 17:40:41 +00:00
else
ADetalles. DataTable. FieldByName( CAMPO_IMPORTE_UNIDAD) . AsVariant : = Null;
end ;
end .