diff --git a/avni-server-api/src/main/java/org/avni/messaging/domain/Constants.java b/avni-server-api/src/main/java/org/avni/messaging/domain/Constants.java index 8bea06845..509938d6d 100644 --- a/avni-server-api/src/main/java/org/avni/messaging/domain/Constants.java +++ b/avni-server-api/src/main/java/org/avni/messaging/domain/Constants.java @@ -1,7 +1,5 @@ package org.avni.messaging.domain; public class Constants { - public final static int NO_OF_DIGITS_IN_INDIAN_MOBILE_NO = 10; - public final static String PHONE_NUMBER_PATTERN = "^[0-9]{10}"; public final static String DURATION_PATTERN = "^P(?!$)(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?$"; } diff --git a/avni-server-api/src/main/java/org/avni/messaging/repository/GlificContactRepository.java b/avni-server-api/src/main/java/org/avni/messaging/repository/GlificContactRepository.java index 6d4a84ed2..79c511ebb 100644 --- a/avni-server-api/src/main/java/org/avni/messaging/repository/GlificContactRepository.java +++ b/avni-server-api/src/main/java/org/avni/messaging/repository/GlificContactRepository.java @@ -7,6 +7,7 @@ import org.avni.messaging.domain.exception.GlificNotConfiguredException; import org.avni.messaging.external.GlificRestClient; import org.avni.messaging.service.PhoneNumberNotAvailableOrIncorrectException; +import org.avni.server.util.PhoneNumberUtil; import org.springframework.cache.annotation.Cacheable; import org.springframework.context.annotation.Lazy; import org.springframework.core.ParameterizedTypeReference; @@ -17,15 +18,11 @@ import java.util.Collections; import java.util.List; -import static org.avni.messaging.domain.Constants.NO_OF_DIGITS_IN_INDIAN_MOBILE_NO; - @Repository @Lazy //for better startup performance public class GlificContactRepository extends AbstractGlificRepository { public static final String GLIFIC_CONTACT_FOR_PHONE_NUMBER = "glificContactForPhoneNumber"; - public static final String INDIA_ISD_CODE = "91"; public static final String PHONE_NUMBER = "${phoneNumber}"; - public static final String RECEIVER_NAME = "${receiverName}"; public static final String RECEIVER_ID = "${receiverId}"; public static final String FULL_NAME = "${fullName}"; public static final String GROUP_ID = "${groupId}"; @@ -41,7 +38,6 @@ public class GlificContactRepository extends AbstractGlificRepository { private final String GET_CONTACT_GROUP_CONTACT_COUNT_JSON; private final String GET_CONTACT_GROUP_JSON; private final String GET_ALL_MSGS_JSON; - private final String GET_ALL_GROUP_CONVERSATION_MSGS_JSON; private final String ADD_CONTACTS_IN_GROUP_JSON; private final String REMOVE_CONTACTS_IN_GROUP_JSON; private final String ADD_CONTACT_GROUP_JSON; @@ -58,7 +54,6 @@ public GlificContactRepository(GlificRestClient glificRestClient) { GET_CONTACT_GROUP_CONTACT_COUNT_JSON = getJson("getContactGroupContactCount"); GET_CONTACT_GROUP_JSON = getJson("getContactGroup"); GET_ALL_MSGS_JSON = getJson("getAllMessages"); - GET_ALL_GROUP_CONVERSATION_MSGS_JSON = getJson("searchConversationMessages"); ADD_CONTACTS_IN_GROUP_JSON = getJson("updateContactsInGroup"); REMOVE_CONTACTS_IN_GROUP_JSON = getJson("removeContactsInGroup"); ADD_CONTACT_GROUP_JSON = getJson("addContactGroup"); @@ -67,7 +62,7 @@ public GlificContactRepository(GlificRestClient glificRestClient) { } public String getOrCreateContact(String phoneNumber, String fullName) throws PhoneNumberNotAvailableOrIncorrectException, GlificNotConfiguredException { - if (phoneNumber == null || phoneNumber.length() < NO_OF_DIGITS_IN_INDIAN_MOBILE_NO) { + if (!PhoneNumberUtil.isValidPhoneNumber(phoneNumber)) { throw new PhoneNumberNotAvailableOrIncorrectException(); } @@ -77,12 +72,8 @@ public String getOrCreateContact(String phoneNumber, String fullName) throws Pho glificContacts.getContacts().get(0).getId(); } - private String formatPhoneNumberToGlificFormat(String phoneNumber) { - return INDIA_ISD_CODE + phoneNumber.substring(phoneNumber.length() - NO_OF_DIGITS_IN_INDIAN_MOBILE_NO); - } - private String createContact(String phoneNumber, String fullName) throws GlificNotConfiguredException { - String message = OPTIN_CONTACT_JSON.replace(PHONE_NUMBER, formatPhoneNumberToGlificFormat(phoneNumber)) + String message = OPTIN_CONTACT_JSON.replace(PHONE_NUMBER, PhoneNumberUtil.getPhoneNumberInGlificFormat(phoneNumber)) .replace(FULL_NAME, fullName); GlificOptinContactResponse glificOptinContactResponse = glificRestClient.callAPI(message, new ParameterizedTypeReference>() { }); @@ -90,7 +81,7 @@ private String createContact(String phoneNumber, String fullName) throws GlificN } private GlificGetContactsResponse getContact(String phoneNumber) throws GlificNotConfiguredException { - String message = GET_CONTACT_JSON.replace(PHONE_NUMBER, formatPhoneNumberToGlificFormat(phoneNumber)); + String message = GET_CONTACT_JSON.replace(PHONE_NUMBER, PhoneNumberUtil.getPhoneNumberInGlificFormat(phoneNumber)); return glificRestClient.callAPI(message, new ParameterizedTypeReference>() { }); } diff --git a/avni-server-api/src/main/java/org/avni/messaging/service/GroupMessagingService.java b/avni-server-api/src/main/java/org/avni/messaging/service/GroupMessagingService.java index f53f63bc5..a3602077f 100644 --- a/avni-server-api/src/main/java/org/avni/messaging/service/GroupMessagingService.java +++ b/avni-server-api/src/main/java/org/avni/messaging/service/GroupMessagingService.java @@ -15,6 +15,7 @@ import org.avni.server.service.IndividualService; import org.avni.server.service.UserService; import org.avni.server.util.A; +import org.avni.server.util.PhoneNumberUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -143,6 +144,7 @@ private void logAndNotifyError(GlificContactGroupContactsResponse.GlificContactG } private Optional findNameOfTheContact(GlificContactGroupContactsResponse.GlificContactGroupContacts contactGroupContact) { + PhoneNumberUtil.getStandardFormatPhoneNumber(contactGroupContact.getPhone()); Optional name = Stream.>>of( () -> userService.findByPhoneNumber(contactGroupContact.getPhone()).map(User::getName), () -> individualService.findByPhoneNumber(contactGroupContact.getPhone()).map(Individual::getFirstName)) diff --git a/avni-server-api/src/main/java/org/avni/messaging/service/MessageReceiverService.java b/avni-server-api/src/main/java/org/avni/messaging/service/MessageReceiverService.java index ee7901df5..195cc8da9 100644 --- a/avni-server-api/src/main/java/org/avni/messaging/service/MessageReceiverService.java +++ b/avni-server-api/src/main/java/org/avni/messaging/service/MessageReceiverService.java @@ -16,8 +16,6 @@ import java.util.Optional; -import static org.avni.messaging.domain.Constants.NO_OF_DIGITS_IN_INDIAN_MOBILE_NO; - @Service public class MessageReceiverService { @@ -47,7 +45,7 @@ public MessageReceiver saveReceiverIfRequired(ReceiverType receiverType, Long en } public MessageReceiver saveReceiverIfRequired(ReceiverType receiverType, String receiverId) { - if(receiverType != ReceiverType.Group) return saveReceiverIfRequired(receiverType, new Long(receiverId)); + if (receiverType != ReceiverType.Group) return saveReceiverIfRequired(receiverType, new Long(receiverId)); Optional messageReceiverOptional = messageReceiverRepository.findByReceiverTypeAndExternalId(receiverType, receiverId); return messageReceiverOptional.orElseGet(() -> { MessageReceiver messageReceiver = new MessageReceiver(receiverType, receiverId); @@ -62,12 +60,11 @@ public MessageReceiver ensureExternalIdPresent(MessageReceiver messageReceiver) } String phoneNumber = null, fullName = null; - if(messageReceiver.getReceiverType() == ReceiverType.Subject){ + if (messageReceiver.getReceiverType() == ReceiverType.Subject) { Individual individual = individualService.findById(messageReceiver.getReceiverId()); phoneNumber = individualService.findPhoneNumber(individual); fullName = individual.getFullName(); - } - else if (messageReceiver.getReceiverType() == ReceiverType.User){ + } else if (messageReceiver.getReceiverType() == ReceiverType.User) { User user = userService.findById(messageReceiver.getReceiverId()).get(); phoneNumber = user.getPhoneNumber(); fullName = user.getName(); diff --git a/avni-server-api/src/main/java/org/avni/messaging/service/PhoneNumberNotAvailableOrIncorrectException.java b/avni-server-api/src/main/java/org/avni/messaging/service/PhoneNumberNotAvailableOrIncorrectException.java index 1253c6cf8..d283bbbdc 100644 --- a/avni-server-api/src/main/java/org/avni/messaging/service/PhoneNumberNotAvailableOrIncorrectException.java +++ b/avni-server-api/src/main/java/org/avni/messaging/service/PhoneNumberNotAvailableOrIncorrectException.java @@ -1,4 +1,10 @@ package org.avni.messaging.service; public class PhoneNumberNotAvailableOrIncorrectException extends Exception { + public PhoneNumberNotAvailableOrIncorrectException() { + } + + public PhoneNumberNotAvailableOrIncorrectException(String message) { + super(message); + } } diff --git a/avni-server-api/src/main/java/org/avni/server/dao/UserRepository.java b/avni-server-api/src/main/java/org/avni/server/dao/UserRepository.java index e56351ee0..869a10dd5 100644 --- a/avni-server-api/src/main/java/org/avni/server/dao/UserRepository.java +++ b/avni-server-api/src/main/java/org/avni/server/dao/UserRepository.java @@ -75,14 +75,6 @@ Page findByOrganisationIdAndIsVoidedFalse(@Param("organisationId") Long or List findByCatchmentAndIsVoidedFalse(Catchment catchment); - default Optional findUserWithMatchingPropertyValue(String propertyName, String value) { - Specification specification = (Root root, CriteriaQuery query, CriteriaBuilder cb) -> - cb.like(root.get(propertyName), "%" + value + "%"); - - List users = findAll(specification); - return users.isEmpty() ? Optional.empty() : Optional.of(users.get(0)); - } - default User getUser(String userId) { User user = null; if (RequestUtils.isValidUUID(userId)) { @@ -96,6 +88,8 @@ default User getUser(String userId) { return user; } + Optional findByPhoneNumber(String phoneNumber); + @Query(value = "select (count(p.id) > 0) as exists from group_privilege\n" + " join privilege p on group_privilege.privilege_id = p.id\n" + " join groups on group_privilege.group_id = groups.id and groups.is_voided = false\n" + diff --git a/avni-server-api/src/main/java/org/avni/server/domain/Account.java b/avni-server-api/src/main/java/org/avni/server/domain/Account.java index 0a9211687..226bf3a8b 100644 --- a/avni-server-api/src/main/java/org/avni/server/domain/Account.java +++ b/avni-server-api/src/main/java/org/avni/server/domain/Account.java @@ -58,4 +58,8 @@ public void setName(String name) { public String getRegion() { return region; } + + public void setRegion(String region) { + this.region = region; + } } diff --git a/avni-server-api/src/main/java/org/avni/server/importer/batch/csv/creator/ObservationCreator.java b/avni-server-api/src/main/java/org/avni/server/importer/batch/csv/creator/ObservationCreator.java index a84d159c2..49a090d7c 100644 --- a/avni-server-api/src/main/java/org/avni/server/importer/batch/csv/creator/ObservationCreator.java +++ b/avni-server-api/src/main/java/org/avni/server/importer/batch/csv/creator/ObservationCreator.java @@ -18,6 +18,7 @@ import org.avni.server.service.LocationService; import org.avni.server.service.ObservationService; import org.avni.server.service.S3Service; +import org.avni.server.util.PhoneNumberUtil; import org.avni.server.util.S; import org.avni.server.web.request.ObservationRequest; import org.slf4j.Logger; @@ -37,20 +38,18 @@ import java.util.stream.Stream; import static java.lang.String.format; -import static org.avni.messaging.domain.Constants.PHONE_NUMBER_PATTERN; @Component public class ObservationCreator { - private static Logger logger = LoggerFactory.getLogger(ObservationCreator.class); - private AddressLevelTypeRepository addressLevelTypeRepository; - private ConceptRepository conceptRepository; - private FormRepository formRepository; - private ObservationService observationService; - private S3Service s3Service; - private IndividualService individualService; - private LocationService locationService; - private FormElementRepository formElementRepository; + private final AddressLevelTypeRepository addressLevelTypeRepository; + private final ConceptRepository conceptRepository; + private final FormRepository formRepository; + private final ObservationService observationService; + private final S3Service s3Service; + private final IndividualService individualService; + private final LocationService locationService; + private final FormElementRepository formElementRepository; @Autowired public ObservationCreator(AddressLevelTypeRepository addressLevelTypeRepository, @@ -274,11 +273,11 @@ private Object getMediaObservationValue(String answerValue, List errorMs private Map toPhoneNumberFormat(String phoneNumber, List errorMsgs, String conceptName) { Map phoneNumberObs = new HashMap<>(); - if (!phoneNumber.matches(PHONE_NUMBER_PATTERN)) { - errorMsgs.add(format("Invalid %s provided %s. Please provide 10 digit number.", conceptName, phoneNumber)); + if (!PhoneNumberUtil.isValidPhoneNumber(phoneNumber)) { + errorMsgs.add(format("Invalid %s provided %s. Please provide valid phone number.", conceptName, phoneNumber)); return null; } - phoneNumberObs.put("phoneNumber", phoneNumber); + phoneNumberObs.put("phoneNumber", PhoneNumberUtil.getDomesticPhoneNumber(phoneNumber)); phoneNumberObs.put("verified", false); return phoneNumberObs; } diff --git a/avni-server-api/src/main/java/org/avni/server/importer/batch/csv/writer/UserAndCatchmentWriter.java b/avni-server-api/src/main/java/org/avni/server/importer/batch/csv/writer/UserAndCatchmentWriter.java index 3efeae59b..60cb56bae 100644 --- a/avni-server-api/src/main/java/org/avni/server/importer/batch/csv/writer/UserAndCatchmentWriter.java +++ b/avni-server-api/src/main/java/org/avni/server/importer/batch/csv/writer/UserAndCatchmentWriter.java @@ -94,10 +94,7 @@ private void write(Row row) throws Exception { } User.validateEmail(email); user.setEmail(email); - if (!userService.isValidPhoneNumber(phoneNumber)) { - throw new ValidationException(String.format("Phone number is invalid or empty - '%s'.", phoneNumber)); - } - user.setPhoneNumber(phoneNumber); + userService.setPhoneNumber(phoneNumber, user); user.setName(nameOfUser); if (!isNewUser) resetSyncService.recordSyncAttributeValueChangeForUser(user, catchment.getId(), syncSettings); user.setCatchment(catchment); diff --git a/avni-server-api/src/main/java/org/avni/server/service/EnhancedValidationService.java b/avni-server-api/src/main/java/org/avni/server/service/EnhancedValidationService.java index 2d7ff1626..e50e65b71 100644 --- a/avni-server-api/src/main/java/org/avni/server/service/EnhancedValidationService.java +++ b/avni-server-api/src/main/java/org/avni/server/service/EnhancedValidationService.java @@ -21,6 +21,7 @@ import org.avni.server.util.BugsnagReporter; import org.avni.server.util.DateTimeUtil; import org.avni.server.util.ObjectMapperSingleton; +import org.avni.server.util.PhoneNumberUtil; import org.avni.server.web.request.ObservationRequest; import org.avni.server.web.request.rules.RulesContractWrapper.Decision; import org.avni.server.web.validation.ValidationException; @@ -34,7 +35,6 @@ import java.util.stream.Collectors; import static org.avni.messaging.domain.Constants.DURATION_PATTERN; -import static org.avni.messaging.domain.Constants.PHONE_NUMBER_PATTERN; @Service("EnhancedValidationService") @ConditionalOnProperty(value = "avni.enhancedValidation.enabled", havingValue = "true") @@ -240,7 +240,7 @@ private String validateAnswer(Concept question, FormElement formElement, Object case PhoneNumber: try { PhoneNumberObservationValue phoneNumber = objectMapper.convertValue(value, PhoneNumberObservationValue.class); - if (!phoneNumber.getPhoneNumber().matches(PHONE_NUMBER_PATTERN)) { + if (PhoneNumberUtil.isValidPhoneNumber(phoneNumber.getPhoneNumber())) { return formatErrorMessage(question, value); } } catch (ClassCastException | IllegalArgumentException e) { diff --git a/avni-server-api/src/main/java/org/avni/server/service/IndividualService.java b/avni-server-api/src/main/java/org/avni/server/service/IndividualService.java index 35b22a1ab..c5cda3e60 100644 --- a/avni-server-api/src/main/java/org/avni/server/service/IndividualService.java +++ b/avni-server-api/src/main/java/org/avni/server/service/IndividualService.java @@ -21,6 +21,7 @@ import org.avni.server.service.accessControl.AccessControlService; import org.avni.server.util.BadRequestError; import org.avni.server.util.ObjectMapperSingleton; +import org.avni.server.util.PhoneNumberUtil; import org.avni.server.util.S; import org.avni.server.web.request.*; import org.avni.server.web.request.api.RequestUtils; @@ -38,9 +39,6 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static org.avni.messaging.domain.Constants.NO_OF_DIGITS_IN_INDIAN_MOBILE_NO; - - @Service public class IndividualService implements ScopeAwareService { public static final String PHONE_NUMBER_FOR_SUBJECT_ID = "phoneNumberForSubjectId"; @@ -461,7 +459,7 @@ public Optional findByPhoneNumber(String phoneNumber) { if (!phoneNumberConcept.isPresent()) { phoneNumberConcept = conceptService.findContactNumberConcept(); } - phoneNumber = phoneNumber.substring(phoneNumber.length() - NO_OF_DIGITS_IN_INDIAN_MOBILE_NO); + phoneNumber = PhoneNumberUtil.getDomesticPhoneNumber(phoneNumber); return phoneNumberConcept.isPresent() ? individualRepository.findByConceptWithMatchingPattern(phoneNumberConcept.get(), "%" + phoneNumber) : Optional.empty(); diff --git a/avni-server-api/src/main/java/org/avni/server/service/UserService.java b/avni-server-api/src/main/java/org/avni/server/service/UserService.java index 672a43325..2e9097afe 100644 --- a/avni-server-api/src/main/java/org/avni/server/service/UserService.java +++ b/avni-server-api/src/main/java/org/avni/server/service/UserService.java @@ -1,12 +1,11 @@ package org.avni.server.service; -import com.google.i18n.phonenumbers.NumberParseException; -import com.google.i18n.phonenumbers.PhoneNumberUtil; import org.avni.server.application.Subject; import org.avni.server.dao.*; import org.avni.server.domain.*; import org.avni.server.framework.security.UserContextHolder; import org.avni.server.service.exception.GroupNotFoundException; +import org.avni.server.util.PhoneNumberUtil; import org.avni.server.web.validation.ValidationException; import org.bouncycastle.util.Strings; import org.joda.time.DateTime; @@ -23,8 +22,6 @@ import java.util.Optional; import java.util.stream.Collectors; -import static org.avni.messaging.domain.Constants.NO_OF_DIGITS_IN_INDIAN_MOBILE_NO; - @Service public class UserService implements NonScopeAwareService { private static final Logger logger = LoggerFactory.getLogger(UserService.class); @@ -34,17 +31,15 @@ public class UserService implements NonScopeAwareService { private final UserSubjectRepository userSubjectRepository; private final IndividualRepository individualRepository; private final SubjectTypeRepository subjectTypeRepository; - private final AccountRepository accountRepository; @Autowired - public UserService(UserRepository userRepository, GroupRepository groupRepository, UserGroupRepository userGroupRepository, UserSubjectRepository userSubjectRepository, IndividualRepository individualRepository, SubjectTypeRepository subjectTypeRepository, AccountRepository accountRepository) { + public UserService(UserRepository userRepository, GroupRepository groupRepository, UserGroupRepository userGroupRepository, UserSubjectRepository userSubjectRepository, IndividualRepository individualRepository, SubjectTypeRepository subjectTypeRepository) { this.userRepository = userRepository; this.groupRepository = groupRepository; this.userGroupRepository = userGroupRepository; this.userSubjectRepository = userSubjectRepository; this.individualRepository = individualRepository; this.subjectTypeRepository = subjectTypeRepository; - this.accountRepository = accountRepository; } public User getCurrentUser() { @@ -132,8 +127,7 @@ public Optional findById(Long id) { } public Optional findByPhoneNumber(String phoneNumber) { - phoneNumber = phoneNumber.substring(phoneNumber.length() - NO_OF_DIGITS_IN_INDIAN_MOBILE_NO); - return userRepository.findUserWithMatchingPropertyValue("phoneNumber", phoneNumber); + return userRepository.findByPhoneNumber(PhoneNumberUtil.getStandardFormatPhoneNumber(phoneNumber)); } @Transactional @@ -192,13 +186,10 @@ public void ensureSubjectForUser(User user, SubjectType subjectType) { userSubjectRepository.save(userSubject); } - public boolean isValidPhoneNumber(String phoneNumber) { - try { - String region = UserContextHolder.getOrganisation().getAccount().getRegion(); - PhoneNumberUtil instance = PhoneNumberUtil.getInstance(); - return instance.isValidNumber(instance.parse(phoneNumber, region)); - } catch (NumberParseException e) { - return false; + public void setPhoneNumber(String phoneNumber, User user) { + if (!PhoneNumberUtil.isValidPhoneNumber(phoneNumber)) { + throw new ValidationException(String.format("Phone number is invalid or empty - '%s'.", phoneNumber)); } + user.setPhoneNumber(PhoneNumberUtil.getStandardFormatPhoneNumber(phoneNumber)); } } diff --git a/avni-server-api/src/main/java/org/avni/server/util/PhoneNumberUtil.java b/avni-server-api/src/main/java/org/avni/server/util/PhoneNumberUtil.java new file mode 100644 index 000000000..04fbe7526 --- /dev/null +++ b/avni-server-api/src/main/java/org/avni/server/util/PhoneNumberUtil.java @@ -0,0 +1,45 @@ +package org.avni.server.util; + +import com.google.i18n.phonenumbers.NumberParseException; +import com.google.i18n.phonenumbers.Phonenumber; +import org.avni.server.framework.security.UserContextHolder; + +public class PhoneNumberUtil { + public static boolean isValidPhoneNumber(String phoneNumber) { + try { + String region = UserContextHolder.getOrganisation().getAccount().getRegion(); + com.google.i18n.phonenumbers.PhoneNumberUtil instance = com.google.i18n.phonenumbers.PhoneNumberUtil.getInstance(); + return instance.isValidNumber(instance.parse(phoneNumber, region)); + } catch (NumberParseException e) { + return false; + } + } + + public static String getStandardFormatPhoneNumber(String phoneNumber) { + return getPhoneNumber(phoneNumber, com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat.E164); + } + + private static Phonenumber.PhoneNumber getPhoneNumber(String phoneNumber) { + try { + String region = UserContextHolder.getOrganisation().getAccount().getRegion(); + com.google.i18n.phonenumbers.PhoneNumberUtil instance = com.google.i18n.phonenumbers.PhoneNumberUtil.getInstance(); + return instance.parse(phoneNumber, region); + } catch (NumberParseException e) { + throw new RuntimeException(e); + } + } + + private static String getPhoneNumber(String phoneNumber, com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat phoneNumberFormat) { + com.google.i18n.phonenumbers.PhoneNumberUtil instance = com.google.i18n.phonenumbers.PhoneNumberUtil.getInstance(); + return instance.format(getPhoneNumber(phoneNumber), phoneNumberFormat); + } + + public static String getPhoneNumberInGlificFormat(String phoneNumber) { + return PhoneNumberUtil.getStandardFormatPhoneNumber(phoneNumber).replace("+", ""); + } + + public static String getDomesticPhoneNumber(String phoneNumber) { + Phonenumber.PhoneNumber pn = getPhoneNumber(phoneNumber); + return "" + pn.getNationalNumber(); + } +} diff --git a/avni-server-api/src/main/java/org/avni/server/web/AccountController.java b/avni-server-api/src/main/java/org/avni/server/web/AccountController.java index 356fb1811..ccc275357 100644 --- a/avni-server-api/src/main/java/org/avni/server/web/AccountController.java +++ b/avni-server-api/src/main/java/org/avni/server/web/AccountController.java @@ -40,6 +40,7 @@ public ResponseEntity createAccount(@RequestBody AccountRequest accountRequest) } Account account = new Account(); account.setName(accountRequest.getName()); + account.setRegion(accountRequest.getRegion()); User user = UserContextHolder.getUserContext().getUser(); setDefaultAccountAdmin(account, user, new HashSet<>()); accountRepository.save(account); @@ -52,6 +53,7 @@ public ResponseEntity updateAccount(@PathVariable Long id, @RequestBody Accou accessControlService.assertIsSuperAdmin(); Account account = accountRepository.findOne(id); account.setName(accountRequest.getName()); + account.setRegion(accountRequest.getRegion()); accountRepository.save(account); return new ResponseEntity<>(account, HttpStatus.OK); } @@ -74,7 +76,6 @@ public Account getById(@PathVariable Long id) { return accountRepository.findByIdAndAccountAdmin_User_Id(id, user.getId()); } - private void setDefaultAccountAdmin(Account account, User user, Set accountAdmins) { AccountAdmin accountAdmin = new AccountAdmin(); accountAdmin.setName(user.getName()); @@ -83,5 +84,4 @@ private void setDefaultAccountAdmin(Account account, User user, Set