def delete_entity_instance(manager, all_ids, entity_type, transport_info): web_player = WebPlayer(manager) for entity_id in all_ids: message = {ENTITY_TYPE_FIELD_CODE: entity_type, SHORT_CODE: entity_id, 'form_code': ENTITY_DELETION_FORM_CODE} mangrove_request = Request(message, transport_info) web_player.accept(mangrove_request)
def process_create_data_sender_form(dbm, form, org_id): message = None data_sender_id = None if form.is_valid(): try: organization = Organization.objects.get(org_id=org_id) if organization.in_trial_mode: add_data_sender_to_trial_organization(form.cleaned_data["telephone_number"], org_id) web_player = WebPlayer(dbm, LocationBridge(location_tree=get_location_tree(), get_loc_hierarchy=get_location_hierarchy)) reporter_id = form.cleaned_data["short_code"] if form.cleaned_data != "" else None request = Request(message=_get_data(form.cleaned_data, organization.country_name(), reporter_id), transportInfo=TransportInfo(transport='web', source='web', destination='mangrove')) response = web_player.accept(request, logger=websubmission_logger) if response.success: data_sender_id = response.short_code message = get_success_msg_for_registration_using(response, "web") else: form.update_errors(response.errors) except MangroveException as exception: message = exception.message return data_sender_id,message
def _validate_post_data(dbm, request): form = ReporterRegistrationForm(request.POST) message = None success = False form_errors = [] form_errors.extend(form.non_field_errors()) if form.is_valid(): form_errors = [] form_data = { k: v for (k, v) in form.cleaned_data.items() if not is_empty(v) } try: entered_telephone_number = form_data.get("telephone_number") tel_number = _get_telephone_number(entered_telephone_number) if not helper.unique(dbm, tel_number): raise MultipleReportersForANumberException( entered_telephone_number) web_player = WebPlayer(dbm, SubmissionHandler(dbm)) response = web_player.accept( Request(message=_get_data(form_data), transportInfo=TransportInfo(transport='web', source='web', destination='mangrove'))) message = get_success_msg_for_registration_using(response, "web") success = True except MangroveException as exception: form_errors.append(exception.message) success = False return form, form_errors, message, success
def submit(request): dbm = get_database_manager(request) post = _get_submission(request.POST) success = True try: web_player = WebPlayer(dbm, SubmissionHandler(dbm)) message = { k: v for (k, v) in post.get('message').items() if not is_empty(v) } if message.get(LOCATION_TYPE_FIELD_CODE) is not None: message[LOCATION_TYPE_FIELD_CODE] += COUNTRY request = Request(message=message, transportInfo=TransportInfo( transport=post.get('transport'), source=post.get('source'), destination=post.get('destination'))) response = web_player.accept(request) if response.success: message = get_success_msg_for_registration_using(response, "web") else: message = get_submission_error_message_for(response.errors) entity_id = response.datarecord_id except MangroveException as exception: message = get_exception_message_for(exception=exception, channel="web") success = False entity_id = None return HttpResponse( json.dumps({ 'success': success, 'message': message, 'entity_id': entity_id }))
def _validate_post_data(dbm, request): form = ReporterRegistrationForm(request.POST) message = None success = False form_errors = [] form_errors.extend(form.non_field_errors()) if form.is_valid(): form_errors = [] form_data = {k: v for (k, v) in form.cleaned_data.items() if not is_empty(v)} try: entered_telephone_number = form_data.get("telephone_number") tel_number = _get_telephone_number(entered_telephone_number) if not helper.unique(dbm, tel_number): raise MultipleReportersForANumberException(entered_telephone_number) web_player = WebPlayer(dbm, SubmissionHandler(dbm)) response = web_player.accept( Request(message=_get_data(form_data), transportInfo=TransportInfo(transport='web', source='web', destination='mangrove'))) message = get_success_msg_for_registration_using(response, "web") success = True except MangroveException as exception: form_errors.append(exception.message) success = False return form, form_errors, message, success
def _edit_contact(self, form, manager, organization, reporter_id): web_player = WebPlayer(manager, LocationBridge(location_tree=get_location_tree(), get_loc_hierarchy=get_location_hierarchy)) response = web_player.accept( Request(message=_get_data(form.cleaned_data, organization.country_name(), reporter_id), transportInfo=TransportInfo(transport='web', source='web', destination='mangrove'), is_update=True)) return response
def process_create_data_sender_form(dbm, form, org_id): message = None data_sender_id = None if form.is_valid(): try: organization = Organization.objects.get(org_id=org_id) if organization.in_trial_mode: _add_data_sender_to_trial_organization( form.cleaned_data["telephone_number"], org_id) web_player = WebPlayer( dbm, LocationBridge(location_tree=get_location_tree(), get_loc_hierarchy=get_location_hierarchy)) reporter_id = form.cleaned_data["short_code"].lower( ) if form.cleaned_data != "" else None request = Request(message=_get_data(form.cleaned_data, organization.country_name(), reporter_id), transportInfo=TransportInfo( transport='web', source='web', destination='mangrove')) response = web_player.accept(request, logger=websubmission_logger) if response.success: data_sender_id = response.short_code message = get_success_msg_for_ds_registration_using( response, "web") else: form.update_errors(response.errors) except IntegrityError as e: form.update_errors({ MOBILE_NUMBER_FIELD_CODE: _(u'Sorry, the telephone number %s has already been registered.' ) % form.cleaned_data["telephone_number"] }) except DataObjectAlreadyExists as e: message = _("%s with %s = %s already exists.") % ( e.data[2], e.data[0], e.data[1], ) except MangroveException as exception: message = exception.message return data_sender_id, message
def submit(request): dbm = get_database_manager(request.user) post = json.loads(request.POST['data']) success = True try: web_player = WebPlayer( dbm, LocationBridge(location_tree=get_location_tree(), get_loc_hierarchy=get_location_hierarchy)) message = post['message'] message[LOCATION_TYPE_FIELD_CODE] = get_country_appended_location( message.get(LOCATION_TYPE_FIELD_CODE), get_organization_country(request)) request = Request(message=message, transportInfo=TransportInfo( transport=post.get('transport'), source=post.get('source'), destination=post.get('destination'))) response = web_player.accept(request) if response.success: message = get_success_msg_for_registration_using(response, "web") else: message = get_submission_error_message_for(response.errors) entity_id = response.datarecord_id except DataObjectAlreadyExists as exception: message = _( "Entity with Unique Identification Number (ID) = %s already exists." ) % exception.data[1] success, entity_id = False, None except MangroveException as exception: message = get_exception_message_for(exception=exception, channel="web") message = _("Please add subject type and then add a subject" ) if message == "t should be present" else message success = False entity_id = None return HttpResponse( json.dumps({ 'success': success, 'message': message, 'entity_id': entity_id }))
class TestWebPlayer(TestCase): def setUp(self): self.dbm = Mock(spec=DatabaseManager) self.web_player = WebPlayer(self.dbm, location_tree=DummyLocationTree()) self.transport = TransportInfo(transport="web", source="1234", destination="5678") self.message = { 'form_code': 'reg', 'n': 'subject_name', 't': 'clinic', 'l': 'Pune' } self._mock_form_model() def _mock_form_model(self): self.form_model_mock = Mock(spec=EntityFormModel) self.get_form_model_mock_patcher = patch( 'mangrove.transport.player.player.get_form_model_by_code') get_form_model_mock = self.get_form_model_mock_patcher.start() get_form_model_mock.return_value = self.form_model_mock self.form_model_mock.validate_submission.return_value = OrderedDict( ), OrderedDict() self.form_submission_mock = mock_form_submission(self.form_model_mock) def tearDown(self): self.get_form_model_mock_patcher.stop() def test_should_submit_if_parsing_is_successful(self): with patch.object(FormSubmissionFactory, 'get_form_submission') as get_form_submission_mock: get_form_submission_mock.return_value = self.form_submission_mock response = self.web_player.accept( Request(message=self.message, transportInfo=self.transport)) self.form_submission_mock.save.assert_called_once_with(self.dbm) self.assertEqual('', response.datarecord_id) self.assertEqual([''], response.entity_type)
def submit(request): dbm = get_database_manager(request) post = _get_submission(request.POST) success = True try: web_player = WebPlayer(dbm, SubmissionHandler(dbm)) message = {k: v for (k, v) in post.get('message').items() if not is_empty(v)} if message.get(LOCATION_TYPE_FIELD_CODE) is not None: message[LOCATION_TYPE_FIELD_CODE]+= COUNTRY request = Request(message=message, transportInfo=TransportInfo(transport=post.get('transport'), source=post.get('source'), destination=post.get('destination'))) response = web_player.accept(request) if response.success: message = get_success_msg_for_registration_using(response, "web") else: message = get_submission_error_message_for(response.errors) entity_id = response.datarecord_id except MangroveException as exception: message = get_exception_message_for(exception=exception, channel="web") success = False entity_id = None return HttpResponse(json.dumps({'success': success, 'message': message, 'entity_id': entity_id}))
def post(self, request, reporter_id, *args, **kwargs): reporter_id = reporter_id.lower() manager = get_database_manager(request.user) reporter_entity = ReporterEntity( get_by_short_code(manager, reporter_id, [REPORTER])) entity_links = { 'registered_datasenders_link': reverse("all_datasenders") } datasender = {'short_code': reporter_id} get_datasender_user_detail(datasender, request.user) email = datasender.get( 'email') if datasender.get('email') != '--' else False org_id = request.user.get_profile().org_id form = ReporterRegistrationForm(org_id=org_id, data=request.POST) message = None if form.is_valid(): try: org_id = request.user.get_profile().org_id current_telephone_number = reporter_entity.mobile_number current_name = reporter_entity.name organization = Organization.objects.get(org_id=org_id) web_player = WebPlayer( manager, LocationBridge(location_tree=get_location_tree(), get_loc_hierarchy=get_location_hierarchy)) response = web_player.accept( Request(message=_get_data(form.cleaned_data, organization.country_name(), reporter_id), transportInfo=TransportInfo( transport='web', source='web', destination='mangrove'), is_update=True)) if response.success: if organization.in_trial_mode: update_data_sender_from_trial_organization( current_telephone_number, form.cleaned_data["telephone_number"], org_id) if email and current_name != form.cleaned_data["name"]: update_user_name_if_exists(email, form.cleaned_data["name"]) message = _("Your changes have been saved.") detail_dict = {"Unique ID": reporter_id} current_lang = get_language() activate("en") field_mapping = dict(mobile_number="telephone_number") for field in [ "geo_code", "location", "mobile_number", "name" ]: if getattr(reporter_entity, field) != form.cleaned_data.get( field_mapping.get(field, field)): label = u"%s" % form.fields[field_mapping.get( field, field)].label detail_dict.update({ label: form.cleaned_data.get( field_mapping.get(field, field)) }) activate(current_lang) if len(detail_dict) > 1: detail_as_string = json.dumps(detail_dict) UserActivityLog().log(request, action=EDITED_DATA_SENDER, detail=detail_as_string) else: form.update_errors(response.errors) except MangroveException as exception: message = exception.message return render_to_response('edit_datasender_form.html', { 'form': form, 'message': message, 'reporter_id': reporter_id, 'email': email, 'project_links': entity_links }, context_instance=RequestContext(request))
def edit_data_sender(request, project_id, reporter_id): manager = get_database_manager(request.user) reporter_entity = ReporterEntity( get_by_short_code(manager, reporter_id, [REPORTER])) project, links = _get_project_and_project_link(manager, project_id, reporter_id) user_profile = get_user_profile_by_reporter_id(reporter_id, request.user) email = user_profile.user.email if user_profile else None if request.method == 'GET': location = reporter_entity.location geo_code = reporter_entity.geo_code form = ReporterRegistrationForm( initial={ 'project_id': project_id, 'name': reporter_entity.name, 'telephone_number': reporter_entity.mobile_number, 'location': location, 'geo_code': geo_code }) return render_to_response('project/edit_datasender.html', { 'project': project, 'reporter_id': reporter_id, 'form': form, 'project_links': links, 'in_trial_mode': _in_trial_mode(request), 'email': email }, context_instance=RequestContext(request)) if request.method == 'POST': org_id = request.user.get_profile().org_id form = ReporterRegistrationForm(org_id=org_id, data=request.POST) message = None if form.is_valid(): try: organization = Organization.objects.get(org_id=org_id) current_telephone_number = reporter_entity.mobile_number web_player = WebPlayer( manager, LocationBridge(location_tree=get_location_tree(), get_loc_hierarchy=get_location_hierarchy)) response = web_player.accept( Request(message=_get_data(form.cleaned_data, organization.country_name(), reporter_id), transportInfo=TransportInfo( transport='web', source='web', destination='mangrove'), is_update=True)) if response.success: if organization.in_trial_mode: update_data_sender_from_trial_organization( current_telephone_number, form.cleaned_data["telephone_number"], org_id) message = _("Your changes have been saved.") detail_dict = {"Unique ID": reporter_id} current_lang = get_language() activate("en") field_mapping = dict(mobile_number="telephone_number") for field in [ "geo_code", "location", "mobile_number", "name" ]: if getattr(reporter_entity, field) != form.cleaned_data.get( field_mapping.get(field, field)): label = u"%s" % form.fields[field_mapping.get( field, field)].label detail_dict.update({ label: form.cleaned_data.get( field_mapping.get(field, field)) }) activate(current_lang) if len(detail_dict) > 1: detail_as_string = json.dumps(detail_dict) UserActivityLog().log(request, action=EDITED_DATA_SENDER, detail=detail_as_string, project=project.name) else: form.update_errors(response.errors) except MangroveException as exception: message = exception.message return render_to_response('edit_datasender_form.html', { 'project': project, 'form': form, 'reporter_id': reporter_id, 'message': message, 'project_links': links, 'in_trial_mode': _in_trial_mode(request), 'email': email }, context_instance=RequestContext(request))