def country_code_response(self): gateway = self.data.get('gateway') try: backend_api_id = SQLMobileBackend.get_backend_api_id(gateway, is_couch_id=True) except Exception: return [] direction = self.data.get('direction') criteria_query = SmsGatewayFeeCriteria.objects.filter( direction=direction, backend_api_id=backend_api_id ) country_codes = criteria_query.exclude( country_code__exact=None ).values_list('country_code', flat=True).distinct() final_codes = [] for code in country_codes: country_name = country_name_from_isd_code_or_empty(code) final_codes.append((code, country_name)) search_term = self.data.get('searchString') if search_term: search_term = search_term.lower().replace('+', '') final_codes = filter( lambda x: (str(x[0]).startswith(search_term) or x[1].lower().startswith(search_term)), final_codes ) final_codes = [(c[0], "+%s%s" % (c[0], " (%s)" % c[1] if c[1] else '')) for c in final_codes] if criteria_query.filter(country_code__exact=None).exists(): final_codes.append(( NONMATCHING_COUNTRY, _('Any Country (Delivery not guaranteed via connection)') )) return final_codes
def get_rate_response(self): gateway = self.data.get('gateway') try: backend_api_id = SQLMobileBackend.get_backend_api_id(gateway, is_couch_id=True) except Exception as e: log_smsbillables_error( "Failed to get backend for calculating an sms rate due to: %s" % e ) raise SMSRateCalculatorError("Could not obtain connection information.") country_code = self.data.get('country_code') if country_code == NONMATCHING_COUNTRY: country_code = None direction = self.data.get('direction') gateway_fee = SmsGatewayFee.get_by_criteria( backend_api_id, direction, backend_instance=gateway, country_code=country_code, ) usage_fee = SmsUsageFee.get_by_criteria(direction, self.request.domain) usd_gateway_fee = gateway_fee.amount / gateway_fee.currency.rate_to_default usd_total = usage_fee.amount + usd_gateway_fee return { 'rate': _("%s per 160 character SMS") % fmt_dollar_amount(usd_total), }
def get_rate_response(self): gateway = self.data.get('gateway') try: backend_api_id = SQLMobileBackend.get_backend_api_id( gateway, is_couch_id=True) except Exception as e: log_smsbillables_error( "Failed to get backend for calculating an sms rate due to: %s" % e) raise SMSRateCalculatorError( "Could not obtain connection information.") country_code = self.data.get('country_code') if country_code == NONMATCHING_COUNTRY: country_code = None direction = self.data.get('direction') gateway_fee = SmsGatewayFee.get_by_criteria( backend_api_id, direction, backend_instance=gateway, country_code=country_code, ) usage_fee = SmsUsageFee.get_by_criteria(direction, self.request.domain) usd_gateway_fee = gateway_fee.amount / gateway_fee.currency.rate_to_default usd_total = usage_fee.amount + usd_gateway_fee return { 'rate': _("%s per 160 character SMS") % fmt_dollar_amount(usd_total), }
def country_code_response(self): gateway = self.data.get('gateway') try: backend_api_id = SQLMobileBackend.get_backend_api_id( gateway, is_couch_id=True) except Exception: return [] direction = self.data.get('direction') criteria_query = SmsGatewayFeeCriteria.objects.filter( direction=direction, backend_api_id=backend_api_id) country_codes = criteria_query.exclude( country_code__exact=None).values_list('country_code', flat=True).distinct() final_codes = [] for code in country_codes: country_name = country_name_from_isd_code_or_empty(code) final_codes.append((code, country_name)) search_term = self.data.get('searchString') if search_term: search_term = search_term.lower().replace('+', '') final_codes = [ x for x in final_codes if str(x[0]).startswith(search_term) or x[1].lower().startswith(search_term) ] final_codes = [(c[0], "+%s%s" % (c[0], " (%s)" % c[1] if c[1] else '')) for c in final_codes] if criteria_query.filter(country_code__exact=None).exists(): final_codes.append( (NONMATCHING_COUNTRY, _('Any Country (Delivery not guaranteed via connection)'))) return final_codes
def test_get_backend_api_id(self): backend = SQLTestSMSBackend.objects.create( name='BACKEND', is_global=True, hq_api_id=SQLTestSMSBackend.get_api_id(), ) self.assertEquals( SQLMobileBackend.get_backend_api_id(backend.pk), SQLTestSMSBackend.get_api_id() ) self.assertEquals( SQLMobileBackend.get_backend_api_id(backend.couch_id, is_couch_id=True), SQLTestSMSBackend.get_api_id() ) backend.soft_delete() with self.assertRaises(SQLMobileBackend.DoesNotExist): SQLMobileBackend.get_backend_api_id(backend.pk) with self.assertRaises(SQLMobileBackend.DoesNotExist): SQLMobileBackend.get_backend_api_id(backend.couch_id, is_couch_id=True) backend.delete()