Tecsitel_FactuGES2/Source/Modulos/Contactos/Controller/uProveedoresController.pas

489 lines
15 KiB
ObjectPascal
Raw Blame History

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.