{ =============================================================================== 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 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 ClearItems; 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 montaje'; 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éfono'; Columna.Width := tamColTelefono; Columna.Options.Filtering := False; {Columna FECHAFIN} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FECHAFIN'; Columna.Caption := 'Fin de montaje'; 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.