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

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

unit TablaProcedencias;

interface

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

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

type
  TDatosProcedencia = class(TObjeto)
  protected
    procedure ObtenerDatos; override;
    procedure AssignTo(Dest: TPersistent); override;
  public
		Codigo : Integer;
    Descripcion : String;
    constructor Create(Codigo : Integer); 
  end;


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

    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
    procedure InicializarGridProcedencias(var vGrid: TcxGridDBTableView);
    function darProcedencias: TStrings;
    function darContadorProcedencias: Integer;
  end;

var
  dmTablaProcedencias : TdmTablaProcedencias;

implementation

{$R *.DFM}
uses
  Literales;

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

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

procedure TdmTablaProcedencias.IniciarSQL;
begin
  with sqlInsertar do
  begin
    Add('insert into PROCEDENCIAS (CODIGO, DESCRIPCION)');
    Add('values (:CODIGO, UPPER(:DESCRIPCION))');
  end;

  with sqlModificar do
  begin
    Add('update PROCEDENCIAS set ');
    Add('DESCRIPCION = UPPER(:DESCRIPCION) ');
    Add('where CODIGO = :CODIGO');
  end;

  with sqlEliminar do
  begin
    Add('delete from PROCEDENCIAS ');
    Add('where CODIGO = :CODIGO');
  end;

  with sqlConsultar do
  begin
    Add('select CODIGO, DESCRIPCION ');
    Add('from PROCEDENCIAS ');
    Add('order by DESCRIPCION');
  end;
end;

procedure TdmTablaProcedencias.InicializarGridProcedencias(var vGrid: TcxGridDBTableView);
var
  Columna : TcxGridDBColumn;
begin
  with vGrid do begin
    ClearItems;
    OptionsView.Footer := True;
    {Columna CODIGO}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CODIGO';
    Columna.Caption := 'Código procedencia';
    Columna.Visible := False;

    {Columna DESCRIPCION}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'DESCRIPCION';
    Columna.Caption := 'Descripcines de procedencia';
    Columna.SortOrder := soAscending;
    with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do
    try
      try
        BeginUpdate;
        Column := Columna;
        FieldName := Columna.DataBinding.FieldName;
        Format := 'Total: 0 descripciones de procedencia';
        Kind := skCount;
      finally
        EndUpdate;
      end;
    except
      DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1);
    end;
  end;
end;

function TdmTablaProcedencias.darProcedencias: TStrings;
var
  oSQL : TIBSQL;
  Lista : TStringList;
begin
  oSQL := TIBSQL.Create(Self);
  Lista := TStringList.Create;

  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select DESCRIPCION from PROCEDENCIAS order by DESCRIPCION');

    try
      Prepare;
      ExecQuery;
      while not EOF do begin
        Lista.Append(Fields[0].AsString);
        Next;
      end;
      result := Lista;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

function TdmTablaProcedencias.darContadorProcedencias: Integer;
var
  oSQL : TIBSQL;
begin
  oSQL := TIBSQL.Create(Self);

  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select MAX(CODIGO) from PROCEDENCIAS');

    try
      Prepare;
      ExecQuery;
      if not EOF then
        Result := (Fields[0].AsInteger + 1)
      else
        Result := 0;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

{ TDatosProcedencia }

procedure TDatosProcedencia.AssignTo(Dest: TPersistent);
begin
  inherited;
  //
end;

constructor TDatosProcedencia.Create(Codigo: Integer);
begin
  inherited Create;
  Self.Codigo := Codigo;
  ObtenerDatos;
end;

procedure TDatosProcedencia.ObtenerDatos;
var
  oSQL : TIBSQL;
begin
  oSQL := TIBSQL.Create(nil);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select * from PROCEDENCIAS ');
    SQL.Add('where CODIGO = :CODIGO');

    try
      ParamByName('CODIGO').AsInteger := Codigo;
      Prepare;
      ExecQuery;

      if (RecordCount > 0) then
        Descripcion := FieldByName('DESCRIPCION').AsString
      else begin
        raise Exception.Create(msgDatosNoExisteProcedencia);
      end;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;
end.
