{ =============================================================================== Copyright (©) 2002. 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: 01-12-2002 Versión actual: 1.0.0 Fecha versión actual: 01-12-2002 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- =============================================================================== } unit TablaTrimestres; interface uses //Generales SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB, //Particulares //Aplicacion Framework, StrFunc, Entidades, Constantes, BaseDatos, RdxEmpresaActiva; const CTE_ABIERTO = 'A'; CTE_CERRADO = 'C'; type //Trimestres //Tipo enumerado correspondientes a los trimestres que manejara la aplicacion TTrimestres = (entPrimerTrimestre, entSegundoTrimestre, entTercerTrimestre, entCuartoTrimestre ); //////////////////////////////////////////////////////////////////////////////// //TListaTrimestres //////////////////////////////////////////////////////////////////////////////// TListaComboTrimestres = (tlcTriDefecto, tlcTriTodos, tlcTriAbiertos); TSituacionTrimestre = (tstAbierto, tstCerrado); TDatosTrimestre = class(TPersistent) public Codigo : String; Nombre : String; NombreCompleto : String; // Año + nombre Situacion : TSituacionTrimestre; FechaIni : TDate; FechaFin : TDate; Predeterminado : Boolean; end; TListaTrimestres = class(TListaObjetos) private FSQL: TStringList; FTipo: TListaComboTrimestres; property Tipo: TListaComboTrimestres Read FTipo; function GetTrimestre(Index: Integer): TDatosTrimestre; procedure inicializarSQL; protected procedure AssignTo(Dest: TPersistent); override; procedure ObtenerLista; override; procedure ObtenerListaBD; public property Items[Index: Integer] : TDatosTrimestre read GetTrimestre; constructor Create(TipoLista: TListaComboTrimestres); overload; destructor Destroy; override; function getNumItem(Codigo: String): Integer; function getCodItem(NumOrden: Integer): String; function cargarLista(pItems: TStrings): Integer; end; //////////////////////////////////////////////////////////////////////////////// //TdmTablaTrimestres //////////////////////////////////////////////////////////////////////////////// TdmTablaTrimestres = class(TDataModule) private function darCodigoTrimestre(Trimestre: TTrimestres; Ano: Variant): String; overload; function darDescripcionTrimestre(Entidad: TTrimestres) : String; overload; function darFechaIniTrimestre(Trimestre: TTrimestres; Ano: Integer): TDateTime; overload; function darFechaFinTrimestre(Trimestre: TTrimestres; Ano: Integer): TDateTime; overload; function existenTrimestres(CodigoEmpresa: Variant; Ano: Variant): Boolean; function insertarTrimestre(Trimestre: TTrimestres; CodigoEmpresa: Variant; Ano: Variant) : Boolean; function insertarTrimestres(CodigoEmpresa: Variant; Ano: Variant) : Boolean; function darDatosTrimestre(var Datos: TDatosTrimestre): Boolean; procedure IniciarSQLGrids; public sqlConsultarGridTrimestres : TStrings; function crearTrimestres(CodigoEmpresa: Variant; Ano: Variant): boolean; function darCodigoTrimestre(Ano: Variant; Trimestre: Integer): String; overload; function darAnoTrimestre(CodigoEmpresa: Variant; CodigoTrimestre : Variant): TDateTime; overload; function darDescripcionTrimestre(CodigoTrimestre : String): String; overload; function darTrimestreActual : String; function darDescripcionTrimestreActual : String; function darDescripcionCompletaTrimestre(CodigoTrimestre : String): String; function darFechaIniTrimestre(CodigoTrimestre : String): TDateTime; overload; function darFechaFinTrimestre(CodigoTrimestre : String): TDateTime; overload; function EstaTrimestreAbierto(CodigoTrimestre: String): boolean; procedure AbrirTrimestre(CodigoTrimestre : String); procedure CerrarTrimestre(CodigoTrimestre : String); procedure PredeterminarTrimestre(CodigoTrimestre : String); constructor Create (AOwner : TComponent); override; destructor Destroy; override; end; var dmTablaTrimestres: TdmTablaTrimestres; const //TRIMESTRES CaptionsTrimestres : array [TTrimestres] of string = ( ('Primer trimestre'), //entPrimerTrimestre ('Segundo trimestre'), //entSegundoTrimestre ('Tercer trimestre'), //entTercerTrimestre ('Cuarto trimestre') //entCuartoTrimestre ); //////////////////////////////////////////////////////////////////////////////// // TRIMESTRES //////////////////////////////////////////////////////////////////////////////// PRIMERO_INI = '01/01/'; PRIMERO_FIN = '31/03/'; SEGUNDO_INI = '01/04/'; SEGUNDO_FIN = '30/06/'; TERCERO_INI = '01/07/'; TERCERO_FIN = '30/09/'; CUARTO_INI = '01/10/'; CUARTO_FIN = '31/12/'; implementation {$R *.DFM} uses TablaEmpresas, Variants; //////////////////////////////////////////////////////////////////////////////// //TdmTablaTrimestres //////////////////////////////////////////////////////////////////////////////// constructor TdmTablaTrimestres.Create (AOwner : TComponent); begin inherited; { Grids } sqlConsultarGridTrimestres := TStringList.Create; IniciarSQLGrids; end; destructor TdmTablaTrimestres.Destroy; begin { Grids } sqlConsultarGridTrimestres.Free; inherited; end; function TdmTablaTrimestres.existenTrimestres(CodigoEmpresa: Variant; Ano: Variant): Boolean; var oSQL : TIBSQL; begin Result := False; if VarIsNull(CodigoEmpresa) then exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select count(CODIGO) as NUMTRIMESTRES'); SQL.Add('from TRIMESTRES'); SQL.Add(' where SUBSTR(FECHAINI, 3, 4) = :ANO'); SQL.Add(' and CODIGOEMPRESA = :CODIGOEMPRESA'); try ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; if VarIsNull(Ano) then ParamByName('ANO').AsString := Copy(dmBaseDatos.darAno,3,2) else ParamByName('ANO').AsString := Copy(Ano,3,2); Prepare; ExecQuery; Result := (FieldByName('NUMTRIMESTRES').AsInteger <> 0); finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaTrimestres.DarDatosTrimestre(var Datos: TDatosTrimestre): Boolean; var oSQL : TIBSQL; begin Result := False; if EsCadenaVacia(Datos.Codigo) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select TR.CODIGOEMPRESA, TR.CODIGO, TR.NOMBRE, TR.SITUACION, '); SQL.Add('TR.FECHAINI, TR.FECHAFIN, EM.CODIGOTRIMESTRE '); SQL.Add('from TRIMESTRES TR, EMPRESAS EM'); SQL.Add('where TR.CODIGOEMPRESA = :CODIGOEMPRESA '); SQL.Add('and EM.CODIGO = TR.CODIGOEMPRESA '); SQL.Add('and TR.CODIGO = :CODIGO'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := Datos.Codigo; Prepare; ExecQuery; if (RecordCount > 0) then begin with Datos do begin NOMBRE := FieldByName('NOMBRE').AsString; if FieldByName('SITUACION').AsString = CTE_ABIERTO then Situacion := tstAbierto else Situacion := tstCerrado; FECHAINI := FieldByName('FECHAINI').AsDate; FECHAFIN := FieldByName('FECHAFIN').AsDate; Predeterminado := (FieldByName('CODIGOTRIMESTRE').AsString = Datos.Codigo); NombreCompleto := FormatDateTime('yyyy', FechaIni) + ' ' + Nombre; Result := True; end; end; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaTrimestres.crearTrimestres(CodigoEmpresa: Variant; Ano: Variant): boolean; begin Result := True; if not existenTrimestres(CodigoEmpresa, Ano) then Result := insertarTrimestres(CodigoEmpresa, Ano); end; function TdmTablaTrimestres.insertarTrimestre(Trimestre: TTrimestres; CodigoEmpresa: Variant; Ano: Variant): Boolean; var oSQL : TIBSQL; begin Result := False; if VarIsNull(CodigoEmpresa) then exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('insert into TRIMESTRES'); SQL.Add('(CODIGOEMPRESA, CODIGO, NOMBRE, SITUACION, FECHAINI, FECHAFIN) '); SQL.Add('VALUES '); SQL.Add('(:CODIGOEMPRESA, :CODIGO, :NOMBRE, :SITUACION, :FECHAINI, :FECHAFIN)'); ParamByName('CODIGOEMPRESA').AsVariant := CodigoEmpresa; ParamByName('CODIGO').AsString := darCodigoTrimestre(Trimestre, Ano); ParamByName('SITUACION').AsString := CTE_ABIERTO; ParamByName('NOMBRE').AsString := darDescripcionTrimestre(Trimestre); ParamByName('FECHAINI').AsDateTime := darFechaIniTrimestre(Trimestre, Ano); ParamByName('FECHAFIN').AsDateTime := darFechaFinTrimestre(Trimestre, Ano); try Prepare; ExecQuery; Result := True; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaTrimestres.insertarTrimestres(CodigoEmpresa: Variant; Ano: Variant): Boolean; var AuxAno: Variant; begin Result := False; if VarIsNull(Ano) then AuxAno := dmBaseDatos.DarAno else AuxAno := Ano; if not insertarTrimestre(entPrimerTrimestre, CodigoEmpresa, AuxAno) then begin exit; end; if not insertarTrimestre(entSegundoTrimestre, CodigoEmpresa, AuxAno) then begin exit; end; if not insertarTrimestre(entTercerTrimestre, CodigoEmpresa, AuxAno) then begin exit; end; if not insertarTrimestre(entCuartoTrimestre, CodigoEmpresa, AuxAno) then begin exit; end; Result := True; end; function TdmTablaTrimestres.darFechaIniTrimestre(Trimestre: TTrimestres; Ano: Integer): TDateTime; begin case Trimestre of entPrimerTrimestre: if (Ano = -1) then Result := StrToDateTime(PRIMERO_INI + dmBaseDatos.darAno) else Result := StrToDateTime(PRIMERO_INI + IntToStr(Ano)); entSegundoTrimestre: if (Ano = -1) then Result := StrToDateTime(SEGUNDO_INI + dmBaseDatos.darAno) else Result := StrToDateTime(SEGUNDO_INI + IntToStr(Ano)); entTercerTrimestre: if (Ano = -1) then Result := StrToDateTime(TERCERO_INI + dmBaseDatos.darAno) else Result := StrToDateTime(TERCERO_INI + IntToStr(Ano)); entCuartoTrimestre: if (Ano = -1) then Result := StrToDateTime(CUARTO_INI + dmBaseDatos.darAno) else Result := StrToDateTime(CUARTO_INI + IntToStr(Ano)); end; end; function TdmTablaTrimestres.darFechaFinTrimestre(Trimestre: TTrimestres; Ano: Integer): TDateTime; begin case Trimestre of entPrimerTrimestre: if (Ano = -1) then Result := StrToDateTime(PRIMERO_FIN + dmBaseDatos.darAno) else Result := StrToDateTime(PRIMERO_FIN + IntToStr(Ano)); entSegundoTrimestre: if (Ano = -1) then Result := StrToDateTime(SEGUNDO_FIN + dmBaseDatos.darAno) else Result := StrToDateTime(SEGUNDO_FIN + IntToStr(Ano)); entTercerTrimestre: if (Ano = -1) then Result := StrToDateTime(TERCERO_FIN + dmBaseDatos.darAno) else Result := StrToDateTime(TERCERO_FIN + IntToStr(Ano)); entCuartoTrimestre: if (Ano = -1) then Result := StrToDateTime(CUARTO_FIN + dmBaseDatos.darAno) else Result := StrToDateTime(CUARTO_FIN + IntToStr(Ano)); end; end; procedure TdmTablaTrimestres.IniciarSQLGrids; begin with sqlConsultarGridTrimestres do begin Add('select CODIGO, cast(substr(extract(year from FECHAINI),3,4) as varchar(2)), NOMBRE, SITUACION, '); Add('FECHAINI, FECHAFIN '); Add('from TRIMESTRES '); Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); Add('union '); Add('select cast(substr(extract(year from FECHAINI),3,4) as varchar(3)), cast(''-1'' as varchar(2)), '); Add('cast(''Año ''||extract(year from FECHAINI) as varchar(100)), cast(''1'' as varchar(1)), '); Add('cast(''01.01.'' || extract(year from FECHAINI) as Date), cast(''31.12.'' || extract(year from FECHAINI) as Date) '); Add('from TRIMESTRES '); end; end; function TdmTablaTrimestres.EstaTrimestreAbierto(CodigoTrimestre: String): boolean; var FTrimestre : TDatosTrimestre; begin Result := False; if EsCadenaVacia(CodigoTrimestre) then Exit; FTrimestre := TDatosTrimestre.Create; try Result := (FTrimestre.Situacion = tstAbierto); finally FTrimestre.Free; end; end; function TdmTablaTrimestres.DarTrimestreActual: String; var Ano : String; Fecha : TDateTime; CodTri : String; begin Ano := Copy(dmBaseDatos.DarAno, 3, 2); Fecha := dmBaseDatos.DarFecha; if (Fecha >= DarFechaIniTrimestre(entPrimerTrimestre, -1)) and (Fecha <= DarFechaFinTrimestre(entPrimerTrimestre, -1)) then CodTri := '0'; if (Fecha >= DarFechaIniTrimestre(entSegundoTrimestre, -1)) and (Fecha <= DarFechaFinTrimestre(entSegundoTrimestre, -1)) then CodTri := '1'; if (Fecha >= DarFechaIniTrimestre(entTercerTrimestre, -1)) and (Fecha <= DarFechaFinTrimestre(entTercerTrimestre, -1)) then CodTri := '2'; if (Fecha >= DarFechaIniTrimestre(entCuartoTrimestre, -1)) and (Fecha <= DarFechaFinTrimestre(entCuartoTrimestre, -1)) then CodTri := '3'; Result := Ano + CodTri; end; procedure TdmTablaTrimestres.AbrirTrimestre(CodigoTrimestre: String); var oSQL : TIBSQL; begin oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update TRIMESTRES set '); SQL.Add('SITUACION = :SITUACION '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add('and CODIGO = :CODIGO'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := CodigoTrimestre; ParamByName('SITUACION').AsString := CTE_ABIERTO; try Prepare; ExecQuery; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaTrimestres.CerrarTrimestre(CodigoTrimestre: String); var oSQL : TIBSQL; begin oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update TRIMESTRES set '); SQL.Add('SITUACION = :SITUACION '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add(' and CODIGO = :CODIGO'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := CodigoTrimestre; ParamByName('SITUACION').AsString := CTE_CERRADO; try Prepare; ExecQuery; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaTrimestres.PredeterminarTrimestre( CodigoTrimestre: String); var oSQL : TIBSQL; begin oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; try SQL.Clear; SQL.Add('update EMPRESAS set '); SQL.Add('CODIGOTRIMESTRE = :CODIGOTRIMESTRE'); SQL.Add('where CODIGO = :CODIGOEMPRESA'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGOTRIMESTRE').AsString := CodigoTrimestre; Prepare; ExecQuery; finally Close; Transaction := NIL; Free; end; end; end; { TListaTrimestres } function TdmTablaTrimestres.darFechaFinTrimestre( CodigoTrimestre: String): TDateTime; var FDatosTrimestre : TDatosTrimestre; begin FDatosTrimestre := TDatosTrimestre.Create; try FDatosTrimestre.Codigo := CodigoTrimestre; darDatosTrimestre(FDatosTrimestre); Result := FDatosTrimestre.FechaFin; finally FDatosTrimestre.Free; end; end; function TdmTablaTrimestres.darFechaIniTrimestre( CodigoTrimestre: String): TDateTime; var FDatosTrimestre : TDatosTrimestre; begin FDatosTrimestre := TDatosTrimestre.Create; try FDatosTrimestre.Codigo := CodigoTrimestre; darDatosTrimestre(FDatosTrimestre); Result := FDatosTrimestre.FechaIni; finally FDatosTrimestre.Free; end; end; //////////////////////////////////////////////////////////////////////////////// //TListaTrimestres //////////////////////////////////////////////////////////////////////////////// function TListaTrimestres.GetTrimestre(Index: Integer): TDatosTrimestre; begin Result := TDatosTrimestre(FLista.Items[Index]); end; procedure TListaTrimestres.ObtenerListaBD; var oSQL : TIBSQL; FTrimestre : TDatosTrimestre; begin oSQL := TIBSQL.Create(nil); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Text := FSQL.Text; try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; ExecQuery; while not EOF do begin FTrimestre := TDatosTrimestre.Create(); FTrimestre.Codigo := FieldByName('CODIGO').AsString; FTrimestre.Nombre := FieldByName('NOMBRE').AsString; if FieldByName('SITUACION').AsString = CTE_ABIERTO then FTrimestre.Situacion := tstAbierto else FTrimestre.Situacion := tstCerrado; FTrimestre.FechaIni := FieldByName('FECHAINI').AsDate; FTrimestre.FechaFin := FieldByName('FECHAFIN').AsDate; FTrimestre.Predeterminado := (FieldByName('CODIGOTRIMESTRE').AsString = FTrimestre.Codigo); FTrimestre.NombreCompleto := FormatDateTime('yyyy', FTrimestre.FechaIni) + ' - ' + FTrimestre.Nombre; FLista.Add(FTrimestre); Next; end; finally Close; Transaction := NIL; Free; end; end; end; procedure TListaTrimestres.AssignTo(Dest: TPersistent); begin // end; function TListaTrimestres.cargarLista(pItems: TStrings): Integer; //Carga todos los trimestres en el combox y devuelve el elemento determinado por defecto var i: integer; begin Result := 0; for i := 0 to FLista.Count - 1 do begin Case Tipo of tlcTriDefecto : pItems.Add(Self.Items[i].Nombre); tlcTriTodos, tlcTriAbiertos : pItems.Add(Self.Items[i].NombreCompleto); end; if Self.Items[i].Predeterminado then Result := i; end; end; destructor TListaTrimestres.Destroy; begin FSQL.Free; FSQL := nil; inherited; end; constructor TListaTrimestres.Create(TipoLista: TListaComboTrimestres); begin inherited Create; FSQL := TStringList.Create; fTipo := TipoLista; case (Tipo) of tlcTriDefecto : ObtenerLista; tlcTriTodos, tlcTriAbiertos: begin inicializarSQL; ObtenerListaBD; end; end; end; procedure TListaTrimestres.ObtenerLista; var FTrimestre : TDatosTrimestre; begin FTrimestre := TDatosTrimestre.Create(); FTrimestre.Nombre := dmTablaTrimestres.darDescripcionTrimestre(entPrimerTrimestre); FTrimestre.Situacion := tstAbierto; FTrimestre.NombreCompleto := dmTablaTrimestres.darDescripcionTrimestre(entPrimerTrimestre); FLista.Add(FTrimestre); FTrimestre := TDatosTrimestre.Create(); FTrimestre.Nombre := dmTablaTrimestres.darDescripcionTrimestre(entSegundoTrimestre); FTrimestre.Situacion := tstAbierto; FTrimestre.NombreCompleto := dmTablaTrimestres.darDescripcionTrimestre(entSegundoTrimestre); FLista.Add(FTrimestre); FTrimestre := TDatosTrimestre.Create(); FTrimestre.Nombre := dmTablaTrimestres.darDescripcionTrimestre(entTercerTrimestre); FTrimestre.Situacion := tstAbierto; FTrimestre.NombreCompleto := dmTablaTrimestres.darDescripcionTrimestre(entTercerTrimestre); FLista.Add(FTrimestre); FTrimestre := TDatosTrimestre.Create(); FTrimestre.Nombre := dmTablaTrimestres.darDescripcionTrimestre(entCuartoTrimestre); FTrimestre.Situacion := tstAbierto; FTrimestre.NombreCompleto := dmTablaTrimestres.darDescripcionTrimestre(entCuartoTrimestre); FLista.Add(FTrimestre); end; procedure TListaTrimestres.inicializarSQL; begin case Tipo of tlcTriTodos : Begin with FSQL do begin Add('select TR.CODIGOEMPRESA, TR.CODIGO, TR.NOMBRE, TR.SITUACION, '); Add('TR.FECHAINI, TR.FECHAFIN, EM.CODIGOTRIMESTRE '); Add('from TRIMESTRES TR, EMPRESAS EM '); Add('where TR.CODIGOEMPRESA = :CODIGOEMPRESA '); Add('and EM.CODIGO = TR.CODIGOEMPRESA '); Add('order by TR.FECHAINI'); end; end; tlcTriAbiertos : Begin with FSQL do begin Add('select TR.CODIGOEMPRESA, TR.CODIGO, TR.NOMBRE, TR.SITUACION, '); Add('TR.FECHAINI, TR.FECHAFIN, EM.CODIGOTRIMESTRE '); Add('from TRIMESTRES TR, EMPRESAS EM '); Add('where TR.CODIGOEMPRESA = :CODIGOEMPRESA '); Add('and EM.CODIGO = TR.CODIGOEMPRESA '); Add('and TR.SITUACION = ''A'' '); Add('order by TR.FECHAINI'); end; end; end; end; function TdmTablaTrimestres.darCodigoTrimestre(Trimestre: TTrimestres; Ano: Variant): String; begin case Trimestre of entPrimerTrimestre : Result := copy(Ano,3,2) + '0'; entSegundoTrimestre : Result := copy(Ano,3,2) + '1'; entTercerTrimestre : Result := copy(Ano,3,2) + '2'; entCuartoTrimestre : Result := copy(Ano,3,2) + '3'; end; end; //////////////////////////////////////////////////////////////////////////////// //ENTIDADES //////////////////////////////////////////////////////////////////////////////// function TdmTablaTrimestres.darDescripcionTrimestre (Entidad : TTrimestres) : string; begin Result := StrCapitalize(CaptionsTrimestres [Entidad]); end; function TdmTablaTrimestres.darCodigoTrimestre(Ano: Variant; Trimestre: Integer): String; begin Result := (copy(Ano,3,2) + IntToStr(Trimestre)); end; function TdmTablaTrimestres.DarDescripcionTrimestreActual: String; var Ano : String; Fecha : TDateTime; begin Result := ''; Ano := Copy(dmBaseDatos.DarAno, 3, 2); Fecha := dmBaseDatos.DarFecha; if (Fecha >= DarFechaIniTrimestre(entPrimerTrimestre, -1)) and (Fecha <= DarFechaFinTrimestre(entPrimerTrimestre, -1)) then Result := darDescripcionTrimestre(entPrimerTrimestre); if (Fecha >= DarFechaIniTrimestre(entSegundoTrimestre, -1)) and (Fecha <= DarFechaFinTrimestre(entSegundoTrimestre, -1)) then Result := darDescripcionTrimestre(entSegundoTrimestre); if (Fecha >= DarFechaIniTrimestre(entTercerTrimestre, -1)) and (Fecha <= DarFechaFinTrimestre(entTercerTrimestre, -1)) then Result := darDescripcionTrimestre(entTercerTrimestre); if (Fecha >= DarFechaIniTrimestre(entCuartoTrimestre, -1)) and (Fecha <= DarFechaFinTrimestre(entCuartoTrimestre, -1)) then Result := darDescripcionTrimestre(entCuartoTrimestre); end; { function TListaTrimestres.getElemPredeterminado: TDatosTrimestre; var i, j : integer; begin Result := Nil; //Recorremos lista i := 0; while ((not Self.Items[i].Predeterminado) and (i < FLista.Count - 1)) do inc (i); if Self.Items[i].Predeterminado then Result := Self.Items[i]; end; } function TdmTablaTrimestres.darDescripcionTrimestre(CodigoTrimestre: String): String; var Codigo : Integer; begin Result := ''; if esCadenaVacia(CodigoTrimestre) then exit; Codigo := StrToInt(Copy(CodigoTrimestre,3,1)); Case Codigo of 0: Result := darDescripcionTrimestre(entPrimerTrimestre); 1: Result := darDescripcionTrimestre(entSegundoTrimestre); 2: Result := darDescripcionTrimestre(entTercerTrimestre); 3: Result := darDescripcionTrimestre(entCuartoTrimestre); end; end; function TdmTablaTrimestres.darAnoTrimestre(CodigoEmpresa: Variant; CodigoTrimestre: Variant): TDateTime; var oSQL : TIBSQL; begin Result := dmBaseDatos.DarFecha; if VarIsNull(CodigoEmpresa) or VarIsNull(CodigoTrimestre) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGOEMPRESA, CODIGO, FECHAINI '); SQL.Add('from TRIMESTRES'); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA '); SQL.Add('and CODIGO = :CODIGO'); try ParamByName('CODIGOEMPRESA').AsVariant := CodigoEmpresa; ParamByName('CODIGO').AsString := CodigoTrimestre; Prepare; ExecQuery; if (RecordCount > 0) then Result := FieldByName('FECHAINI').AsDate; finally Close; Transaction := NIL; Free; end; end; end; function TListaTrimestres.getNumItem(Codigo: String): Integer; var i : integer; begin i := 0; while ((Self.Items[i].Codigo <> Codigo) and (i < FLista.Count - 1)) do inc (i); if Self.Items[i].Codigo = Codigo then Result := i else Result := -1; end; function TListaTrimestres.getCodItem(NumOrden: Integer): String; var i, j : integer; begin Result := Self.Items[NumOrden].Codigo; end; function TdmTablaTrimestres.darDescripcionCompletaTrimestre(CodigoTrimestre: String): String; var oSQL : TIBSQL; begin if esCadenaVacia(CodigoTrimestre) then exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select NOMBRE, FECHAINI '); SQL.Add('from TRIMESTRES '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add('and CODIGO = :CODIGO'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := CodigoTrimestre; Prepare; ExecQuery; if (RecordCount > 0) then Result := copy (FieldByName('FECHAINI').AsString, 7,4) + ' - ' + FieldByName('NOMBRE').AsString; finally Close; Transaction := NIL; Free; end; end; end; end.