unit uEditorDetalleReservas; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, uCustomEditor, ImgList, PngImageList, StdActns, ActnList, TB2ExtItems, TBXExtItems, TBX, TB2Item, TB2Dock, TB2Toolbar, JvExControls, JvComponent, JvNavigationPane, uViewDetalleReservas, Menus, DB, uDADataTable, ComCtrls, uViewGrid, uDAScriptingProvider, uDACDSDataTable, JvAppStorage, JvAppRegistryStorage, JvFormPlacement, pngimage, ExtCtrls, uCustomView, uViewBase, uViewBarraSeleccion, JvComponentBase, uEditorGridBase, uIEditorDetalleReservas, uBizInventario, uViewGridBase, JvExComCtrls, JvStatusBar, uViewGrid2Niveles, JSDialog, uDAInterfaces, uInventarioController, uEditorInventario; type TfEditorDetalleReservas = class(TfEditorGridBase, IEditorDetalleReservas) TBXSeparatorItem17: TTBXSeparatorItem; frViewDetalleReservas1: TfrViewDetalleReservas; actCancelarReserva: TAction; actTrasladarReservados: TAction; TBXItem38: TTBXItem; TBXItem39: TTBXItem; procedure FormShow(Sender: TObject); procedure actCancelarReservaExecute(Sender: TObject); procedure actTrasladarReservadosExecute(Sender: TObject); private function Seleccionar(Descripcion: String; TipoSeleccion: TEnumSeleccion): Variant; function DarIDAlmacenSeleccionado(Descripcion: String): Integer; function DarIDObraSeleccionada(Descripcion: String): Integer; function GetIdAlmacenObra: Integer; procedure SetIdAlmacenObra(const Value: Integer); protected FTipoReservas: String; FIdAlmacenObra: Integer; FArticulo: IBizInventario; FDetalleReservas: IBizDetalleReservas; FController : IInventarioController; function GetArticulo: IBizInventario; procedure SetArticulo(const Value: IBizInventario); function GetDetalleReservas: IBizDetalleReservas; procedure SetDetalleReservas(const Value: IBizDetalleReservas); function GetTipoReservas: String; procedure SetTipoReservas(const Value: String); function GetController : IInventarioController; virtual; procedure SetController (const Value : IInventarioController); virtual; { procedure SetMultiSelect (AValue : Boolean); function GetMultiSelect : Boolean; function GetArticulosSeleccionados: IBizDetalleReservas; } procedure ImprimirInterno; override; procedure PrevisualizarInterno; override; public property Articulo: IBizInventario read GetArticulo write SetArticulo; property DetalleReservas: IBizDetalleReservas read GetDetalleReservas write SetDetalleReservas; property Controller : IInventarioController read GetController write SetController; property TipoReservas: String read GetTipoReservas write SetTipoReservas; property IdAlmacenObra: Integer read GetIdAlmacenObra write SetIdAlmacenObra; // property ArticulosSeleccionados: IBizDetalleReservas read GetArticulosSeleccionados; // property MultiSelect : Boolean read GetMultiSelect write SetMultiSelect; constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure PonerTitulos(const ATitulo: string = ''); override; end; implementation {$R *.DFM} uses cxControls, Variants, uGridStatusUtils, uDataModuleInventario, uDataModuleUsuarios, uEditorBase, uDBSelectionListUtils, cxGridDBTableView, cxGridCustomTableView, uAlmacenesController, uBizAlmacenes, uFactuGES_App, uDialogUtils, uEditorElegirAlmacenObraOperacion, schInventarioClient_Intf; {, uDBSelectionList, uDataModulePedidosProveedor, uBizPedidosProveedor, uBizMontajes, uDataModuleMontajes; } { TfEditorDetalleReservas } { ***************************** TfEditorDetalleReservas ***************************** } procedure TfEditorDetalleReservas.actCancelarReservaExecute(Sender: TObject); var ReservasSeleccionadas: IBizDetalleReservas; begin inherited; try SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (DetalleReservas as ISeleccionable).SelectedRecords); // En SelectedRecords tengo los ID de las filas seleccionadas del grid ReservasSeleccionadas := (Controller as IInventarioController).ExtraerSeleccionados(DetalleReservas) as IBizDetalleReservas; if (ReservasSeleccionadas.DataTable.RecordCount > 0) then begin FController.CancelarReservas(ReservasSeleccionadas); RefrescarInterno; end else ShowWarningMessage('Debe seleccionar las reservas que desea cancelar'); finally ReservasSeleccionadas:= Nil; end; end; procedure TfEditorDetalleReservas.actTrasladarReservadosExecute(Sender: TObject); var ReservasSeleccionadas: IBizDetalleReservas; begin inherited; try SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (DetalleReservas as ISeleccionable).SelectedRecords); // En SelectedRecords tengo los ID de las filas seleccionadas del grid ReservasSeleccionadas := (Controller as IInventarioController).ExtraerSeleccionados(DetalleReservas) as IBizDetalleReservas; if (ReservasSeleccionadas.DataTable.RecordCount > 0) then begin FController.TrasladarReservas(ReservasSeleccionadas); RefrescarInterno; end else ShowWarningMessage('Debe seleccionar las reservas que desea trasladar'); finally ReservasSeleccionadas:= Nil; end; end; constructor TfEditorDetalleReservas.Create(AOwner: TComponent); begin inherited; ViewGrid := frViewDetalleReservas1; end; function TfEditorDetalleReservas.DarIDAlmacenSeleccionado(Descripcion: String): Integer; var IDAlmacen: Variant; begin IDAlmacen := (ViewGrid as IViewDetalleReservas).DarIDAlmacenObraSeleccionada; if not VarIsNull(IDAlmacen) then Result := IDAlmacen else Result := Seleccionar(Descripcion, tAlmacen) end; function TfEditorDetalleReservas.DarIDObraSeleccionada(Descripcion: String): Integer; var IDObra: Variant; begin IDObra := (ViewGrid as IViewDetalleReservas).DarIDAlmacenObraSeleccionada; if not VarIsNull(IDObra) then Result := IDObra else Result := Seleccionar(Descripcion, TObra) end; destructor TfEditorDetalleReservas.Destroy; begin FDetalleReservas := NIL; inherited; end; procedure TfEditorDetalleReservas.FormShow(Sender: TObject); begin inherited; if not Assigned(ViewGrid) then raise Exception.Create('No hay ninguna vista asignada'); if not Assigned(DetalleReservas) then raise Exception.Create('No hay ningún DetalleReservas asignado'); DetalleReservas.DataTable.Active := True; ViewGrid.GotoFirst; end; { function TfEditorDetalleReservas.GetArticulosSeleccionados: IBizDetalleReservas; begin SeleccionarFilasDesdeGrid((ViewGrid as IViewDetalleReservas)._FocusedView, (DetalleReservas as ISeleccionable).SelectedRecords); // En Presupuestos.SelectedRecords tengo los ID de las filas seleccionadas del grid Result := Controller.ExtraerSeleccionados(DetalleReservas); end; function TfEditorDetalleReservas.GetController: IDetalleReservasController; begin Result := FController; end; } function TfEditorDetalleReservas.GetArticulo: IBizInventario; begin Result := FArticulo; end; function TfEditorDetalleReservas.GetController: IInventarioController; begin Result := FController; end; function TfEditorDetalleReservas.GetDetalleReservas: IBizDetalleReservas; begin Result := FDetalleReservas; end; function TfEditorDetalleReservas.GetIdAlmacenObra: Integer; begin Result := FIdAlmacenObra; end; function TfEditorDetalleReservas.GetTipoReservas: String; begin Result := FTipoReservas; end; { function TfEditorDetalleReservas.GetMultiSelect: Boolean; begin Result := ViewGrid.MultiSelect; end; } procedure TfEditorDetalleReservas.ImprimirInterno; begin inherited; end; procedure TfEditorDetalleReservas.PonerTitulos(const ATitulo: string); var FTitulo : String; begin FTitulo := 'Detalle de reservas en almacen - ' + AppFactuGES.EmpresaActiva.NOMBRE; inherited PonerTitulos(FTitulo); end; procedure TfEditorDetalleReservas.PrevisualizarInterno; begin inherited; end; {function TfEditorDetalleReservas.SeleccionarAlmacen(Descripcion: String): Integer; var AAlmacenes : IBizAlmacen; Respuesta : integer; begin Result := -1; { JsElegirAlmacenDialog.Instruction.Text := Descripcion; with JsElegirAlmacenDialog.RadioButtons do begin Clear; AAlmacenes := (ViewGrid as IViewDetalleReservas).Almacenes; AAlmacenes.First; while not AAlmacenes.EOF do begin with Add do begin Caption := AAlmacenes.NOMBRE; Value := 1000 + AAlmacenes.ID; end; //Asi sabemos que solo va a intentar chequear el primero si hemos añadido al menos un item Items[0].Checked := True; AAlmacenes.Next; end; end; //Sacar la pantalla de selección y devolver el almacén seleccionado. Respuesta := JsElegirAlmacenDialog.Execute; if Respuesta <> IDCANCEL then Result := JsElegirAlmacenDialog.RadioResult - 1000; end; { procedure TfEditorDetalleReservas.SetController(const Value: IDetalleReservasController); begin FController := Value; if Assigned(FController) then begin if Assigned(ViewGrid) then (ViewGrid as IViewDetalleReservas).Almacenes := FController.AlmacenesController.BuscarTodos; end; end; } function TfEditorDetalleReservas.Seleccionar(Descripcion: String; TipoSeleccion: TEnumSeleccion): Variant; var ALista : TStringList; AListaAux : TStringList; Respuesta : Variant; i: Integer; begin Result := Null; with TfEditorElegirAlmacenObraOperacion.Create(NIL) do try case TipoSeleccion of tAlmacen: begin Caption := Descripcion; eDescripcion.Caption := 'Elija sobre qué almacén desea realizar la operación.'; eEtiqueta.Caption := 'Almacén:'; ALista := Controller.AlmacenesController.DarListaAlmacenes; end; tObra: begin Caption := Descripcion; eDescripcion.Caption := 'Elija sobre qué obra desea realizar la operación.'; eEtiqueta.Caption := 'Obra:'; ALista := Controller.ObrasController.DarListaObras; end; tAlmacenObra: begin Caption := Descripcion; eDescripcion.Caption := 'Elija sobre qué almacén u obra desea realizar la operación.'; eEtiqueta.Caption := 'Almacén/Obra:'; ALista := Controller.AlmacenesController.DarListaAlmacenes; AListaAux := Controller.ObrasController.DarListaObras; for i := 0 to AListaAux.Count - 1 do ALista.Add(Format('%s=%s', [AListaAux.Names[i], AListaAux.Values[AListaAux.Names[i]]])); end; end; with cxListaAlmacenesObras.Properties.Items do begin BeginUpdate; try Clear; for i := 0 to ALista.Count - 1 do Add(ALista.Names[i]); finally EndUpdate; end; end; if (ShowModal = mrOk) then Result := ALista.Values[cxListaAlmacenesObras.EditValue]; finally Free; end; end; procedure TfEditorDetalleReservas.SetArticulo(const Value: IBizInventario); begin FArticulo := Value; if Assigned(FArticulo) and (FArticulo.RESERVA > 0) then begin tbxEditFiltro.Text := FArticulo.REFERENCIA; end; end; procedure TfEditorDetalleReservas.SetController(const Value: IInventarioController); begin FController := Value; end; procedure TfEditorDetalleReservas.SetDetalleReservas(const Value: IBizDetalleReservas); begin FDetalleReservas := Value; dsDataTable.DataTable := FDetalleReservas.DataTable; if Assigned(ViewGrid) then (ViewGrid as IViewDetalleReservas).DetalleReservas := FDetalleReservas; end; procedure TfEditorDetalleReservas.SetIdAlmacenObra(const Value: Integer); begin FIdAlmacenObra := Value; if assigned (ViewGrid) then (ViewGrid as IViewDetalleReservas).IdAlmacenObra := IdAlmacenObra; end; procedure TfEditorDetalleReservas.SetTipoReservas(const Value: String); begin FTipoReservas := Value; if not Assigned(FController) then raise Exception.Create('No hay ningún controlador asignado'); if (FTipoReservas = CTE_INV_ALMACEN) then begin if Assigned(ViewGrid) then (ViewGrid as IViewDetalleReservas).Almacenes := FController.AlmacenesController.DarListaAlmacenes; end else if (FTipoReservas = CTE_INV_OBRA) then begin if Assigned(ViewGrid) then (ViewGrid as IViewDetalleReservas).Obras := FController.ObrasController.DarListaObras; end; end; { procedure TfEditorDetalleReservas.SetMultiSelect(AValue: Boolean); begin ViewGrid.MultiSelect := AValue; end; } end.