{ =============================================================================== 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 Obra; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, RdxFrameInformeTrimestral, Grids, DBGrids, ComCtrls, RdxBotones, ToolWin, ExtCtrls, Menus, RXDBCtrl, Configuracion, RdxFrame, Db, RdxPaneles, RdxBarras, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxEdit, cxDBData, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, am2000menuitem, am2000popupmenu, am2000, cxContainer, cxTextEdit, cxMaskEdit, cxDropDownEdit, StdCtrls, ActnList, StrUtils, Entidades, InformeTrimestralVentas, InformeTrimestralCompras, vistaPrevia, RdxTitulos, ImgList, RdxFrameObras, IBCustomDataSet, RxMemDS, InformeListadoPedidosObra, InformeListadoTareasObra, RdxEmpresaActiva, am2000utils, cxDataStorage, cxTL, cxInplaceContainer, cxTLData, cxDBTL, cxCalendar, cxDBEdit, cxMemo, cxButtonEdit, AdvPanel, cxCheckBox, cxCurrencyEdit; type TfrObra = class(TRdxFrameObras) dsObras: TDataSource; Acciones: TActionList; actAnadirInstalador: TAction; actAceptar: TAction; brSalir: TRdxBarraInferior; bSalir: TRdxBoton; actCancelar: TAction; brDoble: TRdxBarraInferior; bGuardar: TRdxBoton; bCancelar: TRdxBoton; actEliminarInstalador: TAction; actAnadirGasto: TAction; actEliminarGasto: TAction; dsObrasInstaladores: TDataSource; dsObrasGastos: TDataSource; actEliminarTodoIns: TAction; actEliminarTodoGas: TAction; dsObrasPedidos: TDataSource; actAnadirPedido: TAction; dsTareasObras: TDataSource; actEliminarPedido: TAction; actAnadirTareaObra: TAction; actEliminarTareaObra: TAction; actEliminarTodoTareaObra: TAction; actSalir: TAction; pnlCuerpo: TRdxPanel; pnlTitulo: TRdxPanelTituloOperacion; pnlContenido: TRdxPanel; Splitter1: TSplitter; pnlDetalleOtro: TRdxPanel; pnlDatosOtro: TAdvPanel; Panel1: TPanel; pnlGridOtro: TPanel; gridTareasObras: TcxGrid; gridTareasObrasDBTableView1: TcxGridDBTableView; gridTareasObrasLevel1: TcxGridLevel; pnlBarraOtro: TPanel; bEliminarTareaObra: TRdxBoton; bAnadirTareaObra: TRdxBoton; bEliminarTodoTareaObra: TRdxBoton; pnlListaTrimestres: TRdxPanel; tlApartadosObra: TcxTreeList; ColPanel: TcxTreeListColumn; ColDescripcion: TcxTreeListColumn; ColCodigoPedido: TcxTreeListColumn; ColEstadoPedido: TcxTreeListColumn; pnlDetallePedidosOtros: TRdxPanel; pnlVistaPrevia: TPanel; pnlDetalleObra: TRdxPanel; pnlObra: TRdxPanel; pnlDatosObra: TAdvPanel; eCodigo: TLabel; eNombre: TLabel; eProcedencia: TLabel; eNIFCIF: TLabel; eObservaciones: TLabel; eProvincia: TLabel; ePoblacion: TLabel; eNumero: TLabel; ePiso: TLabel; Nombre: TcxDBTextEdit; Calle: TcxDBTextEdit; Observaciones: TcxDBMemo; Provincia: TcxDBButtonEdit; Poblacion: TcxDBButtonEdit; Numero: TcxDBTextEdit; Piso: TcxDBTextEdit; FechaFin: TcxDBDateEdit; CodigoContrato: TcxDBTextEdit; pnlDatosContacto: TAdvPanel; eTelefono1: TLabel; eTelefono2: TLabel; Label2: TLabel; Label3: TLabel; eFax: TLabel; eCorreo: TLabel; Label1: TLabel; Telefono1: TcxDBTextEdit; Telefono2: TcxDBTextEdit; Movil1: TcxDBTextEdit; Movil2: TcxDBTextEdit; Fax: TcxDBTextEdit; PersonaContacto: TcxDBTextEdit; Correo: TcxDBTextEdit; pnlOtrosDatos: TAdvPanel; pnlInstaladores: TPanel; pnlBarraInstaladores: TPanel; bEliminar: TRdxBoton; bAnadir: TRdxBoton; bEliminarTodo: TRdxBoton; pnlGridInstaladores: TPanel; gridInstaladores: TcxGrid; gridInstaladoresDBTableView1: TcxGridDBTableView; gridInstaladoresLevel1: TcxGridLevel; pnlTituloInstaladores: TPanel; Label4: TLabel; pnlOtrosGastos: TPanel; pnlGridOtrosGastos: TPanel; gridOtrosGastos: TcxGrid; gridOtrosGastosDBTableView1: TcxGridDBTableView; gridOtrosGastosLevel1: TcxGridLevel; pnlBarraOtrosGastos: TPanel; RdxBoton1: TRdxBoton; RdxBoton2: TRdxBoton; RdxBoton3: TRdxBoton; pnlTituloOtrosGastos: TPanel; Label5: TLabel; pnlDetallePedido: TRdxScrollPanel; pnlDatosProveedor: TAdvPanel; Label9: TLabel; Label11: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; Label20: TLabel; eTelefono1Prov: TLabel; eTelefono2Prov: TLabel; eMovil1Prov: TLabel; eMovil2Prov: TLabel; eFaxProv: TLabel; eCorreoProv: TLabel; ePersonaContactoProv: TLabel; NombreProv: TcxDBButtonEdit; CodigoProv: TcxDBTextEdit; pnlFasesPedido: TAdvPanel; pnlFase1: TPanel; Label6: TLabel; Label8: TLabel; Label7: TLabel; eNum: TLabel; ObservacionesPed: TcxMemo; FechaPed: TcxDateEdit; cxPed: TcxCheckBox; pnlFase4: TPanel; Label10: TLabel; Label12: TLabel; Label13: TLabel; Label39: TLabel; cxTra: TcxCheckBox; FechaTra: TcxDateEdit; ObservacionesTra: TcxMemo; pnlFase3: TPanel; Label33: TLabel; Label34: TLabel; Label35: TLabel; Label36: TLabel; Label38: TLabel; ObservacionesEna: TcxMemo; FechaEnaIni: TcxDateEdit; cxEna: TcxCheckBox; FechaEnaFin: TcxDateEdit; pnlFase2: TPanel; Label14: TLabel; Label28: TLabel; Label29: TLabel; Label37: TLabel; ObservacionesCon: TcxMemo; FechaCon: TcxDateEdit; cxCon: TcxCheckBox; pnlFase5: TPanel; Label30: TLabel; Label31: TLabel; Label32: TLabel; Label40: TLabel; cxEnt: TcxCheckBox; FechaEnt: TcxDateEdit; ObservacionesEnt: TcxMemo; pnlDatosPedido: TAdvPanel; Label41: TLabel; Label48: TLabel; Label42: TLabel; DescripcionPed: TcxDBTextEdit; CodigoPed: TcxDBTextEdit; ReferenciaPed: TcxDBTextEdit; pnlExtra: TRdxBarraSuperior; RdxPanel1: TRdxPanel; bAnadirPedido: TRdxBoton; bEliminarPedido: TRdxBoton; DBGrid1: TDBGrid; DataSource1: TDataSource; //General procedure actAceptarExecute(Sender: TObject); procedure actCancelarExecute(Sender: TObject); procedure actSalirExecute(Sender: TObject); procedure tlApartadosObraFocusedNodeChanged(Sender: TObject; APrevFocusedNode, AFocusedNode: TcxTreeListNode); procedure ActivarInforme(Panel: Integer); //Obra, Instaladores, Gastos procedure actAnadirInstaladorExecute(Sender: TObject); procedure actAnadirGastoExecute(Sender: TObject); procedure actEliminarGastoExecute(Sender: TObject); procedure actEliminarInstaladorExecute(Sender: TObject); procedure actEliminarTodoGasExecute(Sender: TObject); procedure actEliminarTodoInsExecute(Sender: TObject); procedure ProvinciaPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure NombreProvPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure PoblacionPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); //Pedido procedure actAnadirPedidoExecute(Sender: TObject); procedure actEliminarPedidoExecute(Sender: TObject); procedure pnlFasesPedidoExit(Sender: TObject); procedure FechaEnaFinPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure FechaEnaIniPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); //Otras tareas obra procedure actAnadirTareaObraExecute(Sender: TObject); procedure actEliminarTareaObraExecute(Sender: TObject); procedure actEliminarTodoTareaObraExecute(Sender: TObject); procedure pnlOtrosDatosResize(Sender: TObject); procedure actEliminarTareaObraUpdate(Sender: TObject); procedure actEliminarTodoTareaObraUpdate(Sender: TObject); procedure NombreProvPropertiesChange(Sender: TObject); procedure DescripcionPedPropertiesChange(Sender: TObject); procedure gridTareasObrasDBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); private //Propiedades Obra FCodigoProvincia : Variant; FCodigoPoblacion : Variant; FCodigoInstalador: Variant; FContadorGastosAux: Integer; FTablaObrasInstaladores : TIBDataSet; FTablaObrasInstaladoresMem : TRxMemoryData; FTablaObrasGastos : TIBDataSet; FTablaObrasGastosMem : TRxMemoryData; //Propiedades Pedidos obra y sus fases FCodigoPedidoAux: Integer; FCodigoPedido: Variant; FCodigoProveedor: Variant; FTablaObrasPedidos : TIBDataSet; FTablaFases : TIBDataSet; FTablaFasesMem : TRxMemoryData; //Propiedades Otras tareas obra FTipoTarea: Variant; FContadorTareaObraAux: Integer; FTablaTareasObras : TIBDataSet; FTablaTareasObrasMem : TRxMemoryData; //Informes de resumen pedidos y otros FTablaInformePedidosMem : TRxMemoryData; FVistaPrevia : TfrVistaPrevia; FInformePedidos : TdmInformeListadoPedidosObra; FTablaInformeTareasMem : TRxMemoryData; FInformeOtros : TdmInformeListadoTareasObra; procedure crearTablaInfPedidos; procedure rellenarTablaInfPedidos; procedure crearTablaInfTareas; procedure rellenarTablaInfTareas; procedure crearInformes; procedure destruirInformes; procedure HabilitarPanelInforme; //Métodos General procedure RefrescarListaApartadosObra; procedure ActivarBarrasGrids; procedure DesactivarBarrasGrids; //Métodos Obra procedure HabilitarPanelObra; procedure crearTablasObra; procedure destruirTablasObra; procedure activarModoModificarTablasObra; procedure activarModoConsultarTablasObra; procedure CargarDatosInstaladores; procedure BorrarDatosInstaladoresIB; procedure SalvarDatosInstaladores; procedure CargarDatosGastos; procedure BorrarDatosGastosIB; procedure SalvarDatosGastos; procedure ProvinciaSetText(Sender: TField; const Text: String); procedure SetCodigoProvincia (Value : Variant); virtual; procedure SetCodigoPoblacion (Value : Variant); virtual; procedure SetCodigoInstalador(const Value: Variant); //Métodos Pedidos obra y sus fases procedure HabilitarPanelPedido; procedure crearTablasPedidos; procedure destruirTablasPedidos; procedure activarModoTablasPedidos; procedure BuscarPedidoObra; procedure CargarDatosFases; procedure RefrescarDatosProveedor; procedure InicializarFases; procedure RefrescarFases; procedure VolcarDatosFases; procedure BorrarDatosFasesIB; procedure SalvarDatosFases; procedure EliminarPedido; procedure SetCodigoProveedor(const Value: Variant); procedure SetCodigoPedido(const Value: Variant); procedure ActivarCamposPedido; procedure DesactivarCamposPedido; procedure refrescarNombrePedido; //Métodos Otras tareas obra procedure HabilitarPanelTareas; procedure crearTablasTareas; procedure destruirTablasTareas; procedure activarModoModificarTablasTareas; procedure activarModoConsultarTablasTareas; procedure CargarDatosTareasObras; procedure BorrarDatosTareasObrasIB; procedure SalvarDatosTareasObras; function existeInstaladorEnOtrasTareas: Boolean; procedure AplicarFiltroGridTareasObras; procedure SetTipoTarea(const Value: Variant); protected procedure ActivarModoModificar; override; procedure ActivarModoConsultar; override; procedure ActivarModoEliminar; override; function ModificarDatos : Boolean; override; function CancelarModificar : Boolean; override; function EliminarDatos : Boolean; override; function CancelarEliminar : Boolean; override; function ComprobarDatos : Boolean; override; procedure VerModal; override; procedure FreeContenido; override; procedure BuscarObra; override; function CloseFrame : Boolean; override; function TratarCambios : integer; override; public property CodigoProveedor : Variant read FCodigoProveedor write SetCodigoProveedor; property CodigoPedido : Variant read FCodigoPedido write SetCodigoPedido; property CodigoInstalador : Variant read FCodigoInstalador write SetCodigoInstalador; property CodigoProvincia : Variant read FCodigoProvincia write SetCodigoProvincia; property CodigoPoblacion : Variant read FCodigoPoblacion write SetCodigoPoblacion; property TablaObrasInstaladores : TIBDataSet read FTablaObrasInstaladores write FTablaObrasInstaladores; property TablaObrasInstaladoresMem : TRxMemoryData read FTablaObrasInstaladoresMem write FTablaObrasInstaladoresMem; property TablaObrasGastos : TIBDataSet read FTablaObrasGastos write FTablaObrasGastos; property TablaObrasGastosMem : TRxMemoryData read FTablaObrasGastosMem write FTablaObrasGastosMem; property TablaObrasPedidos : TIBDataSet read FTablaObrasPedidos write FTablaObrasPedidos; property TablaFases : TIBDataSet read FTablaFases write FTablaFases; property TablaFasesMem : TRxMemoryData read FTablaFasesMem write FTablaFasesMem; property TablaTareasObras : TIBDataSet read FTablaTareasObras write FTablaTareasObras; property TablaTareasObrasMem : TRxMemoryData read FTablaTareasObrasMem write FTablaTareasObrasMem; property TipoTarea : Variant read FTipoTarea write SetTipoTarea; constructor Create (AOwner : TComponent); override; destructor Destroy; override; published property TablaObras; property CodigoObra; end; var frObra: TfrObra; implementation {$R *.DFM} uses BaseDatos, TablaFacturasCliente, TablaFacturasProveedor, IBDatabase, FacturaCliente, Literales, Mensajes, Variants, ImprimirFacturasCliente, Constantes, cxVariants, AsignarTrimestre, FacturaProveedor, ImprimirInformeTrimestral, StrFunc, TablaEmpresas, TrimestrePredeterminado, TablaObrasPedidos, TablaObras, IB, IBErrorCodes, Excepciones, TablaProvincias, TablaPoblaciones, RdxFrameProvincias, Provincias, RdxFramePoblaciones, Poblaciones, TablaSucursalesCliente, TablaObrasInstaladores, TablaObrasGastos, Instaladores, RdxFrameInstaladores, TablaInstaladores, Proveedores, RdxFrameProveedores, TablaProveedores, TablaTareas, DateUtils, cxDBLookupComboBox; function GetDragSourceGridView(Source: TObject): TcxCustomGridView; begin if (TDragControlObject(Source).Control is TcxGridSite) then Result := TcxGridSite(TDragControlObject(Source).Control).GridView else Result := nil; end; constructor TfrObra.Create(AOwner: TComponent); begin inherited Create(AOwner); Entidad := entObraCliente; FCodigoProvincia := NULL; FCodigoPoblacion := NULL; BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; crearTablasObra; crearTablasPedidos; crearTablasTareas; crearInformes; end; destructor TfrObra.Destroy; begin destruirTablasObra; destruirTablasPedidos; destruirTablasTareas; destruirInformes; inherited; end; procedure TfrObra.actAnadirInstaladorExecute(Sender: TObject); begin ContenidoModal := TfrInstaladores.Create(Self); gridInstaladores.SetFocus; end; procedure TfrObra.actAceptarExecute(Sender: TObject); begin if (RealizarOperacion) then CloseFrame; end; procedure TfrObra.refrescarListaApartadosObra; var lista : TcxTreeListNode; listaAux : TcxTreeListNode; listaAux2 : TcxTreeListNode; ListaPedidos : TListaPedidos; i : integer; begin tlApartadosObra.Clear; //PanelObra lista := tlApartadosObra.Add; lista.Texts[CTE_COL_PANEL] := IntToStr(CTE_PNL_OBRA); lista.Texts[CTE_COL_DESCRIPCION] := litObrObra + CodigoObra; //PanelPedidos listaAux := lista.AddChild; listaAux.Texts[CTE_COL_PANEL] := IntToStr(CTE_PNL_PEDIDOS); listaAux.Texts[CTE_COL_DESCRIPCION] := litObrPedidos; //PanelPedido //Rellenamos los pedidos de la obra ListaPedidos := dmTablaObrasPedidos.darListaPedidos(CodigoObra); for i:=0 to ListaPedidos.Count-1 do begin listaAux2 := listaAux.AddChild; listaAux2.Texts[CTE_COL_PANEL] := IntToStr(CTE_PNL_PEDIDO); listaAux2.Texts[CTE_COL_DESCRIPCION] := ListaPedidos.Pedido[i].Descripcion + ' - ' + ListaPedidos.Pedido[i].NombreProv; listaAux2.Texts[CTE_COL_CODPEDIDO] := ListaPedidos.Pedido[i].Codigo; end; FCodigoPedidoAux := ListaPedidos.Count + 1; FreeAndNil(ListaPedidos); //PanelOtros listaAux := lista.AddChild; listaAux.Texts[CTE_COL_PANEL] := IntToStr(CTE_PNL_OTROS); listaAux.Texts[CTE_COL_DESCRIPCION] := litObrOtros; //PanelOtro listaAux2 := listaAux.AddChild; listaAux2.Texts[CTE_COL_PANEL] := IntToStr(CTE_PNL_OTRO); listaAux2.Texts[CTE_COL_DESCRIPCION] := litObrEntregas; listaAux2.Texts[CTE_COL_TIPO] := CTE_ENTREGA; listaAux2 := listaAux.AddChild; listaAux2.Texts[CTE_COL_PANEL] := IntToStr(CTE_PNL_OTRO); listaAux2.Texts[CTE_COL_DESCRIPCION] := litObrMontajes; listaAux2.Texts[CTE_COL_TIPO] := CTE_MONTAJE; listaAux2 := listaAux.AddChild; listaAux2.Texts[CTE_COL_PANEL] := IntToStr(CTE_PNL_OTRO); listaAux2.Texts[CTE_COL_DESCRIPCION] := litObrRemates; listaAux2.Texts[CTE_COL_TIPO] := CTE_REMATE; tlApartadosObra.FullExpand; tlApartadosObra.SetFocusedNode(lista,[]); end; procedure TfrObra.BuscarObra; begin RefrescarListaApartadosObra; end; procedure TfrObra.ActivarModoConsultar; begin dsObras.AutoEdit := False; dsObrasInstaladores.AutoEdit := False; dsObrasGastos.AutoEdit := False; dsObrasPedidos.AutoEdit := False; dsTareasObras.AutoEdit := False; actAnadirPedido.Enabled := False; actEliminarPedido.Enabled := False; Provincia.Properties.Buttons[0].Visible := False; Poblacion.Properties.Buttons[0].Visible := False; NombreProv.Properties.Buttons[0].Visible := False; DesactivarBarrasGrids; DesactivarCamposPedido; try activarModoConsultarTablasObra; activarModoTablasPedidos; activarModoConsultarTablasTareas; Visible := True; FechaFin.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrObra.ActivarModoModificar; begin dsObras.AutoEdit := True; dsObrasInstaladores.AutoEdit := True; dsObrasGastos.AutoEdit := True; dsObrasPedidos.AutoEdit := True; dsTareasObras.AutoEdit := True; actAnadirPedido.Enabled := True; actEliminarPedido.Enabled := True; // Para que no haga dos accesos a la tabla cuando es consulta FCodigoProvincia := dmTablaProvincias.DarCodigoProvincia(Provincia.Text); Provincia.Properties.Buttons[0].Visible := True; Poblacion.Properties.Buttons[0].Visible := True; NombreProv.Properties.Buttons[0].Visible := True; ActivarBarrasGrids; ActivarCamposPedido; try activarModoModificarTablasObra; activarModoTablasPedidos; activarModoModificarTablasTareas; Visible := True; FechaFin.SetFocus; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : begin VerMensajeFmt(msgObrObrBloqueado, [CodigoObra]); CancelarModificar; CloseFrame; Exit; end else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; function TfrObra.CancelarModificar: Boolean; begin Result := False; try RollBack; TablaObras.Close; TablaObrasInstaladores.Close; TablaObrasInstaladoresMem.Close; TablaObrasGastos.Close; TablaObrasGastosMem.Close; TablaObrasPedidos.Close; TablaFases.Close; TablaFasesMem.Close; TablaTareasObras.Close; TablaTareasObrasMem.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrObra.ComprobarDatos: Boolean; begin Result := True; end; function TfrObra.ModificarDatos: Boolean; begin Result := False; try if (TablaObras.State in [dsEdit, dsInsert]) then TablaObras.Post; if (TablaObrasPedidos.State in [dsEdit, dsInsert]) then TablaObrasPedidos.Post; BorrarDatosInstaladoresIB; SalvarDatosInstaladores; BorrarDatosGastosIB; SalvarDatosGastos; BorrarDatosFasesIB; SalvarDatosFases; BorrarDatosTareasObrasIB; SalvarDatosTareasObras; Commit; TablaObras.Close; TablaObrasInstaladores.Close; TablaObrasInstaladoresMem.Close; TablaObrasGastos.Close; TablaObrasGastosMem.Close; TablaObrasPedidos.Close; TablaFases.Close; TablaFasesMem.Close; TablaTareasObras.Close; TablaTareasObrasMem.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrObra.ProvinciaPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); begin CaptionModal := msgListaProvincias; WidthModal := 280; HeightModal := 460; ContenidoModal := TfrProvincias.Create(Self); end; procedure TfrObra.PoblacionPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); begin if (EsCadenaVacia(CodigoProvincia)) then begin VerMensaje(msgSinProvincia); Provincia.SetFocus; Exit; end; CaptionModal := Format(msgListaPoblaciones, [dmTablaProvincias.DarNombreProvincia(CodigoProvincia)]); WidthModal := 280; HeightModal := 460; ContenidoModal := TfrPoblaciones.Create(Self); end; procedure TfrObra.SetCodigoPoblacion(Value: Variant); begin if (not EsCadenaVacia(Value)) then begin FCodigoPoblacion := Value; Poblacion.DataBinding.Field.AsString := dmTablaPoblaciones.darNombrePoblacion(FCodigoProvincia, FCodigoPoblacion); end; end; procedure TfrObra.SetCodigoProvincia(Value: Variant); begin if (not EsCadenaVacia(Value)) then begin FCodigoProvincia := Value; Provincia.DataBinding.Field.AsString := dmTablaProvincias.DarNombreProvincia(FCodigoProvincia); end; end; procedure TfrObra.FreeContenido; begin if (ContenidoModal is TRdxFrameProveedores) then CodigoProveedor := (ContenidoModal as TRdxFrameProveedores).CodigoProveedor; if (ContenidoModal is TRdxFrameInstaladores) then CodigoInstalador := (ContenidoModal as TRdxFrameInstaladores).CodigoInstalador; if (ContenidoModal is TRdxFrameProvincias) then CodigoProvincia := (ContenidoModal as TRdxFrameProvincias).CodigoProvincia; if (ContenidoModal is TRdxFramePoblaciones) then begin CodigoProvincia := (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia; CodigoPoblacion := (ContenidoModal as TRdxFramePoblaciones).CodigoPoblacion; end; inherited FreeContenido; end; procedure TfrObra.VerModal; begin if (ContenidoModal is TRdxFramePoblaciones) then (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia := FCodigoProvincia; inherited; end; procedure TfrObra.ProvinciaSetText(Sender: TField; const Text: String); begin FCodigoProvincia := dmTablaProvincias.darCodigoProvincia(Text); Sender.AsString := Text; end; procedure TfrObra.actCancelarExecute(Sender: TObject); begin if (TratarCambios = IDOK) then CloseFrame; end; procedure TfrObra.CargarDatosInstaladores; var iContador : Integer; begin with TablaObrasInstaladoresMem do begin if TablaObrasInstaladores.IsEmpty then exit; // Localizar la fila donde está la dirección principal DisableControls; TablaObrasInstaladores.First; while not TablaObrasInstaladores.EOF do begin Append; for iContador := 0 to TablaObrasInstaladores.FieldCount-1 do Fields[iContador].Value := TablaObrasInstaladores.Fields[iContador].Value; Post; TablaObrasInstaladores.Next; end; First; EnableControls; end; end; procedure TfrObra.CargarDatosGastos; var iContador : Integer; begin with TablaObrasGastosMem do begin if TablaObrasGastos.IsEmpty then exit; // Localizar la fila donde está la dirección principal DisableControls; TablaObrasGastos.First; while not TablaObrasGastos.EOF do begin Append; for iContador := 0 to TablaObrasGastos.FieldCount-1 do Fields[iContador].Value := TablaObrasGastos.Fields[iContador].Value; Post; TablaObrasGastos.Next; end; First; EnableControls; end; end; procedure TfrObra.actAnadirGastoExecute(Sender: TObject); begin try with TablaObrasGastosMem do begin Next; if EOF then Append else begin Prior; Insert; end; TablaObrasGastosMem.FieldByName('CODIGOCONTRATO').AsString := CodigoObra; TablaObrasGastosMem.FieldByName('CODIGO').AsInteger := FContadorGastosAux; TablaObrasGastosMem.FieldByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha; TablaObrasGastosMem.FieldByName('USUARIO').AsString := dmBaseDatos.Usuario; TablaObrasGastosMem.FieldByName('FECHA').AsDateTime := dmBaseDatos.DarFecha; Inc(FContadorGastosAux); end; gridOtrosGastos.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrObra.actEliminarGastoExecute(Sender: TObject); begin if verMensajePregunta(msgObrEliminarDetalles) = mrYes then begin if TablaObrasGastos.RecordCount = 0 then begin { Hacemos un cancel de la tabla por si el registro actual estuviera recien creado } TablaObrasGastosMem.Cancel; Exit end; try TablaObrasGastosMem.Delete; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; end; procedure TfrObra.BorrarDatosGastosIB; begin with TablaObrasGastos do begin if IsEmpty then Exit; Last; while not BOF do begin Delete; Prior; end; if not IsEmpty then Delete; end; end; procedure TfrObra.SalvarDatosGastos; var NumeroCampo : Integer; Valor : Variant; Contador : Integer; begin try with TablaObrasGastosMem do begin if IsEmpty then Exit; DisableControls; First; TablaObrasGastos.First; Contador := 0; while not EOF do begin TablaObrasGastos.Insert; for NumeroCampo := 0 to FieldCount-1 do begin Valor := Fields[NumeroCampo].AsVariant; if (TablaObrasGastos.Fields[NumeroCampo].FieldName = 'CODIGO') then Valor := Contador; TablaObrasGastos.Fields[NumeroCampo].AsVariant := Valor; end; TablaObrasGastos.Post; Inc(Contador); Next; end; EnableControls; end; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrObra.SetCodigoInstalador(const Value: Variant); var DatosInstalador : TDatosInstalador; begin if (EsCadenaVacia(Value)) then Exit; FCodigoInstalador := Value; if not TablaObrasInstaladoresMem.Locate('CODIGOINSTALADOR', FCodigoInstalador,[]) then begin DatosInstalador := TDatosInstalador.Create; DatosInstalador.Codigo := FCodigoInstalador; dmTablaInstaladores.DarDatosInstalador(DatosInstalador); with TablaObrasInstaladoresMem do begin Append; FieldByName('CODIGOCONTRATO').AsString := CodigoObra; FieldByName('CODIGOINSTALADOR').AsString := FCodigoInstalador; FieldByName('NOMBRE').AsString := DatosInstalador.Nombre; FieldByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha; FieldByName('USUARIO').AsString := dmBaseDatos.Usuario; Post; gridInstaladores.Refresh; end; FreeAndNil(DatosInstalador); end else verMensajeFmt(msgObrInsRepetido,[FCodigoInstalador]); end; procedure TfrObra.actEliminarInstaladorExecute(Sender: TObject); begin if verMensajePregunta(msgObrEliminarDetalles) = mrYes then begin //Comprobamos si el instalador a eliminar tiene asociado algún entrega, montaje o remate if existeInstaladorEnOtrasTareas then begin VerMensaje(msgObrInsConOtrasTareas1); exit; end; if TablaObrasInstaladores.RecordCount = 0 then begin { Hacemos un cancel de la tabla por si el registro actual estuviera recien creado } TablaObrasInstaladoresMem.Cancel; Exit end; try TablaObrasInstaladoresMem.Delete; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; end; procedure TfrObra.actEliminarTodoGasExecute(Sender: TObject); begin if verMensajePregunta(msgObrEliminarTodosDetalles) = mrYes then begin TablaObrasGastosMem.EmptyTable; end; end; procedure TfrObra.actEliminarTodoInsExecute(Sender: TObject); begin if verMensajePregunta(msgObrEliminarTodosDetalles) = mrYes then begin with TablaObrasInstaladoresMem do begin if IsEmpty then Exit; Last; while not BOF do begin //Comprobamos si el instalador a eliminar tiene asociado algún entrega, montaje o remate if not existeInstaladorEnOtrasTareas then Delete; Prior; end; if not IsEmpty then //Comprobamos si el instalador a eliminar tiene asociado algún entrega, montaje o remate if not existeInstaladorEnOtrasTareas then Delete; end; if not TablaObrasInstaladoresMem.IsEmpty then VerMensaje(msgObrInsConOtrasTareas2); end; end; procedure TfrObra.tlApartadosObraFocusedNodeChanged(Sender: TObject; APrevFocusedNode, AFocusedNode: TcxTreeListNode); begin if AFocusedNode = nil then exit; case StrToInt(AFocusedNode.Texts[0]) of //PanelObra CTE_PNL_OBRA: begin HabilitarPanelObra; end; //PanelPedidos CTE_PNL_PEDIDOS: begin HabilitarPanelInforme; rellenarTablaInfPedidos; FInformePedidos.CodigoObra := CodigoObra; FInformePedidos.NombreObra := TablaObras.FieldByName('NOMBRE').AsString; FInformePedidos.setDatos(FTablaInformePedidosMem); FInformePedidos.Previsualizar; end; //PanelPedido CTE_PNL_PEDIDO: begin HabilitarPanelPedido; CodigoPedido := AFocusedNode.Texts[CTE_COL_CODPEDIDO]; end; //PanelOtros CTE_PNL_OTROS: begin HabilitarPanelInforme; rellenarTablaInfTareas; FInformeOtros.CodigoObra := CodigoObra; FInformeOtros.NombreObra := TablaObras.FieldByName('NOMBRE').AsString; FInformeOtros.setDatos(FTablaInformeTareasMem); FInformeOtros.Previsualizar; end; //PanelOtro CTE_PNL_OTRO: begin HabilitarPanelTareas; TipoTarea := AFocusedNode.Texts[CTE_COL_TIPO]; end; else showmessage('Error: No existe panel'); end; end; procedure TfrObra.BorrarDatosInstaladoresIB; begin with TablaObrasInstaladores do begin if IsEmpty then Exit; Last; while not BOF do begin Delete; Prior; end; if not IsEmpty then Delete; end; end; procedure TfrObra.SalvarDatosInstaladores; var NumeroCampo : Integer; Valor : Variant; begin try with TablaObrasInstaladoresMem do begin if IsEmpty then Exit; DisableControls; First; TablaObrasInstaladores.First; while not EOF do begin TablaObrasInstaladores.Insert; for NumeroCampo := 0 to FieldCount-1 do begin Valor := Fields[NumeroCampo].AsVariant; TablaObrasInstaladores.Fields[NumeroCampo].AsVariant := Valor; end; TablaObrasInstaladores.Post; Next; end; EnableControls; end; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrObra.actAnadirPedidoExecute(Sender: TObject); var Nodo : TcxTreeListNode; begin //Pedidos Nodo := tlApartadosObra.FindNodeByText(IntToStr(CTE_PNL_PEDIDOS), tlApartadosObra.Columns[0]); Nodo := Nodo.AddChild; Nodo.Texts[CTE_COL_PANEL] := IntToStr(CTE_PNL_PEDIDO); Nodo.Texts[CTE_COL_DESCRIPCION] := 'Nuevo pedido' + '- '; Nodo.Texts[CTE_COL_CODPEDIDO] := IntToStr(FCodigoPedidoAux); Inc(FCodigoPedidoAux); tlApartadosObra.Refresh; Nodo.Focused := True; CodigoPedido := Nodo.Texts[CTE_COL_CODPEDIDO]; end; procedure TfrObra.SetCodigoPedido(const Value: Variant); begin if (EsCadenaVacia(Value)) then Exit; if (FCodigoPedido <> Value) then begin FCodigoPedido := Value; BuscarPedidoObra; end; end; procedure TfrObra.NombreProvPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); begin ContenidoModal := TfrProveedores.Create(Self); end; procedure TfrObra.SetCodigoProveedor(const Value: Variant); var DatosProveedor : TDatosProveedor; begin if (EsCadenaVacia(Value)) then Exit; if (FCodigoProveedor <> Value) then begin FCodigoProveedor := Value; DatosProveedor := TDatosProveedor.Create(FCodigoProveedor); with TablaObrasPedidos do begin if not (State in [dsEdit, dsInsert]) then Edit; FieldByName('CODIGOPROV').AsString := DatosProveedor.Codigo; FieldByName('NOMBREPROV').AsString := DatosProveedor.Nombre; FieldByName('TELEFONO1').AsString := DatosProveedor.Telefono1; FieldByName('TELEFONO2').AsString := DatosProveedor.Telefono2; FieldByName('MOVIL1').AsString := DatosProveedor.Movil1; FieldByName('MOVIL2').AsString := DatosProveedor.Movil2; FieldByName('FAX').AsString := DatosProveedor.Fax; FieldByName('CORREO').AsString := DatosProveedor.Correo; FieldByName('PERSONACONTACTO').AsString := DatosProveedor.PersonaContacto; RefrescarDatosProveedor; end; FreeAndNil(DatosProveedor); end; end; procedure TfrObra.BuscarPedidoObra; begin if not TablaObrasPedidos.Locate('CODIGO', FCodigoPedido, []) then begin //En el caso de no encontrarse el codigo de pedido es porque es nuevo y añadimos los datos base TablaObrasPedidos.Insert; TablaObrasPedidos.FieldByName('CODIGOCONTRATO').AsString := CodigoObra; TablaObrasPedidos.FieldByName('CODIGO').AsString := FCodigoPedido; TablaObrasPedidos.FieldByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha; TablaObrasPedidos.FieldByName('USUARIO').AsString := dmBaseDatos.Usuario; TablaObrasPedidos.FieldByName('DESCRIPCION').AsString := 'Nuevo pedido'; //Insertamos en la tabla de memoria las fases correspondientes al nuevo pedido InicializarFases; DescripcionPed.SetFocus; end; //En caso de cambiar de pedido se refrescan los datos de proveedor y de las fases correspondientes RefrescarDatosProveedor; RefrescarFases; end; procedure TfrObra.RefrescarDatosProveedor; begin eTelefono1Prov.Caption := TablaObrasPedidos.FieldByName('TELEFONO1').AsString; eTelefono2Prov.Caption := TablaObrasPedidos.FieldByName('TELEFONO2').AsString; eMovil1Prov.Caption := TablaObrasPedidos.FieldByName('MOVIL1').AsString; eMovil2Prov.Caption := TablaObrasPedidos.FieldByName('MOVIL2').AsString; eFaxProv.Caption := TablaObrasPedidos.FieldByName('FAX').AsString; eCorreoProv.Caption := TablaObrasPedidos.FieldByName('CORREO').AsString; ePersonaContactoProv.Caption := TablaObrasPedidos.FieldByName('PERSONACONTACTO').AsString; end; procedure TfrObra.RefrescarFases; begin with TablaFasesMem do begin First; Locate('CODIGOPEDIDO', CodigoPedido, []); if (FieldByName('COMPLETADA').AsInteger = CTE_TRUE) then cxPed.Checked := True else cxPed.Checked := False; if FieldByName('FECHAINI').AsVariant = Null then FechaPed.Text := '' else FechaPed.Date := FieldByName('FECHAINI').AsDateTime; ObservacionesPed.Text := FieldByName('OBSERVACIONES').AsString; Next; if (FieldByName('COMPLETADA').AsInteger = CTE_TRUE) then cxCon.Checked := True else cxCon.Checked := False; if FieldByName('FECHAINI').AsVariant = Null then FechaCon.Text := '' else FechaCon.Date := FieldByName('FECHAINI').AsDateTime; ObservacionesCon.Text := FieldByName('OBSERVACIONES').AsString; Next; if (FieldByName('COMPLETADA').AsInteger = CTE_TRUE) then cxEna.Checked := True else cxEna.Checked := False; if FieldByName('FECHAINI').AsVariant = Null then FechaEnaIni.Text := '' else FechaEnaIni.Date := FieldByName('FECHAINI').AsDateTime; if FieldByName('FECHAFIN').AsVariant = Null then FechaEnaFin.Text := '' else FechaEnaFin.Date := FieldByName('FECHAFIN').AsDateTime; ObservacionesEna.Text := FieldByName('OBSERVACIONES').AsString; Next; if (FieldByName('COMPLETADA').AsInteger = CTE_TRUE) then cxTra.Checked := True else cxTra.Checked := False; if FieldByName('FECHAINI').AsVariant = Null then FechaTra.Text := '' else FechaTra.Date := FieldByName('FECHAINI').AsDateTime; ObservacionesTra.Text := FieldByName('OBSERVACIONES').AsString; Next; if (FieldByName('COMPLETADA').AsInteger = CTE_TRUE) then cxEnt.Checked := True else cxEnt.Checked := False; if FieldByName('FECHAINI').AsVariant = Null then FechaEnt.Text := '' else FechaEnt.Date := FieldByName('FECHAINI').AsDateTime; ObservacionesEnt.Text := FieldByName('OBSERVACIONES').AsString; end; end; procedure TfrObra.InicializarFases; begin dmTablaTareas.rellenarTareasFase(TablaFasesMem, CodigoPedido); TablaFasesMem.Post; end; procedure TfrObra.CargarDatosFases; var iContador : Integer; begin with TablaFasesMem do begin if TablaFases.IsEmpty then exit; DisableControls; TablaFases.First; while not TablaFases.EOF do begin Append; for iContador := 0 to TablaFases.FieldCount-1 do Fields[iContador].Value := TablaFases.Fields[iContador].Value; Post; TablaFases.Next; end; First; EnableControls; end; end; procedure TfrObra.pnlFasesPedidoExit(Sender: TObject); begin VolcarDatosFases; end; procedure TfrObra.FechaEnaFinPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin FechaEnaIni.Date := IncDay(FechaEnaFin.Date,-7); end; procedure TfrObra.FechaEnaIniPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin FechaEnaFin.Date := IncDay(FechaEnaIni.Date,7); end; procedure TfrObra.VolcarDatosFases; begin //Salvamos los cambios realizados en tabla de memoria with TablaFasesMem do begin First; Locate('CODIGOPEDIDO', CodigoPedido, []); //Fase 1.Pedido Edit; if cxPed.Checked then FieldByName('COMPLETADA').AsInteger := CTE_TRUE else FieldByName('COMPLETADA').AsInteger := CTE_FALSE; if FechaPed.Text = '' then FieldByName('FECHAINI').AsVariant := Null else FieldByName('FECHAINI').AsDateTime := FechaPed.Date; FieldByName('OBSERVACIONES').AsString := ObservacionesPed.Text; FieldByName('FECHAFIN').AsString := FieldByName('FECHAINI').AsString; FieldByName('HORAINI').AsString := CTE_HORAINI; FieldByName('HORAFIN').AsString := CTE_HORAFIN; Post; //Fase 2.Confirmado Next; Edit; if cxCon.Checked then FieldByName('COMPLETADA').AsInteger := CTE_TRUE else FieldByName('COMPLETADA').AsInteger := CTE_FALSE; if FechaCon.Text = '' then FieldByName('FECHAINI').AsVariant := Null else FieldByName('FECHAINI').AsDateTime := FechaCon.Date; FieldByName('OBSERVACIONES').AsString := ObservacionesCon.Text; FieldByName('FECHAFIN').AsString := FieldByName('FECHAINI').AsString; FieldByName('HORAINI').AsString := CTE_HORAINI; FieldByName('HORAFIN').AsString := CTE_HORAFIN; Post; //Fase 3.En almacen Next; Edit; if cxEna.Checked then FieldByName('COMPLETADA').AsInteger := CTE_TRUE else FieldByName('COMPLETADA').AsInteger := CTE_FALSE; if FechaEnaIni.Text = '' then FieldByName('FECHAINI').AsVariant := Null else FieldByName('FECHAINI').AsDateTime := FechaEnaIni.Date; if FechaEnaFin.Text = '' then FieldByName('FECHAFIN').AsVariant := Null else FieldByName('FECHAFIN').AsDateTime := FechaEnaFin.Date; FieldByName('OBSERVACIONES').AsString := ObservacionesEna.Text; FieldByName('HORAINI').AsString := CTE_HORAINI; FieldByName('HORAFIN').AsString := CTE_HORAFIN; Post; //Fase 4.Aviso Trans. Next; Edit; if cxTra.Checked then FieldByName('COMPLETADA').AsInteger := CTE_TRUE else FieldByName('COMPLETADA').AsInteger := CTE_FALSE; if FechaTra.Text = '' then FieldByName('FECHAINI').AsVariant := Null else FieldByName('FECHAINI').AsDateTime := FechaTra.Date; FieldByName('OBSERVACIONES').AsString := ObservacionesTra.Text; FieldByName('FECHAFIN').AsString := FieldByName('FECHAINI').AsString; FieldByName('HORAINI').AsString := CTE_HORAINI; FieldByName('HORAFIN').AsString := CTE_HORAFIN; Post; //Fase 4.Entregado. Next; Edit; if cxEnt.Checked then FieldByName('COMPLETADA').AsInteger := CTE_TRUE else FieldByName('COMPLETADA').AsInteger := CTE_FALSE; if FechaEnt.Text = '' then FieldByName('FECHAINI').AsVariant := Null else FieldByName('FECHAINI').AsDateTime := FechaEnt.Date; FieldByName('OBSERVACIONES').AsString := ObservacionesEnt.Text; FieldByName('FECHAFIN').AsString := FieldByName('FECHAINI').AsString; FieldByName('HORAINI').AsString := CTE_HORAINI; FieldByName('HORAFIN').AsString := CTE_HORAFIN; Post; end; end; procedure TfrObra.BorrarDatosFasesIB; begin dmTablaTareas.eliminarTareasPedidoObra(CodigoObra); with TablaFases do begin if IsEmpty then Exit; Last; while not BOF do begin Delete; Prior; end; if not IsEmpty then Delete; end; end; procedure TfrObra.SalvarDatosFases; var NumeroCampo : Integer; Valor : Variant; CodigoPedido : Variant; CodigoTarea : Variant; begin try with TablaFasesMem do begin if IsEmpty then Exit; DisableControls; First; TablaFases.First; while not EOF do begin TablaFases.Insert; for NumeroCampo := 0 to FieldCount-1 do begin Valor := Fields[NumeroCampo].AsVariant; if (TablaFases.Fields[NumeroCampo].FieldName = 'CODIGOPEDIDO') then begin CodigoPedido := Valor; Continue; end; if (TablaFases.Fields[NumeroCampo].FieldName = 'FECHAALTA') then Valor := dmBaseDatos.DarFecha; if (TablaFases.Fields[NumeroCampo].FieldName = 'USUARIOALTA') or (TablaFases.Fields[NumeroCampo].FieldName = 'USUARIO') then Valor := dmBaseDatos.Usuario; if (TablaFases.Fields[NumeroCampo].FieldName = 'CODIGO') then begin if Valor < 10 then begin Valor := dmTablaTareas.darNuevoCodigo; dmTablaTareas.IncrementarCodigo; end; CodigoTarea := Valor; end; TablaFases.Fields[NumeroCampo].AsVariant := Valor; end; TablaFases.Post; dmTablaTareas.insertarTareaPedidoObra(CodigoObra, CodigoPedido, CodigoTarea); Next; end; EnableControls; end; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrObra.actEliminarPedidoExecute(Sender: TObject); var Nodo : TcxTreeListNode; begin Nodo := tlApartadosObra.FocusedNode; if (StrToInt(Nodo.Texts[CTE_COL_PANEL]) = CTE_PNL_PEDIDO) then begin if VerMensajePreguntaFmt(msgObrPrePedBorrar, [Nodo.Texts[CTE_COL_DESCRIPCION]]) = mrYES then begin EliminarPedido; RefrescarListaApartadosObra; end end else VerMensaje (msgObrPedSelec); end; procedure TfrObra.EliminarPedido; begin TablaObrasPedidos.Delete; //Eliminamos tambien todas las fases correspondientes en la tabla de memoria de tareas TablaFasesMem.First; TablaFasesMem.Locate('CODIGOPEDIDO', CodigoPedido, []); while (TablaFasesMem.FieldByName('CodigoPedido').AsString = CodigoPedido) do TablaFasesMem.Delete; end; procedure TfrObra.CargarDatosTareasObras; var iContador : Integer; begin with TablaTareasObrasMem do begin if TablaTareasObras.IsEmpty then exit; DisableControls; TablaTareasObras.First; while not TablaTareasObras.EOF do begin Append; for iContador := 0 to TablaTareasObras.FieldCount-1 do Fields[iContador].Value := TablaTareasObras.Fields[iContador].Value; Post; TablaTareasObras.Next; end; First; EnableControls; end; end; function TfrObra.existeInstaladorEnOtrasTareas: Boolean; begin TablaTareasObrasMem.First; Result := TablaTareasObrasMem.Locate('CODIGOINSTALADOR', TablaObrasInstaladoresMem.FieldByName('CODIGOINSTALADOR').AsString, []); end; procedure TfrObra.SetTipoTarea(const Value: Variant); begin if (EsCadenaVacia(Value)) then Exit; if (FTipoTarea <> Value) then begin FTipoTarea := Value; if FTipoTarea = CTE_ENTREGA then pnlDatosOtro.Caption.Text := litObrEntregas else if FTipoTarea = CTE_MONTAJE then pnlDatosOtro.Caption.Text := litObrMontajes else if FTipoTarea = CTE_REMATE then pnlDatosOtro.Caption.Text := litObrRemates else VerMensaje('Error: Tipo no existente'); AplicarFiltroGridTareasObras; end; end; procedure TfrObra.actAnadirTareaObraExecute(Sender: TObject); begin try with TablaTareasObrasMem do begin Next; if EOF then Append else begin Prior; Insert; end; FieldByName('CODIGO').AsInteger := FContadorTareaObraAux; FieldByName('TIPO').AsString := FTipoTarea; FieldByName('COMPLETADA').AsInteger := 0; FieldByName('CODIGOINSTALADOR').AsString := TablaObrasInstaladoresMem.FieldByName('CODIGOINSTALADOR').AsString; FieldByName('FECHAINI').AsDateTime := dmBaseDatos.DarFecha; FieldByName('DESCRIPCION').AsString := FTipoTarea; Inc(FContadorTareaObraAux); end; gridTareasObrasDBTableView1.GetColumnByFieldName('DESCRIPCION').FocusWithSelection; gridTareasObras.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrObra.actEliminarTareaObraExecute(Sender: TObject); begin if verMensajePregunta(msgObrEliminarDetalles) = mrYes then begin if TablaTareasObrasMem.RecordCount = 0 then begin { Hacemos un cancel de la tabla por si el registro actual estuviera recien creado } TablaTareasObrasMem.Cancel; Exit end; try TablaTareasObrasMem.Delete; //Para que se posicione el el primer registro de la lista de tareas con el filtro determinado gridTareasObrasDBTableView1.DataController.GotoFirst; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; end; procedure TfrObra.actEliminarTodoTareaObraExecute(Sender: TObject); begin if verMensajePregunta(msgObrEliminarTodosDetalles) = mrYes then begin try TablaTareasObrasMem.First; while not TablaTareasObrasMem.EOF do begin if (TablaTareasObrasMem.FieldByName('TIPO').AsVariant = TipoTarea) then TablaTareasObrasMem.Delete else TablaTareasObrasMem.Next; end; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; end; procedure TfrObra.BorrarDatosTareasObrasIB; begin dmTablaTareas.eliminarTareasInstaladorObra(CodigoObra); with TablaTareasObras do begin if IsEmpty then Exit; Last; while not BOF do begin Delete; Prior; end; if not IsEmpty then Delete; end; end; procedure TfrObra.SalvarDatosTareasObras; var NumeroCampo : Integer; Valor : Variant; CodigoInstalador : Variant; CodigoTarea : Variant; begin try with TablaTareasObrasMem do begin if IsEmpty then Exit; DisableControls; First; TablaTareasObras.First; while not EOF do begin TablaTareasObras.Insert; for NumeroCampo := 0 to FieldCount-1 do begin Valor := Fields[NumeroCampo].AsVariant; if (TablaTareasObras.Fields[NumeroCampo].FieldName = 'CODIGOINSTALADOR') then begin CodigoInstalador := Valor; Continue; end; if (TablaFases.Fields[NumeroCampo].FieldName = 'FECHAALTA') then Valor := dmBaseDatos.DarFecha; if (TablaFases.Fields[NumeroCampo].FieldName = 'USUARIOALTA') or (TablaFases.Fields[NumeroCampo].FieldName = 'USUARIO') then Valor := dmBaseDatos.Usuario; if (TablaTareasObras.Fields[NumeroCampo].FieldName = 'CODIGO') then begin if Valor < 500000 then begin Valor := dmTablaTareas.darNuevoCodigo; dmTablaTareas.IncrementarCodigo; end; CodigoTarea := Valor; end; if (TablaFases.Fields[NumeroCampo].FieldName = 'FECHAFIN') then Valor := TablaFases.FieldByName('FECHAINI').AsVariant; if (TablaFases.Fields[NumeroCampo].FieldName = 'HORAINI') then Valor := CTE_HORAINI; if (TablaFases.Fields[NumeroCampo].FieldName = 'HORAFIN') then Valor := CTE_HORAFIN; TablaTareasObras.Fields[NumeroCampo].AsVariant := Valor; end; TablaTareasObras.Post; dmTablaTareas.insertarTareaInstaladorObra(CodigoObra, CodigoInstalador, CodigoTarea); Next; end; EnableControls; end; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrObra.AplicarFiltroGridTareasObras; begin with gridTareasObras.ActiveView.DataController.Filter do begin BeginUpdate; try Root.Clear; Root.AddItem((gridTareasObras.ActiveView as TcxGridDBTableView).GetColumnByFieldName('TIPO'), foLike, TipoTarea, 'Tipo'); Active := True; finally EndUpdate; end; end; end; procedure TfrObra.crearTablaInfPedidos; begin //Creamos la tabla con los campos que vamos a tener el informe FTablaInformePedidosMem := TRxMemoryData.Create(Self); with FTablaInformePedidosMem do begin FieldDefs.Add('CODIGOCONTRATO',ftString,12); FieldDefs.Items[FieldDefs.IndexOf('CODIGOCONTRATO')].CreateField(Self); FieldDefs.Add('CODIGOPEDIDO',ftString,10); FieldDefs.Items[FieldDefs.IndexOf('CODIGOPEDIDO')].CreateField(Self); FieldDefs.Add('DESCRIPCIONPROVEEDOR',ftString,200); FieldDefs.Items[FieldDefs.IndexOf('DESCRIPCIONPROVEEDOR')].CreateField(Self); FieldDefs.Add('CODIGOTAREA',ftString,10); FieldDefs.Items[FieldDefs.IndexOf('CODIGOTAREA')].CreateField(Self); FieldDefs.Add('DESCRIPCIONTAREA',ftString,2000); FieldDefs.Items[FieldDefs.IndexOf('DESCRIPCIONTAREA')].CreateField(Self); FieldDefs.Add('COMPLETADA',ftString,1); FieldDefs.Items[FieldDefs.IndexOf('COMPLETADA')].CreateField(Self); FieldDefs.Add('FECHAINI',ftString,50); FieldDefs.Items[FieldDefs.IndexOf('FECHAINI')].CreateField(Self); end; end; procedure TfrObra.rellenarTablaInfPedidos; var Nodo : TcxTreeListNode; begin FTablaInformePedidosMem.EmptyTable; FTablaInformePedidosMem.Open; TablaFasesMem.SortOnFields('CODIGOPEDIDO;CODIGO'); with TablaFasesMem do begin DisableControls; First; FTablaInformePedidosMem.First; while not Eof do begin FTablaInformePedidosMem.Append; FTablaInformePedidosMem.FieldByName('CODIGOCONTRATO').AsString := CodigoObra; FTablaInformePedidosMem.FieldByName('CODIGOPEDIDO').AsString := FieldByName('CODIGOPEDIDO').AsString; FTablaInformePedidosMem.FieldByName('CODIGOTAREA').AsString := FieldByName('CODIGO').AsString; FTablaInformePedidosMem.FieldByName('COMPLETADA').AsString := FieldByName('COMPLETADA').AsString; FTablaInformePedidosMem.FieldByName('FECHAINI').AsString := FieldByName('FECHAINI').AsString; FTablaInformePedidosMem.FieldByName('DESCRIPCIONTAREA').AsString := FieldByName('DESCRIPCION').AsString; //La descripción del pedido junto con el proveedor la sacamos de la lista desplegable Nodo := tlApartadosObra.FindNodeByText(FieldByName('CODIGOPEDIDO').AsString,ColCodigoPedido); if Nodo <> Nil then FTablaInformePedidosMem.FieldByName('DESCRIPCIONPROVEEDOR').AsString := Nodo.Texts[CTE_COL_DESCRIPCION] else FTablaInformePedidosMem.FieldByName('DESCRIPCIONPROVEEDOR').AsVariant := Null; FTablaInformePedidosMem.Post; FTablaInformePedidosMem.Next; Next; end; EnableControls; end; end; procedure TfrObra.crearTablaInfTareas; begin //Creamos la tabla con los campos que vamos a tener el informe FTablaInformeTareasMem := TRxMemoryData.Create(Self); with FTablaInformeTareasMem do begin FieldDefs.Add('CODIGOCONTRATO',ftString,12); FieldDefs.Items[FieldDefs.IndexOf('CODIGOCONTRATO')].CreateField(Self); FieldDefs.Add('CODIGOINSTALADOR',ftString,10); FieldDefs.Items[FieldDefs.IndexOf('CODIGOINSTALADOR')].CreateField(Self); FieldDefs.Add('INSTALADOR',ftString,200); FieldDefs.Items[FieldDefs.IndexOf('INSTALADOR')].CreateField(Self); FieldDefs.Add('CODIGOTAREA',ftString,10); FieldDefs.Items[FieldDefs.IndexOf('CODIGOTAREA')].CreateField(Self); FieldDefs.Add('TIPO',ftString,100); FieldDefs.Items[FieldDefs.IndexOf('TIPO')].CreateField(Self); FieldDefs.Add('DESCRIPCION',ftString,2000); FieldDefs.Items[FieldDefs.IndexOf('DESCRIPCION')].CreateField(Self); FieldDefs.Add('COMPLETADA',ftString,1); FieldDefs.Items[FieldDefs.IndexOf('COMPLETADA')].CreateField(Self); FieldDefs.Add('FECHAINI',ftString,50); FieldDefs.Items[FieldDefs.IndexOf('FECHAINI')].CreateField(Self); end; end; procedure TfrObra.rellenarTablaInfTareas; begin FTablaInformeTareasMem.EmptyTable; FTablaInformeTareasMem.Open; TablaTareasObrasMem.SortOnFields('CODIGOINSTALADOR;TIPO;FECHAINI'); with TablaTareasObrasMem do begin DisableControls; First; FTablaInformeTareasMem.First; while not Eof do begin FTablaInformeTareasMem.Append; FTablaInformeTareasMem.FieldByName('CODIGOCONTRATO').AsString := CodigoObra; FTablaInformeTareasMem.FieldByName('CODIGOINSTALADOR').AsString := FieldByName('CODIGOINSTALADOR').AsString; FTablaInformeTareasMem.FieldByName('INSTALADOR').AsString := FieldByName('CODIGOINSTALADOR').AsString; FTablaInformeTareasMem.FieldByName('CODIGOTAREA').AsString := FieldByName('CODIGO').AsString; FTablaInformeTareasMem.FieldByName('TIPO').AsString := FieldByName('TIPO').AsString; FTablaInformeTareasMem.FieldByName('COMPLETADA').AsString := FieldByName('COMPLETADA').AsString; FTablaInformeTareasMem.FieldByName('FECHAINI').AsString := FieldByName('FECHAINI').AsString; FTablaInformeTareasMem.FieldByName('DESCRIPCION').AsString := FieldByName('DESCRIPCION').AsString; //La descripción del pedido junto con el proveedor la sacamos de la lista desplegable // FTablaInformePedidosMem.FieldByName('DESCRIPCIONPROVEEDOR').AsString := (tlApartadosObra.FindNodeByText(FieldByName('CODIGOPEDIDO').AsString,ColCodigoPedido)).Texts[CTE_COL_DESCRIPCION]; FTablaInformeTareasMem.Post; FTablaInformeTareasMem.Next; Next; end; EnableControls; end; end; procedure TfrObra.activarModoModificarTablasObra; begin with TablaObras do begin ParamByName('CODIGOCONTRATO').AsString := CodigoObra; Prepare; Open; FieldByName('PROVINCIA').OnSetText := ProvinciaSetText; if RecordCount = 0 then begin VerMensajeFmt(msgObrNoExisteObr, [CodigoObra]); CancelarModificar; CloseFrame; Exit; end; // Bloquear el Obra Edit; Post; Edit; end; with TablaObrasInstaladores do begin Close; Params.ByName('CODIGOCONTRATO').AsString := CodigoObra; Prepare; Open; end; with TablaObrasInstaladoresMem do begin Close; Open; CargarDatosInstaladores; if not IsEmpty then Edit; end; with TablaObrasGastos do begin Close; Params.ByName('CODIGOCONTRATO').AsString := CodigoObra; Prepare; Open; end; with TablaObrasGastosMem do begin Close; Open; CargarDatosGastos; if TablaObrasGastos.RecordCount = -1 then FContadorGastosAux := 0 else FContadorGastosAux := TablaObrasGastos.RecordCount; if not IsEmpty then Edit; end; end; procedure TfrObra.activarModoConsultarTablasObra; begin with TablaObras do begin ParamByName('CODIGOCONTRATO').AsString := CodigoObra; Prepare; Open; FieldByName('PROVINCIA').OnSetText := Nil; if RecordCount = 0 then begin VerMensajeFmt(msgObrNoExisteObr, [CodigoObra]); CancelarModificar; CloseFrame; Exit; end; end; with TablaObrasInstaladores do begin Close; Params.ByName('CODIGOCONTRATO').AsString := CodigoObra; Prepare; Open; end; with TablaObrasInstaladoresMem do begin Close; Open; CargarDatosInstaladores; end; with TablaObrasGastos do begin Close; Params.ByName('CODIGOCONTRATO').AsString := CodigoObra; Prepare; Open; end; with TablaObrasGastosMem do begin Close; Open; CargarDatosGastos; end; end; procedure TfrObra.activarModoTablasPedidos; begin with TablaObrasPedidos do begin Close; Params.ByName('CODIGOCONTRATO').AsString := CodigoObra; Prepare; Open; end; with TablaFases do begin Close; Params.ByName('CODIGOCONTRATO').AsString := CodigoObra; Prepare; Open; end; with TablaFasesMem do begin Close; Open; CargarDatosFases; end; end; procedure TfrObra.activarModoConsultarTablasTareas; begin with TablaTareasObras do begin Close; Params.ByName('CODIGOCONTRATO').AsString := CodigoObra; Prepare; Open; end; with TablaTareasObrasMem do begin Close; Open; CargarDatosTareasObras; if TablaTareasObras.RecordCount = -1 then FContadorTareaObraAux := 0 else FContadorTareaObraAux := TablaTareasObras.RecordCount; end; end; procedure TfrObra.activarModoModificarTablasTareas; begin with TablaTareasObras do begin Close; Params.ByName('CODIGOCONTRATO').AsString := CodigoObra; Prepare; Open; end; with TablaTareasObrasMem do begin Close; Open; CargarDatosTareasObras; if TablaTareasObras.RecordCount = -1 then FContadorTareaObraAux := 0 else FContadorTareaObraAux := TablaTareasObras.RecordCount; if not IsEmpty then Edit; end; end; procedure TfrObra.ActivarBarrasGrids; begin pnlBarraInstaladores.Visible := True; pnlBarraOtrosGastos.Visible := True; pnlBarraOtro.Visible := True; end; procedure TfrObra.DesactivarBarrasGrids; begin pnlBarraInstaladores.Visible := False; pnlBarraOtrosGastos.Visible := False; pnlBarraOtro.Visible := False; end; procedure TfrObra.ActivarCamposPedido; begin cxPed.Properties.ReadOnly := False; cxTra.Properties.ReadOnly := False; cxCon.Properties.ReadOnly := False; cxEnt.Properties.ReadOnly := False; cxEna.Properties.ReadOnly := False; FechaPed.Properties.ReadOnly := False; FechaTra.Properties.ReadOnly := False; FechaCon.Properties.ReadOnly := False; FechaEnt.Properties.ReadOnly := False; FechaEnaIni.Properties.ReadOnly := False; FechaEnaFin.Properties.ReadOnly := False; ObservacionesPed.Properties.ReadOnly := False; ObservacionesTra.Properties.ReadOnly := False; ObservacionesCon.Properties.ReadOnly := False; ObservacionesEnt.Properties.ReadOnly := False; ObservacionesEna.Properties.ReadOnly := False; end; procedure TfrObra.DesactivarCamposPedido; begin cxPed.Properties.ReadOnly := True; cxTra.Properties.ReadOnly := True; cxCon.Properties.ReadOnly := True; cxEnt.Properties.ReadOnly := True; cxEna.Properties.ReadOnly := True; FechaPed.Properties.ReadOnly := True; FechaTra.Properties.ReadOnly := True; FechaCon.Properties.ReadOnly := True; FechaEnt.Properties.ReadOnly := True; FechaEnaIni.Properties.ReadOnly := True; FechaEnaFin.Properties.ReadOnly := True; ObservacionesPed.Properties.ReadOnly := True; ObservacionesTra.Properties.ReadOnly := True; ObservacionesCon.Properties.ReadOnly := True; ObservacionesEnt.Properties.ReadOnly := True; ObservacionesEna.Properties.ReadOnly := True; end; procedure TfrObra.crearTablasObra; begin TablaObras := TIBDataSet.Create(Self); dsObras.DataSet := TablaObras; with TablaObras do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaObras.sqlConsultar); ModifySQL.Assign(dmTablaObras.sqlModificar); DeleteSQL.Assign(dmTablaObras.sqlEliminar); RefreshSQL.Assign(dmTablaObras.sqlConsultar); end; TablaObrasInstaladores := TIBDataSet.Create(Self); TablaObrasInstaladoresMem := TRxMemoryData.Create(Self); dsObrasInstaladores.DataSet := TablaObrasInstaladoresMem; with TablaObrasInstaladores do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaObrasInstaladores.sqlGrid); InsertSQL.Assign(dmTablaObrasInstaladores.sqlInsertar); ModifySQL.Assign(dmTablaObrasInstaladores.sqlModificar); DeleteSQL.Assign(dmTablaObrasInstaladores.sqlEliminar); RefreshSQL.Assign(dmTablaObrasInstaladores.sqlConsultar); end; TablaObrasInstaladoresMem.CopyStructure(TablaObrasInstaladores); dmTablaObrasInstaladores.InicializarGrid(gridInstaladoresDBTableView1); TablaObrasGastos := TIBDataSet.Create(Self); TablaObrasGastosMem := TRxMemoryData.Create(Self); dsObrasGastos.DataSet := TablaObrasGastosMem; with TablaObrasGastos do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaObrasGastos.sqlGrid); InsertSQL.Assign(dmTablaObrasGastos.sqlInsertar); ModifySQL.Assign(dmTablaObrasGastos.sqlModificar); DeleteSQL.Assign(dmTablaObrasGastos.sqlEliminar); RefreshSQL.Assign(dmTablaObrasGastos.sqlConsultar); end; TablaObrasGastosMem.CopyStructure(TablaObrasGastos); dmTablaObrasGastos.InicializarGrid(gridOtrosGastosDBTableView1); end; procedure TfrObra.crearTablasPedidos; begin TablaObrasPedidos := TIBDataSet.Create(Self); dsObrasPedidos.DataSet := TablaObrasPedidos; with TablaObrasPedidos do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaObrasPedidos.sqlGrid); InsertSQL.Assign(dmTablaObrasPedidos.sqlInsertar); ModifySQL.Assign(dmTablaObrasPedidos.sqlModificar); DeleteSQL.Assign(dmTablaObrasPedidos.sqlEliminar); RefreshSQL.Assign(dmTablaObrasPedidos.sqlConsultar); end; TablaFases := TIBDataSet.Create(Self); TablaFasesMem := TRxMemoryData.Create(Self); with TablaFases do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaTareas.sqlGrid); InsertSQL.Assign(dmTablaTareas.sqlInsertar); ModifySQL.Assign(dmTablaTareas.sqlModificar); DeleteSQL.Assign(dmTablaTareas.sqlEliminar); RefreshSQL.Assign(dmTablaTareas.sqlConsultar); end; TablaFasesMem.CopyStructure(TablaFases); DataSource1.DataSet := TablaFasesMem; end; procedure TfrObra.crearTablasTareas; begin TablaTareasObras := TIBDataSet.Create(Self); TablaTareasObrasMem := TRxMemoryData.Create(Self); dsTareasObras.DataSet := TablaTareasObrasMem; with TablaTareasObras do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaTareas.sqlTareasObrasGrid); InsertSQL.Assign(dmTablaTareas.sqlInsertar); ModifySQL.Assign(dmTablaTareas.sqlModificar); DeleteSQL.Assign(dmTablaTareas.sqlEliminar); RefreshSQL.Assign(dmTablaTareas.sqlConsultar); end; TablaTareasObrasMem.CopyStructure(TablaTareasObras); dmTablaTareas.InicializarGridTareasObras(gridTareasObrasDBTableView1); with TcxLookupComboBoxProperties(gridTareasObrasDBTableView1.GetColumnByFieldName('CODIGOINSTALADOR').Properties) do begin ListSource := dsObrasInstaladores; end; end; procedure TfrObra.crearInformes; begin FVistaPrevia := TfrVistaPrevia.Create(Self); FVistaPrevia.Parent := pnlVistaPrevia; FVistaPrevia.bCancelar.Visible := False; crearTablaInfPedidos; FInformePedidos := TdmInformeListadoPedidosObra.Create(Self); FInformePedidos.Preview := FVistaPrevia.Preview; crearTablaInfTareas; FInformeOtros := TdmInformeListadoTareasObra.Create(Self); FInformeOtros.Preview := FVistaPrevia.Preview; end; procedure TfrObra.destruirTablasObra; begin TablaObras.Close; TablaObras.Unprepare; TablaObras.Free; TablaObras := Nil; TablaObrasInstaladores.Close; TablaObrasInstaladores.UnPrepare; TablaObrasInstaladores.Free; TablaObrasInstaladores := Nil; TablaObrasInstaladoresMem.Free; TablaObrasInstaladoresMem := Nil; TablaObrasGastos.Close; TablaObrasGastos.UnPrepare; TablaObrasGastos.Free; TablaObrasGastos := Nil; TablaObrasGastosMem.Free; TablaObrasGastosMem := Nil; end; procedure TfrObra.destruirTablasPedidos; begin TablaObrasPedidos.Close; TablaObrasPedidos.UnPrepare; TablaObrasPedidos.Free; TablaObrasPedidos := Nil; TablaFases.Close; TablaFases.UnPrepare; TablaFases.Free; TablaFases := Nil; TablaFasesMem.Free; TablaFasesMem := Nil; end; procedure TfrObra.destruirTablasTareas; begin TablaTareasObras.Close; TablaTareasObras.UnPrepare; TablaTareasObras.Free; TablaTareasObras := Nil; TablaTareasObrasMem.Free; TablaTareasObrasMem := Nil; end; procedure TfrObra.destruirInformes; begin FTablaInformePedidosMem.Free; FTablaInformePedidosMem := Nil; FTablaInformeTareasMem.Free; FTablaInformeTareasMem := Nil; FreeAndNil(FInformePedidos); FreeAndNil(FInformeOtros); end; procedure TfrObra.ActivarModoEliminar; begin dsObras.AutoEdit := False; dsObrasInstaladores.AutoEdit := False; dsObrasGastos.AutoEdit := False; dsObrasPedidos.AutoEdit := False; dsTareasObras.AutoEdit := False; actAnadirPedido.Enabled := False; actEliminarPedido.Enabled := False; Provincia.Properties.Buttons[0].Visible := False; Poblacion.Properties.Buttons[0].Visible := False; NombreProv.Properties.Buttons[0].Visible := False; DesactivarBarrasGrids; DesactivarCamposPedido; try activarModoConsultarTablasObra; activarModoTablasPedidos; activarModoConsultarTablasTareas; Visible := True; FechaFin.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrObra.CancelarEliminar: Boolean; begin Result := False; try RollBack; TablaObras.Close; TablaObrasInstaladores.Close; TablaObrasInstaladoresMem.Close; TablaObrasGastos.Close; TablaObrasGastosMem.Close; TablaObrasPedidos.Close; TablaFases.Close; TablaFasesMem.Close; TablaTareasObras.Close; TablaTareasObrasMem.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrObra.EliminarDatos: Boolean; begin Result := False; try TablaObras.Delete; BorrarDatosFasesIB; BorrarDatosTareasObrasIB; Commit; TablaObras.Close; TablaObrasInstaladores.Close; TablaObrasInstaladoresMem.Close; TablaObrasGastos.Close; TablaObrasGastosMem.Close; TablaObrasPedidos.Close; TablaFases.Close; TablaFasesMem.Close; TablaTareasObras.Close; TablaTareasObrasMem.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrObra.actSalirExecute(Sender: TObject); begin CloseFrame; end; function TfrObra.CloseFrame: Boolean; begin FInformePedidos.Preview := NIL; FInformeOtros.Preview := NIL; (FVistaPrevia as TRdxFrame).CloseFrame; Result := inherited CloseFrame; end; function TfrObra.TratarCambios: integer; begin HabilitarPanelObra; Result := inherited TratarCambios; end; procedure TfrObra.HabilitarPanelTareas; begin pnlDetalleObra.Visible := False; pnlDetallePedidosOtros.Visible := False; pnlDetallePedido.Visible := False; pnlDetalleOtro.Visible := True; end; procedure TfrObra.HabilitarPanelPedido; begin pnlDetalleObra.Visible := False; pnlDetallePedidosOtros.Visible := False; pnlDetallePedido.Visible := True; pnlDetalleOtro.Visible := False; end; procedure TfrObra.HabilitarPanelObra; begin pnlDetalleObra.Visible := True; pnlDetallePedidosOtros.Visible := False; pnlDetallePedido.Visible := False; pnlDetalleOtro.Visible := False; end; procedure TfrObra.HabilitarPanelInforme; begin pnlDetalleObra.Visible := False; pnlDetallePedidosOtros.Visible := True; pnlDetallePedido.Visible := False; pnlDetalleOtro.Visible := False; end; procedure TfrObra.pnlOtrosDatosResize(Sender: TObject); begin pnlInstaladores.Width := pnlOtrosDatos.Width div 2; pnlOtrosGastos.Width := pnlOtrosDatos.Width div 2; end; procedure TfrObra.actEliminarTareaObraUpdate(Sender: TObject); begin (Sender as TAction).Enabled := (gridTareasObrasDBTableView1.ViewData.RowCount <> 0); end; procedure TfrObra.actEliminarTodoTareaObraUpdate(Sender: TObject); begin (Sender as TAction).Enabled := (gridTareasObrasDBTableView1.ViewData.RowCount <> 0); end; procedure TfrObra.NombreProvPropertiesChange(Sender: TObject); begin refrescarNombrePedido; end; procedure TfrObra.refrescarNombrePedido; var Nodo : TcxTreeListNode; begin Nodo := tlApartadosObra.FocusedNode; Nodo.Texts[CTE_COL_DESCRIPCION] := DescripcionPed.Text + '- ' + NombreProv.Text; end; procedure TfrObra.DescripcionPedPropertiesChange(Sender: TObject); begin refrescarNombrePedido; end; procedure TfrObra.gridTareasObrasDBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); var IndiceCol : Integer; begin if not AViewInfo.Selected then begin IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName('COMPLETADA').Index; if StrToBool(AViewInfo.GridRecord.DisplayTexts[IndiceCol]) then begin ACanvas.Canvas.Font.Color := clGray; ACanvas.Canvas.Font.Style := [fsStrikeOut]; end else begin ACanvas.Canvas.Font.Color := clWindowText; ACanvas.Canvas.Font.Style := []; end; end; end; procedure TfrObra.ActivarInforme(Panel: Integer); var Nodo : TcxTreeListNode; begin Nodo := tlApartadosObra.FindNodeByText(IntToStr(Panel), ColPanel); if Nodo <> Nil then Nodo.Focused := True; end; end.