/**
   * Populate.
   *
   * @param source the source
   * @param target the target
   * @throws ConversionException the conversion exception
   */
  public void populate(final BasePackage source, final List<PriceBreakDownViewData> target)
      throws ConversionException {

    final PriceBreakDownViewData basicPrice = new PriceBreakDownViewData();
    final PriceBreakDownViewData extrasPrice = new PriceBreakDownViewData();
    final PriceBreakDownViewData onlineDiscount = new PriceBreakDownViewData();
    final PriceBreakDownViewData totalPrice = new PriceBreakDownViewData();

    BigDecimal viewDataBasicPrice = priceCalculationService.calculateBasicCost(source);

    BigDecimal viewDataOnlineDiscountPrice =
        source.getDiscount().getPrice().getAmount().getAmount();
    if (viewDataOnlineDiscountPrice.signum() == -1) {
      viewDataOnlineDiscountPrice = viewDataOnlineDiscountPrice.negate();
    }
    final String defaultCurrencyCode = currencyResolver.getSiteCurrency();
    basicPrice.setDescription(getDescription("BASICHOLIDAY"));
    if (!PackageUtilityService.isMulticomThirdPartyFlight(
            packageComponentService.getFlightItinerary(source))
        && viewDataOnlineDiscountPrice.compareTo(BigDecimal.ZERO) > 0) {
      viewDataBasicPrice =
          viewDataBasicPrice.add(viewDataOnlineDiscountPrice).setScale(TWO, RoundingMode.HALF_UP);
      onlineDiscount.setDescription(getDescription("ONLINEDISCOUNT"));

      onlineDiscount.setPrice(viewDataOnlineDiscountPrice.setScale(TWO, RoundingMode.HALF_UP));
      onlineDiscount.setCurrencyAppendedPrice(
          "-"
              + " "
              + CurrencyUtils.getCurrencySymbol(defaultCurrencyCode)
              + (viewDataOnlineDiscountPrice.setScale(TWO, RoundingMode.HALF_UP)).toString());
      target.add(onlineDiscount);
    }
    basicPrice.setPrice(viewDataBasicPrice.setScale(TWO, RoundingMode.HALF_UP));
    basicPrice.setCurrencyAppendedPrice(
        CurrencyUtils.getCurrencySymbol(defaultCurrencyCode)
            + viewDataBasicPrice.setScale(TWO, RoundingMode.HALF_UP).toString());
    target.add(basicPrice);
    extrasPrice.setDescription(getDescription("OPTION&EXTRAS"));
    extrasPrice.setPrice(priceCalculationService.calculateExtraFacilitiesTotalCost(source));
    extrasPrice.setCurrencyAppendedPrice(
        CurrencyUtils.getCurrencySymbol(defaultCurrencyCode)
            + extrasPrice.getPrice().setScale(TWO, RoundingMode.HALF_UP));

    totalPrice.setDescription(getDescription("TOTALPRICE"));
    totalPrice.setPrice(
        source.getPrice().getAmount().getAmount().setScale(TWO, RoundingMode.HALF_UP));
    totalPrice.setCurrencyAppendedPrice(
        CurrencyUtils.getCurrencySymbol(defaultCurrencyCode)
            + (source.getPrice().getAmount().getAmount().setScale(TWO, RoundingMode.HALF_UP))
                .toString());
    target.add(extrasPrice);

    populateCardChargesIfApplicable(source.getBookingDetails(), target);
    populatePromotionalChargesIfApplicable(source.getPromotionalDiscount(), target);
    target.add(totalPrice);
  }
 /**
  * Populate card charges if applicable.
  *
  * @param bookingDetails the booking details
  * @param target the target
  */
 private void populateCardChargesIfApplicable(
     final BookingDetails bookingDetails, final List<PriceBreakDownViewData> target) {
   if (SyntacticSugar.isNotNull(bookingDetails)
       && CollectionUtils.isNotEmpty(
           bookingDetails.getBookingHistory().get(0).getPaymentReferences())) {
     final PriceBreakDownViewData cardCharges = new PriceBreakDownViewData();
     final BigDecimal cardCharge =
         getTotalCardCharges(bookingDetails.getBookingHistory().get(0).getPaymentReferences());
     cardCharges.setDescription(getDescription("CARD_CHARGES"));
     cardCharges.setPrice(cardCharge);
     cardCharges.setCurrencyAppendedPrice(
         CurrencyUtils.getCurrencySymbol(currencyResolver.getSiteCurrency())
             + cardCharge.setScale(0, RoundingMode.HALF_UP));
     target.add(cardCharges);
   }
 }
 /**
  * Populate promotional charges if applicable.
  *
  * @param promotionalDiscount the promotional discount
  * @param target the target
  */
 private void populatePromotionalChargesIfApplicable(
     final PromotionalDiscount promotionalDiscount, final List<PriceBreakDownViewData> target) {
   if (SyntacticSugar.isNotNull(promotionalDiscount)) {
     final PriceBreakDownViewData promotionalDiscountPrice = new PriceBreakDownViewData();
     final BigDecimal promotionalDis = promotionalDiscount.getPrice().getAmount().getAmount();
     promotionalDiscountPrice.setDescription(getDescription("PROMOTIONAL_DISCOUNT"));
     promotionalDiscountPrice.setPrice(promotionalDis);
     promotionalDiscountPrice.setCurrencyAppendedPrice(
         "-"
             + " "
             + CurrencyUtils.getCurrencySymbol(currencyResolver.getSiteCurrency())
             + promotionalDis
                 .multiply(BigDecimal.valueOf(-1))
                 .setScale(TWO, RoundingMode.HALF_UP));
     target.add(promotionalDiscountPrice);
   }
 }