Skip to content

Commit

Permalink
Merge pull request #696 from motech-implementations/NMS-368
Browse files Browse the repository at this point in the history
Nms 368
  • Loading branch information
sripooja authored Sep 22, 2016
2 parents 301ecc7 + 7ad642b commit 3faa539
Show file tree
Hide file tree
Showing 41 changed files with 724 additions and 182 deletions.
4 changes: 2 additions & 2 deletions api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
<parent>
<artifactId>nms</artifactId>
<groupId>org.motechproject.nms</groupId>
<version>1.0.20</version>
<version>1.0.21</version>
<relativePath>../</relativePath>
</parent>

<artifactId>api</artifactId>
<version>1.0.20</version>
<version>1.0.21</version>
<packaging>bundle</packaging>
<name>API module</name>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
import org.motechproject.event.MotechEvent;
import org.motechproject.event.listener.EventRelay;
import org.motechproject.nms.api.web.contract.AddFlwRequest;
import org.motechproject.nms.flw.service.FrontLineWorkerService;
import org.motechproject.nms.flw.utils.FlwConstants;
import org.motechproject.nms.api.web.contract.mobileAcademy.GetBookmarkResponse;
import org.motechproject.nms.api.web.converter.MobileAcademyConverter;
import org.motechproject.nms.flwUpdate.service.FrontLineWorkerImportService;
import org.motechproject.nms.imi.service.CdrFileService;
import org.motechproject.nms.kilkari.repository.SubscriptionDataService;
import org.motechproject.nms.kilkari.service.SubscriberService;
Expand Down Expand Up @@ -64,7 +64,7 @@ public class OpsController extends BaseController {
private MobileAcademyService mobileAcademyService;

@Autowired
private FrontLineWorkerService frontLineWorkerService;
private FrontLineWorkerImportService frontLineWorkerImportService;

private final String contactNumber = "contactNumber";

Expand Down Expand Up @@ -177,7 +177,7 @@ public void createUpdateFlw(@RequestBody AddFlwRequest addFlwRequest) {
flwProperties.put(FlwConstants.CENSUS_VILLAGE_ID, addFlwRequest.getVillageId());
}

frontLineWorkerService.createUpdate(flwProperties);
frontLineWorkerImportService.createUpdate(flwProperties);
}


Expand Down
2 changes: 2 additions & 0 deletions api/src/main/resources/META-INF/spring/blueprint.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@

<osgi:reference id="frontLineWorkerService" interface="org.motechproject.nms.flw.service.FrontLineWorkerService"/>

<osgi:reference id="frontLineWorkerImportService" interface="org.motechproject.nms.flwUpdate.service.FrontLineWorkerImportService"/>

<osgi:reference id="serviceUsageService" interface="org.motechproject.nms.flw.service.ServiceUsageService"/>

<osgi:reference id="serviceUsageCapService" interface="org.motechproject.nms.flw.service.ServiceUsageCapService"/>
Expand Down
4 changes: 2 additions & 2 deletions csv/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
<parent>
<artifactId>nms</artifactId>
<groupId>org.motechproject.nms</groupId>
<version>1.0.20</version>
<version>1.0.21</version>
<relativePath>../</relativePath>
</parent>

<artifactId>csv</artifactId>
<version>1.0.20</version>
<version>1.0.21</version>
<packaging>bundle</packaging>
<name>CSV Module</name>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public class CsvAuditRecord {
@NotNull
private String file;

// Which API endpoint was called? ie: /flw/update/language
// Which API endpoint was called? ie: /flwUpdate/update/language
@Field
@NotNull
private String endpoint;
Expand Down
4 changes: 2 additions & 2 deletions flw/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
<parent>
<artifactId>nms</artifactId>
<groupId>org.motechproject.nms</groupId>
<version>1.0.20</version>
<version>1.0.21</version>
<relativePath>../</relativePath>
</parent>

<artifactId>flw</artifactId>
<version>1.0.20</version>
<version>1.0.21</version>
<packaging>bundle</packaging>
<name>FLW module</name>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import org.motechproject.nms.region.domain.State;

import java.util.List;
import java.util.Map;

/**
* Simple example of a service interface.
Expand All @@ -16,12 +15,6 @@ public interface FrontLineWorkerService {

State getState(FrontLineWorker frontLineWorker);

/**
* Used to create or update an FLW from mcts or other sync services
* @param flwRecord key-value pair of properties for flw
*/
boolean createUpdate(Map<String, Object> flwRecord);

void add(FrontLineWorker frontLineWorker);

FrontLineWorker getByContactNumber(Long contactNumber);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,14 @@
import org.motechproject.event.listener.annotations.MotechListener;
import org.motechproject.mds.query.QueryExecution;
import org.motechproject.mds.util.InstanceSecurityRestriction;
import org.motechproject.nms.flw.domain.FlwError;
import org.motechproject.nms.flw.domain.FlwErrorReason;
import org.motechproject.nms.flw.domain.FrontLineWorker;
import org.motechproject.nms.flw.domain.FrontLineWorkerStatus;
import org.motechproject.nms.flw.repository.FlwErrorDataService;
import org.motechproject.nms.flw.repository.FrontLineWorkerDataService;
import org.motechproject.nms.flw.service.FrontLineWorkerService;
import org.motechproject.nms.flw.utils.FlwConstants;
import org.motechproject.nms.flw.utils.FlwMapper;
import org.motechproject.nms.region.domain.District;
import org.motechproject.nms.region.domain.Language;
import org.motechproject.nms.region.domain.State;
import org.motechproject.nms.region.exception.InvalidLocationException;
import org.motechproject.nms.region.service.LanguageService;
import org.motechproject.nms.region.service.LocationService;
import org.motechproject.scheduler.contract.RepeatingSchedulableJob;
import org.motechproject.scheduler.service.MotechSchedulerService;
import org.motechproject.server.config.SettingsFacade;
Expand All @@ -34,9 +27,7 @@
import org.springframework.transaction.annotation.Transactional;

import javax.jdo.Query;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
Expand All @@ -57,21 +48,16 @@ public class FrontLineWorkerServiceImpl implements FrontLineWorkerService {
private SettingsFacade settingsFacade;
private MotechSchedulerService schedulerService;
private LanguageService languageService;
private LocationService locationService;
private FlwErrorDataService flwErrorDataService;

@Autowired
public FrontLineWorkerServiceImpl(@Qualifier("flwSettings") SettingsFacade settingsFacade,
MotechSchedulerService schedulerService,
FrontLineWorkerDataService frontLineWorkerDataService,
LanguageService languageService, LocationService locationService,
FlwErrorDataService flwErrorDataService) {
LanguageService languageService) {
this.frontLineWorkerDataService = frontLineWorkerDataService;
this.schedulerService = schedulerService;
this.settingsFacade = settingsFacade;
this.languageService = languageService;
this.locationService = locationService;
this.flwErrorDataService = flwErrorDataService;
schedulePurgeOfOldFrontLineWorkers();
}

Expand Down Expand Up @@ -163,79 +149,6 @@ public State getState(FrontLineWorker frontLineWorker) {
return state;
}

@Override // NO CHECKSTYLE Cyclomatic Complexity
public boolean createUpdate(Map<String, Object> flw) {

long stateId = (long) flw.get(FlwConstants.STATE_ID);
long districtId = (long) flw.get(FlwConstants.DISTRICT_ID);
String mctsFlwId = flw.get(FlwConstants.ID).toString();
long contactNumber = (long) flw.get(FlwConstants.CONTACT_NO);

State state = locationService.getState(stateId);
if (state == null) {
flwErrorDataService.create(new FlwError(mctsFlwId, stateId, districtId, FlwErrorReason.INVALID_LOCATION_STATE));
return false;
}
District district = locationService.getDistrict(stateId, districtId);
if (district == null) {
flwErrorDataService.create(new FlwError(mctsFlwId, stateId, districtId, FlwErrorReason.INVALID_LOCATION_DISTRICT));
return false;
}

FrontLineWorker existingFlwByNumber = getByContactNumber(contactNumber);
FrontLineWorker existingFlwByMctsFlwId = getByMctsFlwIdAndState(mctsFlwId, state);
Map<String, Object> location = new HashMap<>();
try {
location = locationService.getLocations(flw, false);

if (existingFlwByMctsFlwId != null && existingFlwByNumber != null) {

if (existingFlwByMctsFlwId.getMctsFlwId().equalsIgnoreCase(existingFlwByNumber.getMctsFlwId()) &&
existingFlwByMctsFlwId.getState().equals(existingFlwByNumber.getState())) {
// we are trying to update the same existing flw. set fields and update
LOGGER.debug("Updating existing user with same phone number");
update(FlwMapper.updateFlw(existingFlwByMctsFlwId, flw, location));
return true;
} else {
// we are trying to update 2 different users and/or phone number used by someone else
LOGGER.debug("Existing flw but phone number(update) already in use");
flwErrorDataService.create(new FlwError(mctsFlwId, stateId, districtId, FlwErrorReason.PHONE_NUMBER_IN_USE));
return false;
}
} else if (existingFlwByMctsFlwId != null && existingFlwByNumber == null) {
// trying to update the phone number of the person. possible migration scenario
// making design decision that flw will lose all progress when phone number is changed. Usage and tracking is not
// worth the effort & we don't really know that its the same flw
LOGGER.debug("Updating phone number for flw");
update(FlwMapper.updateFlw(existingFlwByMctsFlwId, flw, location));
return true;
} else if (existingFlwByMctsFlwId == null && existingFlwByNumber != null) {

if (existingFlwByNumber.getMctsFlwId() == null) {
// we just got data from mcts for a previous anonymous user that subscribed by phone number
// merging those records
LOGGER.debug("Merging mcts data with previously anonymous user");
update(FlwMapper.updateFlw(existingFlwByNumber, flw, location));
return true;
} else {
// phone number used by someone else.
LOGGER.debug("New flw but phone number(update) already in use");
flwErrorDataService.create(new FlwError(mctsFlwId, stateId, districtId, FlwErrorReason.PHONE_NUMBER_IN_USE));
return false;
}

} else { // existingFlwByMctsFlwId & existingFlwByNumber are null)
// new user. set fields and add
LOGGER.debug("Adding new flw user");
add(FlwMapper.createFlw(flw, location));
return true;
}
} catch (InvalidLocationException ile) {
LOGGER.debug(ile.toString());
return false;
}
}

@Override
public void add(FrontLineWorker record) {

Expand Down
20 changes: 3 additions & 17 deletions flw/src/main/resources/META-INF/spring/blueprint.xml
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,6 @@
<osgi:service ref="whitelistService"
interface="org.motechproject.nms.flw.service.WhitelistService" />

<osgi:service ref="frontLineWorkerImportService"
interface="org.motechproject.nms.flw.service.FrontLineWorkerImportService" />

<osgi:service ref="frontLineWorkerUpdateImportService"
interface="org.motechproject.nms.flw.service.FrontLineWorkerUpdateImportService" />

<osgi:reference id="flwErrorDataService"
interface="org.motechproject.nms.flw.repository.FlwErrorDataService" />

Expand All @@ -60,25 +54,17 @@
<osgi:reference id="whitelistStateDataService"
interface="org.motechproject.nms.flw.repository.WhitelistStateDataService" />

<osgi:reference id="locationService"
interface="org.motechproject.nms.region.service.LocationService" />

<osgi:reference id="stateDataService"
interface="org.motechproject.nms.region.repository.StateDataService" />

<osgi:reference id="languageService"
interface="org.motechproject.nms.region.service.LanguageService" />

<osgi:reference id="schedulerService"
interface="org.motechproject.scheduler.service.MotechSchedulerService" />

<osgi:reference id="alertsService" interface="org.motechproject.alerts.contract.AlertService" />

<!-- CSV Audit Service -->
<osgi:reference id="csvAuditService" interface="org.motechproject.nms.csv.service.CsvAuditService" />

<osgi:service ref="flwSettingsService" interface="org.motechproject.nms.flw.service.FlwSettingsService" />

<osgi:reference id="eventRelay" interface="org.motechproject.event.listener.EventRelay"/>

<osgi:service ref="flwErrorDataService"
interface="org.motechproject.nms.flw.repository.FlwErrorDataService" />

</beans>
Loading

0 comments on commit 3faa539

Please sign in to comment.