1、创建物流库存表。sql语句:
CREATE TABLE IF NOT EXISTS `emws_materials` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
`name` varchar(60) NOT NULL,
`modulus` varchar(60) NOT NULL,
`stock_number` smallint(5) unsigned NOT NULL default '0',
`stock_in` smallint(5) unsigned NOT NULL default '0',
`stock_out` smallint(5) unsigned NOT NULL default '0',
`safe_day` smallint(5) unsigned NOT NULL default '0',
`intent_day` smallint(5) unsigned NOT NULL default '0',
`is_buy` tinyint(1) unsigned NOT NULL default '1',
`buy_url` varchar(60) NOT NULL,
`price` decimal(10,2) NOT NULL,
`weight` smallint(5) unsigned NOT NULL default '0',
`img` varchar(60) NOT NULL,
`desc_info` varchar(60) NOT NULL,
`remark` varchar(60) NOT NULL,
`admin_id` smallint(5) unsigned NOT NULL,
`update_time` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
2、php程序,materials.php:
1 php 2 define('IN_ECS', true ); 3 require( dirname( __FILE__) . '/includes/init.php' ); 4 include_once(ROOT_PATH . 'includes/cls_image.php' ); 5 $image= newcls_image( $_CFG['bgcolor' ]); 6 $exc= newexchange( $ecs->table("materials"), $db, 'id', 'name' ); 7 $_REQUEST['act']=! empty( $_REQUEST['act']) ? $_REQUEST['act']:'list' ; 8admin_priv('stock_alert'); // 权限:库存数量修改 9 if( $_REQUEST['act'] == 'list' ) 10 { 11 $stock_list= material_list(); 12 $smarty->assign('ur_here', '物料库存列表' ); 13 $smarty->assign('stock_list', $stock_list['stock_list' ]); 14 $smarty->assign('filter', $stock_list['filter' ]); 15 $smarty->assign('record_count', $stock_list['record_count' ]); 16 $smarty->assign('page_count', $stock_list['page_count' ]); 17 18 $smarty->assign('shelf_list', $shelf_list ); 19 $smarty->assign('full_page', 1 ); 20 $smarty->assign('action_link', array('href' => 'goods_stock.php?act=list', 'text' => '商品库存列表' )); 21 $smarty->assign('action_link2', array('href' => 'materials.php?act=export', 'text' => '导出采购单' )); 22 $smarty->assign('action_link3', array('href' => 'materials.php?act=add', 'text' => '添加物料' )); 23 24 $smarty->display('material_list.htm' ); 25 } 26 elseif( $_REQUEST['act'] == 'add' ) 27 { 28 $smarty->assign('ur_here', "添加物料" ); 29 $smarty->assign('action_link', array('href' => 'materials.php?act=list', 'text' => '返回物料库存列表' )); 30 $smarty->assign('form_action', "insert" ); 31 32 assign_query_info(); 33 $smarty->display('material_info.htm' ); 34 } 35 elseif( $_REQUEST['act'] == 'insert' ) 36 { 37 $material['is_buy'] = isset( $_REQUEST['is_buy']) ? intval( $_REQUEST['is_buy']) : 1 ; 38 $material['name'] = isset( $_REQUEST['name']) ? trim( $_REQUEST['name']) : '' ; 39 $material['modulus'] = isset( $_REQUEST['modulus']) ? trim( $_REQUEST['modulus']) : '' ; 40 $material['safe_day'] = isset( $_REQUEST['safe_day']) ? intval( $_REQUEST['safe_day']) : 0 ; 41 $material['intent_day']= isset( $_REQUEST['intent_day']) ? intval( $_REQUEST['intent_day']) : 0 ; 42 $material['price'] = isset( $_REQUEST['price']) ? floatval( $_REQUEST['price']) : '0.00' ; 43 $material['weight'] = isset( $_REQUEST['weight']) ? intval( $_REQUEST['weight']) : 0 ; 44 $material['desc_info'] = isset( $_REQUEST['desc_info']) ? trim( $_REQUEST['desc_info']) : '' ; 45 $material['remark'] = isset( $_REQUEST['remark']) ? trim( $_REQUEST['remark']) : '' ; 46 $material['update_time']= gmtime(); 47 $material['admin_id'] = $_SESSION['admin_id' ]; 48 49 if( empty( $material['name']) || empty( $material['modulus']) || empty( $material['safe_day']) || empty( $material['intent_day' ])) 50 { 51sys_msg('名称、系数、安全天数、目标天数,不能为空或者格式不正确', 1 ); 52 } 53 54 $is_only= $exc->is_only('name', $material['name' ]); 55 if(! $is_only ) 56 { 57sys_msg( $material['name'].',已存在', 1 ); 58 } 59 60 /* 处理图片 */ 61 $material['img'] = basename( $image->upload_image( $_FILES['img'],'material' )); 62 /* 处理URL */ 63 $material['buy_url'] = sanitize_url( $_POST['buy_url' ]); 64 /* 插入数据 */ 65 $db->autoExecute( $ecs->table('materials'), $material, 'INSERT', '', 'SILENT' ); 66 67 $link[0]['text'] = '继续添加' ; 68 $link[0]['href'] = 'materials.php?act=add' ; 69 $link[1]['text'] = '返回列表' ; 70 $link[1]['href'] = 'materials.php?act=list' ; 71sys_msg('添加成功', 0, $link ); 72 } 73 elseif( $_REQUEST['act'] == 'updata' ) 74 { 75 $id= isset( $_REQUEST['id']) ? intval( $_REQUEST['id']) : 0 ; 76 $material['is_buy'] = isset( $_REQUEST['is_buy']) ? intval( $_REQUEST['is_buy']) : 1 ; 77 $material['name'] = isset( $_REQUEST['name']) ? trim( $_REQUEST['name']) : '' ; 78 $material['modulus'] = isset( $_REQUEST['modulus']) ? trim( $_REQUEST['modulus']) : '' ; 79 $material['safe_day'] = isset( $_REQUEST['safe_day']) ? intval( $_REQUEST['safe_day']) : 0 ; 80 $material['intent_day']= isset( $_REQUEST['intent_day']) ? intval( $_REQUEST['intent_day']) : 0 ; 81 $material['price'] = isset( $_REQUEST['price']) ? floatval( $_REQUEST['price']) : '0.00' ; 82 $material['weight'] = isset( $_REQUEST['weight']) ? intval( $_REQUEST['weight']) : 0 ; 83 $material['desc_info'] = isset( $_REQUEST['desc_info']) ? trim( $_REQUEST['desc_info']) : '' ; 84 $material['remark'] = isset( $_REQUEST['remark']) ? trim( $_REQUEST['remark']) : '' ; 85 $material['update_time']= gmtime(); 86 $material['admin_id'] = $_SESSION['admin_id' ]; 87 88 if( empty( $id )) 89 { 90sys_msg('ID不能为空', 1 ); 91 } 92 93 if( empty( $material['name']) || empty( $material['modulus']) || empty( $material['safe_day']) || empty( $material['intent_day' ])) 94 { 95sys_msg('名称、系数、安全天数、目标天数,不能为空或者格式不正确', 1 ); 96 } 97 98 /* 处理图片 */ 99 if(! empty( $_FILES['img']['name' ])) 100 { 101 $material['img'] = basename( $image->upload_image( $_FILES['img'],'material' )); 102 } 103 /* 处理URL */ 104 $material['buy_url'] = sanitize_url( $_POST['buy_url' ]); 105 /* 插入数据 */ 106 $db->autoExecute( $ecs->table('materials'), $material, 'UPDATE', "id = ' $id'" ); 107 108 $link[0]['text'] = '继续编辑' ; 109 $link[0]['href'] = 'materials.php?act=edit&id='. $id ; 110 $link[1]['text'] = '返回列表' ; 111 $link[1]['href'] = 'materials.php?act=list' ; 112sys_msg('编辑成功', 0, $link ); 113 } 114 elseif( $_REQUEST['act'] =='edit' ) 115 { 116 $sql= "SELECT * FROM " . $ecs->table('materials'). " WHERE id=' $_REQUEST[id]'" ; 117 $material= $db->GetRow( $sql ); 118 $smarty->assign('ur_here', "编辑物料" ); 119 $smarty->assign('action_link', array('href' => 'materials.php?act=list', 'text' => '返回物料库存列表' )); 120 $smarty->assign('material', $material ); 121 $smarty->assign('form_action', 'updata' ); 122 assign_query_info(); 123 $smarty->display('material_info.htm' ); 124 } 125 elseif( $_REQUEST['act'] == 'remove' ) 126 { 127 $id= intval( $_GET['id' ]); 128 $exc->drop( $id ); 129 $url= 'materials.php?act=query&' . str_replace('act=remove', '', $_SERVER['QUERY_STRING' ]); 130ecs_header("Location: $url\n" ); 131 exit ; 132 } 133 elseif( $_REQUEST['act'] == 'drop_img' ) 134 { 135 $id= isset( $_GET['id']) ? intval( $_GET['id']) : 0 ; 136 137 $sql= "SELECT img FROM " . $ecs->table('materials'). " WHERE id = ' $id'" ; 138 $img_name= $db->getOne( $sql ); 139 140 if(! empty( $img_name )) 141 { 142@ unlink(ROOT_PATH . DATA_DIR . '/material/' . $img_name ); 143 $sql= "UPDATE " . $ecs->table('materials'). " SET img = '' WHERE id = ' $id'" ; 144 $db->query( $sql ); 145 } 146 $link= array( array('text' => '继续编辑', 'href' => 'materials.php?act=edit&id=' . $id), array('text' => '返回物料库存列表', 'href' => 'materials.php?act=list' )); 147sys_msg('图片删除成功', 0, $link ); 148 } 149 elseif( $_REQUEST['act'] == 'edit_stock_in') // 更改入库 150 { 151 $id= intval( $_POST['id' ]); 152 $val= json_str_iconv( trim( $_POST['val' ])); 153 /* 检查格式 */ 154 if(! is_numeric( $val) || $val) 155 { 156make_json_error( sprintf("格式不正确!", $val )); 157 } 158 159 $exc->edit("stock_in=' $val'", $id ); 160make_json_result( stripslashes( $val )); 161 } 162 elseif( $_REQUEST['act'] == 'edit_stock_out') // 更改出库 163 { 164 $id= intval( $_POST['id' ]); 165 $val= json_str_iconv( trim( $_POST['val' ])); 166 /* 检查格式 */ 167 if(! is_numeric( $val) || $val) 168 { 169make_json_error( sprintf("格式不正确!", $val )); 170 } 171 $sql="SELECT * FROM ". $GLOBALS['ecs']->table('materials')." where id = '". $id."'" ; 172 $material= $GLOBALS['db']->getRow( $sql ); 173 if( $val> $material['stock_in'] + $material['stock_number' ]) 174 { 175make_json_error( sprintf("出库数不能大于现有库存与入库总和!", $val )); 176 } 177 178 $exc->edit("stock_out=' $val'", $id ); 179make_json_result( stripslashes( $val )); 180 } 181 elseif( $_REQUEST['act'] == 'operate') // 批量入库/出库 182 { 183 $sql= "UPDATE " . $ecs->table('materials'). " SET stock_number = stock_number + stock_in - stock_out,stock_out = 0,stock_in = 0,admin_id= $_SESSION[admin_id],update_time = ". gmtime(); 184 $db->query( $sql ); 185 $link= array( array('text' => '返回物料库存列表', 'href' => 'materials.php?act=list' )); 186sys_msg('成功批量入库/出库', 0, $link ); 187 } 188 elseif( $_REQUEST['act'] == 'export') // 导出采购单 189 { 190 include_once('includes/PHPExcel/PHPExcel.php' ); 191 include_once('corlor.php' ); 192 $objPHPExcel= new PHPExcel(); 193 194 $filename= '物料采购表_'. date("YmdHi", gmtime()); 195 $objPHPExcel->setActiveSheetIndex(0 ); 196 $objPHPExcel->getActiveSheet()->setTitle( $filename ); 197 $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15 ); 198 $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15 ); 199 $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(10 ); 200 $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(10 ); 201 $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(10 ); 202 $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(10 ); 203 $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(10 ); 204 $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(10 ); 205 $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(10 ); 206 $objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(10 ); 207 $objPHPExcel->getActiveSheet()->getStyle('C1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment:: HORIZONTAL_RIGHT); 208 $objPHPExcel->getActiveSheet()->getStyle('D1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment:: HORIZONTAL_RIGHT); 209 $objPHPExcel->getActiveSheet()->getStyle('F1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment:: HORIZONTAL_RIGHT); 210 $objPHPExcel->getActiveSheet()->getStyle('G1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment:: HORIZONTAL_RIGHT); 211 $objPHPExcel->getActiveSheet()->getStyle('H1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment:: HORIZONTAL_RIGHT); 212 $objPHPExcel->getActiveSheet()->getStyle('I1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment:: HORIZONTAL_RIGHT); 213 $objPHPExcel->getActiveSheet()->getStyle('J1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment:: HORIZONTAL_RIGHT); 214 $objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(10 ); 215 $objPHPExcel->setActiveSheetIndex(0 ) 216->setCellValue('A1', '物料名称' ) 217->setCellValue('B1', '图片' ) 218->setCellValue('C1', '每天用量' ) 219->setCellValue('D1', '现有库存' ) 220->setCellValue('E1', '周转天数' ) 221->setCellValue('F1', '安全库存' ) 222->setCellValue('G1', '目标库存' ) 223->setCellValue('H1', '建议购买' ) 224->setCellValue('I1', '单价' ) 225->setCellValue('J1', '实际单价' ) 226->setCellValue('K1', '采购链接' ); 227 $i=2 ; 228 $stock_list= material_list( false ); 229 $arr= $stock_list['stock_list' ]; 230 foreach( $arr as $v ) 231 { 232 if( $v['img' ]) 233 { 234 $objPHPExcel->getActiveSheet()->getRowDimension( $i)->setRowHeight(50 ); 235 $objDrawing= new PHPExcel_Worksheet_Drawing(); 236 $objDrawing->setName('goods thumb' ); 237 $objDrawing->setDescription('Pgoods thumb' ); 238 $img_path= file_exists('../data/material/'. $v['img']) ? '../data/material/'. $v['img'] : '../images/no_img.jpg' ; 239 $objDrawing->setPath( $img_path ); 240 $objDrawing->setWidth(100 ); 241 $objDrawing->setCoordinates('B'. $i ); 242 $objDrawing->setWorksheet( $objPHPExcel-> getActiveSheet()); 243 } 244 else 245 { 246 $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B'. $i, '' ); 247 } 248 249 $objPHPExcel->setActiveSheetIndex(0 ) 250->setCellValue('A'. $i, $v['name' ]) 251->setCellValue('C'. $i, $v['day_use' ]) 252->setCellValue('D'. $i, $v['stock_number' ]) 253->setCellValue('E'. $i, $v['stock_day' ]) 254->setCellValue('F'. $i, $v['stock_safe' ]) 255->setCellValue('G'. $i, $v['stock_intent' ]) 256->setCellValue('H'. $i, $v['proposal_buy' ]) 257->setCellValue('I'. $i, $v['price' ]) 258->setCellValue('J'. $i, '' ); 259 if( $v['stock_safe'] >= $v['stock_number' ]) 260 { 261 $objPHPExcel->setActiveSheetIndex(0)->getStyle('D'. $i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color:: COLOR_RED); 262 } 263 if( $v['buy_url'] != 'http://' ) 264 { 265 $objPHPExcel->setActiveSheetIndex(0)->setCellValue('K'. $i, '采购链接' ); 266 $objPHPExcel->setActiveSheetIndex(0)->getCell('K'. $i)->getHyperlink()->setUrl( $v['buy_url' ]); 267 $objPHPExcel->setActiveSheetIndex(0)->getCell('K'. $i)->getHyperlink()->setTooltip('采购链接' ); 268 $objPHPExcel->setActiveSheetIndex(0)->getStyle('K'. $i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color:: COLOR_BLUE); 269 $objPHPExcel->setActiveSheetIndex(0)->getStyle('K'. $i)->getFont()->setUnderline(PHPExcel_Style_Font:: UNDERLINE_SINGLE); 270 } 271 else 272 { 273 $objPHPExcel->setActiveSheetIndex(0)->setCellValue('K'. $i, '' ); 274 } 275 $objPHPExcel->getActiveSheet()->getStyle('A'. $i)->getAlignment()->setVertical(PHPExcel_Style_Alignment:: VERTICAL_CENTER); 276 $objPHPExcel->getActiveSheet()->getStyle('B'. $i)->getAlignment()->setVertical(PHPExcel_Style_Alignment:: VERTICAL_CENTER); 277 $objPHPExcel->getActiveSheet()->getStyle('C'. $i)->getAlignment()->setVertical(PHPExcel_Style_Alignment:: VERTICAL_CENTER); 278 $objPHPExcel->getActiveSheet()->getStyle('D'. $i)->getAlignment()->setVertical(PHPExcel_Style_Alignment:: VERTICAL_CENTER); 279 $objPHPExcel->getActiveSheet()->getStyle('E'. $i)->getAlignment()->setVertical(PHPExcel_Style_Alignment:: VERTICAL_CENTER); 280 $objPHPExcel->getActiveSheet()->getStyle('F'. $i)->getAlignment()->setVertical(PHPExcel_Style_Alignment:: VERTICAL_CENTER); 281 $objPHPExcel->getActiveSheet()->getStyle('G'. $i)->getAlignment()->setVertical(PHPExcel_Style_Alignment:: VERTICAL_CENTER); 282 $objPHPExcel->getActiveSheet()->getStyle('H'. $i)->getAlignment()->setVertical(PHPExcel_Style_Alignment:: VERTICAL_CENTER); 283 $objPHPExcel->getActiveSheet()->getStyle('I'. $i)->getAlignment()->setVertical(PHPExcel_Style_Alignment:: VERTICAL_CENTER); 284 $objPHPExcel->getActiveSheet()->getStyle('J'. $i)->getAlignment()->setVertical(PHPExcel_Style_Alignment:: VERTICAL_CENTER); 285 $objPHPExcel->getActiveSheet()->getStyle('K'. $i)->getAlignment()->setVertical(PHPExcel_Style_Alignment:: VERTICAL_CENTER); 286 $i++ ; 287 } 288 $file_name= $filename.'.xls' ; 289 header('Content-Type: application/vnd.ms-excel' ); 290 header('Content-Disposition: attachment;filename="'. $file_name.'"' ); 291 header('Cache-Control: max-age=0' ); 292 $objWriter= PHPExcel_IOFactory::createWriter( $objPHPExcel, 'Excel5' ); 293 $objWriter->save('php://output' ); 294 exit ; 295 } 296 elseif( $_REQUEST['act'] == 'query' ) 297 { 298 $stock_list= material_list(); 299 $smarty->assign('stock_list', $stock_list['stock_list' ]); 300 $smarty->assign('filter', $stock_list['filter' ]); 301 $smarty->assign('record_count', $stock_list['record_count' ]); 302 $smarty->assign('page_count', $stock_list['page_count' ]); 303make_json_result( $smarty->fetch('material_list.htm'), '', array('filter' => $stock_list['filter'], 'page_count' => $stock_list['page_count' ])); 304 } 305 306 functionmaterial_list( $is_pagination= true ) 307 { 308 GLOBAL $ecs, $db ; 309 $result= get_filter(); 310 if( $result=== false ) 311 { 312 $filter['sort_by'] = empty( $_REQUEST['sort_by']) ? 'id' : trim( $_REQUEST['sort_by' ]); 313 $filter['sort_order'] = empty( $_REQUEST['sort_order']) ? 'desc' : trim( $_REQUEST['sort_order' ]); 314 $where= " WHERE 1 = 1 " ; 315 316 $sql= 'select count(t.id) from '. $ecs->table('materials'). ' as t '. $where ; 317 318 $filter['record_count'] = $db->getOne( $sql ); 319 320 /* 分页大小 */ 321 $filter= page_and_size( $filter ); 322 323 $sql= 'select t.*, au.user_name from '. 324 $ecs->table('materials').' as t left join '. 325 $ecs->table('admin_user')." as au on t.admin_id=au.user_id ". $where. 326' order by '. $filter['sort_by']." ". $filter['sort_order' ]; 327 328 if( $is_pagination ) 329 { 330 $sql.= " LIMIT " . $filter['start'] . ', ' . $filter['page_size' ]; 331 } 332 333 $end_time= strtotime( date("Y-m-d", gmtime())); 334 $start_time= $end_time- 7 * 86400 ; 335 $query= "SELECT count(order_id) as total FROM ". $GLOBALS['ecs']->table('order_info')." WHERE synch_time $end_time."' and synch_time >= '". $start_time."'" ; 336 $filter['orders'] = round( $GLOBALS['db']->getOne( $query) / 7); // 7天平均订单数 337 $filter['orders'] = $filter['orders'] ? $filter['orders'] : 1400 ; 338set_filter( $filter, $sql ); 339 } 340 else 341 { 342 $sql= $result['sql' ]; 343 $filter= $result['filter' ]; 344 } 345 $row= $GLOBALS['db']->getAll( $sql ); 346 347 $orders= $filter['orders' ]; 348 foreach( $row as $k=> $val ) 349 { 350 if( $is_pagination== false&& $val['is_buy'] == 0) // 不购买,不导出 351 { 352 unset( $row[ $k ]); 353 continue ; 354 } 355 $row[ $k]['update_time'] = local_date('Y-m-d H:i', $val['update_time' ]); 356 $row[ $k]['day_use'] = $day_use= round( $orders* $val['modulus'],1); // 每日用量 357 $row[ $k]['stock_day'] = $day_use? round( $val['stock_number'] / $day_use,1) : 0; // 周转天数 358 $row[ $k]['stock_safe'] = round( $val['safe_day'] * $day_use,1); // 安全库存 359 $row[ $k]['stock_intent']= $stock_intent= round( $val['intent_day'] * $day_use,1); // 目标库存 360 $row[ $k]['proposal_buy']= round( $stock_intent- $val['stock_number'],1); // 建议购买 361 } 362 363 $stock_list= array('stock_list' => $row, 'filter' => $filter, 'page_count' => $filter['page_count'], 'record_count' => $filter['record_count' ]); 364 return $stock_list ; 365 } 366?> View Code
define('IN_ECS', true);
require(dirname(__FILE__) . '/includes/init.php');
include_once(ROOT_PATH . 'includes/cls_image.php');
$image = new cls_image($_CFG['bgcolor']);
$exc = new exchange($ecs->table("materials"), $db, 'id', 'name');
$_REQUEST['act']=!empty($_REQUEST['act']) ? $_REQUEST['act']:'list';
admin_priv('stock_alert');//权限:库存数量修改
if($_REQUEST['act'] == 'list')
{
$stock_list=material_list();
$smarty->assign('ur_here', '物料库存列表');
$smarty->assign('stock_list', $stock_list['stock_list']);
$smarty->assign('filter', $stock_list['filter']);
$smarty->assign('record_count', $stock_list['record_count']);
$smarty->assign('page_count', $stock_list['page_count']);
$smarty->assign('shelf_list', $shelf_list);
$smarty->assign('full_page', 1);
$smarty->assign('action_link', array('href' => 'goods_stock.php?act=list', 'text' => '商品库存列表'));
$smarty->assign('action_link2', array('href' => 'materials.php?act=export', 'text' => '导出采购单'));
$smarty->assign('action_link3', array('href' => 'materials.php?act=add', 'text' => '添加物料'));
$smarty->display('material_list.htm');
}
elseif($_REQUEST['act'] == 'add')
{
$smarty->assign('ur_here', "添加物料");
$smarty->assign('action_link', array('href' => 'materials.php?act=list', 'text' => '返回物料库存列表'));
$smarty->assign('form_action', "insert");
assign_query_info();
$smarty->display('material_info.htm');
}
elseif($_REQUEST['act'] == 'insert')
{
$material['is_buy'] = isset($_REQUEST['is_buy']) ? intval($_REQUEST['is_buy']) : 1;
$material['name'] = isset($_REQUEST['name']) ? trim($_REQUEST['name']) : '';
$material['modulus'] = isset($_REQUEST['modulus']) ? trim($_REQUEST['modulus']) : '';
$material['safe_day'] = isset($_REQUEST['safe_day']) ? intval($_REQUEST['safe_day']) : 0;
$material['intent_day']= isset($_REQUEST['intent_day']) ? intval($_REQUEST['intent_day']) : 0;
$material['price'] = isset($_REQUEST['price']) ? floatval($_REQUEST['price']) : '0.00';
$material['weight'] = isset($_REQUEST['weight']) ? intval($_REQUEST['weight']) : 0;
$material['desc_info'] = isset($_REQUEST['desc_info']) ? trim($_REQUEST['desc_info']) : '';
$material['remark'] = isset($_REQUEST['remark']) ? trim($_REQUEST['remark']) : '';
$material['update_time']= gmtime();
$material['admin_id'] = $_SESSION['admin_id'];
if(empty($material['name']) || empty($material['modulus']) || empty($material['safe_day']) || empty($material['intent_day']))
{
sys_msg('名称、系数、安全天数、目标天数,不能为空或者格式不正确', 1);
}
$is_only = $exc->is_only('name', $material['name']);
if (!$is_only)
{
sys_msg($material['name'].',已存在', 1);
}
/*处理图片*/
$material['img'] = basename($image->upload_image($_FILES['img'],'material'));
/*处理URL*/
$material['buy_url'] = sanitize_url($_POST['buy_url']);
/*插入数据*/
$db->autoExecute($ecs->table('materials'), $material, 'INSERT', '', 'SILENT');
$link[0]['text'] = '继续添加';
$link[0]['href'] = 'materials.php?act=add';
$link[1]['text'] = '返回列表';
$link[1]['href'] = 'materials.php?act=list';
sys_msg('添加成功', 0, $link);
}
elseif($_REQUEST['act'] == 'updata')
{
$id = isset($_REQUEST['id']) ? intval($_REQUEST['id']) : 0;
$material['is_buy'] = isset($_REQUEST['is_buy']) ? intval($_REQUEST['is_buy']) : 1;
$material['name'] = isset($_REQUEST['name']) ? trim($_REQUEST['name']) : '';
$material['modulus'] = isset($_REQUEST['modulus']) ? trim($_REQUEST['modulus']) : '';
$material['safe_day'] = isset($_REQUEST['safe_day']) ? intval($_REQUEST['safe_day']) : 0;
$material['intent_day']= isset($_REQUEST['intent_day']) ? intval($_REQUEST['intent_day']) : 0;
$material['price'] = isset($_REQUEST['price']) ? floatval($_REQUEST['price']) : '0.00';
$material['weight'] = isset($_REQUEST['weight']) ? intval($_REQUEST['weight']) : 0;
$material['desc_info'] = isset($_REQUEST['desc_info']) ? trim($_REQUEST['desc_info']) : '';
$material['remark'] = isset($_REQUEST['remark']) ? trim($_REQUEST['remark']) : '';
$material['update_time']= gmtime();
$material['admin_id'] = $_SESSION['admin_id'];
if(empty($id))
{
sys_msg('ID不能为空', 1);
}
if(empty($material['name']) || empty($material['modulus']) || empty($material['safe_day']) || empty($material['intent_day']))
{
sys_msg('名称、系数、安全天数、目标天数,不能为空或者格式不正确', 1);
}
/*处理图片*/
if(!empty($_FILES['img']['name']))
{
$material['img'] = basename($image->upload_image($_FILES['img'],'material'));
}
/*处理URL*/
$material['buy_url'] = sanitize_url($_POST['buy_url']);
/*插入数据*/
$db->autoExecute($ecs->table('materials'), $material, 'UPDATE', "id = '$id'");
$link[0]['text'] = '继续编辑';
$link[0]['href'] = 'materials.php?act=edit&id='.$id;
$link[1]['text'] = '返回列表';
$link[1]['href'] = 'materials.php?act=list';
sys_msg('编辑成功', 0, $link);
}
elseif ($_REQUEST['act'] =='edit')
{
$sql = "SELECT * FROM " .$ecs->table('materials'). " WHERE id='$_REQUEST[id]'";
$material = $db->GetRow($sql);
$smarty->assign('ur_here', "编辑物料");
$smarty->assign('action_link', array('href' => 'materials.php?act=list', 'text' => '返回物料库存列表'));
$smarty->assign('material', $material);
$smarty->assign('form_action', 'updata');
assign_query_info();
$smarty->display('material_info.htm');
}
elseif ($_REQUEST['act'] == 'remove')
{
$id = intval($_GET['id']);
$exc->drop($id);
$url = 'materials.php?act=query&' . str_replace('act=remove', '', $_SERVER['QUERY_STRING']);
ecs_header("Location: $url\n");
exit;
}
elseif ($_REQUEST['act'] == 'drop_img')
{
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
$sql = "SELECT img FROM " .$ecs->table('materials'). " WHERE id = '$id'";
$img_name = $db->getOne($sql);
if (!empty($img_name))
{
@unlink(ROOT_PATH . DATA_DIR . '/material/' .$img_name);
$sql = "UPDATE " .$ecs->table('materials'). " SET img = '' WHERE id = '$id'";
$db->query($sql);
}
$link= array(array('text' => '继续编辑', 'href' => 'materials.php?act=edit&id=' . $id), array('text' => '返回物料库存列表', 'href' => 'materials.php?act=list'));
sys_msg('图片删除成功', 0, $link);
}
elseif ($_REQUEST['act'] == 'edit_stock_in') //更改入库
{
$id = intval($_POST['id']);
$val = json_str_iconv(trim($_POST['val']));
/* 检查格式 */
if(!is_numeric($val) || $val {
make_json_error(sprintf("格式不正确!", $val));
}
$exc->edit("stock_in='$val'", $id);
make_json_result(stripslashes($val));
}
elseif ($_REQUEST['act'] == 'edit_stock_out') //更改出库
{
$id = intval($_POST['id']);
$val = json_str_iconv(trim($_POST['val']));
/* 检查格式 */
if(!is_numeric($val) || $val {
make_json_error(sprintf("格式不正确!", $val));
}
$sql="SELECT * FROM ".$GLOBALS['ecs']->table('materials')." where id = '".$id."'";
$material = $GLOBALS['db']->getRow($sql);
if($val > $material['stock_in'] + $material['stock_number'])
{
make_json_error(sprintf("出库数不能大于现有库存与入库总和!", $val));
}
$exc->edit("stock_out='$val'", $id);
make_json_result(stripslashes($val));
}
elseif ($_REQUEST['act'] == 'operate') //批量入库/出库
{
$sql = "UPDATE " .$ecs->table('materials'). " SET stock_number = stock_number + stock_in - stock_out,stock_out = 0,stock_in = 0,admin_id=$_SESSION[admin_id],update_time = ".gmtime();
$db->query($sql);
$link= array(array('text' => '返回物料库存列表', 'href' => 'materials.php?act=list'));
sys_msg('成功批量入库/出库', 0, $link);
}
elseif ($_REQUEST['act'] == 'export') //导出采购单
{
include_once('includes/PHPExcel/PHPExcel.php');
include_once('corlor.php');
$objPHPExcel = new PHPExcel();
$filename = '物料采购表_'.date("YmdHi",gmtime());
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setTitle($filename);
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(10);
$objPHPExcel->getActiveSheet()->getStyle('C1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getStyle('D1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getStyle('F1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getStyle('G1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getStyle('H1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getStyle('I1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getStyle('J1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(10);
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', '物料名称')
->setCellValue('B1', '图片')
->setCellValue('C1', '每天用量')
->setCellValue('D1', '现有库存')
->setCellValue('E1', '周转天数')
->setCellValue('F1', '安全库存')
->setCellValue('G1', '目标库存')
->setCellValue('H1', '建议购买')
->setCellValue('I1', '单价')
->setCellValue('J1', '实际单价')
->setCellValue('K1', '采购链接');
$i=2;
$stock_list = material_list(false);
$arr = $stock_list['stock_list'];
foreach($arr as $v)
{
if($v['img'])
{
$objPHPExcel->getActiveSheet()->getRowDimension($i)->setRowHeight(50);
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName('goods thumb');
$objDrawing->setDescription('Pgoods thumb');
$img_path = file_exists('../data/material/'.$v['img']) ? '../data/material/'.$v['img'] : '../images/no_img.jpg';
$objDrawing->setPath($img_path);
$objDrawing->setWidth(100);
$objDrawing->setCoordinates('B'.$i);
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
}
else
{
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('B'.$i, '');
}
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A'.$i, $v['name'])
->setCellValue('C'.$i, $v['day_use'])
->setCellValue('D'.$i, $v['stock_number'])
->setCellValue('E'.$i, $v['stock_day'])
->setCellValue('F'.$i, $v['stock_safe'])
->setCellValue('G'.$i, $v['stock_intent'])
->setCellValue('H'.$i, $v['proposal_buy'])
->setCellValue('I'.$i, $v['price'])
->setCellValue('J'.$i, '');
if($v['stock_safe'] >= $v['stock_number'])
{
$objPHPExcel->setActiveSheetIndex(0)->getStyle('D'.$i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
}
if($v['buy_url'] != 'http://')
{
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('K'.$i, '采购链接');
$objPHPExcel->setActiveSheetIndex(0)->getCell('K'.$i)->getHyperlink()->setUrl($v['buy_url']);
$objPHPExcel->setActiveSheetIndex(0)->getCell('K'.$i)->getHyperlink()->setTooltip('采购链接');
$objPHPExcel->setActiveSheetIndex(0)->getStyle('K'.$i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE);
$objPHPExcel->setActiveSheetIndex(0)->getStyle('K'.$i)->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
}
else
{
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('K'.$i, '');
}
$objPHPExcel->getActiveSheet()->getStyle('A'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('B'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('C'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('D'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('E'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('F'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('G'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('H'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('I'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('J'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('K'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$i++;
}
$file_name = $filename.'.xls';
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$file_name.'"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
elseif ($_REQUEST['act'] == 'query')
{
$stock_list = material_list();
$smarty->assign('stock_list', $stock_list['stock_list']);
$smarty->assign('filter', $stock_list['filter']);
$smarty->assign('record_count', $stock_list['record_count']);
$smarty->assign('page_count', $stock_list['page_count']);
make_json_result($smarty->fetch('material_list.htm'), '', array('filter' => $stock_list['filter'], 'page_count' => $stock_list['page_count']));
}
function material_list($is_pagination = true)
{
GLOBAL $ecs,$db;
$result = get_filter();
if ($result === false)
{
$filter['sort_by'] = empty($_REQUEST['sort_by']) ? 'id' : trim($_REQUEST['sort_by']);
$filter['sort_order'] = empty($_REQUEST['sort_order']) ? 'desc' : trim($_REQUEST['sort_order']);
$where = " WHERE 1 = 1 ";
$sql = 'select count(t.id) from '.$ecs->table('materials'). ' as t '.$where;
$filter['record_count'] = $db->getOne($sql);
/* 分页大小 */
$filter = page_and_size($filter);
$sql = 'select t.*, au.user_name from '.
$ecs->table('materials').' as t left join '.
$ecs->table('admin_user')." as au on t.admin_id=au.user_id ".$where.
' order by '.$filter['sort_by']." ".$filter['sort_order'];
if ($is_pagination)
{
$sql .= " LIMIT " . $filter['start'] . ', ' . $filter['page_size'];
}
$end_time = strtotime(date("Y-m-d",gmtime()));
$start_time = $end_time - 7 * 86400;
$query = "SELECT count(order_id) as total FROM ".$GLOBALS['ecs']->table('order_info')." WHERE synch_time = '".$start_time."'";
$filter['orders'] = round($GLOBALS['db']->getOne($query) / 7);//7天平均订单数
$filter['orders'] = $filter['orders'] ? $filter['orders'] : 1400;
set_filter($filter, $sql);
}
else
{
$sql = $result['sql'];
$filter = $result['filter'];
}
$row = $GLOBALS['db']->getAll($sql);
$orders = $filter['orders'];
foreach($row as $k=>$val)
{
if ($is_pagination == false && $val['is_buy'] == 0) //不购买,不导出
{