use of org.motechproject.mots.exception.IvrException in project mots by motech-implementations.
the class ModuleAssignmentService method unassignOldModuleVersion.
private void unassignOldModuleVersion(Module oldModule) {
List<AssignedModules> assignedModulesList = repository.findByModules_id(oldModule.getId());
if (assignedModulesList != null && !assignedModulesList.isEmpty()) {
assignedModulesList.forEach(assignedModules -> {
assignedModules.unassignModule(oldModule);
String ivrGroup = oldModule.getIvrGroup();
String chwIvrId = assignedModules.getHealthWorker().getIvrId();
try {
ivrService.removeSubscriberFromGroups(chwIvrId, Collections.singletonList(ivrGroup));
} catch (IvrException ex) {
throw new ModuleAssignmentException("Could not unassign old module version, " + "because of IVR module assignment error.\n\n" + ex.getClearVotoInfo(), ex);
}
});
repository.save(assignedModulesList);
}
}
use of org.motechproject.mots.exception.IvrException in project mots by motech-implementations.
the class ModuleAssignmentService method assignModulesToDistrict.
/**
* Creates DistrictAssignmentLog for district assignment,
* and assigns modules to each CHW from a district.
* @param assignmentDto dto with district id, list of modules assigned to it
* and start and end dates
*/
@Transactional
@PreAuthorize(RoleNames.HAS_ASSIGN_MODULES_ROLE)
public void assignModulesToDistrict(DistrictAssignmentDto assignmentDto) {
List<CommunityHealthWorker> communityHealthWorkers = communityHealthWorkerRepository.findByCommunityFacilityChiefdomDistrictIdAndSelected(UUID.fromString(assignmentDto.getDistrictId()), true);
Set<Module> newChwModules = new HashSet<>();
String userName = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
User currentUser = userService.getUserByUserName(userName);
for (String moduleId : assignmentDto.getModules()) {
Module moduleToAssign = moduleRepository.findById(UUID.fromString(moduleId)).orElseThrow(() -> new EntityNotFoundException("No module found for Id: {0}", moduleId));
newChwModules.add(moduleToAssign);
assignmentLogRepository.save(new DistrictAssignmentLog(districtRepository.findOne(UUID.fromString(assignmentDto.getDistrictId())), LocalDate.parse(assignmentDto.getStartDate()), LocalDate.parse(assignmentDto.getEndDate()), moduleToAssign, currentUser));
}
for (CommunityHealthWorker chw : communityHealthWorkers) {
AssignedModules existingAssignedModules = getAssignedModules(chw.getId());
Set<Module> oldModules = existingAssignedModules.getModules();
Set<Module> modulesToAdd = getModulesToAdd(oldModules, newChwModules);
existingAssignedModules.getModules().addAll(modulesToAdd);
repository.save(existingAssignedModules);
entityManager.flush();
entityManager.refresh(existingAssignedModules);
String ivrId = existingAssignedModules.getHealthWorker().getIvrId();
if (ivrId == null) {
throw new ModuleAssignmentException("Could not assign module to CHW, because CHW has empty IVR id");
}
try {
ivrService.addSubscriberToGroups(ivrId, getIvrGroupsFromModules(modulesToAdd));
} catch (IvrException ex) {
String message = "Could not assign or delete module for CHW, " + "because of IVR module assignment error.\n\n" + ex.getClearVotoInfo();
throw new ModuleAssignmentException(message, ex);
}
moduleProgressService.createModuleProgresses(chw, modulesToAdd);
}
}
use of org.motechproject.mots.exception.IvrException in project mots by motech-implementations.
the class CommunityHealthWorkerService method selectHealthWorker.
/**
* Select CHW, create IVR Subscriber and assign it to CHW. Initiate empty AssignedModules
* instance for selected CHW.
* @param healthWorker CHW to be selected
* @return saved CHW
*/
@PreAuthorize(RoleNames.HAS_CHW_WRITE_ROLE)
public CommunityHealthWorker selectHealthWorker(CommunityHealthWorker healthWorker) {
if (healthWorker.getSelected()) {
throw new ChwException("Could not select CHW, because already selected");
}
healthWorker.setSelected(true);
String phoneNumber = healthWorker.getPhoneNumber();
String name = healthWorker.getCombinedName();
Language preferredLanguage = healthWorker.getPreferredLanguage();
try {
String ivrId = ivrService.createSubscriber(phoneNumber, name, preferredLanguage);
healthWorker.setIvrId(ivrId);
} catch (IvrException ex) {
String message = "Could not select CHW, because of IVR subscriber creation error. \n\n" + ex.getClearVotoInfo();
throw new ChwException(message, ex);
}
healthWorkerRepository.save(healthWorker);
AssignedModules emptyAssignedModulesInstance = new AssignedModules(healthWorker);
assignedModulesRepository.save(emptyAssignedModulesInstance);
return healthWorker;
}
Aggregations