def get_city_id(request): """view""" name = (request.GET.get('name')) country_id = request.GET.get('country', None) if country_id is not None: country_id = int(country_id) default_country = models.Zone.objects.get(name=get_default_country(), parent__isnull=True) if country_id is None: cities = models.City.objects.filter(name__iexact=name) else: if country_id == 0 or country_id == default_country.id: cities = models.City.objects.filter(name__iexact=name).exclude( parent__code='') else: cities = models.City.objects.filter(name__iexact=name, parent__id=country_id) if cities.count() != 1: city_id = name else: city_id = cities[0].id return HttpResponse(json.dumps({'id': city_id}), 'application/json')
def get_cities(request): """view""" #subscribe form : no login required term = request.GET.get('term') country_id = request.GET.get('country', None) if country_id == 'undefined': # javascript none country_id = 0 if country_id is not None: country_id = int(country_id) default_country = models.Zone.objects.get(name=get_default_country(), parent__isnull=True) if country_id is None: cities_queryset = models.City.objects.filter(name__icontains=term)[:10] else: if country_id == 0 or country_id == default_country.id: cities_queryset = models.City.objects.filter( name__icontains=term).exclude(parent__code='')[:10] else: cities_queryset = models.City.objects.filter( name__icontains=term, parent__id=country_id)[:10] cities = [{'id': city.id, 'name': city.name} for city in cities_queryset] return HttpResponse(json.dumps(cities), 'application/json')
def get_cities(request): """view""" #subscribe form : no login required term = request.GET.get('term') country_id = request.GET.get('country', None) if country_id == 'undefined': # javascript none country_id = 0 if country_id is not None: country_id = int(country_id) default_country = models.Zone.objects.get(name=get_default_country(), parent__isnull=True) if country_id is None: cities_queryset = models.City.objects.filter(name__icontains=term)[:10] else: if country_id == 0 or country_id == default_country.id: cities_queryset = models.City.objects.filter(name__icontains=term).exclude(parent__code='')[:10] else: cities_queryset = models.City.objects.filter(name__icontains=term, parent__id=country_id)[:10] cities = [{'id': city.id, 'name': city.name} for city in cities_queryset] return HttpResponse(json.dumps(cities), 'application/json')
def get_city(self, validated_data): zip_code = validated_data['zip_code'] city_name = validated_data['city'] country = validated_data.pop('country') default_country = get_default_country() if country.name != default_country: city = City.objects.get_or_create(name=city_name, parent=country)[0] else: if len(zip_code) < 2: raise serializers.ValidationError(ugettext('You must enter a zip code')) try: dep = Zone.objects.get(Q(code=zip_code[:2]) | Q(code=zip_code[:3])) except Zone.DoesNotExist: raise serializers.ValidationError(ugettext('Invalid zip code')) city = City.objects.get_or_create(name=city_name, parent=dep)[0] return city
def check_city_exists(city_name, zip_code, country): """return True if city exists""" default_country = crm_settings.get_default_country() foreign_city = bool(country) and (country != default_country) if foreign_city: zone_type = models.ZoneType.objects.get(type='country') queryset = models.Zone.objects.filter(name=country, type=zone_type) else: code = zip_code[:2] queryset = models.Zone.objects.filter(code=code) if queryset.count() == 0: #The parent doesn't exist so th city can't exist return False parent = queryset[0] return models.City.objects.filter(name__iexact=city_name, parent=parent).count() == 1
def get_default_country(): """get default country object""" country_name = crm_settings.get_default_country() try: default_country = models.Zone.objects.get(name=country_name, parent__isnull=True, type__type="country") except models.Zone.DoesNotExist: try: zone_type = models.ZoneType.objects.get(type="country") except models.ZoneType.DoesNotExist: zone_type = models.ZoneType.objects.create(type="country", name="Country") default_country = models.Zone.objects.create(name=country_name, parent=None, type=zone_type) return default_country
def _do_test_post_cart_missing(self, extra_data): """It should create a new sale and action""" store_item1 = mommy.make(models.StoreItem) store_item2 = mommy.make(models.StoreItem) delivery_point = mommy.make(models.DeliveryPoint) zone_type = ZoneType.objects.get_or_create(type="country")[0] default_country = get_default_country() country = Zone.objects.get_or_create(name=default_country, type=zone_type, parent=None)[0] contact_data = { 'lastname': 'Dupond', 'firstname': 'Paul', 'email': '*****@*****.**', 'address': '1 rue la ré', 'city': 'Lyon', 'zip_code': '69000', 'country': country.id, } contact_data.update(extra_data) data = { 'items': [ {'id': store_item1.id, 'quantity': 2}, {'id': store_item2.id, 'quantity': 1}, ], 'delivery_point': delivery_point.id, 'purchase_datetime': datetime(2015, 7, 23, 12, 0), 'contact': contact_data, } url = reverse('store_post_cart_no_profile') response = self.client.post(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['ok'], False) action_queryset = Action.objects.all() self.assertEqual(action_queryset.count(), 0) self.assertEqual(Contact.objects.count(), 0) self.assertEqual(len(mail.outbox), 0)
def resolve_city(city_name, zip_code, country='', default_department=''): """get a city form a name and zip code""" country = country.strip() city_name = format_city_name(city_name) default_country = crm_settings.get_default_country() foreign_city = bool(country) and (country != default_country) if foreign_city: zone_type = models.ZoneType.objects.get(type='country') queryset = models.Zone.objects.filter(type=zone_type) queryset = filter_icontains_unaccent(queryset, '"Crm_zone"."name"', country) country_count = queryset.count() if country_count == 0: parent = models.Zone.objects.create(name=country.capitalize(), type=zone_type) else: parent = queryset[0] if country_count > 1: logger_message = "{0} different zones for '{1}'".format( country_count, country) logger.warning(logger_message) else: code = zip_code[:2] or default_department try: parent = models.Zone.objects.get(code=code) except models.Zone.DoesNotExist: parent = None queryset = models.City.objects.filter(parent=parent) queryset = filter_icontains_unaccent(queryset, '"Crm_city"."name"', city_name) cities_count = queryset.count() if cities_count: if cities_count > 1: logger_message = "{0} different cities for '{1}' {2}".format( cities_count, city_name, parent) logger.warning(logger_message) return queryset[0] else: return models.City.objects.create(name=city_name, parent=parent)
def test_post_cart_no_profile_disabled(self): """It should raise 404""" store_item1 = mommy.make(models.StoreItem) store_item2 = mommy.make(models.StoreItem) delivery_point = mommy.make(models.DeliveryPoint) zone_type = ZoneType.objects.get_or_create(type="country")[0] default_country = get_default_country() country = Zone.objects.get_or_create(name=default_country, type=zone_type, parent=None)[0] contact_data = { 'lastname': 'Dupond', 'firstname': 'Paul', 'email': '*****@*****.**', 'address': '1 rue la ré', 'city': 'Lyon', 'zip_code': '69000', 'country': country.id, } data = { 'items': [ {'id': store_item1.id, 'quantity': 2}, {'id': store_item2.id, 'quantity': 1}, ], 'delivery_point': delivery_point.id, 'purchase_datetime': datetime(2015, 7, 23, 12, 0), 'contact': contact_data, } url = reverse('store_post_cart_no_profile') response = self.client.post(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) action_queryset = Action.objects.all() self.assertEqual(action_queryset.count(), 0)
def get_city_id(request): """view""" name = (request.GET.get('name')) country_id = request.GET.get('country', None) if country_id is not None: country_id = int(country_id) default_country = models.Zone.objects.get(name=get_default_country(), parent__isnull=True) if country_id is None: cities = models.City.objects.filter(name__iexact=name) else: if country_id == 0 or country_id == default_country.id: cities = models.City.objects.filter(name__iexact=name).exclude(parent__code='') else: cities = models.City.objects.filter(name__iexact=name, parent__id=country_id) if cities.count() != 1: city_id = name else: city_id = cities[0].id return HttpResponse(json.dumps({'id': city_id}), 'application/json')
def test_post_cart_no_profile(self): """It should create a new sale and action""" store_item1 = mommy.make(models.StoreItem) store_item2 = mommy.make(models.StoreItem) delivery_point = mommy.make(models.DeliveryPoint) zone_type = ZoneType.objects.get_or_create(type="country")[0] default_country = get_default_country() country = Zone.objects.get_or_create(name=default_country, type=zone_type, parent=None)[0] contact_data = { 'lastname': 'Dupond', 'firstname': 'Paul', 'email': '*****@*****.**', 'address': '1 rue la ré', 'city': 'Lyon', 'zip_code': '69000', 'country': country.id, } data = { 'items': [ {'id': store_item1.id, 'quantity': 2}, {'id': store_item2.id, 'quantity': 1}, ], 'delivery_point': delivery_point.id, 'purchase_datetime': datetime(2015, 7, 23, 12, 0), 'contact': contact_data, } url = reverse('store_post_cart_no_profile') response = self.client.post(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['ok'], True) self.assertEqual(len(response.data['warnings']), 0) self.assertEqual(response.data['deliveryDate'], data['purchase_datetime']) self.assertEqual(response.data['deliveryPlace'], delivery_point.name) action_type = ActionType.objects.get(name=get_cart_type_name()) action_queryset = Action.objects.filter(type=action_type) self.assertEqual(action_queryset.count(), 1) action = action_queryset[0] self.assertEqual(response.data['action'], action.id) self.assertEqual(action.contacts.count(), 1) contact = action.contacts.all()[0] self.assertEqual(contact.lastname, contact_data['lastname']) self.assertEqual(contact.firstname, contact_data['firstname']) self.assertEqual(contact.email, contact_data['email']) self.assertEqual(contact.address, contact_data['address']) self.assertEqual(contact.city.name, contact_data['city']) self.assertEqual(contact.zip_code, contact_data['zip_code']) self.assertEqual(contact.get_country(), country) self.assertEqual(action.subject, '') self.assertEqual(action.detail, '') self.assertEqual(action.planned_date, data['purchase_datetime']) self.assertEqual(action.sale.payment_mode, None) self.assertEqual(action.sale.analysis_code, models.SaleAnalysisCode.objects.get(name='Internet')) self.assertEqual(action.sale.saleitem_set.count(), 2) self.assertEqual(action.sale.saleitem_set.all()[0].item, store_item1) self.assertEqual(action.sale.saleitem_set.all()[0].text, store_item1.name) self.assertEqual(action.sale.saleitem_set.all()[0].unit_price(), store_item1.pre_tax_price) self.assertEqual(action.sale.saleitem_set.all()[0].vat_rate, store_item1.vat_rate) self.assertEqual(action.sale.saleitem_set.all()[0].quantity, 2) self.assertEqual(action.sale.saleitem_set.all()[1].item, store_item2) self.assertEqual(action.sale.saleitem_set.all()[1].text, store_item2.name) self.assertEqual(action.sale.saleitem_set.all()[1].unit_price(), store_item2.pre_tax_price) self.assertEqual(action.sale.saleitem_set.all()[1].vat_rate, store_item2.vat_rate) self.assertEqual(action.sale.saleitem_set.all()[1].quantity, 1) self.assertEqual(len(mail.outbox), 2) self.assertEqual(mail.outbox[0].to, [contact.email]) self.assertEqual(mail.outbox[1].to, [settings.BALAFON_NOTIFICATION_EMAIL]) store_item1 = models.StoreItem.objects.get(id=store_item1.id) self.assertEqual(store_item1.stock_count, None) store_item2 = models.StoreItem.objects.get(id=store_item2.id) self.assertEqual(store_item2.stock_count, None)