unit Obra2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, RdxDBFrame, RdxFrame, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView, cxGridCardView, cxGridDBCardView, cxGrid, RdxBotones, RdxPaneles, ExtCtrls, cxMaskEdit, cxButtonEdit, cxDBEdit, cxContainer, cxTextEdit, StdCtrls, ComCtrls, RdxPageControl, cxDropDownEdit, cxCalendar, cxMemo, AdvPanel, RdxFrameObras, ActnList, RdxBarras, Grids, DBGrids, JvExExtCtrls, JvComponent, JvItemsPanel, JvExComCtrls, JvHeaderControl, JvExControls, JvArrayButton, IBCustomDataSet, cxSchedulerStorage, cxSchedulerDBStorage, Menus, cxScheduler, cxSchedulerCustomControls, cxSchedulerCustomResourceView, cxSchedulerDayView, RxMemDS, cxSchedulerDateNavigator, cxSchedulerWeekView, JvExGrids, JvStringGrid, cxGridTableView, cxGridDBTableView, TablaCitas, IBDatabase, InformeEstadoObra, cxDBLookupComboBox, IBSQLMonitor, cxLookupEdit, cxDBLookupEdit, IBQuery; type TfrObra2 = class(TRdxFrameObras) Paginas: TRdxPagesControl; pagPedidos: TTabSheet; pnlDatosObra: TPanel; eCodigo: TLabel; eNIFCIF: TLabel; eObservaciones: TLabel; Observaciones: TcxDBMemo; CodigoContrato: TcxDBTextEdit; pagGastos: TTabSheet; Label20: TLabel; dsObras: TDataSource; brDoble: TRdxBarraInferior; bGuardar: TRdxBoton; bCancelar: TRdxBoton; DatosCliente: TcxMemo; Label1: TLabel; Shape1: TShape; JvItemsPanel1: TJvItemsPanel; JvHeaderControl1: TJvHeaderControl; JvArrayButton1: TJvArrayButton; dsCitas: TDataSource; TablaCitas: TIBDataSet; DBGrid1: TDBGrid; Splitter1: TSplitter; cxSchedulerDBStorage: TcxSchedulerDBStorage; pagEntregas: TTabSheet; Panel1: TPanel; JvStringGrid1: TJvStringGrid; pagMontajes: TTabSheet; pagRemates: TTabSheet; pnlOtrosDatos: TPanel; pnlInstaladores: TPanel; bEliminar: TRdxBoton; bAnadir: TRdxBoton; bEliminarTodo: TRdxBoton; gridInstaladores: TcxGrid; gridInstaladoresVista: TcxGridDBTableView; gridInstaladoresLevel1: TcxGridLevel; Label4: TLabel; pnlOtrosGastos: TPanel; gridOtrosGastos: TcxGrid; gridOtrosGastosVista: TcxGridDBTableView; gridOtrosGastosLevel1: TcxGridLevel; RdxBoton1: TRdxBoton; RdxBoton2: TRdxBoton; RdxBoton3: TRdxBoton; Label5: TLabel; Splitter2: TSplitter; pnlDetalleOtro: TRdxPanel; pnlDatosOtro: TPanel; Panel2: TPanel; pnlGridOtro: TPanel; gridEntregas: TcxGrid; gridEntregasVista: TcxGridDBTableView; gridEntregasLevel1: TcxGridLevel; pnlBarraOtro: TPanel; bEliminarTareaObra: TRdxBoton; bAnadirTareaObra: TRdxBoton; ActionList1: TActionList; actAceptar: TAction; actCancelar: TAction; actAnadirInstalador: TAction; actEliminarInstalador: TAction; actAnadirGasto: TAction; actEliminarGasto: TAction; actEliminarTodoIns: TAction; actEliminarTodoGas: TAction; actAnadirPedido: TAction; actEliminarPedido: TAction; actAnadirTareaObra: TAction; actEliminarEntrega: TAction; actSalir: TAction; dsObrasInstaladores: TDataSource; dsGastos: TDataSource; Panel3: TPanel; actAnadirEntrega: TAction; TablaInstaladores: TIBDataSet; Panel4: TPanel; RdxBoton4: TRdxBoton; RdxBoton5: TRdxBoton; Panel5: TPanel; gridMontajes: TcxGrid; gridMontajesVista: TcxGridDBTableView; cxGridLevel1: TcxGridLevel; Panel6: TPanel; RdxBoton6: TRdxBoton; RdxBoton7: TRdxBoton; Panel7: TPanel; gridRemates: TcxGrid; gridRematesVista: TcxGridDBTableView; cxGridLevel2: TcxGridLevel; actEliminarMontaje: TAction; actEliminarRemate: TAction; RdxBoton8: TRdxBoton; actPrevisualizar: TAction; dsInstaladores: TDataSource; FechaFin: TcxDBTextEdit; lblObraCerrada: TLabel; Label2: TLabel; cbxDocumento: TcxDBLookupComboBox; dsDocumentos: TDataSource; TablaDocumentos: TIBQuery; procedure JvArrayButton1ArrayButtonClicked(ACol, ARow: Integer); procedure JvItemsPanel1Resize(Sender: TObject); procedure pagPedidosResize(Sender: TObject); procedure actCancelarExecute(Sender: TObject); procedure actAceptarExecute(Sender: TObject); procedure actAnadirInstaladorExecute(Sender: TObject); procedure actEliminarInstaladorExecute(Sender: TObject); procedure actEliminarTodoInsExecute(Sender: TObject); procedure actEliminarTodoGasExecute(Sender: TObject); procedure actEliminarGastoExecute(Sender: TObject); procedure actAnadirGastoExecute(Sender: TObject); procedure pagEntregasShow(Sender: TObject); procedure pagMontajesShow(Sender: TObject); procedure pagRematesShow(Sender: TObject); procedure actAnadirEntregaExecute(Sender: TObject); procedure gridEntregasVistaDblClick(Sender: TObject); procedure actEliminarEntregaExecute(Sender: TObject); procedure actEliminarEntregaUpdate(Sender: TObject); procedure actEliminarRemateUpdate(Sender: TObject); procedure actEliminarMontajeUpdate(Sender: TObject); procedure actPrevisualizarExecute(Sender: TObject); procedure gridMontajesVistaDblClick(Sender: TObject); procedure gridRematesVistaDblClick(Sender: TObject); procedure cxSchedulerDBStorageEventModified(Sender: TObject; AEvent: TcxSchedulerEvent; var AHandled: Boolean); procedure actAnadirInstaladorUpdate(Sender: TObject); procedure actEliminarInstaladorUpdate(Sender: TObject); procedure actEliminarTodoInsUpdate(Sender: TObject); procedure actAnadirGastoUpdate(Sender: TObject); procedure actEliminarGastoUpdate(Sender: TObject); procedure actEliminarTodoGasUpdate(Sender: TObject); procedure actAnadirEntregaUpdate(Sender: TObject); procedure JvStringGrid1ExitCell(Sender: TJvStringGrid; AColumn, ARow: Integer; const EditText: String); private FTablaObrasInstaladores : TIBDataSet; FTablaObrasGastos: TIBDataSet; FTablaObrasGastosMem : TRxMemoryData; FCodigoInstalador: Variant; FInformeEstadoObra : TdmInformeEstadoObra; procedure InicializarPantalla; procedure RellenarArrayBotones; procedure CrearTablasObra; procedure CrearTablaCitas; procedure DestruirTablasObra; procedure DestruirTablaCitas; procedure InicializarCampos; procedure AjustarCabeceras; procedure TablaCitasBeforePost(DataSet: TDataSet); procedure TablaCitasAfterPost(DataSet: TDataSet); procedure SetCodigoInstalador(const Value: Variant); procedure SalvarDatosGastos; procedure SalvarProveedores; function ExisteInstaladorEnOtrasTareas : Boolean; procedure AplicarFiltroTipoAGrid(aVista : TcxGridDBTableView; aTipo : TTipoCitas); procedure EditarCita(ID : Variant; bSoloLectura:Boolean); overload; procedure InsertarCitaEntrega(Const Opcion: Integer); procedure InsertarCitaFase(Const Tipo: Integer;Const Col: Integer); procedure DeshabilitarModificar; procedure HabilitarModificar; protected procedure ActivarModoModificarTablasObra; procedure ActivarModoModificar; override; procedure ActivarModoConsultar; override; procedure ActivarModoEliminar; override; function ModificarDatos : Boolean; override; function CancelarModificar : 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 constructor Create (AOwner : TComponent); override; destructor Destroy; override; procedure Imprimir; procedure VistaPrevia; function EliminarDatos : Boolean; override; published property TablaObras; property CodigoObra; property CodigoInstalador : Variant read FCodigoInstalador write SetCodigoInstalador; property TablaObrasInstaladores : TIBDataSet read FTablaObrasInstaladores write FTablaObrasInstaladores; property TablaObrasGastos : TIBDataSet read FTablaObrasGastos write FTablaObrasGastos; end; var frObra2: TfrObra2; implementation uses cxSchedulerDialogs, RdxFrameInstaladores, Instaladores, IBErrorCodes, Mensajes, Literales, IB, Configuracion, BaseDatos, Entidades, TablaObras, StrFunc, Excepciones, DateUtils, TablaObrasInstaladores, TablaObrasGastos, TablaInstaladores, TablaTareas, TablaDocumentos; {$R *.dfm} { TfrObra2 } procedure TfrObra2.ActivarModoConsultar; begin inherited; end; procedure TfrObra2.ActivarModoEliminar; begin inherited; end; procedure TfrObra2.ActivarModoModificar; begin dsObras.AutoEdit := True; try ActivarModoModificarTablasObra; Visible := True; 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; procedure TfrObra2.ActivarModoModificarTablasObra; begin with TablaObras do begin ParamByName('CODIGOCONTRATO').AsString := CodigoObra; Prepare; Open; if RecordCount = 0 then begin VerMensajeFmt(msgObrNoExisteObr, [CodigoObra]); CancelarModificar; CloseFrame; Exit; end; end; end; procedure TfrObra2.BuscarObra; begin if Transaccion = NIL then exit; try if TablaObras.Active then ModificarDatos; TablaObras.Close; TablaCitas.Close; TablaObrasInstaladores.Close; TablaObrasGastos.Close; FTablaObrasGastosMem.Close; TablaInstaladores.Close; TablaDocumentos.Close; // Buscar la fila a tratar si es necesario if not esCadenaVacia(CodigoObra) then begin TablaObras.Params.ByName('CODIGOCONTRATO').AsString := CodigoObra; TablaCitas.Params.ByName('CODIGOCONTRATO').AsString := CodigoObra; TablaObrasInstaladores.Params.ByName('CODIGOCONTRATO').AsString := CodigoObra; TablaObrasGastos.Params.ByName('CODIGOCONTRATO').AsString := CodigoObra; TablaObras.Prepare; TablaObras.Open; TablaCitas.Prepare; TablaCitas.Open; TablaObrasInstaladores.Prepare; TablaObrasInstaladores.Open; TablaObrasGastos.Prepare; TablaObrasGastos.Open; FTablaObrasGastosMem.LoadFromDataSet(TablaObrasGastos, -1, lmCopy); FTablaObrasGastosMem.Open; TablaInstaladores.Open; TablaDocumentos.Open; cxSchedulerDBStorage.FullRefresh; RellenarArrayBotones; //Si la obra esta cerrada no se puede modificar ni fecha de finalización ni observaciones if VarIsNull(TablaObras.FieldByName('FECHAFIN').AsVariant) then HabilitarModificar else DeshabilitarModificar; DatosCliente.Text := TablaObras.FieldByName('NOMBRE').AsString + #10 + TablaObras.FieldByName('DIR1').AsString + #10 + TablaObras.FieldByName('DIR2').AsString + #10 + TablaObras.FieldByName('TELF').AsString; end except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrObra2.CancelarEliminar: Boolean; begin end; function TfrObra2.CancelarModificar: Boolean; begin Result := False; try RollBack; TablaObras.Close; TablaObrasInstaladores.Close; TablaObrasGastos.Close; FTablaObrasGastosMem.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrObra2.CloseFrame: Boolean; begin ModificarDatos; end; function TfrObra2.ComprobarDatos: Boolean; begin end; procedure TfrObra2.CrearTablasObra; begin TablaObras := TIBDataSet.Create(Self); 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; dsObras.DataSet := TablaObras; TablaObrasInstaladores := TIBDataSet.Create(Self); dsObrasInstaladores.DataSet := TablaObrasInstaladores; 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; dmTablaObrasInstaladores.InicializarGrid(gridInstaladoresVista); TablaObrasGastos := TIBDataSet.Create(Self); FTablaObrasGastosMem := TRxMemoryData.Create(Self); dsGastos.DataSet := FTablaObrasGastosMem; 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; FTablaObrasGastosMem.CopyStructure(TablaObrasGastos); FTablaObrasGastosMem.FieldByName('CODIGO').Required := False; with TablaDocumentos do begin Database := BaseDatos; Transaction := Transaccion; end; dmTablaObrasGastos.InicializarGrid(gridOtrosGastosVista); end; constructor TfrObra2.Create(AOwner: TComponent); begin inherited Create(AOwner); Entidad := entObraCliente; ConfigurarFrame(Self, Self.Entidad); BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; CrearTablasObra; CrearTablaCitas; InicializarCampos; InicializarPantalla; {CrearTablasPedidos; CrearTablasTareas; CrearInformes;} FInformeEstadoObra := TdmInformeEstadoObra.Create(Self); with FInformeEstadoObra do begin frxTablaCitas.DataSource := dsCitas; frxTablaInstaladores.DataSource := dsObrasInstaladores; frxTablaObras.DataSource := dsObras; end; Paginas.ActivePageIndex := 0; end; destructor TfrObra2.Destroy; begin FreeAndNIL(FInformeEstadoObra); DestruirTablasObra; DestruirTablaCitas; { destruirTablasPedidos; destruirTablasTareas; destruirInformes;} inherited; end; procedure TfrObra2.DestruirTablasObra; begin TablaObras.Close; TablaObras.Unprepare; TablaObras.Free; TablaObras := Nil; TablaObrasInstaladores.Close; TablaObrasInstaladores.UnPrepare; TablaObrasInstaladores.Free; TablaObrasInstaladores := Nil; TablaObrasGastos.Close; TablaObrasGastos.UnPrepare; TablaObrasGastos.Free; TablaObrasGastos := Nil; FTablaObrasGastosMem.Close; FTablaObrasGastosMem.Free; FTablaObrasGastosMem := Nil; end; function TfrObra2.EliminarDatos: Boolean; begin Result := False; try cxSchedulerDBStorage.Clear; TablaObras.Delete; Commit; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrObra2.FreeContenido; begin if (ContenidoModal is TRdxFrameInstaladores) then CodigoInstalador := (ContenidoModal as TRdxFrameInstaladores).CodigoInstalador; inherited FreeContenido; end; function TfrObra2.ModificarDatos: Boolean; begin Result := False; try if (TablaObras.State in [dsEdit, dsInsert]) then TablaObras.Post; BorrarTabla(TablaObrasGastos); SalvarDatosGastos; SalvarProveedores; Commit; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrObra2.TratarCambios: integer; begin end; procedure TfrObra2.VerModal; begin inherited; end; procedure TfrObra2.CrearTablaCitas; begin dsCitas.DataSet := TablaCitas; with TablaCitas do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SelectSQL.Assign(dmTablaCitas.sqlConsultar); SelectSQL.Add('WHERE CITAS.CODIGOCONTRATO = :CODIGOCONTRATO'); InsertSQL.Assign(dmTablaCitas.sqlInsertar); ModifySQL.Assign(dmTablaCitas.sqlModificar); DeleteSQL.Assign(dmTablaCitas.sqlEliminar); RefreshSQL.Assign(dmTablaCitas.sqlRefrescar); RefreshSQL.Add(' AND CITAS.CODIGOCONTRATO = :CODIGOCONTRATO'); BeforePost := TablaCitasBeforePost; AfterPost := TablaCitasAfterPost; Prepare; end; dmTablaTareas.InicializarGridTareasObras(gridEntregasVista); with TcxLookupComboBoxProperties(gridEntregasVista.GetColumnByFieldName('RESOURCEID').Properties) do ListSource := dsInstaladores; dmTablaTareas.InicializarGridTareasObras(gridMontajesVista); with TcxLookupComboBoxProperties(gridMontajesVista.GetColumnByFieldName('RESOURCEID').Properties) do ListSource := dsInstaladores; dmTablaTareas.InicializarGridTareasObras(gridRematesVista); with TcxLookupComboBoxProperties(gridRematesVista.GetColumnByFieldName('RESOURCEID').Properties) do ListSource := dsInstaladores; dsInstaladores.DataSet := TablaInstaladores; with TablaInstaladores do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SelectSQL.Add('select * from INSTALADORES order by CODIGO'); Prepare; end; end; procedure TfrObra2.DestruirTablaCitas; begin TablaCitas.Close; //TablaInstaladores.Close; end; procedure TfrObra2.InicializarPantalla; var i : integer; Inicio, Final : Integer; begin Inicio := Ord(tcPedido); Final := Ord(tcEntregaCliente); with JvItemsPanel1 do begin Items.Clear; for i := Inicio to Final do Items.Add(LiteralTipoCita[i]); end; JvArrayButton1.Rows := Final - Inicio + 1; JvArrayButton1.Cols := 4; for i := 1 to JvArrayButton1.Cols do JvHeaderControl1.Sections[i].Text := LiteralPartidasObra[i-1]; JvArrayButton1.Colors.Clear; for i := 0 to (JvArrayButton1.Cols * JvArrayButton1.Rows) do JvArrayButton1.Colors.Append('$00F9FEFF'); AjustarCabeceras; end; procedure TfrObra2.JvArrayButton1ArrayButtonClicked(ACol, ARow: Integer); var i : integer; AModified : Boolean; ATipo : Cardinal; ObraCerrada : boolean; begin ATipo := ARow + Ord(tcPedido); ObraCerrada := not VarIsNull(TablaObras.FieldByName('FECHAFIN').AsVariant); with TablaCitas do begin try First; if Locate('TIPOTAREA;PARTIDA', VarArrayOf([TextoTipoCita[ATipo], TextoPartidasObra[ACol]]), [loCaseInsensitive]) then begin EditarCita(FieldByName('ID').AsVariant, ObraCerrada); end else begin //Si la obra esta cerrada y al cuadro no contiene información no se muestra nada if not ObraCerrada then begin InsertarCitaFase(ATipo, ACol); end; end; finally SalvarProveedores; RellenarArrayBotones; end; end; end; procedure TfrObra2.InicializarCampos; var aField : TcxSchedulerDBStorageField; begin inherited; with cxSchedulerDBStorage.CustomFields do begin try BeginUpdate; Clear; aField := Add; aField.FieldName := 'TIPOTAREA'; aField := Add; aField.FieldName := 'CODIGOCONTRATO'; aField := Add; aField.FieldName := 'NOMBRECLIENTE'; aField := Add; aField.FieldName := 'PARTIDA'; aField := Add; aField.FieldName := 'COMPLETADA'; aField := Add; aField.FieldName := 'NOMBREPROVEEDOR'; finally EndUpdate; end; end; end; procedure TfrObra2.TablaCitasAfterPost(DataSet: TDataSet); begin dmBaseDatos.Transaccion.CommitRetaining; /// RellenarArrayBotones; end; procedure TfrObra2.TablaCitasBeforePost(DataSet: TDataSet); begin if (DataSet.FieldByName('ID').AsVariant = -1) or (VarIsNull(DataSet.FieldByName('ID').AsVariant)) then begin DataSet.Edit; DataSet.FieldByName('ID').AsVariant := dmTablaCitas.DarNuevoCodigo; end; end; procedure TfrObra2.RellenarArrayBotones; var I, ACol, ARow : integer; ATipo, APartida : String; AEvent : TcxSchedulerEvent; AControlEvent : TcxSchedulerControlEvent; ATipos : TStringList; APartidas : TStringList; ACaptions : TStringList; AColors : TStringList; ACompletada : Boolean; AProveedor : String; AFecIni, AFecFin : TDate; begin JvArrayButton1.Captions.Clear; JvArrayButton1.Colors.Clear; JvStringGrid1.Cells[0, 0] := 'Proveedores'; for i := 0 to JvArrayButton1.Cols - 1 do JvStringGrid1.Cells[i + 1, 0] := ''; ATipos := TStringList.Create; APartidas := TStringList.Create; ACaptions := TStringList.Create; AColors := TStringList.Create; try for i := Ord(tcPedido) to Ord(tcEntregaCliente) do ATipos.Add(TextoTipoCita[i]); for i := Ord(poCocina) to Ord(poVarios) do APartidas.Add(TextoPartidasObra[i]); for i := 0 to (JvArrayButton1.Rows * JvArrayButton1.Cols) - 1 do ACaptions.Add(''); for i := 0 to (JvArrayButton1.Cols * JvArrayButton1.Rows) do AColors.Add('$00F9FEFF'); with TablaCitas do begin DisableControls; First; while not EOF do begin ARow := ATipos.IndexOf(FieldByName('TIPOTAREA').AsString); ACol := APartidas.IndexOf(FieldByName('PARTIDA').AsString); ACompletada := not VarIsNull(FieldByName('COMPLETADA').AsVariant); AProveedor := FieldByName('NOMBREPROVEEDOR').AsString; if (ARow >= 0) and (ACol >= 0) then begin AFecIni := FieldByName('START').AsDateTime; AFecFin := FieldByName('FINISH').AsDateTime; if DateOf(AFecIni) <> DateOf(AFecFin) then ACaptions[(ARow*JvArrayButton1.Cols)+ACol] := 'Del ' + DateToStr(AFecIni) + ' al ' + DateToStr(AFecFin) else ACaptions[(ARow*JvArrayButton1.Cols)+ACol] := DateToStr(AFecIni); //ACaptions[(ARow*JvArrayButton1.Cols)+ACol] := FieldByName('CAPTION').AsString; if ACompletada then begin AColors[(ARow*JvArrayButton1.Cols)+ACol] := ColorToString(dmConfiguracion.cxContentOdd.Color); ACaptions[(ARow*JvArrayButton1.Cols)+ACol] := ACaptions[(ARow*JvArrayButton1.Cols)+ACol] + ' (Completada)' end; JvStringGrid1.Cells[ACol+1, 0] := AProveedor; end; Next; end; EnableControls; end; for i := 0 to (JvArrayButton1.Rows * JvArrayButton1.Cols) - 1 do JvArrayButton1.Captions.Add(ACaptions.Strings[i]); for i := 0 to (JvArrayButton1.Rows * JvArrayButton1.Cols) - 1 do JvArrayButton1.Colors.Add(AColors.Strings[i]); finally FreeAndNil(ATipos); FreeAndNil(APartidas); FreeAndNil(ACaptions); FreeAndNil(AColors); JvArrayButton1.Invalidate; end; end; procedure TfrObra2.JvItemsPanel1Resize(Sender: TObject); begin AjustarCabeceras; end; procedure TfrObra2.AjustarCabeceras; var i : integer; Ancho : Integer; begin with JvHeaderControl1 do begin for i := 0 to (Sections.Count - 1) do begin if i = 0 then Ancho := JvItemsPanel1.Width else Ancho := JvArrayButton1.Width div JvArrayButton1.Cols; Sections[i].MaxWidth := Ancho; Sections[i].MinWidth := Ancho; Sections[i].Width := Ancho; Panel1.Width := JvArrayButton1.Width; JvStringGrid1.ColWidths[i] := Ancho; end; end; end; procedure TfrObra2.pagPedidosResize(Sender: TObject); begin AjustarCabeceras; end; procedure TfrObra2.actCancelarExecute(Sender: TObject); begin CancelarModificar; end; procedure TfrObra2.actAceptarExecute(Sender: TObject); begin ModificarDatos; end; procedure TfrObra2.SetCodigoInstalador(const Value: Variant); var DatosInstalador : TDatosInstalador; begin if (EsCadenaVacia(Value)) then Exit; FCodigoInstalador := Value; if not TablaObrasInstaladores.Locate('CODIGOINSTALADOR', FCodigoInstalador,[]) then begin DatosInstalador := TDatosInstalador.Create; DatosInstalador.Codigo := FCodigoInstalador; dmTablaInstaladores.DarDatosInstalador(DatosInstalador); with TablaObrasInstaladores 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 TfrObra2.actAnadirInstaladorExecute(Sender: TObject); begin ContenidoModal := TfrInstaladores.Create(Self); gridInstaladores.SetFocus; end; procedure TfrObra2.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 } TablaObrasInstaladores.Cancel; Exit end; try TablaObrasInstaladores.Delete; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; end; procedure TfrObra2.actEliminarTodoInsExecute(Sender: TObject); begin if verMensajePregunta(msgObrEliminarTodosDetalles) = mrYes then begin with TablaObrasInstaladores 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 TablaObrasInstaladores.IsEmpty then VerMensaje(msgObrInsConOtrasTareas2); end; end; procedure TfrObra2.actEliminarTodoGasExecute(Sender: TObject); begin if verMensajePregunta(msgObrEliminarTodosDetalles) = mrYes then FTablaObrasGastosMem.EmptyTable; end; procedure TfrObra2.actEliminarGastoExecute(Sender: TObject); begin if verMensajePregunta(msgObrEliminarDetalles) = mrYes then begin if FTablaObrasGastosMem.RecordCount = 0 then begin { Hacemos un cancel de la tabla por si el registro actual estuviera recien creado } FTablaObrasGastosMem.Cancel; Exit end; try FTablaObrasGastosMem.Delete; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; end; function TfrObra2.ExisteInstaladorEnOtrasTareas: Boolean; begin // end; procedure TfrObra2.actAnadirGastoExecute(Sender: TObject); begin try with FTablaObrasGastosMem do begin Next; if EOF then Append else begin Prior; Insert; end; FieldByName('CODIGOCONTRATO').AsString := CodigoObra; FieldByName('CODIGO').AsInteger := RecNo; FieldByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha; FieldByName('USUARIO').AsString := dmBaseDatos.Usuario; FieldByName('FECHA').AsDateTime := DateOf(Now); end; gridOtrosGastos.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrObra2.SalvarDatosGastos; var NumeroCampo : Integer; Valor : Variant; Contador : Integer; begin try with FTablaObrasGastosMem 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 TfrObra2.SalvarProveedores; var I, ACol : integer; APartida : String; AEvent : TcxSchedulerEvent; APartidas : TStringList; AProveedor : String; begin APartidas := TStringList.Create; try for i := Ord(poCocina) to Ord(poVarios) do APartidas.Add(TextoPartidasObra[i]); with cxSchedulerDBStorage do begin FullRefresh; for i := 0 to (EventCount - 1) do begin AEvent := Events[i]; APartida := VarToStr(AEvent.GetCustomFieldValueByName('PARTIDA')); ACol := APartidas.IndexOf(APartida); if (ACol >= 0) then begin AProveedor := JvStringGrid1.Cells[ACol+1, 0]; AEvent.SetCustomFieldValueByName('NOMBREPROVEEDOR', AProveedor); end; end; end; finally FreeAndNil(APartidas); end; end; procedure TfrObra2.AplicarFiltroTipoAGrid(aVista : TcxGridDBTableView; aTipo : TTipoCitas); var AItemList : TcxFilterCriteriaItemList; begin with aVista.DataController.Filter do begin BeginUpdate; try Root.Clear; Root.BoolOperatorKind := fboAnd; Root.AddItem(aVista.GetColumnByFieldName('TIPOTAREA'), foLike, TextoTipoCita[Ord(aTipo)], 'Tipo'); Root.AddItem(aVista.GetColumnByFieldName('CODIGOCONTRATO'), foLike, FCodigoObra, 'Obra'); Active := True; finally EndUpdate; end; end; end; procedure TfrObra2.pagEntregasShow(Sender: TObject); begin AplicarFiltroTipoAGrid(gridEntregasVista, tcEntrega); end; procedure TfrObra2.pagMontajesShow(Sender: TObject); begin AplicarFiltroTipoAGrid(gridMontajesVista, tcMontaje); end; procedure TfrObra2.pagRematesShow(Sender: TObject); begin AplicarFiltroTipoAGrid(gridRematesVista, tcRemate); end; procedure TfrObra2.actAnadirEntregaExecute(Sender: TObject); var AOpcion : Cardinal; begin if pagEntregas.Visible then AOpcion := Ord(tcEntrega); if pagMontajes.Visible then AOpcion := Ord(tcMontaje); if pagRemates.Visible then AOpcion := Ord(tcRemate); InsertarCitaEntrega(AOpcion); end; procedure TfrObra2.gridEntregasVistaDblClick(Sender: TObject); begin if gridEntregasVista.ViewData.RowCount > 0 then begin with TablaCitas do begin DisableControls; EditarCita(FieldByName('ID').AsVariant, False); gridEntregasVista.DataController.RefreshExternalData; EnableControls; end; end; end; procedure TfrObra2.actEliminarEntregaExecute(Sender: TObject); begin if verMensajePregunta(msgObrEliminarDetalles) = mrYes then begin if TablaCitas.RecordCount = 0 then begin { Hacemos un cancel de la tabla por si el registro actual estuviera recien creado } TablaCitas.Cancel; Exit end; try TablaCitas.Delete; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; end; procedure TfrObra2.actEliminarEntregaUpdate(Sender: TObject); begin if VarIsNull(TablaObras.FieldByName('FECHAFIN').AsVariant) then (Sender as TAction).Enabled := (gridEntregasVista.Controller.SelectedRowCount > 0) else (Sender as TAction).Enabled := VarIsNull(TablaObras.FieldByName('FECHAFIN').AsVariant); end; procedure TfrObra2.actEliminarRemateUpdate(Sender: TObject); begin (Sender as TAction).Enabled := (gridRematesVista.Controller.SelectedRowCount > 0); end; procedure TfrObra2.actEliminarMontajeUpdate(Sender: TObject); begin (Sender as TAction).Enabled := (gridMontajesVista.Controller.SelectedRowCount > 0); end; procedure TfrObra2.actPrevisualizarExecute(Sender: TObject); begin Imprimir; end; procedure TfrObra2.Imprimir; var APartida : TPartidasObra; ATipoCita : TTipoCitas; Col, Row : Integer; i : Integer; Cadena : String; begin with FInformeEstadoObra do begin CodigoContrato := Self.FCodigoObra; for APartida := poCocina to poVarios do begin Proveedores[APartida] := JvStringGrid1.Cells[Ord(APartida)+1, 0]; for ATipoCita := tcPedido to tcEntregaCliente do begin Col := Ord(APartida); Row := Ord(ATipoCita) - Ord(tcPedido); Cadena := JvArrayButton1.Captions[(Row*JvArrayButton1.Cols)+Col]; if JvArrayButton1.Colors[(Row*JvArrayButton1.Cols)+Col] = ColorToString(dmConfiguracion.cxContentOdd.Color) then Cadena := '#' + Cadena; EstadoObra[APartida, ATipoCita] := Cadena; end; end; Imprimir; end; end; procedure TfrObra2.EditarCita(ID: Variant; bSoloLectura: Boolean); var AEvent : TcxSchedulerEvent; AControlEvent : TcxSchedulerControlEvent; AModified : Boolean; TareaFase: Boolean; dsAux : TDataSource; begin AEvent := cxSchedulerDBStorage.GetEventByID(ID); AControlEvent := TcxSchedulerControlEvent.Create(AEvent); try TareaFase := esCitaFase(AEvent.GetCustomFieldValueByName('TIPOTAREA')); if TareaFase then begin dsAux := cxSchedulerDBStorage.Resources.DataSource; cxSchedulerDBStorage.Resources.DataSource := NIL; end; if bSoloLectura then cxShowEventEditor(AControlEvent, CodigoContrato.Style.LookAndFeel, False, AModified, True, False) else cxShowEventEditor(AControlEvent, CodigoContrato.Style.LookAndFeel, False, AModified); if AModified then begin AEvent.Assign(AControlEvent); end; finally if TareaFase then cxSchedulerDBStorage.Resources.DataSource := dsAux; AControlEvent.Free; end; end; procedure TfrObra2.gridMontajesVistaDblClick(Sender: TObject); begin if gridMontajesVista.ViewData.RowCount > 0 then begin with TablaCitas do begin DisableControls; EditarCita(FieldByName('ID').AsVariant, False); gridMontajesVista.DataController.RefreshExternalData; EnableControls; end; end; end; procedure TfrObra2.gridRematesVistaDblClick(Sender: TObject); begin if gridRematesVista.ViewData.RowCount > 0 then begin with TablaCitas do begin DisableControls; EditarCita(FieldByName('ID').AsVariant, False); gridRematesVista.DataController.RefreshExternalData; EnableControls; end; end; end; {procedure TfrObra2.EditarCita(AEvent : TcxSchedulerEvent); var AControlEvent : TcxSchedulerControlEvent; AModified : Boolean; begin AControlEvent := TcxSchedulerControlEvent.Create(AEvent); try cxShowEventEditor(AControlEvent, CodigoContrato.Style.LookAndFeel, False, AModified); if AModified then begin AEvent.Assign(AControlEvent); AEvent.Post; end; finally AControlEvent.Free; end; end; } procedure TfrObra2.cxSchedulerDBStorageEventModified(Sender: TObject; AEvent: TcxSchedulerEvent; var AHandled: Boolean); begin // ShowMessage('Cambios'); end; procedure TfrObra2.DeshabilitarModificar; begin // FechaFin.Properties.ReadOnly := True; lblObraCerrada.Visible := True; Observaciones.Properties.ReadOnly := True; dsObrasInstaladores.Enabled := False; dsGastos.Enabled := False; JvStringGrid1.Enabled := False; end; procedure TfrObra2.HabilitarModificar; begin // FechaFin.Properties.ReadOnly := False; lblObraCerrada.Visible := False; Observaciones.Properties.ReadOnly := False; dsObrasInstaladores.Enabled := True; dsGastos.Enabled := True; JvStringGrid1.Enabled := True; end; procedure TfrObra2.actAnadirInstaladorUpdate(Sender: TObject); begin (Sender as TAction).Enabled := dsObrasInstaladores.Enabled; end; procedure TfrObra2.actEliminarInstaladorUpdate(Sender: TObject); begin (Sender as TAction).Enabled := dsObrasInstaladores.Enabled; end; procedure TfrObra2.actEliminarTodoInsUpdate(Sender: TObject); begin (Sender as TAction).Enabled := dsObrasInstaladores.Enabled; end; procedure TfrObra2.actAnadirGastoUpdate(Sender: TObject); begin (Sender as TAction).Enabled := dsGastos.Enabled; end; procedure TfrObra2.actEliminarGastoUpdate(Sender: TObject); begin (Sender as TAction).Enabled := dsGastos.Enabled; end; procedure TfrObra2.actEliminarTodoGasUpdate(Sender: TObject); begin (Sender as TAction).Enabled := dsGastos.Enabled; end; procedure TfrObra2.actAnadirEntregaUpdate(Sender: TObject); begin (Sender as TAction).Enabled := VarIsNull(TablaObras.FieldByName('FECHAFIN').AsVariant); end; procedure TfrObra2.InsertarCitaEntrega(const Opcion: Integer); var AControlEvent : TcxSchedulerControlEvent; AModified : Boolean; begin AControlEvent := TcxSchedulerControlEvent.Create(cxSchedulerDBStorage); with AControlEvent do begin BeginEditing; Start := Now; Finish := IncHour(Now); SetCustomFieldValueByName('TIPOTAREA', TextoTipoCita[Opcion]); SetCustomFieldValueByName('CODIGOCONTRATO', CodigoObra); EndEditing; end; try cxSchedulerDBStorage.Resources.DataSource := dsInstaladores; cxShowEventEditor(AControlEvent, CodigoContrato.Style.LookAndFeel, False, AModified); if AModified then AControlEvent.Post; finally AControlEvent.Free; end; end; procedure TfrObra2.InsertarCitaFase(Const Tipo:Integer; Const Col: Integer); var AControlEvent : TcxSchedulerControlEvent; AModified : Boolean; dsAux : TDataSource; begin AControlEvent := TcxSchedulerControlEvent.Create(cxSchedulerDBStorage); with AControlEvent do begin BeginEditing; Start := Now; Finish := IncHour(Now); Caption := LiteralPartidasObra[Col] + ' - ' + LiteralTipoCita[Tipo]; SetCustomFieldValueByName('TIPOTAREA', TextoTipoCita[Tipo]); SetCustomFieldValueByName('PARTIDA', TextoPartidasObra[Col]); SetCustomFieldValueByName('CODIGOCONTRATO', CodigoObra); EndEditing; end; try dsAux := cxSchedulerDBStorage.Resources.DataSource; cxSchedulerDBStorage.Resources.DataSource := NIL; cxShowEventEditor(AControlEvent, CodigoContrato.Style.LookAndFeel, False, AModified); if AModified then AControlEvent.Post; finally cxSchedulerDBStorage.Resources.DataSource := dsAux; AControlEvent.Free; end; end; procedure TfrObra2.JvStringGrid1ExitCell(Sender: TJvStringGrid; AColumn, ARow: Integer; const EditText: String); var Col : Integer; Row : integer; ConTexto : Boolean; begin if (JvArrayButton1.Captions.Count <> 0) then begin ConTexto := False; Col := AColumn - 1; for Row := 0 to (Ord(tcEntregaCliente) - Ord(tcPedido)) do ConTexto := ConTexto or not EsCadenaVacia(JvArrayButton1.Captions[(Row*JvArrayButton1.Cols)+Col]); if not ConTexto then begin Sender.Cells[AColumn, 0] := 'Antes debe hacer un pedido'; end; end; end; procedure TfrObra2.VistaPrevia; var APartida : TPartidasObra; ATipoCita : TTipoCitas; Col, Row : Integer; i : Integer; Cadena : String; begin with FInformeEstadoObra do begin CodigoContrato := Self.FCodigoObra; for APartida := poCocina to poVarios do begin Proveedores[APartida] := JvStringGrid1.Cells[Ord(APartida)+1, 0]; for ATipoCita := tcPedido to tcEntregaCliente do begin Col := Ord(APartida); Row := Ord(ATipoCita) - Ord(tcPedido); Cadena := JvArrayButton1.Captions[(Row*JvArrayButton1.Cols)+Col]; if JvArrayButton1.Colors[(Row*JvArrayButton1.Cols)+Col] = ColorToString(dmConfiguracion.cxContentOdd.Color) then Cadena := '#' + Cadena; EstadoObra[APartida, ATipoCita] := Cadena; end; end; Previsualizar; end; end; end.