|
|
@ -1034,26 +1034,27 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|
|
|
* @return Whether status is changed or not
|
|
|
|
* @return Whether status is changed or not
|
|
|
|
* @throws DeviceManagementException on errors while trying to calculate Cost
|
|
|
|
* @throws DeviceManagementException on errors while trying to calculate Cost
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public BillingResponse calculateCost(String tenantDomain, Timestamp startDate, Timestamp endDate, List<Device> allDevices) throws MetadataManagementDAOException, DeviceManagementException {
|
|
|
|
public BillingResponse calculateUsage(String tenantDomain, Timestamp startDate, Timestamp endDate, List<Device> allDevices) throws MetadataManagementDAOException, DeviceManagementException {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// All code related to cost calculation has being commented out to comply with the current requirements
|
|
|
|
BillingResponse billingResponse = new BillingResponse();
|
|
|
|
BillingResponse billingResponse = new BillingResponse();
|
|
|
|
List<Device> deviceStatusNotAvailable = new ArrayList<>();
|
|
|
|
List<Device> deviceStatusNotAvailable = new ArrayList<>();
|
|
|
|
double totalCost = 0.0;
|
|
|
|
// double totalCost = 0.0;
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
MetadataManagementService meta = DeviceManagementDataHolder
|
|
|
|
// MetadataManagementService meta = DeviceManagementDataHolder
|
|
|
|
.getInstance().getMetadataManagementService();
|
|
|
|
// .getInstance().getMetadataManagementService();
|
|
|
|
Metadata metadata = meta.retrieveMetadata(DeviceManagementConstants.META_KEY);
|
|
|
|
// Metadata metadata = meta.retrieveMetadata(DeviceManagementConstants.META_KEY);
|
|
|
|
|
|
|
|
//
|
|
|
|
Gson g = new Gson();
|
|
|
|
// Gson g = new Gson();
|
|
|
|
Collection<Cost> costData = null;
|
|
|
|
// Collection<Cost> costData = null;
|
|
|
|
|
|
|
|
//
|
|
|
|
Type collectionType = new TypeToken<Collection<Cost>>() {
|
|
|
|
// Type collectionType = new TypeToken<Collection<Cost>>() {
|
|
|
|
}.getType();
|
|
|
|
// }.getType();
|
|
|
|
if (metadata != null) {
|
|
|
|
// if (metadata != null) {
|
|
|
|
costData = g.fromJson(metadata.getMetaValue(), collectionType);
|
|
|
|
// costData = g.fromJson(metadata.getMetaValue(), collectionType);
|
|
|
|
for (Cost tenantCost : costData) {
|
|
|
|
// for (Cost tenantCost : costData) {
|
|
|
|
if (tenantCost.getTenantDomain().equals(tenantDomain)) {
|
|
|
|
// if (tenantCost.getTenantDomain().equals(tenantDomain)) {
|
|
|
|
for (Device device : allDevices) {
|
|
|
|
for (Device device : allDevices) {
|
|
|
|
long dateDiff = 0;
|
|
|
|
long dateDiff = 0;
|
|
|
|
device.setDeviceStatusInfo(getDeviceStatusHistory(device, null, endDate, true));
|
|
|
|
device.setDeviceStatusInfo(getDeviceStatusHistory(device, null, endDate, true));
|
|
|
@ -1088,9 +1089,9 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
long dateInDays = (long) dateDiffInDays;
|
|
|
|
long dateInDays = (long) dateDiffInDays;
|
|
|
|
double cost = (tenantCost.getCost() / 365) * dateInDays;
|
|
|
|
// double cost = (tenantCost.getCost() / 365) * dateInDays;
|
|
|
|
totalCost += cost;
|
|
|
|
// totalCost += cost;
|
|
|
|
device.setCost(Math.round(cost * 100.0) / 100.0);
|
|
|
|
// device.setCost(Math.round(cost * 100.0) / 100.0);
|
|
|
|
long totalDays = dateInDays + device.getDaysUsed();
|
|
|
|
long totalDays = dateInDays + device.getDaysUsed();
|
|
|
|
device.setDaysUsed((int) totalDays);
|
|
|
|
device.setDaysUsed((int) totalDays);
|
|
|
|
if (deviceStatus.isEmpty()) {
|
|
|
|
if (deviceStatus.isEmpty()) {
|
|
|
@ -1098,17 +1099,13 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
// }
|
|
|
|
} catch (DeviceManagementException e) {
|
|
|
|
} catch (DeviceManagementException e) {
|
|
|
|
String msg = "Error occurred calculating cost of devices";
|
|
|
|
String msg = "Error occurred calculating cost of devices";
|
|
|
|
log.error(msg, e);
|
|
|
|
log.error(msg, e);
|
|
|
|
throw new DeviceManagementException(msg, e);
|
|
|
|
throw new DeviceManagementException(msg, e);
|
|
|
|
} catch (MetadataManagementException e) {
|
|
|
|
|
|
|
|
String msg = "Error when retrieving metadata of billing feature";
|
|
|
|
|
|
|
|
log.error(msg, e);
|
|
|
|
|
|
|
|
throw new DeviceManagementException(msg, e);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!deviceStatusNotAvailable.isEmpty()) {
|
|
|
|
if (!deviceStatusNotAvailable.isEmpty()) {
|
|
|
@ -1125,7 +1122,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|
|
|
billingResponse.setStartDate(startDate.toString());
|
|
|
|
billingResponse.setStartDate(startDate.toString());
|
|
|
|
billingResponse.setEndDate(endDate.toString());
|
|
|
|
billingResponse.setEndDate(endDate.toString());
|
|
|
|
billingResponse.setBillPeriod(calStart.get(Calendar.YEAR) + " - " + calEnd.get(Calendar.YEAR));
|
|
|
|
billingResponse.setBillPeriod(calStart.get(Calendar.YEAR) + " - " + calEnd.get(Calendar.YEAR));
|
|
|
|
billingResponse.setTotalCostPerYear(Math.round(totalCost * 100.0) / 100.0);
|
|
|
|
// billingResponse.setTotalCostPerYear(Math.round(totalCost * 100.0) / 100.0);
|
|
|
|
billingResponse.setDeviceCount(allDevices.size());
|
|
|
|
billingResponse.setDeviceCount(allDevices.size());
|
|
|
|
|
|
|
|
|
|
|
|
return billingResponse;
|
|
|
|
return billingResponse;
|
|
|
@ -1134,6 +1131,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public PaginationResult createBillingFile(int tenantId, String tenantDomain, Timestamp startDate, Timestamp endDate) throws DeviceManagementException {
|
|
|
|
public PaginationResult createBillingFile(int tenantId, String tenantDomain, Timestamp startDate, Timestamp endDate) throws DeviceManagementException {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// All code related to cost calculation has being commented out to comply with the current requirements
|
|
|
|
PaginationResult paginationResult = new PaginationResult();
|
|
|
|
PaginationResult paginationResult = new PaginationResult();
|
|
|
|
List<Device> allDevices = new ArrayList<>();
|
|
|
|
List<Device> allDevices = new ArrayList<>();
|
|
|
|
List<BillingResponse> billingResponseList = new ArrayList<>();
|
|
|
|
List<BillingResponse> billingResponseList = new ArrayList<>();
|
|
|
@ -1192,10 +1190,10 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|
|
|
// The query returns devices which are enrolled prior this year now in removed state
|
|
|
|
// The query returns devices which are enrolled prior this year now in removed state
|
|
|
|
allDevicesPerYear.addAll(deviceDAO.getRemovedPriorYearsDeviceList(tenantId, newStartDate, newEndDate));
|
|
|
|
allDevicesPerYear.addAll(deviceDAO.getRemovedPriorYearsDeviceList(tenantId, newStartDate, newEndDate));
|
|
|
|
|
|
|
|
|
|
|
|
BillingResponse billingResponse = calculateCost(tenantDomain, newStartDate, newEndDate, allDevicesPerYear);
|
|
|
|
BillingResponse billingResponse = calculateUsage(tenantDomain, newStartDate, newEndDate, allDevicesPerYear);
|
|
|
|
billingResponseList.add(billingResponse);
|
|
|
|
billingResponseList.add(billingResponse);
|
|
|
|
allDevices.addAll(billingResponse.getDevice());
|
|
|
|
allDevices.addAll(billingResponse.getDevice());
|
|
|
|
totalCost = totalCost + billingResponse.getTotalCostPerYear();
|
|
|
|
// totalCost = totalCost + billingResponse.getTotalCostPerYear();
|
|
|
|
deviceCount = deviceCount + billingResponse.getDeviceCount();
|
|
|
|
deviceCount = deviceCount + billingResponse.getDeviceCount();
|
|
|
|
LocalDateTime nextStartDate = oneYearAfterStart.plusDays(1).with(LocalTime.of(00, 00, 00));
|
|
|
|
LocalDateTime nextStartDate = oneYearAfterStart.plusDays(1).with(LocalTime.of(00, 00, 00));
|
|
|
|
startDate = Timestamp.valueOf(nextStartDate);
|
|
|
|
startDate = Timestamp.valueOf(nextStartDate);
|
|
|
@ -1216,10 +1214,10 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|
|
|
// The query returns devices which are enrolled prior this year now in removed state
|
|
|
|
// The query returns devices which are enrolled prior this year now in removed state
|
|
|
|
allDevicesPerRemainingDays.addAll(deviceDAO.getRemovedPriorYearsDeviceList(tenantId, startDate, endDate));
|
|
|
|
allDevicesPerRemainingDays.addAll(deviceDAO.getRemovedPriorYearsDeviceList(tenantId, startDate, endDate));
|
|
|
|
|
|
|
|
|
|
|
|
BillingResponse billingResponse = calculateCost(tenantDomain, startDate, endDate, allDevicesPerRemainingDays);
|
|
|
|
BillingResponse billingResponse = calculateUsage(tenantDomain, startDate, endDate, allDevicesPerRemainingDays);
|
|
|
|
billingResponseList.add(billingResponse);
|
|
|
|
billingResponseList.add(billingResponse);
|
|
|
|
allDevices.addAll(billingResponse.getDevice());
|
|
|
|
allDevices.addAll(billingResponse.getDevice());
|
|
|
|
totalCost = totalCost + billingResponse.getTotalCostPerYear();
|
|
|
|
// totalCost = totalCost + billingResponse.getTotalCostPerYear();
|
|
|
|
deviceCount = deviceCount + billingResponse.getDeviceCount();
|
|
|
|
deviceCount = deviceCount + billingResponse.getDeviceCount();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1231,7 +1229,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|
|
|
BillingResponse billingResponse = new BillingResponse("all", Math.round(totalCost * 100.0) / 100.0, allDevices, calStart.get(Calendar.YEAR) + " - " + calEnd.get(Calendar.YEAR), initialStartDate.toString(), endDate.toString(), allDevices.size());
|
|
|
|
BillingResponse billingResponse = new BillingResponse("all", Math.round(totalCost * 100.0) / 100.0, allDevices, calStart.get(Calendar.YEAR) + " - " + calEnd.get(Calendar.YEAR), initialStartDate.toString(), endDate.toString(), allDevices.size());
|
|
|
|
billingResponseList.add(billingResponse);
|
|
|
|
billingResponseList.add(billingResponse);
|
|
|
|
paginationResult.setData(billingResponseList);
|
|
|
|
paginationResult.setData(billingResponseList);
|
|
|
|
paginationResult.setTotalCost(Math.round(totalCost * 100.0) / 100.0);
|
|
|
|
// paginationResult.setTotalCost(Math.round(totalCost * 100.0) / 100.0);
|
|
|
|
paginationResult.setTotalDeviceCount(deviceCount);
|
|
|
|
paginationResult.setTotalDeviceCount(deviceCount);
|
|
|
|
BillingCacheManagerImpl.getInstance().addBillingToCache(paginationResult, tenantDomain, initialStartDate, endDate);
|
|
|
|
BillingCacheManagerImpl.getInstance().addBillingToCache(paginationResult, tenantDomain, initialStartDate, endDate);
|
|
|
|
return paginationResult;
|
|
|
|
return paginationResult;
|
|
|
|