unit uInfMargenArticuloController; interface uses Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem, uBizInfMargenArticulo, uIDataModuleInfMargenArticulo, uInformeBaseController, uBizInformes; const CTE_AGRUPACION_PORARTICULO = 0; CTE_AGRUPACION_PORCLIENTE = 1; CTE_AGRUPACION_PORFACTURA = 2; type IInfMargenArticuloController = interface(IInformeBaseController) ['{1F19FFE4-7AA6-4CAB-B7F0-687FE858FD31}'] // procedure VerTodos(AInfMargenArticulo: IBizInfMargenArticulo); function BuscarAgrupadoPorCliente: IBizInfMargenArticulo; function BuscarAgrupadoPorArticulo: IBizInfMargenArticulo; function BuscarAgrupadoPorFactura: IBizInfMargenArticulo; // function Buscar(const ID_ALMACEN: Integer): IBizInfMargenArticulo; // function ExtraerSeleccionados(AArticulos: IBizInfMargenArticulo) : IBizInfMargenArticulo; // procedure Anadir(AArticulos, AInfMargenArticulo : IBizInfMargenArticulo); // procedure Ver; //(AInfMargenArticulo : IBizInfMargenArticulo); // function Guardar(AArticulos : IBizInfMargenArticulo; const FechaMovimiento: TDateTime; const CausaMovimiento: String): Boolean; end; TInfMargenArticuloController = class(TObservador, IInfMargenArticuloController, IInformeBaseController) private function darAgrupacionParaInforme: Integer; protected FDataModule : IDataModuleInfMargenArticulo; procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override; function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean; function _Vacio : IBizInfMargenArticulo; procedure FiltrarEmpresa(AInfMargenArticulo: IBizInfMargenArticulo); //Estos son los tres métodos a sobre escribir si se desea heredar toda la logica de //este controller procedure AsignarDataModule; virtual; public constructor Create; virtual; destructor Destroy; override; // function Buscar(const ID_ALMACEN: Integer): IBizInfMargenArticulo; // function ExtraerSeleccionados(AArticulos: IBizInfMargenArticulo) : IBizInfMargenArticulo; // function Ver(AArticulos: IBizInfMargenArticulo; AInfMargenArticulo : IBizInfMargenArticulo): Boolean; function BuscarAgrupadoPorCliente: IBizInfMargenArticulo; function BuscarAgrupadoPorArticulo: IBizInfMargenArticulo; function BuscarAgrupadoPorFactura: IBizInfMargenArticulo; procedure Nuevo(AInforme : IBizInforme); procedure Ver(AInforme : IBizInforme); // procedure VerTodos(AInfMargenArticulo: IBizInfMargenArticulo); end; implementation uses Forms, cxControls, DB, uEditorRegistryUtils, uIEditorInfMargenArticulo, uDataModuleUsuarios, uDataModuleInfMargenArticulo, uDAInterfaces, uDataTableUtils, uDateUtils, uROTypes, DateUtils, Controls, Windows, dialogs, Variants, uControllerDetallesBase, uDialogUtils, JSDialog, JSDialogs, schInfMargenArticuloClient_Intf; { TInfMargenArticuloController } procedure TInfMargenArticuloController.AsignarDataModule; begin FDataModule := TdmInfMargenArticulo.Create(Nil); end; { function TInfMargenArticuloController.Buscar(const ID_ALMACEN: Integer): IBizInfMargenArticulo; begin Result := (FDataModule as IDataModuleInfMargenArticulo).GetItems(ID_ALMACEN); FiltrarEmpresa(Result); end; } function TInfMargenArticuloController.BuscarAgrupadoPorArticulo: IBizInfMargenArticulo; begin Result := FDataModule.GetItems(tArticulo); FiltrarEmpresa(Result); end; function TInfMargenArticuloController.BuscarAgrupadoPorCliente: IBizInfMargenArticulo; begin Result := FDataModule.GetItems(tCliente); FiltrarEmpresa(Result); end; function TInfMargenArticuloController.BuscarAgrupadoPorFactura: IBizInfMargenArticulo; begin Result := FDataModule.GetItems(tFactura); FiltrarEmpresa(Result); end; constructor TInfMargenArticuloController.Create; begin AsignarDataModule; end; function TInfMargenArticuloController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; begin Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); end; function TInfMargenArticuloController.darAgrupacionParaInforme: Integer; var JsDialog: TJSDialog; Respuesta: Integer; begin JsDialog := TJSDialog.Create(nil); try JsDialog.Content.Add('Elija una opci'#243'n:'); JsDialog.Instruction.Text := 'Agrupar por...'; JsDialog.DialogOptions := [doCommandLinks, doModal]; JsDialog.ButtonBar.Buttons := [cbOk]; with JsDialog.CustomButtons.Add do begin Caption := 'Agrupar el informe por art'#237'culo'; Value := 0; Default := True; end; with JsDialog.CustomButtons.Add do begin Caption := 'Agrupar el informe por cliente'; Value := 1; end; with JsDialog.CustomButtons.Add do begin Caption := 'Agrupar el informe por factura'; Value := 2; end; repeat Respuesta := JsDialog.Execute; until Respuesta <> IDCANCEL; Result := JsDialog.CustomButtonResult; finally FreeAndNil(JsDialog); end; end; destructor TInfMargenArticuloController.Destroy; begin FDataModule := Nil; inherited; end; {function TInfMargenArticuloController.ExtraerSeleccionados(AArticulos: IBizInfMargenArticulo): IBizInfMargenArticulo; var ASeleccionados : IBizInfMargenArticulo; begin ASeleccionados := (Self.Buscar(ID_NULO) as IBizInfMargenArticulo); CopyDataTable(AArticulos.DataTable, ASeleccionados.DataTable, True); Result := ASeleccionados; end;} {function TInfMargenArticuloController.Ver(AArticulos: IBizInfMargenArticulo; AInfMargenArticulo: IBizInfMargenArticulo): Boolean; var AEditor : IEditorEntradaSalidaArticulos; begin Result := False; AEditor := NIL; ShowHourglassCursor; try CreateEditor('EditorEntradaSalidaArticulos', IEditorEntradaSalidaArticulos, AEditor); with AEditor do begin Controller := Self; //OJO ORDEN MUY IMPORTANTE Articulos := AArticulos; InfMargenArticulo := AInfMargenArticulo; end; finally HideHourglassCursor; end; if Assigned(AEditor) then try AEditor.ShowModal; Result := AEditor.ResultadoModalOK; AEditor.Release; finally AEditor := NIL; end; end;} procedure TInfMargenArticuloController.Ver(AInforme: IBizInforme); var AEditor : IEditorInfMargenArticulo; begin AEditor := NIL; ShowHourglassCursor; try CreateEditor('EditorInfMargenArticulo', IEditorInfMargenArticulo, AEditor); with (AEditor as IEditorInfMargenArticulo) do begin if not Assigned(FDataModule) then AsignarDataModule; Controller := Self; //OJO ORDEN MUY IMPORTANTE //Establecemos la vista agrupada basica case AInforme.TIPO_AGRUPACION of CTE_AGRUPACION_PORARTICULO : Datos := BuscarAgrupadoPorArticulo; CTE_AGRUPACION_PORCLIENTE : Datos := BuscarAgrupadoPorCliente; CTE_AGRUPACION_PORFACTURA : Datos := BuscarAgrupadoPorFactura; end; Informe := AInforme; // Datos.VisibleColumns := FDataModule.GetNameColumns; end; finally HideHourglassCursor; end; if Assigned(AEditor) then try AEditor.ShowModal; AEditor.Release; finally AEditor := NIL; end; end; {procedure TInfMargenArticuloController.VerTodos(AInfMargenArticulo: IBizInfMargenArticulo); //var // AEditor : IEditorInfMargenArticulo; begin { AEditor := NIL; ShowHourglassCursor; try CreateEditor('EditorInfMargenArticulo', IEditorInfMargenArticulo, AEditor); with AEditor do begin Controller := Self; //OJO ORDEN MUY IMPORTANTE InfMargenArticulo := AInfMargenArticulo; MultiSelect := False; end; finally HideHourglassCursor; end; if Assigned(AEditor) then AEditor.ShowEmbedded; end;} function TInfMargenArticuloController._Vacio: IBizInfMargenArticulo; begin // Result := Buscar(ID_NULO); end; procedure TInfMargenArticuloController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); begin inherited; // end; procedure TInfMargenArticuloController.FiltrarEmpresa(AInfMargenArticulo: IBizInfMargenArticulo); begin if AInfMargenArticulo.DataTable.Active then AInfMargenArticulo.DataTable.Active := False; // Filtrar los InfMargenArticulo actuales por empresa with AInfMargenArticulo.DataTable.Where do begin if NotEmpty then AddOperator(opAND); OpenBraket; AddText(fld_InfMargenPorClienteID_EMPRESA + ' = ' + IntToStr(dmUsuarios.IDEmpresaActual)); CloseBraket; end; end; procedure TInfMargenArticuloController.Nuevo(AInforme: IBizInforme); begin AInforme.Insert; AInforme.CATEGORIA := 'MARGEN ARTICULOS'; AInforme.CONTROLLER := 'InfMargenArticuloController'; AInforme.ID_EMPRESA := dmUsuarios.EmpresaActual.ID; //ESTABLECEMOS EL TIPO DE AGRUPACION INICIAL PARA EL INFORME QUE DESEAMOS CREAR AInforme.TIPO_AGRUPACION := darAgrupacionParaInforme; end; end.