unit uEditorClientes;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  uEditorContactos, Menus, ImgList, PngImageList, StdActns,
  ActnList, TB2ExtItems, TBXExtItems, TBX, TB2Item, TB2Dock, TB2Toolbar,
  JvExControls, JvComponent, JvNavigationPane, DB, uDADataTable,
  JvFormAutoSize, ComCtrls, uDAScriptingProvider, uDACDSDataTable, StdCtrls,
  JvAppStorage, JvAppRegistryStorage, JvFormPlacement, uCustomView,
  uViewBase, uViewBarraSeleccion, ExtCtrls, pngimage, JvComponentBase,

  uIEditorClientes, uViewGridBase, uViewGrid, uViewContactos, uViewClientes,
  TBXStatusBars, JvExComCtrls, JvStatusBar, JSDialog;

type
  TfEditorClientes = class(TfEditorContactos, IEditorClientes)
    frViewClientes1: TfrViewClientes;
    actGruposCliente: TAction;
    JsPrevisualizarDialog: TJSDialog;
    JsImprimirDialog: TJSDialog;
    JsListaClientesNoEliminados: TJSDialog;
    procedure actGruposClienteExecute(Sender: TObject);

  protected
    procedure EliminarInterno; override;
    procedure ImprimirInterno; override;
    procedure PrevisualizarInterno; override;

  public
    constructor Create(AOwner: TComponent); override;
    procedure PonerTitulos(const ATitulo: string = ''); override;
  end;

implementation

uses
  uDataModuleContactos, uDataModuleBase, uEditorGridBase, uBizContactos,
  uDBSelectionListUtils, uDataModuleUsuarios, uDialogUtils, uClientesController,
  uGruposClienteController, uBizGruposCliente, uContactosController, uGridUtils;

{$R *.dfm}


{
******************************* TfEditorClientes *******************************
}
procedure TfEditorClientes.actGruposClienteExecute(Sender: TObject);
var
  AGruposController : IGruposClienteController;
  AGrupos : IBizGrupoCliente;
begin
  AGruposController := TGruposClienteController.Create;
  try
    AGrupos := (AGruposController.BuscarTodos as IBizGrupoCliente);
    AGruposController.VerTodos(AGrupos);
  finally
    AGrupos := NIL;
    AGruposController := NIL;
  end;
end;

constructor TfEditorClientes.Create(AOwner: TComponent);
begin
  inherited;
  ViewGrid := frViewClientes1; //CreateView(TfrViewClientes) as IViewContactos;
end;

procedure TfEditorClientes.EliminarInterno;
var
  AContactos: IBizContacto;
  AllItems: Boolean;
begin
  AContactos := Nil;
  AllItems := False;

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

  if AllItems then
  begin
    if (Application.MessageBox('¿Desea borrar los clientes seleccionados?', 'Atención', MB_YESNO) = IDYES) then
    begin
      SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Contactos as ISeleccionable).SelectedRecords);
      AContactos := (Controller as IContactosController).ExtraerSeleccionados(Contactos, ViewGrid) as IBizContacto;
    end
  end
  else begin
    if (Application.MessageBox('¿Desea borrar el cliente seleccionado?', 'Atención', MB_YESNO) = IDYES) then
        AContactos := Contactos;
  end;

  if Assigned(AContactos) then
  begin
    (FController as IClientesController).Eliminar(AContactos, AllItems);
    if AllItems then
    begin
      JsListaClientesNoEliminados.Content.Clear;
      if (AContactos.DataTable.RecordCount > 0) then
      begin
        with  AContactos.DataTable do
        begin
          First;
          while not EOF do
          begin
            JsListaClientesNoEliminados.Content.Add('Cliente: ' + AContactos.REFERENCIA + '  ' + AContactos.NOMBRE);
            Next;
          end;
        end;
        JsListaClientesNoEliminados.Execute;
      end;

      actRefrescar.Execute;
    end;
  end;

  ViewGrid.GotoFirst;
end;

procedure TfEditorClientes.ImprimirInterno;
var
  Respuesta : Integer;
  AContactos: IBizContacto;
begin
  AContactos := Nil;

  //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
                  SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Contactos as ISeleccionable).SelectedRecords);
                  AContactos := (Controller as IContactosController).ExtraerSeleccionados(Contactos, ViewGrid) as IBizContacto;

                  if Assigned(AContactos) then
                     if FController.Print(AContactos) then
                        RefrescarInterno;
                end;
      end;
    end;
  end;
end;

procedure TfEditorClientes.PonerTitulos(const ATitulo: string);
var
  FTitulo : String;
begin
  FTitulo := 'Lista de clientes - ' + dmUsuarios.EmpresaActual.NOMBRE;
  inherited PonerTitulos(FTitulo);
end;

procedure TfEditorClientes.PrevisualizarInterno;
var
  Respuesta : Integer;
  AContactos: IBizContacto;
begin
  AContactos := Nil;

  //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
                  SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Contactos as ISeleccionable).SelectedRecords);
                  AContactos := (Controller as IContactosController).ExtraerSeleccionados(Contactos, ViewGrid) as IBizContacto;

                  if Assigned(AContactos) then
                     FController.Preview(AContactos);
                end;
      end;
    end;
  end;
end;

end.
