384 lines
11 KiB
ObjectPascal
384 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
|
||
|
|
|
||
|
|
uses
|
||
|
|
Classes, SysUtils, cxControls, Dialogs, uDataModuleProveedores, uEditorRegistryUtils,
|
||
|
|
uDataTableUtils, uDADataTable, DB, schContactosClient_Intf, uListadosContactosReportController,
|
||
|
|
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);
|
||
|
|
FiltrarEjercicio(Result);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TProveedoresController.BuscarTodos: IBizContacto;
|
||
|
|
begin
|
||
|
|
Result := (FDataModule as IDataModuleProveedores).GetItems;
|
||
|
|
FiltrarEmpresa(Result);
|
||
|
|
FiltrarEjercicio(Result);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TProveedoresController.BuscarTodosTiendaWeb: IBizProveedor;
|
||
|
|
begin
|
||
|
|
Result := (FDataModule as IDataModuleProveedores).GetItemsTiendaWeb;
|
||
|
|
FiltrarEmpresa(Result);
|
||
|
|
FiltrarEjercicio(Result);
|
||
|
|
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;
|
||
|
|
|
||
|
|
finally
|
||
|
|
HideHourglassCursor;
|
||
|
|
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);
|
||
|
|
FiltrarEjercicio(Result);
|
||
|
|
AContacto.DataTable.Active := True;
|
||
|
|
AContacto.Insert;
|
||
|
|
Result := AContacto;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TProveedoresController.Preview(AProveedor: IBizProveedor; AllItems: Boolean);
|
||
|
|
var
|
||
|
|
AReportController : IListadosContactosReportController;
|
||
|
|
ListaID: TIntegerList;
|
||
|
|
|
||
|
|
begin
|
||
|
|
AReportController := TListadosContactosReportController.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.PreviewInformeEtiquetas(ListaID);
|
||
|
|
finally
|
||
|
|
AReportController := NIL;
|
||
|
|
FreeANDNil(ListaID);
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TProveedoresController.Print(AProveedor: IBizProveedor; AllItems: Boolean);
|
||
|
|
var
|
||
|
|
AReportController : IListadosContactosReportController;
|
||
|
|
ListaID: TIntegerList;
|
||
|
|
|
||
|
|
begin
|
||
|
|
AReportController := TListadosContactosReportController.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.PrintInformeEtiquetas(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.
|