unit uArticulosProveedorController; interface uses Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem, uIDataModuleArticulos, uBizArticulos, uArticulosController, uDatosProveedorController, uBizArticulosProveedor, uIEditorArticulosProveedor; type IArticulosProveedorController = interface(IArticulosController) ['{EDE29989-1B67-4BAE-A575-45872F41F7BD}'] function GetDatosProveedoresController: IDatosProveedoresController; procedure SetDatosProveedoresController(const Value: IDatosProveedoresController); property DatosProveedoresController: IDatosProveedoresController read GetDatosProveedoresController write SetDatosProveedoresController; function ElegirArticulos(AArticulos : IBizArticuloProveedor; AMensaje: String; AMultiSelect: Boolean): IBizArticuloProveedor; //function ExtraerSeleccionados(AArticulos: IBizArticuloProveedor) : IBizArticuloProveedor; end; TArticulosProveedorController = class(TArticulosController, IArticulosProveedorController) protected FDatosProveedoresController: IDatosProveedoresController; function GetDatosProveedoresController: IDatosProveedoresController; procedure SetDatosProveedoresController(const Value: IDatosProveedoresController); procedure AssignarID(AArticulo: IBizArticulo; ADataModule : IDataModuleArticulos); override; function ValidarArticulo(AArticulo: IBizArticulo): Boolean; override; procedure AsignarDataModule; override; procedure Ver(AArticulo : IBizArticulo); override; procedure VerTodos(AArticulos: IBizArticulo); override; public property DatosProveedoresController: IDatosProveedoresController read GetDatosProveedoresController write SetDatosProveedoresController; constructor Create; destructor Destroy; override; function ElegirArticulos(AArticulos : IBizArticuloProveedor; AMensaje: String; AMultiSelect: Boolean): IBizArticuloProveedor; // function ExtraerSeleccionados(AArticulos: IBizArticuloProveedor) : IBizArticuloProveedor; end; implementation uses cxControls, DB, uEditorRegistryUtils, schArticulosClient_Intf, uDataModuleUsuarios, uDAInterfaces, uDataTableUtils, uDateUtils, uROTypes, DateUtils, Controls, Windows, uIDataModuleArticulosProveedor, uDataModuleArticulosProveedor, uIEditorArticuloProveedor, uIEditorElegirArticulosProveedor; { TArticulosProveedorController } procedure TArticulosProveedorController.AsignarDataModule; begin // inherited; FDataModule := TDataModuleArticulosProveedor.Create(Nil); end; procedure TArticulosProveedorController.AssignarID(AArticulo: IBizArticulo; ADataModule: IDataModuleArticulos); var NuevoIDCabecera : Integer; begin // inherited; <- NO DESCOMENTAR if not Assigned(AArticulo) then raise Exception.Create ('Montaje no asignada'); if not Assigned(FDatosProveedoresController) then raise Exception.Create ('Controller datos proveedor no asignado'); { ¡¡¡ OJO !!! Primero cambiamos el ID de las tablas detalles porque si cambiamos antes el ID de la cabecera deja de funcionar la relacion M/D y no encontraríamos las filas detalle. --> MASTER.ID = DETAIL.ID_MONTAJE <-- } NuevoIDCabecera := ADataModule.GetNextID(AArticulo.DataTable.LogicalName); FDatosProveedoresController.AssignarID((AArticulo as IBizArticuloProveedor).DatosProveedores, NuevoIDCabecera, False); AArticulo.Edit; AArticulo.ID := NuevoIDCabecera; AArticulo.Post; end; constructor TArticulosProveedorController.Create; begin inherited; FDatosProveedoresController := TDatosProveedoresController.Create; FDatosProveedoresController.addObservador(Self); end; destructor TArticulosProveedorController.Destroy; begin FDatosProveedoresController := Nil; inherited; end; function TArticulosProveedorController.ElegirArticulos(AArticulos: IBizArticuloProveedor; AMensaje: String; AMultiSelect: Boolean): IBizArticuloProveedor; var AEditor : IEditorElegirArticulosProveedor; begin Result := NIL; CreateEditor('EditorElegirArticulosProveedor', IEditorElegirArticulosProveedor, AEditor); try with AEditor do begin Controller := Self; Articulos := AArticulos; MultiSelect := AMultiSelect; if IsPositiveResult(ShowModal) then Result := ArticulosSeleccionados; end; finally AEditor := NIL; end; end; {function TArticulosProveedorController.ExtraerSeleccionados(AArticulos: IBizArticuloProveedor): IBizArticuloProveedor; var ASeleccionados : IBizArticuloProveedor; begin ASeleccionados := (Self.Buscar(ID_NULO) as IBizArticuloProveedor); CopyDataTable(AArticulos.DataTable, ASeleccionados.DataTable, True); Result := ASeleccionados; end;} function TArticulosProveedorController.GetDatosProveedoresController: IDatosProveedoresController; begin Result := FDatosProveedoresController; end; {procedure TArticulosProveedorController.RecuperarDatosProveedor(AArticulo: IBizArticuloProveedor); begin AArticulo.DatosProveedor := FDatosProveedoresController.Buscar(AArticulo.ID_ARTICULO); end;} procedure TArticulosProveedorController.SetDatosProveedoresController(const Value: IDatosProveedoresController); begin FDatosProveedoresController := Value; end; function TArticulosProveedorController.ValidarArticulo( AArticulo: IBizArticulo): Boolean; var AReferencia : String; begin Result := False; if not Assigned(FDatosProveedoresController) then raise Exception.Create ('Controller datos proveedor no asignado'); Result := inherited ValidarArticulo(AArticulo); // Forzar refresco de la tabla artículos haciendo una modificación AArticulo.Edit; AReferencia := AArticulo.REFERENCIA; AArticulo.REFERENCIA := ''; AArticulo.Post; AArticulo.Edit; AArticulo.REFERENCIA := AReferencia; AArticulo.Post; end; procedure TArticulosProveedorController.Ver(AArticulo: IBizArticulo); var AEditor : IEditorArticuloProveedor; begin // inherited; <- No descomentar AEditor := NIL; ShowHourglassCursor; try RecuperarObjetos(AArticulo); CreateEditor('EditorArticuloProveedor', IEditorArticuloProveedor, AEditor); with (AEditor as IEditorArticuloProveedor) do begin Controller := Self; //OJO ORDEN MUY IMPORTANTE Articulo := AArticulo; end; finally HideHourglassCursor; end; if Assigned(AEditor) then AEditor.ShowModal; end; procedure TArticulosProveedorController.VerTodos(AArticulos: IBizArticulo); var AEditor : IEditorArticulosProveedor; begin // inherited; <- No descomentar AEditor := NIL; ShowHourglassCursor; try RecuperarObjetos(AArticulos); CreateEditor('EditorArticulosProveedor', IEditorArticulosProveedor, AEditor); with (AEditor as IEditorArticulosProveedor) do begin Controller := Self; //OJO ORDEN MUY IMPORTANTE Articulos := AArticulos; end; finally HideHourglassCursor; end; if Assigned(AEditor) then AEditor.ShowEmbedded; end; end.