unit uViewDetallesAlbaranCliente;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter,
  cxData, cxDataStorage, cxEdit, DB, cxDBData, ImgList, PngImageList,
  uDADataTable, ActnList, ComCtrls, ToolWin, cxGridLevel, cxClasses, cxControls,
  cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView,
  cxGrid, cxImageComboBox, cxTextEdit, cxMaskEdit, cxCheckBox, cxCurrencyEdit,
  Grids, DBGrids, StdCtrls, ExtCtrls, cxRichEdit, ExtActns, StdActns,
  JvExStdCtrls, JvCombobox, JvColorCombo, TB2Item, SpTBXItem, TB2Dock, TB2Toolbar,
  uControllerDetallesArticulos, uBizAlbaranesCliente, uBizDetallesAlbaranCliente,
  cxDropDownEdit, cxCalendar, cxDBEdit, dxLayoutControl, cxContainer, cxLookupEdit,
  cxDBLookupEdit, cxDBLookupComboBox, uDAInterfaces, cxButtonEdit,
  uViewDetallesArticulos, Menus, cxGridCustomPopupMenu, cxGridPopupMenu,
  uViewDetallesArticulosParaVenta, cxEditRepositoryItems, cxLookAndFeels,
  cxLookAndFeelPainters;

type
  IViewDetallesAlbaranCliente = interface(IViewDetallesArticulos)
  ['{9326E1A0-BD5E-4BE1-BB3B-6A52C3394118}']
    function GetAlbaran: IBizAlbaranCliente;
    procedure SetAlbaran(const Value: IBizAlbaranCliente);
    property Albaran: IBizAlbaranCliente read GetAlbaran write SetAlbaran;
  end;

  TfrViewDetallesAlbaranCliente = class(TfrViewDetallesArticulosParaVenta, IViewDetallesAlbaranCliente)
    N2: TMenuItem;
    Aadirartculos1: TMenuItem;
    TBXItem18: TSpTBXItem;
    cxGridViewCANTIDAD2: TcxGridDBColumn;
    cxGridViewIR_ARTICULO_REEMPLAZADO: TcxGridDBColumn;
    cxGridViewREFERENCIA_ART_REEMPLAZADO: TcxGridDBColumn;
    procedure cxGridViewREFERENCIA_ART_REEMPLAZADOPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
    procedure OnValidateReferencia_ART_REEMPLAZADO(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
    procedure CustomViewCreate(Sender: TObject);
    procedure CustomViewDestroy(Sender: TObject);
    procedure cxGridViewCANTIDAD2PropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
  protected
    FAlbaran: IBizAlbaranCliente;
    function GetAlbaran: IBizAlbaranCliente;
    procedure SetAlbaran(const Value: IBizAlbaranCliente);

    procedure AnadirArticulosInterno; override;
    procedure RellenarArticulosInterno; override;
    function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override;

  public
    property Albaran: IBizAlbaranCliente read GetAlbaran write SetAlbaran;
  end;

implementation
{$R *.dfm}

uses uDetallesAlbaranClienteController, uViewDetallesBase, uDialogUtils;

{ TfrViewDetallesAlbaranProveedor }

function TfrViewDetallesAlbaranCliente.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean;
begin
  if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then
     Result := (Controller as IDetallesAlbaranClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, Albaran.Cliente.ID, -1)
  else
     Result := (Controller as IDetallesAlbaranClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, Albaran.Cliente.ID, 0);
end;

procedure TfrViewDetallesAlbaranCliente.AnadirArticulosInterno;
begin
  if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then
    (Controller as IDetallesAlbaranClienteController).AnadirArticulos(Detalles, Albaran.Cliente, true, -1)
  else
    (Controller as IDetallesAlbaranClienteController).AnadirArticulos(Detalles, Albaran.Cliente, true, 0);
end;

procedure TfrViewDetallesAlbaranCliente.CustomViewCreate(Sender: TObject);
begin
  inherited;
  cxGridViewREFERENCIA_ART_REEMPLAZADO.Properties.OnValidate := OnValidateReferencia_ART_REEMPLAZADO;
end;

procedure TfrViewDetallesAlbaranCliente.CustomViewDestroy(Sender: TObject);
begin
  cxGridViewREFERENCIA_ART_REEMPLAZADO.Properties.OnValidate := Nil;
  inherited;
end;

procedure TfrViewDetallesAlbaranCliente.cxGridViewCANTIDAD2PropertiesButtonClick(
  Sender: TObject; AButtonIndex: Integer);
begin
  inherited;
  (Controller as IDetallesAlbaranClienteController).ModificarCantidadColores(Detalles);
end;

procedure TfrViewDetallesAlbaranCliente.cxGridViewREFERENCIA_ART_REEMPLAZADOPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
  inherited;
  case AButtonIndex of
    0:(Controller as IControllerDetallesArticulos).AnadirArticulos(Detalles, False, tClienteReemplazo);
    1:(Controller as IDetallesAlbaranClienteController).QuitarArticuloReemplazado(Detalles);
  end;
end;

function TfrViewDetallesAlbaranCliente.GetAlbaran: IBizAlbaranCliente;
begin
  Result := FAlbaran; 
end;

procedure TfrViewDetallesAlbaranCliente.OnValidateReferencia_ART_REEMPLAZADO(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
var
  lsReferencia : String;
begin
  //En el caso de cadena vacia no validamos
  if (VarIsNull(DisplayValue)) then
     Exit;

  lsReferencia := VarToStr(DisplayValue);
  if (length(trim(lsReferencia)) <> 0) then
  begin
    if not AnadirArticulo(lsReferencia, tClienteReemplazo) then
    begin
      ErrorText := 'La referencia introducida no exite en el catálogo';
      Error := True;
    end;
  end
  else
    (Controller as IDetallesAlbaranClienteController).QuitarArticuloReemplazado(Detalles);  
end;

procedure TfrViewDetallesAlbaranCliente.RellenarArticulosInterno;
begin
  if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then
    (Controller as IDetallesAlbaranClienteController).AnadirArticulos(Detalles, Albaran.Cliente, False, -1)
  else
    (Controller as IDetallesAlbaranClienteController).AnadirArticulos(Detalles, Albaran.Cliente, False, 0);
end;

procedure TfrViewDetallesAlbaranCliente.SetAlbaran(const Value: IBizAlbaranCliente);
begin
  FAlbaran := Value;
end;

end.
