2007-10-26 18:07:10 +00:00
unit uArticulosController;
interface
uses
Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem,
uIDataModuleArticulos, uBizArticulos, uProveedoresController,
uBizContactos;
type
2011-05-05 14:54:31 +00:00
TEnumReferencia = ( tReferenciaParaVentas, tRefProveedorParaVentas, tReferenciaParaCompras, tRefProveedorParaCompras) ;
2008-08-22 12:20:49 +00:00
IArticulosController = interface( IControllerBase)
2007-10-26 18:07:10 +00:00
[ '{C7EA6486-7BE4-468E-A27A-621E1BA13430}' ]
2008-07-22 11:21:06 +00:00
function Buscar( const ID: Integer ; AClienteID: Integer = - 1 ) : IBizArticulo; overload ;
2007-10-26 18:07:10 +00:00
function BuscarInventariables: IBizArticulo;
function BuscarTodos: IBizArticulo; overload ;
2011-05-05 14:54:31 +00:00
function BuscarTodosPorProveedor: IBizArticulo; overload ;
2007-10-26 18:07:10 +00:00
function BuscarTodos( ACliente: IBizCliente) : IBizArticulo; overload ;
function BuscarTodos( AProveedor: IBizProveedor) : IBizArticulo; overload ;
2011-05-05 14:54:31 +00:00
function BuscarReferencia( const TipoReferencia: TEnumReferencia; const Ref: String ; ACliProvID: Integer ) : IBizArticulo;
// function BuscarReferenciaProveedor(const Ref: String; ACliProvID: Integer): IBizArticulo;
2007-10-26 18:07:10 +00:00
procedure Ver( AArticulo : IBizArticulo) ;
2008-07-22 11:21:06 +00:00
procedure VerTodos;
2007-10-26 18:07:10 +00:00
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) ;
2008-06-09 17:08:55 +00:00
function DarListaProveedoresConArticulos: TStringList;
2007-10-26 18:07:10 +00:00
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;
2008-06-19 16:02:11 +00:00
function DarPrecioPVPVenta( IdArticulo: Integer ) : TStringList;
2007-10-26 18:07:10 +00:00
end ;
2008-08-22 12:20:49 +00:00
TArticulosController = class( TControllerBase, IArticulosController)
2007-10-26 18:07:10 +00:00
protected
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 ;
public
property ProveedoresController: IProveedoresController read GetProveedoresController;
2007-11-22 19:09:07 +00:00
constructor Create; override ;
2007-10-26 18:07:10 +00:00
destructor Destroy; override ;
function Eliminar( const ID : Integer ) : Boolean ; overload ;
function Eliminar( AArticulo : IBizArticulo) : Boolean ; overload ;
2008-06-09 17:08:55 +00:00
function Guardar( AArticulo : IBizArticulo) : Boolean ;
2007-10-26 18:07:10 +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 ;
2008-07-22 11:21:06 +00:00
function BuscarTodosPorProveedor: IBizArticulo; overload ;
2007-10-26 18:07:10 +00:00
function BuscarInventariables: IBizArticulo;
function BuscarTodos( ACliente: IBizCliente) : IBizArticulo; overload ;
function BuscarTodos( ACliente: Integer ) : IBizArticulo; overload ;
function BuscarTodos( AProveedor: IBizProveedor) : IBizArticulo; overload ;
2011-05-05 14:54:31 +00:00
function BuscarReferencia( const TipoReferencia: TEnumReferencia; const Ref: String ; ACliProvID: Integer = - 1 ) : IBizArticulo; virtual ;
2007-10-26 18:07:10 +00:00
function Nuevo : IBizArticulo; virtual ;
procedure Ver( AArticulo : IBizArticulo) ; virtual ;
2008-07-22 11:21:06 +00:00
procedure VerTodos; virtual ;
2007-10-26 18:07:10 +00:00
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) ;
procedure ElegirProveedor( AArticulo : IBizArticulo) ;
procedure AnadirProveedor( AArticulo : IBizArticulo) ;
procedure VerProveedor( AArticulo : IBizArticulo) ;
2008-06-09 17:08:55 +00:00
function DarListaProveedoresConArticulos: TStringList;
2008-06-19 16:02:11 +00:00
function DarPrecioPVPVenta( IdArticulo: Integer ) : TStringList;
2007-10-26 18:07:10 +00:00
end ;
implementation
uses
2007-11-18 15:08:38 +00:00
cxControls, DB, uEditorRegistryUtils, schArticulosClient_Intf, uFactuGES_App,
2007-10-26 18:07:10 +00:00
uIEditorArticulos, uIEditorArticulo, uIEditorElegirArticulos,
2008-02-05 19:01:50 +00:00
uDataModuleArticulos, uDataModuleUsuarios, uDAInterfaces, Dialogs,
2007-10-26 18:07:10 +00:00
uDataTableUtils, uDateUtils, uROTypes, DateUtils, Controls, Windows;
{ TArticulosController }
procedure TArticulosController. Anadir( AArticulo: IBizArticulo) ;
begin
AArticulo. Insert;
end ;
procedure TArticulosController. AnadirProveedor( AArticulo: IBizArticulo) ;
var
AProveedor : IBizContacto;
begin
inherited ;
2008-07-22 11:21:06 +00:00
{ AProveedor : = ( FProveedoresController. Nuevo as IBizProveedor) ;
2007-10-26 18:07:10 +00:00
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 ;
2008-07-22 11:21:06 +00:00
}
2007-10-26 18:07:10 +00:00
end ;
procedure TArticulosController. AsignarDataModule;
begin
FDataModule : = TDataModuleArticulos. Create( Nil ) ;
FProveedoresController : = TProveedoresController. Create;
end ;
function TArticulosController. Buscar( const ID: Integer ; AClienteID: Integer = - 1 ) : IBizArticulo;
begin
2008-07-22 11:21:06 +00:00
//Quitamos la funcionalidad de poder dar una lista de articulos particular de los clientes
// if (AClienteID = -1) then
Result : = ( FDataModule as IDataModuleArticulos) . GetItem( ID) ;
// else
// Result := (FDataModule as IDataModuleArticulos).GetItem(ID, AClienteID);
2007-10-26 18:07:10 +00:00
2009-01-09 17:38:39 +00:00
//Los articulos ser<65> n comunes para todas las empresas.
// FiltrarEmpresa(Result);
2007-10-26 18:07:10 +00:00
end ;
function TArticulosController. BuscarInventariables: IBizArticulo;
2007-11-18 17:23:37 +00:00
var
Condicion: TDAWhereExpression;
2007-10-26 18:07:10 +00:00
begin
ShowHourglassCursor;
try
Result : = BuscarTodos;
2007-11-18 17:23:37 +00:00
// Filtrar los articulos inventariables
with Result . DataTable. DynamicWhere do
2007-10-26 18:07:10 +00:00
begin
2007-11-18 17:23:37 +00:00
// (ID_EMPRESA >= ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_ArticulosINVENTARIABLE) , NewConstant( 1 , datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
2007-10-26 18:07:10 +00:00
end ;
2007-11-18 17:23:37 +00:00
2007-10-26 18:07:10 +00:00
finally
HideHourglassCursor;
end ;
end ;
2011-05-05 14:54:31 +00:00
function TArticulosController. BuscarReferencia( const TipoReferencia: TEnumReferencia; const Ref: String ; ACliProvID: Integer = - 1 ) : IBizArticulo;
var
Condicion: TDAWhereExpression;
2007-10-26 18:07:10 +00:00
begin
ShowHourglassCursor;
try
2011-05-05 14:54:31 +00:00
case TipoReferencia of
//Siempre que sea para ventas consultaremos la lista de articulos para ventas (BuscarTodos), en el caso hipotetico de que la lista de ventas
//sea propia para cada cliente se podria filtrar por cliente (ACliProvID)
tReferenciaParaVentas, tRefProveedorParaVentas: Result : = BuscarTodos;
2008-02-05 19:01:50 +00:00
2011-05-05 14:54:31 +00:00
//Siempre que sea para compras consultaremos la lista de articulos para compras (BuscarTodosPorProveedor), en el caso hipotetico de que la lista de compras
//sea propia para cada proveedor se podria filtrar por proveedor (ACliProvID)
tReferenciaParaCompras, tRefProveedorParaCompras: Result : = BuscarTodosPorProveedor;
end ;
2008-02-05 19:01:50 +00:00
2011-05-05 14:54:31 +00:00
//FILTRO DE LOS CAMPOS REFERENCIA Y REFERENCIA_PROV
case TipoReferencia of
tReferenciaParaVentas, tReferenciaParaCompras: begin
// Filtrar por referencia, se cambia por el where anterior porque luego no nos reconoce bien la cadena, al contener UPPER
with Result . DataTable. DynamicWhere do
begin
if TipoReferencia = TipoReferencia then
Condicion : = NewBinaryExpression( NewMacro( 'UpperCase(' + fld_ArticulosREFERENCIA+ ')' ) ,
NewConstant( UpperCase( Ref) , datString) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
end ;
tRefProveedorParaVentas, tRefProveedorParaCompras: begin
// Filtrar por referencia, se cambia por el where anterior porque luego no nos reconoce bien la cadena, al contener UPPER
with Result . DataTable. DynamicWhere do
begin
Condicion : = NewBinaryExpression( NewMacro( 'UpperCase(' + fld_ArticulosREFERENCIA_PROV+ ')' ) ,
NewConstant( UpperCase( Ref) , datString) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
end ;
end ;
2007-11-18 17:23:37 +00:00
2011-05-05 14:54:31 +00:00
//FILTRO DE LOS CAMPOS CLIENTE Y PROVEEDOR
case TipoReferencia of
tReferenciaParaVentas, tRefProveedorParaVentas: begin
//NO SE IMPLEMENTA EN TECSITEL
end ;
tReferenciaParaCompras, tRefProveedorParaCompras: begin
// Filtrar por proveedor
with Result . DataTable. DynamicWhere do
begin
Condicion : = NewBinaryExpression( NewField( '' , fld_Articulos_ProveedoresID_PROVEEDOR) ,
NewConstant( ACliProvID, datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
end ;
end ;
2007-11-18 17:23:37 +00:00
2007-10-26 18:07:10 +00:00
finally
HideHourglassCursor;
end ;
end ;
2011-05-05 14:54:31 +00:00
{ function TArticulosController. BuscarReferenciaProveedor( const Ref: String ; ACliProvID: Integer ) : IBizArticulo;
2008-05-20 18:50:02 +00:00
{ var
Condicion: TDAWhereExpression; }
2011-05-05 14:54:31 +00:00
{ begin
2007-10-26 18:07:10 +00:00
ShowHourglassCursor;
try
2008-07-22 11:21:06 +00:00
//En tecsitel se desactiva el sacar una lista de articulos personalizada por cliente
// if (AClienteID = -1) then
Result : = BuscarTodosPorProveedor;
// else
// Result := BuscarTodos(AClienteID);
2007-10-26 18:07:10 +00:00
2008-02-05 19:01:50 +00:00
// 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
2007-10-26 18:07:10 +00:00
begin
2007-11-18 17:23:37 +00:00
// (REFERENCIA >= Ref)
Condicion : = NewBinaryExpression( NewField( '' , fld_ArticulosREFERENCIA_PROV) , NewConstant( UpperCase( Ref) , datString) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
2008-02-05 19:01:50 +00:00
end ; }
2007-11-18 17:23:37 +00:00
2011-05-05 14:54:31 +00:00
{ finally
2007-10-26 18:07:10 +00:00
HideHourglassCursor;
end ;
end ;
2011-05-05 14:54:31 +00:00
}
2007-10-26 18:07:10 +00:00
function TArticulosController. BuscarTodos( ACliente: Integer ) : IBizArticulo;
begin
2008-07-22 11:21:06 +00:00
Result : = FDataModule. GetItems( txArticulo) ; //ACliente);
2009-01-09 17:38:39 +00:00
//Los articulos ser<65> n comunes para todas las empresas.
// FiltrarEmpresa(Result);
2007-10-26 18:07:10 +00:00
end ;
function TArticulosController. BuscarTodos( ACliente: IBizCliente) : IBizArticulo;
begin
2008-07-22 11:21:06 +00:00
//En tecsitel se desactiva el sacar una lista de articulos personalizada por cliente
// if not Assigned(ACliente) then
// raise Exception.Create('Falta ACliente: BuscarTodos');
2007-10-26 18:07:10 +00:00
2008-07-22 11:21:06 +00:00
Result : = BuscarTodos; //(ACliente.ID);
2007-10-26 18:07:10 +00:00
end ;
function TArticulosController. BuscarTodos( AProveedor: IBizProveedor) : IBizArticulo;
2007-11-18 17:23:37 +00:00
var
Condicion: TDAWhereExpression;
2007-10-26 18:07:10 +00:00
begin
if Assigned( AProveedor) then
begin
ShowHourglassCursor;
try
2008-07-22 11:21:06 +00:00
Result : = BuscarTodosPorProveedor;
2007-11-18 17:23:37 +00:00
// Filtrar los articulos del proveedor
with Result . DataTable. DynamicWhere do
2007-10-26 18:07:10 +00:00
begin
2007-11-18 17:23:37 +00:00
// (ID_PROVEEDOR = ID)
2008-07-22 11:21:06 +00:00
Condicion : = NewBinaryExpression( NewField( '' , fld_ArticulosParaCompraID_PROVEEDOR) , NewConstant( AProveedor. ID, datInteger) , dboEqual) ;
2007-11-18 17:23:37 +00:00
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
2007-10-26 18:07:10 +00:00
end ;
finally
HideHourglassCursor;
end ;
end ;
end ;
2008-07-22 11:21:06 +00:00
function TArticulosController. BuscarTodosPorProveedor: IBizArticulo;
begin
Result : = FDataModule. GetItems( txProveedor) ;
2009-01-09 17:38:39 +00:00
//Los articulos ser<65> n comunes para todas las empresas.
// FiltrarEmpresa(Result);
2008-07-22 11:21:06 +00:00
end ;
2007-10-26 18:07:10 +00:00
function TArticulosController. BuscarTodos: IBizArticulo;
begin
2008-07-22 11:21:06 +00:00
Result : = FDataModule. GetItems( txArticulo) ;
2009-01-09 17:38:39 +00:00
//Los articulos ser<65> n comunes para todas las empresas.
// FiltrarEmpresa(Result);
2007-10-26 18:07:10 +00:00
end ;
procedure TArticulosController. CalcularPrecioNeto( AArticulos: IBizArticulo) ;
var
lPrecioNeto: Double ;
begin
2008-07-22 11:21:06 +00:00
{
2007-10-26 18:07:10 +00:00
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 ;
2008-07-22 11:21:06 +00:00
}
2007-10-26 18:07:10 +00:00
end ;
constructor TArticulosController. Create;
begin
2007-11-22 19:09:07 +00:00
inherited ;
2007-10-26 18:07:10 +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 ;
2008-06-09 17:08:55 +00:00
function TArticulosController. DarListaProveedoresConArticulos: TStringList;
begin
Result : = ( FDataModule as IDataModuleArticulos) . DarListaProveedoresConArticulos( AppFactuGES. EmpresaActiva. ID) ;
end ;
2008-06-19 16:02:11 +00:00
function TArticulosController. DarPrecioPVPVenta( IdArticulo: Integer ) : TStringList;
var
AArticulo: IBizArticulo;
begin
AArticulo : = Buscar( IdArticulo) ;
AArticulo. DataTable. Active : = True ;
Result : = TStringList. Create;
try
with Result do
begin
Add( CurrToStr( AArticulo. PRECIO_PVP_TOTAL) ) ;
Add( CurrToStr( AArticulo. PRECIO_PVP_VENTA) ) ;
end ;
finally
AArticulo : = NIL ;
end ;
end ;
2007-10-26 18:07:10 +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) ;
// Hay que dejar algunos campos como si fuera un art<72> culo nuevo
Result . Edit;
with Result do
begin
2008-06-18 15:10:06 +00:00
ID_EMPRESA : = AppFactuGES. EmpresaActiva. ID;
2007-11-18 15:08:38 +00:00
USUARIO : = AppFactuGES. UsuarioActivo. UserName;
2008-06-18 15:10:06 +00:00
REFERENCIA : = '' ;
2007-10-26 18:07:10 +00:00
end ;
Result . Post;
finally
HideHourglassCursor;
end ;
end ;
function TArticulosController. ValidarArticulo( AArticulo: IBizArticulo) : Boolean ;
begin
2008-07-31 09:15:14 +00:00
Result : = False ;
2007-10-26 18:07:10 +00:00
if not Assigned( AArticulo) then
raise Exception. Create ( 'Art<72> culo no asignado' ) ;
if ( AArticulo. DataTable. State in dsEditModes) then
AArticulo. DataTable. Post;
2008-07-31 09:15:14 +00:00
//Tambien hacemos post de sus tablas hija
if ( AArticulo. Proveedores. DataTable. State in dsEditModes) then
AArticulo. Proveedores. DataTable. Post;
2007-10-26 18:07:10 +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
2008-07-31 09:15:14 +00:00
AArticulo. USUARIO : = AppFactuGES. UsuarioActivo. UserName;
2007-10-26 18:07:10 +00:00
Result : = True ;
finally
AArticulo. Post;
end ;
end ;
procedure TArticulosController. Ver( AArticulo: IBizArticulo) ;
var
AEditor : IEditorArticulo;
begin
AEditor : = NIL ;
2008-11-11 16:22:18 +00:00
RecuperarObjetos( AArticulo) ;
CreateEditor( 'EditorArticulo' , IEditorArticulo, AEditor) ;
if Assigned( AEditor) then
2008-11-13 13:10:32 +00:00
try
AEditor. Controller : = Self; //OJO ORDEN MUY IMPORTANTE
AEditor. Articulo : = AArticulo;
AEditor. ShowModal;
finally
AEditor. Release;
AEditor : = NIL ;
end ;
2007-10-26 18:07:10 +00:00
end ;
procedure TArticulosController. VerProveedor( AArticulo: IBizArticulo) ;
var
AProveedor : IBizContacto;
begin
2008-07-22 11:21:06 +00:00
{
2007-10-26 18:07:10 +00:00
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 ;
2008-07-22 11:21:06 +00:00
}
2007-10-26 18:07:10 +00:00
end ;
2008-07-22 11:21:06 +00:00
procedure TArticulosController. VerTodos;
2007-10-26 18:07:10 +00:00
var
AEditor : IEditorArticulos;
begin
AEditor : = NIL ;
2008-11-11 16:22:18 +00:00
CreateEditor( 'EditorArticulos' , IEditorArticulos, AEditor) ;
if Assigned( AEditor) then
with ( AEditor as IEditorArticulos) do
begin
2008-11-11 18:56:14 +00:00
Controller : = Self; //OJO ORDEN MUY IMPORTANTE
ShowEmbedded;
2008-11-11 16:22:18 +00:00
end ;
2007-10-26 18:07:10 +00:00
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] ) ) ;
2008-07-22 11:21:06 +00:00
AArticulo. DataTable. Active : = True ;
2007-10-26 18:07:10 +00:00
Result : = Eliminar( AArticulo) ;
AArticulo : = NIL ;
end ;
function TArticulosController. ElegirArticulos( AArticulos: IBizArticulo; AMensaje: String ; AMultiSelect: Boolean ) : IBizArticulo;
var
AEditor : IEditorElegirArticulos;
begin
Result : = NIL ;
2008-11-11 16:22:18 +00:00
CreateEditor( 'EditorElegirArticulos' , IEditorElegirArticulos, AEditor) ;
if Assigned( AEditor) then
2008-11-13 13:10:32 +00:00
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 ;
2008-11-11 16:22:18 +00:00
end ;
2007-10-26 18:07:10 +00:00
end ;
procedure TArticulosController. ElegirProveedor( AArticulo: IBizArticulo) ;
var
AProveedor : IBizContacto;
begin
inherited ;
2008-07-22 11:21:06 +00:00
{
2007-10-26 18:07:10 +00:00
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 ;
2008-07-22 11:21:06 +00:00
}
2007-10-26 18:07:10 +00:00
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 ;
procedure TArticulosController. RecibirAviso( ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable) ;
begin
inherited ;
//
end ;
procedure TArticulosController. RecuperarObjetos( AArticulo: IBizArticulo) ;
begin
//
end ;
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) ;
2008-05-21 14:57:05 +00:00
CopyDataTableDA5( AArticulos. DataTable, ASeleccionados. DataTable, True ) ;
2007-10-26 18:07:10 +00:00
Result : = ASeleccionados;
end ;
procedure TArticulosController. FiltrarEmpresa( AArticulo: IBizArticulo) ;
2007-11-18 17:23:37 +00:00
var
Condicion: TDAWhereExpression;
2007-10-26 18:07:10 +00:00
begin
if AArticulo. DataTable. Active then
AArticulo. DataTable. Active : = False ;
// Filtrar los Articulos actuales por empresa
2007-11-18 17:23:37 +00:00
with AArticulo. DataTable. DynamicWhere do
2007-10-26 18:07:10 +00:00
begin
2007-11-18 17:23:37 +00:00
// (ID_EMPRESA >= ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_ArticulosID_EMPRESA) , NewConstant( AppFactuGES. EmpresaActiva. ID, datInteger) , dboEqual) ;
2007-10-26 18:07:10 +00:00
2007-11-18 17:23:37 +00:00
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
2007-10-26 18:07:10 +00:00
end ;
end ;
function TArticulosController. GetProveedoresController: IProveedoresController;
begin
Result : = FProveedoresController;
end ;
function TArticulosController. Guardar( AArticulo: IBizArticulo) : Boolean ;
begin
Result : = False ;
if ValidarArticulo( AArticulo) then
begin
ShowHourglassCursor;
try
2008-07-22 11:21:06 +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;
2007-10-26 18:07:10 +00:00
AArticulo. DataTable. ApplyUpdates;
2008-07-22 11:21:06 +00:00
Result : = True ;
2007-10-26 18:07:10 +00:00
finally
2008-07-22 11:21:06 +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;
2007-10-26 18:07:10 +00:00
HideHourglassCursor;
end ;
end ;
end ;
function TArticulosController. Nuevo: IBizArticulo;
var
AArticulo : IBizArticulo;
begin
AArticulo : = FDataModule. NewItem;
2009-01-09 17:38:39 +00:00
//Los articulos ser<65> n comunes para todas las empresas.
// FiltrarEmpresa(AArticulo);
2007-10-26 18:07:10 +00:00
AArticulo. DataTable. Active : = True ;
AArticulo. Insert;
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 .