Ejemplo n.º 1
0
def add_item(request, params, user):
    """
    Add an item to a list
    """
    if not List.objects.filter(id=params['id']).exists():
        response = {
            'status': 'FAIL',
            'error': 'LIST_NOT_FOUND',
            'message': 'The list doesn\'t exist.'
        }
        return json_response(response)
    lt = List.objects.get(id=params['id'])
    profile = lt.owner
    # Check if the user is a manager of the profile
    if not Profile_manager.objects.filter(profile=profile, user=user).exists():
        response = {
            'status': 'FAIL',
            'error': 'NOT_A_MANAGER',
            'message': 'You don\'t have permission for the list.'
        }
        return json_response(response)
    # Check email format
    if not REGEX_EMAIL.match(params['email']):
        response = {
            'status': 'FAIL',
            'error': 'INVALID_EMAIL',
            'message': 'Email format is invalid.'
        }
        return json_response(response)
    # Check if the name is valid
    if (not REGEX_NAME.match(params['first_name'])
            or not REGEX_NAME.match(params['last_name'])):
        response = {
            'status': 'FAIL',
            'error': 'INVALID_NAME',
            'message': 'First or last name contain illegal characters.'
        }
        return json_response(response)
    if len(params['first_name']) > 50 or len(params['last_name']) > 50:
        response = {
            'status': 'FAIL',
            'error': 'NAME_TOO_LONG',
            'message': 'First or last name is too long.'
        }
        return json_response(response)
    item, created = List_item.objects.get_or_create(_list=lt,
                                                    email=params['email'])
    item.first_name = params['first_name']
    item.last_name = params['last_name']
    if params['note']:
        item.note = params['note']
    item.save()
    response = {
        'status': 'OK',
        'list': serialize_one(lt),
        'item': serialize_one(item)
    }
    return json_response(response)
Ejemplo n.º 2
0
def edit(request, params, user):
    """
    Edit a list
    """
    if not List.objects.filter(id=params['id'], is_deleted=False).exists():
        response = {
            'status': 'FAIL',
            'error': 'LIST_NOT_FOUND',
            'message': 'The list doesn\'t exist.'
        }
        return json_response(response)
    lt = List.objects.get(id=params['id'])
    profile = lt.owner
    # Check if the user is a manager of the profile
    if not Profile_manager.objects.filter(profile=profile, user=user).exists():
        response = {
            'status': 'FAIL',
            'error': 'NOT_A_MANAGER',
            'message': 'You don\'t have permission for the list.'
        }
        return json_response(response)
    if params['name'] is not None:
        params['name'] = cgi.escape(params['name'])
        if len(params['name']) > 50:
            response = {
                'status': 'FAIL',
                'error': 'INVALID_NAME',
                'message': 'The name must be within 50 characters.'
            }
            return json_response(response)
        else:
            lt.name = params['name']
    lt.save()
    response = {'status': 'OK', 'list': serialize_one(lt)}
    return json_response(response)
Ejemplo n.º 3
0
def delete(request, params, user):
    """
    Delete List
    """
    if not List.objects.filter(id=params['id'], is_deleted=False).exists():
        response = {
            'status': 'FAIL',
            'error': 'LIST_NOT_FOUND',
            'message': 'The list doesn\'t exist.'
        }
        return json_response(response)
    lt = List.objects.get(id=params['id'])
    profile = lt.owner
    # Check if the user is a manager of the profile
    if not Profile_manager.objects.filter(profile=profile, user=user).exists():
        response = {
            'status': 'FAIL',
            'error': 'NOT_A_MANAGER',
            'message': 'You don\'t have permission for the list.'
        }
        return json_response(response)
    lt.is_deleted = True
    lt.save()
    response = {'status': 'OK', 'list': serialize_one(lt)}
    return json_response(response)
Ejemplo n.º 4
0
def create(request, params, user):
    """
    Create an empty list
    """
    if not Profile.objects.filter(id=params['profile']).exists():
        response = {
            'status': 'FAIL',
            'error': 'PROFILE_NOT_FOUND',
            'message': 'The profile doesn\'t exist.'
        }
        return json_response(response)
    profile = Profile.objects.get(id=params['profile'])
    # Check if the user is a manager of the profile
    if not Profile_manager.objects.filter(profile=profile, user=user).exists():
        response = {
            'status': 'FAIL',
            'error': 'NOT_A_MANAGER',
            'message': 'You don\'t have permission for the profile.'
        }
        return json_response(response)
    params['name'] = cgi.escape(params['name'])
    if len(params['name']) > 50:
        response = {
            'status': 'FAIL',
            'error': 'INVALID_NAME',
            'message': 'The name must be within 50 characters.'
        }
        return json_response(response)
    lt = List(owner=profile,
              name=params['name'],
              is_hidden=params['is_hidden'])
    lt.save()
    response = {'status': 'OK', 'list': serialize_one(lt)}
    return json_response(response)
Ejemplo n.º 5
0
def upload_csv(request, params):
    """
    Upload a CSV that is stored temporarily
    """
    if not request.FILES.has_key('csv_file'):
        return HttpResponseBadRequest('Bad request.')
    rawCsv = request.FILES['csv_file']
    csv_filename = rawCsv.name
    csvExt = str(rawCsv.name).split('.')[-1].lower()
    if not csvExt == 'csv':
        response = {
            'status': 'FAIL',
            'error': 'INVALID_FORMAT',
            'message': 'Must Be A .csv File'
        }
        return json_response(response)
    if rawCsv._size > IMAGE_SIZE_LIMIT:
        response = {
            'status': 'FAIL',
            'error': 'FILE_TOO_BIG',
            'message': 'The csv cannot be over 2.5MB.'
        }
        return json_response(response)
    csvUid = uuid.uuid4().hex
    rawCsv.name = '%s.%s' % (csvUid, csvExt)
    csv = Csv(source=rawCsv)
    csv.save()
    response = {
        'status': 'OK',
        'file': serialize_one(csv),
        'filename': csv_filename
    }
    return json_response(response)
Ejemplo n.º 6
0
def create_project(request, params, user):
    """
    Create Designs Project and, if logged in, a checkout
    """
    paymentAccount = Payment_account.objects.get(id=43)
    if params['services'] is '':
        response = {
            'status': 'FAIL',
            'error': 'NO_SERVICE_SELECTED',
            'message': 'You must select at least one service'
        }
        return json_response(response)
    designer = Designer.objects.all()[0]
    project = Project(description=params['description'], designer=designer)
    project.save()
    if params['assets'] and params['assets'] is not '':
        assetsRaw = params['assets'].split(",")
        for asset in assetsRaw:
            if Asset.objects.filter(id=asset).exists():
                assetObj = Asset.objects.get(id=asset)
                project.images.add(assetObj)
    servicesRaw = params['services'].split(",")
    amount = 0
    for service in servicesRaw:
        if Service.objects.filter(id=service).exists():
            serviceObj = Service.objects.get(id=service)
            project.services.add(serviceObj)
            amount += serviceObj.price * 100
    if user:
        project.owner = user
        checkout = Checkout(payer=user,
                            payee=paymentAccount,
                            amount=amount,
                            description='Bazaarboy Designs')
        checkout.save()
        project.checkout = checkout
        project.save()
        response = {
            'status': 'OK',
            'project': serialize_one(project),
            'price': amount,
            'publishable_key': paymentAccount.publishable_key
        }
    else:
        response = {'status': 'WAIT', 'project': serialize_one(project)}
    return json_response(response)
Ejemplo n.º 7
0
def add_from_csv(request, params, user):
    """
    Add items from a csv file
    """
    if not List.objects.filter(id=params['id'], is_deleted=False).exists():
        response = {
            'status': 'FAIL',
            'error': 'LIST_NOT_FOUND',
            'message': 'The list doesn\'t exist.'
        }
        return json_response(response)
    lt = List.objects.get(id=params['id'])
    profile = lt.owner
    # Check if the user is a manager of the profile
    if not Profile_manager.objects.filter(profile=profile, user=user).exists():
        response = {
            'status': 'FAIL',
            'error': 'NOT_A_MANAGER',
            'message': 'You don\'t have permission for the list.'
        }
        return json_response(response)
    # Check if CSV Exists
    if not Csv.objects.filter(id=params['csv']).exists():
        response = {
            'status': 'FAIL',
            'error': 'CSV_NOT_FOUND',
            'message': 'The csv doesn\'t exist.'
        }
        return json_response(response)
    csv_file = Csv.objects.get(id=params['csv'])
    csvfile = csv_file.source.file
    reader = csv.reader(csvfile)
    # Load Format {field_type:col}
    format = json.loads(params['format'])
    added = 0
    duplicates = 0
    for num, row in enumerate(reader):
        if 'email' in format and len(
                row) >= format['email'] and REGEX_EMAIL.match(
                    row[format['email']]):
            if not List_item.objects.filter(
                    _list=lt, email=row[format['email']]).exists():
                item = List_item(_list=lt, email=row[format['email']])
                item.first_name = row[format['first_name']]
                if 'last_name' in format:
                    item.last_name = row[format['last_name']]
                item.save()
                added += 1
            else:
                duplicates += 1

    response = {
        'status': 'OK',
        'list': serialize_one(lt),
        'added': added,
        'duplicates': duplicates
    }
    return json_response(response)
Ejemplo n.º 8
0
def crop_image(request, params):
    """
    Crop an image by a viewport
    """
    if not Image.objects.filter(id=params['id']).exists():
        response = {
            'status': 'FAIL',
            'error': 'IMAGE_NOT_FOUND',
            'message': 'The image doesn\'t exist.'
        }
        return json_response(response)
    image = Image.objects.get(id=params['id'])
    viewport = params['viewport'].split(',')
    try:
        for i in range(0, 4):
            viewport[i] = int(viewport[i])
            if viewport[i] < 0:
                raise ValueError()
    except (ValueError, IndexError):
        response = {
            'status': 'FAIL',
            'error': 'INVALID_VIEWPORT',
            'message': 'The viewport is invalid.'
        }
        return json_response(response)
    imageUrl = image.source.url
    imageName = imageUrl.split('/')[-1].split('?')[0]
    imageExt = imageName.split('.')[-1].lower()
    imageFormat = 'jpeg' if imageExt == 'jpg' else imageExt
    imageContentType = IMAGE_CONTENT_TYPES[imageExt]
    left = viewport[0]
    upper = viewport[1]
    right = left + viewport[2]
    lower = upper + viewport[3]
    box = left, upper, right, lower
    imageFile = PIL.Image.open(StringIO(image.source.read()))
    croppedImageFile = imageFile.crop(box)
    croppedImageIO = StringIO()
    croppedImageFile.save(croppedImageIO, format=imageFormat)
    croppedImage = InMemoryUploadedFile(file=croppedImageIO,
                                        field_name=None,
                                        name=imageName,
                                        content_type=imageContentType,
                                        size=croppedImageIO.len,
                                        charset=None)
    image.source.delete(save=False)
    image.source = croppedImage
    image.save()
    response = {'status': 'OK', 'image': serialize_one(image)}
    return json_response(response)
Ejemplo n.º 9
0
def finalize_project(request, params, user):
    if user:
        if Project.objects.filter(code=params['code'],
                                  id=params['project']).exists():
            project = Project.objects.get(code=params['code'],
                                          id=params['project'])
        else:
            response = {
                'status': 'FAIL',
                'error': 'PROJECT_DOESNT_EXIST',
                'message': 'This project id or code is incorrect.'
            }
            return json_response(response)
        project.owner = user
        amount = 0
        for service in project.services.all():
            amount += service.price * 100
        paymentAccount = Payment_account.objects.get(id=43)
        checkout = Checkout(payer=user,
                            payee=paymentAccount,
                            amount=amount,
                            description='Bazaarboy Designs')
        checkout.save()
        project.checkout = checkout
        project.save()
        response = {
            'status': 'OK',
            'project': serialize_one(project),
            'price': amount,
            'publishable_key': paymentAccount.publishable_key
        }
        return json_response(response)
    else:
        response = {
            'status': 'FAIL',
            'error': 'NOT_LOGGED_IN',
            'message': 'You must be logged in to finalize your project'
        }
        return json_response(response)
Ejemplo n.º 10
0
def auth(request, params):
    """
    Authenticate an admin
    """
    # Check if admin session exists
    if request.session.has_key('admin'):
        return HttpResponseForbidden('Access forbidden.')
    # Authenticate name/password combination
    if Admin.objects.filter(name=params['name']).exists():
        admin = Admin.objects.get(name=params['name'])
        saltedPassword = admin.salt + params['password']
        if admin.password == hashlib.sha512(saltedPassword).hexdigest():
            # Name and password match, start admin session
            sessionAdmin = serialize_one(admin, ('id', 'name', 'role'))
            request.session['admin'] = sessionAdmin
            response = {'status': 'OK'}
            return json_response(response)
    # Validate failed
    response = {
        'status': 'FAIL',
        'message': 'Invalid name and password combination.'
    }
    return json_response(response)
Ejemplo n.º 11
0
def upload_image(request, params):
    """
    Upload a image that is stored temporarily
    """
    isFromRedactor = False
    if request.FILES.has_key('file'):
        request.FILES['image_file'] = request.FILES['file']
        del request.FILES['file']
        isFromRedactor = True
    if not request.FILES.has_key('image_file'):
        return HttpResponseBadRequest('Bad request.')
    rawImage = request.FILES['image_file']
    imageExt = str(rawImage.name).split('.')[-1].lower()
    if not imageExt in IMAGE_TYPES:
        response = {
            'status': 'FAIL',
            'error': 'INVALID_FORMAT',
            'message': 'The image format is not supported.'
        }
        return json_response(response)
    if rawImage._size > IMAGE_SIZE_LIMIT:
        response = {
            'status': 'FAIL',
            'error': 'FILE_TOO_BIG',
            'message': 'The image cannot be over 2.5MB.'
        }
        return json_response(response)
    imageUid = uuid.uuid4().hex
    rawImage.name = '%s.%s' % (imageUid, imageExt)
    image = Image(source=rawImage)
    image.save()
    response = {'status': 'OK', 'image': serialize_one(image)}
    if isFromRedactor:
        redactorImage = image.source.url.split("?", 1)
        response = {'filelink': redactorImage[0]}
    return json_response(response)
Ejemplo n.º 12
0
def upload_asset(request, params):
    """
    Upload a asset that is stored temporarily
    """
    if request.FILES.has_key('file'):
        request.FILES['image_file'] = request.FILES['file']
        del request.FILES['file']
    if not request.FILES.has_key('image_file'):
        return HttpResponseBadRequest('Bad request.')
    rawAsset = request.FILES['image_file']
    assetExt = str(rawAsset.name).split('.')[-1].lower()
    if rawAsset._size > ASSET_SIZE_LIMIT:
        response = {
            'status': 'FAIL',
            'error': 'FILE_TOO_BIG',
            'message': 'The file cannot be over 2.5MB.'
        }
        return json_response(response)
    assetUid = uuid.uuid4().hex
    rawAsset.name = '%s' % (assetUid[0:5] + '_' + rawAsset.name)
    asset = Asset(source=rawAsset)
    asset.save()
    response = {'status': 'OK', 'image': serialize_one(asset)}
    return json_response(response)
Ejemplo n.º 13
0
def edit_criteria(request, params, user):
    """
    Edit a criteria for sponsorship
    """
    if not Criteria.objects.filter(id = params['id']).exists():
        response = {
            'status':'FAIL',
            'error':'CRITERIA_NOT_FOUND',
            'message':'The criteria doesn\'t exist.'
        }
        return json_response(response)
    criteria = Criteria.objects.get(id = params['id'])
    event = criteria.event
    if not Organizer.objects.filter(event = event, 
                                    profile__managers = user).exists():
        response = {
            'status':'FAIL',
            'error':'NOT_A_MANAGER',
            'message':'You don\'t have permission for the criteria.'
        }
        return json_response(response)
    if params['name'] is not None:
        params['name'] = cgi.escape(params['name'])
        if len(params['name']) > 50:
            response = {
                'status':'FAIL',
                'error':'NAME_TOO_LONG',
                'message':'Criteria name must be under 50 characters.'
            }
            return json_response(response)
        else:
            criteria.name = params['name']
    if params['description'] is not None:
        params['description'] = cgi.escape(params['description'])
        if len(params['description']) > 150:
            response = {
                'status':'FAIL',
                'error':'DESCRIPTION_TOO_LONG',
                'message':'Criteria description must be under 150 characters.'
            }
            return json_response(response)
        else:
            criteria.description = params['description']
    if params['price_low'] is not None:
        if params['price_low'] == 'none':
            criteria.price_low = None
        else:
            params['price_low'] = float(params['price_low'])
            if params['price_low'] < 0:
                response = {
                    'status':'FAIL',
                    'error':'INVALID_PRICE_RANGE',
                    'message':'Price range is invalid.'
                }
                return json_response(response)
            else:
                criteria.price_low = params['price_low']
    if params['price_high'] is not None:
        if params['price_high'] == 'none':
            criteria.price_high = None
        else:
            params['price_high'] = float(params['price_high'])
            if params['price_high'] < 0:
                response = {
                    'status':'FAIL',
                    'error':'INVALID_PRICE_RANGE',
                    'message':'Price range is invalid.'
                }
                return json_response(response)
            else:
                criteria.price_high = params['price_high']
    if criteria.price_high is not None:
        if criteria.price_low is None:
            criteria.price_low = 0
        else:
            if criteria.price_low > criteria.price_high:
                response = {
                    'status':'FAIL',
                    'error':'INVALID_PRICE_RANGE',
                    'message':'Price range is invalid.'
                }
                return json_response(response)
    if params['quantity'] is not None:
        if params['quantity'].lower() == 'none':
            criteria.quantity = None
        else:
            params['quantity'] = int(params['quantity'])
            if params['quantity'] <= 0:
                response = {
                    'status':'FAIL',
                    'error':'INVALID_QUANTITY',
                    'message':'Quantity is invalid.'
                }
                return json_response(response)
            else:
                criteria.quantity = params['quantity']
    criteria.save()
    response = {
        'status':'OK',
        'criteria':serialize_one(criteria)
    }
    return json_response(response)
Ejemplo n.º 14
0
def create(request, params, user):
    """
    Create a sponsorship
    """
    if not Event.objects.filter(id = params['event'], 
                                is_deleted = False).exists():
        response = {
            'status':'FAIL',
            'error':'EVENT_NOT_FOUND',
            'message':'The event doesn\'t exist.'
        }
        return json_response(response)
    event = Event.objects.get(id = params['event'])
    if not Organizer.objects.filter(event = event, 
                                    profile__managers = user).exists():
        response = {
            'status':'FAIL',
            'error':'NOT_A_MANAGER',
            'message':'You don\'t have permission for the event.'
        }
        return json_response(response)
    profile = None
    if params['profile'] is not None:
        # Existing profile
        if not Profile.objects.filter(id = params['profile']).exists():
            response = {
                'status':'FAIL',
                'error':'PROFILE_NOT_FOUND',
                'message':'The profile doesn\'t exist.'
            }
            return json_response(response)
        profile = Profile.objects.get(id = params['profile'])
    name = None
    description = None
    image = None
    if params['name'] is not None:
         params['name'] = cgi.escape(params['name'])
         if not (0 < len(params['name']) <= 100):
            response = {
                'status':'FAIL',
                'error':'INVALID_NAME',
                'message':'The name must be within 100 characters.'
            }
            return json_response(response)
        name = params['name']
    if params['description'] is not None:
         params['description'] = cgi.escape(params['description'])
         if not (0 < len(params['description']) <= 500):
            response = {
                'status':'FAIL',
                'error':'INVALID_DESCRIPTION',
                'message':'The description must be within 500 characters.'
            }
            return json_response(response)
        description = params['description']
    if params['image'] is not None:
        if not Image.objects.filter(id = params['image']).exists():
            response = {
                'status':'FAIL',
                'error':'IMAGE_NOT_FOUND',
                'message':'The image doesn\'t exist.'
            }
            return json_response(response)
        else:
            image = Image.objects.get(id = params['image'])
            image.is_archived = True
            image.save()
    if profile is not None:
        name = profile.name
        description = '' if description is None else description
        image = None if image is None else profile.image
    if profile is None and name is None:
        response = {
            'status':'FAIL',
            'error':'INCOMPLETE_INFO',
            'message':'You must provide the name for the sponsor!'
        }
        return json_response(response)
    sponsorship = Sponsorship(owner = profile, event = event, name = name, 
                              description = description, image = image)
    sponsorship.save()
    response = {
        'status':'OK', 
        'sponsorship':serialize_one(sponsorship)
    }
    return json_response(response)
Ejemplo n.º 15
0
def create_criteria(request, params, user):
    """
    Create a criteria for sponsorship
    """
    if not Event.objects.filter(id = params['event'], 
                                is_deleted = False).exists():
        response = {
            'status':'FAIL',
            'error':'EVENT_NOT_FOUND',
            'message':'The event doesn\'t exist.'
        }
        return json_response(response)
    event = Event.objects.get(id = params['event'])
    if not Organizer.objects.filter(event = event, 
                                    profile__managers = user).exists():
        response = {
            'status':'FAIL',
            'error':'NOT_A_MANAGER',
            'message':'You don\'t have permission for the event.'
        }
        return json_response(response)
    params['name'] = cgi.escape(params['name'])
    if len(params['name']) > 50:
        response = {
            'status':'FAIL',
            'error':'NAME_TOO_LONG',
            'message':'Criteria name must be within 50 characters.'
        }
        return json_response(response)
    params['description'] = cgi.escape(params['description'])
    criteria = Criteria(event = event, name = params['name'], 
                        description = params['description'])
    if params['price_low'] is not None:
        params['price_low'] = float(params['price_low'])
        if params['price_low'] < 0:
            response = {
                'status':'FAIL',
                'error':'INVALID_PRICE_RANGE',
                'message':'Price range is invalid.'
            }
            return json_response(response)
        else:
            criteria.price_low = params['price_low']
    if params['price_high'] is not None:
        params['price_high'] = float(params['price_high'])
        if params['price_high'] < 0:
            response = {
                'status':'FAIL',
                'error':'INVALID_PRICE_RANGE',
                'message':'Price range is invalid.'
            }
            return json_response(response)
        else:
            criteria.price_high = params['price_high']
    if criteria.price_high is not None:
        if criteria.price_low is None:
            criteria.price_low = 0
        else:
            if criteria.price_low > criteria.price_high:
                response = {
                    'status':'FAIL',
                    'error':'INVALID_PRICE_RANGE',
                    'message':'Price range is invalid.'
                }
                return json_response(response)
    if params['quantity'] is not None:
        params['quantity'] = int(params['quantity'])
        if params['quantity'] <= 0:
            response = {
                'status':'FAIL',
                'error':'INVALID_QUANTITY',
                'message':'Quantity is invalid.'
            }
            return json_response(response)
    criteria.save()
    response = {
        'status':'OK',
        'criteria':serialize_one(criteria)
    }
    return json_response(response)
Ejemplo n.º 16
0
def edit(request, params, user):
    """
    Edit a bonus
    """
    if not Bonus.objects.filter(id=params['id']).exists():
        response = {
            'status': 'FAIL',
            'error': 'BONUS_NOT_FOUND',
            'message': 'The bonus doesn\'t exist.'
        }
        return json_response(response)
    bonus = Bonus.objects.get(id=params['id'])
    if not Organizer.objects.filter(event=bonus.event,
                                    profile__managers=user).exists():
        response = {
            'status': 'FAIL',
            'error': 'NOT_A_MANAGER',
            'message': 'You don\'t have permission for the bonus.'
        }
        return json_response(response)
    if bonus.is_sent:
        response = {
            'status': 'FAIL',
            'error': 'READ_ONLY',
            'message': 'You cannot make changes to a sent bonus.'
        }
        return json_response(response)
    if params['name'] is not None:
        params['name'] = cgi.escape(params['name'])
        if not (0 < len(params['name']) <= 50):
            response = {
                'status': 'FAIL',
                'error': 'NAME_TOO_LONG',
                'message': 'Criteria name must be within 50 characters.'
            }
            return json_response(response)
        else:
            bonus.name = params['name']
    if params['description'] is not None:
        params['description'] = cgi.escape(params['description'])
        if not (0 < len(params['description']) <= 150):
            response = {
                'status': 'FAIL',
                'error': 'DESCRIPTION_TOO_LONG',
                'message': 'The description must be within 150 characters.'
            }
            return json_response(response)
        else:
            bonus.description = params['description']
    if params['image'] is not None:
        if params['image'] == 'none':
            if bonus.image is not None:
                oldImage = Image.objects.get(id=bonus.image.id)
                oldImage.delete()
                bonus.image = None
        elif not Image.objects.filter(id=params['image']).exists():
            response = {
                'status': 'FAIL',
                'error': 'IMAGE_NOT_FOUND',
                'message': 'The image doesn\'t exist.'
            }
            return json_response(response)
        else:
            image = Image.objects.get(id=params['image'])
            if bonus.image is not None:
                oldImage = Image.objects.get(id=bonus.image.id)
                oldImage.delete()
            image.is_archived = True
            image.save()
            bonus.image = image
    if params['quantity'] is not None:
        params['quantity'] = int(params['quantity'])
        if params['quantity'] <= 0:
            response = {
                'status': 'FAIL',
                'error': 'INVALID_QUANTITY',
                'message': 'Quantity must be a positive number.'
            }
            return json_response(response)
        else:
            bonus.quantity = params['quantity']
    if params['code'] is not None:
        params['code'] = cgi.escape(params['code'])
        if len(params['code']) > 255:
            response = {
                'status': 'FAIL',
                'error': 'INVALID_CODE',
                'message': 'The code must be within 255 characters.'
            }
            return json_response(response)
        else:
            bonus.code = params['code']
    if params['expiration_time'] is not None:
        if params['expiration_time'] <= timezone.now():
            response = {
                'status': 'FAIL',
                'error': 'EXPIRED_ALREADY',
                'message': 'The expiration time is past due.'
            }
            return json_response(response)
        else:
            bonus.expiration_time = params['expiration_time']
    bonus.save()
    response = {'status': 'OK', 'bonus': serialize_one(bonus)}
    return json_response(response)
Ejemplo n.º 17
0
def create(request, params, user):
    """
    Create bonus
    """
    if not Event.objects.filter(id=params['event'], is_deleted=False).exists():
        response = {
            'status': 'FAIL',
            'error': 'EVENT_NOT_FOUND',
            'message': 'The event doesn\'t exist.'
        }
        return json_response(response)
    event = Event.objects.get(id=params['event'])
    if not Organizer.objects.filter(event=event,
                                    profile__managers=user).exists():
        response = {
            'status': 'FAIL',
            'error': 'NOT_A_MANAGER',
            'message': 'You don\'t have permission for the event.'
        }
        return json_response(response)
    params['name'] = cgi.escape(params['name'])
    if len(params['name']) > 50:
        response = {
            'status': 'FAIL',
            'error': 'NAME_TOO_LONG',
            'message': 'Criteria name must be within 50 characters.'
        }
        return json_response(response)
    params['description'] = cgi.escape(params['description'])
    if len(params['description']) > 150:
        response = {
            'status': 'FAIL',
            'error': 'DESCRIPTION_TOO_LONG',
            'message': 'The description must be within 150 characters.'
        }
        return json_response(response)
    bonus = Bonus(event=event,
                  name=params['name'],
                  description=params['description'])
    if params['image'] is not None:
        if not Image.objects.filter(id=params['image']).exists():
            response = {
                'status': 'FAIL',
                'error': 'IMAGE_NOT_FOUND',
                'message': 'The image doesn\'t exist.'
            }
            return json_response(response)
        else:
            image = Image.objects.get(id=params['image'])
            image.is_archived = True
            image.save()
            bonus.image = image
    if params['quantity'] is not None:
        params['quantity'] = int(params['quantity'])
        if params['quantity'] <= 0:
            response = {
                'status': 'FAIL',
                'error': 'INVALID_QUANTITY',
                'message': 'Quantity must be a positive number.'
            }
            return json_response(response)
        else:
            bonus.quantity = params['quantity']
    if params['code'] is not None:
        params['code'] = cgi.escape(params['code'])
        if len(params['code']) > 255:
            response = {
                'status': 'FAIL',
                'error': 'INVALID_CODE',
                'message': 'The code must be within 255 characters.'
            }
            return json_response(response)
        else:
            bonus.code = params['code']
    if params['expiration_time'] is not None:
        if params['expiration_time'] <= timezone.now():
            response = {
                'status': 'FAIL',
                'error': 'EXPIRED_ALREADY',
                'message': 'The expiration time is past due.'
            }
            return json_response(response)
        else:
            bonus.expiration_time = params['expiration_time']
    bonus.save()
    response = {'status': 'OK', 'bonus': serialize_one(bonus)}
    return json_response(response)
Ejemplo n.º 18
0
def add_from_event(request, params, user):
    """
    Add items from an event
    """
    if not List.objects.filter(id=params['id'], is_deleted=False).exists():
        response = {
            'status': 'FAIL',
            'error': 'LIST_NOT_FOUND',
            'message': 'The list doesn\'t exist.'
        }
        return json_response(response)
    lt = List.objects.get(id=params['id'])
    profile = lt.owner
    if not Profile_manager.objects.filter(profile=profile, user=user).exists():
        response = {
            'status': 'FAIL',
            'error': 'NOT_A_MANAGER',
            'message': 'You don\'t have permission for the list.'
        }
        return json_response(response)
    if not Event.objects.filter(id=params['event'], is_deleted=False).exists():
        response = {
            'status': 'FAIL',
            'error': 'EVENT_NOT_FOUND',
            'message': 'The event doesn\'t exist.'
        }
        return json_response(response)
    event = Event.objects.get(id=params['event'])
    if not Organizer.objects.filter(event=event,
                                    profile__managers=user).exists():
        response = {
            'status': 'FAIL',
            'error': 'NOT_A_MANAGER',
            'message': 'You don\'t have permission for the event.'
        }
        return json_response(response)
    purchases = Purchase.objects.filter(Q(checkout = None) |
                                        Q(checkout__isnull = False,
                                          checkout__is_charged = True),
                                        event = event,
                                        is_expired = False) \
                                .prefetch_related('owner')
    added = 0
    duplicates = 0
    for purchase in purchases:
        if not List_item.objects.filter(_list=lt,
                                        email=purchase.owner.email).exists():
            item = List_item(_list=lt,
                             email=purchase.owner.email,
                             first_name=purchase.owner.first_name,
                             last_name=purchase.owner.last_name)
            item.save()
            added += 1
        else:
            duplicates += 1
    response = {
        'status': 'OK',
        'list': serialize_one(lt),
        'added': added,
        'duplicates': duplicates
    }
    return json_response(response)
Ejemplo n.º 19
0
        return json_response(response)
    try:
        ch = stripe.Charge.retrieve(checkout.checkout_id)
        re = ch.refund()
    except stripe.CardError, e:
        response = {
            'status': 'FAIL',
            'error': 'REFUND_FAILED',
            'message': 'The refund did not go through.'
        }
        return json_response(response)
    else:
        checkout.is_refunded = True
        checkout.save()
        sendRefundConfirmationEmail(purchase, re.amount_refunded)
        response = {'status': 'OK', 'purchase': serialize_one(purchase)}
        return json_response(response)


@login_check()
@validate('POST', ['invite', 'stripe_token', 'amount'])
def charge_invite(request, params, user):
    """
    Charge for invitation
    """
    if not Invite.objects.filter(id=params['invite']).exists():
        response = {
            'status': 'FAIL',
            'error': 'INVITE_NOT_FOUND',
            'message': 'The invitation doesn\'t exist.'
        }