Browse Source

1227 commit

rita 3 years ago
parent
commit
b0640048af

+ 102 - 2
Rita/ERP_Rita/ERP.py

@@ -31,6 +31,63 @@ def index():
 def user(name):
     return render_template('hello.html', name=name)
 
+# 建立 BOM 表
+@app.route('/create_BOM', methods=['GET', 'POST'])
+def create_BOM():
+    # 開啟本機 erp 資料庫
+    mydb = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='g53743001', database='erp', charset='utf8')
+    # mydb = pymysql.connect(host='52.69.200.169', port=3306, user='coffee', password='skyeye', database='Coffee', charset='utf8')
+    mycursor = mydb.cursor()
+    # 獲取欄位資料
+    # sql = '''SELECT * FROM table_component_name'''
+    sql = '''SELECT 內部料號, 會計科目表.會計科目_名稱, 類別表.類別_名稱, 流水號, 供應商.公司, 名稱
+                FROM (
+                        (零件表
+                        INNER JOIN 供應商
+                        ON 供應商.供應商 = 零件表.供應商
+                        )
+                    INNER JOIN 類別表
+                    ON 類別表.類別_編號 = 零件表.類別
+                ) 
+                INNER JOIN 會計科目表 
+                ON 會計科目表.會計科目_編號 = 零件表.會計科目
+                '''
+    mycursor.execute(sql)
+    content = mycursor.fetchall()
+    #獲取欄位名稱
+    sql = "SHOW FIELDS FROM 零件表"
+    mycursor.execute(sql)
+    labels = mycursor.fetchall()
+    # print("labels: ", labels)                   
+    # # labels:  (('產品', 'varchar(4)', 'YES', '', None, ''), ('系統', 'varchar(5)', 'YES', '', None, ''), 
+    labels = [g[0] for g in labels]
+    # print("labels: ", labels)                   
+    # # labels:  ['產品', '系統', '系統圖號', '狀態', '進貨狀態', '序號', '組序號', 
+
+    # 獲取會計科目欄位
+    AccountingSubjects = "SELECT * FROM 會計科目表"
+    mycursor.execute(AccountingSubjects)
+    AccountingSubjects_data = mycursor.fetchall()
+    # print("AccountingSubjects_data", AccountingSubjects_data)     
+    # # (('01', '成品'), ('02', '系統成品'), ('03', '模組半成品'), ('04', '零件'), ('05', '工具'))
+
+    # 獲取類別欄位
+    Category = "SELECT * FROM 類別表"
+    mycursor.execute(Category)
+    Category_data = mycursor.fetchall()
+
+    # 獲取供應商欄位
+    Supplier = "SELECT * FROM 供應商"
+    mycursor.execute(Supplier)
+    Supplier_data = mycursor.fetchall()
+
+    # 獲取零件名稱
+    Component = "SELECT 名稱 FROM 零件表"
+    mycursor.execute(Component)
+    Component_data = mycursor.fetchall()
+    return render_template('create_BOM.html', title='建立 BOM 表', **locals())
+
+
 # 新增零件清單項目
 @app.route('/create_component_table_item', methods=['GET', 'POST'])
 def create_component_table_item():
@@ -39,13 +96,13 @@ def create_component_table_item():
     # mydb = pymysql.connect(host='52.69.200.169', port=3306, user='coffee', password='skyeye', database='Coffee', charset='utf8')
     mycursor = mydb.cursor()
 
+    # # --- 新增零件用 -----------------------------------------------------------------------------------------
     # 獲取會計科目欄位
     AccountingSubjects = "SELECT * FROM 會計科目表"
     mycursor.execute(AccountingSubjects)
     AccountingSubjects_data = mycursor.fetchall()
     # print("AccountingSubjects_data", AccountingSubjects_data)     
     # # (('01', '成品'), ('02', '系統成品'), ('03', '模組半成品'), ('04', '零件'), ('05', '工具'))
-
     # 獲取類別欄位
     Category = "SELECT * FROM 類別表"
     mycursor.execute(Category)
@@ -61,6 +118,43 @@ def create_component_table_item():
     mycursor.execute(Component)
     Component_data = mycursor.fetchall()
 
+    # # --- 新增會計科目項目用 -----------------------------------------------------------------------------------------
+    accountingsubject_sql = 'SELECT 會計科目_編號 FROM 會計科目表 ORDER BY 會計科目_編號 DESC LIMIT 1'
+    # print("accountingsubject_sql: ", accountingsubject_sql)
+    mycursor.execute(accountingsubject_sql)
+    content = mycursor.fetchall()
+
+    try:
+        # print("content: ", content[0][0], type(content[0][0]))
+        new_as_sn = int(content[0][0])+1
+        new_as_sn = '{0:02d}'.format(new_as_sn)
+    except IndexError:
+        new_as_sn = '01'
+
+    # # --- 新增類別項目用 -----------------------------------------------------------------------------------------
+    category_sql = 'SELECT 類別_編號 FROM 類別表 ORDER BY 類別_編號 DESC LIMIT 1'
+    mycursor.execute(category_sql)
+    content = mycursor.fetchall()
+
+    try:
+        new_ca_sn = int(content[0][0])+1
+        new_ca_sn = '{0:02d}'.format(new_ca_sn)
+    except IndexError:
+        new_ca_sn = '01'
+
+    # # --- 新增供應商項目用 -----------------------------------------------------------------------------------------
+    supplier_sql = 'SELECT 供應商 FROM 供應商 ORDER BY 供應商 DESC LIMIT 1'
+    mycursor.execute(supplier_sql)
+    content = mycursor.fetchall()
+
+    try:
+        print("content[0][0][1:]: ", content[0][0][1:])
+        new_su_sn = int(content[0][0][1:])+1
+        new_su_sn = content[0][0][:1] + '{0:02d}'.format(new_su_sn)
+    except IndexError:
+        new_su_sn = 'T01'
+    
+
 
     return render_template('create_component_table_item.html', title='新增零件', **locals())
 
@@ -179,7 +273,7 @@ def sql_get():
     # sql = "SELECT * FROM 零件表 WHERE 會計科目 = 04"
     info = request.args.to_dict('sql')
     sql = info['sql']
-    print("sql: ", sql)
+    # print("sql: ", sql)
     mycursor.execute(sql)
     sql_data = mycursor.fetchall()
     # 獲取欄位名稱
@@ -215,10 +309,16 @@ def sql_get():
         sql_field = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '銷貨表'"
     elif 'INNER JOIN 進貨表' in sql:
         sql_field = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '進貨表'"
+    # elif 'T' in sql:
+    #     table_name = sql[sql.find('`')+1:]
+    #     table_name = sql[:sql.find('`')]
+    #     sql_field = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + table_name + "'"
     else:
         sql_field = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '零件表'"
+    print("sql_field: ", sql_field)
     mycursor.execute(sql_field)
     sql_field = mycursor.fetchall()
+    print("sql_field: ", sql_field)
 
     mydb.commit()
      

BIN
Rita/ERP_Rita/app/__pycache__/__init__.cpython-39.pyc


+ 0 - 5
Rita/ERP_Rita/app/main/__init__.py

@@ -1,5 +0,0 @@
-#main 目錄: 包含主要的業務邏輯的路由和視圖
-# __init__.py : 對主業務邏輯程序的初始化操作
-from flask import Blueprint
-main = Blueprint('main',__name__)
-from . import views

BIN
Rita/ERP_Rita/app/main/__pycache__/__init__.cpython-39.pyc


BIN
Rita/ERP_Rita/app/main/__pycache__/mqtt.cpython-39.pyc


BIN
Rita/ERP_Rita/app/main/__pycache__/views.cpython-39.pyc


File diff suppressed because it is too large
+ 0 - 1167
Rita/ERP_Rita/app/templates/cargo2_actuator.html


+ 0 - 10
Rita/ERP_Rita/app/templates/hello.html

@@ -1,10 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>{{name}}</title>
-</head>
-<body>
-    <h1>{{name}}</h1>
-</body>
-</html>

+ 0 - 11
Rita/ERP_Rita/app/templates/index.html

@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>Coffee Project</title>
-    db connect!
-</head>
-<body>
-    <h1>Hello Coffee!</h1>
-</body>
-</html>

+ 0 - 6
Rita/ERP_Rita/app/user/__init__.py

@@ -1,6 +0,0 @@
-#user目錄:針對用戶業務邏輯處理的目錄
-#針對用戶業務邏輯處理的初始化行為
-
-from flask import Blueprint
-user = Blueprint('user',__name__)
-from . import views

BIN
Rita/ERP_Rita/app/user/__pycache__/__init__.cpython-35.pyc


BIN
Rita/ERP_Rita/app/user/__pycache__/__init__.cpython-36.pyc


BIN
Rita/ERP_Rita/app/user/__pycache__/__init__.cpython-37.pyc


BIN
Rita/ERP_Rita/app/user/__pycache__/__init__.cpython-39.pyc


BIN
Rita/ERP_Rita/app/user/__pycache__/views.cpython-35.pyc


BIN
Rita/ERP_Rita/app/user/__pycache__/views.cpython-36.pyc


BIN
Rita/ERP_Rita/app/user/__pycache__/views.cpython-37.pyc


BIN
Rita/ERP_Rita/app/user/__pycache__/views.cpython-39.pyc


+ 0 - 6
Rita/ERP_Rita/app/user/views.py

@@ -1,6 +0,0 @@
-#針對用戶業務邏輯處理的視圖和路由的定義
-from . import user
-
-@user.route('/user')
-def user_index():
-    return "這是user中的首頁"

+ 519 - 0
Rita/ERP_Rita/templates/create_BOM.html

@@ -0,0 +1,519 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8">
+    <title>{{ title }}</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+    <!-- 新 Bootstrap4 核心 CSS 文件 -->
+    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.1.0/css/bootstrap.min.css">
+    <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
+    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
+    <!-- popper.min.js 用于弹窗、提示、下拉菜单 -->
+    <script src="https://cdn.bootcss.com/popper.js/1.12.5/umd/popper.min.js"></script>
+    <!-- 最新的 Bootstrap4 核心 JavaScript 文件 -->
+    <script src="https://cdn.bootcss.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
+    <!--可用來建立使用者小圖示-->
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+
+    <script>
+        $(function(){
+            
+        });
+    </script>
+    
+</head>
+
+<style>
+    .input-cond-delete {
+        background: #E43030;
+        border: 1px solid #CFCFCF;
+        box-sizing: border-box;
+        border-radius: 5px;
+        margin-left: 5px;
+        width: 65px;
+        height: 33px;
+        font-size: 16px;
+        text-align: center;
+        line-height: 16px;
+        color: #FFFFFF;
+    }
+    .input-cond-add {
+        background: #008CBA;
+        border: 1px solid #CFCFCF;
+        box-sizing: border-box;
+        border-radius: 5px;
+        margin-left: 5px;
+        width: 65px;
+        height: 33px;
+        font-size: 16px;
+        text-align: center;
+        line-height: 16px;
+        color: #FFFFFF;
+    }
+</style>
+
+<body>
+    <!-- 建立 BOM 表名稱用 --------------------------------------------------------------------------------------- -->
+    請輸入此 BOM 表名稱:<br>
+    會計科目:
+    <select id="BOM_accountingsubjects" onChange="">
+        <option value="00"></option>
+        {% for data in AccountingSubjects_data %}
+            <option value="{{data[0]}}">{{data[0]}}-{{data[1]}}</option>
+        {% endfor %}
+    </select>
+    類別:
+    <select id="BOM_category" onChange="renewSN();">
+        <option value="00"></option>
+        {% for data in Category_data %}
+            <option value="{{data[0]}}">{{data[0]}}-{{data[1]}}</option>
+        {% endfor %}
+    </select>
+    流水號:
+    <input id="BOM_serialnumber" placeholder="0001" style="height: 25px; width: 45px;">
+    供應商:
+    <select id="BOM_supplier" onChange="">
+        <option value="00"></option>
+        {% for data in Supplier_data %}
+            <option value="{{data[0]}}">{{data[0]}}-{{data[1]}}</option>
+        {% endfor %}
+    </select>
+    名稱:
+    <input list="BOM_module" id="BOM_module_name_select">
+    <datalist id="BOM_module">
+        <option value=""></option>
+        {% for data in Component_data %}
+            <option value="{{data[0]}}">{{data[0]}}</option>
+        {% endfor %}
+    </datalist>
+    <br>
+    <input type="button" id="view_component" value="查看現有加入零件" onclick="view_component();">
+    <input type="button" id="create_module" value="新增模組/系統/成品" onclick="create_module();">
+    <div id="view_component_data"></div>
+
+
+
+    <script>
+        // 查看現有零件
+        function view_component() {
+            var data = '';
+            data += 'module_amount_list: ' + module_amount_list + ''
+            var sectorSelect = document.getElementById("view_component_data");
+            sectorSelect.innerHTML = data;
+            
+        }
+
+
+        // 新增模組/系統/成品
+        function create_module() {
+            // 會計科目
+            var accountingsubjects_select = $("#BOM_accountingsubjects").val();
+            // 類別
+            var category_select = $("#BOM_category").val();
+            // 流水號 → 從資料庫找到最大的流水號, 然後 +1
+            var serialnumber_select = $("#BOM_serialnumber").val();
+            // 放到 renewSN 方法內執行
+            // 供應商
+            var supplier_select = $("#BOM_supplier").val();
+            // 零件名稱
+            var component_name_select = $("#BOM_module_name_select").val();
+            // 內部料號組合
+            var company_id = accountingsubjects_select + category_select + serialnumber_select + supplier_select;
+            var AND_list = [];
+            console.log(accountingsubjects_select, category_select, serialnumber_select, supplier_select, component_name_select)
+
+            // !!! 將模組加入零件表中
+            var sql = '';
+            sql += 'INSERT INTO 零件表 ' +
+                   'VALUES ("' + company_id + '", "' + accountingsubjects_select + '", "' + category_select + '", "' + serialnumber_select + '", "';
+            sql += supplier_select + '", "' + component_name_select + '");';
+            console.log("sql: " + sql)
+            var sql_data = { "sql":sql };
+
+            $.ajax({
+                type:"GET",
+                url:"/sql_get",
+                dataType:"JSON",
+                data:sql_data,
+                success:function (res) {
+                    alert(" " + company_id + " 新增成功!")
+                    // data = '-- 新增成功! --'
+                    // var sectorSelect = document.getElementById("result");
+                    // sectorSelect.innerHTML = data;
+                },
+                error: function (thrownError) {
+                    if (thrownError.statusText == "INTERNAL SERVER ERROR") {
+                        alert("內部料號 " + company_id + " 已存在, 請重新輸入")
+                    } else {
+                        console.log("新建模組零件 thrownError" + thrownError)
+                    }
+                }
+            })
+
+            // !!! 建立模組 Table
+            var sql = '';
+            sql += 'CREATE TABLE `' + company_id + '` ( ' +
+                   '內部料號 varchar(11) NOT NULL DEFAULT "00", ' +
+                   '數量 varchar(4) NOT NULL DEFAULT "1",' +
+                   '位置 varchar(100) NULL,' +
+                   '備註 varchar(200) NULL,' +
+                   '設計原因 varchar(200) NULL' +
+                   ');';
+            console.log("sql: " + sql)
+            var sql_data = { "sql":sql };
+
+            $.ajax({
+                type:"GET",
+                url:"/sql_get",
+                dataType:"JSON",
+                data:sql_data,
+                success:function (res) {
+                    alert(" " + company_id + " Table 建立成功!")
+                    // data = '-- 新增成功! --'
+                    // var sectorSelect = document.getElementById("result");
+                    // sectorSelect.innerHTML = data;
+                },
+                error: function (thrownError) {
+                    if (thrownError.statusText == "INTERNAL SERVER ERROR") {
+                        alert("內部料號 " + company_id + " 已存在, 請重新輸入")
+                    } else {
+                        console.log("新建模組 Table thrownError" + thrownError)
+                    }
+                }
+            })
+
+            // !!! 將所選零件加入模組 Table
+            var sql = '';
+            sql += 'INSERT INTO `' + company_id + '` (`內部料號`, `數量`) ' +
+                   'VALUES ' + module_amount_list.join(', ') + ';';
+            console.log("sql: " + sql)
+            var sql_data = { "sql":sql };
+
+            $.ajax({
+                type:"GET",
+                url:"/sql_get",
+                dataType:"JSON",
+                data:sql_data,
+                success:function (res) {
+                    alert(" " + company_id + " Table 建立成功!")
+                },
+                error: function (thrownError) {
+                    if (thrownError.statusText == "INTERNAL SERVER ERROR") {
+                        alert("內部料號 " + company_id + " 已存在, 請重新輸入")
+                    } else {
+                        console.log("零件加入模組 thrownError" + thrownError)
+                    }
+                }
+            })
+            
+
+
+            
+        }
+    </script>
+
+
+
+    <hr>
+    <!-- 索取現有零件用 --------------------------------------------------------------------------------------- -->
+    會計科目:
+    <select id="accountingsubjects" onChange="">
+        <option value="00"></option>
+        {% for data in AccountingSubjects_data %}
+            <option value="{{data[0]}}">{{data[0]}}-{{data[1]}}</option>
+        {% endfor %}
+    </select>
+    類別:
+    <select id="category" onChange="">
+        <option value="00"></option>
+        {% for data in Category_data %}
+            <option value="{{data[0]}}">{{data[0]}}-{{data[1]}}</option>
+        {% endfor %}
+    </select>
+    流水號:
+    <input id="serialnumber" placeholder="0001" style="height: 25px; width: 45px;">
+    供應商:
+    <select id="supplier" onChange="">
+        <option value="00"></option>
+        {% for data in Supplier_data %}
+            <option value="{{data[0]}}">{{data[0]}}-{{data[1]}}</option>
+        {% endfor %}
+    </select><br>
+    
+    零件名稱:
+    <select id="component_name_select" onChange="">
+        <option value="00"></option>
+        {% for data in Component_data %}
+            <option value="{{data[0]}}">{{data[0]}}</option>
+        {% endfor %}
+    </select>
+    <input id="component_name_input" placeholder="零件關鍵字輸入" style="height: 25px; width: 120px;">
+    <input type="button" id="search_component_table" value="零件表查詢" onclick="search_component_table();">
+    <input type="button" id="search_BOM_table" value="BOM 表查詢" onclick="search_BOM_table();">
+    <br>
+
+    <script>
+        // BOM 表查詢
+        function search_BOM_table() {
+            var accountingsubjects_select = $("#accountingsubjects").val();
+            var category_select = $("#category").val();
+            var serialnumber_select = $("#serialnumber").val();
+            var supplier_select = $("#supplier").val();
+            // 內部料號組合
+            var company_id = accountingsubjects_select + category_select + serialnumber_select + supplier_select;
+
+            sql = 'SELECT * FROM `' + company_id + '`';
+            var sql_data = { "sql":sql };
+            console.log("sql_data: ", sql_data)
+
+            $.get('/sql_get', sql_data, function (res) {
+                var data = " ";
+                if (res.labels == '') {
+                    data += '-- 無符合關鍵字之資料 --'
+                } else {
+                    data += '<table class="table table-bordered" style="margin-top: 10px;">';
+                    data += '<tr>';
+                    for (let fields = 0; fields < res.sql_field.length; fields++) {
+                        data += '<th>' + res.sql_field[fields][0] + '</th>';
+                    }
+                    data += '</tr>';
+                    for (let items = 0; items < res.labels.length; items++) {
+                        data += '<tr>';
+                        for (let item = 0; item < res.labels[items].length; item++) {
+                            data += '<td id="' + res.labels[items][0] + '_' + item + '">' + res.labels[items][item] + '</td>';
+                        };
+                        data += '</tr>';
+                    };
+                    data += '</table>';
+                }
+                var sectorSelect = document.getElementById("result");
+                sectorSelect.innerHTML = data;
+            }, 'json');
+
+
+            
+        }
+
+        // 儲存欲加入的零件 數量
+        var module_amount_list = [];
+
+        // 加入 BOM 表
+        function insert_moduel(company_id) {
+            var select_amount = $("#BOM_amount" + company_id).val();
+            module_amount_list.push('("' + company_id + '", "' + select_amount + '")')
+            console.log("module_amount_list: " + module_amount_list)
+
+        }
+
+
+        // 輸入完類別後, 流水號自動帶入
+        function renewSN() {
+            var BOM_accountingsubjects_select = $("#BOM_accountingsubjects").val();
+            var BOM_category_select = $("#BOM_category").val();
+            $.get('/sn_get/' + BOM_accountingsubjects_select + '/' + BOM_category_select, '', function (res) {
+                // console.log(res.new_sn)
+                $('#BOM_serialnumber').val(res.new_sn)
+            }, 'json');
+        }
+
+        // 各資料表←關聯→零件表, 程式
+        function search_relation_insertdata(sql) {
+            var accountingsubjects_select = $("#accountingsubjects").val();
+            var category_select = $("#category").val();
+            var serialnumber_select = $("#serialnumber").val();
+            var supplier_select = $("#supplier").val();
+            var component_name_select = $("#component_name_select").val();
+            var component_name_input = $("#component_name_input").val();
+            var AND_list = [];
+
+            console.log(accountingsubjects_select, category_select, serialnumber_select, supplier_select)
+            var sql = sql;
+            // 篩選 會計科目/類別/供應商 關鍵字
+            if (accountingsubjects_select != '00') {
+                AND_list.push('會計科目 = "' + accountingsubjects_select + '"')
+            }
+            if (category_select != '00') {
+                AND_list.push('類別 = "' + category_select + '"')
+            }
+            if (serialnumber_select != '') {
+                AND_list.push('流水號 = "' + serialnumber_select + '"')
+            }
+            if (supplier_select != '00') {
+                AND_list.push('供應商 = "' + supplier_select + '"')
+            }
+            if (component_name_select != '00') {
+                AND_list.push('零件表.名稱 = "' + component_name_select + '"')
+            } else if (component_name_input != '') {
+                AND_list.push('零件表.名稱 LIKE "%' + component_name_input + '%"')
+            }
+            console.log("AND_list: ", AND_list)
+            if (AND_list != '') {
+                sql += ' WHERE ' + AND_list.join(' AND ');
+            }
+
+            if (sql.match('INNER JOIN 庫存表')) {
+                sql += ' ORDER BY 時間 DESC LIMIT 1'
+            }
+            
+            var sql_data = {
+                "sql":sql
+            };
+            console.log("sql_data: ", sql_data)
+
+            $.get('/sql_get', sql_data, function (res) {
+                // console.log("res: " + res)
+                // console.log("res.labels:" + res.labels)
+                // console.log("res.labels[0]:" + res.labels[0])
+                // console.log("res.labels[0][0]:" + res.labels[0][0])
+                // console.log("res.sql_field:" + res.sql_field)
+                // console.log("res.sql_field[0]:" + res.sql_field[0])
+                var data = " ";
+                if (res.labels == '') {
+                    data += '-- 無符合關鍵字之資料 --'
+                } else {
+                    data += '<table class="table table-bordered" style="margin-top: 10px;">';
+                    data += '<tr>';
+                    for (let fields = 0; fields < res.sql_field.length; fields++) {
+                        data += '<th>' + res.sql_field[fields][0] + '</th>';
+                    }
+                    data += '</tr>';
+                    for (let items = 0; items < res.labels.length; items++) {
+                        data += '<tr>';
+                            for (let item = 0; item < res.labels[items].length; item++) {
+                                console.log("res.labels[items][item]: ", res.labels[items][item], typeof(res.labels[items][item]))
+                                data += '<td>' + res.labels[items][item] + '</td>';
+                            };
+                        data += '</tr>';
+                    };
+                    data += '</table>';
+                }
+                var sectorSelect = document.getElementById("result");
+                sectorSelect.innerHTML = data;
+            }, 'json');
+        }
+
+        // 零件表查詢
+        function search_component_table(){
+            var accountingsubjects_select = $("#accountingsubjects").val();
+            var category_select = $("#category").val();
+            var serialnumber_select = $("#serialnumber").val();
+            var supplier_select = $("#supplier").val();
+            var component_name_select = $("#component_name_select").val();
+            var component_name_input = $("#component_name_input").val();
+            var AND_list = [];
+
+            console.log(accountingsubjects_select, category_select, serialnumber_select, supplier_select)
+            // sql = 'SELECT * FROM 零件表';
+            sql = 'SELECT 內部料號, 會計科目表.會計科目_名稱, 類別表.類別_名稱, 流水號, 供應商.公司, 名稱' +
+                  ' FROM (' +
+                        '(零件表 ' +
+                        'INNER JOIN 供應商' +
+                        ' ON 供應商.供應商 = 零件表.供應商' +
+                        ')' +
+                    ' INNER JOIN 類別表' +
+                    ' ON 類別表.類別_編號 = 零件表.類別' +
+                ') ' +
+                'INNER JOIN 會計科目表 ' +
+                'ON 會計科目表.會計科目_編號 = 零件表.會計科目' +
+                '' ;
+            // 篩選 會計科目/類別/供應商 關鍵字
+            if (accountingsubjects_select != '00') {
+                AND_list.push('會計科目 = "' + accountingsubjects_select + '"')
+            }
+            if (category_select != '00') {
+                AND_list.push('類別 = "' + category_select + '"')
+            }
+            if (serialnumber_select != '') {
+                AND_list.push('流水號 = "' + serialnumber_select + '"')
+            }
+            if (supplier_select != '00') {
+                AND_list.push('零件表.供應商 = "' + supplier_select + '"')
+            }
+            if (component_name_select != '00') {
+                AND_list.push('名稱 = "' + component_name_select + '"')
+            } else if (component_name_input != '') {
+                AND_list.push('名稱 LIKE "%' + component_name_input + '%"')
+            }
+            console.log("AND_list: ", AND_list)
+            if (AND_list != '') {
+                sql += ' WHERE ' + AND_list.join(' AND ');
+            }
+            
+            var sql_data = {
+                "sql":sql
+            };
+            console.log("sql_data: ", sql_data)
+
+            $.get('/sql_get', sql_data, function (res) {
+                // console.log("res: " + res)
+                // console.log("res.labels:" + res.labels)
+                // console.log("res.labels[0]:" + res.labels[0])
+                // console.log("res.labels[0][0]:" + res.labels[0][0])
+                // console.log("res.sql_field:" + res.sql_field)
+                // console.log("res.sql_field[0]:" + res.sql_field[0])
+                var data = " ";
+                if (res.labels == '') {
+                    data += '-- 無符合關鍵字之資料 --'
+                } else {
+                    data += '<table class="table table-bordered" style="margin-top: 10px;">';
+                    data += '<tr>';
+                    for (let fields = 0; fields < res.sql_field.length; fields++) {
+                        data += '<th>' + res.sql_field[fields][0] + '</th>';
+                    }
+                    data += '<th>' + '輸入零件數量' + '</th>';
+                    data += '<th>' + '加入此 BOM 表' + '</th>';
+                    data += '</tr>';
+                    for (let items = 0; items < res.labels.length; items++) {
+                        data += '<tr>';
+                            for (let item = 0; item < res.labels[items].length; item++) {
+                                data += '<td id="' + res.labels[items][0] + '_' + item + '">' + res.labels[items][item] + '</td>';
+                            };
+                            data += '<td><input id="BOM_amount' + res.labels[items][0] + '" style="height: 25px; width: 45px;"></td>';
+                            data += '<td><input type="button" class="input-cond-add" value="加入" onclick="insert_moduel(\'' + res.labels[items][0] + '\')"></td>';
+                        data += '</tr>';
+                    };
+                    data += '</table>';
+                }
+                var sectorSelect = document.getElementById("result");
+                sectorSelect.innerHTML = data;
+            }, 'json');
+        }
+
+
+    </script>
+
+    <div id="result">
+        <!-- <table>
+        </table> -->
+    </div>
+
+    
+        
+            
+        
+    
+    
+    <!-- <table class="table table-bordered" style="margin-top: 20px;">
+        <tr>
+            {% for i1 in labels %}
+            <th>{{i1}}</th>
+            {% endfor %}
+        </tr>
+        {% for i in content %}
+        <tr>
+            <td>{{ i[0] }}</td>
+            <td>{{ i[1] }}</td>
+            <td>{{ i[2] }}</td>
+            <td>{{ i[3] }}</td>
+            <td>{{ i[4] }}</td>
+            <td>{{ i[5] }}</td>
+            <td>{{ i[6] }}</td>
+            <td>{{ i[7] }}</td>
+        </tr>
+        {% endfor %}
+    </table> -->
+</body>
+
+</html>

+ 120 - 7
Rita/ERP_Rita/templates/create_component_table_item.html

@@ -19,6 +19,8 @@
 </head>
 
 <body>
+    <!-- 這裡新增零件表中的零件 -->
+    請依序輸入以下欄位, 再按下 "新增零件" 按鈕:<br>
     會計科目:
     <select id="accountingsubjects" onChange="">
         <option value="00"></option>
@@ -44,13 +46,12 @@
     </select>
     零件名稱:
     <input list="conponents" id="component_name_select">
-        <datalist id="conponents">
-            <option value=""></option>
-            {% for data in Component_data %}
-                <option value="{{data[0]}}">{{data[0]}}</option>
-            {% endfor %}
-        </datalist>
-    </select>
+    <datalist id="conponents">
+        <option value=""></option>
+        {% for data in Component_data %}
+            <option value="{{data[0]}}">{{data[0]}}</option>
+        {% endfor %}
+    </datalist>
     <br>
     
     <input type="button" id="create_component" value="新增零件" onclick="create_component();">
@@ -130,6 +131,118 @@
         }
         
     </script>
+
+
+
+
+    <hr>
+    <!-- 這裡新增零件表中的 會計科目 -->
+    請輸入欲新增的會計科目名稱, 再按下 "新增會計科目項目" 按鈕:<br>
+    <input id="create_accountingsubject_id" value="{{new_as_sn}}" style="height: 25px; width: 45px;" readonly>
+    <input id="create_accountingsubject_name" value="" style="height: 25px;">
+    <input type="button" id="create_accountingsubject" value="新增會計科目項目" onclick="create_accountingsubject();">
+    <script>
+        function create_accountingsubject() {
+            var as_id = $("#create_accountingsubject_id").val();
+            var as_name = $("#create_accountingsubject_name").val();
+            var sql = '';
+            sql += 'INSERT INTO 會計科目表 ' +
+                   'VALUES ("' + as_id + '", "' + as_name + '");';
+            // console.log("sql: " + sql)
+
+            var sql_data = { "sql":sql };
+
+            $.ajax({
+                type:"GET",
+                url:"/sql_get",
+                dataType:"JSON",
+                data:sql_data,
+                success:function (res) {
+                    alert('新增 會計科目 成功')
+                },
+                error: function (thrownError) {
+                    if (thrownError.statusText == "INTERNAL SERVER ERROR") {
+                        alert("會計科目 " + as_id + " 已存在, 請重新輸入")
+                    }
+                }
+
+            })
+        }
+    </script>
+
+
+
+
+    <hr>
+    <!-- 這裡新增零件表中的 類別 -->
+    請輸入欲新增的類別名稱, 再按下 "新增類別項目" 按鈕:<br>
+    <input id="create_category_id" value="{{new_ca_sn}}" style="height: 25px; width: 45px;" readonly>
+    <input id="create_category_name" value="" style="height: 25px;">
+    <input type="button" id="create_category" value="新增類別項目" onclick="create_category();">
+    <script>
+        function create_category() {
+            var ca_id = $("#create_category_id").val();
+            var ca_name = $("#create_category_name").val();
+            var sql = '';
+            sql += 'INSERT INTO 類別表 ' +
+                   'VALUES ("' + ca_id + '", "' + ca_name + '");';
+            var sql_data = { "sql":sql };
+
+            $.ajax({
+                type:"GET",
+                url:"/sql_get",
+                dataType:"JSON",
+                data:sql_data,
+                success:function (res) {
+                    alert('新增 類別 成功')
+                },
+                error: function (thrownError) {
+                    if (thrownError.statusText == "INTERNAL SERVER ERROR") {
+                        alert("類別 " + ca_id + " 已存在, 請重新輸入")
+                    }
+                }
+
+            })
+        }
+    </script>
+
+
+
+
+
+    <hr>
+    <!-- 這裡新增零件表中的 供應商 -->
+    請輸入欲新增的供應商名稱, 再按下 "新增供應商" 按鈕: (其他資料先以 NULL 存入)<br>
+    <input id="create_supplier_id" value="{{new_su_sn}}" style="height: 25px; width: 45px;" readonly>
+    <input id="create_supplier_name" value="" style="height: 25px;">
+    <input type="button" id="create_supplier" value="新增供應商項目" onclick="create_supplier();">
+    <script>
+        function create_supplier() {
+            var su_id = $("#create_supplier_id").val();
+            var su_name = $("#create_supplier_name").val();
+            var sql = '';
+            sql += 'INSERT INTO 供應商 (`供應商`, `公司`) ' +
+                   'VALUES ("' + su_id + '", "' + su_name + '");';
+            console.log("sql:", sql)
+            var sql_data = { "sql":sql };
+
+            $.ajax({
+                type:"GET",
+                url:"/sql_get",
+                dataType:"JSON",
+                data:sql_data,
+                success:function (res) {
+                    alert('新增 供應商 成功')
+                },
+                error: function (thrownError) {
+                    if (thrownError.statusText == "INTERNAL SERVER ERROR") {
+                        alert("供應商 " + su_id + " 已存在, 請重新輸入")
+                    }
+                }
+
+            })
+        }
+    </script>
 </body>
 
 </html>

+ 21 - 4
Rita/ERP_Rita/templates/search.html

@@ -87,6 +87,7 @@
     <input type="button" id="search_component_export_table" value="(零件)銷貨表查詢" onclick="search_component_export_table();">
     <br>
     <a id="create_component_table_item" href="/create_component_table_item">(零件)新增零件</a>
+    <a id="create_BOM" href="/create_BOM">建立 BOM 表</a>
 
     <script>
         // (零件)銷貨表查詢
@@ -210,15 +211,17 @@
             var sql_data = { "sql":sql };
 
             $.get('/sql_get', sql_data, function (res) {
-                console.log(res)
+                // console.log(res)
             }, 'json');
+
+            alert("修改成功!")
+            search_component_table();
         }
 
         // 修改
         function update_component(company_id) {
             console.log("修改 " + company_id)
-            var old_name = 
-            target_id = company_id + '_5'
+            var old_name = target_id = company_id + '_5'
             var target_id = document.getElementById(company_id + '_5');
             var old_name = target_id.innerText;
             console.log('old_name: ', old_name)
@@ -230,7 +233,21 @@
         }
         // 刪除
         function delete_component(company_id) {
-            console.log("刪除 " + company_id)
+            var delete_data = confirm("確定要刪除內部料號 " + company_id + " 的資料嗎?") 
+            if (delete_data) {
+                console.log("刪除 " + company_id)
+                sql = '';
+                sql += 'DELETE FROM 零件表 WHERE 內部料號 = "' + company_id + '";'
+                var sql_data = { "sql":sql };
+
+                $.get('/sql_get', sql_data, function (res) {
+                    // console.log(res)
+                }, 'json');
+
+                alert("刪除 成功!")
+                search_component_table();
+            }
+            
         }
 
         // 零件表查詢