예제 #1
0
def crashes():
    if request.method == 'POST':
        json_file = request.files['reports']
        reports = json.loads(json_file.read())
        for report_dict in reports:
            crash_id = report_dict['crash_id']
            if Report.get(crash_id) is None:
                report = Report(crash_id, report_dict)
                report.save()
                jug.publish('report-channel', report.__dict__)
        return jsonify(success=True)
    return redirect(url_for('index'))
예제 #2
0
def report_post(is_comment, reported_id):
    create_report = False
    if not check.logged_in():
        return redirect("/")
    else:
        form = ReportForm(request.form)
        if form.validate_on_submit():
            try:
                #If reported object is a post
                if is_comment == 0:
                    reported_post = Post(reported_id)
                    if len(
                            Report.get_user_prev_report(
                                session.get("user_id", ""), reported_id)) > 0:
                        return redirect("/post/" + str(reported_id))
                else:
                    reported_comment = Comment(reported_id)
                    if len(
                            Report.get_user_prev_report(
                                session.get("user_id", ""), reported_id)) > 0:
                        return redirect("/post/" +
                                        str(reported_comment.post_id))

                report = Report()
                report.submitting_user_id = session.get("user_id", "")
                report.violated_rule = form.data["violated_rule"]
                report.date = datetime.utcnow()
                report.reason_description = form.data["reason_description"]
                report.is_comment = is_comment
                report.action_taken = None
                report.is_dismissed = False
                report.post_id = reported_id if is_comment == 0 else None
                report.comment_id = reported_id if is_comment == 1 else None
                report.save()
                flash({
                    'text': "You have created a report.",
                    'type': "success"
                })
                return redirect("/")
            except NotImplementedError as error:
                return render_template("error.html",
                                       error_type="Failed",
                                       error_info=str(error))
        else:
            if request.method == "POST":
                return render_template(
                    'report.html',
                    form=form,
                    error="Invalid field, please check again.")
            else:
                return render_template('report.html', form=form)
예제 #3
0
def send_report():
    state_id = request.form.get('state_id')
    check_state = storage.get('State', state_id)
    if check_state is None:
        return jsonify({'error': 'Department selected does not exist'})
    number_infections = request.form.get('number_infections')
    try:
        number_infections = w2n.word_to_num(number_infections)
        if number_infections < 0 or type(number_infections) is not int:
            raise ValueError('Invalid number')
    except:
        return jsonify({'error': 'The number you typed is invalid'})
    new_report = Report(state_id=state_id, infections=number_infections)
    new_report.save()
    storage.close()
    return jsonify({'success': 'Your data was registered correctly'})
예제 #4
0
def install_migration_reports():
  """Migrate the reports data from the old CouchDB storage"""
  from models.account import Account
  from models.project import Project, Component
  from models.report import Report
  import datetime
  
  fault = open('data/fault.log', 'w')
  
  for row in __couchdb().view('_design/reports/_view/list_by_date', startkey=['2013-01-01'], endkey=['2014-12-12']):
    try:
      value = row['value']
      value['project'] = value.get('project', '').replace(':', '/').replace('EXT/', '').replace('INT/', '')
      
      report = Report()
      report.due_date = value.get('due_date')
    
      if value.get('reporter', ''):
        report.reporter = Account.query.filter_by(alias=value.get('reporter', '')).first()
    
      if value.get('project', ''):
        report.project = Project.query.filter_by(alias=value.get('project', '')).first()
    
      if value.get('partition', []):
        component_alias = '/'.join(partition.keys()[0] for partition in value.get('partition', []))
      else:
        component_alias = Component.COMPONENT_DEFAULT
      report.component = Component.query.filter_by(project=report.project, alias=component_alias).first() or Component.query.filter_by(project=project, alias=Component.COMPONENT_DEFAULT).first()
    
      report.duration = float(value.get('hours', 0))
      report.summary = value.get('summary', '')
      if value.get('employee', ''):
        report.account = Account.query.filter_by(alias=value.get('employee', '')).first()
    
      if value.get('deleted', False):
          report.status = Report.STATUS_ACTIVE | Report.STATUS_DELETED
    
      report.save()
      print '[MIGRATION:REPORT]', report.__str__()
    except Exception as e:
      message = datetime.datetime.now().__str__().split('.')[0] + '\n\t' + str(e)
      print message
      fault.write(message)
  
  fault.close()
예제 #5
0
파일: report.py 프로젝트: timur-glushan/tt
def report_edit(account_id, report_id=None):
  from models.account import Account
  from models.project import Project, Component
  from models.report import Report
  
  account = Account.query.filter_by(id=account_id).first()
  if not account:
    if request.is_ajax:
      return Response(json.dumps({'status':404, 'description':'Not found', 'errors':['user not found']}), mimetype='application/json')
    else:
      abort(404)
  
  report = None
  if not report_id:
    report = Report()
    report.status = Report.STATUS_ACTIVE
    report.due_date = datetime.datetime.now().strftime('%Y-%m-%d')
    if not app.access('report', action='create'):
      if request.is_ajax:
        return Response(json.dumps({'status':403, 'description':'Forbidden', 'errors':['forbidden']}), mimetype='application/json')
      else:
        abort(403)
  else:
    report_id = urllib.unquote_plus(report_id)
    report = Report.query.filter_by(id=report_id).first()
    if not report:
      if request.is_ajax:
        return Response(json.dumps({'status':404, 'description':'Not found', 'errors':['report not found']}), mimetype='application/json')
      else:
        abort(404)
    elif not app.access('report', action='update', report=report):
      if request.is_ajax:
        return Response(json.dumps({'status':403, 'description':'Forbidden', 'errors':['forbidden']}), mimetype='application/json')
      else:
        abort(403)
  
  title = g._t('report submit')
  
  report_due_date_list = []
  validationErrors = []
  if (request.method == 'POST' and request.values.get('csrf_token', None)) or request.values.get('no_validate', None):
    report.reporter_id = g.account.id
    
    component_id = request.values.get('report_component_id', None)
    if component_id:
      component = Component.query.filter_by(id=component_id).first()
      if component:
        report.component_id = component.id
        report.project_id = component.project_id
    
    
    report_due_date_list = request.values.get('report_due_date', report.due_date).strip().split(',')
    report.due_date = report_due_date_list.pop(0)
    
    hours = request.values.get('report_hours', str(report.hours)).strip() or 0
    if not hours or not str(hours).isdigit():
      hours = 0.0
    minutes = request.values.get('report_minutes', str(report.minutes)).strip() or 0
    if not minutes or not str(minutes).isdigit():
      minutes = 0.0
    report.duration = float(hours) + (float(minutes) / 60)
    
    report.summary = request.values.get('report_summary', report.summary).strip()
    report.status = int(request.form.get('report_status', report.status).strip())
    report.account_id = account.id
    validationErrors = report.validate()
    if request.values.get('no_validate', None):
      status = 200
      description = 'OK'
    elif not validationErrors:
      report.save()
      
      for report_clone_due_date in report_due_date_list:
        if report_clone_due_date == report.due_date:
          continue
        reportClone = Report()
        reportClone.reporter_id = report.reporter_id
        reportClone.project_id = report.project_id
        reportClone.component_id = report.component_id
        reportClone.summary = report.summary
        reportClone.status = report.status
        reportClone.duration = report.duration
        reportClone.account_id = report.account_id
        reportClone.due_date = report_clone_due_date
        reportCloneValidationErrors = reportClone.validate()
        if not reportCloneValidationErrors:
          reportClone.save()
          print 'reportClone: saved'
      
      status = 200
      description = 'OK'
      if request.is_ajax:
        return Response(json.dumps({
          'html':render_template('_popup.html', title=g._t( 'report submit success' ), message=g._t( 'report submit success message' ), javascript="""setTimeout(function(){$('form[name=statistics-form]').submit(); $('form[name=filter-form]').submit();}, 300);"""),
          'status':status,
          'description':description,
          'errors':validationErrors
        }), mimetype='application/json')
      else:
        flash( g._t( 'report submit success' ) )
        return redirect( url_for( 'report_index', account_id=account_id ) )
    else:
      status = 400
      description = 'Bad request'
  else:
    status = 200
    description = 'OK'
    validationErrors = []
  
  if report.due_date:
    report_due_date_list.insert(0, report.due_date)
    
  report.due_date = ','.join(report_due_date_list)
  
  """
  If the report exists, but the account is no longer a member of the project, 
  we avoid an ability to change the project by keeping the only project option available
  """
  header = _activityHeader(employees=[account])
  projectList = header['projects']
  if report.id and report.component and not report.component in projectList:
    projectList = [report.component]
  
  if request.is_ajax:
    htmlContent = render_template('report/report.edit-popup.html', account=account, title=title, report=report, errors=validationErrors, projectList=projectList)
    return  Response(json.dumps({'html':htmlContent, 'status':status, 'description':description, 'errors':validationErrors}), mimetype='application/json')
  else:
    htmlContent = render_template('report/report.edit.html', account=account, title=title, report=report, errors=validationErrors, projectList=projectList)
    return htmlContent