Merge remote-tracking branch 'origin/DLAB-1571' into DLAB-1571
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/BaseBillingDAO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/BaseBillingDAO.java
index 47721fe..28a6c64 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/BaseBillingDAO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/BaseBillingDAO.java
@@ -217,7 +217,7 @@
 			searchCriteria.add(in(PRODUCT, filter.getProducts()));
 		}
 		if (CollectionUtils.isNotEmpty(filter.getShapes())) {
-			searchCriteria.add(in(SHAPE, filter.getShapes()));
+			searchCriteria.add(regex(SHAPE, "(" + String.join("|", filter.getShapes()) + ")"));
 		}
 
 		return searchCriteria;
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java
index bddba04..8eae49b 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java
@@ -122,11 +122,12 @@
 
     @Override
     public String downloadReport(UserInfo user, BillingFilter filter) {
+        boolean isFull = isFullReport(user);
         BillingReport report = getBillingReport(user, filter);
         StringBuilder builder = new StringBuilder(BillingUtils.getFirstLine(report.getSbn(), report.getUsageDateFrom(), report.getUsageDateTo()));
-        builder.append(BillingUtils.getHeader());
+        builder.append(BillingUtils.getHeader(isFull));
         try {
-            report.getReportLines().forEach(r -> builder.append(BillingUtils.printLine(r)));
+            report.getReportLines().forEach(r -> builder.append(BillingUtils.printLine(r, isFull)));
             builder.append(BillingUtils.getTotal(report.getTotalCost(), report.getCurrency()));
             return builder.toString();
         } catch (Exception e) {
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/util/BillingUtils.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/util/BillingUtils.java
index f971d1e..3494fbe 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/util/BillingUtils.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/util/BillingUtils.java
@@ -69,7 +69,7 @@
     private static final String IMAGE_NAME = "Image";
 
     private static final String DATAENGINE_NAME_FORMAT = "%d x %s";
-    private static final String DATAENGINE_SERVICE_NAME_FORMAT = "Master: %s%sSlave: %s";
+    private static final String DATAENGINE_SERVICE_NAME_FORMAT = "Master: %sSlave: %s";
 
     public static Stream<BillingReportLine> edgeBillingDataStream(String project, String sbn, String endpoint) {
         final String userEdgeId = String.format(EDGE_FORMAT, sbn, project, endpoint).toLowerCase();
@@ -159,7 +159,7 @@
     public static String getComputationalShape(UserComputationalResource resource) {
         return DataEngineType.fromDockerImageName(resource.getImageName()) == DataEngineType.SPARK_STANDALONE ?
                 String.format(DATAENGINE_NAME_FORMAT, resource.getDataengineInstanceCount(), resource.getDataengineShape()) :
-                String.format(DATAENGINE_SERVICE_NAME_FORMAT, resource.getMasterNodeShape(), System.lineSeparator(), resource.getSlaveNodeShape());
+                String.format(DATAENGINE_SERVICE_NAME_FORMAT, resource.getMasterNodeShape(), resource.getSlaveNodeShape());
     }
 
     private static Stream<BillingReportLine> standardImageBillingDataStream(String sbn, String endpoint) {
@@ -189,14 +189,20 @@
                 CSVFormatter.SEPARATOR, '\"');
     }
 
-    public static String getHeader() {
-        return CSVFormatter.formatLine(new ArrayList<>(Arrays.asList(BillingUtils.REPORT_HEADERS)), CSVFormatter.SEPARATOR);
+    public static String getHeader(boolean isFull) {
+        List<String> headers = new ArrayList<>(Arrays.asList(BillingUtils.REPORT_HEADERS));
+        if (!isFull) {
+            headers.remove(1);
+        }
+        return CSVFormatter.formatLine(headers, CSVFormatter.SEPARATOR);
     }
 
-    public static String printLine(BillingReportLine line) {
+    public static String printLine(BillingReportLine line, boolean isFull) {
         List<String> lines = new ArrayList<>();
         lines.add(getOrEmpty(line.getDlabId()));
-        lines.add(getOrEmpty(line.getUser()));
+        if (isFull) {
+            lines.add(getOrEmpty(line.getUser()));
+        }
         lines.add(getOrEmpty(line.getProject()));
         lines.add(getOrEmpty(Optional.ofNullable(line.getResourceType()).map(r -> StringUtils.capitalize(r.toString().toLowerCase())).orElse(null)));
         lines.add(getOrEmpty(Optional.ofNullable(line.getStatus()).map(UserInstanceStatus::toString).orElse(null)));