<commit_before>/**
 * Copyright (c) 2016, <NAME> - <NAME>
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */
package proy.datos.entidades;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ForeignKey;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.Version;

import proy.comun.FormateadorString;
import proy.datos.clases.EstadoStr;
import proy.datos.clases.EstadoTareaStr;

@NamedQueries(value = {
		@NamedQuery(name = "listarProcesos", query = "SELECT p FROM Proceso p WHERE p.estado.nombre = :est ORDER BY p.descripcion , p.tipo"),
		@NamedQuery(name = "listarDescripcionesProcesos", query = "SELECT DISTINCT p.descripcion FROM Proceso p WHERE p.estado.nombre = :est ORDER BY p.descripcion"),
		@NamedQuery(name = "listarTiposProcesos", query = "SELECT DISTINCT p.tipo FROM Proceso p WHERE p.estado.nombre = :est ORDER BY p.tipo")
})
@Entity
@Table(name = "proceso")
public class Proceso {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "codigo")
	private Long codigo;

	@Version
	@Column(name = "version")
	private Long version;

	@Column(name = "descripcion", length = 100)
	private String descripcion;

	@Column(name = "tiempo_proc")
	private Long tiempoTeoricoProceso;

	@Column(name = "tiempo_prep")
	private Long tiempoTeoricoPreparacion;

	@Column(name = "observaciones", length = 500)
	private String observaciones;

	@Column(name = "tipo", length = 100)
	private String tipo;

	@ManyToOne(fetch = FetchType.EAGER, optional = false)
	@JoinColumn(name = "codestado", referencedColumnName = "codigo", foreignKey = @ForeignKey(name = "proceso_codestado_fk"), nullable = false)
	private Estado estado;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "codparte", referencedColumnName = "codigo", foreignKey = @ForeignKey(name = "proceso_codparte_fk"), nullable = false)
	private Parte parte;

	@ManyToMany(fetch = FetchType.EAGER)
	@JoinTable(name = "pieza_proceso", joinColumns = @JoinColumn(name = "codproceso"), foreignKey = @ForeignKey(name = "pieza_proceso_codproceso_fk"), inverseJoinColumns = @JoinColumn(name = "codpieza"), inverseForeignKey = @ForeignKey(name = "pieza_proceso_codpieza_fk"))
	private Set<Pieza> piezas;

	@ManyToMany(fetch = FetchType.EAGER)
	@JoinTable(name = "herramienta_proceso", joinColumns = @JoinColumn(name = "codproceso"), foreignKey = @ForeignKey(name = "herramienta_proceso_codproceso_fk"), inverseJoinColumns = @JoinColumn(name = "codherramienta"), inverseForeignKey = @ForeignKey(name = "herramienta_proceso_codherramienta_fk"))
	private Set<Herramienta> herramientas;

	@ManyToMany(mappedBy = "proceso", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private Set<Tarea> tareas;

	@Transient
	private FormateadorString formater = new FormateadorString();

	public Proceso() {
		super();
		herramientas = new HashSet<>();
		piezas = new HashSet<>();
		estado = new Estado(EstadoStr.ALTA);
		tareas = new HashSet<>();
	}

	public Long getId() {
		return codigo;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public Long getTiempoTeoricoProceso() {
		return tiempoTeoricoProceso;
	}

	public void setTiempoTeoricoProceso(Long tiempoTeoricoProceso) {
		this.tiempoTeoricoProceso = tiempoTeoricoProceso;
	}

	public Long getTiempoTeoricoPreparacion() {
		return tiempoTeoricoPreparacion;
	}

	public void setTiempoTeoricoPreparacion(Long tiempoTeoricoPreparacion) {
		this.tiempoTeoricoPreparacion = tiempoTeoricoPreparacion;
	}

	public String getObservaciones() {
		return observaciones;
	}

	public void setObservaciones(String observaciones) {
		this.observaciones = observaciones;
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	public Parte getParte() {
		return parte;
	}

	public void setParte(Parte parte) {
		this.parte = parte;
	}

	public Set<Pieza> getPiezas() {
		piezas.size();
		return piezas;
	}

	public Set<Herramienta> getHerramientas() {
		herramientas.size();
		return herramientas;
	}

	public Set<Tarea> getTareas() {
		tareas.size();
		return tareas;
	}

	public void darDeBaja() {
		this.setEstado(new Estado(EstadoStr.BAJA));
	}

	public Long getTiempoPromedioProceso() {
		Long suma = 0L;
		Integer cantidadTareas = 0;
		for(Tarea t: this.getTareas()){
			if(EstadoTareaStr.FINALIZADA.equals(t.getEstado().getNombre())){
				suma += t.getTiempoEjecutando();
				cantidadTareas += t.getCantidadReal();<commit_msg>Corregido cálculo de tiempo promedio real de proceso<commit_after>/**
 * Copyright (c) 2016, <NAME> - <NAME>
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */
package proy.datos.entidades;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ForeignKey;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.Version;

import proy.comun.FormateadorString;
import proy.datos.clases.EstadoStr;
import proy.datos.clases.EstadoTareaStr;

@NamedQueries(value = {
		@NamedQuery(name = "listarProcesos", query = "SELECT p FROM Proceso p WHERE p.estado.nombre = :est ORDER BY p.descripcion , p.tipo"),
		@NamedQuery(name = "listarDescripcionesProcesos", query = "SELECT DISTINCT p.descripcion FROM Proceso p WHERE p.estado.nombre = :est ORDER BY p.descripcion"),
		@NamedQuery(name = "listarTiposProcesos", query = "SELECT DISTINCT p.tipo FROM Proceso p WHERE p.estado.nombre = :est ORDER BY p.tipo")
})
@Entity
@Table(name = "proceso")
public class Proceso {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "codigo")
	private Long codigo;

	@Version
	@Column(name = "version")
	private Long version;

	@Column(name = "descripcion", length = 100)
	private String descripcion;

	@Column(name = "tiempo_proc")
	private Long tiempoTeoricoProceso;

	@Column(name = "tiempo_prep")
	private Long tiempoTeoricoPreparacion;

	@Column(name = "observaciones", length = 500)
	private String observaciones;

	@Column(name = "tipo", length = 100)
	private String tipo;

	@ManyToOne(fetch = FetchType.EAGER, optional = false)
	@JoinColumn(name = "codestado", referencedColumnName = "codigo", foreignKey = @ForeignKey(name = "proceso_codestado_fk"), nullable = false)
	private Estado estado;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "codparte", referencedColumnName = "codigo", foreignKey = @ForeignKey(name = "proceso_codparte_fk"), nullable = false)
	private Parte parte;

	@ManyToMany(fetch = FetchType.EAGER)
	@JoinTable(name = "pieza_proceso", joinColumns = @JoinColumn(name = "codproceso"), foreignKey = @ForeignKey(name = "pieza_proceso_codproceso_fk"), inverseJoinColumns = @JoinColumn(name = "codpieza"), inverseForeignKey = @ForeignKey(name = "pieza_proceso_codpieza_fk"))
	private Set<Pieza> piezas;

	@ManyToMany(fetch = FetchType.EAGER)
	@JoinTable(name = "herramienta_proceso", joinColumns = @JoinColumn(name = "codproceso"), foreignKey = @ForeignKey(name = "herramienta_proceso_codproceso_fk"), inverseJoinColumns = @JoinColumn(name = "codherramienta"), inverseForeignKey = @ForeignKey(name = "herramienta_proceso_codherramienta_fk"))
	private Set<Herramienta> herramientas;

	@ManyToMany(mappedBy = "proceso", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private Set<Tarea> tareas;

	@Transient
	private FormateadorString formater = new FormateadorString();

	public Proceso() {
		super();
		herramientas = new HashSet<>();
		piezas = new HashSet<>();
		estado = new Estado(EstadoStr.ALTA);
		tareas = new HashSet<>();
	}

	public Long getId() {
		return codigo;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public Long getTiempoTeoricoProceso() {
		return tiempoTeoricoProceso;
	}

	public void setTiempoTeoricoProceso(Long tiempoTeoricoProceso) {
		this.tiempoTeoricoProceso = tiempoTeoricoProceso;
	}

	public Long getTiempoTeoricoPreparacion() {
		return tiempoTeoricoPreparacion;
	}

	public void setTiempoTeoricoPreparacion(Long tiempoTeoricoPreparacion) {
		this.tiempoTeoricoPreparacion = tiempoTeoricoPreparacion;
	}

	public String getObservaciones() {
		return observaciones;
	}

	public void setObservaciones(String observaciones) {
		this.observaciones = observaciones;
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	public Parte getParte() {
		return parte;
	}

	public void setParte(Parte parte) {
		this.parte = parte;
	}

	public Set<Pieza> getPiezas() {
		piezas.size();
		return piezas;
	}

	public Set<Herramienta> getHerramientas() {
		herramientas.size();
		return herramientas;
	}

	public Set<Tarea> getTareas() {
		tareas.size();
		return tareas;
	}

	public void darDeBaja() {
		this.setEstado(new Estado(EstadoStr.BAJA));
	}

	public Long getTiempoPromedioProceso() {
		Long suma = 0L, tiempoTotalEjecutando, tiempoTeoricoPreparacion, tiempoSinPreparacionEjecutando;
		Integer cantidadTareas = 0, cantidadRealizada;
		for(Tarea t: this.getTareas()){
			if(EstadoTareaStr.FINALIZADA.equals(t.getEstado().getNombre())){
				tiempoTotalEjecutando = t.getTiempoEjecutando();
				tiempoTeoricoPreparacion = getTiempoTeoricoPreparacion();
				tiempoSinPreparacionEjecutando = tiempoTotalEjecutando - tiempoTeoricoPreparacion;
				cantidadRealizada = t.getCantidadReal();
				cantidadTareas += cantidadRealizada;
				suma += tiempoSinPreparacionEjecutando + tiempoTeoricoPreparacion * cantidadRealizada;
{'fraction_non_alphanumeric': 0.11009589288945178, 'fraction_numerical': 0.0034376696218563416, 'mean_word_length': 5.537551744529864, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '407181', 'n_tokens_mistral': 4100, 'n_tokens_neox': 3927, 'n_words': 827}