unit InformePresupuestoCliente;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, InformeBase, FR_IBXDB, FR_Shape, FR_DSet, FR_DBSet, FR_Class,
  DB, IBCustomDataSet, IBQuery, RdxEmpresaActiva, Entidades, VistaPreviaPresupuestos;

const
  //Cambio de tamaņo letra
  CTE_TamLetraIni = 10;
  CTE_TamLetraMin = 5;
  CTE_TamLetraMax = 40;
  CTE_TamLetraIntervalo = 2;

type
  TdmInformePresupuestoCliente = class(TdmInformeBase)
    TablaCab: TfrDBDataSet;
    TablaDet: TfrDBDataSet;
    TablaPresupuesto: TIBQuery;
    TablaDetallesPresupuesto: TIBQuery;
    TablaPropiedadesPresupuesto: TIBQuery;
    TablaProp: TfrDBDataSet;
    dsDetallesPresupuesto: TDataSource;
    dsPropiedadesPresupuesto: TDataSource;
    dsPresupuesto: TDataSource;
    TablaPrecios1: TIBQuery;
    TablaPrec1: TfrDBDataSet;
    dsPrecios1: TDataSource;
  private
    //Cambio de tamaņo letra
    FVistaPrevia: TfrVistaPreviaPresupuestos;
    FTamLetra: Integer;

    FCodigoPresupuesto : Variant;
    FEntidad: TRdxEntidad;
    procedure SetEntidad(const Value: TRdxEntidad);
    procedure SetVistaPrevia(const Value: TfrVistaPreviaPresupuestos);

    //Cambio de tamaņo letra
    procedure actAmpliar(Sender: TObject);
    procedure actDisminuir(Sender: TObject);

  protected
    procedure PrepararConsultas; override;
    procedure PrepararInforme; override;

  public
    constructor Create(AOwner: TComponent); override;
  published

    //Cambio de tamaņo letra
    property VistaPrevia : TfrVistaPreviaPresupuestos read FVistaPrevia write SetVistaPrevia;
    property TamLetra : Integer read FTamLetra write FTamLetra;

    property CodigoPresupuesto : variant read FCodigoPresupuesto write FCodigoPresupuesto;
    property Entidad : TRdxEntidad read FEntidad write SetEntidad;
  end;

var
  dmInformePresupuestoCliente: TdmInformePresupuestoCliente;

implementation

{$R *.dfm}

uses
  StrFunc, Constantes;

{ TdmInformePresupuestoCliente }

procedure TdmInformePresupuestoCliente.actAmpliar(Sender: TObject);
begin
  if TamLetra >= CTE_TamLetraMax then
     Exit;

  TamLetra := TamLetra + CTE_TamLetraIntervalo;
  Previsualizar;
end;

procedure TdmInformePresupuestoCliente.actDisminuir(Sender: TObject);
begin
  if TamLetra <= CTE_TamLetraMin then
     Exit;

  TamLetra := TamLetra - CTE_TamLetraIntervalo;
  Previsualizar;
end;

constructor TdmInformePresupuestoCliente.Create(AOwner: TComponent);
begin
  inherited;
  TamLetra := CTE_TamLetraIni;
end;

procedure TdmInformePresupuestoCliente.PrepararConsultas;
begin
  inherited;

  with TablaPresupuesto do
  begin
    Database := FBaseDatos;
    Transaction := FTransaccion;
    SQL.Clear;
    SQL.Add('select * from PRESUPUESTOSCLIENTE ');
    SQL.Add('where CODIGO = :CODIGO');
    ParamByName('CODIGO').AsString := FCodigoPresupuesto;
    Prepare;
    Open;
  end;

  with TablaDetallesPresupuesto do
  begin
    Database := FBaseDatos;
    Transaction := FTransaccion;
    SQL.Clear;
    SQL.Add('select * from DETALLESPRESUPUESTOSARTICULOS ');
    SQL.Add('where CODIGOPRESUPUESTO = :CODIGO ');

    case Entidad of
      entPresupuestoCocina,
      entPresupuestoBano      : SQL.Add('and NUMCONCEPTO = 0');

      entPresupuestoArmarios  : SQL.Add('and NUMCONCEPTO < 2');
    end;
    Params.ParseSQL(SQL.Text, True);
    Prepare;
    Open;
  end;

  with TablaPropiedadesPresupuesto do
  begin
    Database := FBaseDatos;
    Transaction := FTransaccion;
    SQL.Clear;
    SQL.Add('select CODIGOPRESUPUESTO, NUMCONCEPTO, NUMPROPIEDAD, ');
    SQL.Add('PROP.DESCRIPCION as DESCRIPCION, CODIGOPROPIEDAD, VALOR ');
    SQL.Add('from DETALLESPRESUPUESTOSPROPIEDADES, PROPIEDADES PROP ');
    SQL.Add('where CODIGOPRESUPUESTO = :CODIGOPRESUPUESTO and ');
    SQL.Add('NUMCONCEPTO = :NUMCONCEPTO and ');
    SQL.Add('PROP.CODIGO = CODIGOPROPIEDAD ');
    SQL.Add('order by NUMPROPIEDAD');
    Params.ParseSQL(SQL.Text, True);
    Prepare;
    Open;
  end;

  TablaCab.Open;
  TablaDet.Open;
  TablaProp.Open;

  with TablaPrecios1 do
  begin
    Database := FBaseDatos;
    Transaction := FTransaccion;
    SQL.Clear;
    SQL.Add('select * ');
    SQL.Add('from DETALLESPRESUPUESTOSARTICULOS ');
    SQL.Add('where CODIGOPRESUPUESTO = :CODIGO ');
    SQL.Add('and TIPOCONCEPTO = ''PRECIO'' ');
    SQL.Add('order by NUMCONCEPTO');
    Params.ParseSQL(SQL.Text, True);
    Prepare;
    Open;
  end;
  TablaPrec1.Open;
end;

procedure TdmInformePresupuestoCliente.PrepararInforme;
begin
  inherited;
  if Entidad = entPresupuestoCocina then
    if esCadenaVacia(TablaPresupuesto.FieldByName('DESGLOSES').AsVariant) then
       FReport.Pages.Pages[1].Visible := False;

  FReport.Dictionary.Variables.Value[1] := TamLetra;
end;

procedure TdmInformePresupuestoCliente.SetEntidad(const Value: TRdxEntidad);
begin
  if FEntidad = Value then
    Exit;
  FEntidad := Value;
  case FEntidad of
    entPresupuestoCocina  : begin
                              FNombreInforme := 'PresupuestoCocina.frf';
                              FVistaPrevia.bAmpliar.Visible := True;
                              FVistaPrevia.bDisminuir.Visible := True;
                            end;
    entPresupuestoBano    : FNombreInforme := 'PresupuestoBano.frf';
    entPresupuestoArmarios : FNombreInforme := 'PresupuestoArmarios.frf';
    entPresupuestoReforma : begin
                              FNombreInforme := 'PresupuestoReforma.frf';
                              FVistaPrevia.bAmpliar.Visible := True;
                              FVistaPrevia.bDisminuir.Visible := True;
                            end;
  else
    FNombreInforme := 'PresupuestoCliente.frf';
  end;
end;

procedure TdmInformePresupuestoCliente.SetVistaPrevia(const Value: TfrVistaPreviaPresupuestos);
begin
  FVistaPrevia := Value;

  if Assigned(FVistaPrevia) then
  begin
     FVistaPrevia.bAmpliar.OnClick := actAmpliar;
     FVistaPrevia.bDisminuir.OnClick := actDisminuir;
  end;
end;

end.
