QuoteTeldarCancellationResponse.java 3.88 KB
Newer Older
ED-DRIF committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
package com.fractalite.hermes.teldar.parsers;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Currency;
import java.util.Date;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathExpressionException;

import org.apache.camel.Exchange;
import org.apache.camel.InvalidPayloadException;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.SAXException;

import com.fractalite.hermes.teldar.tools.ObjectToXml;
import com.fractalite.models.commerce.QuoteTemplate;
import com.fractalite.models.commerce.RequestForQuote;
import com.fractalite.models.commerce.TermOfSale;
import com.fractalite.models.common.Money;
import com.fractalite.models.travel.stay.HotelStay;
import com.gekko_holding.webservice.v2_4.AvailabilityResponse;
import com.gekko_holding.webservice.v2_4.CancellationFeesPolicy;
import com.gekko_holding.webservice.v2_4.HotelAvailabilityResponse;
import com.gekko_holding.webservice.v2_4.HotelResponse;
import com.gekko_holding.webservice.v2_4.Offer;



public class QuoteTeldarCancellationResponse extends TeldarParsers {

	protected static Logger logger = LoggerFactory.getLogger(QuoteTeldarCancellationResponse.class);

	@Override
	public void process(Exchange exchange) throws InvalidPayloadException, ParserConfigurationException, SAXException,
			IOException, XPathExpressionException {

		logger.trace("Invoking TELDAR QuoteTeldarCancellationResponse Processor.......");
		RequestForQuote requestForQuote = new RequestForQuote();
		HotelAvailabilityResponse resp = exchange.getIn().getMandatoryBody(HotelAvailabilityResponse.class);
		requestForQuote = getHotelQuotes(resp.getAvailResponse(), exchange);
		exchange.getIn().setBody(requestForQuote, RequestForQuote.class);
		exchange.getIn().setHeader("HermesPartnerId", "teldar");
		logger.info("End TELDAR QuoteTeldarCancellationResponse Processor......." + ObjectToXml.printXML(requestForQuote));
	}

	private RequestForQuote getHotelQuotes(AvailabilityResponse teldarHotel, Exchange exchange)
			throws XPathExpressionException {

		QuoteTemplate quoteTemplate = exchange.getProperty("QuoteTemplate", QuoteTemplate.class);
		LocalDate gg = quoteTemplate.getTrip().getContent(HotelStay.class).get(0).getCheckin();

		RequestForQuote requestForQuote = new RequestForQuote();

		for (HotelResponse respHotel : teldarHotel.getHotelResponse()) {

			Currency currency = Currency.getInstance("EUR");

			for (Offer offer : respHotel.getOffers().getOffer()) {

				List<TermOfSale> termsOfSales = new ArrayList<TermOfSale>();

				if (offer.getCancellationFeesPolicy() != null && offer.getCancellationFeesPolicy().size() > 0)
					for (CancellationFeesPolicy cancellation : offer.getCancellationFeesPolicy()) {

						TermOfSale term = new TermOfSale("condition",
								"From " + cancellation.getFromDate() + " to " + cancellation.getToDate() + " price "
										+ cancellation.getPrice() + cancellation.getCurrency());
						try {

							Date date3 = new SimpleDateFormat("dd/MM/yyyy").parse(cancellation.getFromDate());
							// logger.info("hh2hhhhh" +date3.toString());

							java.util.Date d = new SimpleDateFormat("yyyy-MM-dd").parse(gg.toString());
							// logger.info("psss" +d.toString());

							Long difference = d.getTime() - date3.getTime();

							float daysBetween1 = (difference / (86400000));
							int q = (int) daysBetween1;

							term.addCharge(q, new Money(Double.parseDouble(cancellation.getPrice()),
									currency.getInstance(cancellation.getCurrency())));

						}

						catch (NumberFormatException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} catch (Exception e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}

						// term.getCharges().
						termsOfSales.add(term);

					}

			}

		}

		return requestForQuote;
	}
}