* @version 2012-4-17 14:33 * @package print */ class ome_ctl_admin_print_otmpl extends desktop_controller { function __construct(&$app) { parent::__construct($app); $this->_request = kernel::single('base_component_request'); } /** * _views * @return mixed 返回值 */ public function _views(){ $views = array( 0=>array('label'=>$this->app->_('全部'),'optional'=>false,'filter'=>'','addon'=>''), 1=>array('label'=>$this->app->_('备货单模板'),'optional'=>false,'filter'=>array('type'=>'stock'),'addon'=>''), 2=>array('label'=>$this->app->_('发货单模板'),'optional'=>false,'filter'=>array('type'=>'delivery'),'addon'=>''), 3=>array('label'=>$this->app->_('采购单模板'),'optional'=>false,'filter'=>array('type'=>'purchase'),'addon'=>''), 4=>array('label'=>$this->app->_('采购入库单模板'),'optional'=>false,'filter'=>array('type'=>'pureo'),'addon'=>''), 5=>array('label'=>$this->app->_('退货单模板'),'optional'=>false,'filter'=>array('type'=>'purreturn'),'addon'=>''), 6=>array('label'=>$this->app->_('联合打印模板'),'optional'=>false,'filter'=>array('type'=>'merge','addon'=>'')), 7=>array('label'=>$this->app->_('调拔单打印模板'),'optional'=>false,'filter'=>array('type'=>'appropriation','addon'=>'')), 8=>array('label'=>$this->app->_('JIT出库单模板'),'optional'=>false,'filter'=>array('type'=>'vopstockout','addon'=>'')), ); foreach ($views as $key=>&$value) { $value['href'] = 'index.php?app=ome&ctl=admin_print_otmpl&act=index&view='.$key; $value['addon'] = $this->app->model('print_otmpl')->count($value['filter']); } return $views; } /** * 入口 * * @return void * @author * */ public function index() { $this->finder('ome_mdl_print_otmpl',array( 'title'=>'打印模板', 'actions' => array( array('label'=>'添加备货单模板','href'=>'index.php?app=ome&ctl=admin_print_otmpl&act=show&p[0]=0&p[1]=stock','target'=>'_blank'), array('label'=>'添加发货单模板','href'=>'index.php?app=ome&ctl=admin_print_otmpl&act=show&p[0]=0&p[1]=delivery','target'=>'_blank'), ), 'use_buildin_recycle'=>true, 'use_buildin_filter'=>true, )); } /** * 显示添加/编辑页面 * * @return void * @author * */ public function show($id=NULL,$type='delivery') { $id = (int)$id; $oTmplModel = $this->app->model('print_otmpl'); $this->title = empty($id) ? app::get('ome')->_('添加') : app::get('ome')->_('编辑'); $this->title .= $oTmplModel->otmpl[$type]['name']; $this->pagedata['title'] = $this->title; $this->pagedata['memo_header'] = $oTmplModel->otmpl[$type]['memo_header']; #获取类型 #获取打印版本 $this->pagedata['type'] = $type; $deliCfgLib = kernel::single('wms_delivery_cfg'); $print_version = $deliCfgLib->getprintversion(); $this->pagedata['print_version'] = $print_version; unset( $print_version ); $printTmpl = array('type'=>$type); if ($id) { $row = $oTmplModel->select()->columns()->where('id=?',$id)->instance()->fetch_row(); $printTmpl = array_merge($printTmpl,$row); $printTmpl['content'] = $oTmplModel->bodyFilter($printTmpl['content']); } $this->pagedata['printParams'] = $this->getPrintParams($type); $this->pagedata['printTmpl'] = $printTmpl; $this->singlepage('admin/print/show.html'); } /** * 保存打印模板 * * @return void * @author * */ public function save() { $params = $this->_request->get_post(); $params['id'] = (int)$params['id']; $update = $params['id'] ? true : false; $this->begin("index.php?app=ome&ctl=admin_print_otmpl&act=show&p[0]={$params['id']}&p[1]={$params['type']}"); if (!$params['title']) { $this->end(false,app::get('ome')->_('请完善标题!')); } if (!$params['content']) { $this->end(false,app::get('ome')->_('请完善模板样式!')); } if ($params['aloneBtn']=='true' && !$params['btnName']) { $this->end(false,app::get('ome')->_('请完善独立按钮名称')); } $xss = "[\\'\\\"\\;\\*\\<\\>].*\\bon[a-zA-Z]{3,15}[\\s\\r\\n\\v\\f]*\\=|\\b(?:expression)\\(|\\end(false,'您的模板存在安全隐患,请及时修改'); } // 防PHP注入 $ldq = preg_quote('<{','!'); $rdq = preg_quote('}>','!'); $file_contents = preg_replace("!{$ldq}\*.*?\*{$rdq}!seu",'',$params['content']); $file_contents = preg_replace("!(\<\?|\?\>)!",'',$file_contents); foreach(preg_split('!'.$ldq.'(\s*(?:\/|)[a-z][a-z\_0-9]*|)(.*?)'.$rdq.'!isu',$file_contents,-1,PREG_SPLIT_DELIM_CAPTURE) as $value){ if (!$value) continue; if (preg_match("/(?<=;)\w+(?=\s*\()/", $value, $m) && $m[0] && function_exists($m[0])) { $this->end(false,'您的模板存在安全隐患,请及时修改'); } foreach (explode(';', $value) as $v) { if (kernel::single('ome_func')->judgeFun($v)) { $this->end(false,'您的模板存在安全隐患,请及时修改'); } } } // 防PHP注入 $oTmplModel = $this->app->model('print_otmpl'); $types = array_keys($oTmplModel->otmpl); if (!in_array($params['type'], $types)) { $this->end(false,app::get('ome')->_('请选择打印模板类型')); } if ($params['is_default']=='true') { $filter = array('is_default' => 'true','type' => $params['type'] ); $data = array('is_default' => 'false'); $oTmplModel->update($data,$filter); $params['open'] = 'true'; } if ($params['id'] && ($params['is_default']=='false' || $params['open']=='false') ) { $row = $oTmplModel->select()->columns('id') ->where('id!=?',$params['id']) ->where('is_default=?','true') ->where('type=?',$params['type']) ->where('open=?','true') ->instance()->fetch_one(); if (!$row) { $this->end(false,app::get('ome')->_('先开启其他同类项后,再取消默认!')); } } if ($params['aloneBtn']=='false') { $params['btnName'] = ''; } $params['last_modified'] = time(); //$params['content'] = htmlspecialchars_decode($params['content']); $params['content'] = $oTmplModel->bodyFilter($params['content'],true,$params['type']); $result = $oTmplModel->save($params); if ($update==false) { $path = 'admin/print/otmpl/'.$params['id']; $oTmplModel->update(array('path'=>$path),array('id'=>$params['id'])); } $this->end($result); } /** * 获取默认打印模样(页面文件) * * @return json * @param String $type 打印类型 * @author * */ public function getDefaultTmpl($type) { $oTmplModel = $this->app->model('print_otmpl'); if (!in_array($type, array_keys($oTmplModel->otmpl))) { $this->splash('error',NULL,$this->app->_('不存在该类型!')); } $content = $oTmplModel->getDefaultTmplByHtml($type); $defaultTmpl = array('title'=>$oTmplModel->otmpl[$type]['name'],'content'=>$content); $this->splash('success',NULL,$this->app->_('获取成功'),'redirect',$defaultTmpl); } /** * undocumented function * * @return void * @author * */ private function getPrintParams($type='delivery') { $params['delivery'][] = array( 'name' => '发货明细', 'param' => ' <{foreach from=$items item=item}>
<{foreach from=$item.delivery_items item=i}> <{/foreach}>
<{/foreach}> ', ); $params['delivery'][] = array( 'name' => '订单附言', 'param' => ' <{foreach from=$items item=item}>
<{foreach name="m2" from=$item._mark key=key item=item2}>
<{$key}>: <{foreach from=$item2 item=it}>
    <{$it.op_content}> <{$it.op_time}> by <{$it.op_name}>
<{/foreach}>
<{/foreach}>
<{/foreach}> ', ); $params['delivery'][] = array( 'name' => '头部内容', 'param' => ' <{capture name="header"}>
# your code
<{/capture}> ', ); $params['delivery'][] = array( 'name' => '错误提示', 'param' => ' <{ if $errIds }>
<{ foreach from=$errIds item=id }>
<{$errBns[$id]}>:<{$errInfo[$id]}>
<{ /foreach }>
<{ /if }> ', ); $params['delivery'][] = array( 'name' => '发货单信息', 'param' => ' <{foreach from=$items item=item}> <{/foreach}> ', ); $params['delivery'][] = array( 'name' => '订单备注', 'param' => ' <{foreach from=$items item=item}>
<{foreach name="m1" from=$item._mark_text key=key item=item1}>
<{$key}>:
<{foreach from=$item1 item=it}>
    <{$it.op_content}> <{$it.op_time}> by <{$it.op_name}>
<{/foreach}>
<{/foreach}>
<{/foreach}> ', ); $params['delivery'][] = array( 'name' => '发票信息', 'param' => ' <{foreach from=$item._tax_info item=item3}>
<{$item3.order_bn}>:
    发票抬头:<{$item3.tax_title}>  发票号:<{$item3.tax_no}> <{/foreach}> ', ); $params['delivery'][] = array( 'name' => '商品重量', 'param' => '<{$i.product_weight}>', ); $params['delivery'][] = array( 'name' => '商品单位', 'param' => '<{$i.unit}>', ); ##发货单销售价老模板 ##发货单销售价新模板 $params['stock'][0] = array( 'name' => '头部内容', 'param' => ' <{capture name="header"}> # your code
<{/capture}> ', ); $params['stock'][1] = array( 'name' => '错误提示', 'param' => ' <{if $errIds }> <{ foreach from=$errIds item=id }> <{$errBns[$id]}>:<{$errInfo[$id]}> <{ /foreach }> <{/if}> ', ); $params['stock'][2] = array( 'name' => '备货明细', 'param' => ' <{foreach from=$rows item=item name=ff}> <{/foreach}> ', ); $params['stock'][3] = array( 'name' => '订单附言', 'param' => ' <{foreach from=$memo[0] item=items}>
<{$items.op_content|escape:"HTML"}>
<{/foreach}> ', ); $params['stock'][4] = array( 'name' => '数量总计', 'param' => '<{$delivery_total_nums}> ', ); $params['stock'][5] = array( 'name' => '出库金额总计', 'param' => '<{$delivery_total_price}>', ); $params['stock'][6] = array( 'name' => '备货单金额总计', 'param' => '<{$picking_list_price}>', ); $params['stock'][7] = array( 'name' => '优惠金额总计', 'param' => '<{$delivery_discount_price}>', ); $params['stock'][8] = array( 'name' => '批次号', 'param' => '<{$ident}>', ); $params['stock'][9] = array( 'name' => '商品重量', 'param' => '<{$item.product_weight}>', ); $params['stock'][10] = array( 'name' => '商品单位', 'param' => '<{$item.unit}>', ); $params['purchase'][] = array( 'name' => '打印日期', 'param' => ' <{$time|date_format:"%Y-%m-%d %H:%I:%S"}>', ); $params['purchase'][] = array( 'name' => '采购单号', 'param' => '<{$po.po_bn}>', ); $params['purchase'][] = array( 'name' => '采购方式', 'param' => '<{if $po.po_type=="cash"}>现购<{else}>赊购<{/if}>', ); $params['purchase'][] = array( 'name' => '供应商', 'param' => '<{$po.supplier}>', ); $params['purchase'][] = array( 'name' => '采购员', 'param' => '<{$po.operator}>', ); $params['purchase'][] = array( 'name' => '采购单创建人', 'param' => '<{$po.op_name}>', ); $params['purchase'][] = array( 'name' => '审核人', 'param' => '<{$po.check_operator}>', ); $params['purchase'][] = array( 'name' => '规格', 'param' => '<{$i.spec_info}>', ); $params['purchase'][] = array( 'name' => '指定仓库', 'param' => '<{$po.branch}>', ); $params['purchase'][] = array( 'name' => '采购日期', 'param' => '<{$po.purchase_time|date_format:"%Y-%m-%d %H:%I:%S"}>', ); $params['purchase'][] = array( 'name' => '到货日期', 'param' => '<{$po.arrive_time|date_format:"%Y-%m-%d"}>', ); $params['purchase'][] = array( 'name' => '金额总计', 'param' => '<{$po.amount}>', ); $params['purchase'][] = array( 'name' => '预付款', 'param' => '<{$po.deposit}>', ); $params['purchase'][] = array( 'name' => '备注', 'param' => ' <{foreach from=$po.memo item=items}>
<{$items.op_content|escape:"HTML"}> <{$items.op_time}> by <{$items.op_name}>
<{/foreach}> ', ); $params['purchase'][] = array( 'name' => '商品信息', 'param' => ' <{foreach from=$po.po_items item=i}> <{/foreach}> ', ); $params['pureo'][] = array( 'name' => '金额总计', 'param' => '<{$eo.detail.product_cost}>', ); $params['pureo'][] = array( 'name' => '经办人', 'param' => '<{$eo.detail.oper}>', ); $params['pureo'][] = array( 'name' => '到货仓库', 'param' => '<{$eo.branch_name}>', ); $params['pureo'][] = array( 'name' => '供应商', 'param' => '<{$eo.supplier_name}>', ); $params['pureo'][] = array( 'name' => '入库日期', 'param' => '<{$eo.detail.create_time|date_format:"%Y-%m-%d"}>', ); $params['pureo'][] = array( 'name' => '入库单编号', 'param' => '<{$eo.detail.iso_bn}>', ); $params['pureo'][] = array( 'name' => '入库单备注', 'param' => '<{$eo.detail.memo}>', ); $params['pureo'][] = array( 'name' => '商品规格', 'param' => '<{$items.spec_info}>', ); $params['pureo'][] = array( 'name' => '商品明细', 'param' => ' <{foreach from=$eo.items item=items}> <{/foreach}> ', ); $params['pureo'][] = array( 'name' => '单据类型', 'param' => '<{if(!isset($process_name))}><{assign var=process_name value="入库"}><{/if}>', ); $params['purreturn'][] = array( 'name' => '退货底单', 'param' => '<{$po.logi_no}>', ); $params['purreturn'][] = array( 'name' => '打印日期', 'param' => ' <{$time|date_format:"%Y-%m-%d %H:%I:%S"}>', ); $params['purreturn'][] = array( 'name' => '退货单号', 'param' => '<{$po.rp_bn}>', ); $params['purreturn'][] = array( 'name' => '是否特别退货', 'param' => '<{if $po.emergency=="false"}>否<{else}>是<{/if}>', ); $params['purreturn'][] = array( 'name' => '供应商', 'param' => '<{$po.supplier}>', ); $params['purreturn'][] = array( 'name' => '经办人', 'param' => '<{$po.operator}>', ); $params['purreturn'][] = array( 'name' => '退货仓库', 'param' => '<{$po.branch}>', ); $params['purreturn'][] = array( 'name' => '退货日期', 'param' => '<{$po.returned_time|date_format:"%Y-%m-%d %H:%I:%S"}>', ); $params['purreturn'][] = array( 'name' => '物流费用', 'param' => '<{$po.delivery_cost}>', ); $params['purreturn'][] = array( 'name' => '金额总计', 'param' => '<{$po.amount}>', ); $params['purreturn'][] = array( 'name' => '备注', 'param' => ' <{foreach from=$po.memo item=items}>
<{$items.op_content|escape:"HTML"}> <{$items.op_time}> by <{$items.op_name}>
<{/foreach}> ', ); $params['purreturn'][] = array( 'name' => '商品明细', 'param' => ' <{foreach from=$po.po_items item=i}> <{/foreach}> ', ); $params['merge'][] = array( 'name' => '头部内容', 'param' => ' <{capture name="header"}> # your code
<{/capture}> ', ); $params['merge'][] = array( 'name' => '错误提示', 'param' => ' <{ if $errIds }>
<{ foreach from=$errIds item=id }>
<{$allItems[$id]["delivery_bn"]}>   :   <{$errInfo[$id]}>

<{ /foreach }>
<{ /if }> ', ); $params['merge'][] = array( 'name' => '备货单明细', 'param' => ' <{foreach from=$items item=group}>
<{foreach from=$group.stock item=item name=ff}>
<{/foreach}>
<{/foreach}>
', ); $params['merge'][] = array( 'name' => '商品重量', 'param' => '<{product_weight}>', ); $params['merge'][] = array( 'name' => '商品单位', 'param' => '<{unit}>', ); $params['merge'][] = array( 'name' => '备货单信息', 'param' => ' <{foreach from=$items item=group}>
<{foreach from=$group.stock item=item name=ff}>
<{/foreach}>
<{/foreach}>
', ); $params['merge'][] = array( 'name' => '发货明细', 'param' => ' <{foreach from=$items item=group}> <{foreach from=$group.delivery item=item}>
<{foreach from=$item.delivery_items item=i}>
<{/foreach}>
<{/foreach}>
<{/foreach}>
', ); $params['merge'][] = array( 'name' => '发货单信息', 'param' => ' <{foreach from=$items item=group}> <{foreach from=$group.delivery item=item}> <{/foreach}> <{/foreach}> ', ); $params['merge'][] = array( 'name' => '订单备注', 'param' => ' <{foreach from=$items item=group}>
<{foreach from=$group.delivery item=item}>
<{foreach name="m1" from=$item._mark_text key=key item=item1}>
<{$key}>: <{foreach from=$item1 item=it}>
    <{$it.op_content}> <{$it.op_time}> by <{$it.op_name}> <{/foreach}>
<{/foreach}>
<{/foreach}>
<{/foreach}>
', ); $params['merge'][] = array( 'name' => '订单附言', 'param' => ' <{foreach from=$items item=group}>
<{foreach from=$group.delivery item=item}>
<{foreach name="m1" from=$item._mark key=key item=item1}>
<{$key}>: <{foreach from=$item1 item=it}>
    <{$it.op_content}> <{$it.op_time}> by <{$it.op_name}> <{/foreach}>
<{/foreach}>
<{/foreach}>
<{/foreach}>
', ); $params['merge'][] = array( 'name' => '发票信息', 'param' => ' <{foreach from=$item._tax_info item=item3}>
<{$item3.order_bn}>:
    发票抬头:<{$item3.tax_title}>  发票号:<{$item3.tax_no}> <{/foreach}> ', ); $params['appropriation'][] = array( 'name' => '货位', 'param' => '<{$item.store_position}>', ); //JIT出库单打印模板 $params['vopstockout'][] = array( 'name' => '品牌', 'param' => '<{$item.shop_name}>', ); $params['vopstockout'][] = array( 'name' => '送货仓库', 'param' => '<{$item.branch_name}>', ); $params['vopstockout'][] = array( 'name' => '入库单号', 'param' => '<{$item.storage_no}>', ); $params['vopstockout'][] = array( 'name' => '箱号', 'param' => '<{$item.box_no}>', ); $params['vopstockout'][] = array( 'name' => '要求到货时间', 'param' => '<{$item.arrival_time}>', ); $params['vopstockout'][] = array( 'name' => '承运商', 'param' => '<{$item.carrier_code}>', ); $params['vopstockout'][] = array( 'name' => '运单号', 'param' => '<{$item.delivery_no}>', ); $params['vopstockout'][] = array( 'name' => '入库单号(条形码)', 'param' => '<{$item.storage_no|barcode}>', ); $params['vopstockout'][] = array( 'name' => '箱号(条形码)', 'param' => '<{$item.box_no|barcode}>', ); $params['vopstockout'][] = array( 'name' => '要求到货时间(条形码)', 'param' => '<{$item.arrival_time|barcode}>', ); $params['vopstockout'][] = array( 'name' => '运单号(条形码)', 'param' => '<{$item.delivery_no|barcode}>', ); return $type=='all' ? $params : $params[$type]; } /** * @description * @access public * @param void * @return void */ public function getdefault_sale_print($type) { $oTmplModel = $this->app->model('print_otmpl'); $content = $oTmplModel->getDefaultTmplByHtml($type); $defaultTmpl = array('title'=>$oTmplModel->otmpl[$type]['name'],'content'=>$content); $this->splash('success',NULL,$this->app->_('获取成功'),'redirect',$defaultTmpl); } }