This repository has been archived on 2024-12-02. You can view files and clone it, but cannot push or open issues or pull requests.
FactuGES/BaseDatos/TablaObras.pas

497 lines
14 KiB
ObjectPascal
Raw Permalink Normal View History

{
===============================================================================
Copyright (<EFBFBD>) 2005. Rodax Software.
===============================================================================
Los contenidos de este fichero son propiedad de Rodax Software titular del
copyright. Este fichero s<EFBFBD>lo podr<EFBFBD> ser copiado, distribuido y utilizado,
en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
acuerdo con los t<EFBFBD>rminos y condiciones establecidas en el acuerdo/contrato
bajo el que se suministra.
-----------------------------------------------------------------------------
Web: www.rodax-software.com
===============================================================================
Fecha primera versi<EFBFBD>n: 08-06-2005
Versi<EFBFBD>n actual: 1.0.0
Fecha versi<EFBFBD>n actual: 08-06-2005
===============================================================================
Modificaciones:
Fecha Comentarios
---------------------------------------------------------------------------
===============================================================================
}
unit TablaObras;
interface
uses
//Generales
SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB,
//Particulares
//Aplicacion
Framework, StrFunc, Entidades, Constantes, BaseDatos,
//Contador
Contadores, RdxGestorContadores;
type
TTipoListaObras = (tsoAbiertas, tsoCerradas, tsoTodas);
TDatosObra = class(TObjeto)
public
CodigoContrato : String;
FechaAlta : String;
Usuario : String;
CodigoDocumento : String;
FechaFin : String;
Nombre : String;
Calle : String;
Numero : String;
Piso : String;
CodigoPostal : String;
Poblacion : String;
Provincia : String;
Telefono1 : String;
Telefono2 : String;
Movil1 : String;
Movil2 : String;
Fax : String;
//Correo : String;
PersonaContacto : String;
UltimoCambio : String;
constructor Create; overload;
constructor Create(CodigoObra : String); overload;
procedure ObtenerDatos; override;
destructor Destroy; override;
end;
TListaObras = class(TListaObjetos)
private
FSituacion : TTipoListaObras;
function GetObra(Index: Integer): TDatosObra;
protected
procedure ObtenerLista; override;
public
constructor Create; overload; override;
constructor Create(Situacion : TTipoListaObras); overload;
destructor Destroy; override;
property Obras[Index: Integer] : TDatosObra read GetObra;
end;
type
TdmTablaObras = class(TDataModule)
private
procedure IniciarSQL;
public
sqlModificar : TStrings;
sqlEliminar : TStrings;
sqlConsultar : TStrings;
sqlGrid : TStrings;
constructor Create (AOwner : TComponent); override;
destructor Destroy; override;
procedure InicializarGridObras(var vGrid: TcxGridDBTableView);
function CrearObra(CodigoContrato: Variant): Boolean;
function AbrirObra(Codigo: Variant): Boolean;
function CerrarObra(Codigo: Variant; Fecha: TDateTime): Boolean;
end;
var
dmTablaObras: TdmTablaObras;
implementation
{$R *.DFM}
uses
IBErrorCodes, IB, Literales, Mensajes, Excepciones;
constructor TdmTablaObras.Create (AOwner : TComponent);
begin
inherited;
sqlModificar := TStringList.Create;
sqlEliminar := TStringList.Create;
sqlConsultar := TStringList.Create;
sqlGrid := TStringList.Create;
IniciarSQL;
end;
destructor TdmTablaObras.Destroy;
begin
sqlModificar.Free;
sqlEliminar.Free;
sqlConsultar.Free;
sqlGrid.Free;
inherited;
end;
procedure TdmTablaObras.IniciarSQL;
begin
with sqlConsultar do
begin
Add('select OBR.CODIGOCONTRATO, OBR.FECHAALTA, OBR.USUARIO, OBR.CODIGODOCUMENTO, ');
Add('OBR.FECHAFIN, CON.NOMBRE AS NOMBRE, CON.CALLE || '' '' || CON.NUMERO ');
Add('|| '' '' || CON.PISO AS DIR1, ');
Add('CON.CODIGOPOSTAL ||'' '' || CON.POBLACION || '' '' || CON.PROVINCIA AS DIR2, ');
Add('CON.TELEFONO1 AS TELF, OBR.OBSERVACIONES, OBR.ULTIMOCAMBIO ');
Add('from OBRAS OBR, CONTRATOSCLIENTE CON ');
Add('where OBR.CODIGOCONTRATO = :CODIGOCONTRATO AND ');
Add('CON.CODIGO = OBR.CODIGOCONTRATO');
end;
with sqlModificar do
begin
Add('update OBRAS set');
Add('FECHAFIN = :FECHAFIN,');
Add('OBSERVACIONES = :OBSERVACIONES,');
Add('CODIGODOCUMENTO = :CODIGODOCUMENTO,');
Add('ULTIMOCAMBIO = :ULTIMOCAMBIO');
Add('where CODIGOCONTRATO = :CODIGOCONTRATO');
end;
with sqlEliminar do
begin
Add('delete from OBRAS');
Add('where CODIGOCONTRATO = :CODIGOCONTRATO');
end;
with sqlGrid do
begin
Add('select OBR.CODIGOCONTRATO, OBR.FECHAALTA, OBR.USUARIO, OBR.CODIGODOCUMENTO, ');
Add('OBR.FECHAFIN, CON.NOMBRE AS NOMBRE, CON.CALLE || '' '' || CON.NUMERO ');
Add('|| '' '' || CON.PISO AS DIR1, ');
Add('CON.CODIGOPOSTAL ||'' '' || CON.POBLACION || '' '' || CON.PROVINCIA AS DIR2, ');
Add('CON.TELEFONO1 AS TELF, OBR.OBSERVACIONES, OBR.ULTIMOCAMBIO ');
Add('from OBRAS OBR, CONTRATOSCLIENTE CON ');
Add('where CON.CODIGO = OBR.CODIGOCONTRATO');
end;
end;
procedure TdmTablaObras.InicializarGridObras (var vGrid: TcxGridDBTableView);
var
Columna : TcxGridDBColumn;
begin
with vGrid do begin
OptionsView.Footer := True;
{Columna CODIGOCONTRATO}
Columna := CreateColumn;
Columna.DataBinding.FieldName := 'CODIGOCONTRATO';
Columna.Caption := 'Contrato';
Columna.Width := tamColCodigo;
Columna.Options.Filtering := False;
with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do
try
try
BeginUpdate;
Column := Columna;
FieldName := Columna.DataBinding.FieldName;
Format := 'Total: 0 obras';
Kind := skCount;
finally
EndUpdate;
end;
except
DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1);
end;
{Columna FECHAALTA}
Columna := CreateColumn;
Columna.DataBinding.FieldName := 'FECHAALTA';
Columna.Caption := 'Inicio obra';
Columna.Width := tamColFecha;
Columna.Options.Filtering := False;
Columna.SortOrder := soDescending;
{Columna NOMBRE}
Columna := CreateColumn;
Columna.DataBinding.FieldName := 'NOMBRE';
Columna.Caption := 'Nombre';
Columna.Width := tamColNombre;
Columna.Options.Filtering := False;
Columna.SortOrder := soAscending;
{Columna TELEFONO}
Columna := CreateColumn;
Columna.DataBinding.FieldName := 'TELF';
Columna.Caption := 'Tel<65>fono';
Columna.Width := tamColTelefono;
Columna.Options.Filtering := False;
{Columna FECHAFIN}
Columna := CreateColumn;
Columna.DataBinding.FieldName := 'FECHAFIN';
Columna.Caption := 'Fin de obra';
Columna.Width := tamColFecha;
Columna.Options.Filtering := False;
end;
end;
{ TDatosObra }
constructor TDatosObra.Create(CodigoObra: String);
begin
inherited Create;
CodigoContrato := CodigoObra;
// Recuperar los datos
ObtenerDatos;
end;
constructor TDatosObra.Create;
begin
inherited Create;
end;
destructor TDatosObra.Destroy;
begin
inherited;
end;
procedure TDatosObra.ObtenerDatos;
var
oSQL : TIBSQL;
begin
if EsCadenaVacia(CodigoContrato) and EsCadenaVacia(Nombre) then
raise Exception.Create(msgObrFaltaObr);
oSQL := TIBSQL.Create(NIL);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select CODIGOCONTRATO, OBR.FECHAALTA as FECHAALTA, OBR.USUARIO as USUARIO, OBR.CODIGODOCUMENTO as CODIGODOCUMENTO, ');
SQL.Add('OBR.FECHAFIN as FECHAFIN, CON.NOMBRE AS NOMBRE, CON.CALLE as CALLE, CON.NUMERO as NUMERO, ');
SQL.Add('CON.PISO AS PISO, CON.CODIGOPOSTAL AS CODIGOPOSTAL, CON.POBLACION AS POBLACION, ');
SQL.Add('CON.PROVINCIA AS PROVINCIA, CON.TELEFONO1 AS TELEFONO1, ');
SQL.Add('CON.TELEFONO2 AS TELEFONO2, CON.MOVIL1 as MOVIL1, CON.MOVIL2 AS MOVIL2, CON.FAX AS FAX, ');
SQL.Add('CON.PERSONACONTACTO AS PERSONACONTACTO, ');
SQL.Add('OBR.OBSERVACIONES AS OBSERVACIONES, OBR.ULTIMOCAMBIO AS ULTIMOCAMBIO');
SQL.Add('from OBRAS OBR, CONTRATOSCLIENTE CON ');
SQL.Add('where CON.CODIGO = OBR.CODIGOCONTRATO ');
// SQL.Add('select CODIGOCONTRATO, FECHAALTA, USUARIO, CODIGODOCUMENTO,');
// SQL.Add('FECHAFIN, OBSERVACIONES, ULTIMOCAMBIO'); //NOMBRE, CALLE, NUMERO, PISO, CODIGOPOSTAL,');
// SQL.Add('POBLACION, PROVINCIA, PERSONACONTACTO, TELEFONO1,');
// SQL.Add('TELEFONO2, MOVIL1, MOVIL2, FAX, CORREO');
// SQL.Add('from OBRAS');
if (not EsCadenaVacia(CodigoContrato)) then
begin
SQL.Add('AND OBR.CODIGOCONTRATO = :CODIGOCONTRATO');
ParamByName('CODIGOCONTRATO').AsString := CodigoContrato;
end;
{ else begin
SQL.Add('where NOMBRE = :NOMBRE');
ParamByName('NOMBRE').AsString := Nombre;
end;}
try
Prepare;
ExecQuery;
// Compruebo si se han recuperado datos
if (RecordCount > 0) then
begin
CodigoContrato := FieldByName('CODIGOCONTRATO').AsString;
FechaAlta := FieldByName('FECHAALTA').AsString;
Usuario := FieldByName('USUARIO').AsString;
CodigoDocumento := FieldByName('CODIGODOCUMENTO').AsString;
FechaFin := FieldByName('FECHAFIN').AsString;
UltimoCambio := FieldByName('ULTIMOCAMBIO').AsString;
Nombre := FieldByName('NOMBRE').AsString;
Calle := FieldByName('CALLE').AsString;
Numero := FieldByName('NUMERO').AsString;
Piso := FieldByName('PISO').AsString;
CodigoPostal := FieldByName('CODIGOPOSTAL').AsString;
Poblacion := FieldByName('POBLACION').AsString;
Provincia := FieldByName('PROVINCIA').AsString;
Telefono1 := FieldByName('TELEFONO1').AsString;
Telefono2 := FieldByName('TELEFONO2').AsString;
Movil1 := FieldByName('MOVIL1').AsString;
Movil2 := FieldByName('MOVIL2').AsString;
Fax := FieldByName('FAX').AsString;
//Correo := FieldByName('CORREO').AsString;
PersonaContacto := FieldByName('PERSONACONTACTO').AsString;
end;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaObras.CrearObra(CodigoContrato: Variant): Boolean;
var
oSQL : TIBSQL;
Contador : String;
begin
Result := False;
if EsCadenaVacia(CodigoContrato) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('insert into obras');
SQL.Add('(CODIGOCONTRATO, FECHAALTA, USUARIO, CODIGODOCUMENTO)');
SQL.Add('select CODIGO, :FECHAALTA, :USUARIO, CODIGODOCUMENTO');
SQL.Add('from CONTRATOSCLIENTE');
SQL.Add('where CODIGO = :CODIGOCONTRATO');
ParamByName('CODIGOCONTRATO').AsString := CodigoContrato;
ParamByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha;
ParamByName('USUARIO').AsString := dmBaseDatos.Usuario;
try
Prepare;
ExecQuery;
Result := True;
except
on E : EIBError do begin
if E.IBErrorCode = isc_unique_key_violation
then VerMensajeFmt(msgObrErrAnadir,[CodigoContrato])
else TratarExcepcion(E);
Close;
Transaction := NIL;
Free;
end;
else
begin
Close;
Transaction := NIL;
Free;
end;
end;
end;
end;
function TdmTablaObras.AbrirObra(Codigo: Variant): Boolean;
var
oSQL : TIBSQL;
begin
Result := False;
if esCadenaVacia(Codigo) then
exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('update OBRAS ');
SQL.Add('set FECHAFIN = Null ');
SQL.Add('where CODIGOCONTRATO = :CODIGOCONTRATO');
try
ParamByName('CODIGOCONTRATO').AsString := Codigo;
Prepare;
ExecQuery;
Result := True;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaObras.CerrarObra(Codigo: Variant; Fecha: TDateTime): Boolean;
var
oSQL : TIBSQL;
begin
Result := False;
if esCadenaVacia(Codigo) then
exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('update OBRAS ');
SQL.Add('set FECHAFIN = :FECHA ');
SQL.Add('where CODIGOCONTRATO = :CODIGOCONTRATO');
try
ParamByName('CODIGOCONTRATO').AsString := Codigo;
ParamByName('FECHA').AsDateTime := Fecha;
Prepare;
ExecQuery;
Result := True;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
{ TListaObras }
constructor TListaObras.Create;
begin
inherited;
FSituacion := tsoTodas;
ObtenerLista;
end;
constructor TListaObras.Create(Situacion: TTipoListaObras);
begin
inherited Create;
FSituacion := Situacion;
ObtenerLista;
end;
destructor TListaObras.Destroy;
begin
inherited;
end;
function TListaObras.GetObra(Index: Integer): TDatosObra;
begin
Result := TDatosObra(FLista.Items[Index]);
end;
procedure TListaObras.ObtenerLista;
var
oSQL : TIBSQL;
Obra : TDatosObra;
begin
oSQL := TIBSQL.Create(nil);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select CODIGOCONTRATO ');
SQL.Add('from OBRAS');
case FSituacion of
tsoAbiertas : SQL.Add('where FECHAFIN is null ');
tsoCerradas : SQL.Add('where FECHAFIN is not null ');
end;
SQL.Add('order by FECHAALTA desc');
try
Prepare;
ExecQuery;
while not EOF do begin
Obra := TDatosObra.Create(FieldByName('CODIGOCONTRATO').AsString);
FLista.Add(Obra);
Next;
end;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
end.