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, 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; 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; 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.