git-svn-id: https://192.168.0.254/svn/Proyectos.AbetoDesign_FactuGES/trunk@58 93f398dd-4eb6-7a46-baf6-13f46f578da2
405 lines
11 KiB
ObjectPascal
405 lines
11 KiB
ObjectPascal
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
|
||
{$INCLUDE ..\..\..\FactuGES.inc}
|
||
|
||
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);
|
||
|
||
{$IFDEF CONTABILIDAD}
|
||
FiltrarEjercicio(Result);
|
||
{$ENDIF}
|
||
end;
|
||
|
||
function TProveedoresController.BuscarTodos: IBizContacto;
|
||
begin
|
||
Result := (FDataModule as IDataModuleProveedores).GetItems;
|
||
FiltrarEmpresa(Result);
|
||
|
||
{$IFDEF CONTABILIDAD}
|
||
FiltrarEjercicio(Result);
|
||
{$ENDIF}
|
||
end;
|
||
|
||
function TProveedoresController.BuscarTodosTiendaWeb: IBizProveedor;
|
||
begin
|
||
Result := (FDataModule as IDataModuleProveedores).GetItemsTiendaWeb;
|
||
FiltrarEmpresa(Result);
|
||
|
||
{$IFDEF CONTABILIDAD}
|
||
FiltrarEjercicio(Result);
|
||
{$ENDIF}
|
||
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;
|
||
|
||
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;
|
||
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);
|
||
|
||
{$IFDEF CONTABILIDAD}
|
||
FiltrarEjercicio(Result);
|
||
{$ENDIF}
|
||
|
||
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.
|