def admin_latest():
    admin = request.cookies.get('user')
    adminpass = request.cookies.get('pass')
    
    if admin == '' or adminpass == '':
        sentence = 'ログアウトしています。'
        index = render_template('error.html',
                                sentence = sentence)
        return make_response(index)
    
    if not (my_func.admin_coach_kakunin(admin, adminpass)):
        sentence = '初めからやり直してください。'
        index = render_template('error.html',
                                sentence = sentence)
        return make_response(index)
    
    try:
        user_prof = my_func.sql_ALLuser_profile()
        try:
            data = my_func.sql_data_get_latest_all(user_prof[admin]['type'],
                                                   user_prof[admin]['org'])
            posts = []
            for d in reversed(data):
                neccessary1_tmp \
                    = round(float(d['wb']*0.01) + float(d['moi']),1)
                if neccessary1_tmp <= 0:
                    neccessary1_tmp = 0
                shitsudo = d['shitsudo']
                temp = d['temp']
                if int(shitsudo) == 1111:
                    shitsudo = ' '
                if int(temp) == 1111:
                    temp = ' '
                posts.append({
                  'date'         :d['day'],#日
                  'bweight'      :d['wb'],#運動前体重
                  'aweight'      :d['wa'],#運動後体重
                  'training'     :d['contents'][0:10],#トレーニング内容
                  'period'       :d['time'],#運動時間
                  'intake'       :d['moi'],#飲水量
                  'dehydraterate':my_func.dassui_ritu(d['wb'],d['wa']),#脱水率
                  'necessary'    :round(my_func.hakkann_ryo(d['wb'], d['wa'], d['moi']), 1),
                  'tenki'        :tenki_dic[str(d['tenki'])],#天気
                  'shitsudo'     :shitsudo,#湿度
                  'temp'         :temp,
                  'username'     :user_prof[d['username']]['rname'],
                  'w1'           :round(d['wb']*0.99,1),
                  'necessary1'   :neccessary1_tmp}# ユーザの本名
                )
            
            posts = reversed(sorted(posts, key=lambda x:x['date']))
            index = render_template('admin_latest.html', 
                                    title = 'taberube.jp', 
                                    posts = posts,
                                    serverhost = server_address)
            return make_response(index)
            
        except Exception as error:
            sentence = 'ERROR1: ' + error.__str__()
            index = render_template('error.html',
                                    sentence = sentence)
            return make_response(index)
        
    except Exception as error:
            sentence = 'ERROR2: '+error.__str__()
            index = render_template('error.html',
                                    sentence = sentence)
            return make_response(index)
def enter():
    userid = request.cookies.get('user')
    userpass = request.cookies.get('pass')
    
    if my_func.kakunin(userid, userpass):
        pass
    else:
        sentence = '接続できません。最初の画面からやり直してください。'
        return make_response(render_template('error.html',
                                             sentence = sentence))
    
    ## 不正入力処理
    if len(request.form['text']) == 0:
        sentence = 'ERROR: 情報を送信できませんでした。すべての情報を正しく入力しましたか?'\
           +'(detail: トレーニングメニューが入力されていません。)'
           
        return make_response(render_template('error.html',
                                             sentence = sentence))
    
    if float(request.form['wb']) <= 0 or float(request.form['wb']) <= 0:
        sentence = '''ERROR: 情報を送信できませんでした。
         (detail: あなたの体重が{}kgと{}kgになっています。
         そんなわけありません!!!。)'''.format(request.form['wb'],request.form['wa'])
        return make_response(render_template('error.html',sentence=sentence))
    
    if request.form['time'] == '' \
        or request.form['temp'] == '' \
            or request.form['sitsu'] == ''\
                or request.form['moi'] == '':
        sentence = 'ERROR: 情報を送信できませんでした。すべての情報を正しく入力しましたか?'\
                +'(detail: トレーニング時間、飲水量、気温、湿度のいずれかが未入力です。)'
        return make_response(render_template('error.html',sentence=sentence))
    if float(request.form['time']) < 0 or float(request.form['moi']) < 0:
        sentence = 'ERROR: 情報を送信できませんでした。'\
                + '(detail: 運動時間または飲水量を正の値にしてください。)'
        return make_response(render_template('error.html',sentence=sentence))
    ##
    try:
        weight_after  = float(request.form['wa'])
        weight_before = float(request.form['wb'])
        time          = float(request.form['time'])
        moisture      = float(request.form['moi'])
        shitsudo      = float(request.form['sitsu'])
        temp          = float(request.form['temp'])
        contents      = str(request.form['text'])
        tenki         = int(request.form['tenki'])
        
        my_func.sql_data_send(userid,#ログインするユーザ
                              userpass,#ログインするユーザのパス
                              weight_before,
                              weight_after,
                              contents,time,
                              moisture,tenki,
                              shitsudo,
                              temp)
        
        data = my_func.sql_data_get(userid)
        
        posts = []
        for d in reversed(data):
            neccessary1_tmp = round(float(d['wb'] * 0.99) \
                                    - float(d['wa']) + float(d['moi']), 1)
            if neccessary1_tmp <= 0:
                neccessary1_tmp = 0
                
            posts.append({
                  'date'         :d['day'],#日
                  'bweight'      :d['wb'],#運動前体重
                  'aweight'      :d['wa'],#運動後体重
                  'training'     :d['contents'][0:10],#トレーニング内容
                  'period'       :d['time'],#運動時間
                  'intake'       :d['moi'],#飲水量
                  'dehydraterate':my_func.dassui_ritu(d['wb'], d['wa']),#脱水率
                  'tenki'        :str(tenki_dic[str(d['tenki'])]),#天気
                  'shitsudo'     :d['shitsudo'],#湿度
                  'temp'         :d['temp'],
                  'dassui1'      :round(my_func.hakkann_ritu_ex1(d['wb'], d['wa'], d['time']), 1),
                  'necessary'    :round(my_func.hakkann_ryo(d['wb'], d['wa'], d['moi']), 1),
                  'necessary1'   :neccessary1_tmp,
                  'w1'           :round(d['wb'] * 0.99, 1)})
                
        redirect_to_index = redirect('/show',code=307)
        resp = make_response(redirect_to_index)
        resp.set_cookie('user', userid)
        resp.set_cookie('pass', userpass)
        # showへリダイレクト
        return resp
    
    except Exception as error:
        sentence = 'ERROR: 情報を送信できませんでした。すべての情報を正しく入力しましたか?' \
                    +'(detail: '+error.__str__()+')'
        
        index = render_template('error.html',
                                sentence = sentence)
        
        return make_response(index)
def admin_watch_show():
    admin = request.cookies.get('user')# クッキーを保存
    adminpass = request.cookies.get('pass')# クッキーを保存
    
    if not(my_func.admin_coach_kakunin(admin, adminpass)):
        sentence = '初めからやり直してください。'
        index = render_template('error.html',
                                sentence = sentence)
        return make_response(index)
    
    try:
        user_prof = my_func.sql_ALLuser_profile()
        uid_get = request.args.get('name')# 見たいユーザ名
        real_name = user_prof[uid_get]['rname']# ユーザの本名
        
        if user_prof[admin]['type'] == 2 and user_prof[admin]['org'] != user_prof[uid_get]['org']:
            sentence = '機能制限: このユーザーのデータは閲覧できません。'
            index = render_template('error.html',
                                    sentence = sentence)
            return make_response(index)
        
        data = my_func.sql_data_get(uid_get)
        posts = []
        for d in reversed(data):# dataは辞書形式
            neccessary1_tmp \
                = round(float(d['wb']*0.01) + float(d['moi']), 1)
            
            if neccessary1_tmp <= 0:
                neccessary1_tmp = 0
            shitsudo = d['shitsudo']
            temp = d['temp']
            if int(shitsudo) == 1111:
                shitsudo = ' '
            if int(temp) == 1111:
                temp = ' '
            
            posts.append({
              'date'          :d['day'],#日
              'bweight'       :d['wb'],#運動前体重
              'aweight'       :d['wa'],#運動後体重
              'training'      :d['contents'][0:10],#トレーニング内容
              'period'        :d['time'],#運動時間
              'intake'        :d['moi'],#飲水量
              'dehydraterate' :my_func.dassui_ritu(d['wb'],d['wa']),#脱水率
              'necessary'    :round(my_func.hakkann_ryo(d['wb'], d['wa'], d['moi']), 1),
              'tenki'         :tenki_dic[str(d['tenki'])],#天気
              'shitsudo'      :shitsudo,#湿度
              'temp'          :temp,
              'w1'            :round(d['wb']*0.99,1),
              'necessary1'    :neccessary1_tmp
            })
        
        index = render_template('admin_show.html',
                                title = 'taberube.jp',
                                user = real_name,
                                posts = posts,
                                userid = uid_get,
                                serverhost = server_address)
        
        resp = make_response(index)
        
        resp.set_cookie('user', admin)# クッキーの再設定
        resp.set_cookie('pass', adminpass)# クッキーの再設定
        
        return resp
    except Exception as error:# SQLなどのエラー
        sentence = error.__str__()
        index = render_template('error.html',
                                sentence = sentence)
        return make_response(index)
def show():
    userid = request.cookies.get('user')
    userpass = request.cookies.get('pass')
    
    user_prof = my_func.sql_ALLuser_profile()
    
    if not (my_func.kakunin(userid, userpass)):
        sentence = 'IDまたはPASSが違います。正しいパスワードを入力してください。'
        return make_response(render_template('error.html',
                                         sentence = sentence))
    
    try:
        data = my_func.sql_data_get(userid)
        posts = []
        for d in reversed(data):
            neccessary1_tmp \
                = round(float(d['wb'] * 0.01) + float(d['moi']), 1)
            
            if neccessary1_tmp <= 0:
                neccessary1_tmp = 0
            
            shitsudo = d['shitsudo']
            temp = d['temp']
            if int(shitsudo) == 1111:
                shitsudo = '??'
            if int(temp) == 1111:
                temp = '??'
            posts.append({
                  'date'         :d['day'],# 日
                  'bweight'      :d['wb'],# 運動前体重
                  'aweight'      :d['wa'],# 運動後体重
                  'training'     :d['contents'][0:10],# トレーニング内容
                  'period'       :d['time'],# 運動時間
                  'intake'       :d['moi'],# 飲水量
                  'dehydraterate':my_func.dassui_ritu(d['wb'], d['wa']),# 脱水率
                  'tenki'        :str(tenki_dic[str(d['tenki'])]),# 天気
                  'shitsudo'     :shitsudo,# 湿度
                  'temp'         :temp,# 気温
                  'dassui1'      :round(my_func.hakkann_ritu_ex1(d['wb'], d['wa'], d['time']), 1),
                  'necessary'    :round(my_func.hakkann_ryo(d['wb'], d['wa'], d['moi']), 1),
                  'necessary1'   :neccessary1_tmp,
                  'w1'           :round(d['wb'] * 0.99, 1)
                })
        if len(posts) > 0:
            latest = posts.pop(0)
            data = my_func.generateComment(latest)
            comment = data['sentence']
            img = data['img']
            
        else:
            latest = {
                  'date'         :'今回',   #日
                  'bweight'      :'No data',# 運動前体重
                  'aweight'      :'No data',# 運動後体重
                  'training'     :'No data',# トレーニング内容
                  'period'       :'No data',# 運動時間
                  'intake'       :'No data',# 飲水量
                  'dehydraterate':'No data',# 脱水率
                  # 'dehydrateval' :'No data',# 脱水量
                  'tenki'        :'No data',# 天気
                  'shitsudo'     :'No data',# 湿度
                  'temp'         :'No data',
                  'dassui1'      :'No data',
                  'necessary'    :'No data',
                  'necessary1'   :'No data',
                  'w1'           :'No data'}
            
            comment = '''初めまして。このアプリでは、
                     日々のトレーニング後の脱水量を記録していきます。
                     最初のデータを入力しましょう。
                     下の「データ入力」ボタンから結果を登録できます。
                     また、「アスリートのみなさんへ」は、
                     このアプリを利用している全員向けのコメントです。
                     '''
            
            img = 'suzuki1.png'
        messages = my_func.sql_message_get(
                 userid,
                 userpass,
                 max_messages = 3)
        
        texts = []
        for d in messages:
            texts.append({
                'day'     :d['day'],
                'rname'   :user_prof[d['userid']]['rname'],
                'group'   :d['group'],
                'title'   :d['title'],
                'contents':d['contents']
                }
            )
        
        resp = make_response(render_template('main.html',
                                             title = 'taberube.jp',
                                             user = userid,
                                             posts = posts,
                                             latest = latest,
                                             comment = comment,
                                             texts = texts,
                                             img = img,
                                             rname = user_prof[userid]['rname'],
                                             serverhost = server_address))
        resp.set_cookie('user', userid)
        resp.set_cookie('pass', userpass)
        
        return resp
    except Exception as error:
        sentence = '''
            エラー: 結果の画面が取得できません。
            SQLサーバーが停止している、または、
            表データに不正な文字が含まれているため表示できません。 
            サーバー側に問題があるので、管理者にお問い合わせください。
            (detail:'''+error.__str__()+')'
        return make_response(render_template('error.html',
                                             sentence=sentence))