2011-11-14 17:40:41 +00:00
unit uArticulosController;
interface
uses
Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem,
uIDataModuleArticulos, uBizArticulos, uProveedoresController,
uBizContactos;
type
IArticulosController = interface( IControllerBase)
[ '{C7EA6486-7BE4-468E-A27A-621E1BA13430}' ]
function Buscar( const ID: Integer ; AClienteID: Integer = - 1 ) : IBizArticulo;
function BuscarInventariables: IBizArticulo;
function BuscarTodos: IBizArticulo; overload ;
2021-02-07 17:20:37 +00:00
function BuscarTodosPorProveedor: IBizArticulo; overload ;
2011-11-14 17:40:41 +00:00
function BuscarTodos( ACliente: IBizCliente) : IBizArticulo; overload ;
function BuscarTodos( AProveedor: IBizProveedor) : IBizArticulo; overload ;
function BuscarReferencia( const Ref: String ; AClienteID: Integer ) : IBizArticulo;
function BuscarReferenciaProveedor( const Ref: String ; AClienteID: Integer ) : IBizArticulo;
2025-07-23 10:19:05 +00:00
procedure BuscarPedidoConArticulo( AArticulo : IBizArticulo) ;
2011-11-14 17:40:41 +00:00
procedure Ver( AArticulo : IBizArticulo) ;
procedure VerTodos( AArticulos: IBizArticulo) ;
function Nuevo : IBizArticulo;
procedure Anadir( AArticulo : IBizArticulo) ;
function Eliminar( const ID : Integer ) : Boolean ; overload ;
function Eliminar( AArticulo : IBizArticulo) : Boolean ; overload ;
function Guardar( AArticulo : IBizArticulo) : Boolean ;
procedure DescartarCambios( AArticulo : IBizArticulo) ;
function Existe( const ID: Integer ) : Boolean ;
function Duplicar( AArticulo: IBizArticulo) : IBizArticulo;
procedure Preview( AArticulo : IBizArticulo) ;
procedure Print( AArticulo : IBizArticulo) ;
procedure ElegirProveedor( AArticulo : IBizArticulo) ;
procedure AnadirProveedor( AArticulo : IBizArticulo) ;
procedure VerProveedor( AArticulo : IBizArticulo) ;
function ExtraerSeleccionados( AArticulos: IBizArticulo) : IBizArticulo;
function ElegirArticulos( AArticulos : IBizArticulo; AMensaje: String ; AMultiSelect: Boolean ) : IBizArticulo;
procedure CalcularPrecioNeto( AArticulos: IBizArticulo) ;
function GetProveedoresController: IProveedoresController;
property ProveedoresController: IProveedoresController read GetProveedoresController;
2018-03-26 16:26:46 +00:00
2024-10-15 19:33:58 +00:00
function EsModificable( AArticulo : IBizArticulo) : Boolean ;
function EsEliminable( AArticulo : IBizArticulo) : Boolean ;
2018-03-26 16:26:46 +00:00
procedure SetPrecioPunto ( const AValue: Currency ) ;
function GetPrecioPunto: Currency ;
property PrecioPunto : Currency read GetPrecioPunto write SetPrecioPunto;
2020-05-06 10:08:12 +00:00
procedure AsignarTarifa( AArticulos: IBizArticulo) ;
2023-12-04 14:04:07 +00:00
procedure Comisionable( AArticulos: IBizArticulo; Valor: Integer ) ;
2024-04-19 15:09:52 +00:00
function DarListaTarifasArticulos: TStringList;
procedure FiltrarTarifa( AArticulo: IBizArticulo; ADynWhereDataTable: WideString ; const Tarifa: String ) ;
2011-11-14 17:40:41 +00:00
end ;
TArticulosController = class( TControllerBase, IArticulosController)
protected
2018-03-26 16:26:46 +00:00
FPrecioPunto: Currency ;
2011-11-14 17:40:41 +00:00
FDataModule : IDataModuleArticulos;
FProveedoresController: IProveedoresController;
function GetProveedoresController: IProveedoresController;
procedure RecibirAviso( ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable) ; override ;
function CreateEditor( const AName : String ; const IID: TGUID; out Intf) : Boolean ;
function _Vacio : IBizArticulo;
procedure FiltrarEmpresa( AArticulo: IBizArticulo) ;
function ValidarArticulo( AArticulo: IBizArticulo) : Boolean ; virtual ;
procedure RecuperarObjetos( AArticulo: IBizArticulo) ; virtual ;
procedure AsignarDataModule; virtual ;
2018-03-26 16:26:46 +00:00
procedure SetPrecioPunto ( const AValue: Currency ) ;
function GetPrecioPunto: Currency ;
2011-11-14 17:40:41 +00:00
public
property ProveedoresController: IProveedoresController read GetProveedoresController;
constructor Create; override ;
destructor Destroy; override ;
function Eliminar( const ID : Integer ) : Boolean ; overload ;
function Eliminar( AArticulo : IBizArticulo) : Boolean ; overload ;
2013-04-25 17:15:39 +00:00
function Guardar( AArticulo : IBizArticulo) : Boolean ;
2011-11-14 17:40:41 +00:00
procedure DescartarCambios( AArticulo : IBizArticulo) ; virtual ;
function Existe( const ID: Integer ) : Boolean ; virtual ;
procedure Anadir( AArticulo : IBizArticulo) ; virtual ;
function Buscar( const ID: Integer ; AClienteID: Integer = - 1 ) : IBizArticulo; virtual ;
function BuscarTodos: IBizArticulo; overload ;
2025-07-23 10:19:05 +00:00
function BuscarTodosPorProveedor: IBizArticulo; overload ;
2011-11-14 17:40:41 +00:00
function BuscarInventariables: IBizArticulo;
function BuscarTodos( ACliente: IBizCliente) : IBizArticulo; overload ;
function BuscarTodos( ACliente: Integer ) : IBizArticulo; overload ;
function BuscarTodos( AProveedor: IBizProveedor) : IBizArticulo; overload ;
function BuscarReferencia( const Ref: String ; AClienteID: Integer = - 1 ) : IBizArticulo; virtual ;
function BuscarReferenciaProveedor( const Ref: String ; AClienteID: Integer ) : IBizArticulo; virtual ;
2025-07-23 10:19:05 +00:00
procedure BuscarPedidoConArticulo( AArticulo : IBizArticulo) ;
2011-11-14 17:40:41 +00:00
function Nuevo : IBizArticulo; virtual ;
procedure Ver( AArticulo : IBizArticulo) ; virtual ;
procedure VerTodos( AArticulos: IBizArticulo) ; virtual ;
function Duplicar( AArticulo: IBizArticulo) : IBizArticulo; virtual ;
procedure Preview( AArticulo : IBizArticulo) ; virtual ;
procedure Print( AArticulo : IBizArticulo) ; virtual ;
function ExtraerSeleccionados( AArticulos: IBizArticulo) : IBizArticulo; virtual ;
function ElegirArticulos( AArticulos : IBizArticulo; AMensaje: String ; AMultiSelect: Boolean ) : IBizArticulo; virtual ;
procedure CalcularPrecioNeto( AArticulos: IBizArticulo) ;
2024-10-15 19:33:58 +00:00
function EsModificable( AArticulo : IBizArticulo) : Boolean ;
function EsEliminable( AArticulo : IBizArticulo) : Boolean ;
2011-11-14 17:40:41 +00:00
procedure ElegirProveedor( AArticulo : IBizArticulo) ;
procedure AnadirProveedor( AArticulo : IBizArticulo) ;
procedure VerProveedor( AArticulo : IBizArticulo) ;
2018-03-26 16:26:46 +00:00
2024-04-19 15:09:52 +00:00
function DarListaTarifasArticulos: TStringList;
procedure FiltrarTarifa( AArticulo: IBizArticulo; ADynWhereDataTable: WideString ; const Tarifa: String ) ;
2020-05-06 10:08:12 +00:00
procedure AsignarTarifa( AArticulos: IBizArticulo) ;
2023-12-04 14:04:07 +00:00
procedure Comisionable( AArticulos: IBizArticulo; Valor: Integer ) ;
2020-05-06 10:08:12 +00:00
2023-12-04 14:04:07 +00:00
property PrecioPunto : Currency read GetPrecioPunto write SetPrecioPunto;
2011-11-14 17:40:41 +00:00
end ;
implementation
uses
2025-07-23 10:19:05 +00:00
umodulecontroller, uPlugins_Intf, cxControls, DB, uEditorRegistryUtils, schArticulosClient_Intf, uFactuGES_App,
uIEditorArticulos, uIEditorArticulo, uIEditorElegirArticulos, uBizIdiomas,
2020-05-06 10:08:12 +00:00
uDataModuleArticulos, uDataModuleUsuarios, uDAInterfaces, uTarifasController,
2011-11-14 17:40:41 +00:00
uDataTableUtils, uDateUtils, uROTypes, DateUtils, Controls, Windows;
{ TArticulosController }
procedure TArticulosController. Anadir( AArticulo: IBizArticulo) ;
begin
AArticulo. Insert;
2025-07-23 10:19:05 +00:00
//Se pone aqui en lugar de IniciarValoresArticuloNuevo de la clase de negocio BizArticulos, porque al duplicar entidad produce un efecto lateral que no permite poner la tabla target en modo insert
//y falla el duplicar por contra sale el mensaje ha habido cambios aunque no hayas metido nada
AArticulo. Idiomas. Insert;
AArticulo. Idiomas. DataTable. FieldByName( fld_Articulos_IdiomasID_IDIOMA) . AsInteger : = CTE_ID_IDIOMA_EN;
AArticulo. Idiomas. Insert;
AArticulo. Idiomas. DataTable. FieldByName( fld_Articulos_IdiomasID_IDIOMA) . AsInteger : = CTE_ID_IDIOMA_FR;
AArticulo. Idiomas. Insert;
2011-11-14 17:40:41 +00:00
end ;
procedure TArticulosController. AnadirProveedor( AArticulo: IBizArticulo) ;
var
AProveedor : IBizContacto;
begin
inherited ;
AProveedor : = ( FProveedoresController. Nuevo as IBizProveedor) ;
FProveedoresController. Ver( AProveedor) ;
if Assigned( AProveedor) then
begin
if not AArticulo. DataTable. Editing then
AArticulo. Edit;
AArticulo. ID_PROVEEDOR : = AProveedor. ID;
AArticulo. NOMBRE_PROVEEDOR : = AProveedor. NOMBRE;
end ;
AProveedor : = Nil ;
end ;
procedure TArticulosController. AsignarDataModule;
begin
FDataModule : = TDataModuleArticulos. Create( Nil ) ;
FProveedoresController : = TProveedoresController. Create;
end ;
2020-05-06 10:08:12 +00:00
procedure TArticulosController. AsignarTarifa( AArticulos: IBizArticulo) ;
var
ATarifasController : ITarifasController;
ATarifa: String ;
begin
if Assigned( AArticulos) then
begin
with TTarifasController. Create do
begin
try
ATarifa : = elegirTarifa;
finally
Free
end ;
end ;
end ;
2022-03-12 10:40:36 +00:00
if ( ATarifa < > '' ) then
2020-05-06 10:08:12 +00:00
begin
2022-03-12 10:40:36 +00:00
//Asignamos en articulo
with AArticulos. DataTable do
2020-05-06 10:08:12 +00:00
begin
2022-03-12 10:40:36 +00:00
First;
while not EOF do
begin
if ( AArticulos. TARIFA < > ATarifa) then
begin
Edit;
AArticulos. TARIFA : = ATarifa;
Post;
end ;
Next;
end ;
ApplyUpdates;
2020-05-06 10:08:12 +00:00
end ;
end ;
end ;
2011-11-14 17:40:41 +00:00
function TArticulosController. Buscar( const ID: Integer ; AClienteID: Integer = - 1 ) : IBizArticulo;
begin
if ( AClienteID = - 1 ) then
Result : = ( FDataModule as IDataModuleArticulos) . GetItem( ID)
else
Result : = ( FDataModule as IDataModuleArticulos) . GetItem( ID, AClienteID) ;
2013-04-25 17:15:39 +00:00
//LOS ARTICULOS PASAN A SER COMUNES PARA LAS EMPRESAS
// FiltrarEmpresa(Result);
2011-11-14 17:40:41 +00:00
end ;
function TArticulosController. BuscarInventariables: IBizArticulo;
var
Condicion: TDAWhereExpression;
begin
ShowHourglassCursor;
try
Result : = BuscarTodos;
// Filtrar los articulos inventariables
with Result . DataTable. DynamicWhere do
begin
// (ID_EMPRESA >= ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_ArticulosINVENTARIABLE) , NewConstant( 1 , datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
finally
HideHourglassCursor;
end ;
end ;
2025-07-23 10:19:05 +00:00
procedure TArticulosController. BuscarPedidoConArticulo( AArticulo: IBizArticulo) ;
var
AModule : TModuleController;
APlugin : IMCPedidosProveedor;
begin
if not Assigned( AArticulo) then
raise Exception. Create ( 'Articulo no asignado (BuscarPedidoConArticulo)' ) ;
if not AArticulo. DataTable. Active then
AArticulo. DataTable. Active : = True ;
AModule : = AppFactuGES. GetModule( MODULENAME_PEDIDOS_PROVEEDOR) ;
if Assigned( AModule) then
try
if Supports( AModule, IMCPedidosProveedor, APlugin) then
//Se busca de forma exacta
APlugin. VerPedidosConArticulo( AArticulo. ID, AArticulo. DESCRIPCION) ;
finally
APlugin : = NIL ;
end ;
end ;
2011-11-14 17:40:41 +00:00
function TArticulosController. BuscarReferencia( const Ref: String ; AClienteID: Integer = - 1 ) : IBizArticulo;
var
Condicion: TDAWhereExpression;
begin
ShowHourglassCursor;
try
if ( AClienteID = - 1 ) then
Result : = BuscarTodos
else
Result : = BuscarTodos( AClienteID) ;
// Filtrar por referencia, se cambia por el where anterior porque luego no nos reconoce bien la cadena, al contener UPPER
with Result . DataTable. Where do
begin
AddText( Format( 'UPPER(%s) = ' '%s' '' , [ fld_ArticulosREFERENCIA, UpperCase( Ref) ] ) ) ;
end ;
{ with Result . DataTable. DynamicWhere do
begin
// (REFERENCIA >= Ref)
Condicion : = NewBinaryExpression( NewField( '' , fld_ArticulosREFERENCIA) , NewConstant( UpperCase( Ref) , datString) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ; }
finally
HideHourglassCursor;
end ;
end ;
function TArticulosController. BuscarReferenciaProveedor( const Ref: String ; AClienteID: Integer ) : IBizArticulo;
var
Condicion: TDAWhereExpression;
begin
ShowHourglassCursor;
try
if ( AClienteID = - 1 ) then
Result : = BuscarTodos
else
Result : = BuscarTodos( AClienteID) ;
// Filtrar por referencia, se cambia por el where anterior porque luego no nos reconoce bien la cadena, al contener UPPER
with Result . DataTable. Where do
begin
AddText( Format( 'UPPER(%s) = ' '%s' '' , [ fld_ArticulosREFERENCIA_PROV, UpperCase( Ref) ] ) ) ;
end ;
{ with Result . DataTable. DynamicWhere do
begin
// (REFERENCIA >= Ref)
Condicion : = NewBinaryExpression( NewField( '' , fld_ArticulosREFERENCIA_PROV) , NewConstant( UpperCase( Ref) , datString) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ; }
finally
HideHourglassCursor;
end ;
end ;
function TArticulosController. BuscarTodos( ACliente: Integer ) : IBizArticulo;
begin
Result : = FDataModule. GetItems( ACliente) ;
2013-04-25 17:15:39 +00:00
//LOS ARTICULOS PASAN A SER COMUNES PARA LAS EMPRESAS
// FiltrarEmpresa(Result);
2011-11-14 17:40:41 +00:00
end ;
function TArticulosController. BuscarTodos( ACliente: IBizCliente) : IBizArticulo;
begin
if not Assigned( ACliente) then
raise Exception. Create( 'Falta ACliente: BuscarTodos' ) ;
Result : = BuscarTodos( ACliente. ID) ;
end ;
function TArticulosController. BuscarTodos( AProveedor: IBizProveedor) : IBizArticulo;
var
Condicion: TDAWhereExpression;
begin
if Assigned( AProveedor) then
begin
ShowHourglassCursor;
try
Result : = BuscarTodos;
// Filtrar los articulos del proveedor
with Result . DataTable. DynamicWhere do
begin
// (ID_PROVEEDOR = ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_ArticulosID_PROVEEDOR) , NewConstant( AProveedor. ID, datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
finally
HideHourglassCursor;
end ;
end ;
end ;
2021-02-07 17:20:37 +00:00
function TArticulosController. BuscarTodosPorProveedor: IBizArticulo;
begin
Result : = FDataModule. GetItems( txProveedor) ;
//Los articulos ser<65> n comunes para todas las empresas.
// FiltrarEmpresa(Result);
end ;
2011-11-14 17:40:41 +00:00
function TArticulosController. BuscarTodos: IBizArticulo;
begin
2020-12-28 16:54:17 +00:00
Result : = FDataModule. GetItems( txArticulo) ;
2013-04-25 17:15:39 +00:00
//LOS ARTICULOS PASAN A SER COMUNES PARA LAS EMPRESAS
// FiltrarEmpresa(Result);
2011-11-14 17:40:41 +00:00
end ;
procedure TArticulosController. CalcularPrecioNeto( AArticulos: IBizArticulo) ;
var
lPrecioNeto: Double ;
begin
if Assigned( AArticulos) then
begin
with AArticulos do
begin
try
ShowHourglassCursor;
DataTable. DisableControls;
if not DataTable. Active then
DataTable. Active : = True ;
//Calcular precio neto
lPrecioNeto : = PRECIO_COSTE - ( ( PRECIO_COSTE * DESCUENTO) / 1 0 0 ) ;
if ( PRECIO_NETO < > lPrecioNeto) then
begin
if not DataTable. Editing then
DataTable. Edit;
PRECIO_NETO : = lPrecioNeto;
end ;
finally
DataTable. EnableControls;
HideHourglassCursor;
end ;
end ;
end ;
end ;
2023-12-04 14:04:07 +00:00
procedure TArticulosController. Comisionable( AArticulos: IBizArticulo; Valor: Integer ) ;
begin
if Assigned( AArticulos) then
begin
//Asignamos en articulo
with AArticulos. DataTable do
begin
First;
while not EOF do
begin
begin
2024-10-15 19:33:58 +00:00
//El art<72> culo libre comisionable no podr<64> cambiarse de valor
2025-07-23 10:19:05 +00:00
if ( AArticulos. REFERENCIA_PROV < > CTE_ART_COMISIONABLE_MODIFICABLE) then
2024-10-15 19:33:58 +00:00
begin
Edit;
AArticulos. COMISIONABLE : = Valor;
Post;
end ;
2023-12-04 14:04:07 +00:00
end ;
Next;
end ;
ApplyUpdates;
end ;
end ;
end ;
2011-11-14 17:40:41 +00:00
constructor TArticulosController. Create;
begin
inherited ;
2018-03-26 16:26:46 +00:00
FPrecioPunto: = AppFactuGES. EmpresaActiva. PRECIO_PUNTO;
2011-11-14 17:40:41 +00:00
AsignarDataModule;
end ;
function TArticulosController. CreateEditor( const AName: String ;
const IID: TGUID; out Intf) : Boolean ;
begin
Result : = Supports( EditorRegistry. CreateEditor( AName) , IID, Intf) ;
end ;
2024-04-19 15:09:52 +00:00
function TArticulosController. DarListaTarifasArticulos: TStringList;
begin
Result : = FDataModule. GetTarifasItems;
end ;
2011-11-14 17:40:41 +00:00
procedure TArticulosController. DescartarCambios( AArticulo: IBizArticulo) ;
begin
if not Assigned( AArticulo) then
raise Exception. Create ( 'Articulo no asignado' ) ;
ShowHourglassCursor;
try
if ( AArticulo. State in dsEditModes) then
AArticulo. Cancel;
AArticulo. DataTable. CancelUpdates;
finally
HideHourglassCursor;
end ;
end ;
destructor TArticulosController. Destroy;
begin
FDataModule : = Nil ;
FProveedoresController : = Nil ;
inherited ;
end ;
function TArticulosController. Duplicar( AArticulo: IBizArticulo) : IBizArticulo;
begin
Result : = Self. _Vacio;
ShowHourglassCursor;
try
DuplicarRegistros( AArticulo. DataTable, Result . DataTable, mdrActual) ;
2025-07-23 10:19:05 +00:00
DuplicarRegistros( AArticulo. Proveedores. DataTable, Result . Proveedores. DataTable, mdrTodos) ;
DuplicarRegistros( AArticulo. Idiomas. DataTable, Result . Idiomas. DataTable, mdrTodos) ;
2011-11-14 17:40:41 +00:00
// Hay que dejar algunos campos como si fuera un art<72> culo nuevo
Result . Edit;
with Result do
begin
2025-07-23 10:19:05 +00:00
ID_EMPRESA : = AppFactuGES. EmpresaActiva. ID;
2011-11-14 17:40:41 +00:00
USUARIO : = AppFactuGES. UsuarioActivo. UserName;
end ;
Result . Post;
finally
HideHourglassCursor;
end ;
end ;
function TArticulosController. ValidarArticulo( AArticulo: IBizArticulo) : Boolean ;
begin
Result : = False ;
if not Assigned( AArticulo) then
raise Exception. Create ( 'Art<72> culo no asignado' ) ;
if ( AArticulo. DataTable. State in dsEditModes) then
AArticulo. DataTable. Post;
2020-12-28 16:54:17 +00:00
//Tambien hacemos post de sus tablas hija
if ( AArticulo. Proveedores. DataTable. State in dsEditModes) then
AArticulo. Proveedores. DataTable. Post;
2011-11-14 17:40:41 +00:00
if Length( AArticulo. DESCRIPCION) = 0 then
raise Exception. Create( 'Debe indicar al menos la descripci<63> n de este art<72> culo.' ) ;
// Asegurarse de valores en campos "autom<6F> ticos"
AArticulo. Edit;
try
AArticulo. USUARIO : = AppFactuGES. UsuarioActivo. UserName;
Result : = True ;
finally
AArticulo. Post;
end ;
end ;
procedure TArticulosController. Ver( AArticulo: IBizArticulo) ;
var
AEditor : IEditorArticulo;
begin
AEditor : = NIL ;
RecuperarObjetos( AArticulo) ;
CreateEditor( 'EditorArticulo' , IEditorArticulo, AEditor) ;
if Assigned( AEditor) then
try
AEditor. Controller : = Self; //OJO ORDEN MUY IMPORTANTE
AEditor. Articulo : = AArticulo;
AEditor. ShowModal;
finally
AEditor. Release;
AEditor : = NIL ;
end ;
end ;
procedure TArticulosController. VerProveedor( AArticulo: IBizArticulo) ;
var
AProveedor : IBizContacto;
begin
AProveedor : = FProveedoresController. Buscar( AArticulo. ID_PROVEEDOR) ;
FProveedoresController. Ver( AProveedor) ;
if Assigned( AProveedor) then
begin
if not AArticulo. DataTable. Editing then
AArticulo. Edit;
AArticulo. ID_PROVEEDOR : = AProveedor. ID;
AArticulo. NOMBRE_PROVEEDOR : = AProveedor. NOMBRE;
end ;
AProveedor : = Nil ;
end ;
procedure TArticulosController. VerTodos( AArticulos: IBizArticulo) ;
var
AEditor : IEditorArticulos;
begin
AEditor : = NIL ;
RecuperarObjetos( AArticulos) ;
CreateEditor( 'EditorArticulos' , IEditorArticulos, AEditor) ;
if Assigned( AEditor) then
with ( AEditor as IEditorArticulos) do
begin
Controller : = Self; //OJO ORDEN MUY IMPORTANTE
Articulos : = AArticulos;
ShowEmbedded;
end ;
end ;
function TArticulosController. _Vacio: IBizArticulo;
begin
Result : = Buscar( ID_NULO) ;
end ;
function TArticulosController. Eliminar( const ID: Integer ) : Boolean ;
var
AArticulo : IBizArticulo;
begin
AArticulo : = Buscar( ID) ;
if not Assigned( AArticulo) then
raise Exception. Create( Format( 'No se ha encontrado el art<72> culo con ID = %d' , [ ID] ) ) ;
Result : = Eliminar( AArticulo) ;
AArticulo : = NIL ;
end ;
function TArticulosController. ElegirArticulos( AArticulos: IBizArticulo; AMensaje: String ; AMultiSelect: Boolean ) : IBizArticulo;
var
AEditor : IEditorElegirArticulos;
begin
Result : = NIL ;
CreateEditor( 'EditorElegirArticulos' , IEditorElegirArticulos, AEditor) ;
if Assigned( AEditor) then
try
AEditor. Controller : = Self;
AEditor. Articulos : = AArticulos;
AEditor. MultiSelect : = AMultiSelect;
AEditor. Mensaje : = AMensaje;
if IsPositiveResult( AEditor. ShowModal) then
Result : = AEditor. ArticulosSeleccionados;
finally
AEditor. Release;
AEditor : = NIL ;
end ;
end ;
procedure TArticulosController. ElegirProveedor( AArticulo: IBizArticulo) ;
var
AProveedor : IBizContacto;
begin
inherited ;
AProveedor : = ( FProveedoresController. ElegirContacto( FProveedoresController. BuscarTodos, '' , False ) as IBizProveedor) ;
if Assigned( AProveedor) then
begin
if not AArticulo. DataTable. Editing then
AArticulo. Edit;
AArticulo. ID_PROVEEDOR : = AProveedor. ID;
AArticulo. NOMBRE_PROVEEDOR : = AProveedor. NOMBRE;
end ;
AProveedor : = Nil ;
end ;
function TArticulosController. Eliminar( AArticulo: IBizArticulo) : Boolean ;
begin
Result : = False ;
if not Assigned( AArticulo) then
raise Exception. Create ( 'Articulo no asignada' ) ;
ShowHourglassCursor;
try
if ( AArticulo. State in dsEditModes) then
AArticulo. Cancel;
AArticulo. Delete;
AArticulo. DataTable. ApplyUpdates;
HideHourglassCursor;
Result : = True ;
except
on E: Exception do
begin
AArticulo. DataTable. CancelUpdates;
HideHourglassCursor;
if ( Pos( 'FOREIGN KEY' , E. Message ) > 0 ) then
MessageBox( 0 , 'No se puede borrar este art<72> culo porque tiene art<72> culos' , 'Atenci<63> n' , MB_ICONWARNING or MB_OK) ;
end ;
end ;
end ;
2024-10-15 19:33:58 +00:00
function TArticulosController. EsEliminable( AArticulo: IBizArticulo) : Boolean ;
begin
if not Assigned( AArticulo) then
raise Exception. Create ( 'Articulo no asignado (EsEliminable)' ) ;
2025-07-23 10:19:05 +00:00
Result : = AArticulo. REFERENCIA_PROV < > CTE_ART_COMISIONABLE_MODIFICABLE;
2024-10-15 19:33:58 +00:00
end ;
function TArticulosController. EsModificable( AArticulo: IBizArticulo) : Boolean ;
begin
if not Assigned( AArticulo) then
raise Exception. Create ( 'Articulo no asignado (EsModificable)' ) ;
2025-07-23 10:19:05 +00:00
Result : = AArticulo. REFERENCIA_PROV < > CTE_ART_COMISIONABLE_MODIFICABLE;
2024-10-15 19:33:58 +00:00
end ;
2011-11-14 17:40:41 +00:00
procedure TArticulosController. RecibirAviso( ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable) ;
begin
inherited ;
//
end ;
procedure TArticulosController. RecuperarObjetos( AArticulo: IBizArticulo) ;
begin
//
end ;
2018-03-26 16:26:46 +00:00
procedure TArticulosController. SetPrecioPunto( const AValue: Currency ) ;
begin
FPrecioPunto : = AValue;
end ;
2011-11-14 17:40:41 +00:00
function TArticulosController. Existe( const ID: Integer ) : Boolean ;
var
AArticulo : IBizArticulo;
begin
try
AArticulo : = Buscar( ID) ;
Result : = Assigned( AArticulo) and ( AArticulo. ID = ID) ;
finally
AArticulo : = NIL ;
end ;
end ;
function TArticulosController. ExtraerSeleccionados( AArticulos: IBizArticulo) : IBizArticulo;
var
ASeleccionados : IBizArticulo;
begin
ASeleccionados : = ( Self. Buscar( ID_NULO) as IBizArticulo) ;
CopyDataTableDA5( AArticulos. DataTable, ASeleccionados. DataTable, True ) ;
Result : = ASeleccionados;
end ;
procedure TArticulosController. FiltrarEmpresa( AArticulo: IBizArticulo) ;
var
Condicion: TDAWhereExpression;
begin
if AArticulo. DataTable. Active then
AArticulo. DataTable. Active : = False ;
// Filtrar los Articulos actuales por empresa
with AArticulo. DataTable. DynamicWhere do
begin
// (ID_EMPRESA >= ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_ArticulosID_EMPRESA) , NewConstant( AppFactuGES. EmpresaActiva. ID, datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
end ;
2024-04-19 15:09:52 +00:00
procedure TArticulosController. FiltrarTarifa( AArticulo: IBizArticulo;
ADynWhereDataTable: WideString ; const Tarifa: String ) ;
var
Condicion: TDAWhereExpression;
begin
AArticulo. DataTable. DynamicWhere. Clear;
AArticulo. DataTable. DynamicWhere. Xml : = ADynWhereDataTable;
if ( Tarifa < > 'Todos' ) then
begin
// Filtrar los articulos actuales por tarifa
with AArticulo. DataTable. DynamicWhere do
begin
// (TARIFA = TARIFA)
Condicion : = NewBinaryExpression( NewField( '' , fld_ArticulosTARIFA) , NewConstant( Tarifa, datString) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Condicion, Expression, dboAnd) ;
end ;
end ;
end ;
2018-03-26 16:26:46 +00:00
function TArticulosController. GetPrecioPunto: Currency ;
begin
Result : = FPrecioPunto;
end ;
2011-11-14 17:40:41 +00:00
function TArticulosController. GetProveedoresController: IProveedoresController;
begin
Result : = FProveedoresController;
end ;
function TArticulosController. Guardar( AArticulo: IBizArticulo) : Boolean ;
begin
Result : = False ;
if ValidarArticulo( AArticulo) then
begin
ShowHourglassCursor;
try
2020-12-28 16:54:17 +00:00
//Para que no salten los eventos de calculo de PVP que dar<61> a un pete importante
AArticulo. DataTable. DisableControls;
AArticulo. Proveedores. DataTable. DisableControls;
AArticulo. DataTable. DisableEventHandlers;
AArticulo. Proveedores. DataTable. DisableEventHandlers;
2011-11-14 17:40:41 +00:00
AArticulo. DataTable. ApplyUpdates;
2020-12-28 16:54:17 +00:00
Result : = True ;
2011-11-14 17:40:41 +00:00
finally
2020-12-28 16:54:17 +00:00
//Para que no salten los eventos de calculo de PVP que dar<61> a un pete importante
AArticulo. DataTable. EnableControls;
AArticulo. DataTable. EnableEventHandlers;
AArticulo. Proveedores. Datatable. EnableControls;
AArticulo. Proveedores. Datatable. EnableEventHandlers;
2011-11-14 17:40:41 +00:00
HideHourglassCursor;
end ;
end ;
end ;
function TArticulosController. Nuevo: IBizArticulo;
var
AArticulo : IBizArticulo;
begin
AArticulo : = FDataModule. NewItem;
2025-07-23 10:19:05 +00:00
//LOS ARTICULOS PASAN A SER COMUNES PARA LAS EMPRESAS
2013-04-25 17:15:39 +00:00
// FiltrarEmpresa(AArticulo);
2011-11-14 17:40:41 +00:00
AArticulo. DataTable. Active : = True ;
AArticulo. Insert;
2025-07-23 10:19:05 +00:00
//Se pone aqui en lugar de IniciarValoresArticuloNuevo de la clase de negocio BizArticulos, porque al duplicar entidad produce un efecto lateral que no permite poner la tabla target en modo insert
//y falla el duplicar por contra sale el mensaje ha habido cambios aunque no hayas metido nada
AArticulo. Idiomas. Insert;
AArticulo. Idiomas. DataTable. FieldByName( fld_Articulos_IdiomasID_IDIOMA) . AsInteger : = CTE_ID_IDIOMA_EN;
AArticulo. Idiomas. Insert;
AArticulo. Idiomas. DataTable. FieldByName( fld_Articulos_IdiomasID_IDIOMA) . AsInteger : = CTE_ID_IDIOMA_FR;
AArticulo. Idiomas. Insert;
2011-11-14 17:40:41 +00:00
Result : = AArticulo;
end ;
procedure TArticulosController. Preview( AArticulo: IBizArticulo) ;
//var
// AReportController : IArticulosReportController;
begin
{ AReportController : = TArticulosReportController. Create;
try
AReportController. Preview( AArticulo. ID) ;
finally
AReportController : = NIL ;
end ;
}
end ;
procedure TArticulosController. Print( AArticulo: IBizArticulo) ;
//var
// AReportController : IArticulosReportController;
begin
{ AReportController : = TArticulosReportController. Create;
try
AReportController. Print( AArticulo. ID) ;
finally
AReportController : = NIL ;
end ;
}
end ;
end .