2011-11-14 17:40:41 +00:00
unit uDetallesContratoClienteController;
interface
uses
uDADataTable, uControllerDetallesBase, uControllerDetallesArticulos, uBizDetallesContratoCliente, uIDataModuleContratosCliente,
uBizArticulos, uBizContactos, uBizDetallesPresupuestoCliente, uDetallesPresupuestoClienteController;
type
IDetallesContratoClienteController = interface( IControllerDetallesArticulos)
[ '{9CA228BB-229C-451F-B3F2-2352F80A861A}' ]
procedure AnadirArticulos( ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila : Boolean = True ) ; overload ;
procedure ActualizarDetalles( ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente) ; overload ;
procedure DesglosarPorteDetalles( ImportePorte: Currency ; ADetalles: IDAStronglyTypedDataTable) ;
function DarTotalPorteTotal( ADetalles: IDAStronglyTypedDataTable) : Double ;
2022-03-12 10:40:36 +00:00
procedure RecalcularPrecioPuntoDetalles( PrecioPunto: Currency ; ADetalles: IDAStronglyTypedDataTable) ;
2011-11-14 17:40:41 +00:00
function DarPropiedades: IBizPropiedades;
2022-03-12 10:40:36 +00:00
procedure AnadirCapitulo ( const Tipo: String ; const Descripcion: String ; Const Descuento: Boolean ; ADetalles: IDAStronglyTypedDataTable; const ConstanteConfiguracion: String = '' ) ;
2011-11-14 17:40:41 +00:00
procedure SetTipoArticulo( ADetalles: IDAStronglyTypedDataTable; ATipo: String ) ;
2022-03-12 10:40:36 +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 ;
TDetallesContratoClienteController = class( TControllerDetallesArticulos, IDetallesContratoClienteController)
private
//Propiedad temporal hasta que exista el controlador independiente de propiedades y capitulos, valores, etc
FDetallesPresupuestoCliente: IDetallesPresupuestoClienteController;
FDataModule : IDataModuleContratosCliente;
2022-03-12 10:40:36 +00:00
FPrecioPunto: Currency ;
2011-11-14 17:40:41 +00:00
protected
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-12 10:40:36 +00:00
procedure RecalcularPrecioPuntoDetalles( PrecioPunto: Currency ; ADetalles: IDAStronglyTypedDataTable) ;
procedure SetPrecioPunto ( const AValue: Currency ) ;
function GetPrecioPunto: Currency ;
2011-11-14 17:40:41 +00:00
public
procedure AnadirArticulos( ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila : Boolean = True ) ; reintroduce ; overload ;
procedure ActualizarDetalles( ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente) ; overload ;
constructor Create; override ;
destructor Destroy; override ;
function DarPropiedades: IBizPropiedades;
2022-03-12 10:40:36 +00:00
procedure AnadirCapitulo ( const Tipo: String ; const Descripcion: String ; Const Descuento: Boolean ; ADetalles: IDAStronglyTypedDataTable; const ConstanteConfiguracion: String = '' ) ;
2011-11-14 17:40:41 +00:00
//Se sobre escribe para hacer otro recorrido y rellenar el tipo_articulo a todos los conceptos de los capitulos
procedure ValidarDetalles( ADataTable: IDAStronglyTypedDataTable) ; override ;
procedure SetTipoArticulo( ADetalles: IDAStronglyTypedDataTable; ATipo: String ) ;
2022-03-12 10:40:36 +00:00
property PrecioPunto : Currency read GetPrecioPunto write SetPrecioPunto;
2011-11-14 17:40:41 +00:00
end ;
implementation
uses Controls, SysUtils, Dialogs, uDAInterfaces, uDialogUtils, Variants, uDataModuleContratosCliente,
2015-05-04 15:46:17 +00:00
uArticulosContratoClienteController, schContratosClienteClient_Intf, uNumUtils,
2022-03-12 10:40:36 +00:00
uDataTableUtils, uCalculosUtils, DB,
2011-11-14 17:40:41 +00:00
//uIEditorAsignarDescuento,
2013-04-25 17:15:39 +00:00
uEditorRegistryUtils, uFactuGES_App;
2011-11-14 17:40:41 +00:00
{ TDetallesContratoClienteController }
procedure TDetallesContratoClienteController. 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);
2022-07-07 17:14:25 +00:00
RecalcularPrecioPuntoDetalles( ACliente. PRECIO_PUNTO, ADetalles) ;
2013-04-26 12:34:42 +00:00
ActualizarDetalles( ADetalles, ACliente. DESCUENTO_LINEA) ;
2022-07-07 17:14:25 +00:00
// ShowInfoMessage('Se ha actualizado el descuento para el cliente seleccionado');
2011-11-14 17:40:41 +00:00
finally
AArticulos : = Nil ;
end ;
end ;
end ;
procedure TDetallesContratoClienteController. AnadirArticulos( ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila : Boolean ) ;
var
AArticulos: IBizArticulo;
begin
if Assigned( ADetalles) then
begin
try
AArticulos : = ( FArticulosController. BuscarTodos( ACliente) as IBizArticulo) ;
//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 IArticulosContratoClienteController) . ElegirArticulos( AArticulos, 'Elija los art<72> culos que desea a<> adir a este presupuesto de cliente' , True ) ;
Add( ADetalles, AArticulos)
end
else
begin
AArticulos : = ( FArticulosController as IArticulosContratoClienteController) . ElegirArticulos( AArticulos, 'Elija el art<72> culo que desea a<> adir a este presupuesto de cliente' , False ) ;
RellenarDetalle( ADetalles, AArticulos) ;
end ;
finally
AArticulos : = Nil ;
end ;
end ;
end ;
2022-03-12 10:40:36 +00:00
procedure TDetallesContratoClienteController. AnadirCapitulo( const Tipo: String ; const Descripcion: String ; Const Descuento: Boolean ; ADetalles: IDAStronglyTypedDataTable; const ConstanteConfiguracion: String = '' ) ;
2011-11-14 17:40:41 +00:00
begin
2022-03-12 10:40:36 +00:00
FDetallesPresupuestoCliente. AnadirCapitulo( Tipo, Descripcion, Descuento, ADetalles, ConstanteConfiguracion) ;
2011-11-14 17:40:41 +00:00
end ;
procedure TDetallesContratoClienteController. AsignarController;
begin
FArticulosController : = TArticulosContratoClienteController. Create;
end ;
function TDetallesContratoClienteController. CalcularImporteTotalConcepto( DataTable: TDADataTable) : Double ;
begin
Result : = CalcularLineaConcepto( DataTable) ;
end ;
constructor TDetallesContratoClienteController. Create;
begin
inherited ;
FDataModule : = TDataModuleContratosCliente. Create( Nil ) ;
2022-03-12 10:40:36 +00:00
FDetallesPresupuestoCliente: = TDetallesPresupuestoClienteController. Create;
2022-07-07 17:14:25 +00:00
FPrecioPunto: = AppFactuGES. EmpresaActiva. PRECIO_PUNTO;
2011-11-14 17:40:41 +00:00
end ;
function TDetallesContratoClienteController. DarPropiedades: IBizPropiedades;
begin
Result : = FDetallesPresupuestoCliente. DarPropiedades;
end ;
function TDetallesContratoClienteController. DarTotalPorteTotal( ADetalles: IDAStronglyTypedDataTable) : Double ;
begin
Result : = DarTotalPorte( ADetalles) ;
end ;
procedure TDetallesContratoClienteController. DesglosarPorteDetalles( ImportePorte: Currency ; ADetalles: IDAStronglyTypedDataTable) ;
begin
DesglosarPorte( ImportePorte, ADetalles) ;
ActualizarTotales( ADetalles) ;
end ;
destructor TDetallesContratoClienteController. Destroy;
begin
FDataModule : = Nil ;
FDetallesPresupuestoCliente : = Nil ;
inherited ;
end ;
2022-03-12 10:40:36 +00:00
function TDetallesContratoClienteController. GetPrecioPunto: Currency ;
begin
Result : = FPrecioPunto;
end ;
2011-11-14 17:40:41 +00:00
procedure TDetallesContratoClienteController. 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( 'PROPIEDAD' ) . AsString;
if ( AArticulos. REFERENCIA_PROV < > '' ) then
ACadena : = AArticulos. REFERENCIA_PROV + ' ' + ACadena;
if ( AArticulos. FAMILIA < > '' ) then
ACadena : = AArticulos. FAMILIA + ' ' + ACadena;
ADetalles. DataTable. FieldByName( 'PROPIEDAD' ) . AsString : = ACadena;
2013-04-25 17:15:39 +00:00
2013-04-26 12:34:42 +00:00
//El descuento que hemos puesto a la vista de articulos es el del cliente seleccionado en el documento
2013-04-25 17:15:39 +00:00
if Assigned( AArticulos) then
ADetalles. DataTable. FieldByName( CAMPO_DESCUENTO) . AsFloat : = AArticulos. DESCUENTO
else
ADetalles. DataTable. FieldByName( CAMPO_DESCUENTO) . AsFloat : = 0 ;
2011-11-14 17:40:41 +00:00
end ;
2022-03-12 10:40:36 +00:00
procedure TDetallesContratoClienteController. SetPrecioPunto( const AValue: Currency ) ;
begin
FPrecioPunto : = AValue;
FArticulosController. PrecioPunto : = FPrecioPunto;
end ;
2011-11-14 17:40:41 +00:00
procedure TDetallesContratoClienteController. SetTipoArticulo(
ADetalles: IDAStronglyTypedDataTable; ATipo: String ) ;
begin
if assigned( ADetalles) then
begin
ADetalles. DataTable. Edit;
ADetalles. DataTable. FieldByName( 'TIPO_ARTICULO' ) . AsString : = ATipo;
ADetalles. DataTable. Post;
end ;
end ;
procedure TDetallesContratoClienteController. ValidarCampos( DataTable: TDADataTable) ;
begin
inherited ;
ValidarCamposLineaConcepto( DataTable) ;
end ;
procedure TDetallesContratoClienteController. ValidarDetalles( ADataTable: IDAStronglyTypedDataTable) ;
var
AuxTipoArticulo : String ;
AuxPosicionIni : Integer ;
AuxPosicion : Integer ;
begin
inherited ;
AuxTipoArticulo : = '' ;
AuxPosicionIni : = ADataTable. DataTable. FieldByName( CAMPO_POSICION) . AsInteger;
AuxPosicion : = 0 ;
BeginUpdate( ADataTable) ;
try
ADataTable. DataTable. First;
while ADataTable. DataTable. Locate( CAMPO_POSICION, AuxPosicion, [ ] ) do
begin
if ( ADataTable. DataTable. FieldByName( CAMPO_TIPO) . AsString = TIPO_DETALLE_TITULO) then
AuxTipoArticulo : = ADataTable. DataTable. FieldByName( fld_TiposCapitulosTIPO_ARTICULO) . AsString
else if ( ADataTable. DataTable. FieldByName( CAMPO_TIPO) . AsString = TIPO_DETALLE_SUBTOTAL) then
AuxTipoArticulo : = ''
else if ( ADataTable. DataTable. FieldByName( CAMPO_TIPO) . AsString = TIPO_DETALLE_CONCEPTO) then
if ( Length( AuxTipoArticulo) > 0 ) then
begin
if not ADataTable. DataTable. Editing then
ADataTable. DataTable. Edit;
ADataTable. DataTable. FieldByName( fld_TiposCapitulosTIPO_ARTICULO) . AsString : = AuxTipoArticulo;
ADataTable. DataTable. Post;
end ;
Inc( AuxPosicion) ;
ADataTable. DataTable. First;
end ;
finally
//Dejamos el puntero en la misma posici<63> n que la que parti<74>
ADataTable. DataTable. Locate( CAMPO_POSICION, AuxPosicionIni, [ ] ) ;
EndUpdate( ADataTable) ;
end ;
end ;
2022-03-12 10:40:36 +00:00
procedure TDetallesContratoClienteController. RecalcularPrecioPuntoDetalles( PrecioPunto: Currency ; ADetalles: IDAStronglyTypedDataTable) ;
var
AArticulo: IBizArticulo;
ABookmark : TBookmark;
begin
ABookmark : = ADetalles. DataTable. GetBookMark;
try
ADetalles. DataTable. DisableControls;
ADetalles. DataTable. DisableEventHandlers;
ADetalles. DataTable. First;
while not ADetalles. DataTable. eof do
begin
if ( ADetalles. DataTable. FieldByName( CAMPO_ID_ARTICULOS) . AsInteger > 0 ) then
begin
AArticulo : = ( FArticulosController. Buscar( ADetalles. DataTable. FieldByName( CAMPO_ID_ARTICULOS) . AsInteger) as IBizArticulo) ;
AArticulo. DataTable. Open;
//Buscamos el punto del articulo y lo recalculamos
ADetalles. DataTable. Edit;
ADetalles. DataTable. FieldByName( CAMPO_IMPORTE_UNIDAD) . AsCurrency : = AArticulo. PRECIO_COSTE * PrecioPunto;
ADetalles. DataTable. Post;
AArticulo : = Nil ;
end ;
ADetalles. DataTable. Next;
end ;
finally
ADetalles. DataTable. EnableEventHandlers;
ADetalles. DataTable. GotoBookmark( ABookmark) ;
ADetalles. DataTable. FreeBookmark( ABookmark) ;
ADetalles. DataTable. EnableControls;
end ;
ActualizarTotales( ADetalles) ;
end ;
2011-11-14 17:40:41 +00:00
procedure TDetallesContratoClienteController. RellenarImportes( ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo) ;
begin
if ADetalles. DataTable. FieldByName( CAMPO_IMPORTE_UNIDAD) . IsNull then
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 .