Package no.ugland.utransprod.service

Source Code of no.ugland.utransprod.service.TransportCostManagerIntegrationTest

package no.ugland.utransprod.service;

import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import java.math.BigDecimal;
import java.net.URL;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import no.ugland.utransprod.ProTransException;
import no.ugland.utransprod.model.Colli;
import no.ugland.utransprod.model.ConstructionType;
import no.ugland.utransprod.model.ConstructionTypeArticle;
import no.ugland.utransprod.model.ConstructionTypeArticleAttribute;
import no.ugland.utransprod.model.ConstructionTypeAttribute;
import no.ugland.utransprod.model.Customer;
import no.ugland.utransprod.model.Order;
import no.ugland.utransprod.model.OrderCost;
import no.ugland.utransprod.model.OrderLine;
import no.ugland.utransprod.model.OrderLineAttribute;
import no.ugland.utransprod.model.PostShipment;
import no.ugland.utransprod.model.ProductArea;
import no.ugland.utransprod.model.Supplier;
import no.ugland.utransprod.model.Transport;
import no.ugland.utransprod.model.TransportCost;
import no.ugland.utransprod.model.TransportCostAddition;
import no.ugland.utransprod.model.TransportCostBasis;
import no.ugland.utransprod.service.enums.LazyLoadConstructionTypeArticleEnum;
import no.ugland.utransprod.service.enums.LazyLoadConstructionTypeEnum;
import no.ugland.utransprod.service.enums.LazyLoadEnum;
import no.ugland.utransprod.test.SlowTests;
import no.ugland.utransprod.util.ModelUtil;
import no.ugland.utransprod.util.Periode;
import no.ugland.utransprod.util.Util;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
@Category(SlowTests.class)
public class TransportCostManagerIntegrationTest {
  private TransportCostManager transportCostManager;

  private TransportCostBasisManager transportCostBasisManager;

  private TransportManager transportManager;

  private OrderManager orderManager;

  private CustomerManager customerManager;

  private ConstructionTypeManager constructionTypeManager;

  private ProductAreaManager productAreaManager;

  private PostShipmentManager postShipmentManager;

  private ColliManager colliManager;

  private Transport transport;

  private Transport transportPostShipment;

  private Transport transportPostShipment2;

  private Order order;

  private Order takstolOrder;

  private Customer customer;

  private Customer takstolCustomer;

  private PostShipment postShipment;

  private PostShipment postShipment2;

  private List<TransportCostBasis> allTransportCostBasis = new ArrayList<TransportCostBasis>();

  private static final Integer YEAR = 2012;

  private static final Integer WEEK_50 = 50;

  private static final Integer WEEK_51 = 51;

  private static final Integer WEEK_52 = 52;

  @Before
  public void setUp() throws Exception {
    transportCostManager = (TransportCostManager) ModelUtil
        .getBean("transportCostManager");
    transportCostBasisManager = (TransportCostBasisManager) ModelUtil
        .getBean("transportCostBasisManager");
    transportManager = (TransportManager) ModelUtil
        .getBean("transportManager");
    orderManager = (OrderManager) ModelUtil.getBean("orderManager");
    customerManager = (CustomerManager) ModelUtil
        .getBean("customerManager");
    constructionTypeManager = (ConstructionTypeManager) ModelUtil
        .getBean("constructionTypeManager");
    productAreaManager = (ProductAreaManager) ModelUtil
        .getBean("productAreaManager");
    postShipmentManager = (PostShipmentManager) ModelUtil
        .getBean("postShipmentManager");
    colliManager = (ColliManager) ModelUtil.getBean("colliManager");

  }

  @After
  public void tearDown() throws Exception {

    if (order != null && order.getOrderId() != null) {
      orderManager.removeOrder(order);
      order=null;
    }
    if (takstolOrder != null && takstolOrder.getOrderId() != null) {
      orderManager.removeOrder(takstolOrder);
      takstolOrder=null;
    }
    if (customer != null && customer.getCustomerId() != null) {
      customerManager.removeCustomer(customer);
      customer=null;
    }
    if (takstolCustomer != null && takstolCustomer.getCustomerId() != null) {
      customerManager.removeCustomer(takstolCustomer);
      takstolCustomer=null;
    }
    if (transport != null && transport.getTransportId() != null) {
      transportManager.removeTransport(transport);
      transport=null;
    }
    if (transportPostShipment != null
        && transportPostShipment.getTransportId() != null) {
      transportManager.removeTransport(transportPostShipment);
      transportPostShipment=null;
    }
    if (transportPostShipment2 != null
        && transportPostShipment2.getTransportId() != null) {
      transportManager.removeTransport(transportPostShipment2);
      transportPostShipment2=null;
    }

    for (TransportCostBasis basis : allTransportCostBasis) {
      if (basis.getTransportCostBasisId() != null) {
        transportCostBasisManager.removeTransportCostBasis(basis);
      }
    }
    allTransportCostBasis.clear();

  }

  @Test
  public void testImportAllPostalCodes() throws Exception {
    importAllCounties();
    importAllAreas();
    importAlPostalCodes();

    List<TransportCost> list = transportCostManager.findAll();
    assertEquals(7, list.size());

  }

  @Test
  public void testImportAllPostalCodesTwice() throws Exception {
    URL url = getClass().getClassLoader().getResource("testpostnr.xls");

    transportCostManager.importAllPostalCodes(url.getFile(), false);

    List<TransportCost> list = transportCostManager.findAll();
    assertEquals(7, list.size());

    transportCostManager.importAllPostalCodes(url.getFile(), false);

    list = transportCostManager.findAll();
    assertEquals(7, list.size());
  }

  @Test
  public void testUpdatePricesFromFile() throws Exception {
    updatePricesFromFile();
    TransportCost transportCost = transportCostManager
        .findByPostalCode("0139");
    assertEquals(BigDecimal.valueOf(1000), transportCost.getCost());
    assertEquals(Integer.valueOf(1), transportCost.getValid());
    assertEquals(BigDecimal.valueOf(15), transportCost.getAddition());
    transportCost = transportCostManager.findByPostalCode("0050");
    assertNull(transportCost);

  }

  @Test
  public void testInsertAdditions() throws Exception {
    URL url = getClass().getClassLoader().getResource(
        "transportpriser_test.xls");
    transportCostManager.updatePricesFromFile(url.getFile());
    TransportCostAdditionManager transportCostAdditionManager = (TransportCostAdditionManager) ModelUtil
        .getBean("transportCostAdditionManager");
    TransportCostAddition transportCostAddition = transportCostAdditionManager
        .findByDescription("BreddeX2+h�ydeX2");
    assertNotNull(transportCostAddition);
  }

  @Test
  public void testGenerateTransportCostList() throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("0354");
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    List<TransportCostBasis> transportCostBasisList = transportCostBasisManager
        .findById(transportCostBasis.getTransportCostBasisId());
    assertEquals(1, transportCostBasisList.size());

    allTransportCostBasis.addAll(list);

    transportCostBasis = transportCostBasisList.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    assertEquals("" + YEAR + " " + WEEK_50 + "-" + WEEK_50,
        transportCostBasis.getPeriode());
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    assertEquals("Grunnpris:1000", orderCost.getComment());
    BigDecimal result = BigDecimal.valueOf(1000).setScale(2);
    assertEquals(result, orderCost.getCostAmount().setScale(2));

  }

  @Test
  public void testGenerateTransportCostListWithoutTakstol() throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("0354");
    setUpTakstolOrder();
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    List<TransportCostBasis> transportCostBasisList = transportCostBasisManager
        .findById(transportCostBasis.getTransportCostBasisId());
    assertEquals(1, transportCostBasisList.size());

    allTransportCostBasis.addAll(list);

    transportCostBasis = transportCostBasisList.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    assertEquals("" + YEAR + " " + WEEK_50 + "-" + WEEK_50,
        transportCostBasis.getPeriode());
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    assertEquals("Grunnpris:1000", orderCost.getComment());
    BigDecimal result = BigDecimal.valueOf(1000).setScale(2);
    assertEquals(result, orderCost.getCostAmount().setScale(2));

  }

  @Test
  public void testSetInvoiceNr() throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("0354");
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    List<TransportCostBasis> transportCostBasisList = transportCostBasisManager
        .findById(transportCostBasis.getTransportCostBasisId());
    assertEquals(1, transportCostBasisList.size());

    transportCostBasisManager.setInvoiceNr(transportCostBasis, "1111");

    transportCostBasisList = transportCostBasisManager
        .findById(transportCostBasis.getTransportCostBasisId());
    assertEquals(1, transportCostBasisList.size());

    allTransportCostBasis.addAll(list);

    transportCostBasis = transportCostBasisList.get(0);
    assertEquals("1111", transportCostBasis.getInvoiceNr());
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });

    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();

    for (OrderCost orderCost : orderCosts) {
      assertEquals("1111", orderCost.getInvoiceNr());
    }

  }

  @Test
  public void testGenerateTransportCostListTwice() throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("0354");
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    List<TransportCostBasis> transportCostBasisList = transportCostBasisManager
        .findById(transportCostBasis.getTransportCostBasisId());
    assertEquals(1, transportCostBasisList.size());

    allTransportCostBasis.addAll(list);

    transportCostBasis = transportCostBasisList.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    assertEquals("Grunnpris:1000", orderCost.getComment());
    BigDecimal result = BigDecimal.valueOf(1000).setScale(2);
    assertEquals(result, orderCost.getCostAmount().setScale(2));

    list = transportCostManager.generateTransportCostList(new Periode(YEAR,
        WEEK_50, WEEK_50));
    assertEquals(0, list.size());

  }

  @Test
  public void skal_sette_dobbel_kostnad_ved_staaende_tak() throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("0354");
    setStaaendeTak();
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    List<TransportCostBasis> transportCostBasisList = transportCostBasisManager
        .findById(transportCostBasis.getTransportCostBasisId());
    assertEquals(1, transportCostBasisList.size());

    allTransportCostBasis.addAll(list);

    transportCostBasis = transportCostBasisList.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    assertEquals("Grunnpris:1000,St�ende tak:1000.00", orderCost
        .getComment());
    BigDecimal result = BigDecimal.valueOf(2000).setScale(2);
    assertEquals(result, orderCost.getCostAmount().setScale(2));

    list = transportCostManager.generateTransportCostList(new Periode(YEAR,
        WEEK_50, WEEK_50));
    assertEquals(0, list.size());

  }

  @Test
  public void testGenerateTransportCostListWithAdditionWidth()
      throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("0354");
    setOrderLenghtWidth(860, 620);
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    BigDecimal basis = BigDecimal.valueOf(1000);
    BigDecimal result;
    result = basis.add(basis.multiply(BigDecimal.valueOf(0.5)));
    assertEquals("Grunnpris:1000,Lang garasje:500.00", orderCost
        .getComment());
    assertEquals(result.setScale(2), orderCost.getCostAmount().setScale(2));

  }

  @Test
  public void testGenerateTransportCostListWithAdditionWidthAndTakstein()
      throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("0354");
    setOrderLenghtWidth(860, 620);
    setColliPackedAndSent("Takstein", "Takstein", null);
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    BigDecimal basis = BigDecimal.valueOf(1000)
        .add(BigDecimal.valueOf(660));
    BigDecimal result;
    result = basis.add(basis.multiply(BigDecimal.valueOf(0.5)));
    String costComment=orderCost.getComment();
    assertTrue(costComment.contains("Grunnpris:1000"));
    assertTrue(costComment.contains("Takstein:660.00"));
    assertTrue(costComment.contains("Lang garasje:830.00"));
    assertEquals(result.setScale(2), orderCost.getCostAmount().setScale(2));

  }

  @Test
  public void testGenerateTransportCostListWithTakstein() throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("0354");
    setColliPackedAndSent("Takstein", "Takstein", null);
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    BigDecimal basis = BigDecimal.valueOf(1000);
    BigDecimal result;
    result = basis.add(BigDecimal.valueOf(660));
    assertEquals(result.setScale(2), orderCost.getCostAmount().setScale(2));
    assertEquals("Grunnpris:1000,Takstein:660.00", orderCost.getComment());

  }

  @Test
  public void testGenerateTransportCostListWithTaksteinNotSentFromGG()
      throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("0354");
    OrderLine orderLine = setColliPackedAndSent("Takstein", "Takstein",
        null);
    orderLine.setOrderLineAttributeValue("Sendes fra GG", "Nei");
    orderManager.saveOrder(order);
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    BigDecimal basis = BigDecimal.valueOf(1000);

    assertEquals(basis.setScale(2), orderCost.getCostAmount().setScale(2));
    assertEquals("Grunnpris:1000", orderCost.getComment());

  }

  @Test
  public void testGenerateTransportCostListWithTakstolOver30()
      throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("0354");
    setTakstolVinkel(31);
    setColliPackedAndSent("Takstol", "Takstoler", null);
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    BigDecimal basis = BigDecimal.valueOf(1000);
    BigDecimal result;
    result = basis.add(BigDecimal.valueOf(660)).setScale(2);
    assertEquals("Grunnpris:1000,Takstol:660.00", orderCost.getComment());
    assertEquals(result, orderCost.getCostAmount().setScale(2));

  }

  @Test
  public void testGenerateTransportCostListWithTakstolOver30AndTakstein()
      throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("0354");
    setTakstolVinkel(31);
    setColliPackedAndSent("Takstein", "Takstein", null);
    setColliPackedAndSent("Takstol", "Takstoler", null);
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    BigDecimal basis = BigDecimal.valueOf(1000);
    BigDecimal result;
    result = basis.add(BigDecimal.valueOf(660)).setScale(2);
    result = result.add(BigDecimal.valueOf(660)).setScale(2);
    assertEquals(result, orderCost.getCostAmount().setScale(2));

  }

  @Test
  public void testGenerateTransportCostListWithTakstolOver30AndTaksteinOnlyOneAddition()
      throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("4841");
    setTakstolVinkel(31);
    setColliPackedAndSent("Takstein", "Takstein", null);
    setColliPackedAndSent("Takstol", "Takstoler", null);
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    BigDecimal basis = BigDecimal.valueOf(1470);
    BigDecimal result;
    result = basis.add(BigDecimal.valueOf(660)).setScale(2);

    assertEquals(result, orderCost.getCostAmount().setScale(2));

  }

  @Test
  public void testGenerateTransportCostListWithTakstolOver30AndTaksteinOnlyOneAdditionTakstolAsPostShipment()
      throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("4841");
    setTakstolVinkel(31);
    createPostShipment();
    setColliPackedAndSent("Takstein", "Takstein", null);
    setColliPackedAndSent("Takstol", "Takstoler", postShipment);
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    BigDecimal basis = BigDecimal.valueOf(1470);
    BigDecimal result;
    result = basis.add(BigDecimal.valueOf(660)).setScale(2);
    assertEquals("Grunnpris:1470,Takstein:660.00", orderCost.getComment());
    assertEquals(result, orderCost.getCostAmount().setScale(2));

    list = transportCostManager.generateTransportCostList(new Periode(YEAR,
        WEEK_51, WEEK_51));

    assertNotNull(list);
    assertEquals(1, list.size());

    allTransportCostBasis.addAll(list);

    transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    orderCost = orderCosts.iterator().next();

    assertEquals("Etterlevering:", orderCost.getComment());
    assertEquals(BigDecimal.valueOf(0), orderCost.getCostAmount());

  }

  @Test
  public void testGenerateTransportCostListWithTakstolOver30AndTaksteinTwoAdditionTakstolAsPostShipment()
      throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("0354");
    setTakstolVinkel(31);
    createPostShipment();
    setColliPackedAndSent("Takstein", "Takstein", null);
    setColliPackedAndSent("Takstol", "Takstoler", postShipment);
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    BigDecimal basis = BigDecimal.valueOf(1000);
    BigDecimal result;
    result = basis.add(BigDecimal.valueOf(660)).setScale(2);
    assertEquals("Grunnpris:1000,Takstein:660.00", orderCost.getComment());
    assertEquals(result, orderCost.getCostAmount().setScale(2));

    list = transportCostManager.generateTransportCostList(new Periode(YEAR,
        WEEK_51, WEEK_51));

    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    orderCost = orderCosts.iterator().next();
    assertEquals("Etterlevering:Takstol:660.00", orderCost.getComment());
    assertEquals(BigDecimal.valueOf(660).setScale(2), orderCost
        .getCostAmount().setScale(2));

  }

  @Test
  public void testGenerateTransportCostListWithTakstolOver30AndTaksteinOnlyOneAdditionTakstolAndTaksteinAsPostShipment()
      throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("4841");
    setTakstolVinkel(31);
    createPostShipment();
    setColliPackedAndSent("Takstein", "Takstein", postShipment);
    setColliPackedAndSent("Takstol", "Takstoler", postShipment);
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    BigDecimal basis = BigDecimal.valueOf(1470);
    // BigDecimal result;
    // result = basis.add(BigDecimal.valueOf(660)).setScale(2);
    assertEquals("Grunnpris:1470", orderCost.getComment());
    assertEquals(basis.setScale(2), orderCost.getCostAmount().setScale(2));

    list = transportCostManager.generateTransportCostList(new Periode(YEAR,
        WEEK_51, WEEK_51));

    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    orderCost = orderCosts.iterator().next();

    assertEquals(BigDecimal.valueOf(660).setScale(2), orderCost
        .getCostAmount().setScale(2));

  }

  @Test
  public void testGenerateTransportCostListForPostShipmentWithoutAddition()
      throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("0354");
    createPostShipment();
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    BigDecimal basis = BigDecimal.valueOf(1000);
    // BigDecimal result;
    // result = basis.add(BigDecimal.valueOf(660)).setScale(2);
    assertEquals("Grunnpris:1000", orderCost.getComment());
    assertEquals(basis.setScale(2), orderCost.getCostAmount().setScale(2));

    list = transportCostManager.generateTransportCostList(new Periode(YEAR,
        WEEK_51, WEEK_51));

    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    orderCost = orderCosts.iterator().next();

    assertEquals(BigDecimal.valueOf(0).setScale(2), orderCost
        .getCostAmount().setScale(2));
    assertEquals("Etterlevering:", orderCost.getComment());

  }

  @Test
  public void testGenerateTransportCostListWithTakstolOver30AndTaksteinTwoAdditionTakstolAndTaksteinAsPostShipment()
      throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("0354");
    setTakstolVinkel(31);
    createPostShipment();
    setColliPackedAndSent("Takstein", "Takstein", postShipment);
    setColliPackedAndSent("Takstol", "Takstoler", postShipment);
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();
    BigDecimal basis = BigDecimal.valueOf(1000);
    // BigDecimal result;
    // result = basis.add(BigDecimal.valueOf(660)).setScale(2);
    assertEquals("Grunnpris:1000", orderCost.getComment());
    assertEquals(basis.setScale(2), orderCost.getCostAmount().setScale(2));

    list = transportCostManager.generateTransportCostList(new Periode(YEAR,
        WEEK_51, WEEK_51));

    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    orderCost = orderCosts.iterator().next();

    assertEquals(BigDecimal.valueOf(1320).setScale(2), orderCost
        .getCostAmount().setScale(2));

  }

  @Test
  public void testGenerateTransportCostListWithTakstolOver30AndTaksteinOnlyOneAdditionTakstolAndTaksteinInDifferentPostShipment()
      throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("4841");
    setTakstolVinkel(31);
    createPostShipment();
    createPostShipment2();
    setColliPackedAndSent("Takstein", "Takstein", postShipment);
    setColliPackedAndSent("Takstol", "Takstoler", postShipment2);
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();

    list = transportCostManager.generateTransportCostList(new Periode(YEAR,
        WEEK_51, WEEK_51));

    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    orderCost = orderCosts.iterator().next();
    assertEquals("Etterlevering:Takstein:660.00", orderCost.getComment());
    assertEquals(BigDecimal.valueOf(660).setScale(2), orderCost
        .getCostAmount().setScale(2));

    list = transportCostManager.generateTransportCostList(new Periode(YEAR,
        WEEK_52, WEEK_52));

    assertNotNull(list);
    assertEquals(1, list.size());

    allTransportCostBasis.addAll(list);

    transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    orderCost = orderCosts.iterator().next();

    assertEquals(BigDecimal.valueOf(0).setScale(2), orderCost
        .getCostAmount().setScale(2));

  }

  @Test
  public void testGenerateTransportCostListWithTakstolOver30AndTaksteinTwoAdditionTakstolAndTaksteinInDifferentPostShipment()
      throws Exception {
    importAlPostalCodes();
    updatePricesFromFile();
    setUpOrder("0354");
    setTakstolVinkel(31);
    createPostShipment();
    createPostShipment2();
    setColliPackedAndSent("Takstein", "Takstein", postShipment);
    setColliPackedAndSent("Takstol", "Takstoler", postShipment2);
    List<TransportCostBasis> list = transportCostManager
        .generateTransportCostList(new Periode(YEAR, WEEK_50, WEEK_50));
    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    TransportCostBasis transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    Set<OrderCost> orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    OrderCost orderCost = orderCosts.iterator().next();

    list = transportCostManager.generateTransportCostList(new Periode(YEAR,
        WEEK_51, WEEK_51));

    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    orderCost = orderCosts.iterator().next();
    assertEquals("Etterlevering:Takstein:660.00", orderCost.getComment());
    assertEquals(BigDecimal.valueOf(660).setScale(2), orderCost
        .getCostAmount().setScale(2));

    list = transportCostManager.generateTransportCostList(new Periode(YEAR,
        WEEK_52, WEEK_52));

    assertNotNull(list);
    assertEquals(1, list.size());
    allTransportCostBasis.addAll(list);

    transportCostBasis = list.get(0);

    assertNotNull(transportCostBasis.getTransportCostBasisId());

    list = transportCostBasisManager.findById(transportCostBasis
        .getTransportCostBasisId());
    assertEquals(1, list.size());

    transportCostBasis = list.get(0);
    transportCostBasisManager.lazyLoad(transportCostBasis,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_COSTS,
            LazyLoadEnum.NONE } });
    orderCosts = transportCostBasis.getOrderCosts();
    assertNotNull(orderCosts);
    assertEquals(1, orderCosts.size());
    orderCost = orderCosts.iterator().next();
    assertEquals("Etterlevering:Takstol:660.00", orderCost.getComment());
    assertEquals(BigDecimal.valueOf(660).setScale(2), orderCost
        .getCostAmount().setScale(2));
  }

  private void createPostShipment() throws Exception {
    transportPostShipment = new Transport();
    transportPostShipment.setTransportName("testEtterlevering");
    transportPostShipment.setTransportYear(YEAR);
    transportPostShipment.setTransportWeek(WEEK_51);
    transportPostShipment.setSent(Util.SHORT_DATE_FORMAT
        .parse("2008.12.15"));

    SupplierManager supplierManager = (SupplierManager) ModelUtil
        .getBean("supplierManager");
    Supplier supplier = supplierManager.findByName("T.O.Bull AS");
    transportPostShipment.setSupplier(supplier);

    transportManager.saveTransport(transportPostShipment);
    postShipment = new PostShipment();
    postShipment.setSent(Util.SHORT_DATE_FORMAT.parse("2008.12.15"));
    postShipment.setOrder(order);
    postShipment.setTransport(transportPostShipment);
    postShipmentManager.savePostShipment(postShipment);
  }

  private void createPostShipment2() throws Exception {
    transportPostShipment2 = new Transport();
    transportPostShipment2.setTransportName("testEtterlevering2");
    transportPostShipment2.setTransportYear(YEAR);
    transportPostShipment2.setTransportWeek(WEEK_52);
    transportPostShipment2.setSent(Util.SHORT_DATE_FORMAT
        .parse("2008.12.22"));

    SupplierManager supplierManager = (SupplierManager) ModelUtil
        .getBean("supplierManager");
    Supplier supplier = supplierManager.findByName("T.O.Bull AS");
    transportPostShipment2.setSupplier(supplier);

    transportManager.saveTransport(transportPostShipment2);
    postShipment2 = new PostShipment();
    postShipment2.setSent(Util.SHORT_DATE_FORMAT.parse("2008.12.22"));
    postShipment2.setOrder(order);
    postShipment2.setTransport(transportPostShipment2);
    postShipmentManager.savePostShipment(postShipment2);
  }

  private void setTakstolVinkel(Integer vinkel) throws ProTransException {
    OrderLine orderLine = order.getOrderLine("Takstoler");
    OrderLineAttribute attribute = orderLine.getAttributeByName("Vinkel");
    attribute.setAttributeValue(String.valueOf(vinkel));
    orderManager.saveOrder(order);
  }

  private void setStaaendeTak() throws ProTransException {
    OrderLine orderLine = order.getOrderLine("Takstoler");
    OrderLineAttribute attribute = orderLine
        .getAttributeByName("St�ende tak");
    attribute.setAttributeValue("Ja");
    orderManager.saveOrder(order);
  }

  private OrderLine setColliPackedAndSent(String colliName,
      String orderLineArticlePath, PostShipment postShipment)
      throws ProTransException {
    Colli colli = new Colli();
    colli.setColliName(colliName);

    OrderLine orderLine = order.getOrderLine(orderLineArticlePath);
    colli.addOrderLine(orderLine);

    if (postShipment != null) {
      postShipment.addOrderLine(orderLine);
      postShipment.addColli(colli);
      colli.setSent(postShipment.getSent());
      colliManager.saveColli(colli);
      postShipmentManager.savePostShipment(postShipment);
    } else {
      order.addColli(colli);
      colli.setSent(order.getSent());
      orderManager.saveOrder(order);
    }
    return orderLine;

  }

  private void setOrderLenghtWidth(int lenght, int width)
      throws ProTransException {
    Set<OrderLine> orderLines = order.getOrderLines();
    String lenghtString = null;
    String widthString = null;
    for (OrderLine orderLine : orderLines) {
      if (lenghtString != null && widthString != null) {
        break;
      }
      if (orderLine.getArticleType() == null
          && orderLine.getConstructionTypeArticle() == null) {
        Set<OrderLineAttribute> attributes = orderLine
            .getOrderLineAttributes();
        if (attributes != null) {
          for (OrderLineAttribute attribute : attributes) {
            if (attribute.getAttributeName().equalsIgnoreCase(
                "Lengde")) {
              lenghtString = attribute.getAttributeValue();
              attribute.setAttributeValue(String.valueOf(lenght));
              if (widthString != null) {
                break;
              }
            } else if (attribute.getAttributeName()
                .equalsIgnoreCase("Bredde")) {
              widthString = attribute.getAttributeValue();
              attribute.setAttributeValue(String.valueOf(width));
              if (lenghtString != null) {
                break;
              }
            }
          }
        }
      }
    }
    order.setInfo(null);
    orderManager.saveOrder(order);
  }

  private void importAllAreas() throws Exception {
    URL url = getClass().getClassLoader().getResource("testkommuner.xls");
    transportCostManager.importAllAreas(url.getFile(), false);
  }

  private void importAllCounties() throws Exception {
    URL url = getClass().getClassLoader().getResource("testfylker.xls");
    transportCostManager.importAllCounties(url.getFile(), false);
  }

  private void importAlPostalCodes() throws Exception {

    URL url = getClass().getClassLoader().getResource("testpostnr.xls");

    transportCostManager.importAllPostalCodes(url.getFile(), false);

  }

  private void updatePricesFromFile() throws Exception {
    URL url = getClass().getClassLoader().getResource(
        "transportpriser_test.xls");
    transportCostManager.updatePricesFromFile(url.getFile());

  }

  private void setUpOrder(String postalCode) throws Exception {
    transport = new Transport();
    transport.setTransportName("test");
    transport.setTransportYear(YEAR);
    transport.setTransportWeek(WEEK_50);
    transport.setSent(Util.SHORT_DATE_FORMAT.parse("2008.12.08"));

    SupplierManager supplierManager = (SupplierManager) ModelUtil
        .getBean("supplierManager");
    Supplier supplier = supplierManager.findByName("T.O.Bull AS");
    transport.setSupplier(supplier);

    transportManager.saveTransport(transport);

    order = new Order();

    customer = new Customer();

    customer.setCustomerNr(100);
    customer.setFirstName("Atle");
    customer.setLastName("Brekka");
    customerManager.saveCustomer(customer);

    ConstructionType constructionType = constructionTypeManager
        .findByName("H1");

    order.setConstructionType(constructionType);

    order.setOrderNr("test");
    order.setCustomer(customer);
    order.setConstructionType(constructionType);
    order.setDeliveryAddress("testing");
    order.setPostalCode(postalCode);
    order.setPostOffice("Oslo");
    order.setOrderDate(Calendar.getInstance().getTime());

    order.setSent(Util.SHORT_DATE_FORMAT.parse("2008.12.08"));

    order.setTransport(transport);

    ProductArea productArea = productAreaManager
        .findByName("Garasje villa");

    order.setProductArea(productArea);

    setOrderLines(order);

    orderManager.saveOrder(order);

  }

  private void setUpTakstolOrder() throws Exception {
    takstolOrder = new Order();

    takstolCustomer = new Customer();

    takstolCustomer.setCustomerNr(100100);
    takstolCustomer.setFirstName("Ask");
    takstolCustomer.setLastName("Brekka");
    customerManager.saveCustomer(takstolCustomer);

    ConstructionType constructionType = constructionTypeManager
        .findByName("Takstol");

    takstolOrder.setConstructionType(constructionType);

    takstolOrder.setOrderNr("testtakstol");
    takstolOrder.setCustomer(takstolCustomer);

    takstolOrder.setDeliveryAddress("testing");
    takstolOrder.setPostalCode("4841");
    takstolOrder.setPostOffice("Arendal");
    takstolOrder.setOrderDate(Calendar.getInstance().getTime());

    takstolOrder.setSent(Util.SHORT_DATE_FORMAT.parse("2008.12.08"));

    takstolOrder.setTransport(transport);

    ProductArea productArea = productAreaManager.findByName("Takstol");

    takstolOrder.setProductArea(productArea);

    setOrderLines(takstolOrder);

    orderManager.saveOrder(takstolOrder);
  }

  private void setOrderLines(Order order) {
    constructionTypeManager
        .lazyLoad(
            order.getConstructionType(),
            new LazyLoadConstructionTypeEnum[] {
                LazyLoadConstructionTypeEnum.CONSTRUCTION_TYPE_ARTICLE,
                LazyLoadConstructionTypeEnum.CONSTRUCTION_TYPE_ATTRIBUTE });
    Set<ConstructionTypeAttribute> attributes = order.getConstructionType()
        .getConstructionTypeAttributes();

    Set<OrderLine> orderLines = new LinkedHashSet<OrderLine>();
    Set<OrderLineAttribute> orderLineAttributes;
    OrderLine orderLineMain;
    orderLineMain = OrderLine.getInstance(order, 0, null);
    orderLineAttributes = new LinkedHashSet<OrderLineAttribute>();

    for (ConstructionTypeAttribute attribute : attributes) {
      orderLineAttributes.add(new OrderLineAttribute(null, orderLineMain,
          null, attribute, null, attribute.getAttributeValue(),
          attribute.getDialogOrder(), attribute.getAttributeName()));
    }
    orderLineMain.setOrderLineAttributes(orderLineAttributes);
    orderLines.add(orderLineMain);
    orderLineMain.setArticlePath(orderLineMain.getGeneratedArticlePath());

    Set<ConstructionTypeArticle> articles = order.getConstructionType()
        .getConstructionTypeArticles();

    if (articles != null && articles.size() != 0) {
      Set<ConstructionTypeArticleAttribute> articleAttributes;
      if (articles.size() != 0) {
        for (ConstructionTypeArticle article : articles) {
          orderLineMain = OrderLine.getInstance(order, article,
              article.getNumberOfItems(), article
                  .getDialogOrder(), null,
              article.getOrdNo(), article.getLnNo());

          constructionTypeManager
              .lazyLoadArticle(
                  article,
                  new LazyLoadConstructionTypeArticleEnum[] { LazyLoadConstructionTypeArticleEnum.ATTRIBUTES });

          articleAttributes = article.getAttributes();

          if (articleAttributes != null
              && articleAttributes.size() != 0) {
            orderLineAttributes = new LinkedHashSet<OrderLineAttribute>();
            for (ConstructionTypeArticleAttribute articleAttribute : articleAttributes) {
              orderLineAttributes.add(new OrderLineAttribute(
                  null, orderLineMain, articleAttribute,
                  null, null, articleAttribute
                      .getAttributeValue(),
                  articleAttribute.getDialogOrder(),
                  articleAttribute.getAttributeName()));
            }
            orderLineMain
                .setOrderLineAttributes(orderLineAttributes);
            orderLineMain.setArticlePath(orderLineMain
                .getGeneratedArticlePath());
          }
          setOrderLineConstructionRefs(article, orderLineMain, order);
          orderLines.add(orderLineMain);
          orderLineMain.setArticlePath(orderLineMain
              .getGeneratedArticlePath());
        }
      }

    }

    if (orderLines.size() != 0) {
      calculateAttributes(orderLines);
      order.setOrderLines(orderLines);
    }
  }

  private void setOrderLineConstructionRefs(
      ConstructionTypeArticle constructionArticle,
      OrderLine orderLineMain, Order order) {
    constructionTypeManager
        .lazyLoadArticle(
            constructionArticle,
            new LazyLoadConstructionTypeArticleEnum[] { LazyLoadConstructionTypeArticleEnum.CONSTRUCTION_TYPE_ARTICLES });
    Set<ConstructionTypeArticle> articleRefs = constructionArticle
        .getConstructionTypeArticles();
    OrderLine orderLine;
    Set<OrderLineAttribute> orderLineAttributes;
    Set<OrderLine> orderLineRefs = new LinkedHashSet<OrderLine>();
    if (articleRefs != null) {
      for (ConstructionTypeArticle articleRef : articleRefs) {
        orderLine = OrderLine.getInstance(order, articleRef,
            orderLineMain, articleRef.getNumberOfItems(),
            articleRef.getDialogOrder(), null);

        constructionTypeManager
            .lazyLoadArticle(
                articleRef,
                new LazyLoadConstructionTypeArticleEnum[] { LazyLoadConstructionTypeArticleEnum.ATTRIBUTES });
        Set<ConstructionTypeArticleAttribute> attributes = articleRef
            .getAttributes();

        if (attributes != null) {
          orderLineAttributes = new LinkedHashSet<OrderLineAttribute>();

          for (ConstructionTypeArticleAttribute attribute : attributes) {
            orderLineAttributes.add(new OrderLineAttribute(null,
                orderLine, attribute, null, null, attribute
                    .getAttributeValue(), attribute
                    .getDialogOrder(), attribute
                    .getAttributeName()));
          }

          orderLine.setOrderLineAttributes(orderLineAttributes);

          setOrderLineConstructionRefs(articleRef, orderLine, order);
        }
        orderLineRefs.add(orderLine);
        orderLine.setArticlePath(orderLine.getGeneratedArticlePath());
      }
      orderLineMain.setOrderLines(orderLineRefs);
    }
  }

  private void calculateAttributes(Collection<OrderLine> orderLines) {
    for (OrderLine orderLine : orderLines) {
      orderLine.calculateAttributes();
    }
  }

}
TOP

Related Classes of no.ugland.utransprod.service.TransportCostManagerIntegrationTest

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.