def get_weekly_stats_update_projects():
"""Return email jobs with weekly stats update for project owner."""
from sqlalchemy.sql import text
from pybossa.core import db
from pybossa.pro_features import ProFeatureHandler
feature_handler = ProFeatureHandler(current_app.config.get('PRO_FEATURES'))
only_pros = feature_handler.only_for_pro('project_weekly_report')
only_pros_sql = 'AND "user".pro=true' if only_pros else ''
send_emails_date = current_app.config.get('WEEKLY_UPDATE_STATS')
today = datetime.today().strftime('%A').lower()
timeout = current_app.config.get('TIMEOUT')
if today.lower() == send_emails_date.lower():
sql = text('''
SELECT project.id
FROM project, "user", task
WHERE "user".id=project.owner_id %s
AND "user".subscribed=true
AND task.project_id=project.id
AND task.state!='completed'
UNION
SELECT project.id
FROM project
WHERE project.featured=true;
''' % only_pros_sql)
results = db.slave_session.execute(sql)
for row in results:
job = dict(name=send_weekly_stats_project,
args=[row.id],
kwargs={},
timeout=timeout,
queue='low')
yield job
python类today()的实例源码
def purge_trashed_tag_post_maps():
start_date = datetime.today() - timedelta(1)
trashed = TagPostMap.query.greater_than('updatedAt', start_date).equal_to('trashed', True).find()
if trashed:
print("???? %i ?????????" % len(trashed))
for trashed_map in trashed:
trashed_map.destroy()
print("????")
else:
print("?????????????")
def create(self, vals):
status_history_obj = self.env['hc.care.plan.status.history']
intent_history_obj = self.env['hc.care.plan.intent.history']
res = super(CarePlan, self).create(vals)
# For Status
if vals and vals.get('status'):
status_history_vals = {
'care_plan_id': res.id,
'status': res.status,
'start_date': datetime.today()
}
if vals.get('status') == 'entered-in-error':
status_history_vals.update({'end_date': datetime.today()})
status_history_obj.create(status_history_vals)
# For Intent
if vals.get('status') != 'entered-in-error':
if vals and vals.get('intent'):
intent_history_vals = {
'care_plan_id': res.id,
'intent': res.intent,
'start_date': datetime.today()
}
intent_history_obj.create(intent_history_vals)
return res
def create(self, vals):
status_history_obj = self.env['hc.care.plan.activity.detail.status.history']
res = super(CarePlanActivityDetail, self).create(vals)
if vals and vals.get('status'):
status_history_vals = {
'detail_id': res.id,
'status': res.status,
'start_date': datetime.today()
}
status_history_obj.create(status_history_vals)
return res
def write(self, vals):
status_history_obj = self.env['hc.care.plan.activity.detail.status.history']
res = super(CarePlanActivityDetail, self).write(vals)
status_history_record_ids = status_history_obj.search([('end_date','=', False)])
if status_history_record_ids:
if vals.get('status') and status_history_record_ids[0].status != vals.get('status'):
for status_history in status_history_record_ids:
status_history.end_date = datetime.strftime(datetime.today(), DTF)
time_diff = datetime.today() - datetime.strptime(status_history.start_date, DTF)
if time_diff:
days = str(time_diff).split(',')
if days and len(days) > 1:
status_history.time_diff_day = str(days[0])
times = str(days[1]).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
else:
times = str(time_diff).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
status_history_vals = {
'detail_id': self.id,
'status': vals.get('status'),
'start_date': datetime.today()
}
status_history_obj.create(status_history_vals)
return res
def create(self, vals):
status_history_obj = self.env['hc.compartment.definition.status.history']
res = super(CompartmentDefinition, self).create(vals)
if vals and vals.get('status_id'):
status_history_vals = {
'compartment_definition_id': res.id,
'status' : res.status_id.name,
'start_date': datetime.today()
}
status_history_obj.create(status_history_vals)
return res
def write(self, vals):
status_history_obj = self.env['hc.compartment.definition.status.history']
publication_status_obj = self.env['hc.vs.publication.status']
res = super(CompartmentDefinition, self).write(vals)
status_history_record_ids = status_history_obj.search([('end_date','=', False)])
if status_history_record_ids:
if vals.get('status_id') and status_history_record_ids[0].status != vals.get('status_id'):
for status_history in status_history_record_ids:
status_history.end_date = datetime.strftime(datetime.today(), DTF)
time_diff = datetime.today() - datetime.strptime(status_history.start_date, DTF)
if time_diff:
days = str(time_diff).split(',')
if days and len(days) > 1:
status_history.time_diff_day = str(days[0])
times = str(days[1]).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
else:
times = str(time_diff).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
publication_status = publication_status_obj.browse(vals.get('status_id'))
status_history_vals = {
'compartment_definition_id': self.id,
'status': publication_status.name,
'start_date': datetime.today()
}
status_history_obj.create(status_history_vals)
return res
def write(self, vals):
status_history_obj = self.env['hc.code.system.status.history']
publication_status_obj = self.env['hc.vs.publication.status']
res = super(CodeSystem, self).write(vals)
status_history_record_ids = status_history_obj.search([('end_date','=', False)])
if status_history_record_ids:
if vals.get('status_id') and status_history_record_ids[0].status != vals.get('status_id'):
for status_history in status_history_record_ids:
status_history.end_date = datetime.strftime(datetime.today(), DTF)
time_diff = datetime.today() - datetime.strptime(status_history.start_date, DTF)
if time_diff:
days = str(time_diff).split(',')
if days and len(days) > 1:
status_history.time_diff_day = str(days[0])
times = str(days[1]).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
else:
times = str(time_diff).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
publication_status = publication_status_obj.browse(vals.get('status_id'))
status_history_vals = {
'code_system_id': self.id,
'status': publication_status.name,
'start_date': datetime.today()
}
status_history_obj.create(status_history_vals)
return res
def create(self, vals):
status_history_obj = self.env['hc.research.subject.status.history']
res = super(ResearchSubject, self).create(vals)
if vals and vals.get('status'):
status_history_vals = {
'research_subject_id': res.id,
'status': res.status,
'start_date': datetime.today()
}
status_history_obj.create(status_history_vals)
return res
def write(self, vals):
status_history_obj = self.env['hc.research.subject.status.history']
res = super(ResearchSubject, self).write(vals)
status_history_record_ids = status_history_obj.search([('end_date','=', False)])
if status_history_record_ids:
if vals.get('status') and status_history_record_ids[0].status != vals.get('status'):
for status_history in status_history_record_ids:
status_history.end_date = datetime.strftime(datetime.today(), DTF)
time_diff = datetime.today() - datetime.strptime(status_history.start_date, DTF)
if time_diff:
days = str(time_diff).split(',')
if days and len(days) > 1:
status_history.time_diff_day = str(days[0])
times = str(days[1]).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
else:
times = str(time_diff).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
status_history_vals = {
'research_subject_id': self.id,
'status': vals.get('status'),
'start_date': datetime.today()
}
status_history_obj.create(status_history_vals)
return res
def create(self, vals):
status_history_obj = self.env['hc.appointment.status.history']
res = super(Appointment, self).create(vals)
if vals and vals.get('status'):
status_history_vals = {
'appointment_id': res.id,
'status' : res.status,
'start_date': datetime.today()
}
status_history_obj.create(status_history_vals)
return res
def write(self, vals):
status_history_obj = self.env['hc.appointment.status.history']
res = super(Appointment, self).write(vals)
status_history_record_ids = status_history_obj.search([('end_date','=', False)])
if status_history_record_ids:
if vals.get('status') and status_history_record_ids[0].status != vals.get('status'):
for status_history in status_history_record_ids:
status_history.end_date = datetime.strftime(datetime.today(), DTF)
time_diff = datetime.today() - datetime.strptime(status_history.start_date, DTF)
if time_diff:
days = str(time_diff).split(',')
if days and len(days) > 1:
status_history.time_diff_day = str(days[0])
times = str(days[1]).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
else:
times = str(time_diff).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
status_history_vals = {
'appointment_id': self.id,
'status': vals.get('status'),
'start_date': datetime.today()
}
status_history_obj.create(status_history_vals)
return res
def write(self, vals):
status_history_obj = self.env['hc.appointment.participant.status.history']
res = super(AppointmentParticipant, self).write(vals)
status_history_record_ids = status_history_obj.search([('end_date','=', False)])
if status_history_record_ids:
if vals.get('status') and status_history_record_ids[0].status != vals.get('status'):
for status_history in status_history_record_ids:
status_history.end_date = datetime.strftime(datetime.today(), DTF)
time_diff = datetime.today() - datetime.strptime(status_history.start_date, DTF)
if time_diff:
days = str(time_diff).split(',')
if days and len(days) > 1:
status_history.time_diff_day = str(days[0])
times = str(days[1]).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
else:
times = str(time_diff).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
status_history_vals = {
'participant_id': self.id,
'status': vals.get('status'),
'start_date': datetime.today()
}
status_history_obj.create(status_history_vals)
return res
def create(self, vals):
status_history_obj = self.env['hc.eligibility.request.status.history']
res = super(EligibilityRequest, self).create(vals)
if vals and vals.get('status_id'):
status_history_vals = {
'eligibility_request_id': res.id,
'status': res.status_id.name,
'start_date': datetime.today()
}
if vals.get('status_id') == 'entered-in-error':
status_history_vals.update({'end_date': datetime.today()})
status_history_obj.create(status_history_vals)
return res
def write(self, vals):
status_history_obj = self.env['hc.eligibility.request.status.history']
fm_status_obj = self.env['hc.vs.fm.status']
res = super(EligibilityRequest, self).write(vals)
status_history_record_ids = status_history_obj.search([('end_date','=', False)])
if status_history_record_ids:
if vals.get('status_id') and status_history_record_ids[0].status != vals.get('status_id'):
for status_history in status_history_record_ids:
status_history.end_date = datetime.strftime(datetime.today(), DTF)
time_diff = datetime.today() - datetime.strptime(status_history.start_date, DTF)
if time_diff:
days = str(time_diff).split(',')
if days and len(days) > 1:
status_history.time_diff_day = str(days[0])
times = str(days[1]).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
else:
times = str(time_diff).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
fm_status = fm_status_obj.browse(vals.get('status_id'))
status_history_vals = {
'eligibility_request_id': self.id,
'status': fm_status.name,
'start_date': datetime.today()
}
if vals.get('status_id') == 'entered-in-error':
status_id_history_vals.update({'end_date': datetime.today()})
status_history_obj.create(status_history_vals)
return res
def create(self, vals):
status_history_obj = self.env['hc.activity.definition.status.history']
res = super(ActivityDefinition, self).create(vals)
if vals and vals.get('status_id'):
status_history_vals = {
'activity_definition_id': res.id,
'status': res.status_id.name,
'start_date': datetime.today()
}
status_history_obj.create(status_history_vals)
return res
def write(self, vals):
status_history_obj = self.env['hc.activity.definition.status.history']
publication_status_obj = self.env['hc.vs.publication.status']
res = super(ActivityDefinition, self).write(vals)
status_history_record_ids = status_history_obj.search([('end_date','=', False)])
if status_history_record_ids:
if vals.get('status_id') and status_history_record_ids[0].status != vals.get('status_id'):
for status_history in status_history_record_ids:
status_history.end_date = datetime.strftime(datetime.today(), DTF)
time_diff = datetime.today() - datetime.strptime(status_history.start_date, DTF)
if time_diff:
days = str(time_diff).split(',')
if days and len(days) > 1:
status_history.time_diff_day = str(days[0])
times = str(days[1]).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
else:
times = str(time_diff).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
publication_status = publication_status_obj.browse(vals.get('status_id'))
status_history_vals = {
'activity_definition_id': self.id,
'status': publication_status.name,
'start_date': datetime.today()
}
status_history_obj.create(status_history_vals)
return res
def write(self, vals):
status_history_obj = self.env['hc.clinical.impression.status.history']
res = super(ClinicalImpression, self).write(vals)
status_history_record_ids = status_history_obj.search([('end_date','=', False)])
if status_history_record_ids:
if vals.get('status') and status_history_record_ids[0].status != vals.get('status'):
for status_history in status_history_record_ids:
status_history.end_date = datetime.strftime(datetime.today(), DTF)
time_diff = datetime.today() - datetime.strptime(status_history.start_date, DTF)
if time_diff:
days = str(time_diff).split(',')
if days and len(days) > 1:
status_history.time_diff_day = str(days[0])
times = str(days[1]).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
else:
times = str(time_diff).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
status_history_vals = {
'clinical_impression_id': self.id,
'status': vals.get('status'),
'start_date': datetime.today()
}
if vals.get('status') == 'entered-in-error':
status_history_vals.update({'end_date': datetime.today()})
status_history_obj.create(status_history_vals)
return res
def create(self, vals):
status_history_obj = self.env['hc.payment.notice.status.history']
res = super(PaymentNotice, self).create(vals)
if vals and vals.get('status_id'):
status_history_vals = {
'payment_notice_id': res.id,
'status': res.status_id.name,
'start_date': datetime.today()
}
if vals.get('status_id') == 'entered-in-error':
status_history_vals.update({'end_date': datetime.today()})
status_history_obj.create(status_history_vals)
return res
def write(self, vals):
status_history_obj = self.env['hc.payment.notice.status.history']
fm_status_obj = self.env['hc.vs.fm.status']
res = super(PaymentNotice, self).write(vals)
status_history_record_ids = status_history_obj.search([('end_date','=', False)])
if status_history_record_ids:
if vals.get('status_id') and status_history_record_ids[0].status != vals.get('status_id'):
for status_history in status_history_record_ids:
status_history.end_date = datetime.strftime(datetime.today(), DTF)
time_diff = datetime.today() - datetime.strptime(status_history.start_date, DTF)
if time_diff:
days = str(time_diff).split(',')
if days and len(days) > 1:
status_history.time_diff_day = str(days[0])
times = str(days[1]).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
else:
times = str(time_diff).split(':')
if times and times > 1:
status_history.time_diff_hour = str(times[0])
status_history.time_diff_min = str(times[1])
status_history.time_diff_sec = str(times[2])
fm_status = fm_status_obj.browse(vals.get('status_id'))
status_history_vals = {
'payment_notice_id': self.id,
'status': fm_status.name,
'start_date': datetime.today()
}
if vals.get('status_id') == 'entered-in-error':
status_id_history_vals.update({'end_date': datetime.today()})
status_history_obj.create(status_history_vals)
return res