{
===============================================================================
  Copyright (©) 2001. Rodax Software.
===============================================================================
  Los contenidos de este fichero son propiedad de Rodax Software titular del
  copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
  en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
  acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
  bajo el que se suministra.
  -----------------------------------------------------------------------------
  Web:  www.rodax-software.com
===============================================================================
  Fecha primera versión: 01-10-2001
  Versión actual: 1.0.6
  Fecha versión actual: 15-04-2004
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    02-11-2001    En CambiarEntidad tengo que cambiar manualmante la entidad de
                  la barra de titulo ArticulosAlmacen, ya que no está incluida
                  dentro del frame y no se entera de la entidad en la que está,
                  que puede ser ArticulosAlmacen, ArticulosAlmacenFisico o
                  ArticulosAlmacenObra, y en cada uno tendrá un titulo
                  diferente. El no estar incluido en el panel era por un
                  problema de barras en ciertos casos, que salian las dos
                  barras a la vez.

                  Añadir el botón finalizar obra que solo será visible cuando
                  la entidad en la que nos encontremos sea
                  entArticulosAlmacenObra.

    02-03-2002    En el contenido se pueden añadir muchos materiales a la vez.

    07-04-2002    Se ha adaptado a una unica transacción.

    11-08-2002    p223. Se ha modificado finalizar obra para la ampliacion de
                  historico de obras.

    07-09-2002    Adaptada la función 'CambiarEntidad'.

    15-04-2004    Al hacer doble click sobre el grid, se pasará a modificar el
                  registro o se seleccionará, dependiendo del modo en el que
                  se encuentre la pantalla.

    15-04-2004    p272. Adaptación a multiempresa.                  
===============================================================================
}

unit ListadoArticulosObraHistorica;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ListadoBase, ExtCtrls, StdCtrls, RdxTitulos, RdxPaneles, RdxCampos,
  cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxButtonEdit,
  cxDropDownEdit, RdxRadioButton, RdxShape, TablaArticulosObraHistorica, Tipos;

type
  TfrListadoArticulosObraHistorica = class(TfrListadoBase)
    eAlmacen: TLabel;
    NombreAlmacen: TRdxEdit;
    Separador: TRdxShape;
    eInfoCriterios: TLabel;
    rbTodos: TRdxRadioButton;
    rbArticulos: TRdxRadioButton;
    DescripcionIni: TcxButtonEdit;
    DescripcionFin: TcxButtonEdit;
    rbFamilias: TRdxRadioButton;
    cbFamiliaIni: TcxComboBox;
    Label1: TLabel;
    cbFamiliaFin: TcxComboBox;
    CodAlmacen: TcxButtonEdit;
    procedure DescripcionIniPropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure rbTodosClick(Sender: TObject);
    procedure rbArticulosClick(Sender: TObject);
    procedure rbFamiliasClick(Sender: TObject);
    procedure RdxFrameShow(Sender: TObject);
    procedure DescripcionIniPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure DescripcionFinPropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure DescripcionFinPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure cbFamiliaIniPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure cbFamiliaFinPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure CodAlmacenPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure CodAlmacenPropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
  private
    FCodigoAlmacen : TTipoCodigoFecha;
    FCodigoArticuloAux : Variant;
    FArticuloIni : TDatosMaterial;
    FArticuloFin : TDatosMaterial;
    procedure ActivarNombres;
    procedure ActivarFamilias;
    procedure DesactivarNombres;
    procedure DesactivarFamilias;
    procedure RefrescarInforme; override;
    procedure SetCodigoAlmacen(const Value: TTipoCodigoFecha);
  protected
    procedure FreeContenido; override;
    procedure VerModal; override;
  public
    { Public declarations }
    property CodigoAlmacen : TTipoCodigoFecha read FCodigoAlmacen write SetCodigoAlmacen;
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
  end;

var
  frListadoArticulosObraHistorica: TfrListadoArticulosObraHistorica;

implementation
{$R *.DFM}

uses
  Configuracion, Almacenes, TablaAlmacenes, StrFunc, RdxEmpresaActiva, Mensajes,
  InformeEstadoObraHistorica, RdxFrameAlmacenes, Entidades, RdxFrameArticulos,
  TablaFamilias, ArticulosObraHistorica, Literales;

procedure TfrListadoArticulosObraHistorica.DescripcionIniPropertiesButtonClick(
  Sender: TObject; AButtonIndex: Integer);
begin
  ContenidoModal := TfrArticulosObraHistorica.Create(Self);
  if not VarIsNull(FCodigoArticuloAux) then
  begin
    FArticuloIni.CodigoObra := CodigoAlmacen.Codigo;
    FArticuloIni.FechaCierre := CodigoAlmacen.Fecha;
    FArticuloIni.CodigoArticulo := FCodigoArticuloAux;
    dmTablaArticulosObraHistorica.DarDatosMaterial(EmpresaActiva.Codigo, FArticuloIni);
    DescripcionIni.EditingText := FArticuloIni.Descripcion;
    PostMessage(DescripcionIni.Handle, WM_KEYDOWN, VK_RETURN, 0);
  end;
end;

procedure TfrListadoArticulosObraHistorica.SetCodigoAlmacen(const Value: TTipoCodigoFecha);
var
  DescripcionAux : String;
begin
  if (Value <> NIL) then
  begin
    if FCodigoAlmacen <> NIL then
       FCodigoAlmacen.Free;
       
    FCodigoAlmacen := Value;
    CodAlmacen.Text := IntToStr(FCodigoAlmacen.Codigo) ;
    NombreAlmacen.Text := FCodigoAlmacen.DarDescripcion;

    DescripcionAux := dmTablaArticulosObraHistorica.DarArticuloMin(EmpresaActiva.Codigo, FCodigoAlmacen.Codigo, FCodigoAlmacen.Fecha);
    FArticuloIni.CodigoArticulo := '';
    FArticuloIni.Descripcion := DescripcionAux;
    DescripcionIni.EditingText := FArticuloIni.Descripcion;

    DescripcionAux := dmTablaArticulosObraHistorica.DarArticuloMax(EmpresaActiva.Codigo, FCodigoAlmacen.Codigo, FCodigoAlmacen.Fecha);
    FArticuloFin.CodigoArticulo := '';
    FArticuloFin.Descripcion := DescripcionAux;
    DescripcionFin.EditingText := FArticuloFin.Descripcion;

    RefrescarInforme;
  end;
end;

constructor TfrListadoArticulosObraHistorica.Create(AOwner: TComponent);
begin
  inherited;
  ConfigurarFrame(Self, Self.Entidad);

  FCodigoAlmacen := NIL;
  FArticuloIni := TDatosMaterial.Create;
  FArticuloFin := TDatosMaterial.Create;
  FCodigoArticuloAux := NULL;

  cbFamiliaIni.Properties.Items := dmTablaFamilias.darFamilias;
  cbFamiliaIni.Properties.Items.Delete(0); //Borro el item en blanco.
  cbFamiliaIni.ItemIndex := 0;
  cbFamiliaFin.Properties.Items := dmTablaFamilias.darFamilias;
  cbFamiliaFin.Properties.Items.Delete(0); //Borro el item en blanco.
  cbFamiliaFin.ItemIndex := cbFamiliaFin.Properties.Items.Count - 1;

  FInforme := TdmInformeEstadoObraHistorica.Create(Self);
  FInforme.Preview := FVistaPrevia.Preview;
end;

destructor TfrListadoArticulosObraHistorica.Destroy;
begin
  FreeAndNil(FArticuloIni);
  FreeAndNil(FArticuloFin);
  // El informe se destruye en el padre
  inherited;
end;

procedure TfrListadoArticulosObraHistorica.RefrescarInforme;
begin
  with (FInforme as TdmInformeEstadoObraHistorica) do
  begin
    CodigoObra := FCodigoAlmacen.Codigo;
    NombreObra := FCodigoAlmacen.Nombre;
    FechaCierre := StrToDate(FCodigoAlmacen.Fecha);

    if rbTodos.Checked then
      Tipo := tiTodo
    else begin
      if rbArticulos.Checked then
      begin
        Tipo := tiPorDescripcion;
        DescripcionIni := FArticuloIni.Descripcion;
        DescripcionFin := FArticuloFin.Descripcion;
      end
      else begin
        Tipo := tiPorFamilias;
        FamiliaIni := cbFamiliaIni.Text;
        FamiliaFin := cbFamiliaFin.Text;
      end;
    end;
    Previsualizar;
  end;
end;

procedure TfrListadoArticulosObraHistorica.FreeContenido;
var
  lcodigo: TTipoCodigoFecha;
begin
  if (ContenidoModal is TfrArticulosObraHistorica) then
    FCodigoArticuloAux := (ContenidoModal as TfrArticulosObraHistorica).CodigoArticulo;

  if (ContenidoModal is TfrAlmacenes)
  and ((ContenidoModal as TfrAlmacenes).CodigoAlmacen <> Null) then
  begin
    lcodigo := TTipoCodigoFecha.Create;
    lcodigo.Codigo := StrToInt((ContenidoModal as TfrAlmacenes).CodigoAlmacen);
    lcodigo.Fecha := DateToStr((ContenidoModal as TfrAlmacenes).FechaCierre);
    lcodigo.Nombre := (ContenidoModal as TfrAlmacenes).ObraCierre;
    CodigoAlmacen := lcodigo;
  end;

  inherited FreeContenido;
end;

procedure TfrListadoArticulosObraHistorica.ActivarFamilias;
begin
  cbFamiliaIni.Enabled := True;
  cbFamiliaIni.SetFocus;
  cbFamiliaFin.Enabled := True;
end;

procedure TfrListadoArticulosObraHistorica.ActivarNombres;
begin
  DescripcionIni.Enabled := True;
  DescripcionIni.SetFocus;
  DescripcionFin.Enabled := True;
end;

procedure TfrListadoArticulosObraHistorica.DesactivarFamilias;
begin
  cbFamiliaIni.Enabled := False;
  cbFamiliaFin.Enabled := False;
end;

procedure TfrListadoArticulosObraHistorica.DesactivarNombres;
begin
  DescripcionIni.Enabled := False;
  DescripcionFin.Enabled := False;
end;

procedure TfrListadoArticulosObraHistorica.rbTodosClick(Sender: TObject);
begin
  DesactivarNombres;
  DesactivarFamilias;
  RefrescarInforme;
end;

procedure TfrListadoArticulosObraHistorica.rbArticulosClick(Sender: TObject);
begin
  ActivarNombres;
  DesactivarFamilias;
  RefrescarInforme;
end;

procedure TfrListadoArticulosObraHistorica.rbFamiliasClick(Sender: TObject);
begin
  ActivarFamilias;
  DesactivarNombres;
  RefrescarInforme;  
end;

procedure TfrListadoArticulosObraHistorica.RdxFrameShow(Sender: TObject);
begin
  DesactivarNombres;
  DesactivarFamilias;
  CodAlmacen.SetFocus;
end;

procedure TfrListadoArticulosObraHistorica.DescripcionIniPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
{  if EsCadenaVacia(DisplayValue) then
    DisplayValue := dmTablaArticulos.DarArticuloMin
  else}
    if AnsiCompareText(DisplayValue, DescripcionFin.Text) > 0 then
    begin
      ErrorText := msgInfArticuloIniMayor;
      Error := True;
      Exit;
    end;
  FArticuloIni.Descripcion := DisplayValue;
  FArticuloIni.CodigoArticulo := '';
  RefrescarInforme;
end;

procedure TfrListadoArticulosObraHistorica.DescripcionFinPropertiesButtonClick(
  Sender: TObject; AButtonIndex: Integer);
begin
  ContenidoModal := TfrArticulosObraHistorica.Create(Self);
  if not VarIsNull(FCodigoArticuloAux) then
  begin
    FArticuloFin.CodigoObra := CodigoAlmacen.Codigo;
    FArticuloFin.FechaCierre := CodigoAlmacen.Fecha;
    FArticuloFin.CodigoArticulo := FCodigoArticuloAux;
    dmTablaArticulosObraHistorica.DarDatosMaterial(EmpresaActiva.Codigo, FArticuloFin);
    DescripcionFin.EditingText := FArticuloFin.Descripcion;
    PostMessage(DescripcionFin.Handle, WM_KEYDOWN, VK_RETURN, 0);
  end;
end;

procedure TfrListadoArticulosObraHistorica.DescripcionFinPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
{  if EsCadenaVacia(DisplayValue) then
    DisplayValue := dmTablaArticulos.DarArticuloMax
  else}
    if AnsiCompareText(DisplayValue, DescripcionIni.Text) < 0 then
    begin
      ErrorText := msgInfArticuloIniMayor;
      Error := True;
      Exit;
    end;
  FArticuloFin.Descripcion := DisplayValue;
  FArticuloFin.CodigoArticulo := '';
  RefrescarInforme;
end;

procedure TfrListadoArticulosObraHistorica.cbFamiliaIniPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
  if AnsiCompareText(DisplayValue, cbFamiliaFin.Text) > 0 then
  begin
    ErrorText := msgInfFamiliaIniMayor;
    Error := True;
    Exit;
  end;
  RefrescarInforme;
end;

procedure TfrListadoArticulosObraHistorica.cbFamiliaFinPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
  if AnsiCompareText(DisplayValue, cbFamiliaIni.Text) < 0 then
  begin
    ErrorText := msgInfFamiliaIniMayor;
    Error := True;
    Exit;
  end;
  RefrescarInforme;
end;

procedure TfrListadoArticulosObraHistorica.VerModal;
begin
  if (ContenidoModal is TfrArticulosObraHistorica) then
    (ContenidoModal as TfrArticulosObraHistorica).CodigoAlmacen := CodigoAlmacen;
  inherited;
end;

procedure TfrListadoArticulosObraHistorica.CodAlmacenPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
var
  lcodigo: TTipoCodigoFecha;
  lDatos : TDatosObraCerrada;
begin
  if EsCadenaVacia (DisplayValue) then
  begin
    Error := True;
    ErrorText := msgInfFaltaAlmacen;
    Exit;
  end;

  try
    StrToInt(DisplayValue);
  except
    Error := True;
    ErrorText := Format(msgAlmCodAlmIncorrecto, [DisplayValue]);
    Exit;
  end;

  if (dmTablaArticulosObraHistorica.ValidarCodigo(DisplayValue)) then
  begin
    lDatos := dmTablaArticulosObraHistorica.darDatosObraCerrada(EmpresaActiva.Codigo, StrToInt(DisplayValue));
    if (lDatos = Nil) then
    begin
      Error := True;
      ErrorText := Format(msgAlmCodAlmNoExiste, [DisplayValue]);
      Exit;
    end;
  end
  else begin
    Error := True;
    ErrorText := Format(msgAlmCodAlmIncorrecto, [DisplayValue]);
    Exit;
  end;

  lcodigo := TTipoCodigoFecha.Create;
  lcodigo.Codigo := StrToInt(DisplayValue);
  lcodigo.Fecha := lDatos.FechaCierre;
  lcodigo.Nombre := lDatos.Nombre;
  CodigoAlmacen := lcodigo;
//  lcodigo.Free;
end;

procedure TfrListadoArticulosObraHistorica.CodAlmacenPropertiesButtonClick(
  Sender: TObject; AButtonIndex: Integer);
begin
  EntidadModal := entObraCerrada;
  ContenidoModal := TfrAlmacenes.Create(Self);
end;

end.
