def try_login(request):
    if request.method == 'POST':
        try:
            req = simplejson.loads(request.body)
            username = req['username']
            password = req['password']
            user = authenticate(username=username, password=password)
        except:
            return json.post_error
        else:
            if user is not None:
                if user.is_active:
                    try:
                        if req['longtime']:
                            request.session.set_expiry(datetime.now() + timedelta(days=365))
                    except:
                        time = req['time']
                        if time == False:
                            request.session.set_expiry(0)
                        else:
                            request.session.set_expiry(691200)
                    login(request, user)
                    login_return = {}
                    login_return.update(initialization(request))
                    return json.success(login_return)
                else:
                    return json.what_error('username&password error')
            else:
                return json.what_error('username&password error')
    else:
        return json.no_post
def work_order_change(request):
    try:
        req = simplejson.loads(request.body)
        work_order = Work_Situation.objects.get(id=req['id'])
        if work_order.status == 1:
            json.what_error('Has been completed')
        work_order.status = req['status']
        work_order.introduction = req['introduction']
        for who in req['who']:
            if User.objects.get(username=who) in work_order.who_do.all():
                pass
            else:
                work_order.who_do.add(User.objects.get(username=who))
    except:
        return json.post_error
    else:
        his = History.objects.create()
        his.to_id = work_order.id
        his.to_who = 1
        his.record = 'change:status=' + str(work_order.status) + ' introduction=' + work_order.introduction
        his.who_do = request.user.username
        his.name = User.objects.get(username=request.user.username).last_name
        for who in req['who']:
            his.who.add(User.objects.get(username=who))
        his.save()
        work_order.save()
        return json.ok
def check_in(request):
    wd = User.objects.get(username=request.user.username).personal.week_day
    try:
        ex = Extra_Work.objects.filter(work_number=request.user.username).order_by('id').reverse()[0]
        if (ex.status != 1 or ex.extra_work_time != str(datetime.now().date()) + ':16.30') and wd != int(
                datetime.today().weekday()):
            if wd == 7:
                pass
            else:
                return json.what_error('not check in time')
    except:
        if wd != int(datetime.today().weekday()):
            if wd == 7:
                pass
            else:
                return json.what_error('not check in time')
    try:
        if Check_In.objects.filter(work_number=request.user.username).order_by('id').reverse()[0].check == 0:
            return json.what_error('had been check')
    except:
        pass
    try:
        req = simplejson.loads(request.body)
        toolkit = req['toolkit']
        if toolkit == True:
            check = Check_In.objects.create(work_number=request.user.username, check_in_area=req['area'],
                                            cable=req['cable'], port_module=req['port_module'],
                                            crimping_Tool=req['crimping_Tool'],
                                            screwdriver=req['screwdriver'], crystal_Head=req['crystal_Head'],
                                            switch=req['switch'], taken_toolkit=True,
                                            measuring_line=req['measuring_line'],
                                            user=User.objects.get(username=request.user.username))
            if req['key']:
                check.key = req['key']
            else:
                check.key = False
            if req['hunt']:
                check.hunt = req['hunt']
            else:
                check.hunt = False
            if req['detailed_description']:
                check.detailed_description = req['detailed_description']
        else:
            check = Check_In.objects.create(work_number=request.user.username, check_in_area=req['area'],
                                            taken_toolkit=False, detailed_description='',
                                            cable=False, crimping_Tool=False, switch=False,
                                            crystal_Head=False, measuring_line=False, port_module=False,
                                            key=False, screwdriver=False, check=0,
                                            user=User.objects.get(username=request.user.username))
    except:
        return json.post_error
    else:
        check.save()
        return json.success({'check': True, 'place': check.check_in_area})
def personal_change(request):
    try:
        if Check_In.objects.filter(work_number=request.user.username).order_by('id').reverse()[0].check == 0 or (
                        timedelta(
                            hours=datetime.now().hour, minutes=datetime.now().minute) >= timedelta(minutes=0,
                                                                                                   hours=16) and timedelta(
                    hours=datetime.now().hour, minutes=datetime.now().minute) < timedelta(minutes=0, hours=18)):
            return json.what_error('no change time')
    except:
        if (timedelta(hours=datetime.now().hour, minutes=datetime.now().minute) >= timedelta(minutes=0,
                                                                                             hours=16) and timedelta(
            hours=datetime.now().hour, minutes=datetime.now().minute) < timedelta(minutes=0, hours=18)):
            return json.what_error('no change time')
    try:
        personal = User.objects.get(username=request.user.username).personal
        req = simplejson.loads(request.body)
        work_area = req['area']
        work_day = req['work_day']
        phone_number = req['phone_number']
        work_number = req['work_number']
        is_save = False
    except:
        return json.post_error
    else:
        if work_area != personal.work_area:
            personal.work_area = work_area
            is_save = True
        if work_day != personal.week_day:
            personal.week_day = work_day
            is_save = True
        if phone_number != personal.phone_number:
            personal.phone_number = phone_number
            is_save = True
        if work_number != personal.work_number:
            personal.work_phone = work_number
            is_save = True
        if is_save:
            personal.save()
            return json.what_success('change success')
        else:
            return json.what_error('no change')
def extra_work_add(request):
    try:
        if Extra_Work.objects.filter(work_number=request.user.username).order_by('id').reverse()[0].status == 0:
            return json.what_error('had extra_work')
    except:
        pass
    try:
        req = simplejson.loads(request.body)
        if datetime.now().date() == datetime.strptime(req['date'], '%Y-%m-%d').date() and timedelta(
                hours=int(datetime.now().hour), minutes=int(datetime.now().minute)) > timedelta(minutes=00,
                                                                                                hours=16) or datetime.now().date() + timedelta(
            days=1) < datetime.strptime(req['date'], '%Y-%m-%d').date() or datetime.now().date() > datetime.strptime(
            req['date'], '%Y-%m-%d').date():
            return json.what_error('time error')
        else:
            new_extra_work = Extra_Work.objects.create(user=User.objects.get(username=request.user.username),
                                                       extra_work_time=req['date'] + ':16.30',
                                                       work_number=request.user.username, status=0, extra_area=''
                                                       , refuse_reason='')
    except:
        return json.post_error
    else:
        new_extra_work.save()
        return json.success({'states': 0, 'registerDay': new_extra_work.extra_work_time})
def extra_work_change(request):
    try:
        req = simplejson.loads(request.body)
        extra_work = Extra_Work.objects.get(id=req['id'])
        status = int(req['status'])
        if status == 2:
            extra_work.refuse_reason = req['reason']
        elif status == 1:
            extra_work.extra_area = req['area']
    except:
        return json.post_error
    else:
        if extra_work.status != status:
            extra_work.status = status
            extra_work.save()
            return json.what_success('add success')
        else:
            return json.what_error('no change')