package br.gov.serpro.treino.business.implementation;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import br.gov.serpro.treino.bean.Obra;
import br.gov.serpro.treino.business.IProjectBC;
import br.gov.serpro.treino.exception.ErrorMessage;
import br.gov.serpro.treino.exception.TestGridException;
import br.gov.serpro.treino.persistence.dao.IProjectDAO;
import br.gov.serpro.treino.persistence.dao.implementation.ProjectDAO;
public class ProjectBC implements IProjectBC {
private static final long serialVersionUID = 1L;
private IProjectDAO projetoDAO = new ProjectDAO();
/**
* Insere projeto verificando se ha alguma duplicidade
*/
public Obra insert(Obra project) {
return projetoDAO.save(project);
}
public void update(Obra project) {
project.setAtualizacao(new Date());
projetoDAO.merge(project);
}
public List<Obra> list() {
return projetoDAO.list();
}
public void delete(Obra project) {
project = projetoDAO.load(project);
projetoDAO.remove(project);
}
public Obra findProject(Obra project) {
return projetoDAO.load(project);
}
public Obra load(Long id) {
Obra p = new Obra();
p.setId(id);
return projetoDAO.load(p);
}
public synchronized void enviarProposta(Obra _obra, Double novoValor, Date novoPrazo, String username) {
Obra obra = projetoDAO.load(_obra);
if (novoValor.compareTo(obra.getValor()) >= 0){
DecimalFormat df = new DecimalFormat("R$ #,##0.00");
String[] param = {"Valor", df.format(novoValor)};
throw new TestGridException(ErrorMessage.PROPOSTA_RECUSADA, param);
}
if (novoPrazo.compareTo(obra.getPrazo()) >= 0){
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
String[] param = {"Prazo", format.format(novoPrazo)};
throw new TestGridException(ErrorMessage.PROPOSTA_RECUSADA, param);
}
obra.setValor(novoValor);
obra.setPrazo(novoPrazo);
obra.setVencedor(username);
update(obra);
}
public void clean() {
Calendar calendar = GregorianCalendar.getInstance();
calendar.set(Calendar.YEAR, 2014);
calendar.set(Calendar.MONTH, 6);
calendar.set(Calendar.DAY_OF_MONTH, 30);
for(Obra obra : projetoDAO.list()){
obra.setVencedor("");
obra.setPrazo(calendar.getTime());
obra.setValor(100000.00);
update(obra);
}
}
}