2007-09-12 14:11:44 +00:00
unit uClientesController;
interface
uses
uCustomEditor,
uContactosController, uBizContactos, uBizDireccionesContacto,
uIEditorClientes, uIEditorCliente, uIDataModuleContactos, uIDataModuleClientes,
uDireccionesContactoController;
type
IClientesController = interface( IContactosController)
[ '{AAC3C51A-37F7-4961-B39F-FBC6B6A2B0F1}' ]
function BuscarTodosTiendaWeb: IBizCliente;
function TieneDatosBancarios( ACliente: IBizCliente) : Boolean ;
function ElegirDireccionEntrega( ADirecciones: IBizDireccionesContacto; AMensaje: String ) : IBizDireccionesContacto;
function EsEliminable( ACliente: IBizContacto) : Boolean ;
function Eliminar( ACliente: IBizContacto; AllItems: Boolean = false ) : Boolean ; overload ;
procedure Preview( ACliente : IBizCliente; AllItems: Boolean = false ) ;
procedure Print( ACliente : IBizCliente; AllItems: Boolean = false ) ;
end ;
TClientesController = class( TContactosController, IClientesController)
protected
FDireccionesController : IDireccionesContactoController;
function ValidarContacto( AContacto: IBizContacto) : Boolean ; override ;
public
constructor Create; override ;
destructor Destroy; override ;
function Duplicar( AContacto: IBizContacto) : IBizContacto; override ;
function Buscar( const ID: Integer ) : IBizContacto; override ;
function BuscarTodos: IBizContacto; override ;
function BuscarTodosTiendaWeb: IBizCliente;
function Nuevo : IBizContacto; override ;
procedure Ver( AContacto : IBizContacto) ; override ;
procedure VerTodos( AContactos: IBizContacto) ; override ;
function ElegirContacto( AContactos : IBizContacto;
AMensaje: String ; AMultiSelect: Boolean ) : IBizContacto; override ;
function TieneDatosBancarios( ACliente: IBizCliente) : Boolean ;
function ElegirDireccionEntrega( ADirecciones: IBizDireccionesContacto;
AMensaje: String ) : IBizDireccionesContacto;
function EsEliminable( ACliente: IBizContacto) : Boolean ;
function Eliminar( ACliente: IBizContacto; AllItems: Boolean = false ) : Boolean ; overload ;
procedure Preview( ACliente : IBizCliente; AllItems: Boolean = false ) ;
procedure Print( ACliente : IBizCliente; AllItems: Boolean = false ) ;
end ;
implementation
uses
Forms, Classes, Windows, SysUtils, Controls, cxControls, uDialogUtils, uDataModuleClientes, uEditorRegistryUtils,
uDataTableUtils, uDADataTable, DB, schContactosClient_Intf, uEtiquetasContactosReportController,
2007-10-03 10:27:58 +00:00
uIEditorElegirClientes, uIEditorElegirDireccionEntrega, uEditorGridBase,
Dialogs;
2007-09-12 14:11:44 +00:00
{ TClientesController }
function TClientesController. Buscar( const ID: Integer ) : IBizContacto;
begin
Result : = ( FDataModule as IDataModuleClientes) . GetItem( ID) ;
FiltrarEmpresa( Result ) ;
end ;
function TClientesController. BuscarTodos: IBizContacto;
begin
Result : = ( FDataModule as IDataModuleClientes) . GetItems;
FiltrarEmpresa( Result ) ;
end ;
function TClientesController. BuscarTodosTiendaWeb: IBizCliente;
begin
Result : = ( FDataModule as IDataModuleClientes) . GetItemsTiendaWeb;
FiltrarEmpresa( Result ) ;
end ;
constructor TClientesController. Create;
begin
inherited ;
FDataModule : = TDataModuleClientes. Create( Nil ) ;
FDireccionesController : = TDireccionesContactoController. Create;
end ;
destructor TClientesController. Destroy;
begin
FDireccionesController : = NIL ;
inherited ;
end ;
function TClientesController. Duplicar( AContacto: IBizContacto) : IBizContacto;
begin
Result : = inherited Duplicar( AContacto) ;
if Assigned( ( Result as IBizCliente) . Descuentos) then
DuplicarRegistros( ( AContacto as IBizCliente) . Descuentos. DataTable, ( Result as IBizCliente) . Descuentos. DataTable, mdrTodos) ;
end ;
function TClientesController. ElegirContacto( AContactos : IBizContacto;
AMensaje: String ; AMultiSelect: Boolean ) : IBizContacto;
var
AEditor : IEditorElegirClientes;
begin
Result : = NIL ;
CreateEditor( 'EditorElegirClientes' , IEditorElegirClientes, AEditor) ;
try
with AEditor do
begin
Contactos : = AContactos;
Controller : = Self;
MultiSelect : = AMultiSelect;
Mensaje : = AMensaje;
if IsPositiveResult( ShowModal) then
Result : = ContactosSeleccionados;
Release;
end ;
finally
AEditor : = NIL ;
end ;
end ;
function TClientesController. ElegirDireccionEntrega( ADirecciones: IBizDireccionesContacto;
AMensaje: String ) : IBizDireccionesContacto;
var
AEditor : IEditorElegirDireccionEntrega;
begin
Result : = NIL ;
CreateEditor( 'EditorElegirDireccionEntrega' , IEditorElegirDireccionEntrega, AEditor) ;
try
with AEditor do
begin
Direccion : = ADirecciones;
Mensaje : = AMensaje;
if IsPositiveResult( ShowModal) then
Result : = DireccionSeleccionada;
Release;
end ;
finally
AEditor : = NIL ;
end ;
end ;
function TClientesController. Eliminar( ACliente: IBizContacto; AllItems: Boolean ) : Boolean ;
//En el caso de eliminar almenos un elemento del conjunto se devuelve true
var
bEliminado: Boolean ;
begin
Result : = False ;
if not Assigned( ACliente) then
raise Exception. Create ( 'Contacto no asignado' ) ;
ShowHourglassCursor;
try
if not ACliente. DataTable. Active then
ACliente. DataTable. Active : = True ;
if ( ACliente. State in dsEditModes) then
ACliente. Cancel;
//Siempre eliminaremos el seleccionado
if EsEliminable( ACliente) then
begin
ACliente. Delete;
bEliminado : = True ;
end ;
//En el caso de querer eliminar todos los items del objeto ACliente
if AllItems then
begin
with ACliente. DataTable do
begin
First;
while not EOF do
begin
if EsEliminable( ACliente) then
begin
ACliente. Delete;
bEliminado : = True
end
else Next;
end ;
end ;
end ;
if bEliminado then
begin
ACliente. DataTable. ApplyUpdates;
Result : = True ;
end
else
Result : = False ;
finally
HideHourglassCursor;
end ;
end ;
function TClientesController. EsEliminable( ACliente: IBizContacto) : Boolean ;
begin
if not Assigned( ACliente) then
raise Exception. Create ( 'Contacto no asignado: EsEliminable' ) ;
Result : = True ;
end ;
function TClientesController. Nuevo: IBizContacto;
var
AContacto : IBizCliente;
begin
AContacto : = ( FDataModule as IDataModuleClientes) . NewItem;
FiltrarEmpresa( AContacto) ;
AContacto. DataTable. Active : = True ;
AContacto. Insert;
Result : = AContacto;
end ;
procedure TClientesController. Preview( ACliente: IBizCliente; AllItems: Boolean ) ;
var
AReportController : IEtiquetasContactosReportController;
ListaID: TStringList;
begin
AReportController : = TEtiquetasContactosReportController. Create;
try
ListaID : = TStringList. Create;
//Si deseamos previsualizar todos los items del objeto albaran
if AllItems then
begin
with ACliente. DataTable do
begin
First;
while not EOF do
begin
ListaID. Add( IntToStr( ACliente. ID) ) ;
Next;
end ;
end ;
end
//Solo previsualizamos el item seleccionado
else
ListaID. Add( IntToStr( ACliente. ID) ) ;
AReportController. Preview( ListaID. CommaText) ;
finally
AReportController : = NIL ;
ListaID. Free;
end ;
end ;
procedure TClientesController. Print( ACliente: IBizCliente; AllItems: Boolean ) ;
var
AReportController : IEtiquetasContactosReportController;
ListaID: TStringList;
begin
AReportController : = TEtiquetasContactosReportController. Create;
try
ListaID : = TStringList. Create;
//Si deseamos previsualizar todos los items del objeto albaran
if AllItems then
begin
with ACliente. DataTable do
begin
First;
while not EOF do
begin
ListaID. Add( IntToStr( ACliente. ID) ) ;
Next;
end ;
end ;
end
//Solo previsualizamos el item seleccionado
else
ListaID. Add( IntToStr( ACliente. ID) ) ;
AReportController. Print( ListaID. CommaText) ;
finally
AReportController : = NIL ;
ListaID. Free;
end ;
end ;
function TClientesController. TieneDatosBancarios(
ACliente: IBizCliente) : Boolean ;
begin
Result : = False ;
if not Assigned( ACliente) then
raise Exception. Create ( 'Cliente no asignado (TieneDatosBancarios)' ) ;
if ACliente. DataTable. Active then
ACliente. DataTable. Active : = True ;
with ACliente. DatosBancarios do
begin
Result : = ( DataTable. RecordCount > 0 ) and
(
( Length( ENTIDAD) > 0 ) and
( Length( SUCURSAL) > 0 ) and
( Length( DC) > 0 ) and
( Length( CUENTA) > 0 )
) ;
end ;
end ;
function TClientesController. ValidarContacto( AContacto: IBizContacto) : Boolean ;
begin
Result : = inherited ValidarContacto( AContacto) ;
if Result then
begin
with ( AContacto as IBizCliente) do
begin
if ( BLOQUEADO = 0 ) then
begin
Edit;
MOTIVO_BLOQUEO : = '' ;
Post;
end ;
if ( TIENDA_WEB = 1 ) and ( Length( EMAIL_1) = 0 ) then
begin
{ ShowWarningMessage( 'Acceso a la tienda web' ,
'Para que el cliente pueda tener acceso a la tienda web es necesario indicar una direcci<63> n de e-mail en el campo ' 'Correo de trabajo' '' +
#10 #13 + #10 #13 +
'Por favor, indique una direcci<63> n o desactive el acceso a la tienda.' ) ;
Result : = False ; }
raise Exception. Create( 'Para que el cliente pueda tener acceso a la tienda web es necesario indicar una direcci<63> n de e-mail en el campo ' 'Correo de trabajo' '' +
#10 #13 + #10 #13 +
'Por favor, indique una direcci<63> n o desactive el acceso a la tienda.' ) ;
end ;
end ;
if Result and ( AContacto. Direcciones. RecordCount = 0 ) then
if ( ShowConfirmMessage( 'El cliente no tiene direcciones asociadas' ,
AContacto. NOMBRE + ' no tiene ninguna direcci<63> n de env<6E> o dada de alta, ' + #10 #13 +
'<27> Desea utilizar el domicilio fiscal para dar de alta una direcci<63> n de entrega?' ) = IDYES) then
begin
FDireccionesController. CopiarDireccionFiscal( AContacto, AContacto. Direcciones) ;
FDireccionesController. Ver( AContacto. Direcciones) ;
end ;
end ;
end ;
procedure TClientesController. Ver( AContacto: IBizContacto) ;
var
AEditor : IEditorCliente;
2007-10-03 10:27:58 +00:00
AItem : IBizCliente;
2007-09-12 14:11:44 +00:00
begin
AEditor : = NIL ;
ShowHourglassCursor;
try
2007-10-03 10:27:58 +00:00
AItem : = ( FDataModule as IDataModuleClientes) . GetItem( AContacto. ID) ;
AItem. DataTable. Active : = True ;
CreateEditor( 'EditorCliente' , IEditorCliente, AEditor) ;
with AEditor do
begin
Contacto : = AItem;
Controller : = Self;
end ;
2007-09-12 14:11:44 +00:00
finally
HideHourglassCursor;
end ;
if Assigned( AEditor) then
try
2007-10-03 10:27:58 +00:00
AEditor. Show;
//AEditor.Release;
2007-09-12 14:11:44 +00:00
finally
AEditor : = NIL ;
end ;
end ;
procedure TClientesController. VerTodos( AContactos: IBizContacto) ;
var
AEditor : IEditorClientes;
begin
CreateEditor( 'EditorClientes' , IEditorClientes, AEditor) ;
with AEditor do
begin
Contactos : = AContactos;
Controller : = Self;
MultiSelect : = True ;
ShowEmbedded;
end ;
end ;
end .