package com.ejie.ab79.service.inspecciones;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.ejie.ab79.dao.inspecciones.AgrupacionesDao;
import com.ejie.ab79.model.inspecciones.Agrupaciones;
import com.ejie.x38.dto.TableRequestDto;
import com.ejie.x38.dto.TableResponseDto;

/**
 * AgrupacionesServiceImpl  
 * 
 *  
 */

@Service(value = "agrupacionesService")
public class AgrupacionesServiceImpl implements AgrupacionesService {

	@Autowired
	private AgrupacionesDao agrupacionesDao;

	/**
	 * Inserts a single row in the Agrupaciones table.
	 *
	 * @param agrupaciones
	 *            Agrupaciones
	 * @return Agrupaciones
	 */
	@Transactional(rollbackFor = Throwable.class)
	public Agrupaciones add(Agrupaciones agrupaciones) {
		return this.agrupacionesDao.add(agrupaciones);
	}

	/**
	 * Updates a single row in the Agrupaciones table.
	 *
	 * @param agrupaciones
	 *            Agrupaciones
	 * @return Agrupaciones
	 */
	@Transactional(rollbackFor = Throwable.class)
	public Agrupaciones update(Agrupaciones agrupaciones) {
		return this.agrupacionesDao.update(agrupaciones);
	}

	/**
	 * Finds a single row in the Agrupaciones table.
	 *
	 * @param agrupaciones
	 *            Agrupaciones
	 * @return Agrupaciones
	 */
	public Agrupaciones find(Agrupaciones agrupaciones) {
		return (Agrupaciones) this.agrupacionesDao.find(agrupaciones);
	}

	/**
	 * Deletes a single row in the Agrupaciones table.
	 *
	 * @param agrupaciones
	 *            Agrupaciones
	 */
	@Transactional(rollbackFor = Throwable.class)
	public void remove(Agrupaciones agrupaciones) {
		this.agrupacionesDao.remove(agrupaciones);
	}

	/**
	 * Finds a list of rows in the Agrupaciones table.
	 *
	 * @param agrupaciones
	 *            Agrupaciones
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @return List<Agrupaciones>
	 */
	public List<Agrupaciones> findAll(Agrupaciones agrupaciones, TableRequestDto tableRequestDto) {
		return (List<Agrupaciones>) this.agrupacionesDao.findAll(agrupaciones, tableRequestDto);
	}

	/**
	 * Finds rows in the Agrupaciones table using like.
	 *
	 * @param agrupaciones
	 *            Agrupaciones
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return List<Agrupaciones>
	 */
	public List<Agrupaciones> findAllLike(Agrupaciones agrupaciones, TableRequestDto tableRequestDto,
			Boolean startsWith) {
		return (List<Agrupaciones>) this.agrupacionesDao.findAllLike(agrupaciones, tableRequestDto, startsWith);
	}

	/**
	 * Filter method in the Agrupaciones table.
	 *
	 * @param filterAgrupaciones
	 *            Agrupaciones
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return TableResponseDto<Agrupaciones>
	 */
	public TableResponseDto<Agrupaciones> filter(Agrupaciones filterAgrupaciones, TableRequestDto tableRequestDto,
			Boolean startsWith) {
		List<Agrupaciones> listaAgrupaciones = this.agrupacionesDao.findAllLike(filterAgrupaciones, tableRequestDto,
				false);
		Long recordNum = this.agrupacionesDao
				.findAllLikeCount(filterAgrupaciones != null ? filterAgrupaciones : new Agrupaciones(), false);

		TableResponseDto<Agrupaciones> usuarioDto = new TableResponseDto<Agrupaciones>(tableRequestDto, recordNum,
				listaAgrupaciones);
		return usuarioDto;
	}

}
