from flask import Flask, render_template,request,url_for, redirect
import pymysql
import pandas as pd
import csv


app = Flask(__name__)

conn = pymysql.connect(
    host='127.0.0.1',
    user='root',
    password='Gold@53743001',
    db='erp',
    charset='utf8'
)

#首頁
@app.route("/")
def index():
    return render_template("index.html",title = 'ERP WEB')

#產品清單頁面
@app.route('/productinfo/')
def productinfo():
    cur = conn.cursor()
    #獲取欄位資料
    sql = "select * from product_info"
    cur.execute(sql)
    content = cur.fetchall()
    #獲取欄位名稱
    sql = "SHOW FIELDS FROM product_info"
    cur.execute(sql)
    labels = cur.fetchall()
    labels = [g[0] for g in labels]

    return render_template('productinfo.html', labels=labels, content=content)


@app.route('/submit/')
def form():
    return render_template('submit.html')

#新增產品清單內容
@app.route('/add_product', methods=['POST', 'GET'])
def add_product():
    if request.method == 'GET':
        return "Login via the login Form"

    if request.method == 'POST':
        NO = request.form['NO']
        內部料號 = request.form['內部料號']
        品名 = request.form['品名']
        規格型號 = request.form['規格型號']
        類型 = request.form['類型']
        技術文件連結 = request.form['技術文件連結']
        原廠料號 = request.form['原廠料號']
        賣家料號 = request.form['賣家料號']
        圖示 = request.form['圖示']
        進單價 = request.form['進單價']
        數量 = request.form['數量']
        單位 = request.form['單位']
        取得方式 = request.form['取得方式']
        庫存 = request.form['庫存']
        廠商 = request.form['廠商']

        cur = conn.cursor()

        cur.execute(''' INSERT INTO product_info VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'''
                       , (NO, 內部料號, 品名, 規格型號, 類型, 技術文件連結, 原廠料號, 賣家料號, 圖示, 進單價, 數量, 單位, 取得方式, 庫存, 廠商))
        conn.commit()
        cur.close()
        return f"Done!!"


@app.route('/check/',methods=['GET','POST'])
def check():
    cur = conn.cursor()
    #獲取欄位名稱
    sql = "select 品名 from product_info"
    cur.execute(sql)
    labels = cur.fetchall()
    labels = [g[0] for g in labels]

    if request.method =='POST':
        sql = "SHOW FIELDS FROM product_info"
        cur.execute(sql)
        labels = cur.fetchall()
        labels = [g[0] for g in labels]
        t = request.values['Test']
        #print(t)
        cur = conn.cursor()
        #獲取欄位資料
        cur.execute("""select * from product_info WHERE 品名 = {}""".format(repr(t)))
        content = cur.fetchall()
        #print(content)
        return render_template('check1.html',content=content,labels=labels)

         
    return render_template('check.html', labels=labels)

@app.route('/update/') 
def update(): 
# 獲取頁面輸入內容，提供給sql使用 
    userinfoId = request.args.get('userinfoId') 
    name = request.args.get('name') # 更新後的數據返回到頁面上面顯示 
    #return render_template('update.html') 

#修改資料庫資料
@app.route('/updateaction/', methods=['POST']) 
def updateaction(): 
    cur = conn.cursor()
    params = request.args if request.method == 'GET' else request.form
    #選定欄位的值
    userinfoId = params.get('userinfoId')
    #修改的數值
    技術文件連結 = params.get('技術文件連結') 
    NO = params.get('NO')
    品名 = params.get('品名')
    規格型號 = params.get('規格型號')
    類型 = params.get('類型')
    原廠料號 = params.get('原廠料號')
    賣家料號 = params.get('賣家料號')
    圖示 = params.get('圖示')
    進單價 = params.get('進單價')
    數量 = params.get('數量')
    單位 = params.get('單位')
    取得方式 = params.get('取得方式')
    庫存 = params.get('庫存')
    廠商 = params.get('廠商')

    sql = "update product_info set 技術文件連結='%s',NO='%s',品名='%s',規格型號='%s'" \
          ",類型='%s',原廠料號='%s',賣家料號='%s',圖示='%s'" \
          ",進單價='%s',數量='%s',單位='%s',取得方式='%s'" \
          ",庫存='%s',廠商='%s' where 內部料號='%s'" \
          %(技術文件連結,NO,品名,規格型號,類型,原廠料號,賣家料號,圖示,進單價,數量,單位,取得方式,庫存,廠商,userinfoId) # 執行插入操作
    

    cur.execute(sql)
    conn.commit()
    return render_template('index.html') # 返回更新後的數據，確認是否更新成功

#---------------------------------------------------------------------------------------#

#產品清單頁面
@app.route('/system_sink/')
def system_sink():
    cur = conn.cursor()
    #獲取欄位資料
    sql = "select * from abc"
    cur.execute(sql)
    content = cur.fetchall()
    print(content)
    #獲取欄位名稱
    sql = "SHOW FIELDS from abc"
    cur.execute(sql)
    labels = cur.fetchall()
    labels = [g[0] for g in labels]

    return render_template('system_sink.html', labels=labels, content=content)


@app.route('/submit_sink/')
def form_sink():
    return render_template('submit_sink.html')

#新增產品清單內容
@app.route('/add_sink', methods=['POST', 'GET'])
def add_sink():
    if request.method == 'GET':
        return "Login via the login Form"

    if request.method == 'POST':
        系統 = request.form['系統']
        狀態 = request.form['狀態']
        進貨狀態 = request.form['進貨狀態']
        內部料號 = request.form['內部料號']
        組序號 = request.form['組序號']
        模組圖名 = request.form['模組圖名']
        模組圖號出圖連結 = request.form['模組圖號/出圖連結']
        模組數量 = request.form['模組數量']
        項次 = request.form['項次']
        零件圖名 = request.form['零件圖名']
        零件圖號 = request.form['零件圖號']
        零件數量 = request.form['零件數量']
        零件總數量 = request.form['零件總數量']
        類型 = request.form['類型']
        進度 = request.form['進度']
        備註 = request.form['備註']
        出圖日期 = request.form['出圖日期']
        出圖人員 = request.form['出圖人員']
        修改日期 = request.form['修改日期']
        修改原因 = request.form['修改原因']
        修改人員 = request.form['修改人員']
        模組 = request.form['模組']
        主板編號 = request.form['主板編號']
        制動器編號 = request.form['制動器編號']
        項目 = request.form['項目']
        韌體有V = request.form['韌體(有V)']
        韌體連結git = request.form['韌體連結git']
        型號規格書 = request.form['型號(規格書)']
        安裝位置 = request.form['安裝位置']
        數量 = request.form['數量']
        需求電壓V = request.form['需求電壓(V)']
        需求電流A = request.form['需求電流(A)']
        功率W = request.form['功率(W)']
        通訊介面 = request.form['通訊介面']
        芯數 = request.form['芯數']
        線材編號 = request.form['線材編號']
        單價 = request.form['單價']
        總價 = request.form['總價']
        請購單號 = request.form['請購單號']
        電流_220V = request.form['220V_電流']
        功率_220V = request.form['220V_功率']
        電流_24V = request.form['24V_電流']
        功率_24V = request.form['24V_功率']
        電流_12V = request.form['12V_電流']
        功率_12V = request.form['12V_功率']
        電流_5V = request.form['5V_電流']
        功率_5V = request.form['5V_功率']
        電流_3_3V = request.form['3.3V_電流']
        功率_3_3V = request.form['3.3V_功率']
        流量率 = request.form['流量(率)']
        容量 = request.form['容量']
        壓力 = request.form['壓力']
        

        cur = conn.cursor()

        cur.execute(''' INSERT INTO sink VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'''
                       , (系統,狀態,進貨狀態,內部料號,組序號,模組圖名,模組圖號出圖連結,模組數量,項次,零件圖名,零件圖號,零件數量,零件總數量,類型,進度,備註,出圖日期,出圖人員,修改日期,修改原因,修改人員,模組,主板編號,制動器編號,項目,韌體有V,韌體連結git,型號規格書,安裝位置,數量,需求電壓V,需求電流A,功率W,通訊介面,芯數,線材編號,單價,總價,請購單號,電流_220V,功率_220V,電流_24V,功率_24V,電流_12V,功率_12V,電流_5V,功率_5V,電流_3_3V,功率_3_3V,流量率,容量,壓力))
        conn.commit()
        cur.close()
        return f"Done!!"


@app.route('/check_sink/',methods=['GET','POST'])
def check_sink():
    cur = conn.cursor()
    #獲取欄位名稱
    sql = "select 組序號 from abc"
    cur.execute(sql)
    labels = cur.fetchall()
    labels = [g[0] for g in labels]

    if request.method =='POST':
        sql = "SHOW FIELDS from abc"
        cur.execute(sql)
        labels = cur.fetchall()
        labels = [g[0] for g in labels]
        t = request.values['Test']
        #print(t)
        cur = conn.cursor()
        #獲取欄位資料
        cur.execute("""select * from abc WHERE 組序號 = {}""".format(repr(t)))
        content = cur.fetchall()
        #print(content)
        return render_template('check1_sink.html',content=content,labels=labels)

         
    return render_template('check_sink.html', labels=labels)

@app.route('/update_sink/') 
def update_sink(): 
# 獲取頁面輸入內容，提供給sql使用 
    userinfoId = request.args.get('系統') 
    name = request.args.get('name') # 更新後的數據返回到頁面上面顯示 
    #return render_template('update.html') 

#修改資料庫資料
@app.route('/updateaction_sink/', methods=['POST']) 
def updateaction_sink(): 
    cur = conn.cursor()
    params = request.args if request.method == 'GET' else request.form
    #選定欄位的值
    userinfoId = params.get('系統')
    #修改的數值
    狀態 = params.get('狀態')
    進貨狀態 = params.get('進貨狀態')
    內部料號 = params.get('內部料號')
    組序號 = params.get('組序號')
    模組圖名 = params.get('模組圖名')
    模組圖號出圖連結 = params.get('模組圖號出圖連結') 
    模組數量 = params.get('模組數量')
    項次 = params.get('項次')
    零件圖名 = params.get('零件圖名') 
    零件圖號 = params.get('零件圖號') 
    零件數量 = params.get('零件數量') 
    零件總數量 = params.get('零件總數量') 
    類型 = params.get('類型') 
    進度 = params.get('進度')
    備註 = params.get('備註') 
    出圖日期 = params.get('出圖日期') 
    出圖人員 = params.get('出圖人員') 
    修改日期 = params.get('修改日期') 
    修改原因 = params.get('修改原因') 
    修改人員 = params.get('修改人員') 
    模組 = params.get('模組') 
    主板編號 = params.get('主板編號')
    制動器編號 = params.get('制動器編號') 
    項目 = params.get('項目') 
    韌體有V = params.get('韌體(有V)')
    韌體連結git = params.get('韌體連結git')
    型號規格書 = params.get('型號(規格書)')
    安裝位置 = params.get('安裝位置')
    數量 = params.get('數量')
    需求電壓V = params.get('需求電壓(V)')
    需求電流A = params.get('需求電流(A)')
    功率W = params.get('功率(W)')
    通訊介面 = params.get('通訊介面')
    芯數 = params.get('芯數')
    線材編號 = params.get('線材編號')
    單價 = params.get('單價') 
    總價 = params.get('總價') 
    請購單號 = params.get('請購單號')
    電流_220V = params.get('220V_電流')
    功率_220V = params.get('220V_功率')
    電流_24V = params.get('24V_電流')
    功率_24V = params.get('24V_功率')
    電流_12V = params.get('12V_電流')
    功率_12V = params.get('12V_功率') 
    電流_5V = params.get('5V_電流')
    功率_5V = params.get('5V_功率')
    電流_3_3V = params.get('3.3V_電流')
    功率_3_3V = params.get('3.3V_功率')
    流量率 = params.get('流量(率)')
    容量 = params.get('容量')
    壓力 = params.get('壓力')
    

    sql = "update sink set 狀態='%s',進貨狀態='%s',內部料號='%s',組序號='%s',模組圖名='%s',模組圖號出圖連結='%s',模組數量='%s',項次='%s',零件圖名='%s',零件圖號='%s',零件數量='%s',零件總數量='%s',類型='%s',進度='%s',備註='%s',出圖日期='%s',出圖人員='%s',修改日期='%s',修改原因='%s',修改人員='%s',模組='%s',主板編號='%s',制動器編號='%s',項目='%s',韌體 ( 有V)='%s',韌體連結git='%s',型號規格書='%s',安裝位置='%s',數量='%s',需求電壓(V)='%s',需求電流(A)='%s',功率(W)='%s',通訊介面='%s',芯數='%s',線材編號='%s',單價='%s',總價='%s',請購單號='%s',220V_電流='%s',220V_功率='%s',24V_電流='%s',24V_功率='%s',12V_電流='%s',12V_功率='%s',5V_電流='%s',5V_功率='%s',3.3V_電流='%s',3.3V_功率='%s',流量(率)='%s',容量='%s',壓力='%s' where userinfoId='%s'"%(狀態,進貨狀態,內部料號,組序號,模組圖名,模組圖號出圖連結,模組數量,項次,零件圖名,零件圖號,零件數量,零件總數量,類型,進度,備註,出圖日期,出圖人員,修改日期,修改原因,修改人員,模組,主板編號,制動器編號,項目,韌體有V,韌體連結git,型號規格書,安裝位置,數量,需求電壓V,需求電流A,功率W,通訊介面,芯數,線材編號,單價,總價,請購單號,電流_220V,功率_220V,電流_24V,功率_24V,電流_12V,功率_12V,電流_5V,功率_5V,電流_3_3V,功率_3_3V,流量率,容量,壓力,userinfoId) # 執行插入操作
    

    cur.execute(sql)
    conn.commit()
    return render_template('index.html') # 返回更新後的數據，確認是否更新成功


@app.route('/bomform',methods=['GET','POST'])
def bom():
    cur = conn.cursor()
    #獲取欄位名稱
    sql = "select 品名,內部料號 from product_info"
    cur.execute(sql)
    labels = cur.fetchall()
    print(labels)
    labels = [g for g in labels]

    if request.method =='POST':
        #sql = "SHOW FIELDS FROM product_info"
        #cur.execute(sql)
        #labels = cur.fetchall()
        #labels = [g[0] for g in labels]
        nn = request.values['test1']
        t = request.values['test2']
        t1 = request.values['test3']
        cur1 = conn.cursor()
        #獲取欄位資料
        cur1.execute("""select 品名 from product_info WHERE 品名 = {}""".format(repr(nn)))
        content1 = cur1.fetchone()
        cur2 = conn.cursor()
        #獲取欄位資料
        cur2.execute("""select 內部料號,品名,數量,庫存 from product_info WHERE 品名 = {}""".format(repr(t)))
        content2 = cur2.fetchall()
        cur3 = conn.cursor()
        #獲取欄位資料
        cur3.execute("""select 內部料號,品名,數量,庫存 from product_info WHERE 品名 = {}""".format(repr(t1)))
        content3 = cur3.fetchall()
        print(content1)
        print(content2)
        print(content3)
        return render_template('bom1.html',content1=content1,content2=content2,content3=content3,labels=labels)

         
    return render_template('bom.html', labels=labels)

@app.route("/read_excel",methods=['GET','POST'])
def read_excel():
    return render_template("read_excel.html")

@app.route("/data_excel",methods=['GET','POST'])
def data_excel():
    if request.method =='POST':
        f = request.form['csvfile']
        data = []
        with open(f,encoding='UTF8') as file:
            csvfile = csv.reader(file)
            for row in csvfile:
                data.append(row)
        data = pd.DataFrame(data)
        return render_template('data_excel.html',data=data.to_html(header=False,index=False))


@app.route('/loginurl', methods=['GET', 'POST'])
def login():
    #  利用request取得使用者端傳來的方法為何
    if request.method == 'POST':
                          #  利用request取得表單欄位值
        return 'Hello ' + request.values['username']
    
    #  非POST的時候就會回傳一個空白的模板
    return render_template('login.html')

@app.route('/Inquire_from/',methods=['GET','POST'])
def Inquire_from():
    cur1 = conn.cursor()
    # 獲取欄位資料
    sql1 = "select DISTINCT 產品 from abc"
    cur1.execute(sql1)
    labels1 = cur1.fetchall()
    labels1 = [g[0] for g in labels1]
    print(labels1)

    cur2 = conn.cursor()
    # 獲取欄位資料
    sql2 = "select DISTINCT 系統 from abc"
    cur2.execute(sql2)
    labels2 = cur2.fetchall()
    labels2 = [g[0] for g in labels2]
    print(labels2)

    cur3 = conn.cursor()
    # 獲取欄位資料
    sql3 = "select DISTINCT 模組圖名 from abc"
    cur3.execute(sql3)
    labels3 = cur3.fetchall()
    labels3 = [g[0] for g in labels3]
    print(labels3)

    cur4 = conn.cursor()
    # 獲取欄位資料
    sql4 = "select DISTINCT 類型 from abc"
    cur4.execute(sql4)
    labels4 = cur4.fetchall()
    labels4 = [g[0] for g in labels4]
    print(labels4)

        if request.method == 'POST':
        sql = "SHOW FIELDS FROM abc"
        cur1.execute(sql)
        labels = cur1.fetchall()
        labels = [g[0] for g in labels]
        # ----------------------------------------#

        t1 = request.values['Test1']
        t2 = request.values['Test2']
        t3 = request.values['Test3']
        t4 = request.values['Test4']
        # print(t1)
        # print(t2)
        # print(t3)
        # print(t4)


        cur = conn.cursor()

        #
        data = 'select * from abc'
        if t1 == '' and t2 == '' and t3 == '' and t4 == '':
            pass
        else:
            data += ' WHERE '
            if t1 != '':
                data += '產品 = \'' + t1 + '\' '
                if t2 != '':
                    data += ' AND '
                elif t3 != '':
                    data += ' AND '
                elif t4 != '':
                    data += ' AND '
            if t2 != '':
                data += '系統 = \'' + t2 + '\' '
                if t3 != '':
                    data += ' AND '
                elif t4 != '':
                    data += ' AND '

            if t3 != '':
                data += '模組圖名 = \'' + t3 + '\' '
                if t4 != '':
                    data += ' AND '
            if t4 != '': data += '零件圖名 = \'' + t4 + '\' '

        print(data)
        # 進資料庫
        cur.execute(data)


        content = cur.fetchall()
        # print(content)
        return render_template('Inquire1.html', content=content, labels=labels)

    return render_template('Inquire.html',labels1=labels1,labels2=labels2,labels3=labels3,labels4=labels4)


        
if __name__ == '__main__':
    app.run(debug=True,host='0.0.0.0',port=3030)