コード例 #1
0
ファイル: cities.py プロジェクト: BenjCherpas/balafon
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')
コード例 #2
0
ファイル: cities.py プロジェクト: BenjCherpas/balafon
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')
コード例 #3
0
ファイル: cities.py プロジェクト: Maxence42/balafon
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')
コード例 #4
0
ファイル: serializers.py プロジェクト: ljean/balafon
 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
コード例 #5
0
ファイル: utils.py プロジェクト: ljean/balafon
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
コード例 #6
0
ファイル: utils.py プロジェクト: ljean/balafon
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
コード例 #7
0
ファイル: test_cart_no_profile.py プロジェクト: ljean/balafon
    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)
コード例 #8
0
ファイル: utils.py プロジェクト: ljean/balafon
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)
コード例 #9
0
ファイル: test_cart_no_profile.py プロジェクト: ljean/balafon
    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)
コード例 #10
0
ファイル: cities.py プロジェクト: Maxence42/balafon
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')
コード例 #11
0
ファイル: test_cart_no_profile.py プロジェクト: ljean/balafon
    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)