package fr.chantier.service;
import fr.chantier.dao.CommandesDAO;
import fr.chantier.model.ClientsEntity;
import fr.chantier.model.CommandesEntity;
import fr.chantier.model.HistoriqueHeuresEntity;
import fr.chantier.model.HistoriqueSommeEntity;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.SimpleExpression;
import org.hibernate.criterion.Criterion;
import java.util.Collection;
import java.util.Date;
/**
* Created by IntelliJ IDEA.
* User: sora
* Date: Oct 27, 2008
* Time: 6:07:51 PM
* To change this template use File | Settings | File Templates.
*/
public interface CommandesManager extends GenericManager<CommandesEntity, Integer, CommandesDAO> {
/**
* Ajoute une heure travaillee a la commande
*
* @param historiqueHeuresEntity Heure travaillee
* @param commandesEntity Commande concernee
* @return
*/
CommandesEntity addHistoriqueHeuresToCommandes(HistoriqueHeuresEntity historiqueHeuresEntity, CommandesEntity commandesEntity);
/**
* Retire une heure de la commande
*
* @param historiqueHeuresEntity
* @param commandesEntity
* @return
*/
CommandesEntity removeHistoriqueHeuresToCommandes(HistoriqueHeuresEntity historiqueHeuresEntity, CommandesEntity commandesEntity);
/**
* Ajoute une somme affecte a un sous-traitants
*
* @param historiqueSommeEntity Somme affectee
* @param commandesEntity Commande concernee
* @return La commande persiste
*/
CommandesEntity addHistoriqueSommeToCommandes(HistoriqueSommeEntity historiqueSommeEntity, CommandesEntity commandesEntity);
/**
* Retire une somme de la commande
*
* @param historiqueSommeEntity Somme affectee
* @param commandesEntity Commande concernee
* @return La commande persiste
*/
CommandesEntity removeHistoriqueSommeToCommandes(HistoriqueSommeEntity historiqueSommeEntity, CommandesEntity commandesEntity);
/**
* Recupere la somme des heures pour la commande donnee
*
* @param commandesEntity Commande a traiter
* @return Somme des heures
*/
Float getSumOfHoursByCommandes(CommandesEntity commandesEntity);
/**
* Recupere la somme des couts de sous-traitants pour la commande donnee
*
* @param commandesEntity Commande a traiter
* @return Somme des couts des sous-traitants
*/
Float getSumOfCostByCommandes(CommandesEntity commandesEntity);
/**
* Recupere le cout total des intervenants
*
* @param commandesEntity
* @return
*/
Float getCostOfIntervenants(CommandesEntity commandesEntity);
/**
* Recupere le cout totat des sous-traitants
*
* @param commandesEntity
* @return
*/
Float getCostOfSousTraitants(CommandesEntity commandesEntity);
/**
* Finalise la commande selon l'etat du boolean
*
* @param commandesEntity Commande a traiter
* @param finaliser Finaliser la commande ou non
* @return Commande persiste
*/
CommandesEntity finaliserCommande(CommandesEntity commandesEntity, boolean finaliser);
/**
* Recupere le cout reel de la commande
*
* @param commandesEntity
* @return
*/
Float getRealCost(CommandesEntity commandesEntity);
/**
* Recupere le resultat final
*
* @param commandesEntity
* @return
*/
Float getResult(CommandesEntity commandesEntity);
/**
* Recupere la somme des devis de la liste de commande
*
* @param commandesEntityCollection
* @return
*/
Float getSumDevis(Collection<CommandesEntity> commandesEntityCollection);
/**
* Recupere la somme des couts reels de ces commandes
*
* @param commandesEntityCollection
* @return
*/
Float getSumRealCost(Collection<CommandesEntity> commandesEntityCollection);
/**
* Recupere la somme des resultat de ces commandes
*
* @param commandesEntityCollection
* @return
*/
Float getSumResult(Collection<CommandesEntity> commandesEntityCollection);
/**
* Recupere la liste des commandes correspondant a la recherche donne
*
* @param order
* @param typeFinalise
* @param dateBefore
* @return
*/
Collection<CommandesEntity> findByCriterions(ClientsEntity clientsEntity, Order order, Criterion typeFinalise, Date dateBefore);
/**
* Cherche par l'identifiant
*
* @param integer
* @return
*/
CommandesEntity findById(Integer integer);
/**
* Cherche par les criteres donnes
* @param order
* @return
*/
Collection<CommandesEntity> findNonFinaliseAndMonth(Order order);
}