def process(self, data): """ approved by HR send mail to user send mail to manager """ req = Request.by_id(self.session, data['req_id']) admin = req.user.get_admin(self.session) # send mail to user src = self.get_admin_mail(admin) dst = req.user.email if 'autoaccept' in data: content = """Your request was automatically approved, it has been added to calendar. Request details: %s""" % req.summarymail else: content = """HR has accepted your request, it has been added to calendar. Request details: %s""" % req.summarymail try: self.send_mail(sender=src, target=dst, request=req, content=content) # send mail to manager src = self.get_admin_mail(admin) dst = req.user.manager_mail if 'autoaccept' in data: content = """A request you accepted was automatically approved, it has been added to calendar. Request details: %s""" % req.summarymail else: content = """HR has approved a request you accepted, it has been added to calendar. Request details: %s""" % req.summarymail self.send_mail(sender=src, target=dst, request=req, content=content) # update request status after sending email req.notified = True except Exception as err: log.exception('Error while sending mail') req.flag_error(str(err)) try: if 'caldav.url' in data: caldav_url = data['caldav.url'] else: conf_file = sys.argv[1] with open(conf_file) as fdesc: Conf = yaml.load(fdesc, YAMLLoader) caldav_url = Conf.get('caldav').get('url') # add new entry in caldav addToCal(caldav_url, req.date_from, req.date_to, req.summarycal) except Exception as err: log.exception('Error while adding to calendar') req.flag_error(str(err)) self.session.flush() transaction.commit()
def add_to_cal(self, caldav_url): """ Add entry in calendar for request """ if self.ics_url: log.info('Tried to add to cal request %d but ics_url already set' % self.id) return if not caldav_url: log.info('Tried to add to cal request %d but no url provided' % self.id) return try: # add new entry in caldav ics_url = addToCal(caldav_url, self.date_from, self.date_to, self.summarycal) # save ics url in request self.ics_url = ics_url log.info('Request %d added to cal: %s ' % (self.id, ics_url)) except Exception as err: log.exception('Error while adding to calendar') self.flag_error(str(err))
def replay(settings): with open(settings['pyvac.celery.yaml']) as fdesc: Conf = yaml.load(fdesc, YAMLLoader) caldav_url = Conf.get('caldav').get('url') # XXX Register the database create_engine(settings, scoped=True) session = DBSession() calendar = get_calendar(caldav_url) requests = Request.find(session, where=(Request.status == 'APPROVED_ADMIN',), order_by=Request.user_id) print 'total requests', len(requests) print '' req_to_add = [] # for each requests for req in requests: print '-' * 10 print req.id, req.summarycal, req.date_from, req.date_to # check if entry in caldav exists results = calendar.date_search(req.date_from, req.date_to) if not results: # need to add missing entry in caldav print 'need to insert request' req_to_add.append(req.id) else: summaries = [] for event in results: try: parse_event(event) except Exception: continue event.load() # XXX: if needed to delete entries # uid = event.instance.vevent.uid.value # ics = '%s/%s.ics' % (caldav_url, uid) # print delFromCal(caldav_url, ics) summary = event.instance.vevent.summary.value summaries.append(summary) if req.summarycal not in summaries: print 'need to insert request' req_to_add.append(req.id) for req_id in set(req_to_add): req = Request.by_id(session, req_id) print 'processing', req.id, req.summarycal, req.date_from, req.date_to ics_url = addToCal(caldav_url, req.date_from, req.date_to, req.summarycal) # save ics url in request req.ics_url = ics_url session.add(req) session.flush() transaction.commit()
def replay(settings): with open(settings["pyvac.celery.yaml"]) as fdesc: Conf = yaml.load(fdesc, YAMLLoader) caldav_url = Conf.get("caldav").get("url") # XXX Register the database create_engine(settings, scoped=True) session = DBSession() calendar = get_calendar(caldav_url) requests = Request.find(session, where=(Request.status == "APPROVED_ADMIN",), order_by=Request.user_id) print "total requests", len(requests) print "" req_to_add = [] # for each requests for req in requests: print "-" * 10 print req.id, req.summarycal, req.date_from, req.date_to # check if entry in caldav exists results = calendar.date_search(req.date_from, req.date_to) if not results: # need to add missing entry in caldav print "need to insert request" req_to_add.append(req.id) else: summaries = [] for event in results: try: parse_event(event) except Exception: continue event.load() # XXX: if needed to delete entries # uid = event.instance.vevent.uid.value # ics = '%s/%s.ics' % (caldav_url, uid) # print delFromCal(caldav_url, ics) summary = event.instance.vevent.summary.value summaries.append(summary) if req.summarycal not in summaries: print "need to insert request" req_to_add.append(req.id) for req_id in set(req_to_add): req = Request.by_id(session, req_id) print "processing", req.id, req.summarycal, req.date_from, req.date_to ics_url = addToCal(caldav_url, req.date_from, req.date_to, req.summarycal) # save ics url in request req.ics_url = ics_url session.add(req) session.flush() transaction.commit()
def process(self, data): """ approved by HR send mail to user send mail to manager """ req = Request.by_id(self.session, data['req_id']) admin = req.user.get_admin(self.session) # send mail to user src = self.get_admin_mail(admin) dst = req.user.email if 'autoaccept' in data: content = """Your request was automatically approved, it has been added to calendar. Request details: %s""" % req.summarymail else: content = """HR has accepted your request, it has been added to calendar. Request details: %s You can find the corresponding .ics file as attachment.""" % req.summarymail try: self.send_mail_ics(sender=src, target=dst, request=req, content=content) # send mail to manager src = self.get_admin_mail(admin) dst = req.user.manager_mail if 'autoaccept' in data: content = """A request you accepted was automatically approved, it has been added to calendar. Request details: %s""" % req.summarymail else: content = """HR has approved a request you accepted, it has been added to calendar. Request details: %s""" % req.summarymail self.send_mail(sender=src, target=dst, request=req, content=content) # update request status after sending email req.notified = True except Exception as err: self.log.exception('Error while sending mail') req.flag_error(str(err), self.session) try: if 'caldav.url' in data: caldav_url = data['caldav.url'] else: conf_file = sys.argv[1] with open(conf_file) as fdesc: Conf = yaml.load(fdesc, YAMLLoader) caldav_url = Conf.get('caldav').get('url') # add new entry in caldav ics_url = addToCal(caldav_url, req.date_from, req.date_to, req.summarycal) # save ics url in request req.ics_url = ics_url self.log.info('Request %d added to cal: %s ' % (req.id, ics_url)) except Exception as err: self.log.exception('Error while adding to calendar') req.flag_error(str(err), self.session) self.session.flush() transaction.commit()