예제 #1
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
예제 #2
0
 def __init__(self, template_name):
     super(OAuthLogin, self).__init__()
     self.google_oauth = GoogleApiHandler(grant_type='online')
     self.template_name = template_name
예제 #3
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)