Package projekt.teama.reservierung

Source Code of projekt.teama.reservierung.ReservationManager

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package projekt.teama.reservierung;

import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import projekt.fhv.teama.classes.leistungen.IZusatzleistung;
import projekt.fhv.teama.classes.personen.IAdresse;
import projekt.fhv.teama.classes.personen.IGast;
import projekt.fhv.teama.classes.personen.ILand;
import projekt.fhv.teama.classes.zimmer.*;
import projekt.fhv.teama.hibernate.dao.leistungen.IZusatzleistungDao;
import projekt.fhv.teama.hibernate.dao.leistungen.LeistungDao;
import projekt.fhv.teama.hibernate.dao.leistungen.ZusatzleistungDao;
import projekt.fhv.teama.hibernate.dao.personen.*;
import projekt.fhv.teama.hibernate.dao.zimmer.*;
import projekt.fhv.teama.hibernate.exceptions.DatabaseException;
import projekt.fhv.teama.model.ModelZimmer;
import projekt.teama.reservierung.wrapper.CategoryWrapper;
import projekt.teama.reservierung.wrapper.CountryWrapper;
import projekt.teama.reservierung.wrapper.PackageWrapper;

/**
*
* @author Team-A
* Erstellt am 26.05.2012
* Bean zur steuerung des Reservierungs UseCases
*/
@ManagedBean
@SessionScoped
public class ReservationManager implements Serializable {

    //<editor-fold defaultstate="collapsed" desc="Fields und co">
    //Zeitraum
    private String arrival;
    private String departure;
    //Gastdaten
    private IGast guest;
    private IAdresse address;
    private Integer country;
    //Packete
    private Integer packageID = null;
    //Sonstiges
    private SimpleDateFormat dateformatter = new SimpleDateFormat("dd/MM/yyyy");
    // fuer alle kategorien ein element mit kategorienamen und anzahl der freien zimmer
    private List<CategoryWrapper> categories = null;
    //Fuer den Hund
    private boolean pet = false;
    // fuer schritt 3
    private double totalCosts;
    private long days;
    private HttpSession session;

    //</editor-fold>
   
    //<editor-fold defaultstate="collapsed" desc="Konstuktoren">
    public ReservationManager() {
       
        this.address = null;
        this.country = null;
        this.guest = null;
        this.arrival = "";
        this.departure = "";
        this.packageID = null;
        this.pet = false;
             
          
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
        this.session = ((HttpServletRequest) request).getSession();

    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Timespan für den Aufenhalt">
    /**
     * Getter fuer das Anreisedatum
     * @return String
     */
    public String getArrival() {
        return arrival;
    }
    /**
     * Settter fuer das Anreisedatum
     * @param arrival
     */
    public void setArrival(String arrival) {
        this.arrival = arrival;
    }
    /**
     * Getter fuer das Abreisedatum
     * @return String
     */
    public String getDeparture() {
        return departure;
    }
    /**
     * Setter fuer das Abreisedatum
     * @param departure
     */
    public void setDeparture(String departure) {
        this.departure = departure;
    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Zusatzleistungen">
    /**
     * Getter fuer die PaketeID
     * @return Integer
     */
    public Integer getPackageID() {
        return packageID;
    }
    /**
     * Getter fuer die PacketID
     * @param packageID
     */
    public void setPackageID(Integer packageID) {
        this.packageID = packageID;
    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Dog">
    /**
     * Getter fuer die Haustiere
     * @return boolean
     */
    public boolean getPet() {
        return pet;
    }
    /**
     * Setter fuer die Haustiere
     * @param pet
     */
    public void setPet(boolean pet) {
        this.pet = pet;
    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Schritte">
    /**
     * Methode fuer die Weiterleitung zum ersten Schritt
     * @return String
     */
    public String stepOne() {
        clearAttributes();
        return "reservation";
    }
    /**
     * Methode fuer die Weiterleitung zum zweiten Schritt
     * @return String
     */
    public String stepTwo() {
        clearAttributes();
        if (checkDate()) {
            return "reservation2";
        } else {
            this.session.setAttribute("DateError", true);
            return "reservation";
        }
    }
    /**
     * Methode fuer die Weiterleitung zum dritten Schritt
     * @return String
     */
    public String stepThree() {
        clearAttributes();
        if (testIfRoomSelected()) {
            calcTotalCosts();
            return "reservation3";
        } else {
            this.session.setAttribute("NoRoomSelected", true);
            return "reservation2";
        }
    }
    /**
     * Methode fuer die Weiterleitung zum letzten Schritt
     * @return String
     */
    public String finish() {
        clearAttributes();
        if (saveReservationInDB()) {
            if(new Email().sendMail(this.guest,this.categories,this.pet,this.getPackage(),this.arrival,this.departure,this.address,this.getLand(),this.totalCosts))
            {
            this.session.setAttribute("Confirmed", true);
            return "reservation3";
            }
            else
            {
               session.setAttribute("ErrorMail", true);
               return "reservation3";
            }
        } else {
            session.setAttribute("ErrorSave", true);
            return "reservation3";
        }
    }

    //</editor-fold>
   
    //<editor-fold defaultstate="collapsed" desc="Methode um Daten aus der DB zu holen">
    /**
     * Methode um die Kategorien aus der Datenbank zu erhalten
     * @return List<CategoryWrapper>
     */
    public List<CategoryWrapper> getCategories() {
        if (categories == null) {
            categories = new Vector<CategoryWrapper>();
            IZimmerpreisDao zpDao = ZimmerpreisDao.getInstance();
            try {
                for (IKategorie category : KategorieDao.getInstance().getAll()) {
                    List<IZimmerpreis> zimmerpreise = new Vector<IZimmerpreis>(zpDao.getAll());
                    float preisOfKategorie = 0.0f;
                    for (IZimmerpreis preis : zimmerpreise) {
                        if (preis.getKategorie().equals(category)) {
                            preisOfKategorie = preis.getPreis();
                        }
                    }
                    categories.add(new CategoryWrapper(category, 0, getAvailableRooms(category), preisOfKategorie));
                }
            } catch (DatabaseException ex) {
                Logger.getLogger(ReservationManager.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return categories;
    }
    /**
     * Methode um die verfuegbaren Zimmeranzahl fuer eine Kategorie zu erhalten
     * @param category
     * @return Integer
     */
    public Integer getAvailableRooms(IKategorie category) {
        try {
            java.sql.Date ar = new java.sql.Date(dateformatter.parse(dateAdapter(getArrival())).getTime());
            java.sql.Date de = new java.sql.Date(dateformatter.parse(dateAdapter(getDeparture())).getTime());
            ModelZimmer modelzimmer = new ModelZimmer();
            return modelzimmer.getVerfuegbareZimmer(category, ar, de).size();

        } catch (ParseException ex) {
            return 0;
        } catch (DatabaseException e) {
            return 0;
        }
    }
    /**
     * Methode um alle Laender aus der DB zu holen
     * @return List<CountryWrapper>
     */
    public List<CountryWrapper> getCountries() {
        ILandDao landDao = LandDao.getInstance();
        List<ILand> countriesInDatabase = new Vector<ILand>();
        List<CountryWrapper> countries = new Vector<CountryWrapper>();
        try {
            countriesInDatabase = new Vector<ILand>(landDao.getAll());
            for (ILand country : countriesInDatabase) {
                countries.add(new CountryWrapper(country.getID(), country.getBezeichnung()));
            }
            return countries;
        } catch (DatabaseException ex) {
            return countries;
        }
    }
    /**
     * Methode um Pakete wie Vollpension und Ko aus der DB zu holen
     * @return List<PackageWrapper>
     */
    public List<PackageWrapper> getPackages() {
        IZusatzleistungDao zbDao = ZusatzleistungDao.getInstance();
        List<IZusatzleistung> packagesInDatabase = new Vector<IZusatzleistung>();
        List<PackageWrapper> packages = new Vector<PackageWrapper>();
        try {
            packagesInDatabase = new Vector<IZusatzleistung>(zbDao.getAll());
            for (IZusatzleistung p : packagesInDatabase) {
                if (p.getWarengruppe().getID() == 11) {
                    packages.add(new PackageWrapper(p, p.getID(), p.getBezeichnung()));
                }
            }
            return packages;
        } catch (DatabaseException ex) {
            return packages;
        }
    }

    //</editor-fold>
   
    //<editor-fold defaultstate="collapsed" desc="Adapter">
    /**
     * Adapter um ein Englisches Datum in ein Deutsches Datum zu konvertieren
     * @param str
     * @return String
     */
    private String dateAdapter(String str) {
        String[] temp = new String[10];
        String delimiter = "/";
        temp = str.split(delimiter);
        if (temp.length == 3) {
            return temp[1] + "/" + temp[0] + "/" + temp[2];
        } else {
            return "20/10/1990";
        }

    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Datums und Raumeingaben überprüfen">
   /**
    * Methode zur Ueberpruefung ob auch Zimmer ausgewaehlt wuerden
    * @return boolean
    */
    private boolean testIfRoomSelected() {
        int count = 0;
        for (CategoryWrapper entry : categories) {
            if (entry.getChosenRooms().equals(0)) {
                count++;
            }
        }

        if (count >= categories.size()) {
            return false;
        }

        return true;
    }

    private boolean checkDate() {

        java.sql.Date today = new java.sql.Date(new java.util.Date().getTime());

        try {
            java.sql.Date ar = new java.sql.Date(dateformatter.parse(dateAdapter(getArrival())).getTime());
            java.sql.Date de = new java.sql.Date(dateformatter.parse(dateAdapter(getDeparture())).getTime());

            this.days = ((de.getTime() - ar.getTime()) / 1000 / 60 / 60 / 24) + 1;

            if (de.after(ar) && ar.after(today)) {
                return true;
            } else {
                return false;
            }

        } catch (ParseException ex) {
            return false;
        }
    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Speicher Methode">
    /**
     * Methoder zur speicherung der Reservierung in die DB
     * @return boolean
     */
    private boolean saveReservationInDB() {
        if (guest != null) {
            try {

                //Adresse Updaten 
                ILand land = LandDao.getInstance().getById(this.country);
                this.address.setLand(land);

                List<IAdresse> adrs = new Vector<IAdresse>(this.guest.getAdressen());
                IAdresse a1 = adrs.get(0);
                a1 = this.address;

                //DB aktion Adresse
                IAdresseDao adressDao = AdresseDao.getInstance();
                adressDao.update(this.address);

                //DB aktion Gast
                IGastDao gastDao = GastDao.getInstance();
                gastDao.create(this.guest);

                //Reservierung erstellen;

                //Datum fuer die Reservierung
                java.sql.Date ar = new java.sql.Date(dateformatter.parse(dateAdapter(getArrival())).getTime());
                java.sql.Date de = new java.sql.Date(dateformatter.parse(dateAdapter(getDeparture())).getTime());

                //Zusatzleistung
                IZusatzleistungDao zlDao = ZusatzleistungDao.getInstance();
                IZusatzleistung pack = zlDao.getById(this.packageID);

                //Gäste der Reservierung hinzufügen
                Set<IGast> gaeste = new HashSet<IGast>();
                gaeste.add(this.guest);

                //Reservierung
                IReservierung res = new Reservierung(ar, de, guest, null, false, this.pet, pack, null, null, gaeste, null);

                IReservierungDao resDao = ReservierungDao.getInstance();
                resDao.create(res);

                //Teilreservierungen
                ITeilreservierungDao teilresDao = TeilreservierungDao.getInstance();
                for (CategoryWrapper entry : this.categories) {
                    if (entry.getChosenRooms() > 0) {
                        ITeilreservierung tres = new Teilreservierung(entry.getCat(), res, entry.getChosenRooms());
                        try {
                            teilresDao.create(tres);
                        } catch (DatabaseException ex) {
                            return false;
                        }
                    }
                }

                return true;

            } catch (DatabaseException ex) {
                return false;
            } catch (ParseException e) {
                return false;
            }

        }

        return false;
    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Set/Get Gast">
    /**
     * Getter fuer den Gast
     * @return IGast
     */
    public IGast getGuest() {
        return guest;
    }
    /**
     * Setter fuer den Gast
     * @param gast
     */
    public void setGuest(IGast gast) {
        this.guest = gast;

        List<IAdresse> adrs = new Vector<IAdresse>(this.guest.getAdressen());
        this.address = adrs.get(0);

        this.country = this.address.getLand().getID();

    }
    //</editor-fold>
   
    //<editor-fold defaultstate="collapsed" desc="getter und setter">
    /**
     * Getter fuer die LandID
     * @return Integer
     */
    public Integer getCountry() {
        return this.country;
    }
    /**
     * Setter fuer die LandID
     * @param country
     */
    public void setCountry(Integer country) {
        this.country = country;
    }
    /**
     * Methode um die Aufenhaltsdauer in Tagen zu erhalten
     * @return long
     */
    public long getDays() {
        return days;
    }
     /**
     * Methode um die Aufenhaltsdauer in Tagen zu setzen
     * @param days
     */
    public void setDays(long days) {
        this.days = days;
    }
    /**
     * Methode um die Gesamtkosten abzufragen
     * @return double
     */
    public double getTotalCosts() {
        return totalCosts;
    }
    /**
     * Methode um die Gesamtkosten zu setzen
     * @param totalCosts
     */
    public void setTotalCosts(double totalCosts) {
        this.totalCosts = totalCosts;
    }
    /**
     * etter fuer die Adresse
     * @return IAdresse
     */
    public IAdresse getAddress() {
        return address;
    }
    /**
     * Setter fuer die Adresse
     * @param address
     */
    public void setAddress(IAdresse address) {
        this.address = address;
    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Clear Methoden">
    /**
     * Methode um die Attribute zu löschen
     */
    private void clearAttributes() {
       
        this.session.setAttribute("DateError", false);
        this.session.setAttribute("Confirmed", false);
        this.session.setAttribute("ErrorSave", false);
        this.session.setAttribute("NoRoomSelected", false);
    }
    //</editor-fold>
   
    //<editor-fold defaultstate="collapsed" desc="Kosten berechnungs Methoden">
    /**
     * Methode um die Kosten zu berechnen
     */
    private void calcTotalCosts() {
        float costs = 0;
       
        // Kosten pro Zimmer
        for (CategoryWrapper c : categories) {
            costs += c.getCost() * c.getChosenRooms();
        }
       
        // Package
        costs += 0;
       
        // Anzahl der Tage
        this.totalCosts = costs * days;
    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Bezeichnung für Land und Package holen">
    /**
     * Methode um ein Land anhand einer ID aus der DB zu holen
     * @return String
     */
    public String getLand() {
        if (this.country != null) {
            try {
                return LandDao.getInstance().getById(this.country).getBezeichnung();
            } catch (Exception ex) {
                return ex.getMessage();
            }
        }
        return "0";
    }
    /**
     * Methode um ein Paket anhand einer ID aus der DB zu holen
     * @return String
     */
    public String getPackage() {
        if (this.packageID != null) {
            try {
                return LeistungDao.getInstance().getById(this.packageID).getBezeichnung();
            } catch (Exception ex) {
                return ex.getMessage();
            }
        }
        return "0";
    }
    //</editor-fold>
}
TOP

Related Classes of projekt.teama.reservierung.ReservationManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.