package com.ejie.ab79.service.inspecciones;

import com.ejie.ab79.dao.inspecciones.OrigenesInspeccionDao;
import com.ejie.ab79.model.inspecciones.OrigenesInspeccion;
import com.ejie.x38.dto.JerarquiaDto;
import com.ejie.x38.dto.TableRequestDto;
import com.ejie.x38.dto.TableResponseDto;
import com.ejie.x38.dto.TableRowDto;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * OrigenesInspeccionServiceImpl  
 * 
 *  
 */

@Service(value = "origenesInspeccionService")
public class OrigenesInspeccionServiceImpl implements OrigenesInspeccionService {

	@Autowired
	private OrigenesInspeccionDao origenesInspeccionDao;

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

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

	/**
	 * Finds a single row in the OrigenesInspeccion table.
	 *
	 * @param origenesInspeccion
	 *            OrigenesInspeccion
	 * @return OrigenesInspeccion
	 */
	public OrigenesInspeccion find(OrigenesInspeccion origenesInspeccion) {
		return (OrigenesInspeccion) this.origenesInspeccionDao.find(origenesInspeccion);
	}

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

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

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

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Removes rows from the OrigenesInspeccion table.
	 *
	 * @param filterOrigenesInspeccion
	 *            OrigenesInspeccion
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @param startsWith
	 *            Boolean
	 */
	public void removeMultiple(OrigenesInspeccion filterOrigenesInspeccion, TableRequestDto tableRequestDto,
			Boolean startsWith) {
		this.origenesInspeccionDao.removeMultiple(filterOrigenesInspeccion, tableRequestDto, startsWith);
	}

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

		TableResponseDto<OrigenesInspeccion> usuarioDto = new TableResponseDto<OrigenesInspeccion>(tableRequestDto,
				recordNum, listaOrigenesInspeccion);

		if (tableRequestDto.getMultiselection().getSelectedIds() != null) {
			List<TableRowDto<OrigenesInspeccion>> reorderSelection = this.origenesInspeccionDao
					.reorderSelection(filterOrigenesInspeccion, tableRequestDto, startsWith);
			usuarioDto.setReorderedSelection(reorderSelection);
			usuarioDto.addAdditionalParam("reorderedSelection", reorderSelection);
			usuarioDto.addAdditionalParam("selectedAll", tableRequestDto.getMultiselection().getSelectedAll());
		}
		if (tableRequestDto.getSeeker().getSelectedIds() != null) {
			tableRequestDto.setMultiselection(tableRequestDto.getSeeker());
			List<TableRowDto<OrigenesInspeccion>> reorderSeeker = this.origenesInspeccionDao
					.reorderSelection(filterOrigenesInspeccion, tableRequestDto, startsWith);
			usuarioDto.setReorderedSeeker(reorderSeeker);
			usuarioDto.addAdditionalParam("reorderedSeeker", reorderSeeker);
		}
		return usuarioDto;
	}

	/**
	 * Searches rows in the OrigenesInspeccion table.
	 *
	 * @param filterOrigenesInspeccion
	 *            OrigenesInspeccion
	 * @param searchOrigenesInspeccion
	 *            OrigenesInspeccion
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return List<TableRowDto<OrigenesInspeccion>>
	 */
	public List<TableRowDto<OrigenesInspeccion>> search(OrigenesInspeccion filterOrigenesInspeccion,
			OrigenesInspeccion searchOrigenesInspeccion, TableRequestDto tableRequestDto, Boolean startsWith) {
		return this.origenesInspeccionDao.search(filterOrigenesInspeccion, searchOrigenesInspeccion, tableRequestDto,
				startsWith);
	}

	/**
	 * Reorder the selection made in OrigenesInspeccion table.
	 *
	 * @param filterOrigenesInspeccion
	 *            OrigenesInspeccion
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return Object
	 */
	public Object reorderSelection(OrigenesInspeccion filterOrigenesInspeccion, TableRequestDto tableRequestDto,
			Boolean startsWith) {
		return this.origenesInspeccionDao.reorderSelection(filterOrigenesInspeccion, tableRequestDto, startsWith);
	}

	/*
	 * OPERACIONES RUP_TABLE JERARQUIA
	 */

	/**
	 * Finder method in the hierarchical the OrigenesInspeccion table.
	 *
	 * @param filterOrigenesInspeccion
	 *            OrigenesInspeccion
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return TableResponseDto<JerarquiaDto<OrigenesInspeccion>>
	 */
	public TableResponseDto<JerarquiaDto<OrigenesInspeccion>> jerarquia(OrigenesInspeccion filterOrigenesInspeccion,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		List<JerarquiaDto<OrigenesInspeccion>> listaOrigenesInspeccion = this.origenesInspeccionDao
				.findAllLikeJerarquia(filterOrigenesInspeccion, tableRequestDto);
		Long recordNum = this.origenesInspeccionDao.findAllLikeCountJerarquia(filterOrigenesInspeccion,
				tableRequestDto);
		return new TableResponseDto<JerarquiaDto<OrigenesInspeccion>>(tableRequestDto, recordNum,
				listaOrigenesInspeccion);
	}

	/**
	 * Finder method for siblings rows in the hierarchical the
	 * OrigenesInspeccion table.
	 *
	 * @param filterOrigenesInspeccion
	 *            OrigenesInspeccion
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @return TableResponseDto<JerarquiaDto<OrigenesInspeccion>>
	 */
	public TableResponseDto<JerarquiaDto<OrigenesInspeccion>> jerarquiaChildren(
			OrigenesInspeccion filterOrigenesInspeccion, TableRequestDto tableRequestDto) {
		TableResponseDto<JerarquiaDto<OrigenesInspeccion>> tableResponseDto = new TableResponseDto<JerarquiaDto<OrigenesInspeccion>>();
		tableResponseDto.addAdditionalParam(TableResponseDto.CHILDREN,
				this.origenesInspeccionDao.findAllChild(filterOrigenesInspeccion, tableRequestDto));
		return tableResponseDto;
	}

	/**
	 * Exporta Datos al clipBoard
	 *
	 */
	public List<OrigenesInspeccion> getMultiple(OrigenesInspeccion filterOrigenesInspeccion,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		return this.origenesInspeccionDao.getMultiple(filterOrigenesInspeccion, tableRequestDto, startsWith);
	}

}
