{
===============================================================================
  Copyright (©) 2005. 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: 08-06-2005
  Versión actual: 1.0.0
  Fecha versión actual: 08-06-2005
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
===============================================================================
}

unit TablaObrasInstaladores;

interface

uses
  //Generales
  SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB,
  //Particulares
  Contnrs, cxCurrencyEdit,

  //Aplicacion
  Framework, StrFunc, Entidades, Constantes, BaseDatos,

  //Contador
  Contadores, RdxGestorContadores;

type
  TDatosObraInstalador = class(TObjeto)
  public
    CodigoContrato : String;
    CodigoInstalador : String;
    FechaAlta : String;
    Usuario : String;
    Nombre : String;
    Descripcion : String;
    Precio : Double;

    constructor Create; overload;
    constructor Create(CodigoObra, CodigoInstalador : String); overload;
    procedure ObtenerDatos; override;
    destructor Destroy; override;
  end;

type
  TdmTablaObrasInstaladores = class(TDataModule)
  private
    procedure IniciarSQL;
  public
    sqlInsertar : TStrings;
    sqlModificar : TStrings;
    sqlConsultar : TStrings;
    sqlEliminar : TStrings;
    sqlGrid : TStrings;

    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
    procedure InicializarGrid(var vGrid: TcxGridDBTableView);
  end;

var
  dmTablaObrasInstaladores: TdmTablaObrasInstaladores;

implementation

{$R *.DFM}

uses
  IBErrorCodes, IB, Literales, Mensajes, Excepciones;

constructor TdmTablaObrasInstaladores.Create (AOwner : TComponent);
begin
  inherited;
  sqlInsertar := TStringList.Create;
  sqlModificar := TStringList.Create;
  sqlConsultar := TStringList.Create;
  sqlEliminar := TStringList.Create;
  sqlGrid := TStringList.Create;
  IniciarSQL;
end;

destructor TdmTablaObrasInstaladores.Destroy;
begin
  sqlInsertar.Free;
  sqlModificar.Free;
  sqlConsultar.Free;
  sqlEliminar.Free;
  sqlGrid.Free;
  inherited;
end;

procedure TdmTablaObrasInstaladores.InicializarGrid(var vGrid: TcxGridDBTableView);
var
  Columna : TcxGridDBColumn;
begin
  with vGrid do begin
    OptionsView.Footer := True;

    {Columna CODIGOCONTRATO}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CODIGOCONTRATO';
    Columna.Caption := 'Código contrato';
    Columna.Width := tamColCodigo;
    Columna.Options.Filtering := False;
    Columna.Visible := False;

    {Columna CODIGOINSTALADOR}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CODIGOINSTALADOR';
    Columna.Caption := 'Código';
    Columna.Width := tamColCodigo;
    Columna.Options.Filtering := False;
    Columna.Visible := False;
    {Columna NOMBRE}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'NOMBRE';
    Columna.Caption := 'Nombre';
    Columna.Width := tamColCorreo;
    Columna.Options.Filtering := False;
    Columna.SortOrder := soAscending;
    {Columna DESCRIPCION}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'DESCRIPCION';
    Columna.Caption := 'Trabajo';
    Columna.Width := tamColNombre;
    Columna.Options.Filtering := False;
    {Columna PRECIO}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'PRECIO';
    Columna.Caption := 'Precio';
    Columna.Width := tamColImporte;
    Columna.Options.Filtering := False;
    Columna.PropertiesClassName := 'TcxCurrencyEditProperties';
    with TcxCurrencyEditProperties(Columna.Properties) do
    begin
      DisplayFormat := DISPLAY_EUROS2;
      EditFormat := EDIT_EUROS2;
    end;
    with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do
    try
      try
        BeginUpdate;
        Column := Columna;
        FieldName := Columna.DataBinding.FieldName;
        Format := 'Total: #,0.00# €';
        Kind := skSum;
      finally
        EndUpdate;
      end;
    except
      DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1);
    end;
  end;
end;

procedure TdmTablaObrasInstaladores.IniciarSQL;
begin
  with sqlInsertar do
  begin
    Add('INSERT INTO OBRASINSTALADORES (');
    Add('CODIGOCONTRATO, CODIGOINSTALADOR, FECHAALTA, ');
    Add('USUARIO, NOMBRE, DESCRIPCION, PRECIO)');
    Add('VALUES (:CODIGOCONTRATO, :CODIGOINSTALADOR,');
    Add(':FECHAALTA, :USUARIO, :NOMBRE, :DESCRIPCION,');
    Add(':PRECIO)');
  end;

  with sqlModificar do
  begin
    Add('UPDATE OBRASINSTALADORES SET');
    Add('NOMBRE = :NOMBRE,');
    Add('DESCRIPCION = :DESCRIPCION,');
    Add('PRECIO = :PRECIO');
    Add('WHERE (CODIGOCONTRATO = :CODIGOCONTRATO) AND ');
    Add('(CODIGOINSTALADOR = :CODIGOINSTALADOR)');
  end;

  with sqlEliminar do
  begin
    Add('delete from OBRASINSTALADORES ');
    Add('WHERE (CODIGOCONTRATO = :CODIGOCONTRATO) AND ');
    Add('(CODIGOINSTALADOR = :CODIGOINSTALADOR)');
  end;

  with sqlConsultar do
  begin
    Add('select CODIGOCONTRATO, CODIGOINSTALADOR, FECHAALTA, USUARIO,');
    Add('NOMBRE, DESCRIPCION, PRECIO');
    Add('from OBRASINSTALADORES');
    Add('WHERE (CODIGOCONTRATO = :CODIGOCONTRATO) AND ');
    Add('(CODIGOINSTALADOR = :CODIGOINSTALADOR)');
  end;

  with sqlGrid do
  begin
    Add('select CODIGOCONTRATO, CODIGOINSTALADOR, FECHAALTA, USUARIO,');
    Add('NOMBRE, DESCRIPCION, PRECIO');
    Add('from OBRASINSTALADORES');
    Add('WHERE (CODIGOCONTRATO = :CODIGOCONTRATO)');
  end;
end;


{ TDatosObraInstalador }

constructor TDatosObraInstalador.Create(CodigoObra, CodigoInstalador: String);
begin
  inherited Create;
  CodigoContrato := CodigoObra;
  CodigoInstalador := CodigoInstalador;
  // Recuperar los datos
  ObtenerDatos;
end;

constructor TDatosObraInstalador.Create;
begin
  inherited Create;
end;

destructor TDatosObraInstalador.Destroy;
begin
  inherited;
end;

procedure TDatosObraInstalador.ObtenerDatos;
var
  oSQL : TIBSQL;
begin
  if EsCadenaVacia(CodigoContrato) and EsCadenaVacia(CodigoInstalador) then
     raise Exception.Create(msgObrFaltaObr);

  oSQL := TIBSQL.Create(NIL);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select CODIGOCONTRATO, CODIGOINSTALADOR, FECHAALTA, USUARIO,');
    SQL.Add('NOMBRE, DESCRIPCION, PRECIO');
    SQL.Add('from OBRASINSTALADORES');
    SQL.Add('where CODIGOCONTRATO = :CODIGOCONTRATO');
    SQL.Add('where CODIGOINSTALADOR = :CODIGOINSTALADOR');
    ParamByName('CODIGOCONTRATO').AsString := CodigoContrato;
    ParamByName('CODIGOINSTALADOR').AsString := CodigoInstalador;

    try
      Prepare;
      ExecQuery;

      // Compruebo si se han recuperado datos
      if (RecordCount > 0) then
      begin
        CodigoContrato := FieldByName('CODIGOCONTRATO').AsString;
        CodigoInstalador := FieldByName('CODIGOINSTALADOR').AsString;
        FechaAlta := FieldByName('FECHAALTA').AsString;
        Usuario := FieldByName('USUARIO').AsString;
        Nombre := FieldByName('NOMBRE').AsString;
        Descripcion := FieldByName('DESCRIPCION').AsString;
        Precio := FieldByName('PRECIO').AsFloat;
      end;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

end.
