{ =============================================================================== 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: 02-12-2002 Versión actual: 1.0.0 Fecha versión actual: 02-12-2002 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- =============================================================================== } unit TablaContratos; interface uses //Generales SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB, //Particulares IBCustomDataSet, cxGrid, StdCtrls, cxEdit, cxMemo, cxButtonEdit, cxGridDBCardView, TablaPropiedades, //Aplicacion Framework, StrFunc, Entidades, Constantes, BaseDatos, //Contador Contadores, RdxGestorContadores; type TListaDetallesContrato = class; TDatosDetalleContrato = class; TListaPropiedadesContrato = class; TDatosContrato = class(TObjeto) private FListaDetallesContrato : TListaDetallesContrato; protected procedure ObtenerDatos; override; procedure AssignTo(Dest: TPersistent); override; public Codigo : string; FechaAlta : TDateTime; Usuario : string; CodigoDocumento : string; FechaContrato : TDateTime; Situacion : string; CodigoCliente : string; NifCif : 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; PersonaContacto : string; BaseImponible : double; Descuento : integer; ImporteDescuento : double; IVA : Integer; ImporteIVA : double; ImporteTotal : double; Observaciones : string; PlazoEntrega : string; FormaPago : string; constructor Create(CodigoContrato : String); overload; constructor Create; overload; override; destructor Destroy; override; property ListaDetallesContrato : TListaDetallesContrato read FListaDetallesContrato; end; TListaDetallesContrato = class(TListaObjetos) private FCodigoContrato : String; function GetDetalleContrato(Index: Integer): TDatosDetalleContrato; protected procedure AssignTo(Dest: TPersistent); override; procedure ObtenerLista; override; public constructor Create(CodigoContrato: String); overload; constructor Create; overload; override; property Items[Index: Integer] : TDatosDetalleContrato read GetDetalleContrato; end; TDatosDetalleContrato = class(TObjeto) private FListaPropiedades : TListaPropiedadesContrato; protected procedure ObtenerDatos; override; procedure AssignTo(Dest: TPersistent); override; public NumConcepto : Integer; TipoConcepto : string; CodigoArticulo : string; Referencia : string; Descripcion : String; Cantidad : integer; ImporteUnidad : double; ImporteTotal : double; Observaciones : string; constructor Create; override; destructor Destroy; override; property ListaPropiedades : TListaPropiedadesContrato read FListaPropiedades; end; TListaPropiedadesContrato = class(TListaObjetos) private FCodigoArticulo : String; function GetPropiedad(Index: Integer): TDatosPropiedad; protected procedure AssignTo(Dest: TPersistent); override; procedure ObtenerLista; override; public constructor Create(CodigoArticulo : String); overload; constructor Create; overload; override; property Items[Index: Integer] : TDatosPropiedad read GetPropiedad; end; ///////////////////////////////////////////////////////////////////////////////// TdmTablaContratos = class(TDataModule) private procedure IniciarSQLContrato; procedure IniciarSQLDetalles; procedure IniciarSQLGrids; function NoFacturarPresupuesto(Codigo: String): boolean; public sqlConsultarGridContratos : TStrings; sqlConsultarGridContratosCli : TStrings; sqlConsultarGridContratosFacturar : TStrings; sqlConsultarGridBeneficios : TStrings; sqlConsultarGridContratosObra : TStrings; sqlInsertarContrato : TStrings; sqlModificarContrato : TStrings; sqlConsultarContrato : TStrings; sqlEliminarContrato : TStrings; sqlInsertarDetalles : TStrings; sqlModificarDetalles : TStrings; sqlConsultarDetalles : TStrings; sqlEliminarDetalles : TStrings; sqlConsultarGridDetalles : TStrings; sqlInsertarPropiedades : TStrings; sqlModificarPropiedades : TStrings; sqlConsultarPropiedades : TStrings; sqlEliminarPropiedades : TStrings; sqlConsultarGridPropiedades : TStrings; sqlConsultarGridPropiedadesModal : TStrings; sqlConsultarContratosCliente : TStrings; //Metodos que llamaran a contador function DarNuevoCodigo : String; function InsertarContador : boolean; function IncrementarCodigo : boolean; function ValidarCodigo(Codigo : String) : Boolean; function FormatearCodigo(Codigo : String) : String; function DarSituaciones : TStrings; function FormatearNumConcepto(NumConcepto : String) : String; function ExisteCodigo(Codigo : String) : Boolean; function ExistenContratos: Boolean; function CopiarContrato(CodigoContrato : String) : String; function CrearContrato(CodigoPresupuesto : String) : String; procedure InicializarGridDetalles(var Grid: TcxGridDBTableView); procedure InicializarGridPropiedades(var vGrid: TcxGridDBCardView); procedure InicializarGridContratos(var Grid: TcxGrid); procedure InicializarGridBeneficios(var Grid: TcxGrid); procedure InicializarTablaContratos(Tabla: TPTabla); procedure InicializarTablaDetalles(Tabla: TPTabla); procedure InicializarTablaBeneficios(Tabla: TPTabla); constructor Create (AOwner : TComponent); override; destructor Destroy; override; function DarListaAnos: TStrings; function DarRutaPlanos(CodigoContrato : String) : String; end; var dmTablaContratos: TdmTablaContratos; implementation {$R *.DFM} uses Mensajes, Literales, TablaPresupuestos; { TdmTablaContratos } constructor TdmTablaContratos.Create(AOwner: TComponent); begin inherited; { Cabecera } sqlInsertarContrato := TStringList.Create; sqlModificarContrato := TStringList.Create; sqlConsultarContrato := TStringList.Create; sqlEliminarContrato := TStringList.Create; { Detalles } sqlInsertarDetalles := TStringList.Create; sqlModificarDetalles := TStringList.Create; sqlConsultarDetalles := TStringList.Create; sqlEliminarDetalles := TStringList.Create; sqlConsultarGridDetalles := TStringList.Create; { Propiedades } sqlInsertarPropiedades := TStringList.Create; sqlModificarPropiedades := TStringList.Create; sqlConsultarPropiedades := TStringList.Create; sqlEliminarPropiedades := TStringList.Create; sqlConsultarGridPropiedades := TStringList.Create; sqlConsultarGridPropiedadesModal := TStringList.Create; sqlConsultarContratosCliente := TStringList.Create; { Grids } sqlConsultarGridContratos := TStringList.Create; sqlConsultarGridContratosCli := TStringList.Create; sqlConsultarGridContratosFacturar := TStringList.Create; sqlConsultarGridBeneficios := TStringList.Create; sqlConsultarGridContratosObra := TStringList.Create; IniciarSQLContrato; IniciarSQLDetalles; IniciarSQLGrids; end; function TdmTablaContratos.DarNuevoCodigo: String; begin Result := GestorContadores.darNuevoCodigo(contContratosCliente); end; destructor TdmTablaContratos.Destroy; begin { Cabecera } sqlInsertarContrato.Free; sqlModificarContrato.Free; sqlConsultarContrato.Free; sqlEliminarContrato.Free; { Detalles } sqlInsertarDetalles.Free; sqlModificarDetalles.Free; sqlConsultarDetalles.Free; sqlEliminarDetalles.Free; sqlConsultarGridDetalles.Free; { Propiedades } sqlInsertarPropiedades.Free; sqlModificarPropiedades.Free; sqlConsultarPropiedades.Free; sqlEliminarPropiedades.Free; sqlConsultarGridPropiedades.Free; sqlConsultarGridPropiedadesModal.Free; sqlConsultarContratosCliente.Free; { Grids } sqlConsultarGridContratos.Free; sqlConsultarGridContratosCli.Free; sqlConsultarGridContratosFacturar.Free; sqlConsultarGridBeneficios.Free; sqlConsultarGridContratosObra.Free; inherited; end; function TdmTablaContratos.ExisteCodigo(Codigo: String): Boolean; var oSQL : TIBSQL; Contador : String; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGO '); SQL.Add('from CONTRATOSCLIENTE '); SQL.Add('where CODIGO = :CODIGO'); ParamByName('CODIGO').AsString := Codigo; try Prepare; ExecQuery; Contador := Fields[0].AsString; Result := (Codigo = Contador); finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaContratos.FormatearCodigo(Codigo: String): String; begin Result := GestorContadores.formatearCodigo(contContratosCliente, Codigo); end; function TdmTablaContratos.FormatearNumConcepto( NumConcepto: String): String; var Concepto : Integer; begin Concepto := StrToInt(NumConcepto); Result := format('%.10d', [Concepto]); end; function TdmTablaContratos.IncrementarCodigo: boolean; begin Result := GestorContadores.IncrementarValor(contContratosCliente); end; procedure TdmTablaContratos.InicializarGridDetalles(var Grid: TcxGridDBTableView); var Columna : TcxGridDBColumn; begin with Grid do begin OptionsView.Footer := True; {Columna CODIGOCONTRATO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOCONTRATO'; Columna.Visible := False; Columna.Options.Filtering := False; Columna.Options.Sorting := False; {Columna NUMCONCEPTO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NUMCONCEPTO'; Columna.Visible := False; Columna.Options.Filtering := False; Columna.Options.Sorting := False; {Columna FAMILIA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FAMILIA'; Columna.Visible := False; Columna.Options.Filtering := False; Columna.Options.Sorting := False; {Columna CODIGOARTICULO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOARTICULO'; Columna.Caption := 'Cód. artículo'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; Columna.Options.Sorting := False; Columna.PropertiesClassName := 'TcxButtonEditProperties'; with TcxButtonEditProperties(Columna.Properties) do begin Buttons[0].Kind := bkEllipsis; end; Columna.Visible := False; {Columna REFERENCIA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'REFERENCIA'; Columna.Caption := 'Referencia'; Columna.Width := tamColReferencia; Columna.Options.Filtering := False; Columna.Options.Sorting := False; Columna.PropertiesClassName := 'TcxButtonEditProperties'; with TcxButtonEditProperties(Columna.Properties) do begin Buttons[0].Kind := bkEllipsis; end; {Columna DESCRIPCION} Columna := CreateColumn; Columna.DataBinding.FieldName := 'DESCRIPCION'; Columna.Caption := 'Descripción servicio/artículo'; Columna.Width := tamColDescripcion; Columna.Options.Filtering := False; Columna.Options.Sorting := False; Columna.PropertiesClassName := 'TcxMemoProperties'; with TcxMemoProperties(Columna.Properties) do begin ScrollBars := ssVertical; end; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: #,0 conceptos'; Kind := skCount; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna CANTIDAD} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CANTIDAD'; Columna.Caption := 'Cantidad'; Columna.Width := tamColCantidad; Columna.Options.Filtering := False; Columna.Options.Sorting := False; Columna.PropertiesClassName := 'TcxCalcEditProperties'; Columna.HeaderAlignmentHorz := taRightJustify; {Columna IMPORTEUNIDAD} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTEUNIDAD'; Columna.Caption := 'Importe unidad'; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.Options.Sorting := False; Columna.PropertiesClassName := 'TcxCalcEditProperties'; Columna.HeaderAlignmentHorz := taRightJustify; {Columna IMPORTETOTAL} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTETOTAL'; Columna.Caption := 'Importe total'; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.Options.Sorting := False; Columna.Options.Editing := False; Columna.HeaderAlignmentHorz := taRightJustify; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '#,0.00 €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; end; end; procedure TdmTablaContratos.InicializarGridContratos(var Grid: TcxGrid); var Columna : TcxGridDBColumn; begin with (Grid.ActiveView as TcxGridDBTableView) do begin OptionsView.Footer := True; {Columna CODIGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGO'; Columna.Caption := 'Código'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; Columna.SortOrder := soDescending; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: 0 Contratos'; Kind := skCount; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna DESCRIPCION} Columna := CreateColumn; Columna.DataBinding.FieldName := 'DESCRIPCION'; Columna.Caption := 'Documento'; Columna.Width := tamColDocumentos; Columna.Options.Filtering := False; {Columna FECHACONTRATO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FECHACONTRATO'; Columna.Caption := 'Fecha'; Columna.Width := tamColFecha; Columna.Options.Filtering := False; {Columna SITUACION} Columna := CreateColumn; Columna.DataBinding.FieldName := 'SITUACION'; Columna.Caption := 'Situación'; Columna.Width := tamColSituacion; Columna.Options.Filtering := False; Columna.Visible := False; {Columna CODIGOCLIENTE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOCLIENTE'; Columna.Caption := 'Cód. cliente'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; {Columna NIFCIF} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NIFCIF'; Columna.Caption := 'NIF/CIF'; Columna.Width := tamColNIFCIF; Columna.Options.Filtering := False; {Columna NOMBRE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre'; Columna.Width := tamColNombre; Columna.Options.Filtering := False; {Columna IMPORTETOTAL} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTETOTAL'; Columna.Caption := 'Importe total'; Columna.Width := tamColImporte; Columna.Options.Filtering := False; {Columna CODIGOCONTRATO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOCONTRATO'; Columna.Caption := 'Codigo Obra'; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.Visible := False; end; end; procedure TdmTablaContratos.InicializarTablaDetalles(Tabla: TPTabla); begin with Tabla^.Fields do begin if FindField('IMPORTEUNIDAD') <> NIL then with (FieldByName('IMPORTEUNIDAD') as TFloatField) do begin DisplayFormat := DISPLAY_EUROS4; EditFormat := EDIT_EUROS4; end; if FindField('IMPORTETOTAL') <> NIL then with (FieldByName('IMPORTETOTAL') as TFloatField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; end; end; procedure TdmTablaContratos.InicializarTablaContratos( Tabla: TPTabla); begin with Tabla^.Fields do begin if FindField('BASEIMPONIBLE') <> NIL then with (FieldByName('BASEIMPONIBLE') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS4; EditFormat := EDIT_EUROS4; end; if FindField('DESCUENTO') <> NIL then with (FieldByName('DESCUENTO') as TFloatField) do begin DisplayFormat := DISPLAY_DTO; EditFormat := EDIT_DTO; end; if FindField('IMPORTEDESCUENTO') <> NIL then with (FieldByName('IMPORTEDESCUENTO') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS4; EditFormat := EDIT_EUROS4; end; if FindField('IVA') <> NIL then with (FieldByName('IVA') as TFloatField) do begin DisplayFormat := DISPLAY_DTO; EditFormat := EDIT_DTO; end; if FindField('IMPORTEIVA') <> NIL then with (FieldByName('IMPORTEIVA') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS4; EditFormat := EDIT_EUROS4; end; if FindField('IMPORTETOTAL') <> NIL then with (FieldByName('IMPORTETOTAL') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; end; end; procedure TdmTablaContratos.IniciarSQLDetalles; begin with sqlInsertarDetalles do begin Add('insert into DETALLESCONTRATOSARTICULOS ('); Add('CODIGOCONTRATO, NUMCONCEPTO, TIPOCONCEPTO, CODIGOARTICULO,'); Add('REFERENCIA, DESCRIPCION, CANTIDAD,'); Add('IMPORTEUNIDAD, IMPORTETOTAL, OBSERVACIONES) values ('); Add(':CODIGOCONTRATO, :NUMCONCEPTO, :TIPOCONCEPTO, :CODIGOARTICULO,'); Add(':REFERENCIA, :DESCRIPCION, :CANTIDAD,'); Add(':IMPORTEUNIDAD, :IMPORTETOTAL, :OBSERVACIONES)'); end; with sqlModificarDetalles do begin Add('update DETALLESCONTRATOSARTICULOS set '); Add('CODIGOARTICULO = :CODIGOARTICULO, '); Add('REFERENCIA = :REFERENCIA, '); Add('TIPOCONCEPTO = :TIPOCONCEPTO, '); Add('DESCRIPCION = :DESCRIPCION, '); Add('CANTIDAD = :CANTIDAD, '); Add('IMPORTEUNIDAD = :IMPORTEUNIDAD, '); Add('IMPORTETOTAL = :IMPORTETOTAL, '); Add('OBSERVACIONES = :OBSERVACIONES '); Add('where (CODIGOCONTRATO = :CODIGOCONTRATO) and '); Add('(NUMCONCEPTO = :NUMCONCEPTO)'); end; with sqlEliminarDetalles do begin Add('delete from DETALLESCONTRATOSARTICULOS '); Add('where (CODIGOCONTRATO = :CODIGOCONTRATO) and '); Add('(NUMCONCEPTO = :NUMCONCEPTO)'); end; with sqlConsultarDetalles do begin Add('select * from DETALLESCONTRATOSARTICULOS '); Add('where (CODIGOCONTRATO = :CODIGOCONTRATO) and '); Add('(NUMCONCEPTO = :NUMCONCEPTO)'); end; with sqlInsertarPropiedades do begin Add('insert into DETALLESCONTRATOSPROPIEDADES ( '); Add('CODIGOCONTRATO, NUMCONCEPTO,'); Add('NUMPROPIEDAD, CODIGOPROPIEDAD, VALOR) values ('); Add(':CODIGOCONTRATO, :NUMCONCEPTO, :NUMPROPIEDAD, '); Add(':CODIGOPROPIEDAD, :VALOR)'); end; with sqlModificarPropiedades do begin Add('update DETALLESCONTRATOSPROPIEDADES set '); Add('CODIGOPROPIEDAD = :CODIGOPROPIEDAD, '); Add('VALOR = :VALOR '); Add('where (CODIGOCONTRATO = :CODIGOCONTRATO) and '); Add('(NUMCONCEPTO = :NUMCONCEPTO) and '); Add('(NUMPROPIEDAD = :NUMPROPIEDAD)'); end; with sqlEliminarPropiedades do begin Add('delete from DETALLESCONTRATOSPROPIEDADES '); Add('where (CODIGOCONTRATO = :CODIGOCONTRATO) and '); Add('(NUMCONCEPTO = :NUMCONCEPTO) and '); Add('(NUMPROPIEDAD = :NUMPROPIEDAD);'); end; with sqlConsultarPropiedades do begin Add('select * from DETALLESCONTRATOSPROPIEDADES '); Add('where (CODIGOCONTRATO = :CODIGOCONTRATO) and '); Add('(NUMCONCEPTO = :NUMCONCEPTO) and '); Add('(NUMPROPIEDAD = :NUMPROPIEDAD);'); end; end; procedure TdmTablaContratos.IniciarSQLGrids; begin with sqlConsultarGridContratosFacturar do begin Add('select CON.CODIGO, CON.SITUACION, CON.FECHACONTRATO, '); Add('CON.CODIGOCLIENTE, CON.NIFCIF, CON.NOMBRE, '); Add('CON.IMPORTETOTAL, CON.CODIGODOCUMENTO, DOC.DESCRIPCION'); Add('from DOCUMENTOS DOC, CONTRATOSCLIENTE CON '); Add('where DOC.CODIGO = CON.CODIGODOCUMENTO '); end; with sqlConsultarGridContratos do begin Add('select CON.CODIGO, CON.SITUACION, CON.FECHACONTRATO, '); Add('CON.CODIGOCLIENTE, CON.NIFCIF, CON.NOMBRE, '); Add('CON.IMPORTETOTAL, CON.CODIGODOCUMENTO, DOC.DESCRIPCION, OBR.CODIGOCONTRATO'); Add('from CONTRATOSCLIENTE CON left join DOCUMENTOS DOC'); Add('on DOC.CODIGO = CON.CODIGODOCUMENTO left outer join OBRAS OBR'); Add('on CON.CODIGO = OBR.CODIGOCONTRATO'); end; with sqlConsultarGridDetalles do begin Add('select CODIGOCONTRATO, NUMCONCEPTO, CODIGOARTICULO, REFERENCIA, TIPOCONCEPTO, '); Add('DESCRIPCION, CANTIDAD, IMPORTEUNIDAD, IMPORTETOTAL, OBSERVACIONES '); Add('from DETALLESCONTRATOSARTICULOS '); Add('where CODIGOCONTRATO = :CODIGOCONTRATO '); Add('order by CODIGOCONTRATO, NUMCONCEPTO'); end; with sqlConsultarGridPropiedades do begin Add('select CODIGOCONTRATO, NUMCONCEPTO, NUMPROPIEDAD, '); Add('CODIGOPROPIEDAD, VALOR '); Add('from DETALLESCONTRATOSPROPIEDADES '); Add('where CODIGOCONTRATO = :CODIGOCONTRATO '); Add('order by CODIGOCONTRATO, NUMCONCEPTO'); end; with sqlConsultarGridPropiedadesModal do begin Add('select CODIGOCONTRATO, NUMCONCEPTO, '); Add('CODIGOPROPIEDAD, GOVALOR '); Add('from DETALLESCONTRATOSPROPIEDADES '); Add('where CODIGOCONTRATO = :CODIGOCONTRATO and '); Add('NUMCONCEPTO = :NUMCONCEPTO '); Add('order by CODIGOCONTRATO, NUMCONCEPTO'); end; with sqlConsultarContratosCliente do begin Add('select CODIGO, CODIGOCLIENTE '); Add('from CONTRATOSCLIENTE '); Add('where CODIGOCLIENTE = :CODIGOCLIENTE '); Add('order by CODIGO'); end; with sqlConsultarGridBeneficios do begin Add('select cc.codigo, cc.fechacontrato, cc.NIFCIF, cc.nombre, cc.importetotal,'); Add('(select sum(fpc.importe)'); Add('from detallesfacturasprovcontratos fpc'); Add('where fpc.codigocontrato = cc.codigo'); Add('and fpc.codigoempresa = :CODIGOEMPRESA'); Add('group by fpc.codigocontrato) as IMPPROV,'); Add('(select sum(otg.importe)'); Add('from obrasgastos otg'); Add('where otg.codigocontrato = cc.codigo'); Add('group by otg.codigocontrato) as IMPOTROS,'); Add('(select sum(fcc.importetotal)'); Add('from facturascliente fcc'); Add('where fcc.codigocontrato = cc.codigo'); Add('and fcc.codigoempresa = :CODIGOEMPRESA'); Add('group by fcc.codigocontrato) as IMPCLI,'); Add('0 as BENEFICIO, 0 as PORCENTAJE'); Add('from contratoscliente cc'); Add('order by cc.fechacontrato, cc.nombre'); end; with sqlConsultarGridContratosObra do begin Add('select CON.CODIGO, CON.SITUACION, CON.FECHACONTRATO,'); Add('CON.CODIGOCLIENTE, CON.NIFCIF, CON.NOMBRE,'); Add('CON.IMPORTETOTAL, CON.CODIGODOCUMENTO, DOC.DESCRIPCION, OBR.CODIGOCONTRATO'); Add('from CONTRATOSCLIENTE CON left join DOCUMENTOS DOC'); Add('on DOC.CODIGO = CON.CODIGODOCUMENTO left outer join OBRAS OBR'); Add('on CON.CODIGO = OBR.CODIGOCONTRATO'); Add('where OBR.CODIGOCONTRATO is null'); end; end; procedure TdmTablaContratos.IniciarSQLContrato; begin with sqlInsertarContrato do begin Add(' INSERT INTO CONTRATOSCLIENTE ( '); Add(' CODIGO, FECHAALTA, '); Add(' USUARIO, CODIGODOCUMENTO, '); Add(' FECHACONTRATO, SITUACION, '); Add(' CODIGOCLIENTE, NIFCIF, '); Add(' NOMBRE, CALLE, NUMERO, '); Add(' PISO, CODIGOPOSTAL, '); Add(' POBLACION, PROVINCIA, '); Add(' TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, FAX, PERSONACONTACTO, '); Add(' BASEIMPONIBLE, DESCUENTO, '); Add(' IMPORTEDESCUENTO, '); Add(' IVA, IMPORTEIVA, '); Add(' IMPORTETOTAL, '); Add(' OBSERVACIONES, PLAZOENTREGA, '); Add(' FORMAPAGO) '); Add(' VALUES ( '); Add(' :CODIGO, :FECHAALTA, '); Add(' :USUARIO, :CODIGODOCUMENTO, '); Add(' :FECHACONTRATO, :SITUACION, '); Add(' :CODIGOCLIENTE, :NIFCIF, '); Add(' :NOMBRE, :CALLE, :NUMERO, '); Add(' :PISO, :CODIGOPOSTAL, '); Add(' :POBLACION, :PROVINCIA, '); Add(' :TELEFONO1, :TELEFONO2, :MOVIL1, :MOVIL2, :FAX, :PERSONACONTACTO, '); Add(' :BASEIMPONIBLE, :DESCUENTO, '); Add(' :IMPORTEDESCUENTO, '); Add(' :IVA, :IMPORTEIVA, '); Add(' :IMPORTETOTAL, '); Add(' :OBSERVACIONES, :PLAZOENTREGA, '); Add(' :FORMAPAGO) '); end; with sqlModificarContrato do begin Add(' UPDATE CONTRATOSCLIENTE '); Add(' SET FECHAALTA = :FECHAALTA, '); Add(' USUARIO = :USUARIO, '); Add(' CODIGODOCUMENTO = :CODIGODOCUMENTO, '); Add(' FECHACONTRATO = :FECHACONTRATO, '); Add(' SITUACION = :SITUACION, '); Add(' CODIGOCLIENTE = :CODIGOCLIENTE, '); Add(' NIFCIF = :NIFCIF, '); Add(' NOMBRE = :NOMBRE, '); Add(' CALLE = :CALLE, '); Add(' NUMERO = :NUMERO, '); Add(' PISO = :PISO, '); Add(' CODIGOPOSTAL = :CODIGOPOSTAL, '); Add(' POBLACION = :POBLACION, '); Add(' PROVINCIA = :PROVINCIA, '); Add(' TELEFONO1 = :TELEFONO1, '); Add(' TELEFONO2 = :TELEFONO2, '); Add(' MOVIL1 = :MOVIL1, '); Add(' MOVIL2 = :MOVIL2, '); Add(' FAX = :FAX, '); Add(' PERSONACONTACTO = :PERSONACONTACTO, '); Add(' BASEIMPONIBLE = :BASEIMPONIBLE, '); Add(' DESCUENTO = :DESCUENTO, '); Add(' IMPORTEDESCUENTO = :IMPORTEDESCUENTO, '); Add(' IVA = :IVA, '); Add(' IMPORTEIVA = :IMPORTEIVA, '); Add(' IMPORTETOTAL = :IMPORTETOTAL, '); Add(' OBSERVACIONES = :OBSERVACIONES, '); Add(' PLAZOENTREGA = :PLAZOENTREGA, '); Add(' FORMAPAGO = :FORMAPAGO '); Add(' WHERE (CODIGO = :CODIGO) '); end; with sqlEliminarContrato do begin Add('delete from CONTRATOSCLIENTE '); Add('where CODIGO = :CODIGO'); end; with sqlConsultarContrato do begin Add('SELECT * FROM CONTRATOSCLIENTE '); Add('where CODIGO = :CODIGO'); end; end; function TdmTablaContratos.InsertarContador: boolean; begin Result := GestorContadores.InsertarContador(contContratosCliente); end; function TdmTablaContratos.ValidarCodigo(Codigo: String): Boolean; begin Result := GestorContadores.ValidarCodigo(contContratosCliente, Codigo); end; function TdmTablaContratos.NoFacturarPresupuesto( Codigo: String): boolean; var oSQL : TIBSQL; begin { Ya no hace falta código en esta función por que Interbase pone el campo CODIGOFACTURA a NULL automáticamente cuando se elimina la factura de cliente. } Result := True; end; procedure TdmTablaContratos.InicializarGridPropiedades(var vGrid: TcxGridDBCardView); var Columna : TcxGridDBCardViewRow; begin with vGrid do begin {Columna CODIGOCONTRATO} Columna := CreateRow; Columna.DataBinding.FieldName := 'CODIGOCONTRATO'; Columna.Visible := False; {Columna NUMCONCEPTO} Columna := CreateRow; Columna.DataBinding.FieldName := 'NUMCONCEPTO'; Columna.Visible := False; Columna.SortOrder := soAscending; {Columna NUMPROPIEDAD} Columna := CreateRow; Columna.DataBinding.FieldName := 'NUMPROPIEDAD'; Columna.Visible := False; Columna.SortOrder := soAscending; {Columna CODIGOPROPIEDAD} {Columna := CreateRow; Columna.DataBinding.FieldName := 'CODIGOPROPIEDAD'; Columna.Caption := 'Codigo propiedad'; Columna.PropertiesClassName := 'TcxComboBoxProperties';} {Columna VALOR} {Columna := CreateRow; Columna.DataBinding.FieldName := 'VALOR'; Columna.Caption := 'Valor'; Columna.PropertiesClassName := 'TcxComboBoxProperties';} end; end; function TdmTablaContratos.CrearContrato(CodigoPresupuesto: String) : String; var oSQL : TIBSQL; oSQL2 : TIBSQL; oSQL3 : TIBSQL; CodigoAux : String; CodConAux : String; begin Result := ''; CodConAux := dmTablaPresupuestos.DarContratoDelPresupuesto(CodigoPresupuesto); if not EsCadenaVacia(CodConAux) then begin VerMensaje('Este presupuesto ya tiene contrato (%s)'); Exit; end; CodigoAux := dmTablaContratos.DarNuevoCodigo; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; with SQL do begin Add(' INSERT INTO CONTRATOSCLIENTE ( '); Add(' CODIGO, FECHAALTA, '); Add(' USUARIO, CODIGODOCUMENTO, '); Add(' FECHACONTRATO, SITUACION, '); Add(' CODIGOCLIENTE, NIFCIF, '); Add(' NOMBRE, CALLE, NUMERO, '); Add(' PISO, CODIGOPOSTAL, '); Add(' POBLACION, PROVINCIA, '); Add(' TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, FAX, PERSONACONTACTO, '); Add(' BASEIMPONIBLE, DESCUENTO, '); Add(' IMPORTEDESCUENTO, '); Add(' IVA, IMPORTEIVA, '); Add(' IMPORTETOTAL, '); Add(' OBSERVACIONES, PLAZOENTREGA, '); Add(' FORMAPAGO) '); Add('select ''' + CodigoAux + ''', current_date,'); Add('''' + dmBaseDatos.Usuario + ''', CODIGODOCUMENTO,'); Add('current_date, ''PENDIENTE'','); Add('CODIGOCLIENTE,'); Add('NIFCIF, NOMBRE,'); Add('CALLE, NUMERO,'); Add('PISO, CODIGOPOSTAL,'); Add('POBLACION, PROVINCIA,'); Add('TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, FAX, PERSONACONTACTO, '); Add('BASEIMPONIBLE,'); Add('DESCUENTO, IMPORTEDESCUENTO,'); Add('IVA, IMPORTEIVA,'); Add('IMPORTETOTAL, OBSERVACIONES, PLAZOENTREGA, FORMAPAGO '); Add('from PRESUPUESTOSCLIENTE '); Add('where CODIGO = :CODIGO'); end; ParamByName('CODIGO').AsString := CodigoPresupuesto; end; oSQL2 := TIBSQL.Create(Self); with oSQL2 do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; with SQL do begin Add(' INSERT INTO DETALLESCONTRATOSARTICULOS ( '); Add(' CODIGOCONTRATO, '); Add(' NUMCONCEPTO, '); Add(' TIPOCONCEPTO, '); Add(' CODIGOARTICULO, '); Add(' REFERENCIA, '); Add(' DESCRIPCION, '); Add(' CANTIDAD, '); Add(' IMPORTEUNIDAD, '); Add(' IMPORTETOTAL, '); Add(' OBSERVACIONES) '); Add('select ''' + CodigoAux + ''', NUMCONCEPTO,'); Add('TIPOCONCEPTO, CODIGOARTICULO, REFERENCIA, '); Add('DESCRIPCION, CANTIDAD,'); Add('IMPORTEUNIDAD, IMPORTETOTAL, OBSERVACIONES '); Add('from DETALLESPRESUPUESTOSARTICULOS '); Add('where CODIGOPRESUPUESTO = :CODIGOPRESUPUESTO'); end; ParamByName('CODIGOPRESUPUESTO').AsString := CodigoPresupuesto; end; oSQL3 := TIBSQL.Create(Self); with oSQL3 do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('insert into DETALLESCONTRATOSPROPIEDADES ('); SQL.Add('CODIGOCONTRATO, NUMCONCEPTO, NUMPROPIEDAD, '); SQL.Add('CODIGOPROPIEDAD, VALOR) '); SQL.Add('select ''' + CodigoAux + ''', NUMCONCEPTO, '); SQL.Add('NUMPROPIEDAD, CODIGOPROPIEDAD, VALOR '); SQL.Add('from DETALLESPRESUPUESTOSPROPIEDADES '); SQL.Add('where CODIGOPRESUPUESTO = :CODIGOPRESUPUESTO'); ParamByName('CODIGOPRESUPUESTO').AsString := CodigoPresupuesto; end; try oSQL.Prepare; oSQL2.Prepare; oSQL3.Prepare; oSQL.ExecQuery; oSQL2.ExecQuery; oSQL3.ExecQuery; dmTablaContratos.IncrementarCodigo; if dmTablaPresupuestos.AsignarContrato(CodigoPresupuesto, CodigoAux) then Result := CodigoAux; finally oSQL.Close; oSQL.Transaction := NIL; oSQL.Free; oSQL2.Close; oSQL2.Transaction := NIL; oSQL2.Free; oSQL3.Close; oSQL3.Transaction := NIL; oSQL3.Free; end; end; function TdmTablaContratos.CopiarContrato(CodigoContrato: String): String; var oSQL : TIBSQL; oSQL2 : TIBSQL; oSQL3 : TIBSQL; CodigoAux : String; CodConAux : String; begin Result := ''; CodigoAux := DarNuevoCodigo; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; with SQL do begin Add(' INSERT INTO CONTRATOSCLIENTE ( '); Add(' CODIGO, FECHAALTA, '); Add(' USUARIO, CODIGODOCUMENTO, '); Add(' FECHACONTRATO, SITUACION, '); Add(' CODIGOCLIENTE, NIFCIF, '); Add(' NOMBRE, CALLE, NUMERO, '); Add(' PISO, CODIGOPOSTAL, '); Add(' POBLACION, PROVINCIA, '); Add(' TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, FAX, PERSONACONTACTO, '); Add(' BASEIMPONIBLE, DESCUENTO, '); Add(' IMPORTEDESCUENTO, '); Add(' IVA, IMPORTEIVA, '); Add(' IMPORTETOTAL, '); Add(' OBSERVACIONES, PLAZOENTREGA, '); Add(' FORMAPAGO) '); Add('SELECT ''' + CodigoAux + ''', current_date, '); Add('''' + dmBaseDatos.Usuario + ''', CODIGODOCUMENTO,'); Add('current_date, ''PENDIENTE'', '); Add('CODIGOCLIENTE, NIFCIF, NOMBRE,'); Add('CALLE, NUMERO, PISO, CODIGOPOSTAL,'); Add('POBLACION, PROVINCIA,'); Add('TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, FAX, PERSONACONTACTO, BASEIMPONIBLE, DESCUENTO, IMPORTEDESCUENTO,'); Add('IVA, IMPORTEIVA, IMPORTETOTAL, OBSERVACIONES, PLAZOENTREGA, '); Add('FORMAPAGO from CONTRATOSCLIENTE '); Add('where CODIGO = :CODIGO'); end; ParamByName('CODIGO').AsString := CodigoContrato; end; oSQL2 := TIBSQL.Create(Self); with oSQL2 do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; with SQL do begin Add(' INSERT INTO DETALLESCONTRATOSARTICULOS ( '); Add(' CODIGOCONTRATO, '); Add(' NUMCONCEPTO, '); Add(' TIPOCONCEPTO, '); Add(' CODIGOARTICULO, '); Add(' REFERENCIA, '); Add(' DESCRIPCION, '); Add(' CANTIDAD, '); Add(' IMPORTEUNIDAD, '); Add(' IMPORTETOTAL, '); Add(' OBSERVACIONES) '); Add('select ''' + CodigoAux + ''', NUMCONCEPTO,'); Add('TIPOCONCEPTO, CODIGOARTICULO, REFERENCIA, '); Add('DESCRIPCION, CANTIDAD,'); Add('IMPORTEUNIDAD, IMPORTETOTAL, OBSERVACIONES '); Add('from DETALLESCONTRATOSARTICULOS '); Add('where CODIGOCONTRATO = :CODIGOCONTRATO'); end; ParamByName('CODIGOCONTRATO').AsString := CodigoContrato; end; oSQL3 := TIBSQL.Create(Self); with oSQL3 do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('insert into DETALLESCONTRATOSPROPIEDADES ('); SQL.Add('CODIGOCONTRATO, NUMCONCEPTO, NUMPROPIEDAD, '); SQL.Add('CODIGOPROPIEDAD, VALOR) '); SQL.Add('select ''' + CodigoAux + ''', NUMCONCEPTO, '); SQL.Add('NUMPROPIEDAD, CODIGOPROPIEDAD, VALOR '); SQL.Add('from DETALLESCONTRATOSPROPIEDADES '); SQL.Add('where CODIGOCONTRATO = :CODIGOCONTRATO'); ParamByName('CODIGOCONTRATO').AsString := CodigoContrato; end; try oSQL.Prepare; oSQL2.Prepare; oSQL3.Prepare; oSQL.ExecQuery; oSQL2.ExecQuery; oSQL3.ExecQuery; IncrementarCodigo; Result := CodigoAux; finally oSQL.Close; oSQL.Transaction := NIL; oSQL.Free; oSQL2.Close; oSQL2.Transaction := NIL; oSQL2.Free; oSQL3.Close; oSQL3.Transaction := NIL; oSQL3.Free; end; end; function TdmTablaContratos.DarSituaciones: TStrings; var Lista : TStringList; begin Result := NIL; Lista := TStringList.Create; with Lista do begin Clear; Append('PENDIENTE'); Append('TERMINADO'); end; Result := Lista; end; function TdmTablaContratos.DarListaAnos: TStrings; var oSQL : TIBSQL; Lista : TStringList; begin Result := NIL; oSQL := TIBSQL.Create(Self); Lista := TStringList.Create; with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select distinct(extract(year from FECHACONTRATO)) as ANO '); SQL.Add('from CONTRATOSCLIENTE '); SQL.Add('order by FECHACONTRATO'); 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; procedure TdmTablaContratos.InicializarGridBeneficios(var Grid: TcxGrid); var Columna : TcxGridDBColumn; begin with (Grid.ActiveView as TcxGridDBTableView) do begin // OptionsView.Footer := True; {Columna CODIGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGO'; Columna.Caption := 'Código'; 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 Contratos'; Kind := skCount; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna FECHACONTRATO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FECHACONTRATO'; Columna.Caption := 'Fecha'; Columna.Width := tamColFecha; Columna.Options.Filtering := False; {Columna NIFCIF} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NIFCIF'; Columna.Caption := 'Nif/Cif'; Columna.Width := tamColNombre; Columna.Options.Filtering := False; Columna.Visible := False; {Columna NOMBRE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre'; Columna.Width := tamColNombre; Columna.Options.Filtering := False; {Columna IMPORTETOTAL} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTETOTAL'; Columna.Caption := 'Imp. contrato'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; {Columna IMPCLI} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPCLI'; Columna.Caption := 'Cobros cli.'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; {Columna IMPPROV} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPPROV'; Columna.Caption := 'Gastos prov.'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; {Columna IMPOTROS} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPOTROS'; Columna.Caption := 'Otros gastos'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; {Columna BENEFICIO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'BENEFICIO'; Columna.Caption := 'Beneficio'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '0 Beneficio total'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna PORCENTAJE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'PORCENTAJE'; Columna.Caption := 'Porcentaje'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '0 % Beneficio total'; Kind := skAverage; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; end; end; procedure TdmTablaContratos.InicializarTablaBeneficios(Tabla: TPTabla); begin with Tabla^.Fields do begin if FindField('IMPORTETOTAL') <> NIL then with (FieldByName('IMPORTETOTAL') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('IMPPROV') <> NIL then with (FieldByName('IMPPROV') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('IMPOTROS') <> NIL then with (FieldByName('IMPOTROS') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('IMPCLI') <> NIL then with (FieldByName('IMPCLI') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('BENEFICIO') <> NIL then with (FieldByName('BENEFICIO') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := DISPLAY_EUROS2; end; if FindField('PORCENTAJE') <> NIL then with (FieldByName('PORCENTAJE') as TIBBCDField) do begin DisplayFormat := DISPLAY_CTO; EditFormat := DISPLAY_CTO; end; end; end; function TdmTablaContratos.ExistenContratos: Boolean; var oSQL : TIBSQL; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select count(*) '); SQL.Add('from CONTRATOSCLIENTE '); try Prepare; ExecQuery; Result := (Fields[0].AsInteger <> 0); finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaContratos.DarRutaPlanos(CodigoContrato: String): String; var oSQL : TIBSQL; CodigoAux : String; begin Result := ''; if EsCadenaVacia(CodigoContrato) then Exit; oSQL := TIBSQL.Create(nil); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('SELECT CODIGO '); SQL.Add('FROM PRESUPUESTOSCLIENTE '); SQL.Add('WHERE CODIGOCONTRATO = :CODIGOCONTRATO '); try ParamByName('CODIGOCONTRATO').AsString := CodigoContrato; Prepare; ExecQuery; if (RecordCount > 0) then CodigoAux := FieldByName('CODIGO').AsString else CodigoAux := CodigoContrato; Result := PathDelim + StringReplace(CodigoAux,'/','',[rfReplaceAll]); finally Close; Transaction := NIL; Free; end; end; end; { TListaDetallesContrato } procedure TListaDetallesContrato.AssignTo(Dest: TPersistent); begin if not (Dest is TDatosDetalleContrato) then AssignError(Dest); { (Dest as TDatosDetallePresupusto).Codigo := Codigo; (Dest as TDatosDetallePresupusto).Descripcion := Descripcion; (Dest as TDatosDetallePresupusto).Familia := Familia; (Dest as TDatosDetallePresupusto).ListaPropiedades.Assign(ListaPropiedades);} end; constructor TListaDetallesContrato.Create(CodigoContrato: String); begin end; constructor TListaDetallesContrato.Create; begin inherited; end; function TListaDetallesContrato.GetDetalleContrato( Index: Integer): TDatosDetalleContrato; begin end; procedure TListaDetallesContrato.ObtenerLista; var oSQL1 : TIBSQL; oSQL2 : TIBSQL; Detalle : TDatosDetalleContrato; Propiedad : TDatosPropiedad; begin oSQL1 := TIBSQL.Create(nil); oSQL2 := TIBSQL.Create(nil); with oSQL1 do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select * from DETALLESCONTRATOSARTICULOS'); SQL.Add('where CODIGOCONTRATO = :CODIGOCONTRATO'); SQL.Add('order by NUMCONCEPTO'); ParamByName('CODIGOCONTRATO').AsString := FCodigoContrato; end; with oSQL2 do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select * from DETALLESCONTRATOSPROPIEDADES'); SQL.Add('where CODIGOCONTRATO = :CODIGOCONTRATO'); SQL.Add('order by NUMCONCEPTO'); ParamByName('CODIGOCONTRATO').AsString := FCodigoContrato; end; try oSQL1.Prepare; oSQL1.ExecQuery; oSQL2.Prepare; oSQL2.ExecQuery; while not oSQL1.EOF do begin Detalle := TDatosDetalleContrato.Create; with Detalle do begin NumConcepto := oSQL1.FieldByName('NUMCONCEPTO').AsInteger; TipoConcepto := oSQL1.FieldByName('TIPOCONCEPTO').AsString; CodigoArticulo := oSQL1.FieldByName('CODIGOARTICULO').AsString; Referencia := oSQL1.FieldByName('REFERENCIA').AsString; Descripcion := oSQL1.FieldByName('DESCRIPCION').AsString; Cantidad := oSQL1.FieldByName('CANTIDAD').AsInteger; ImporteUnidad := oSQL1.FieldByName('IMPORTEUNIDAD').AsInteger; ImporteTotal := oSQL1.FieldByName('IMPORTETOTAL').AsInteger; end; while (not oSQL2.EOF) and (oSQL2.FieldByName('NUMCONCEPTO').AsInteger = Detalle.NumConcepto) do begin Propiedad := TDatosPropiedad.Create; with Propiedad do begin CodigoPropiedad := oSQL2.FieldByName('CODIGOPROPIEDAD').AsInteger; Valor := oSQL2.FieldByName('VALOR').AsString; end; Detalle.ListaPropiedades.Add(Propiedad); oSQL2.Next; end; FLista.Add(Detalle); oSQL1.Next; end; finally with oSQL1 do begin Close; Transaction := NIL; Free; end; with oSQL2 do begin Close; Transaction := NIL; Free; end; end; end; { TDatosDetalleContrato } procedure TDatosDetalleContrato.AssignTo(Dest: TPersistent); begin inherited; end; constructor TDatosDetalleContrato.Create; begin inherited; end; destructor TDatosDetalleContrato.Destroy; begin inherited; end; procedure TDatosDetalleContrato.ObtenerDatos; begin inherited; end; { TDatosContrato } procedure TDatosContrato.AssignTo(Dest: TPersistent); begin inherited; end; constructor TDatosContrato.Create(CodigoContrato: String); begin inherited Create; Codigo := CodigoContrato; ObtenerDatos; FListaDetallesContrato := TListaDetallesContrato.Create(Codigo); end; constructor TDatosContrato.Create; begin inherited Create; FListaDetallesContrato := TListaDetallesContrato.Create; end; destructor TDatosContrato.Destroy; begin FListaDetallesContrato.Free; FListaDetallesContrato := NIL; inherited; end; procedure TDatosContrato.ObtenerDatos; var oSQL : TIBSQL; begin if EsCadenaVacia(Codigo) then Exit; oSQL := TIBSQL.Create(nil); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select * from CONTRATOSCLIENTE '); SQL.Add('where CODIGO = :CODIGO'); try ParamByName('CODIGO').AsString := Codigo; Prepare; ExecQuery; if (RecordCount > 0) then begin FechaAlta := FieldByName('FECHAALTA').AsDateTime; Usuario := FieldByName('USUARIO').AsString; FechaContrato := FieldByName('FECHACONTRATO').AsDateTime; CodigoDocumento := FieldByName('CODIGODOCUMENTO').AsString; Situacion := FieldByName('SITUACION').AsString; CodigoCliente := FieldByName('CODIGOCLIENTE').AsString; NIFCIF := FieldByName('NIFCIF').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; PersonaContacto := FieldByName('PERSONACONTACTO').AsString; Observaciones := FieldByName('OBSERVACIONES').AsString; BaseImponible := FieldByName('BASEIMPONIBLE').AsDouble; Descuento := FieldByName('DESCUENTO').AsInteger; ImporteDescuento := FieldByName('IMPORTEDESCUENTO').AsDouble; Iva := FieldByName('IVA').AsInteger; ImporteIva := FieldByName('IMPORTEIVA').AsDouble; ImporteTotal := FieldByName('IMPORTETOTAL').AsDouble; PlazoEntrega := FieldByName('PLAZOENTREGA').AsString; FormaPago := FieldByName('FORMAPAGO').AsString; end else begin raise Exception.CreateFmt(msgCliNoExistePre, [Codigo]); end; finally Close; Transaction := NIL; Free; end; end; end; { TListaPropiedadesContrato } procedure TListaPropiedadesContrato.AssignTo(Dest: TPersistent); begin inherited; end; constructor TListaPropiedadesContrato.Create(CodigoArticulo: String); begin end; constructor TListaPropiedadesContrato.Create; begin inherited; end; function TListaPropiedadesContrato.GetPropiedad( Index: Integer): TDatosPropiedad; begin end; procedure TListaPropiedadesContrato.ObtenerLista; begin inherited; end; end.