Example #1
0
def update_gifts(task_id, create=False, except_fields=EXCEPT_FIELDS_UPDATE):
    set_obj = memcache.get(task_id)
    flag = False
    if set_obj:
        data = simplejson.loads(set_obj)
        memcache.delete(task_id)
        id_1c = data.get('id_1c', '')
        logging.info("API update 1c: %s" % id_1c)
        name = data.get('name', '')
        logging.info("API update name: %s" % name)
        if not id_1c and not name:
            if not create:
                return render_to_response('empty.html')
        if id_1c:
            gifts_obj = Gift.all().filter('id_1c =', id_1c)
            if not gifts_obj.count():
                gifts_obj = Gift.all().filter('name =', name)
        else:
            gifts_obj = Gift.all().filter('name =', name)
        if gifts_obj.count() and create:
            return render_to_response('empty.html')
        gift = None
        if gifts_obj.count() and not create:
            gift = gifts_obj[0]
        if not gifts_obj.count() and create:
            gift = Gift(name=name)
        if gift is None:
            return render_to_response('empty.html')

        # update category and groups
        category = data.get('subcategory', '-')
        group = data.get('group', '-')
        try:
            a = gift.category.name
            b = gift.group.name
        except Exception:
            gift.category = gift.group = None

        if category != '-' and group != '-':
            if not category or not group:
                if gift.category or gift.group:
                    gift.category = None
                    gift.group = None
                    flag = True
            else:
                category_obj = Category.all().filter('name =', category)
                if category_obj.count():
                    category_obj = category_obj[0]
                else:
                    category_obj = Category(name=category)
                    category_obj.put()
                if not gift.category or gift.category != category_obj:
                    gift.category = category_obj
                    flag = True

                group_obj = Group.all().filter(
                    'category =', category_obj).filter('name =', group)
                if group_obj.count():
                    group_obj = group_obj[0]
                else:
                    group_obj = Group(name=group, category=category_obj)
                    group_obj.put()
                if not gift.group or gift.group != group_obj:
                    gift.group = group_obj
                    flag = True

        # and other fields
        for key in data.keys():
            if key in except_fields:
                continue
            value = data.get(key, None)
            if value is None:
                continue
            if key == 'receipt_date':
                try:
                    new_date = datetime.date(
                        datetime.strptime(value, '%Y-%m-%d'))
                    if new_date == gift.receipt_date:
                        continue
                    gift.receipt_date = new_date
                    flag = True
                except ValueError:
                    if gift.receipt_date is not None:
                        gift.receipt_date = None
                        flag = True
                continue
            try:
                old_val = getattr(gift, key)
                if old_val == value:
                    continue
                setattr(gift, key, value)
                flag = True
            except AttributeError:
                pass
        if flag:
            gift.put()
            gift_views.get_gift(gift.uid, True)
    return render_to_response('empty.html')