예제 #1
0
class OAuthLogin:
    def __init__(self, template_name):
        super(OAuthLogin, self).__init__()
        self.google_oauth = GoogleApiHandler(grant_type='online')
        self.template_name = template_name

    def login(self, code, request):
        credential = self.google_oauth.exchange_auth_code(code)

        if self.is_google_user_valid(credential):
            cred = self.google_oauth.update_user_credentials(credential)
            if cred:
                user = User.objects.get(
                    email=self.google_oauth.get_google_user_email(cred))
                user.backend = 'django.contrib.auth.backends.ModelBackend'
                login(request, user)
                return HttpResponseRedirect('/')
        else:
            return render_to_response(
                template_name=self.template_name,
                context={'error': 'Email не имеет доступа к приложению!'}
            )

    def is_google_user_valid(self, credentials):
        google_user_email = self.google_oauth.get_google_user_email(credentials)
        return self._is_exists_user_with_email(google_user_email)

    def _is_exists_user_with_email(self, email):
        user = UserProfile.objects.filter(user__email=email).first()
        return user is not None and user.user.is_active
예제 #2
0
def delete_order_from_users_google_calendar(order_id, target_users=None):
    from orders_manager.models import User, Order
    from orders_manager.google_apis import GoogleApiHandler

    logger = get_task_logger(__name__)
    google_api_handler = GoogleApiHandler()
    order = Order.objects.get(id=order_id)

    if target_users is None:
        target_users = set([i.user_id for i in order.program_executors.all()])
        target_users.update([
            i.executor.user_id
            for i in order.additional_services_executors.all()
        ])

    results = {}

    try:
        for user_id in target_users:
            user = User.objects.get(id=user_id)
            res = google_api_handler.delete_event_from_user_calendar(
                user, order.hex_id())
            results.update({user.get_full_name(): res})
            send_order_notice_to_email(order, user, action_type='delete')
    except Exception as ex:
        logger.error(ex.args[0])
        return ex.args[0]

    return results
예제 #3
0
def delete_order_from_users_google_calendar(order_id, target_users=None):
    from orders_manager.models import User, Order
    from orders_manager.google_apis import GoogleApiHandler

    logger = get_task_logger(__name__)
    google_api_handler = GoogleApiHandler()
    order = Order.objects.get(id=order_id)

    if target_users is None:
        target_users = set([i.user_id for i in order.program_executors.all()])
        target_users.update(
            [i.executor.user_id for i in
             order.additional_services_executors.all()]
        )

    results = {}

    try:
        for user_id in target_users:
            user = User.objects.get(id=user_id)
            res = google_api_handler.delete_event_from_user_calendar(
                user, order.hex_id())
            results.update({user.get_full_name(): res})
            send_order_notice_to_email(order, user, action_type='delete')
    except Exception as ex:
        logger.error(ex.args[0])
        return ex.args[0]

    return results
예제 #4
0
def send_order_to_users_google_calendar(
        order_id, send_email=True, is_full_description=None,
        is_new_order=False):
    from orders_manager.models import Order, UserProfile
    from orders_manager.google_apis import GoogleApiHandler

    logger = get_task_logger(__name__)

    google_api_handler = GoogleApiHandler()
    order = Order.objects.get(id=order_id)

    if is_full_description is None:
        dt = datetime.datetime.strptime(
            '%s %s' % (order.celebrate_date, '00:00:00'), '%Y-%m-%d %H:%M:%S')
        today = datetime.datetime.now().replace(hour=0, minute=0, second=0,
                                                microsecond=0)
        dt_lim = today + datetime.timedelta(2)
        is_full_description = 0 < (dt_lim - dt).days <= 2

    date_str = '{0} {1}'.format(order.celebrate_date, order.celebrate_time)
    event_start = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
    event_duration = int(order.duration)
    event_end = event_start + datetime.timedelta(0, event_duration * 60)
    event_start = event_start.isoformat()
    event_end = event_end.isoformat()

    logger.debug('Sending order \'%s\' start \'%s\'' % (order.program.title,
                                                        event_start))

    executor_to_event_title = {}

    description = _get_order_description(order, is_full_description)

    for program_executor in order.program_executors.all():
        executor_to_event_title[program_executor.user_id] = order.program.title

    for service_to_executors in order.additional_services_executors.all():
        if executor_to_event_title.get(service_to_executors.executor.user_id):
            executor_to_event_title[service_to_executors.executor.user_id] += \
                ' + %s' % service_to_executors.additional_service.title

        else:
            executor_to_event_title[service_to_executors.executor.user_id] = \
                service_to_executors.additional_service.title

    for user_id, title in executor_to_event_title.items():
        executor = UserProfile.objects.get(user_id=user_id)
        try:
            summary = _get_order_summary(order, is_full_description)
            summary = summary.format(title=title)
            google_api_handler.send_event_to_user_calendar(
                executor, order.hex_id(), event_start, event_end, summary,
                description)
            if send_email is True:
                send_order_notice_to_email(order, executor,
                                           'create' if is_new_order else 'update')
        except Exception as ex:
            logger.error(ex.args[0])

    return '{0} was updated.'.format(order.program.title)
예제 #5
0
 def __init__(self, template_name):
     super(OAuthLogin, self).__init__()
     self.google_oauth = GoogleApiHandler(grant_type='online')
     self.template_name = template_name
예제 #6
0
def send_order_to_users_google_calendar(order_id,
                                        send_email=True,
                                        is_full_description=None,
                                        is_new_order=False):
    from orders_manager.models import Order, UserProfile
    from orders_manager.google_apis import GoogleApiHandler

    logger = get_task_logger(__name__)

    google_api_handler = GoogleApiHandler()
    order = Order.objects.get(id=order_id)

    if is_full_description is None:
        dt = datetime.datetime.strptime(
            '%s %s' % (order.celebrate_date, '00:00:00'), '%Y-%m-%d %H:%M:%S')
        today = datetime.datetime.now().replace(hour=0,
                                                minute=0,
                                                second=0,
                                                microsecond=0)
        dt_lim = today + datetime.timedelta(2)
        is_full_description = 0 < (dt_lim - dt).days <= 2

    date_str = '{0} {1}'.format(order.celebrate_date, order.celebrate_time)
    event_start = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
    event_duration = int(order.duration)
    event_end = event_start + datetime.timedelta(0, event_duration * 60)
    event_start = event_start.isoformat()
    event_end = event_end.isoformat()

    logger.debug('Sending order \'%s\' start \'%s\'' %
                 (order.program.title, event_start))

    executor_to_event_title = {}

    description = _get_order_description(order, is_full_description)

    for program_executor in order.program_executors.all():
        executor_to_event_title[program_executor.user_id] = order.program.title

    for service_to_executors in order.additional_services_executors.all():
        if executor_to_event_title.get(service_to_executors.executor.user_id):
            executor_to_event_title[service_to_executors.executor.user_id] += \
                ' + %s' % service_to_executors.additional_service.title

        else:
            executor_to_event_title[service_to_executors.executor.user_id] = \
                service_to_executors.additional_service.title

    for user_id, title in executor_to_event_title.items():
        executor = UserProfile.objects.get(user_id=user_id)
        try:
            summary = _get_order_summary(order, is_full_description)
            summary = summary.format(title=title)
            google_api_handler.send_event_to_user_calendar(
                executor, order.hex_id(), event_start, event_end, summary,
                description)
            if send_email is True:
                send_order_notice_to_email(
                    order, executor, 'create' if is_new_order else 'update')
        except Exception as ex:
            logger.error(ex.args[0])

    return '{0} was updated.'.format(order.program.title)