unit InformeEstadoObra;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, InformeBaseFR3, frxCross, frxClass, frxIBXComponents, frxDBSet,
  DB, IBCustomDataSet, IBDatabase, TablaCitas, IBQuery;

type
  TdmInformeEstadoObra = class(TdmInformeBaseFR3)
    frxTablaCitas: TfrxDBDataset;
    frxTablaInstaladores: TfrxDBDataset;
    frxTablaObras: TfrxDBDataset;
    dsCitas: TDataSource;
    dsInstaladores: TDataSource;
    dsObras: TDataSource;
    TablaCitas: TIBQuery;
    TablaObrasInstaladores: TIBQuery;
    TablaObras: TIBQuery;
    frxReport1: TfrxReport;
    procedure FReportBeforePrint(Sender: TfrxReportComponent);
  private
    FCodigoContrato: variant;
  protected
    procedure PrepararConsultas; override;
  public
    EstadoObra : array[TPartidasObra, tcPedido..tcEntregaCliente] of String;
    Proveedores : array[TPartidasObra] of String;
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
    property CodigoContrato : variant read FCodigoContrato write FCodigoContrato;
  end;

var
  dmInformeEstadoObra: TdmInformeEstadoObra;

implementation

uses
  TablaObras, TablaObrasInstaladores, frxPreview;

{$R *.dfm}


{ TdmInformeEstadoObra }

constructor TdmInformeEstadoObra.Create(AOwner: TComponent);
begin
  inherited;
  FCodigoContrato := NULL;
  FNombreInforme := 'InformeEstadoObra.fr3';
end;

destructor TdmInformeEstadoObra.Destroy;
begin
  inherited;
end;

procedure TdmInformeEstadoObra.PrepararConsultas;
var
  Cont : TTipoCitas;
begin
  inherited;

  with TablaObras do
  begin
    Database := FBaseDatos;
    Transaction := FTransaccion;
    SQL.Clear;
    SQL.Assign(dmTablaObras.sqlConsultar);
    ParamByName('CODIGOCONTRATO').AsString := FCodigoContrato;
    Prepare;
    Open;
  end;

  with TablaCitas do
  begin
    Database := FBaseDatos;
    Transaction := FTransaccion;
    SQL.Clear;
    SQL.Add('select START, CAPTION, NOMBRE, TIPOTAREA ');
    SQL.Add('from CITAS, INSTALADORES ');
    SQL.Add('WHERE CODIGOCONTRATO = :CODIGOCONTRATO');
    SQL.Add('and CODIGO = RESOURCEID ');
    SQL.Add('and TIPOTAREA IN (');
    for Cont := tcEntrega to tcRemate do
    begin
      SQL.Add('''' + TextoTipoCita[Ord(Cont)] + '''');
      if Cont < tcRemate then
        SQL.Add(', ');
    end;
    SQL.Add(')');
    ParamByName('CODIGOCONTRATO').AsString := FCodigoContrato;
    Prepare;
    Open;
  end;

  with TablaObrasInstaladores do
  begin
    Database := FBaseDatos;
    Transaction := FTransaccion;
    SQL.Clear;
    SQL.Assign(dmTablaObrasInstaladores.sqlGrid);
    ParamByName('CODIGOCONTRATO').AsString := FCodigoContrato;
    Prepare;
    Open;
  end;
    
end;

procedure TdmInformeEstadoObra.FReportBeforePrint(
  Sender: TfrxReportComponent);
var
  Cross: TfrxCrossView;
  APartida : TPartidasObra;
  ATipoCita : TTipoCitas;
  Col, Row : Integer;
  Cadena : String;
begin
  if Sender is TfrxCrossView then
  begin
    Cross := TfrxCrossView(Sender);
    for APartida := poCocina to poVarios do
    begin
      Col := Ord(APartida);
      Cross.AddValue(['Proveedores'], [LiteralPartidasObra[Col]], [Proveedores[APartida]]);
      for ATipoCita := tcPedido to tcEntregaCliente do
      begin
        Row := Ord(ATipoCita);
        Cadena := EstadoObra[APartida, ATipoCita];
        Cross.AddValue([LiteralTipoCita[Row]], [LiteralPartidasObra[Col]], [EstadoObra[APartida, ATipoCita]]);
      end;
    end;
  end;
end;

end.
