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, JSDialog; type TfEditorArticulos = class(TfEditorGridBase, IEditorArticulos) actFamilias: TAction; JsListaArticulosNoEliminados: TJSDialog; procedure FormShow(Sender: TObject); procedure actFamiliasExecute(Sender: TObject); procedure actModificarUpdate(Sender: TObject); 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; //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, uGridUtils, uDBSelectionListUtils, cxGridCustomTableView; //, uListaArticulos; {$R *.dfm} { ****************************** TfEditorArticulos ******************************* } procedure TfEditorArticulos.FormShow(Sender: TObject); begin 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; 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.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.SetArticulos(const Value: IBizArticulo); begin FArticulos := Value; dsDataTable.DataTable := FArticulos.DataTable; if Assigned(ViewGrid) then (ViewGrid as IViewArticulos).Articulos := Articulos; end; procedure TfEditorArticulos.SetController(const Value: IArticulosController); begin FController := Value; 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; var AArticulos: IBizArticulo; AllItems: Boolean; begin AArticulos := Nil; AllItems := False; if MultiSelect and Assigned(ViewGrid) then AllItems := (ViewGrid.NumSeleccionados > 1); if AllItems then begin if (Application.MessageBox('¿Desea borrar los artículos seleccionados?, , si hay unidades de estos articulos en el almacén serán borradas.', 'Atención', MB_YESNO) = IDYES) then begin SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Articulos as ISeleccionable).SelectedRecords); AArticulos := (Controller as IArticulosController).ExtraerSeleccionados(Articulos) as IBizArticulo; end end else begin if (Application.MessageBox('¿Desea borrar este artículo?, si hay unidades de este articulo en el almacén serán borradas.', 'Atención', MB_YESNO) = IDYES) then AArticulos := Articulos; end; if Assigned(AArticulos) then begin FController.Eliminar(AArticulos, AllItems); if AllItems then begin if (AArticulos.DataTable.RecordCount > 0) then begin with AArticulos.DataTable do begin First; while not EOF do begin JsListaArticulosNoEliminados.Content.Add('Ref. articulo: ' + AArticulos.REFERENCIA + ' ' + AArticulos.DESCRIPCION); Next; end; end; JsListaArticulosNoEliminados.Execute; end; actRefrescar.Execute; end; end; ViewGrid.GotoFirst; 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.actModificarUpdate(Sender: TObject); begin inherited; if (ViewGrid.NumSeleccionados <> 1) or (not Controller.EsModificable(FArticulos)) then (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.