unit uEditorComisiones;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uEditorBase, ToolWin, ComCtrls, JvExControls, JvComponent,
  JvNavigationPane, uViewComisiones, uBizComisiones, 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, uIEditorComisiones, uEditorGridBase,
  JvComponentBase, uViewGridBase, uComisionesController, JvExComCtrls,
  JvStatusBar, uDAInterfaces, JSDialog;

type
  TfEditorComisiones = class(TfEditorGridBase, IEditorComisiones)
    N4: TMenuItem;
    Volcaradisco1: TMenuItem;
    TBXSubmenuItem2: TTBXSubmenuItem;
    TBXItem38: TTBXItem;
    JsPrevisualizarDialog: TJSDialog;
    JsImprimirDialog: TJSDialog;
    procedure FormShow(Sender: TObject);
  private
    FComisiones: IBizComisiones;
    FController : IComisionesController;
  protected
    function GetComisiones: IBizComisiones;
    procedure SetComisiones(const Value: IBizComisiones);
    function GetController : IComisionesController; virtual;
    procedure SetController (const Value : IComisionesController); virtual;

    procedure NuevoInterno; override;
    procedure EliminarInterno; override;
    procedure ModificarInterno; override;
    procedure PrevisualizarInterno; override;
    procedure ImprimirInterno; 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 Comisiones: IBizComisiones read GetComisiones write SetComisiones;
    property Controller : IComisionesController read GetController write SetController;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

implementation

uses
  uCustomEditor, uDataModuleComisiones, uDataModuleUsuarios, uGridUtils,
  //uEditorRemesaCliente,
  uEditorDBBase,  cxGrid, cxGridCustomTableView, uDBSelectionListUtils;

{$R *.dfm}

{
****************************** TfEditorComisiones *******************************
}
procedure TfEditorComisiones.FormShow(Sender: TObject);
begin
  inherited;

  if not Assigned(ViewGrid) then
    raise Exception.Create('No hay ninguna vista asignada');

  if not Assigned(Comisiones) then
    raise Exception.Create('No hay ningún RemesaCliente asignado');

  Comisiones.DataTable.Active := True;
  ViewGrid.GotoFirst;
end;

function TfEditorComisiones.GetComisiones: IBizComisiones;
begin
  Result := FComisiones;
end;

procedure TfEditorComisiones.ImprimirInterno;
var
  Respuesta : Integer;
  AComisiones: IBizComisiones;
  AllItems: Boolean;
begin
  AComisiones := Nil;
  AllItems := False;

  if MultiSelect and Assigned(ViewGrid) then
     AllItems :=  (ViewGrid.NumSeleccionados > 1);

  //Si esta agrupado solo podré imprimir la lista de elementos visibles
  if not ViewGrid.esSeleccionCeldaDatos then
     inherited
  else
  begin
    Respuesta := JsImprimirDialog.Execute;
    if Respuesta <> IDCANCEL then
    begin
      case JsImprimirDialog.CustomButtonResult of
        200   : begin   // Lista de elementos visibles
                  inherited;
                end;
        100   : begin   // Elemento Seleccionado
                  if AllItems then
                  begin
                    SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Comisiones as ISeleccionable).SelectedRecords);
                    AComisiones := (Controller as IComisionesController).ExtraerSeleccionados(Comisiones) as IBizComisiones;
                  end
                  else
                    AComisiones := Comisiones;

                  if Assigned(AComisiones) then
                     FController.Print(AComisiones, AllItems);
                end;
      end;
    end;
  end;
end;

function TfEditorComisiones.GetController: IComisionesController;
begin
  Result := FController;
end;

procedure TfEditorComisiones.ModificarInterno;
begin
  inherited;
  FController.Ver(Comisiones);
end;

procedure TfEditorComisiones.NuevoInterno;
begin
  inherited;
  FController.Anadir(Comisiones);
  FController.Ver(Comisiones);
end;

procedure TfEditorComisiones.PonerTitulos(const ATitulo: string);
var
  FTitulo : String;
begin
//  FTitulo := 'Lista de liquidaciones de comisiones - ' + AppFactuGES.EmpresaActiva.NOMBRE;
  inherited PonerTitulos(FTitulo);
end;

procedure TfEditorComisiones.PrevisualizarInterno;
var
  Respuesta : Integer;
  AComisiones: IBizComisiones;
  AllItems: Boolean;
begin
  AComisiones := Nil;
  AllItems := False;

  if MultiSelect and Assigned(ViewGrid) then
     AllItems :=  (ViewGrid.NumSeleccionados > 1);

  //Si esta agrupado solo podré imprimir la lista de elementos visibles
  if not ViewGrid.esSeleccionCeldaDatos then
     inherited
  else
  begin
    Respuesta := JsPrevisualizarDialog.Execute;
    if Respuesta <> IDCANCEL then
    begin
      case JsPrevisualizarDialog.CustomButtonResult of
        200   : begin   // Lista de elementos visibles
                  inherited;
                end;
        100   : begin   // Elemento Seleccionado
                  if AllItems then
                  begin
                    SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Comisiones as ISeleccionable).SelectedRecords);
                    AComisiones := (Controller as IComisionesController).ExtraerSeleccionados(Comisiones) as IBizComisiones;
                  end
                  else
                    AComisiones := Comisiones;

                  if Assigned(AComisiones) then
                     FController.Preview(AComisiones, AllItems);
                end;
      end;
    end;
  end;
end;

procedure TfEditorComisiones.SetComisiones(const Value: IBizComisiones);
begin
  FComisiones := Value;
  dsDataTable.DataTable := FComisiones.DataTable;
  if Assigned(ViewGrid) then
    (ViewGrid as IViewComisiones).Comisiones := Comisiones;
end;

procedure TfEditorComisiones.SetController(const Value: IComisionesController);
begin
  FController := Value;
end;

destructor TfEditorComisiones.Destroy;
begin
  FComisiones := NIL;
  FController := NIl;
  inherited;
end;

procedure TfEditorComisiones.EliminarInterno;
begin
  if (Application.MessageBox('¿Desea borrar esta liquidación de comisiones?', '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(Comisiones) then
       actRefrescar.Execute;
  end;
end;

procedure TfEditorComisiones.AsignarVista;
begin
  ViewGrid := CreateView(TfrViewComisiones) as IViewComisiones;
end;

constructor TfEditorComisiones.Create(AOwner: TComponent);
begin
  inherited;
  AsignarVista;
end;

end.

  