/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.service.impl;

import java.util.Calendar;
import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.rjconsultores.ventaboletos.dao.FormaPagoDAO;
import com.rjconsultores.ventaboletos.entidad.FormaPago;
import com.rjconsultores.ventaboletos.service.FormaPagoService;
import com.rjconsultores.ventaboletos.service.LogAuditoriaService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;

/**
 *
 * @author Administrador
 */
@Service("formaPagoService")
public class FormaPagoServiceImpl implements FormaPagoService {

    private Integer[] formasPagoEspeciales = {4, 5, 6, 9, 10, 11, 96, 97, 98, 99};
    
    @Autowired
    private FormaPagoDAO formaPagoDAO;
	private static Logger log = LogManager.getLogger(PuntoVentaServiceImpl.class);
	@Autowired
	private LogAuditoriaService logAuditoriaService;


    public List<FormaPago> obtenerTodos() {
        return formaPagoDAO.obtenerTodos();
    }

    public FormaPago obtenerID(Short id) {
    	

    	FormaPago formaPago = formaPagoDAO.obtenerID(id);

		try {
			formaPago.clonar();
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		}
		return formaPago;
		
    }

    @Transactional
    public FormaPago suscribir(FormaPago entidad) {
        entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
        entidad.setFecmodif(Calendar.getInstance().getTime());
        entidad.setActivo(Boolean.TRUE);
        
		
        formaPagoDAO.suscribir(entidad);
        logAuditoriaService.auditar(null, entidad, null);
        
        return entidad;
    }

    @Transactional
    public FormaPago actualizacion(FormaPago entidad) {
    	
    	FormaPago originalClone = null;
		try {
			originalClone = entidad.getCloneObject();
		} catch (CloneNotSupportedException e) {
			log.error(e.getMessage(), e);
		}
    	
        entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
        entidad.setFecmodif(Calendar.getInstance().getTime());
        entidad.setActivo(Boolean.TRUE);
		
        formaPagoDAO.actualizacion(entidad);
        logAuditoriaService.auditar(originalClone, entidad, -1);
       
        return entidad;
    }

    @Transactional
    public void borrar(FormaPago entidad) {
        entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
        entidad.setFecmodif(Calendar.getInstance().getTime());
        entidad.setActivo(Boolean.FALSE);

        formaPagoDAO.actualizacion(entidad);
        logAuditoriaService.auditarExclusao(entidad,  null);
    }

    public List<FormaPago> buscarPorDescricao(String descpago) {
        return formaPagoDAO.buscarPorDescricao(descpago);
    }
    
    public List<FormaPago> buscarFormasPagoExceptoEspeciales() {
        return formaPagoDAO.buscarTodosExceto(formasPagoEspeciales);
    }
    
    public List<FormaPago> buscarNotIn(Short... idFormaPago) {
        return formaPagoDAO.buscarNotIn(idFormaPago);
    }
    
    public List<FormaPago> buscarIn(Short... idFormaPago) {
        return formaPagoDAO.buscarIn(idFormaPago);
    }
}
