開平食材採購系統:修訂版本之間的差異
出自福留子孫
(→測試) |
(→文件) |
||
(未顯示同用戶所作出之18次版本) | |||
第 1 行: | 第 1 行: | ||
[[分類:應用軟體]] | [[分類:應用軟體]] | ||
+ | [http://wiki.kpvs.tp.edu.tw 開平 wiki] | ||
+ | *分類:程式開發 | ||
+ | *#食材採購系統 | ||
+ | *#*食材採購系統/etable | ||
+ | *分類:CC | ||
+ | |||
+ | ==因應 PHP 5.3 停用函式== | ||
+ | *參考 [http://stackoverflow.com/questions/11666214/fix-session-register-session-unregister-deprecated-for-php-5-3 修正 session 變數取消函式] | ||
+ | *改 login.php | ||
+ | *#將 session_unregister(變數) 改成 unset($_SESSION[變數]) 。 | ||
+ | *#再下 session_destroy() 。 | ||
==文件== | ==文件== | ||
− | *[http://wiki.kpvs.tp.edu.tw/index.php/食材採購系統 開平wiki] | + | *[http://wiki.kpvs.tp.edu.tw/index.php/食材採購系統/etable 開平wiki]<!--帳號:身份證字號--> |
*google 雲端硬碟/與我共用的項目 | *google 雲端硬碟/與我共用的項目 | ||
*#食材系統操作手冊 | *#食材系統操作手冊 | ||
第 7 行: | 第 18 行: | ||
*#php程式說明 | *#php程式說明 | ||
*#食材系統資料庫表格欄位說明 | *#食材系統資料庫表格欄位說明 | ||
− | *[http://qq.kpvs.tp.edu.tw/ qq/0資訊中心123/食材系統暫存資料夾] | + | *[http://qq.kpvs.tp.edu.tw/ qq/0資訊中心123/食材系統暫存資料夾]<!--帳號jj9999--> |
− | *https://www.evernote.com/shard/s335/sh/a61396ba-2a25-462d-acb7-e4b05ccc4669/b329e629a1e0946c33026a89dc9edfda | + | *#上段四文件 |
+ | *#可由此查到所有的校內文件 | ||
+ | *[https://www.evernote.com/shard/s335/sh/a61396ba-2a25-462d-acb7-e4b05ccc4669/b329e629a1e0946c33026a89dc9edfda 過去的 evernote 已不重要] | ||
*#按略過 | *#按略過 | ||
+ | ===其中「程式手冊」主要是寫PDF,內容摘要如下:=== | ||
+ | *[http://www.tcpdf.org/doc/code/classTCPDF.html 英文文件] | ||
+ | ====PDF產生流程:參考 order2pdf.php==== | ||
+ | #在 models/pdf-fax.php(直印)或 models/pdf.php(橫印)產生 TCPDF 物件,並設定PDF相關資料,例如直印或橫印、紙張大小、邊界寬度、是否自動分頁、使用的字型等 | ||
+ | #把要轉換成PDF的資料,例如食材清單等,都以HTML格式並加到變數 $html 中 | ||
+ | #把變數 $html 透過 TCPDF 物件的方法 writeHTML() 暫存到記憶體中 | ||
+ | #使用 TCPDF 物件的方法 Output 執行輸出 PDF。Output() 第一個參數是輸出的 PDF 檔名,如果如要指定儲存到伺服器的哪個資料夾中,則寫成「./資料夾名稱/PDF檔名」。第二個是輸出 PDF 的方式,I:使用瀏覽器顯示,D:下載到使用者的電腦中,F:儲存到伺服器 | ||
+ | ====傳真流程:參考 fax.php==== | ||
+ | #中華電信網路傳真只接受上傳 PDF 檔,所以把要傳真的資料轉成PDF檔,儲存到伺服器上的資料夾 files_upload | ||
+ | #準備傳真所需的參數:廠商傳真號碼($receiver)、上傳的PDF檔名($msgbody)、是否立即傳真($sendtype)、預定傳真時間($sendtime,立刻傳真,就給空值) | ||
+ | #使用 function fax_sent() 執行傳真,執行完畢會回傳「傳真代碼」(一個數字),儲存到資料庫中,以供後續查詢是否傳真成功,因為傳真機大約1、2分鐘才會接收到傳真要求。fax_sent() 的定義在 models/fax-lib.php | ||
+ | #中華電信會自動重試三次,如果都沒有傳真成功,才會回傳失敗。 | ||
+ | #執行 fax-result-all.php ,抓取資料庫中的傳真代碼,以查詢並更新傳真結果。如果傳真不成功,則會回傳失敗,否則只會是『已點選連結「傳真」』 | ||
+ | #資料夾 files_upload 的 PDF 檔使用 cron 指令每天晚上刪除,避免佔用過多伺服器硬碟空間 | ||
+ | |||
+ | ==資料表== | ||
+ | ===使用者權限=== | ||
+ | *運作機制: | ||
+ | *#在 order.php 查 $_SESSION['login_user'] 去表 kpfood_users 查 uname ,再把 uname 放入 $_SESSION['uname'] | ||
+ | *#凡需權限控制的工作程式均載入 models/permission.php | ||
+ | *# models/permission.php 去查使用者 uid ,再由 uid 查群組,再由群組查 url ,比對工作程式在不在可用 url 中,如果不是就丟表 kpfood_food_permissin 的欄值當訊息,如果是就什麼都不做。 | ||
+ | *群組與 url 對照 | ||
+ | *kpfood_food_group_url:群組id與url_id對照表。 | ||
+ | *kpfood_groups:群組 | ||
+ | *kpfood_food_url:選項連結 | ||
+ | *群組與使用者對照,因只使用群組編號,所以不需要使用到表kpfood_groups | ||
+ | *#kpfood_users | ||
+ | *#kpfood_groups_users_link | ||
==網站== | ==網站== | ||
第 32 行: | 第 73 行: | ||
crontab 在位置在 /var/spool/cron 資料夾中 | crontab 在位置在 /var/spool/cron 資料夾中 | ||
− | == | + | ==工作程式說明(以 food.php 為例)== |
+ | ===基本載入=== | ||
+ | # config/etable-lib.php | ||
+ | #*載入 config/constant.php | ||
+ | #*#不載入 wiki 解譯函式 wiki.php | ||
+ | #*#缺函式 webContent :可投射wiki頁、投射資料表內容 | ||
+ | #*#多函式 load_template :可載入指定的 view | ||
+ | #*載入 etable.php | ||
+ | #* new $ET | ||
+ | #*指定 $ET 的登出錨點 | ||
+ | # models/order.php | ||
+ | #*載入 models/db-lib.php | ||
+ | #*#函式 query($sql):傳回查詢結果。 | ||
+ | #*#函式 select_query($sql):傳回查詢結果之陣列(使用 mysql_fetch_assoc )。 | ||
+ | #*常用函式製備 | ||
+ | # models/login.php:指定 $ET->loginTable | ||
+ | # 取用 $_REQUEST['workControl']['o1id'] | ||
+ | ===工作=== | ||
+ | #若 catchText 載入 models/searchSelect.php | ||
+ | #* models/searchSelect.php :由食材資料表找食材造 select 表單區塊,並 echo 出來。 | ||
+ | #若剛完成插入一筆,則檢查請購單是否已有這筆食材, | ||
+ | #*如果有以 javascript 送出 alert | ||
+ | #*如果沒有則載入 food-list.php ( 請購單 main() 後再 load_template("footer.php")) | ||
+ | #若非 catchText 也非剛完成插入一筆則:load_template("header.php") 再載入 food-list.php | ||
+ | ===本程式使用的函式=== | ||
==測試== | ==測試== |
2014年7月15日 (二) 13:13的最新修訂版本
- 分類:程式開發
- 食材採購系統
- 食材採購系統/etable
- 食材採購系統
- 分類:CC
因應 PHP 5.3 停用函式
- 參考 修正 session 變數取消函式
- 改 login.php
- 將 session_unregister(變數) 改成 unset($_SESSION[變數]) 。
- 再下 session_destroy() 。
文件
- 開平wiki
- google 雲端硬碟/與我共用的項目
- 食材系統操作手冊
- 程式手冊
- php程式說明
- 食材系統資料庫表格欄位說明
- qq/0資訊中心123/食材系統暫存資料夾
- 上段四文件
- 可由此查到所有的校內文件
- 過去的 evernote 已不重要
- 按略過
其中「程式手冊」主要是寫PDF,內容摘要如下:
PDF產生流程:參考 order2pdf.php
- 在 models/pdf-fax.php(直印)或 models/pdf.php(橫印)產生 TCPDF 物件,並設定PDF相關資料,例如直印或橫印、紙張大小、邊界寬度、是否自動分頁、使用的字型等
- 把要轉換成PDF的資料,例如食材清單等,都以HTML格式並加到變數 $html 中
- 把變數 $html 透過 TCPDF 物件的方法 writeHTML() 暫存到記憶體中
- 使用 TCPDF 物件的方法 Output 執行輸出 PDF。Output() 第一個參數是輸出的 PDF 檔名,如果如要指定儲存到伺服器的哪個資料夾中,則寫成「./資料夾名稱/PDF檔名」。第二個是輸出 PDF 的方式,I:使用瀏覽器顯示,D:下載到使用者的電腦中,F:儲存到伺服器
傳真流程:參考 fax.php
- 中華電信網路傳真只接受上傳 PDF 檔,所以把要傳真的資料轉成PDF檔,儲存到伺服器上的資料夾 files_upload
- 準備傳真所需的參數:廠商傳真號碼($receiver)、上傳的PDF檔名($msgbody)、是否立即傳真($sendtype)、預定傳真時間($sendtime,立刻傳真,就給空值)
- 使用 function fax_sent() 執行傳真,執行完畢會回傳「傳真代碼」(一個數字),儲存到資料庫中,以供後續查詢是否傳真成功,因為傳真機大約1、2分鐘才會接收到傳真要求。fax_sent() 的定義在 models/fax-lib.php
- 中華電信會自動重試三次,如果都沒有傳真成功,才會回傳失敗。
- 執行 fax-result-all.php ,抓取資料庫中的傳真代碼,以查詢並更新傳真結果。如果傳真不成功,則會回傳失敗,否則只會是『已點選連結「傳真」』
- 資料夾 files_upload 的 PDF 檔使用 cron 指令每天晚上刪除,避免佔用過多伺服器硬碟空間
資料表
使用者權限
- 運作機制:
- 在 order.php 查 $_SESSION['login_user'] 去表 kpfood_users 查 uname ,再把 uname 放入 $_SESSION['uname']
- 凡需權限控制的工作程式均載入 models/permission.php
- models/permission.php 去查使用者 uid ,再由 uid 查群組,再由群組查 url ,比對工作程式在不在可用 url 中,如果不是就丟表 kpfood_food_permissin 的欄值當訊息,如果是就什麼都不做。
- 群組與 url 對照
- kpfood_food_group_url:群組id與url_id對照表。
- kpfood_groups:群組
- kpfood_food_url:選項連結
- 群組與使用者對照,因只使用群組編號,所以不需要使用到表kpfood_groups
- kpfood_users
- kpfood_groups_users_link
網站
- 測試與正式網站是同一台機器,只是不同資料夾
- 正式網站
- 內網:10.80.8.18/port:22/SFTP/jj
- 外網:kpftest.kpvs.tp.edu.tw/port:13587/SFTP/需要kvm-fz.ppk/jj
- 正式用 et 資料夾,給 kpfood 用。kpfood.kpvs.tp.edu.tw
- 新增 ett 資料夾,給 kpf_test 用。kpftest.kpvs.tp.edu.tw
- 改 /config/constant.php,改 et 類別位置。
- 新增 ett 軟連結指向 ett 。
- 資料庫 http://kpfpma.kpvs.tp.edu.tw/
架構
/config
site的常數 工作程式頭
/views
/template header.php 等於 theme.php
crontab 在位置在 /var/spool/cron 資料夾中
工作程式說明(以 food.php 為例)
基本載入
- config/etable-lib.php
- 載入 config/constant.php
- 不載入 wiki 解譯函式 wiki.php
- 缺函式 webContent :可投射wiki頁、投射資料表內容
- 多函式 load_template :可載入指定的 view
- 載入 etable.php
- new $ET
- 指定 $ET 的登出錨點
- 載入 config/constant.php
- models/order.php
- 載入 models/db-lib.php
- 函式 query($sql):傳回查詢結果。
- 函式 select_query($sql):傳回查詢結果之陣列(使用 mysql_fetch_assoc )。
- 常用函式製備
- 載入 models/db-lib.php
- models/login.php:指定 $ET->loginTable
- 取用 $_REQUEST['workControl']['o1id']
工作
- 若 catchText 載入 models/searchSelect.php
- models/searchSelect.php :由食材資料表找食材造 select 表單區塊,並 echo 出來。
- 若剛完成插入一筆,則檢查請購單是否已有這筆食材,
- 如果有以 javascript 送出 alert
- 如果沒有則載入 food-list.php ( 請購單 main() 後再 load_template("footer.php"))
- 若非 catchText 也非剛完成插入一筆則:load_template("header.php") 再載入 food-list.php
本程式使用的函式
測試
排序 bug
- http://kpftest.kpvs.tp.edu.tw/quote-approval-each.php?workControl[vid]=1
- 帳密
- 下 SQL:UPDATE `kpfood_food_quote_online` SET `status` =2 WHERE `vid` =1
- 排序、和 batch 衝突。改 etable.php 增加 batch 的執行條件須 execBatch 非 0 ,即可避開衝突。
請購單插入食材檢查
- food.php 請購
- 叫 searchSelect.php 查表 kpfood_food_food 產生 select 及其諸 option
- 回到 etable.php 的主程式其中 $action=='ins_ed' 或 $action=='inss' ,並且傳回 workControl[請購單編碼]
- 再來要想怎麼檢查表 kpfood_food_order11 如果食材重複跳警告。
- 也可在更早 option 出現重複食材就跳警告。
請購單輸入食材不得重覆
改 login.php
在 javascript 中 function postData(dataSource,para,divID,a,waitMoment){…} ahr.onreadystatechange=function(){if(ahr.readyState==4 && ahr.status==200){ if(ahr.responseText.substr(0,5)=='alert'){eval(ahr.responseText.trim());} else{document.getElementById(divID).innerHTML=ahr.responseText;onAjax(a);} }};
food.php
其他
test.php
- 測試 batch 的 form 與額外的 form 巢狀時,瀏覽器不反應。
- 最終導致額外的搬位置。
登出時跳到指定的路徑
- 在 login.php 中新增屬性 logoutTo 。