@SuppressWarnings("unchecked")
  private List<DeliveryOrder> ManifestFileToDo(final ManifestFile order)
      throws DataConvertException, UserExistsException {
    List<DeliveryOrder> deliveryOrderList = new ArrayList<DeliveryOrder>();

    if (order != null
        && order.getFileHeaderOrDeliveryOrFileEnd() != null
        && order.getFileHeaderOrDeliveryOrFileEnd().size() > 0) {

      ManifestFile.FileHeader fileHeader =
          (ManifestFile.FileHeader) order.getFileHeaderOrDeliveryOrFileEnd().get(0);
      String plantCode = fileHeader.getPCODE();
      if (plantCode.trim().length() > 3) {
        plantCode = plantCode.substring(plantCode.length() - 3);
      }
      String fileId = fileHeader.getFILID();
      DetachedCriteria criteria0 = DetachedCriteria.forClass(Plant.class);
      criteria0.add(Restrictions.like("code", plantCode, MatchMode.END));
      List<Plant> plantList = plantManager.findByCriteria(criteria0);
      Plant plant = null;
      if (plantList != null && plantList.size() > 0) {
        plant = plantList.get(0);
      } else {
        log.error("Error find plant with code " + fileHeader.getPCODE());
        return null;
      }

      for (Object obj : order.getFileHeaderOrDeliveryOrFileEnd()) {
        if (obj instanceof ManifestFile.Delivery) {
          ManifestFile.Delivery delivery = (ManifestFile.Delivery) obj;
          DeliveryOrder deliveryOrder = parseDelivery(delivery, plant, fileId);

          DetachedCriteria criteria = DetachedCriteria.forClass(DeliveryOrder.class);
          criteria.add(Restrictions.eq("murn", deliveryOrder.getMurn()));
          // criteria.add(Restrictions.eq("fileIdentitfier", deliveryOrder.getFileIdentitfier()));

          List<DeliveryOrder> doList = this.findByCriteria(criteria);
          if (doList != null && doList.size() > 0) {
            String doNo = doList.get(0).getDoNo();
            this.remove(doNo);

            deliveryOrder.setDoNo(doNo);
          }

          this.save(deliveryOrder);
          deliveryOrderList.add(deliveryOrder);

          this.flushSession();
        }
      }
    }

    return deliveryOrderList;
  }