unit uEditorAlbaranDevProveedor;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uEditorAlbaranProveedor, dxLayoutLookAndFeels, DB, uDADataTable,
  JvAppStorage, JvAppRegistryStorage, JvComponentBase, JvFormPlacement, ImgList,
  PngImageList, StdActns, ActnList, uViewTotales, ComCtrls, JvExComCtrls,
  JvStatusBar, uViewIncidencias, uViewDetallesBase, uViewDetallesDTO,
  uViewDetallesArticulos, uViewDetallesAlbaranProveedor, uCustomView, uViewBase,
  uViewAlbaranProveedor, TBX, TB2Item, TB2Dock, TB2Toolbar, pngimage, ExtCtrls,
  JvExControls, JvComponent, JvNavigationPane, uIEditorAlbaranDevProveedor;

type
  TfEditorAlbaranDevProveedor = class(TfEditorAlbaranProveedor, IEditorAlbaranDevProveedor)
    procedure pgPaginasChanging(Sender: TObject; var AllowChange: Boolean);
  protected
    //Si queremos crear otra vista para el editor heredado solo tendriamos que
    //sobreescribir este metodo
    procedure AsignarVista; override;
    procedure GuardarInterno; override;
    procedure EliminarInterno; override;
  public
    procedure PonerTitulos(const ATitulo: string = ''); override;
  end;

implementation

{$R *.dfm}

uses
  cxControls, uDataTableUtils, uDialogUtils, uViewAlbaranDevProveedor;

{ TfEditorAlbaranDevProveedor }

procedure TfEditorAlbaranDevProveedor.AsignarVista;
var
  AViewAlbaranDevProveedor: TfrViewAlbaranDevProveedor;

begin
  AViewAlbaranDevProveedor := TfrViewAlbaranDevProveedor.create(Self);
  with AViewAlbaranDevProveedor do
  begin
    Parent := pagGeneral;
    Align := alClient;
    dxLayoutControl1.LookAndFeel := dxLayoutOfficeLookAndFeel1;
  end;
  ViewAlbaran := AViewAlbaranDevProveedor;
end;

procedure TfEditorAlbaranDevProveedor.EliminarInterno;
begin
  //inherited;  <- No descomentar. No hacer la parte del padre (por el mensaje)
  if (Application.MessageBox('¿Desea borrar esta orden de devolución?', 'Atención', MB_YESNO) = IDYES) then
  begin
    FController.Eliminar(FAlbaran);
    inherited
  end
end;

procedure TfEditorAlbaranDevProveedor.GuardarInterno;
var
  bEsNuevo : Boolean;
begin
  //inherited;  <- No descomentar. No hacer la parte del padre (por el mensaje)
  bEsNuevo := False;

  ShowHourglassCursor;
//  frViewDetallesAlbaranProveedor1.SaveGridStatus;
  frViewDetallesAlbaranProveedor1.BeginUpdate;
  try
    bEsNuevo := FAlbaran.EsNuevo;
    FController.Guardar(FAlbaran);
  finally
    frViewDetallesAlbaranProveedor1.EndUpdate;
//    frViewDetallesAlbaranProveedor1.RestoreGridStatus;
    HideHourglassCursor;
  end;
  if bEsNuevo then
    ShowInfoMessage('La orden de devolución se ha dado de alta con el código ' + FAlbaran.REFERENCIA);

  Modified := False;
end;

procedure TfEditorAlbaranDevProveedor.pgPaginasChanging(Sender: TObject;
  var AllowChange: Boolean);
begin
//  inherited; <- No descomentar. No quiero hacer la parte del padre
  if (not Assigned(FAlbaran)) or (FAlbaran.ID_PROVEEDOR = ID_NULO) then
  begin
    ShowWarningMessage('Antes de introducir conceptos debe elegir un proveedor para esta orden de devolución');
    AllowChange := False;
  end;
end;

procedure TfEditorAlbaranDevProveedor.PonerTitulos(const ATitulo: string);
var
  FTitulo : String;
begin
  FTitulo := ATitulo;
  if (FTitulo = '') and Assigned(FAlbaran) then
  begin
      if FAlbaran.EsNuevo then
         FTitulo := 'Nueva orden de devolución de proveedor'
      else
         FTitulo := 'Orden de devolución de proveedor'  + ' - ' + FAlbaran.Proveedor.Nombre;
  end;

  inherited PonerTitulos(FTitulo);
end;

end.
