unit uEditorControlVentaProceso;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uEditorControlBase, DB, uDADataTable, JvAppStorage,
  JvAppRegistryStorage, JvComponentBase, JvFormPlacement, ImgList,
  PngImageList, StdActns, ActnList, ComCtrls, TBX, TB2Item, TB2Dock,
  TB2Toolbar, ExtCtrls, JvExControls, JvComponent, JvNavigationPane, uBizControlesBase,
  uCustomView, uViewBase, uViewControlBase, uViewControlVentaProceso,
  Grids, DBGrids, pngimage;

type
  IEditorControlVentaProceso = interface(IEditorControlBase)
  ['{7F768AD2-1FF0-41E0-9157-4AB2E2CD7D32}']
  end;
  
  TfEditorControlVentaProceso = class(TfEditorControlBase, IEditorControlVentaProceso)
    frViewControlVentaProceso1: TfrViewControlVentaProceso;
    dsVentasProceso: TDADataSource;
    TBXSeparatorItem16: TTBXSeparatorItem;
    tbxiExpandir: TTBXItem;
    tbxiContraer: TTBXItem;
    tbxiAnchoAuto: TTBXItem;
    actExpandir: TAction;
    actContraer: TAction;
    actAnchoAuto: TAction;
    TBXItem37: TTBXItem;
    TBXItem36: TTBXItem;
    TBXItem35: TTBXItem;
    TBXSeparatorItem17: TTBXSeparatorItem;
    procedure actRefrescarExecute(Sender: TObject);
    procedure actExpandirExecute(Sender: TObject);
    procedure actContraerExecute(Sender: TObject);
    procedure actAnchoAutoExecute(Sender: TObject);
    procedure CustomEditorCreate(Sender: TObject);
    procedure CustomEditorGetModified(Sender: TObject;
      var Modified: Boolean);
    procedure actGuardarExecute(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure actPrevisualizarExecute(Sender: TObject);
    procedure actImprimirExecute(Sender: TObject);
    procedure actConfPaginaExecute(Sender: TObject);
    procedure frViewControlVentaProceso1bRefrescarClick(Sender: TObject);
  private
    procedure RestaurarConfiguracion;
    procedure GuardarConfiguracion;
  protected
    FModificado : Boolean;
    procedure OnViewControlChanged(Sender: TObject);
    procedure SetControl(const Value: IBizControlBase); override;
    procedure RellenarCabeceraInforme;
  public
    constructor Create(AOwner: TComponent); override;
  end;


implementation

uses
  uEditorUtils, uBizControlVentasProceso, uROClasses,
  cxGridTableView;

{$R *.dfm}

function ShowEditorVentasProceso (ABizObject : TDADataTableRules): TModalResult;
var
  AEditor: IEditorControlVentaProceso; //TfEditorInformeVentas;
begin
  AEditor := TfEditorControlVentaProceso.Create(Application);
  try
    AEditor.Control := (ABizObject as IBizControlVentasProceso);
    Result := AEditor.ShowModal;
  finally
    AEditor.Release;
  end;
end;


{ TfEditorControlVentaProceso }

procedure TfEditorControlVentaProceso.SetControl(
  const Value: IBizControlBase);
begin
  inherited;
  RefrescarTituloEditor;
  if Assigned(FControl) then
  begin
    frViewControlVentaProceso1.Control := FControl;
    frViewControlVentaProceso1.OnViewChanged := OnViewControlChanged;
    dsDataTable.DataTable := FControl.DataTable;
    with (FControl as IBizControlVentasProceso) do
    begin
      Items.DataTable.Active := False;  // No se abre la tabla hasta que no se pulse en 'Refrescar'
      dsVentasProceso.DataTable := Items.DataTable;
      frViewControlVentaProceso1.frViewControlGridVentaProceso1.FocusedView.DataController.DataSource := dsVentasProceso;
    end;
  end;
end;

procedure TfEditorControlVentaProceso.actRefrescarExecute(Sender: TObject);
begin
  inherited;
  frViewControlVentaProceso1.Refresh;

  while (frViewControlVentaProceso1.frViewControlGridVentaProceso1.FocusedView.Controller.FocusedRecord is TcxGridGroupRow) do
  begin
    frViewControlVentaProceso1.frViewControlGridVentaProceso1.FocusedView.Controller.FocusedRecord.Expand(True);
    if (frViewControlVentaProceso1.frViewControlGridVentaProceso1.FocusedView.Controller.FocusedRecordIndex <
      frViewControlVentaProceso1.frViewControlGridVentaProceso1.FocusedView.DataController.RowCount - 1) then
      frViewControlVentaProceso1.frViewControlGridVentaProceso1.FocusedView.Controller.GoToNext(False, True)
    else
      Exit;
  end;
end;

procedure TfEditorControlVentaProceso.actExpandirExecute(Sender: TObject);
begin
  inherited;
  frViewControlVentaProceso1.frViewControlGridVentaProceso1.ExpandirTodo;
end;

procedure TfEditorControlVentaProceso.actContraerExecute(Sender: TObject);
begin
  inherited;
  frViewControlVentaProceso1.frViewControlGridVentaProceso1.ContraerTodo;
end;

procedure TfEditorControlVentaProceso.actAnchoAutoExecute(Sender: TObject);
begin
  inherited;
  frViewControlVentaProceso1.frViewControlGridVentaProceso1.AjustarAncho;
end;

procedure TfEditorControlVentaProceso.OnViewControlChanged(
  Sender: TObject);
begin
  FModificado := True;
end;

procedure TfEditorControlVentaProceso.CustomEditorCreate(Sender: TObject);
begin
  inherited;
  FModificado := False;
end;

procedure TfEditorControlVentaProceso.CustomEditorGetModified(
  Sender: TObject; var Modified: Boolean);
begin
  inherited;
  Modified := FModificado;
end;

procedure TfEditorControlVentaProceso.actGuardarExecute(Sender: TObject);
begin
  GuardarConfiguracion;
  inherited;
  FModificado := False;
end;

procedure TfEditorControlVentaProceso.GuardarConfiguracion;
var
  Aux : IROStrings;
begin
  Aux := NewROStrings();
  Aux.Add(frViewControlVentaProceso1.frViewControlGridVentaProceso1.ViewProperties);
  if not (FControl.DataTable.State in dsEditModes) then
    FControl.Edit;
  FControl.VISTA := Aux;
end;

procedure TfEditorControlVentaProceso.RestaurarConfiguracion;
begin
  frViewControlVentaProceso1.frViewControlGridVentaProceso1.ViewProperties := FControl.VISTA.Text;
end;

procedure TfEditorControlVentaProceso.FormShow(Sender: TObject);
begin
  inherited;
  if FControl.DataTable.State <> dsInsert then // No restaurar si estamos insertando
    RestaurarConfiguracion;
  frViewControlVentaProceso1.frViewColumnas1.Refresh;
  frViewControlVentaProceso1.frViewAgrupaciones1.Refresh;
end;

procedure TfEditorControlVentaProceso.actPrevisualizarExecute(
  Sender: TObject);
begin
  inherited;
  RellenarCabeceraInforme;
  frViewControlVentaProceso1.frViewControlGridVentaProceso1.Preview;
end;

procedure TfEditorControlVentaProceso.actImprimirExecute(Sender: TObject);
begin
  inherited;
  RellenarCabeceraInforme;
  frViewControlVentaProceso1.frViewControlGridVentaProceso1.Print;
end;

procedure TfEditorControlVentaProceso.actConfPaginaExecute(
  Sender: TObject);
begin
  inherited;
  RellenarCabeceraInforme;
  frViewControlVentaProceso1.frViewControlGridVentaProceso1.PrintSetup;
end;

procedure TfEditorControlVentaProceso.RellenarCabeceraInforme;
begin
  with frViewControlVentaProceso1.frViewControlGridVentaProceso1.dxPrintStyleManager1Style1.PrinterPage.PageHeader do
  begin
    LeftTitle.Clear;
    LeftTitle.Add(FControl.NOMBRE);
    RightTitle.Clear;
    RightTitle.Add(frViewControlVentaProceso1.frViewControlGridVentaProceso1.FocusedView.DataController.Filter.FilterText);
  end;
end;

constructor TfEditorControlVentaProceso.Create(AOwner: TComponent);
begin
  inherited;
  FViewControl := frViewControlVentaProceso1;
  Self.Caption := 'Nueva consulta de ventas en proceso';
  JvNavPanelHeader.Caption := Self.Caption;
end;

procedure TfEditorControlVentaProceso.frViewControlVentaProceso1bRefrescarClick(
  Sender: TObject);
begin
  inherited;
  frViewControlVentaProceso1.actRefrescarExecute(Sender);

end;

initialization
  RegisterEditor(IBizControlVentasProceso, ShowEditorVentasProceso, etItem);

end.

