{
===============================================================================
  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: 11-08-2002
  Versión actual: 1.0.2
  Fecha versión actual: 04-10-2004
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    27-11-2001    Cambio de los titulos respectivos a obra y almacenes en el
                  procedimiento CambiarEntidad.

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

    14-04-2004    p272. Adaptación a multiempresa.

    04-10-2004    Cambio CambiarEntidad para que soporte otro color.    
===============================================================================
}

unit ArticuloObraHistorica;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Db, IBCustomDataSet, Mask, DBCtrls, Buttons, ToolEdit,
  IB, IBDatabase, RdxBarras, RdxBotones,  RdxCampos, RdxMemo, RdxComboBox,
  RdxCheckBox, RdxTitulos, RdxPaneles, Colores, Mensajes, Tipos,
  RdxFrameArticulosObraHistorica, Entidades;

type
  TfrArticuloObraHistorica = class(TRdxFrameArticulosObraHistorica)
    pnlScroll: TRdxScrollPanel;
    brSimple: TRdxBarraInferior;
    bSalir: TRdxBoton;
    pnlAlmacen: TRdxPanel;
    eAlmacen: TLabel;
    cAlmacen: TRdxCabecera;
    RdxPanel1: TRdxPanel;
    RdxCabecera1: TRdxCabecera;
    Codigo: TRdxDBEdit;
    eCodigo: TLabel;
    cbxFamilia: TRdxDBComboBox;
    eFamilia: TLabel;
    Precio: TRdxDBEdit;
    cbxUnidadesMedida: TRdxDBComboBox;
    eUnidades: TLabel;
    eDescripcion: TLabel;
    Descripcion: TRdxDBEdit;
    eObservaciones: TLabel;
    Observaciones: TRdxDBMemo;
    dsArticulosObraHistorica: TDataSource;
    Titulo: TRdxPanelTituloOperacion;
    cbxAlmacen: TRdxDBComboBox;
    brDoble: TRdxBarraInferior;
    bAceptar: TRdxBoton;
    bCancelar: TRdxBoton;
    eStockActual: TLabel;
    procedure bAceptarClick(Sender: TObject);
    procedure bCancelarGuardarClick(Sender: TObject);
    procedure bSalirClick(Sender: TObject);
    procedure CodigoButtonClick(Sender: TObject);
  private
    FListaAlmacenesCodigo : TStringList;
  protected
    procedure ActivarModoConsultar; override;
    procedure ActivarModoEliminar; override;
    function EliminarDatos : Boolean; override;
    function CancelarEliminar : Boolean; override;
    procedure VerModal; override;
    procedure FreeContenido; override;
    procedure BuscarAlmacen; override;
    procedure BuscarArticulo; override;
    function ComprobarDatos: Boolean; override;
  public
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
  published
    property TablaArticulosObraHistorica;
    property CodigoAlmacen;
    property CodigoArticulo;
  end;

var
  frArticuloObraHistorica: TfrArticuloObraHistorica;

implementation

{$R *.DFM}

uses
  BaseDatos, TablaArticulosObraHistorica, ArticulosObraHistorica, Excepciones,
  StrFunc, Configuracion, RdxEmpresaActiva, Literales, Variants;

constructor TfrArticuloObraHistorica.Create(AOwner : TComponent);
var
 i : Integer;
 liIndex : Integer;
begin
  inherited Create(AOwner);
  Entidad := entArticuloAlmacenObra;
  ConfigurarFrame(Self, Self.Entidad);
  BaseDatos := dmBaseDatos.BD;
  Transaccion := dmBaseDatos.Transaccion;
  TablaArticulosObraHistorica := TIBDataSet.Create(Self);
  dsArticulosObraHistorica.DataSet := TablaArticulosObraHistorica;
  with TablaArticulosObraHistorica do
  begin
    Database := BaseDatos;
    Transaction := Transaccion;
    SelectSQL.Assign(dmTablaArticulosObraHistorica.sqlConsultar);
    DeleteSQL.Assign(dmTablaArticulosObraHistorica.sqlEliminar);
    RefreshSQL.Assign(dmTablaArticulosObraHistorica.sqlConsultar);
  end;

  {Carga todos los almacenes en el combox, como no habra posibilidad de cambio,
   da igual la entidad que sea}
  FListaAlmacenesCodigo := dmTablaArticulosObraHistorica.DarObras(EmpresaActiva.Codigo);

  for i:=0 to FListaAlmacenesCodigo.Count-1 do
    cbxAlmacen.Items.Add(FListaAlmacenesCodigo.Strings[i]);

  // Carga el primer almacen
  cbxAlmacen.ItemIndex := 0;
  liIndex := FListaAlmacenesCodigo.IndexOf(cbxAlmacen.Text);
  //Asigno el objeto codigo de almacen (CodigoObra, Nombre, FechaCierre)
  if (liIndex <> -1) then
    CodigoAlmacen := TTipoCodigoFecha(FListaAlmacenesCodigo.Objects[liIndex]);
end;

destructor TfrArticuloObraHistorica.Destroy;
begin
  TablaArticulosObraHistorica.Close;
  TablaArticulosObraHistorica.UnPrepare;
  TablaArticulosObraHistorica.Free;
  inherited;
end;

procedure TfrArticuloObraHistorica.bAceptarClick(Sender: TObject);
begin
  if (RealizarOperacion) then
    CloseFrame;
end;

procedure TfrArticuloObraHistorica.BuscarAlmacen;
var
  i: integer;
begin
  cbxAlmacen.ItemIndex := FListaAlmacenesCodigo.IndexOf(CodigoAlmacen.darDescripcion);
end;

procedure TfrArticuloObraHistorica.BuscarArticulo;
begin
  if Transaccion = NIL then
    exit;
  try
    with TablaArticulosObraHistorica do
    begin
      Close;
      // Buscar la fila a tratar si es necesario
      if (CodigoAlmacen <> Nil) and (not VarIsNull(CodigoArticulo)) then
      begin
          Params.ByName('CODIGOOBRA').AsInteger := CodigoAlmacen.Codigo;
          Params.ByName('FECHACIERRE').AsDate := StrToDate(CodigoAlmacen.Fecha);
          Params.ByName('CODIGOARTICULO').AsString := CodigoArticulo;
      end;
      Params.ByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
      Prepare;
      Open;
    end;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

procedure TfrArticuloObraHistorica.ActivarModoConsultar;
begin
  dsArticulosObraHistorica.AutoEdit := False;
  Codigo.VerBoton := True;
  try
    TablaArticulosObraHistorica.Open;
    if TablaArticulosObraHistorica.RecordCount = 0 then
    begin
      VerMensajeFmt(msgArtNoExisteArtAlm, [CodigoArticulo]);
      CloseFrame;
      Exit;
    end;
    TablaArticulosObraHistorica.Cancel;
    Visible := True;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

procedure TfrArticuloObraHistorica.ActivarModoEliminar;
begin
  dsArticulosObraHistorica.AutoEdit := False;
  Codigo.VerBoton := True;
  try
    TablaArticulosObraHistorica.Open;
    if TablaArticulosObraHistorica.RecordCount = 0 then
    begin
      VerMensajeFmt(msgArtNoExisteArtAlm, [CodigoArticulo]);
      CancelarEliminar;
      CloseFrame;
      Exit;
    end;
    TablaArticulosObraHistorica.Cancel;
    Visible := True;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

procedure TfrArticuloObraHistorica.FreeContenido;
begin
  if (ContenidoModal is TRdxFrameArticulosObraHistorica) then begin
    CodigoAlmacen := (ContenidoModal as TRdxFrameArticulosObraHistorica).CodigoAlmacen;
    CodigoArticulo := (ContenidoModal as TRdxFrameArticulosObraHistorica).CodigoArticulo;
  end;
  inherited FreeContenido;
end;

procedure TfrArticuloObraHistorica.CodigoButtonClick(Sender: TObject);
begin
  inherited;
  if (TratarCambios = IDCANCEL) then
    exit;

  ContenidoModal := TfrArticulosObraHistorica.Create(Self);
end;

procedure TfrArticuloObraHistorica.VerModal;
begin
  if (ContenidoModal is TRdxFrameArticulosObraHistorica) then
    (ContenidoModal as TRdxFrameArticulosObraHistorica).CodigoAlmacen := FCodigoAlmacen;
  inherited VerModal;
end;

function TfrArticuloObraHistorica.EliminarDatos: Boolean;
begin
  Result := False;
  try
    TablaArticulosObraHistorica.Delete;
    Commit;
    TablaArticulosObraHistorica.Close;
    Result := True;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

function TfrArticuloObraHistorica.CancelarEliminar: Boolean;
begin
  Result := False;
  try
    RollBack;
    TablaArticulosObraHistorica.Close;    
    Result := True;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

procedure TfrArticuloObraHistorica.bCancelarGuardarClick(Sender: TObject);
begin
  if (TratarCambios = IDOK) then
    CloseFrame;
end;

procedure TfrArticuloObraHistorica.bSalirClick(Sender: TObject);
begin
  try
    Rollback;
    CloseFrame;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

function TfrArticuloObraHistorica.ComprobarDatos: Boolean;
begin
{  Result := False;
  Case Modo of
    Eliminar : {if dmTablaArticulosObraHistorica.ArticuloAlmacenTieneExistencias(CodigoAlmacen,CodigoArticulo) then
               begin
                 VerMensaje(msgArtTieneExistencias);
                 Exit;
               end;
  end;             }
  Result := True;
end;

end.
