public VehicleRoutingSolution retrieveOrPrepareTripSheetData(
      TripSheet tripSheet, boolean create) {

    List<PickupPoint> pickUpPoints = getPickupPointDetails(tripSheet);
    Shift shift = shiftRepository.get(tripSheet.getShiftId());

    Address address = new Address();
    address.setId(0L);
    address.setAddressLine("Office");
    address.setLatitude(new BigDecimal(AppConstants.OFFICE_LATITUDE));
    address.setLongitude(new BigDecimal(AppConstants.OFFICE_LONGITUDE));

    PickupPoint pickUpPoint = new PickupPoint();
    pickUpPoint.setAddress(address);
    pickUpPoint.setNumberOfEmployees(0);
    pickUpPoints.add(0, pickUpPoint);
    tripSheet.setPickUpPoints(pickUpPoints);
    tripSheet.setShift(shift);

    // sort vehicles
    if (tripSheet.getVehicles() != null) {
      Collections.sort(tripSheet.getVehicles());
    }

    tripSheet.setDistanceMatrix(addressRepository.getAddressDistanceMatrix());
    VehicleRoutingSolution solution;
    if (create) {
      solution =
          solverManager.createSolution(
              tripSheet.getDate().toString() + tripSheet.getShiftId() + tripSheet.isDrop(),
              tripSheet);
    } else {
      solution =
          solverManager.retrieveOrCreateSolution(
              tripSheet.getDate().toString() + tripSheet.getShiftId() + tripSheet.isDrop(),
              tripSheet);
    }
    return solution;
  }