unit uEditorArticulos; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uEditorBase, ToolWin, ComCtrls, JvExControls, JvComponent, JvNavigationPane, uViewArticulos, uBizArticulos, ActnList, DBActns, uViewGrid, Menus, uDataModuleBase, ImgList, PngImageList, TB2Dock, TB2Toolbar, TBX, TB2Item, StdActns, TB2ExtItems, TBXExtItems, TB2MRU, DB, uDADataTable, JvFormAutoSize, uDAScriptingProvider, uDACDSDataTable, JvAppStorage, JvAppRegistryStorage, JvFormPlacement, ExtCtrls, uCustomView, uViewBase, uViewBarraSeleccion, pngimage, uIEditorArticulos, uEditorGridBase, JvComponentBase, uViewGridBase, uArticulosController, JvExComCtrls, JvStatusBar, uDAInterfaces; type TfEditorArticulos = class(TfEditorGridBase, IEditorArticulos) actFamilias: TAction; actAsignarTarifa: TAction; TBXItem38: TTBXItem; actNoComisionable: TAction; TBXSeparatorItem17: TTBXSeparatorItem; TBXItem39: TTBXItem; actComisionable: TAction; TBXSeparatorItem18: TTBXSeparatorItem; TBXItem40: TTBXItem; procedure FormShow(Sender: TObject); procedure actFamiliasExecute(Sender: TObject); procedure actAsignarTarifaExecute(Sender: TObject); procedure actAsignarTarifaUpdate(Sender: TObject); procedure actEliminarUpdate(Sender: TObject); procedure actNoComisionableExecute(Sender: TObject); procedure actNoComisionableUpdate(Sender: TObject); procedure actComisionableExecute(Sender: TObject); procedure actComisionableUpdate(Sender: TObject); procedure OnListaTarifasChange(Sender: TObject; const Text: string); private FArticulos: IBizArticulo; FController : IArticulosController; protected function GetArticulos: IBizArticulo; procedure SetArticulos(const Value: IBizArticulo); function GetController : IArticulosController; virtual; procedure SetController (const Value : IArticulosController); virtual; procedure NuevoInterno; override; procedure EliminarInterno; override; procedure ModificarInterno; override; procedure ImprimirInterno; override; procedure PrevisualizarInterno; override; procedure DuplicarInterno; override; procedure RefrescarInterno; override; //Si queremos crear otra vista para el editor heredado solo tendriamos que //sobreescribir este metodo procedure AsignarVista; virtual; public procedure PonerTitulos(const ATitulo: string = ''); override; property Articulos: IBizArticulo read GetArticulos write SetArticulos; property Controller : IArticulosController read GetController write SetController; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation uses uCustomEditor, uDataModuleArticulos, uDataModuleUsuarios, uFactuGES_App, uEditorArticulo, uEditorDBBase, uBizFamilias, uFamiliasController, cxGrid, cxGridCustomTableView, uGridUtils, uDBSelectionListUtils; //, uListaArticulos; {$R *.dfm} { ****************************** TfEditorArticulos ******************************* } procedure TfEditorArticulos.FormShow(Sender: TObject); begin cbxListaAnos.OnChange := OnListaTarifasChange; //OJO SIEMPRE ANTES DEL INHERITED inherited; if not Assigned(ViewGrid) then raise Exception.Create('No hay ninguna vista asignada'); if not Assigned(Articulos) then raise Exception.Create('No hay ningún articulo asignado'); Articulos.DataTable.Active := True; ViewGrid.GotoFirst; //Para que coja el ancho automático actAnchoAuto.Execute; end; function TfEditorArticulos.GetArticulos: IBizArticulo; begin Result := FArticulos; end; function TfEditorArticulos.GetController: IArticulosController; begin Result := FController; end; procedure TfEditorArticulos.ImprimirInterno; begin inherited; end; procedure TfEditorArticulos.ModificarInterno; begin inherited; FController.Ver(Articulos); end; procedure TfEditorArticulos.NuevoInterno; begin inherited; FController.Anadir(Articulos); FController.Ver(Articulos); end; procedure TfEditorArticulos.OnListaTarifasChange(Sender: TObject; const Text: string); begin Controller.FiltrarTarifa(Articulos, DynWhereDataTable, Text); if Articulos.DataTable.Active then RefrescarInterno; end; procedure TfEditorArticulos.PonerTitulos(const ATitulo: string); var FTitulo : String; begin FTitulo := 'Lista de artículos - ' + AppFactuGES.EmpresaActiva.NOMBRE; inherited PonerTitulos(FTitulo); end; procedure TfEditorArticulos.PrevisualizarInterno; begin inherited; end; procedure TfEditorArticulos.RefrescarInterno; begin //Volvemos a cargar las tarifas de los presupuestos if Assigned(FController) then ListaAnos := FController.DarListaTarifasArticulos; inherited; end; procedure TfEditorArticulos.SetArticulos(const Value: IBizArticulo); begin FArticulos := Value; if Assigned(FArticulos) then begin //Se guarda el where de la sentencia origen, por si el editor tiene filtros que //afecten a este where y en un futuro se desea volver al where origen (filtro de tarifa)) DynWhereDataTable := FArticulos.DataTable.DynamicWhere.Xml; dsDataTable.DataTable := FArticulos.DataTable; if Assigned(ViewGrid) then (ViewGrid as IViewArticulos).Articulos := Articulos; end; end; procedure TfEditorArticulos.SetController(const Value: IArticulosController); begin FController := Value; if Assigned(FController) then ListaAnos := FController.DarListaTarifasArticulos; end; destructor TfEditorArticulos.Destroy; begin FArticulos := NIL; FController := NIl; inherited; end; procedure TfEditorArticulos.DuplicarInterno; var AArticulo : IBizArticulo; begin inherited; AArticulo := FController.Duplicar(Articulos); try FController.Ver(AArticulo); finally actRefrescar.Execute; end; end; procedure TfEditorArticulos.EliminarInterno; begin if (Application.MessageBox('¿Desea borrar este artículo?', 'Atención', MB_YESNO) = IDYES) then begin inherited; //Para que en el caso de no poderse realizar la operación se refresquen //los datos y no nos permita eliminar un registro a la segunda if not FController.Eliminar(Articulos) then actRefrescar.Execute; end; end; procedure TfEditorArticulos.actAsignarTarifaExecute(Sender: TObject); var AArticulos: IBizArticulo; i: integer; begin inherited; ViewGrid.SaveGridStatus; try SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Articulos as ISeleccionable).SelectedRecords); AArticulos := (Controller as IArticulosController).ExtraerSeleccionados(Articulos) as IBizArticulo; finally ViewGrid.RestoreGridStatus; end; Controller.AsignarTarifa(AArticulos); if (AArticulos.DataTable.RecordCount > 0) then RefrescarInterno; end; procedure TfEditorArticulos.actAsignarTarifaUpdate(Sender: TObject); begin inherited; if HayDatos and Assigned(ViewGrid) then (Sender as TAction).Enabled := not (dsDataTable.DataTable.State in dsEditModes) and ViewGrid.esSeleccionCeldaDatos and (ViewGrid.NumSeleccionados > 0) else (Sender as TAction).Enabled := False; end; procedure TfEditorArticulos.actComisionableExecute(Sender: TObject); var AArticulos: IBizArticulo; i: integer; begin inherited; ViewGrid.SaveGridStatus; try SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Articulos as ISeleccionable).SelectedRecords); AArticulos := (Controller as IArticulosController).ExtraerSeleccionados(Articulos) as IBizArticulo; Controller.Comisionable(AArticulos, 1); finally ViewGrid.RestoreGridStatus; end; if (AArticulos.DataTable.RecordCount > 0) then RefrescarInterno; end; procedure TfEditorArticulos.actComisionableUpdate(Sender: TObject); begin inherited; if HayDatos and Assigned(ViewGrid) then (Sender as TAction).Enabled := not (dsDataTable.DataTable.State in dsEditModes) and ViewGrid.esSeleccionCeldaDatos and (ViewGrid.NumSeleccionados > 0) else (Sender as TAction).Enabled := False; end; procedure TfEditorArticulos.actEliminarUpdate(Sender: TObject); begin inherited; if (ViewGrid.NumSeleccionados <> 1) then (Sender as TAction).Enabled := False; end; procedure TfEditorArticulos.actFamiliasExecute(Sender: TObject); var AFamiliasController : IFamiliasController; AFamilias : IBizFamilia; begin AFamiliasController := TFamiliasController.Create; try AFamilias := (AFamiliasController.BuscarTodos as IBizFamilia); AFamiliasController.VerTodos(AFamilias); finally AFamilias := NIL; AFamiliasController := NIL; end; end; procedure TfEditorArticulos.actNoComisionableExecute(Sender: TObject); var AArticulos: IBizArticulo; i: integer; begin inherited; ViewGrid.SaveGridStatus; try SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Articulos as ISeleccionable).SelectedRecords); AArticulos := (Controller as IArticulosController).ExtraerSeleccionados(Articulos) as IBizArticulo; Controller.Comisionable(AArticulos, 0); finally ViewGrid.RestoreGridStatus; end; if (AArticulos.DataTable.RecordCount > 0) then RefrescarInterno; end; procedure TfEditorArticulos.actNoComisionableUpdate(Sender: TObject); begin inherited; if HayDatos and Assigned(ViewGrid) then (Sender as TAction).Enabled := not (dsDataTable.DataTable.State in dsEditModes) and ViewGrid.esSeleccionCeldaDatos and (ViewGrid.NumSeleccionados > 0) else (Sender as TAction).Enabled := False; end; procedure TfEditorArticulos.AsignarVista; begin ViewGrid := CreateView(TfrViewArticulos) as IViewArticulos; end; constructor TfEditorArticulos.Create(AOwner: TComponent); begin inherited; AsignarVista; end; end.