2007-09-12 14:11:44 +00:00
unit uContactosController;
interface
uses
Windows, Forms, Classes, Controls, Contnrs, SysUtils, uDADataTable,
uBizContactos, uBizContactosDatosBancarios, uIDataModuleContactos;
type
IContactosController = interface
[ '{43F9A4ED-6563-4F95-9A56-330CF9C66731}' ]
function Buscar( const ID: Integer ) : IBizContacto;
function BuscarTodos: IBizContacto;
procedure Ver( AContacto : IBizContacto) ;
procedure VerTodos( AContactos: IBizContacto) ;
function Nuevo : IBizContacto;
procedure Anadir( AContacto : IBizContacto) ;
procedure Eliminar( const ID : Integer ) ; overload ;
function Eliminar( AContacto : IBizContacto) : Boolean ; overload ;
function Guardar( AContacto : IBizContacto) : Boolean ;
procedure DescartarCambios( AContacto : IBizContacto) ;
function Existe( const ID: Integer ) : Boolean ;
function Duplicar( AContacto : IBizContacto) : IBizContacto;
function Localizar( AContactos: IBizContacto; const ID : Integer ) : Boolean ;
function ElegirContacto( AContactos : IBizContacto;
AMensaje: String ; AMultiSelect: Boolean ) : IBizContacto;
function ExtraerSeleccionados( AContactos: IBizContacto) : IBizContacto;
end ;
TContactosController = class( TInterfacedObject, IContactosController)
protected
FDataModule : IDataModuleContactos;
procedure FiltrarEmpresa( AContacto : IBizContacto) ; virtual ;
function _Vacio : IBizContacto; virtual ;
function ValidarContacto( AContacto : IBizContacto) : Boolean ; virtual ;
public
constructor Create; virtual ;
destructor Destroy; override ;
procedure Eliminar( const ID : Integer ) ; overload ; virtual ;
function Eliminar( AContacto : IBizContacto) : Boolean ; overload ; virtual ;
function Guardar( AContacto : IBizContacto) : Boolean ;
procedure DescartarCambios( AContacto : IBizContacto) ; virtual ;
function Existe( const ID: Integer ) : Boolean ; virtual ;
procedure Anadir( AContacto : IBizContacto) ; virtual ;
function Duplicar( AContacto: IBizContacto) : IBizContacto; virtual ;
function ExtraerSeleccionados( AContactos: IBizContacto) : IBizContacto; virtual ;
function Localizar( AContactos: IBizContacto; const ID : Integer ) : Boolean ;
// Se implementa en los controladores hijos
function Buscar( const ID: Integer ) : IBizContacto; virtual ; abstract ;
function BuscarTodos: IBizContacto; virtual ; abstract ;
function Nuevo : IBizContacto; virtual ; abstract ;
procedure Ver( AContacto : IBizContacto) ; virtual ; abstract ;
procedure VerTodos( AContactos: IBizContacto) ; virtual ; abstract ;
function ElegirContacto( AContactos : IBizContacto;
AMensaje: String ; AMultiSelect: Boolean ) : IBizContacto; virtual ; abstract ;
end ;
implementation
uses
Dialogs, uEditorRegistryUtils, cxControls, DB, uDAInterfaces, uDataTableUtils,
2007-10-15 07:53:45 +00:00
schContactosClient_Intf, uFactuGES_App;
2007-09-12 14:11:44 +00:00
{ TContactosController }
procedure TContactosController. Anadir( AContacto: IBizContacto) ;
begin
AContacto. Insert;
end ;
function TContactosController. Duplicar( AContacto: IBizContacto) : IBizContacto;
begin
Result : = Self. _Vacio;
ShowHourglassCursor;
try
DuplicarRegistros( AContacto. DataTable, Result . DataTable, mdrActual) ;
DuplicarRegistros( AContacto. DatosBancarios. DataTable, Result . DatosBancarios. DataTable, mdrTodos) ;
if Assigned( AContacto. Direcciones) then
DuplicarRegistros( AContacto. Direcciones. DataTable, Result . Direcciones. DataTable, mdrTodos) ;
// Hay que dejar algunos campos como si fuera un contacto nuevo
Result . Edit;
with Result do
begin
2007-10-03 10:27:58 +00:00
// OJO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!111
//ID_EMPRESA := dmUsuarios.IDEmpresaActual;
//USUARIO := dmUsuarios.LoginInfo.Usuario;
2007-09-12 14:11:44 +00:00
end ;
Result . Post;
finally
HideHourglassCursor;
end ;
end ;
constructor TContactosController. Create;
begin
FDataModule : = NIL ;
end ;
procedure TContactosController. DescartarCambios( AContacto: IBizContacto) ;
begin
if not Assigned( AContacto) then
raise Exception. Create ( 'Contacto no asignado' ) ;
ShowHourglassCursor;
try
if ( AContacto. State in dsEditModes) then
AContacto. Cancel;
AContacto. DataTable. CancelUpdates;
finally
HideHourglassCursor;
end ;
end ;
destructor TContactosController. Destroy;
begin
FDataModule : = NIL ;
inherited ;
end ;
function TContactosController. Eliminar( AContacto: IBizContacto) : Boolean ;
begin
Result : = False ;
if not Assigned( AContacto) then
raise Exception. Create ( 'Contacto no asignado' ) ;
ShowHourglassCursor;
try
if ( AContacto. State in dsEditModes) then
AContacto. Cancel;
AContacto. Delete;
AContacto. DataTable. ApplyUpdates;
HideHourglassCursor;
Result : = True ;
except
on E: Exception do
begin
AContacto. 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 presupuestos, albaranes, facturas, etc)' , 'Atenci<63> n' , MB_ICONWARNING or MB_OK) ;
end ;
end ;
end ;
procedure TContactosController. Eliminar( const ID: Integer ) ;
var
AContacto : IBizContacto;
begin
AContacto : = Buscar( ID) ;
if not Assigned( AContacto) then
raise Exception. Create( Format( 'No se ha encontrado el contacto con ID = %d' , [ ID] ) ) ;
Eliminar( AContacto) ;
AContacto : = NIL ;
end ;
function TContactosController. Existe( const ID: Integer ) : Boolean ;
var
AContacto : IBizContacto;
begin
try
AContacto : = Buscar( ID) ;
Result : = Assigned( AContacto) and ( AContacto. ID = ID) ;
finally
AContacto : = NIL ;
end ;
end ;
function TContactosController. ExtraerSeleccionados(
AContactos: IBizContacto) : IBizContacto;
var
ASeleccionados : IBizContacto;
begin
ASeleccionados : = Self. Buscar( ID_NULO) ;
2007-10-03 10:27:58 +00:00
CopyDataTable2( AContactos. DataTable, ASeleccionados. DataTable, True ) ;
2007-09-12 14:11:44 +00:00
Result : = ASeleccionados;
end ;
function TContactosController. Guardar( AContacto: IBizContacto) : Boolean ;
var
2007-10-15 07:53:45 +00:00
dtDetails : TList;
i : integer ;
2007-09-12 14:11:44 +00:00
begin
Result : = False ;
if ValidarContacto( AContacto) then
begin
ShowHourglassCursor;
2007-10-15 07:53:45 +00:00
if AContacto. EsNuevo then
begin
AContacto. Edit;
AContacto. ID_EMPRESA : = AppFactuGES. EmpresaActiva. ID;
AContacto. Post;
end ;
dtDetails : = AContacto. DataTable. GetDetailDataTables;
for i : = 0 to dtDetails. Count - 1 do
begin
if ( TDADataTable( dtDetails. Items[ i] ) ) . State in dsEditModes then
( TDADataTable( dtDetails. Items[ i] ) ) . Post;
end ;
2007-09-12 14:11:44 +00:00
try
AContacto. DataTable. ApplyUpdates;
Result : = True ;
finally
HideHourglassCursor;
end ;
end ;
end ;
function TContactosController. Localizar( AContactos: IBizContacto;
const ID: Integer ) : Boolean ;
begin
Result : = True ;
ShowHourglassCursor;
try
with AContactos. DataTable do
begin
DisableControls;
First;
if not Locate( fld_ContactosID, ID, [ ] ) then
Result : = False ;
EnableControls;
end ;
finally
HideHourglassCursor;
end ;
end ;
function TContactosController. ValidarContacto( AContacto: IBizContacto) : Boolean ;
begin
Result : = False ;
if not Assigned( AContacto) then
raise Exception. Create ( 'Contacto no asignado' ) ;
if ( AContacto. DataTable. State in dsEditModes) then
AContacto. DataTable. Post;
if Length( AContacto. NOMBRE) = 0 then
raise Exception. Create( 'Debe indicar al menos el nombre de este contacto.' ) ;
// Asegurarse de valores en campos "autom<6F> ticos"
2007-10-03 10:27:58 +00:00
// OJOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
{ AContacto. Edit;
2007-09-12 14:11:44 +00:00
AContacto. USUARIO : = dmUsuarios. LoginInfo. Usuario;
2007-10-03 10:27:58 +00:00
AContacto. Post; }
2007-09-12 14:11:44 +00:00
Result : = True ;
end ;
function TContactosController. _Vacio: IBizContacto;
begin
Result : = Buscar( ID_NULO) ;
end ;
procedure TContactosController. FiltrarEmpresa( AContacto: IBizContacto) ;
begin
if AContacto. DataTable. Active then
AContacto. DataTable. Active : = False ;
// Filtrar los contactos actuales por empresa
2007-09-24 11:09:48 +00:00
with AContacto. DataTable. DynamicWhere do
2007-09-12 14:11:44 +00:00
begin
2007-09-24 11:09:48 +00:00
// (ID = :ID)
2007-10-03 10:27:58 +00:00
// OJOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
{ Expression : = NewBinaryExpression( NewField( '' , fld_ContactosID_EMPRESA) ,
NewConstant( dmUsuarios. IDEmpresaActual, datInteger) , dboEqual) ; }
2007-09-12 14:11:44 +00:00
end ;
end ;
end .