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) ['{9CC16002-03D2-4349-AC95-A3A057E3D4BB}'] function BuscarAgrupadoPorCliente(const AColumns: String; const AWhere: String): IBizInfMargenArticulo; function BuscarAgrupadoPorArticulo(const AColumns: String; const AWhere: String): IBizInfMargenArticulo; function BuscarAgrupadoPorFactura(const AColumns: String; const AWhere: String): IBizInfMargenArticulo; end; TInfMargenArticuloController = class(TInterfacedObject, IInfMargenArticuloController, IInformeBaseController) private function darAgrupacionParaInforme: Integer; protected FDataModule : IDataModuleInfMargenArticulo; function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean; // 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(const AColumns: String; const AWhere: String): IBizInfMargenArticulo; function BuscarAgrupadoPorArticulo(const AColumns: String; const AWhere: String): IBizInfMargenArticulo; function BuscarAgrupadoPorFactura(const AColumns: String; const AWhere: String): IBizInfMargenArticulo; procedure Nuevo(AInforme : IBizInforme); procedure Ver(AInforme : IBizInforme); // procedure VerTodos(AInfMargenArticulo: IBizInfMargenArticulo); end; implementation uses Forms, cxControls, DB, uEditorRegistryUtils, uFactuGES_App, 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(const AColumns: String; const AWhere: String): IBizInfMargenArticulo; begin Result := FDataModule.GetItems(AColumns, Awhere, tArticulo); // FiltrarEmpresa(Result); end; function TInfMargenArticuloController.BuscarAgrupadoPorCliente(const AColumns: String; const AWhere: String): IBizInfMargenArticulo; begin Result := FDataModule.GetItems(AColumns, Awhere, tCliente); // FiltrarEmpresa(Result); end; function TInfMargenArticuloController.BuscarAgrupadoPorFactura(const AColumns: String; const AWhere: String): IBizInfMargenArticulo; begin Result := FDataModule.GetItems(AColumns, Awhere, 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; end; finally HideHourglassCursor; end; if Assigned(AEditor) then try AEditor.ShowModal; AEditor.Release; finally AEditor := NIL; end; 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 := AppFactuGES.EmpresaActiva.ID; //ESTABLECEMOS EL TIPO DE AGRUPACION INICIAL PARA EL INFORME QUE DESEAMOS CREAR AInforme.TIPO_AGRUPACION := darAgrupacionParaInforme; end; end.