git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@935 0c75b7a4-871f-7646-8a2f-f78d34cc349f
489 lines
15 KiB
ObjectPascal
489 lines
15 KiB
ObjectPascal
unit uProveedoresController;
|
||
|
||
interface
|
||
|
||
uses
|
||
Classes, uCustomEditor, uContactosController, uBizContactos,
|
||
uBizDireccionesContacto, uDireccionesContactoController,
|
||
uIEditorProveedores, uIEditorProveedor, uIDataModuleContactos,
|
||
uIDataModuleProveedores;
|
||
|
||
type
|
||
IProveedoresController = interface(IContactosController)
|
||
['{50F10D01-5120-470D-A61D-99FE8A76DF93}']
|
||
function BuscarSubcontratas: IBizProveedor;
|
||
function BuscarTodosTiendaWeb: IBizProveedor;
|
||
function ElegirDireccionEntrega(AProveedor: IBizProveedor; AMensaje: String): IBizDireccionesContacto;
|
||
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);
|
||
function DarListaDescripcionesProveedores: TStringList;
|
||
procedure VerPedidosDeProveedor(AProveedor : IBizProveedor);
|
||
procedure VerAlbaranesDeProveedor(AProveedor : IBizProveedor);
|
||
procedure VerDevolucionesDeProveedor(AProveedor : IBizProveedor);
|
||
procedure VerFacturasDeProveedor(AProveedor : IBizProveedor);
|
||
procedure VerRecibosDeProveedor(AProveedor : IBizProveedor);
|
||
function DarListaCuentasBancarias(const IdProveedor: Integer): TStringList;
|
||
end;
|
||
|
||
TProveedoresController = class(TContactosController, IProveedoresController)
|
||
protected
|
||
FDireccionesController : IDireccionesContactoController;
|
||
public
|
||
constructor Create; override;
|
||
destructor Destroy; override;
|
||
|
||
function Buscar(const ID: Integer): IBizContacto; override;
|
||
function BuscarTodos: IBizContacto; override;
|
||
function BuscarTodosTiendaWeb: IBizProveedor;
|
||
function BuscarSubcontratas: IBizProveedor;
|
||
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 ElegirDireccionEntrega(AProveedor: IBizProveedor;
|
||
AMensaje: String): IBizDireccionesContacto;
|
||
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);
|
||
function DarListaDescripcionesProveedores: TStringList;
|
||
procedure VerPedidosDeProveedor(AProveedor : IBizProveedor);
|
||
procedure VerAlbaranesDeProveedor(AProveedor : IBizProveedor);
|
||
procedure VerDevolucionesDeProveedor(AProveedor : IBizProveedor);
|
||
procedure VerFacturasDeProveedor(AProveedor : IBizProveedor);
|
||
procedure VerRecibosDeProveedor(AProveedor : IBizProveedor);
|
||
function DarListaCuentasBancarias(const IdProveedor: Integer): TStringList;
|
||
end;
|
||
|
||
implementation
|
||
|
||
uses
|
||
SysUtils, Windows, cxControls, Dialogs, uDataModuleProveedores, uEditorRegistryUtils,
|
||
uDataTableUtils, uDADataTable, DB, schContactosClient_Intf, uEtiquetasContactosReportController,
|
||
uIEditorElegirProveedores, Controls, uIEditorElegirDireccionEntrega,
|
||
uEditorGridBase, uDAInterfaces, uIntegerListUtils, uFactuGES_App,
|
||
uPlugins_Intf, uModuleController;
|
||
|
||
{ TProveedoresController }
|
||
|
||
function TProveedoresController.Buscar(const ID: Integer): IBizContacto;
|
||
begin
|
||
Result := (FDataModule as IDataModuleProveedores).GetItem(ID);
|
||
FiltrarEmpresa(Result);
|
||
end;
|
||
|
||
function TProveedoresController.BuscarSubcontratas: IBizProveedor;
|
||
var
|
||
Condicion: TDAWhereExpression;
|
||
begin
|
||
Result := BuscarTodos as IBizProveedor;
|
||
with Result.DataTable.DynamicWhere do
|
||
begin
|
||
Condicion := NewBinaryExpression(NewField('', fld_ProveedoresSUBCONTRATA), NewConstant(1, datInteger), dboEqual);
|
||
Clear;
|
||
Expression := Condicion
|
||
end;
|
||
end;
|
||
|
||
function TProveedoresController.BuscarTodos: IBizContacto;
|
||
begin
|
||
Result := (FDataModule as IDataModuleProveedores).GetItems;
|
||
FiltrarEmpresa(Result);
|
||
end;
|
||
|
||
function TProveedoresController.BuscarTodosTiendaWeb: IBizProveedor;
|
||
begin
|
||
Result := (FDataModule as IDataModuleProveedores).GetItemsTiendaWeb;
|
||
FiltrarEmpresa(Result);
|
||
end;
|
||
|
||
constructor TProveedoresController.Create;
|
||
begin
|
||
inherited;
|
||
FDataModule := TDataModuleProveedores.Create(Nil);
|
||
FDireccionesController := TDireccionesContactoController.Create;
|
||
end;
|
||
|
||
function TProveedoresController.DarListaCuentasBancarias(const IdProveedor: Integer): TStringList;
|
||
var
|
||
AProveedor: IBizProveedor;
|
||
Aux : String;
|
||
|
||
begin
|
||
AProveedor := (Buscar(IdProveedor) as IBizProveedor);
|
||
AProveedor.DataTable.Active := True;
|
||
|
||
Result := TStringList.Create;
|
||
ShowHourglassCursor;
|
||
try
|
||
with Result do
|
||
begin
|
||
AProveedor.DatosBancarios.DataTable.First;
|
||
while not AProveedor.DatosBancarios.DataTable.EOF do
|
||
begin
|
||
Aux := Format('N<> de cuenta: %s %s %s %s - Titular: %s ', [AProveedor.DatosBancarios.ENTIDAD,
|
||
AProveedor.DatosBancarios.SUCURSAL, AProveedor.DatosBancarios.DC, AProveedor.DatosBancarios.CUENTA, AProveedor.DatosBancarios.TITULAR]);
|
||
Add(Format('%s=%d', [Aux, AProveedor.DatosBancarios.ID]));
|
||
AProveedor.DatosBancarios.DataTable.Next;
|
||
end;
|
||
end;
|
||
finally
|
||
AProveedor := NIL;
|
||
HideHourglassCursor;
|
||
end;
|
||
end;
|
||
|
||
function TProveedoresController.DarListaDescripcionesProveedores: TStringList;
|
||
begin
|
||
Result := (FDataModule as IDataModuleProveedores).DarListaDescripcionesProveedores;
|
||
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.ElegirDireccionEntrega(AProveedor: IBizProveedor;
|
||
AMensaje: String): IBizDireccionesContacto;
|
||
var
|
||
AEditor : IEditorElegirDireccionEntrega;
|
||
begin
|
||
Result := NIL;
|
||
|
||
CreateEditor('EditorElegirDireccionEntrega', IEditorElegirDireccionEntrega, AEditor);
|
||
if Assigned(AEditor) then
|
||
try
|
||
AEditor.Contacto := AProveedor;
|
||
AEditor.Mensaje := AMensaje;
|
||
if IsPositiveResult(AEditor.ShowModal) then
|
||
Result := AEditor.DireccionSeleccionada;
|
||
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 pueden borrar el/los proveedor/es seleccionado/s porque, alguno/s de ellos tiene documentos dados de alta en la aplicaci<63>n (pedidos, albaranes, facturas, 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;
|
||
|
||
function TProveedoresController.Nuevo: IBizContacto;
|
||
var
|
||
AContacto : IBizProveedor;
|
||
begin
|
||
AContacto := (FDataModule as IDataModuleProveedores).NewItem;
|
||
FiltrarEmpresa(AContacto);
|
||
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.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.VerAlbaranesDeProveedor(
|
||
AProveedor: IBizProveedor);
|
||
var
|
||
AModule : TModuleController;
|
||
APlugin : IMCAlbaranesProveedor;
|
||
begin
|
||
if not Assigned(AProveedor) then
|
||
raise Exception.Create ('Proveedor no asignado (VerAlbaranesDeProveedor)');
|
||
|
||
if AProveedor.DataTable.Active then
|
||
AProveedor.DataTable.Active := True;
|
||
|
||
AModule := AppFactuGES.GetModule(MODULENAME_ALBARANES_PROVEEDOR);
|
||
if Assigned(AModule) then
|
||
try
|
||
if Supports(AModule, IMCAlbaranesProveedor, APlugin) then
|
||
APlugin.VerAlbaranes(AProveedor.ID, AProveedor.NOMBRE);
|
||
finally
|
||
APlugin := NIL;
|
||
end;
|
||
end;
|
||
|
||
procedure TProveedoresController.VerDevolucionesDeProveedor(
|
||
AProveedor: IBizProveedor);
|
||
var
|
||
AModule : TModuleController;
|
||
APlugin : IMCAlbaranesProveedor;
|
||
begin
|
||
if not Assigned(AProveedor) then
|
||
raise Exception.Create ('Proveedor no asignado (VerDevolucionesDeProveedor)');
|
||
|
||
if AProveedor.DataTable.Active then
|
||
AProveedor.DataTable.Active := True;
|
||
|
||
AModule := AppFactuGES.GetModule(MODULENAME_ALBARANES_PROVEEDOR);
|
||
if Assigned(AModule) then
|
||
try
|
||
if Supports(AModule, IMCAlbaranesProveedor, APlugin) then
|
||
APlugin.VerDevoluciones(AProveedor.ID, AProveedor.NOMBRE);
|
||
finally
|
||
APlugin := NIL;
|
||
end;
|
||
end;
|
||
|
||
procedure TProveedoresController.VerFacturasDeProveedor(
|
||
AProveedor: IBizProveedor);
|
||
var
|
||
AModule : TModuleController;
|
||
APlugin : IMCFacturasProveedor;
|
||
begin
|
||
if not Assigned(AProveedor) then
|
||
raise Exception.Create ('Proveedor no asignado (VerFacturasDeProveedor)');
|
||
|
||
if AProveedor.DataTable.Active then
|
||
AProveedor.DataTable.Active := True;
|
||
|
||
AModule := AppFactuGES.GetModule(MODULENAME_FACTURAS_PROVEEDOR);
|
||
if Assigned(AModule) then
|
||
try
|
||
if Supports(AModule, IMCFacturasProveedor, APlugin) then
|
||
APlugin.VerFacturas(AProveedor.ID, AProveedor.NOMBRE);
|
||
finally
|
||
APlugin := NIL;
|
||
end;
|
||
end;
|
||
|
||
procedure TProveedoresController.VerPedidosDeProveedor(
|
||
AProveedor: IBizProveedor);
|
||
var
|
||
AModule : TModuleController;
|
||
APlugin : IMCPedidosProveedor;
|
||
begin
|
||
if not Assigned(AProveedor) then
|
||
raise Exception.Create ('Proveedor no asignado (VerPedidosDeProveedor)');
|
||
|
||
if AProveedor.DataTable.Active then
|
||
AProveedor.DataTable.Active := True;
|
||
|
||
AModule := AppFactuGES.GetModule(MODULENAME_PEDIDOS_PROVEEDOR);
|
||
if Assigned(AModule) then
|
||
try
|
||
if Supports(AModule, IMCPedidosProveedor, APlugin) then
|
||
APlugin.VerPedidos(AProveedor.ID, AProveedor.NOMBRE);
|
||
finally
|
||
APlugin := NIL;
|
||
end;
|
||
end;
|
||
|
||
procedure TProveedoresController.VerRecibosDeProveedor(
|
||
AProveedor: IBizProveedor);
|
||
var
|
||
AModule : TModuleController;
|
||
APlugin : IMCRecibosProveedor;
|
||
begin
|
||
if not Assigned(AProveedor) then
|
||
raise Exception.Create ('Proveedor no asignado (VerRecibosDeProveedor)');
|
||
|
||
if AProveedor.DataTable.Active then
|
||
AProveedor.DataTable.Active := True;
|
||
|
||
AModule := AppFactuGES.GetModule(MODULENAME_RECIBOS_PROVEEDOR);
|
||
if Assigned(AModule) then
|
||
try
|
||
if Supports(AModule, IMCRecibosProveedor, APlugin) then
|
||
APlugin.VerRecibos(AProveedor.ID, AProveedor.NOMBRE);
|
||
finally
|
||
APlugin := 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.
|