2011-11-14 17:40:41 +00:00
unit uProveedoresController;
interface
uses
uCustomEditor,
uContactosController, uBizContactos, uBizDireccionesContacto, uDireccionesContactoController,
uIEditorProveedores, uIEditorProveedor, uIDataModuleContactos, uIDataModuleProveedores;
type
IProveedoresController = interface( IContactosController)
[ '{50F10D01-5120-470D-A61D-99FE8A76DF93}' ]
function BuscarTodosTiendaWeb: IBizProveedor;
function EsEliminable( AProveedor: IBizContacto) : Boolean ;
function Eliminar( AProveedor: IBizContacto; AllItems: Boolean = false ) : Boolean ; overload ;
procedure Preview( AProveedor : IBizProveedor; AllItems: Boolean = false ) ;
procedure Print( AProveedor : IBizProveedor; AllItems: Boolean = false ) ;
procedure SetTieneSubcuenta( AProveedor: IBizProveedor; AValue: Boolean ) ;
procedure SetIgnorarContabilidad( AProveedor: IBizProveedor; AValue: Boolean ) ;
end ;
TProveedoresController = class( TContactosController, IProveedoresController)
protected
FDireccionesController : IDireccionesContactoController;
function ValidarContacto( AContacto: IBizContacto) : Boolean ; override ;
procedure FiltrarEjercicio( AContacto : IBizContacto) ; virtual ;
public
constructor Create; override ;
destructor Destroy; override ;
function Buscar( const ID: Integer ) : IBizContacto; override ;
function BuscarTodos: IBizContacto; override ;
function BuscarTodosTiendaWeb: IBizProveedor;
function Nuevo : IBizContacto; override ;
function Guardar( AContacto : IBizContacto) : Boolean ; override ;
procedure Ver( AContacto : IBizContacto) ; override ;
procedure VerTodos( AContactos: IBizContacto) ; override ;
function ElegirContacto( AContactos : IBizContacto;
AMensaje: String ; AMultiSelect: Boolean ) : IBizContacto; override ;
function EsEliminable( AProveedor: IBizContacto) : Boolean ;
function Eliminar( AProveedor: IBizContacto; AllItems: Boolean = false ) : Boolean ; overload ;
procedure Preview( AProveedor : IBizProveedor; AllItems: Boolean = false ) ;
procedure Print( AProveedor : IBizProveedor; AllItems: Boolean = false ) ;
procedure SetTieneSubcuenta( AProveedor: IBizProveedor; AValue: Boolean ) ;
procedure SetIgnorarContabilidad( AProveedor: IBizProveedor; AValue: Boolean ) ;
end ;
implementation
2011-11-18 17:12:39 +00:00
{$INCLUDE ..\..\..\FactuGES.inc}
2011-11-14 17:40:41 +00:00
uses
Classes, SysUtils, cxControls, Dialogs, uDataModuleProveedores, uEditorRegistryUtils,
uDataTableUtils, uDADataTable, DB, schContactosClient_Intf, uEtiquetasContactosReportController,
uIEditorElegirProveedores, Controls, uEditorGridBase, JSDialogs, JSDialog,
uDAInterfaces, uFactuGES_App, Windows, uIntegerListUtils;
{ TProveedoresController }
function TProveedoresController. Buscar( const ID: Integer ) : IBizContacto;
begin
Result : = ( FDataModule as IDataModuleProveedores) . GetItem( ID) ;
FiltrarEmpresa( Result ) ;
2011-11-18 17:12:39 +00:00
{$IFDEF CONTABILIDAD}
FiltrarEjercicio( Result ) ;
{$ENDIF}
2011-11-14 17:40:41 +00:00
end ;
function TProveedoresController. BuscarTodos: IBizContacto;
begin
Result : = ( FDataModule as IDataModuleProveedores) . GetItems;
FiltrarEmpresa( Result ) ;
2011-11-18 17:12:39 +00:00
{$IFDEF CONTABILIDAD}
FiltrarEjercicio( Result ) ;
{$ENDIF}
2011-11-14 17:40:41 +00:00
end ;
function TProveedoresController. BuscarTodosTiendaWeb: IBizProveedor;
begin
Result : = ( FDataModule as IDataModuleProveedores) . GetItemsTiendaWeb;
FiltrarEmpresa( Result ) ;
2011-11-18 17:12:39 +00:00
{$IFDEF CONTABILIDAD}
FiltrarEjercicio( Result ) ;
{$ENDIF}
2011-11-14 17:40:41 +00:00
end ;
constructor TProveedoresController. Create;
begin
inherited ;
FDataModule : = TDataModuleProveedores. Create( Nil ) ;
FDireccionesController : = TDireccionesContactoController. Create;
end ;
destructor TProveedoresController. Destroy;
begin
FDireccionesController : = NIL ;
inherited ;
end ;
function TProveedoresController. ElegirContacto( AContactos: IBizContacto;
AMensaje: String ; AMultiSelect: Boolean ) : IBizContacto;
var
AEditor : IEditorElegirProveedores;
begin
Result : = NIL ;
CreateEditor( 'EditorElegirProveedores' , IEditorElegirProveedores, AEditor) ;
if Assigned( AEditor) then
try
AEditor. Contactos : = AContactos;
AEditor. Controller : = Self;
AEditor. MultiSelect : = AMultiSelect;
AEditor. Mensaje : = AMensaje;
if IsPositiveResult( AEditor. ShowModal) then
Result : = AEditor. ContactosSeleccionados;
finally
AEditor. Release;
AEditor : = NIL ;
end ;
end ;
function TProveedoresController. Eliminar( AProveedor: IBizContacto; AllItems: Boolean ) : Boolean ;
//En el caso de eliminar almenos un elemento del conjunto se devuelve true
var
bEliminado: Boolean ;
begin
bEliminado : = False ;
if not Assigned( AProveedor) then
raise Exception. Create ( 'Contacto no asignado' ) ;
ShowHourglassCursor;
try
if not AProveedor. DataTable. Active then
AProveedor. DataTable. Active : = True ;
if ( AProveedor. State in dsEditModes) then
AProveedor. Cancel;
//Siempre eliminaremos el seleccionado
if EsEliminable( AProveedor) then
begin
AProveedor. Delete;
bEliminado : = True ;
end ;
//En el caso de querer eliminar todos los items del objeto AProveedor
if AllItems then
begin
with AProveedor. DataTable do
begin
First;
while not EOF do
begin
if EsEliminable( AProveedor) then
begin
AProveedor. Delete;
bEliminado : = True
end
else Next;
end ;
end ;
end ;
if bEliminado then
begin
AProveedor. DataTable. ApplyUpdates;
Result : = True ;
end
else
Result : = False ;
2013-05-10 10:59:32 +00:00
HideHourglassCursor;
except
on E: Exception do
begin
AProveedor. DataTable. CancelUpdates;
HideHourglassCursor;
if ( Pos( 'FOREIGN KEY' , E. Message ) > 0 ) then
MessageBox( 0 , 'No se puede borrar este contacto porque tiene documentos dados de alta (como facturas, recibos, etc)' , 'Atenci<63> n' , MB_ICONWARNING or MB_OK) ;
end ;
2011-11-14 17:40:41 +00:00
end ;
end ;
function TProveedoresController. EsEliminable( AProveedor: IBizContacto) : Boolean ;
begin
if not Assigned( AProveedor) then
raise Exception. Create ( 'Contacto no asignado: EsEliminable' ) ;
Result : = True ;
end ;
procedure TProveedoresController. FiltrarEjercicio( AContacto: IBizContacto) ;
var
Condicion: TDAWhereExpression;
begin
if Assigned( AContacto)
and Assigned( ( AContacto as IBizProveedor) . SubCuentas) then
begin
if ( AContacto as IBizProveedor) . SubCuentas. DataTable. Active then
( AContacto as IBizProveedor) . SubCuentas. DataTable. Active : = False ;
// Filtrar los presupuestos actuales por empresa
with ( AContacto as IBizProveedor) . SubCuentas. DataTable. DynamicWhere do
begin
// (ID_EMPRESA >= ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_SubCuentasContactoID_EJERCICIO) , NewConstant( AppFactuGES. EjercicioActivo. ID, datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
end ;
end ;
function TProveedoresController. Guardar( AContacto: IBizContacto) : Boolean ;
begin
Result : = inherited Guardar( AContacto) ;
( AContacto as IBizProveedor) . SubCuentas. DataTable. Refresh;
end ;
function TProveedoresController. Nuevo: IBizContacto;
var
AContacto : IBizProveedor;
begin
AContacto : = ( FDataModule as IDataModuleProveedores) . NewItem;
FiltrarEmpresa( AContacto) ;
2011-11-18 17:12:39 +00:00
{$IFDEF CONTABILIDAD}
FiltrarEjercicio( Result ) ;
{$ENDIF}
2011-11-14 17:40:41 +00:00
AContacto. DataTable. Active : = True ;
AContacto. Insert;
Result : = AContacto;
end ;
procedure TProveedoresController. Preview( AProveedor: IBizProveedor; AllItems: Boolean ) ;
var
AReportController : IEtiquetasContactosReportController;
ListaID: TIntegerList;
begin
AReportController : = TEtiquetasContactosReportController. Create;
ListaID : = TIntegerList. Create;
try
//Si deseamos previsualizar todos los items del objeto albaran
if AllItems then
begin
with AProveedor. DataTable do
begin
First;
while not EOF do
begin
ListaID. Add( AProveedor. ID) ;
Next;
end ;
end ;
end
//Solo previsualizamos el item seleccionado
else
ListaID. Add( AProveedor. ID) ;
AReportController. Preview( ListaID) ;
finally
AReportController : = NIL ;
FreeANDNil( ListaID) ;
end ;
end ;
procedure TProveedoresController. Print( AProveedor: IBizProveedor; AllItems: Boolean ) ;
var
AReportController : IEtiquetasContactosReportController;
ListaID: TIntegerList;
begin
AReportController : = TEtiquetasContactosReportController. Create;
ListaID : = TIntegerList. Create;
try
//Si deseamos previsualizar todos los items del objeto albaran
if AllItems then
begin
with AProveedor. DataTable do
begin
First;
while not EOF do
begin
ListaID. Add( AProveedor. ID) ;
Next;
end ;
end ;
end
//Solo previsualizamos el item seleccionado
else
ListaID. Add( AProveedor. ID) ;
AReportController. Print( ListaID) ;
finally
AReportController : = NIL ;
FreeANDNil( ListaID) ;
end ;
end ;
procedure TProveedoresController. SetIgnorarContabilidad( AProveedor: IBizProveedor; AValue: Boolean ) ;
var
AEdit: Boolean ;
begin
with AProveedor. DataTable do
begin
AEdit : = Editing;
if not AEdit then
Edit;
if AValue then
AProveedor. IGNORAR_CONTABILIDAD : = 1
else
AProveedor. IGNORAR_CONTABILIDAD : = 0 ;
Post;
if AEdit then
Edit;
end ;
end ;
procedure TProveedoresController. SetTieneSubcuenta( AProveedor: IBizProveedor; AValue: Boolean ) ;
var
AEdit: Boolean ;
begin
with AProveedor. DataTable do
begin
AEdit : = Editing;
if not AEdit then
Edit;
if AValue then
AProveedor. TIENE_SUBCUENTA : = 1
else
AProveedor. TIENE_SUBCUENTA : = 0 ;
Post;
if AEdit then
Edit;
end ;
end ;
function TProveedoresController. ValidarContacto(
AContacto: IBizContacto) : Boolean ;
begin
Result : = inherited ValidarContacto( AContacto) ;
if Result then
begin
with ( AContacto as IBizProveedor) do
begin
if ( SubCuentas. DataTable. State in dsEditModes) then
SubCuentas. DataTable. Post;
end ;
end ;
end ;
procedure TProveedoresController. Ver( AContacto: IBizContacto) ;
var
AEditor : IEditorProveedor;
begin
AEditor : = NIL ;
CreateEditor( 'EditorProveedor' , IEditorProveedor, AEditor) ;
if Assigned( AEditor) then
try
AEditor. Contacto : = AContacto;
AEditor. Controller : = Self;
AEditor. ShowModal;
finally
AEditor. Release;
AEditor : = NIL ;
end ;
end ;
procedure TProveedoresController. VerTodos( AContactos: IBizContacto) ;
var
AEditor : IEditorProveedores;
begin
AEditor : = NIL ;
CreateEditor( 'EditorProveedores' , IEditorProveedores, AEditor) ;
if Assigned( AEditor) then
with AEditor do
begin
Contactos : = AContactos;
Controller : = Self;
MultiSelect : = True ;
ShowEmbedded;
end ;
end ;
end .