開平食材採購系統

出自福留子孫
在2014年7月15日 (二) 13:13由丁志仁對話 | 貢獻所做的修訂版本

(差異) ←上個修訂 | 最新修訂 (差異) | 下一修訂→ (差異)
跳轉到: 導覽搜尋

開平 wiki

  • 分類:程式開發
    1. 食材採購系統
      • 食材採購系統/etable
  • 分類:CC

因應 PHP 5.3 停用函式

文件

其中「程式手冊」主要是寫PDF,內容摘要如下:

PDF產生流程:參考 order2pdf.php

  1. 在 models/pdf-fax.php(直印)或 models/pdf.php(橫印)產生 TCPDF 物件,並設定PDF相關資料,例如直印或橫印、紙張大小、邊界寬度、是否自動分頁、使用的字型等
  2. 把要轉換成PDF的資料,例如食材清單等,都以HTML格式並加到變數 $html 中
  3. 把變數 $html 透過 TCPDF 物件的方法 writeHTML() 暫存到記憶體中
  4. 使用 TCPDF 物件的方法 Output 執行輸出 PDF。Output() 第一個參數是輸出的 PDF 檔名,如果如要指定儲存到伺服器的哪個資料夾中,則寫成「./資料夾名稱/PDF檔名」。第二個是輸出 PDF 的方式,I:使用瀏覽器顯示,D:下載到使用者的電腦中,F:儲存到伺服器

傳真流程:參考 fax.php

  1. 中華電信網路傳真只接受上傳 PDF 檔,所以把要傳真的資料轉成PDF檔,儲存到伺服器上的資料夾 files_upload
  2. 準備傳真所需的參數:廠商傳真號碼($receiver)、上傳的PDF檔名($msgbody)、是否立即傳真($sendtype)、預定傳真時間($sendtime,立刻傳真,就給空值)
  3. 使用 function fax_sent() 執行傳真,執行完畢會回傳「傳真代碼」(一個數字),儲存到資料庫中,以供後續查詢是否傳真成功,因為傳真機大約1、2分鐘才會接收到傳真要求。fax_sent() 的定義在 models/fax-lib.php
  4. 中華電信會自動重試三次,如果都沒有傳真成功,才會回傳失敗。
  5. 執行 fax-result-all.php ,抓取資料庫中的傳真代碼,以查詢並更新傳真結果。如果傳真不成功,則會回傳失敗,否則只會是『已點選連結「傳真」』
  6. 資料夾 files_upload 的 PDF 檔使用 cron 指令每天晚上刪除,避免佔用過多伺服器硬碟空間

資料表

使用者權限

  • 運作機制:
    1. 在 order.php 查 $_SESSION['login_user'] 去表 kpfood_users 查 uname ,再把 uname 放入 $_SESSION['uname']
    2. 凡需權限控制的工作程式均載入 models/permission.php
    3. 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
    1. kpfood_users
    2. kpfood_groups_users_link

網站

  • 測試與正式網站是同一台機器,只是不同資料夾
  • 正式網站
    1. 內網:10.80.8.18/port:22/SFTP/jj
    2. 外網: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
    1. 改 /config/constant.php,改 et 類別位置。
    2. 新增 ett 軟連結指向 ett 。
  • 資料庫 http://kpfpma.kpvs.tp.edu.tw/

架構

/config

 site的常數
 工作程式頭

/views

 /template
   header.php 等於 theme.php


crontab 在位置在 /var/spool/cron 資料夾中

工作程式說明(以 food.php 為例)

基本載入

  1. config/etable-lib.php
    • 載入 config/constant.php
      1. 不載入 wiki 解譯函式 wiki.php
      2. 缺函式 webContent :可投射wiki頁、投射資料表內容
      3. 多函式 load_template :可載入指定的 view
    • 載入 etable.php
    • new $ET
    • 指定 $ET 的登出錨點
  2. models/order.php
    • 載入 models/db-lib.php
      1. 函式 query($sql):傳回查詢結果。
      2. 函式 select_query($sql):傳回查詢結果之陣列(使用 mysql_fetch_assoc )。
    • 常用函式製備
  3. models/login.php:指定 $ET->loginTable
  4. 取用 $_REQUEST['workControl']['o1id']

工作

  1. 若 catchText 載入 models/searchSelect.php
    • models/searchSelect.php :由食材資料表找食材造 select 表單區塊,並 echo 出來。
  2. 若剛完成插入一筆,則檢查請購單是否已有這筆食材,
    • 如果有以 javascript 送出 alert
    • 如果沒有則載入 food-list.php ( 請購單 main() 後再 load_template("footer.php"))
  3. 若非 catchText 也非剛完成插入一筆則:load_template("header.php") 再載入 food-list.php

本程式使用的函式

測試

排序 bug

請購單插入食材檢查

  • food.php 請購
    1. 叫 searchSelect.php 查表 kpfood_food_food 產生 select 及其諸 option
    2. 回到 etable.php 的主程式其中 $action=='ins_ed' 或 $action=='inss' ,並且傳回 workControl[請購單編碼]
    3. 再來要想怎麼檢查表 kpfood_food_order11 如果食材重複跳警告。
    4. 也可在更早 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 。