'新建', 'href' => 'index.php?app=console&ctl=admin_purchase&act=add', 'target' => '_blank', ), array( 'label' => '导出模板', 'href' => 'index.php?app=console&ctl=admin_purchase&act=exportTemplate', 'target' => '_blank', ), array('label' => '推送单据至WMS', 'submit' => 'index.php?app=console&ctl=admin_purchase&act=batch_sync', 'confirm' => '你确定要对勾选的采购单发送至第三方吗?', 'target' => 'refresh'), ); $export = true; $import = true; $filter = true; } $params = array( 'title' => '采购列表', 'actions' => $action, 'use_buildin_new_dialog' => false, 'use_buildin_set_tag' => false, 'use_buildin_recycle' => false, 'use_buildin_export' => $export, 'use_buildin_import' => $import, 'use_buildin_importxls' => $import, 'use_buildin_filter' => $filter, 'finder_cols' => 'column_edit,supplier_id,emergency,name,arrive_time,operator,deposit,purchase_time,check_status,check_time,po_status,po_type,statement,eo_status,branch_id,check_operator', 'orderBy' => 'emergency asc,purchase_time desc', ); $oBranch = app::get('ome')->model('branch'); $is_super = kernel::single('desktop_user')->is_super(); if (!$is_super) { $branch_ids = $oBranch->getBranchByUser(true); if ($branch_ids) { if (isset($_POST['branch_id']) && $_POST['branch_id']) { $params['base_filter']['branch_id'] = $_POST['branch_id']; } else { $params['base_filter']['branch_id'] = $branch_ids; } } else { $params['base_filter']['branch_id'] = 'false'; } } $this->finder('purchase_mdl_po', $params); } /** * 打开已完成的采购单列表信息(添加采购) */ public function getSuccessPurchase(){ $params = array( 'title' => '采购单列表', 'base_filter' => array('eo_status' => array(3),'po_species'=>'1'), 'use_buildin_set_tag' => false, 'use_buildin_recycle' => false, 'use_buildin_export' => false, 'use_buildin_import' => false, 'use_buildin_filter' => true, 'finder_cols' => 'column_edit,supplier_id,emergency,name,arrive_time,operator,deposit,purchase_time,check_status,check_time,po_status,po_type,statement,eo_status,branch_id,check_operator', 'orderBy' => 'emergency asc,purchase_time desc', ); $this->finder('purchase_mdl_po', $params); } /** * 检查list * @return mixed 返回验证结果 */ public function checklist() { $params = array( 'title' => '待审核', 'base_filter' => array('check_status' => array(1)), 'use_buildin_new_dialog' => false, 'use_buildin_set_tag' => false, 'use_buildin_recycle' => false, 'use_buildin_export' => false, 'use_buildin_import' => false, 'use_buildin_filter' => true, 'orderBy' => 'emergency asc,purchase_time desc', ); $this->finder('purchase_mdl_po', $params); } /** * 检查_auto * @return mixed 返回验证结果 */ public function check_auto() { $this->begin('index.php?app=console&ctl=admin_purchase&act=index'); foreach ($_POST['po_id'] as $v) { app::get('purchase')->model('po')->update(array('check_status' => 2, 'eo_status' => 1), array('po_id' => $v, 'check_status' => 1)); kernel::single('console_event_trigger_purchase')->create(array('po_id' => $v), false); } $this->end(true, '批量审核成功'); } /** * 检查 * @param mixed $po_id ID * @param mixed $uncheck uncheck * @return mixed 返回验证结果 */ public function check($po_id, $uncheck = false) { $this->begin('index.php?app=console&ctl=admin_purchase&act=index'); if (empty($po_id)) { $this->end(false, '操作出错,请重新操作'); } if ($uncheck) { $checkInfo = array( 'title' => '反审核', 'action' => 'do_uncheck', ); } else { $checkInfo = array( 'title' => '审核', 'action' => 'do_check', ); } $this->pagedata['checkInfo'] = $checkInfo; $poObj = app::get('purchase')->model('po'); $suObj = app::get('purchase')->model('supplier'); $brObj = app::get('ome')->model('branch'); $data = $poObj->dump($po_id, '*', array('po_items' => array('*'))); //当前供应商 $supplier_detail = $suObj->dump($data['supplier_id'], 'supplier_id,name'); $this->pagedata['supplier_detail'] = $supplier_detail; $this->pagedata['branch_mode'] = 'single'; $su = $suObj->dump($data['supplier_id'], 'name'); $br = $brObj->dump($data['branch_id'], 'name'); $data['branch_name'] = $br['name']; $data['supplier_name'] = $su['name']; //到货天数 if($data['arrive_time']>0){ $diff_time = $data['arrive_time'] - $data['purchase_time']; $data['diff_days'] = floor($diff_time / (24 * 60 * 60)); } $this->pagedata['po_items'] = $data['po_items']; if ($data['memo']) { $data['memo'] = unserialize($data['memo']); if ($data['memo']) { foreach ($data['memo'] as $key => $v) { $str = unserialize($v['op_content']); if ($str) { $data['memo'][$key]['op_content'] = $str[0]['op_content']; } else { $data['memo'][$key]['op_content'] = $v['op_content']; } } } } $this->pagedata['po'] = $data; $this->singlepage("admin/purchase/purchase_check.html"); } /** * do_check * @return mixed 返回值 */ public function do_check() { $this->begin('index.php?app=console&ctl=admin_purchase&act=index'); $po_id = $_POST['po_id']; list($rs, $msg) = kernel::single('console_po')->do_check($po_id); $this->end($rs, $msg); } /** * uncheck * @param mixed $po_id ID * @return mixed 返回值 */ public function uncheck($po_id) { $this->check($po_id, true); } /** * do_uncheck * @return mixed 返回值 */ public function do_uncheck() { } /** * eoList * @param mixed $p p * @return mixed 返回值 */ public function eoList($p = null) { switch ($p) { case 'i': $sub_title = '采购入库'; $this->workground = 'console_center'; break; default: $sub_title = '待入库'; break; } $filter['eo_status'] = array('1', '2'); $params = array( 'title' => $sub_title, 'base_filter' => $filter, 'use_buildin_new_dialog' => false, 'use_buildin_set_tag' => false, 'use_buildin_recycle' => false, 'use_buildin_export' => false, 'use_buildin_import' => false, 'use_buildin_filter' => true, 'orderBy' => 'purchase_time desc', 'finder_cols' => 'column_edit,supplier_id,emergency,name,arrive_time,operator,deposit,purchase_time,check_status,check_time,po_status,po_type,statement,eo_status,branch_id,check_operator', ); $oBranch = app::get('ome')->model('branch'); $is_super = kernel::single('desktop_user')->is_super(); if (!$is_super) { $branch_ids = $oBranch->getBranchByUser(true); if ($branch_ids) { $params['base_filter']['branch_id'] = $branch_ids; } else { $params['base_filter']['branch_id'] = 'false'; } } $this->finder('purchase_mdl_po', $params); } /** * exportTemplate * @return mixed 返回值 */ public function exportTemplate() { $pObj = app::get('purchase')->model('po'); $row = $pObj->io_title('purchase'); $data[] = array(); $data[] = $pObj->io_title('item'); $lib = kernel::single('omecsv_phpexcel'); $lib->newExportExcel($data, '采购单模板', 'xls', $row); } /** * 新建采购单 * */ public function add() { $suObj = app::get('purchase')->model('supplier'); $data = $suObj->getList('supplier_id, name', '', 0, -1); /* * 获取操作员管辖仓库 */ $is_super = kernel::single('desktop_user')->is_super(); $iostockObj = kernel::single('console_iostockdata'); $branch_list = $iostockObj->getBranchByUser(); $branch_list = kernel::single('ome_branch_type')->getBranchByIOType(ome_iostock::PURCH_STORAGE); $this->pagedata['branch_list'] = $branch_list; $is_super = 1; $this->pagedata['is_super'] = $is_super; //获取设置的采购方式 $po_type = app::get('ome')->getConf('purchase.po_type'); if (!$po_type) { $po_type = 'credit'; } $this->pagedata['po_type'] = $po_type; $this->pagedata['supplier'] = $data; $operator = kernel::single('desktop_user')->get_name(); $this->pagedata['operator'] = $operator; $this->pagedata['branchid'] = 0; $this->pagedata['cur_date'] = date('Ymd', time()) . '采购单'; $this->singlepage("admin/purchase/purchase_add.html"); } /** * 添加_replenishment * @return mixed 返回值 */ public function add_replenishment(){ $oPo = app::get('purchase')->model('po'); $branchMdl = app::get('ome')->model('branch'); $suObj = app::get('purchase')->model('supplier'); $po_id = $_GET['po_id']; $po_info = $oPo->dump($po_id,'*'); if(empty($po_info) || $po_info['eo_status'] != 3){ echo " ";exit(); } $supplier = $suObj->dump($po_info['supplier_id'], 'supplier_id,name,arrive_days'); $this->pagedata['supplier'] = $supplier; $po_info['memo'] = unserialize($po_info['memo']); if ($po_info['memo']) { foreach ($po_info['memo'] as $key => $v) { $str = unserialize($v['op_content']); if ($str) { $po_info['memo'][$key]['op_content'] = $str[0]['op_content']; } else { $po_info['memo'][$key]['op_content'] = $v['op_content']; } } } $this->pagedata['po_info'] = $po_info; $po_items = $oPo->getPoItemByPoId($po_id); # pr($po_info,1); $this->pagedata['po_items'] = json_encode($po_items); $branch_info = $branchMdl->dump($po_info['branch_id'],'name,branch_id'); $this->pagedata['branch_info'] = $branch_info; # pr($branch_info,1); $this->pagedata['cur_date'] = date('Ymd', time()) . '采购补货单'; $this->singlepage("admin/purchase/purchase_replenishment_add.html"); } /** * 从仓库搜索商品 */ public function findInBranch() { $where = ' 1 '; if ($_POST['name'] != '') { $where .= " AND p.name LIKE '%" . $_POST['name'] . "%' "; } if ($_POST['branch'] != '') { $where .= " AND bp.branch_id='" . $_POST['branch'] . "' "; } $branchObj = app::get('ome')->model('branch'); $poObj = app::get('purchase')->model('po'); $branch = $branchObj->getList('branch_id,name', '', 0, -1); $data = $poObj->findProductsByBranch($where); $this->pagedata['goods_name'] = $_POST['name']; $this->pagedata['branch_id'] = $_POST['branch_id']; $this->pagedata['branch'] = $branch; $this->pagedata['data'] = $data; $this->display("admin/purchase/purchase_find_in_branch.html"); } //获取基础物料 /** * 获取Products * @return mixed 返回结果 */ public function getProducts() { $basicMaterialSelect = kernel::single('material_basic_select'); $basicMaterialBarcode = kernel::single('material_basic_material_barcode'); $pro_id = $_POST['product_id']; $supplier_id = $_POST['supplier_id']; $pro_bn = $_GET['bn']; $pro_name = $_GET['name']; $pro_barcode = $_GET['barcode']; if (is_array($pro_id)) { $filter['bm_id'] = $pro_id; } //选定全部 if (is_array($filter['bm_id'][0]) && $filter['bm_id'][0]['_ALL_']) { if (isset($_POST['filter']['advance']) && $_POST['filter']['advance']) { $arr_filters = explode(',', $_POST['filter']['advance']); foreach ($arr_filters as $obj_filter) { $arr = explode('=', $obj_filter); $filter[$arr[0]] = $arr[1]; } unset($_POST['filter']['advance']); } } if ($pro_bn) { $filter = array( 'material_bn' => $pro_bn, ); } if ($pro_name) { $filter = array( 'material_name' => $pro_name, ); } if ($pro_barcode) { //查询条形码对应的bm_id $bm_ids = $basicMaterialBarcode->getBmidListByBarcode($pro_barcode); $filter = array('bm_id' => $bm_ids); } $data = $basicMaterialSelect->getlist_ext('bm_id, material_bn, material_name, visibled, retail_price, cost, specifications, purchasing_price', $filter); if (!empty($data)) { foreach ($data as $k => $item) { #查询关联的条形码 $item['barcode'] = $basicMaterialBarcode->getBarcodeById($item['product_id']); $item['num'] = 0; if ($supplier_id > 0) { $item['price'] = app::get('purchase')->model('po')->getPurchsePriceBySupplierId($supplier_id, $item['product_id'], 'desc'); if (!$item['price']) { $item['price'] = 0; } } else { $item['price'] = $item['cost']; #成本价 } $item['price'] = sprintf('%.2f', $item['price']); #基础物料规格 $item['spec_info'] = $item['specifications']; $item['purchasing_price'] = $item['purchasing_price']; $rows[] = $item; } } echo "window.autocompleter_json=" . json_encode($rows); } /** * 获取OriginalPurchaseItems * @return mixed 返回结果 */ public function getOriginalPurchaseItems(){ $oPo = app::get('purchase')->model('po'); $po_items = $oPo->getPoItemByPoId($_REQUEST['po_id']); $arr_return = []; $po_items = array_column($po_items,null,'product_id'); foreach($_REQUEST['product_id'] as $bm_id){ if(!empty($po_items[$bm_id])){ $po_items[$bm_id]['max_nums'] = $po_items[$bm_id]['num']; $arr_return[] = $po_items[$bm_id]; } } echo "window.autocompleter_json=" . json_encode($arr_return); } /** * 创建Purchase * @param mixed $supplier_id ID * @param mixed $branch_id ID * @param mixed $bn bn * @return mixed 返回值 */ public function createPurchase($supplier_id, $branch_id, $bn) { // 商品查询参数 if ($_POST['isSelectedAll'] == '_ALL_') { $product_ids = app::get('ome')->model('supply_product')->getList('*', $_POST, 0, -1); for ($i = 0; $i < sizeof($product_ids); $i++) { $product_id[] = $product_ids[$i]['product_id']; } } else { $product_id = $_POST['product_id']; } $this->pagedata['product_ids'] = implode(',', $product_id); // 获取供应商id $sql = "SELECT a.supplier_id FROM sdb_purchase_supplier_goods AS a LEFT JOIN sdb_material_basic_material AS b ON a.bm_id=b.bm_id WHERE b.bm_id IN (" . implode(',', $product_id) . ")"; $rs = kernel::database()->selectrow($sql); if ($rs) { $supplier_id = $rs['supplier_id']; } $filter = array('supplier_id' => $supplier_id, 'branch_id' => $branch_id, 'bn' => $bn); $suObj = app::get('purchase')->model('supplier'); $data = $suObj->getList('supplier_id, name', '', 0, -1); $brObj = app::get('ome')->model('branch'); $row = $brObj->getList('branch_id, name', '', 0, -1); /* * 获取操作员管辖仓库 */ $is_super = kernel::single('desktop_user')->is_super(); if (!$is_super) { $branch_list = $brObj->getBranchByUser(); } $this->pagedata['branch_list'] = $branch_list; $is_super = 1; $this->pagedata['is_super'] = $is_super; //获取设置的采购方式 $po_type = app::get('ome')->getConf('purchase.po_type'); if (!$po_type) { $po_type = 'credit'; } $this->pagedata['po_type'] = $po_type; $supplier = $suObj->dump($supplier_id, 'supplier_id,name,arrive_days'); $filter = array('supplier_id' => $supplier_id, 'branch_id' => $branch_id, 'bn' => $bn); $this->pagedata['filter'] = $filter; $operator = kernel::single('desktop_user')->get_name(); $this->pagedata['operator'] = $operator; $this->pagedata['supplier'] = $supplier; $this->pagedata['branchid'] = $branch_id; $this->pagedata['branch'] = $row; $this->pagedata['cur_date'] = date('Ymd', time()) . '采购单'; $this->singlepage("admin/purchase/purchase_create.html"); } /** * need * @return mixed 返回值 */ public function need() { $supplierObj = app::get('purchase')->model('supplier'); $data = $supplierObj->getList('supplier_id,name', '', 0, -1); $data[] = array('supplier_id' => '0', 'name' => '全部'); $brObj = app::get('ome')->model('branch'); $row = $brObj->getList('branch_id, name', '', 0, -1); /* * 获取操作员管辖仓库 */ $is_super = kernel::single('desktop_user')->is_super(); if (!$is_super) { $branch_list = $brObj->getBranchByUser(); } $this->pagedata['branch_list'] = $branch_list; $is_super = 1; $this->pagedata['is_super'] = $is_super; $this->pagedata['supplier'] = $data; $this->pagedata['branch'] = $row; $this->pagedata['branchid'] = $row[0]['branch_id']; $this->page("admin/purchase/requirement.html"); } /** * 获取SafeStock * @param mixed $supplier_id ID * @param mixed $branch_id ID * @param mixed $bn bn * @param mixed $product_ids ID * @return mixed 返回结果 */ public function getSafeStock($supplier_id, $branch_id, $bn, $product_ids) { $data['supplier_id'] = $supplier_id; $data['bn'] = $bn; $data['branch_id'] = $branch_id; $data['product_ids'] = $product_ids; $oPo = app::get('purchase')->model('po'); $data = $oPo->getSafeList($data); echo json_encode($data); } /** * safeStockPreview * @param mixed $page page * @return mixed 返回值 */ public function safeStockPreview($page = 1) { $data = utils::addslashes_array($_POST); //print_r($data);die; $page = $page ? $page : 1; $pagelimit = 12; //读取仓库的货品信息 $oPo = app::get('purchase')->model('po'); $safe_data = $oPo->getSafeStock($data, $pagelimit * ($page - 1), $pagelimit); $count = $safe_data['count']; $total_page = ceil($count / $pagelimit); $pager = $this->ui()->pager(array( 'current' => $page, 'total' => $total_page, 'link' => '?page=%d', )); $this->pagedata['pager'] = $pager; unset($safe_data['count']); $this->pagedata['data'] = $safe_data; $this->pagedata['total_page'] = $total_page; $this->pagedata['pagelimit'] = $pagelimit; $this->pagedata['count'] = $count; $this->pagedata['cur_page'] = $page; return $this->display("admin/inventory/safe_stock_div.html"); } /** * 获取EditProducts * @param mixed $po_id ID * @return mixed 返回结果 */ public function getEditProducts($po_id) { if ($po_id == '') { $po_id = $_POST['p[0]']; } $piObj = app::get('purchase')->model('po_items'); $basicMaterialSelect = kernel::single('material_basic_select'); $oPo = app::get('purchase')->model('po'); $po_info = $oPo->dump($po_id,'accos_po_id,po_species'); if($po_info['po_species'] == 2){ $origin_items = $piObj->getList('product_id,num,price,barcode,bn,name,spec_info,status,out_num,in_num,purchasing_price', array('po_id' => $po_info['accos_po_id']), 0, -1); $origin_items = array_column($origin_items,null,'product_id'); } $rows = array(); $items = $piObj->getList('product_id,num,price,barcode,bn,name,spec_info,status,out_num,in_num,purchasing_price', array('po_id' => $po_id), 0, -1); if ($items) { $product_ids = array(); foreach ($items as $k => $v) { if ($v['status'] == '1' || ($v['in_num'] + $v['out_num']) <= 0) { $items[$k]['delete'] = 1; } else { $items[$k]['delete'] = 0; } $product_ids[] = $v['product_id']; $items[$k]['visibility'] = &$product[$v['product_id']]['visibility']; if($po_info['po_species'] == 2){ $items[$k]['max_nums'] = $origin_items[$v['product_id']]['num']; } unset($items[$k]['status']); unset($items[$k]['out_num']); unset($items[$k]['in_num']); } if ($product_ids) { #基础物料 $plist = $basicMaterialSelect->getlist('bm_id, visibled', array('bm_id' => $product_ids)); foreach ($plist as $value) { $product_id = $value['product_id']; $visibility = ($value['visibility'] == 1 ? 'true' : 'false'); $product[$product_id]['visibility'] = $visibility; } } } $rows = $items; echo json_encode($rows); } /** * 保存采购单 * */ public function doSave() { $this->begin(); $at = $_POST['at']; $pr = $_POST['pr']; $type = $_POST['type']; $name = $_POST['purchase_name']; $emergency = $_POST['emergency']; $supplier = $_POST['supplier']; $branch = $_POST['branch']; $price = $_POST['price']; $memo = $_POST['memo']; $arrive = $_POST['arrive_days']; $operator = $_POST['operator']; $d_cost = $_POST['d_cost']; $total = 0; if ($at) { foreach ($at as $k => $a) { $ids[] = $k; $pr[$k] = number_format($pr[$k], 3, '.', ''); $pt = bcmul(number_format($a, 3, '.', ''), $pr[$k], 3); } } //判断供应商是否存在 $oSupplier = app::get('purchase')->model('supplier'); $supplier_ = $oSupplier->dump(array('name' => $supplier), 'supplier_id'); $poObj = app::get('purchase')->model('po'); $data['supplier_id'] = $supplier_['supplier_id']; $data['operator'] = $operator; //kernel::single('desktop_user')->get_name(); #采购单创建人 $data['op_name'] = kernel::single('desktop_user')->get_name(); $data['po_type'] = $type; $data['name'] = $name; $data['emergency'] = $emergency; $data['purchase_time'] = time(); $data['branch_id'] = $branch; $data['arrive_time'] = $arrive; $data['deposit'] = $type == 'cash' ? 0 : $price; $data['deposit_balance'] = $type == 'cash' ? 0 : $price; #预付款 $data['amount'] = $type == 'cash' ? bcadd($total, $d_cost, 3) : $total; $data['product_cost'] = $total; $data['delivery_cost'] = $d_cost; $data['po_species'] = 1; if ($memo) { $op_name = kernel::single('desktop_user')->get_login_name(); $newmemo = array(); $newmemo = array('op_name' => $op_name, 'op_time' => date('Y-m-d H:i', time()), 'op_content' => $memo); } $data['memo'] = $newmemo; $po_itemObj = app::get('purchase')->model('po_items'); $basicMaterialObj = app::get('material')->model('basic_material'); if ($ids) { foreach ($ids as $i) { //插入采购单详情 $p = $basicMaterialObj->dump($i, 'bm_id, material_name, material_bn'); $row['nums'] = $at[$i]; $row['price'] = $pr[$i]; $row['bn'] = $p['material_bn']; $row['name'] = $p['material_name']; $data['items'][] = $row; $row = null; } } $rs = $poObj->savePo($data); if ($rs['status'] == 'success') { //--生成采购单日志记录 $log_msg = '生成了编号为:' . $data['po_bn'] . '的采购单'; $opObj = app::get('ome')->model('operation_log'); $opObj->write_log('purchase_create@purchase', $data['po_id'], $log_msg); $this->end(true, '已完成'); } else { $this->end(false, $rs['msg'] != '' ? $rs['msg'] : '未完成', 'index.php?app=console&ctl=admin_purchase&act=add'); } } /** * 采购补货单入库操作 * * author : Joe * Date : 2022-01-26 15:32 */ public function doSaveReplenishment() { $this->begin(); $oPo = app::get('purchase')->model('po'); $po_origin = $oPo->dump($_REQUEST['origin_po_id'], '*'); $po_origin_items = $oPo->getPoItemByPoId($_REQUEST['origin_po_id']); $po_origin_items = array_column($po_origin_items, null, 'product_id'); $arr_items = []; $product_price = 0; if ($_POST['at']) { foreach ($_POST['at'] as $k => $a) { if ($po_origin_items[$k]) { unset($po_origin_items[$k]['item_id']); unset($po_origin_items[$k]['po_id']); unset($po_origin_items[$k]['status']); unset($po_origin_items[$k]['in_num']); unset($po_origin_items[$k]['out_num']); if ($a <= $po_origin_items[$k]['num']) { $po_origin_items[$k]['nums'] = $a; } else { $po_origin_items[$k]['nums'] = $po_origin_items[$k]['num']; } unset($po_origin_items[$k]['num']); $product_price += bcmul(number_format($po_origin_items[$k]['nums'], 3, '.', ''), $po_origin_items[$k]['price'], 3); $arr_items[] = $po_origin_items[$k]; } } } //采购补货单 $data = [ 'name' => $_REQUEST['purchase_name'], 'supplier_id' => $po_origin['supplier_id'], 'branch_id' => $po_origin['branch_id'], 'deposit_balance' => $po_origin['deposit_balance'], 'deposit' => $po_origin['deposit'], 'po_type' => $po_origin['po_type'], 'arrive_time' => $_REQUEST['arrive_days'], 'delivery_cost' => $_REQUEST['d_cost'], 'operator' => $_REQUEST['operator'], 'accos_po_id' => $po_origin['po_id'], 'accos_po_bn' => $po_origin['po_bn'], 'memo' => empty($_REQUEST['memo']) ? '' : ['op_content' => $_REQUEST['memo']], 'product_cost' => $product_price, 'purchase_time' => time(), 'po_species' => 2, 'op_name' => kernel::single('desktop_user')->get_name(), 'emergency' => empty($_REQUEST['emergency']) ? 'false' : $_REQUEST['emergency'], 'items' => $arr_items, ]; $rs = $oPo->savePo($data); if ($rs['status'] == 'success') { //--生成采购单日志记录 $log_msg = '通过原采购订单【' . $po_origin['po_bn'] . '】生成了编号为:' . $data['po_bn'] . '的采购补货单'; $opObj = app::get('ome')->model('operation_log'); $opObj->write_log('purchase_create@purchase', $data['po_id'], $log_msg); $this->end(true, '已完成'); } else { $this->end(false, $rs['msg'] != '' ? $rs['msg'] : '未完成', 'index.php?app=console&ctl=admin_purchase&act=add'); } } /** * 修改采购单 * */ public function editPo($po_id) { $this->begin('index.php?app=console&ctl=admin_purchase&act=index'); if (empty($po_id)) { $this->end(false, '操作出错,请重新操作'); } $poObj = app::get('purchase')->model('po'); $suObj = app::get('purchase')->model('supplier'); $brObj = app::get('ome')->model('branch'); $data = $poObj->dump($po_id, '*', array('po_items' => array('*'))); //当前供应商 $supplier_detail = $suObj->dump($data['supplier_id'], 'supplier_id,name'); $this->pagedata['supplier_detail'] = $supplier_detail; $this->pagedata['branch_mode'] = 'single'; $su = $suObj->dump($data['supplier_id'], 'name'); $br = $brObj->dump($data['branch_id'], 'name'); $data['branch_name'] = $br['name']; $data['supplier_name'] = $su['name']; //到货天数 $diff_time = $data['arrive_time'] - $data['purchase_time']; $data['diff_days'] = floor($diff_time / (24 * 60 * 60)); $this->pagedata['po_items'] = $data['po_items']; $data['memo'] = unserialize($data['memo']); if ($data['memo']) { foreach ($data['memo'] as $key => $v) { $str = unserialize($v['op_content']); if ($str) { $data['memo'][$key]['op_content'] = $str[0]['op_content']; } else { $data['memo'][$key]['op_content'] = $v['op_content']; } } } $this->pagedata['po'] = $data; $this->singlepage("admin/purchase/purchase_edit.html"); } /** * 修改采购补货单页面 * * @param $po_id * author : Joe * Date : 2022-01-27 10:42 */ public function editPoReplenishment($po_id) { $this->begin('index.php?app=console&ctl=admin_purchase&act=index'); if (empty($po_id)) { $this->end(false, '操作出错,请重新操作'); } $poObj = app::get('purchase')->model('po'); $suObj = app::get('purchase')->model('supplier'); $brObj = app::get('ome')->model('branch'); $data = $poObj->dump($po_id, '*', array('po_items' => array('*'))); $origin_data = $poObj->dump($data['accos_po_id'], '*', array('po_items' => array('*'))); $data['memo'] = unserialize($data['memo']); if ($data['memo']) { foreach ($data['memo'] as $key => $v) { $str = unserialize($v['op_content']); if ($str) { $data['memo'][$key]['op_content'] = $str[0]['op_content']; } else { $data['memo'][$key]['op_content'] = $v['op_content']; } } } //当前供应商 $supplier_detail = $suObj->dump($data['supplier_id'], 'supplier_id,name'); $branch_info = $brObj->dump($data['branch_id'], 'name,branch_id'); //到货天数 $diff_time = $data['arrive_time'] - $data['purchase_time']; $data['diff_days'] = floor($diff_time / (24 * 60 * 60)); $data['branch_name'] = $branch_info['name']; $data['supplier_name'] = $supplier_detail['name']; $this->pagedata['po'] = $data; $this->pagedata['origin_po'] = $origin_data; $this->pagedata['branch_mode'] = 'single'; $this->pagedata['po_items'] = $data['po_items']; $this->pagedata['supplier_detail'] = $supplier_detail; $this->singlepage("admin/purchase/purchase_replenishment_edit.html"); } /** * doEdit * @return mixed 返回值 */ public function doEdit() { $this->begin(); $po_id = $_POST['po_id']; $poObj = app::get('purchase')->model('po'); $po_itemObj = app::get('purchase')->model('po_items'); $payObj = app::get('purchase')->model('purchase_payments'); $data = $poObj->dump($po_id, '*', array('po_items' => array('*'))); if ($data['eo_status'] == '3') { $this->end(false, '此采购单已完成入库,不允许修改', 'index.php?app=console&ctl=admin_purchase&act=editPo'); } if ($data['eo_status'] == '4') { $this->end(false, '此采购单已取消入库,不允许修改', 'index.php?app=console&ctl=admin_purchase&act=editPo'); } if ($data['statement'] == '3') { $this->end(false, '此采购单已结算,不允许修改', 'index.php?app=console&ctl=admin_purchase&act=editPo'); } if ($data['check_status'] == 2) { $this->end(false, '此采购单已审核,不允许修改', 'index.php?app=console&ctl=admin_purchase&act=editPo'); } $at = $_POST['at']; $pr = $_POST['pr']; $d_cost = $_POST['d_cost']; $deposit = $_POST['price']; $total = 0; if (empty($at) || empty($pr)) { $this->end(false, '采购单中必须有商品', 'index.php?app=console&ctl=admin_purchase&act=editPo'); } foreach ($data['po_items'] as $v) { $p_id = $v['product_id']; if (empty($at[$p_id])) { if ($v['status'] != 1) { $this->end(false, $v['bn'] . ':已入库,不能删除', 'index.php?app=console&ctl=admin_purchase&act=editPo'); } $del_item_id[] = $v; } } if ($at) { foreach ($at as $k => $a) { if (!is_numeric($a) || $a < 1) { $this->end(false, '采购数量必须为数字且大于0', 'index.php?app=console&ctl=admin_purchase&act=editPo'); } if (!is_numeric($pr[$k]) || $pr[$k] < 0) { $this->end(false, '单价必须为数字且大于0', 'index.php?app=console&ctl=admin_purchase&act=editPo'); } $pi = $po_itemObj->dump(array('po_id' => $po_id, 'product_id' => $k)); if ($pi) { if ($a < ($pi['out_num'] + $pi['in_num'])) { $this->end(false, $pi['bn'] . ':数量不能小于已入库数量', 'index.php?app=console&ctl=admin_purchase&act=editPo'); } $edit_pi[$k]['item_id'] = $pi['item_id']; } $edit_pi[$k]['num'] = $a; $edit_pi[$k]['price'] = $pr[$k]; $ids[] = $k; $total += $a * $pr[$k]; } } if ($data['po_type'] == 'credit') { if ($deposit > ($total + $d_cost)) { $this->end(false, '预付款不能大于总金额', 'index.php?app=console&ctl=admin_purchase&act=editPo'); } } if ($data['check_status'] == 2) { $filter['po_id'] = $po_id; $filter['po_type'] = $data['po_type']; $pay = $payObj->dump($filter); } $memo = array(); $oldmemo = unserialize($data['memo']); if ($oldmemo) { foreach ($oldmemo as $k => $v) { $memo[] = $v; } } $newmemo = htmlspecialchars($_POST['memo']); if ($newmemo) { $op_name = kernel::single('desktop_user')->get_name(); $memo[] = array('op_name' => $op_name, 'op_time' => date('Y-m-d H:i', time()), 'op_content' => $newmemo); } $edit_memo = serialize($memo); $poo = array(); $poo['po_id'] = $po_id; $poo['name'] = $_POST['purchase_name']; $poo['emergency'] = $_POST['emergency']; $poo['operator'] = $_POST['operator']; $poo['memo'] = $edit_memo; //预计到货天数 $_POST['arrive_days'] = intval($_POST['arrive_days']); $poo['arrive_time'] = ($_POST['arrive_days'] * 24 * 60 * 60) + time(); if ($data['check_status'] == 2) { foreach ($data['po_items'] as $v) { if (in_array($v['product_id'], $ids)) { //$poObj->updateBranchProductArriveStore($data['branch_id'], $v['product_id'], $v['num'], '-'); } } } if ($del_item_id) { foreach ($del_item_id as $item) { $po_itemObj->delete(array('item_id' => $item['item_id'])); } } if ($ids) { $basicMaterialLib = kernel::single('material_basic_material'); $basicMaterialBarcode = kernel::single('material_basic_material_barcode'); foreach ($ids as $i) { $p = $basicMaterialLib->getBasicMaterialExt($i); $row = $edit_pi[$i]; $row['barcode'] = $p['barcode']; $row['po_id'] = $po_id; $row['product_id'] = $i; $row['price'] = $pr[$i]; $row['status'] = '1'; $row['bn'] = $p['material_bn']; $row['name'] = $p['material_name']; $row['spec_info'] = $p['spec_info']; $row['purchasing_price'] = $p['purchasing_price']; $po_itemObj->save($row); $row = null; if ($data['check_status'] == 2) { //$poObj->updateBranchProductArriveStore($data['branch_id'], $i, $edit_pi[$i]['num'], '+'); } } } if ($data['po_type'] == 'cash') { if ($data['check_status'] == 2) { $row['payment_id'] = $pay['payment_id']; $row['payable'] = $total + $d_cost; $row['deposit'] = $total; $row['product_cost'] = $total; $row['delivery_cost'] = $d_cost; } $poo['amount'] = $total + $d_cost; $poo['deposit'] = 0; } elseif ($data['po_type'] == 'credit') { $credit_sObj = app::get('purchase')->model('credit_sheet'); if ($data['check_status'] == 2) { $row['payment_id'] = $pay['payment_id']; $row['payable'] = $deposit; $row['deposit'] = $deposit; $row['deposit_balance'] = $deposit; #预付款初始化 $row['product_cost'] = 0; $row['delivery_cost'] = 0; } $poo['amount'] = $total; $poo['deposit'] = empty($deposit) ? $data['deposit'] : $deposit; } $poo['delivery_cost'] = $d_cost; $poo['product_cost'] = $total; $re = $poObj->ExistFinishPurchase($po_id); if ($re) { $poo['eo_status'] = '3'; if ($data['po_status'] == '1') { $poo['po_status'] = '4'; } } if ($data['check_status'] == 2) { $payObj->save($row); } $poObj->save($poo); $eoObj = app::get('purchase')->model('eo'); $eo_iObj = app::get('purchase')->model('eo_items'); $eos = $eoObj->getList('eo_id', array('po_id' => $po_id), 0, -1); if ($eos) { foreach ($eos as $it) { $tmp_num = 0; if ($data['po_type'] == 'credit') { $cs = $credit_sObj->dump(array('eo_id' => $it['eo_id'])); if ($cs['statement_status'] == 2) { continue; } } $eoi = $eo_iObj->getList('*', array('eo_id' => $it['eo_id']), 0, -1); if ($eoi) { foreach ($eoi as $ei) { $num = $ei['entry_num'] - $ei['out_num']; $price = $pr[$ei['product_id']]; $tmp_num += $num * $price; $eoii['item_id'] = $ei['item_id']; $eoii['purchase_num'] = $at[$ei['product_id']]; $eo_iObj->save($eoii); $eoii = null; } } $eoo['eo_id'] = $it['eo_id']; $eoo['amount'] = $tmp_num; if ($data['po_type'] == 'credit') { $eoo['amount'] = $tmp_num + $d_cost; $css['cs_id'] = $cs['cs_id']; $css['payable'] = $tmp_num + $d_cost; $credit_sObj->save($css); } $eoObj->save($eoo); } } $log_msg = '修改了编号为:' . $data['po_bn'] . '的采购单'; $opObj = app::get('ome')->model('operation_log'); $opObj->write_log('purchase_modify@purchase', $po_id, $log_msg); $this->end(true, '已完成'); } /** * 保存详情 * */ public function doDetail() { $this->begin('index.php?app=console&ctl=admin_purchase'); if (empty($_POST['id'])) { $this->end(false, '操作出错,请重新操作'); } if ($_POST['memo'] == '') { $this->end(true, '操作完成'); } $poObj = app::get('purchase')->model('po'); $po['po_id'] = $_POST['id']; $po['memo'] = $_POST['oldmemo'] . '
' . $_POST['memo'] . '   (' . date('Y-m-d H:i', time()) . ' by ' . kernel::single('desktop_user')->get_name() . ')'; $poObj->save($po); $this->end(true, '操作成功'); } /* * 追加备注 append_memo */ public function append_memo() { $poObj = app::get('purchase')->model('po'); $po['po_id'] = $_POST['id']; if ($_POST['oldmemo']) { $oldmemo = $_POST['oldmemo'] . '
'; } $memo = $oldmemo . $_POST['memo'] . '   (' . date('Y-m-d H:i', time()) . ' by ' . kernel::single('desktop_user')->get_name() . ')'; $po['memo'] = $memo; $poObj->save($po); echo $memo; } /** * 打印采购单 * * @param int $po_id */ public function printItem($po_id, $type = 'po') { $poObj = app::get('purchase')->model('po'); $suObj = app::get('purchase')->model('supplier'); $brObj = app::get('ome')->model('branch'); $basicMaterialLib = kernel::single('material_basic_material'); $goodsObj = app::get('ome')->model('goods'); $poo = $poObj->dump($po_id, '*', array('po_items' => array('*'))); #检测货号、规格、商品名是否变化 foreach ($poo['po_items'] as $key => $product_items) { $goodsInfo = array(); $last_product_info = $basicMaterialLib->getBasicMaterialExt($product_items['product_id']); if ($goodsInfo) { $product_items['goods_bn'] = $goodsInfo[0]['bn']; $product_items['unit'] = $goodsInfo[0]['unit']; } else { $product_items['goods_bn'] = ''; $product_items['unit'] = ''; } #检测货号是否变化 if (strcasecmp($product_items['bn'], $last_product_info['material_bn']) != 0) { $product_items['bn'] = $product_items['bn'] . '(' . $last_product_info['bn'] . ')'; } #检测规格是否变化 if (strcasecmp($product_items['spec_info'], $last_product_info['spec_info']) != 0) { if (empty($product_items['spec_info'])) { #如果原来没有规格值,则直接显示该商品最新的规格值 $product_items['spec_info'] = $last_product_info['spec_info']; } else { $product_items['spec_info'] = $product_items['spec_info'] . '(' . $last_product_info['spec_info'] . ')'; } } #检测商品名称是否变化 if (strcasecmp($product_items['name'], $last_product_info['material_name']) != 0) { $product_items['name'] = $product_items['name'] . '(' . $last_product_info['material_name'] . ')'; } $poo['po_items'][$key] = $product_items; } $su = $suObj->dump($poo['supplier_id'], 'name'); $bran = $brObj->dump($poo['branch_id'], 'name'); $this->pagedata['type'] = $type; $poo['supplier'] = $su['name']; $poo['branch'] = $bran['name']; $poo['memo'] = unserialize($poo['memo']); $this->pagedata['po'] = $poo; $this->pagedata['time'] = time(); $this->pagedata['base_dir'] = kernel::base_url(); # 改用新打印模板机制 chenping kernel::single('ome_print_otmpl')->printOTmpl($_GET['otmplId'], 'purchase', $this); } /** * cancel * @param mixed $po_id ID * @param mixed $type type * @return mixed 返回值 */ public function cancel($po_id, $type = 'confirm') { //获取采购单供应商经办人/负责人 $oPo = app::get('purchase')->model('po'); $po = $oPo->dump($po_id, 'supplier_id'); $oSupplier = app::get('purchase')->model('supplier'); $supplier = $oSupplier->dump($po['supplier_id'], 'operator'); //if (!$supplier['operator']) $supplier['operator'] = '未知'; $this->pagedata['operator'] = kernel::single('desktop_user')->get_name(); $this->pagedata['type'] = $type; $this->pagedata['id'] = $po_id; $this->display("admin/purchase/purchase_cancel.html"); } /** * 添加Same * @param mixed $po_id ID * @return mixed 返回值 */ public function addSame($po_id) { $this->begin('index.php?app=console&ctl=admin_purchase&act=index'); if (empty($po_id)) { $this->end(false, '操作出错,请重新操作'); } $suObj = app::get('purchase')->model('supplier'); $supp = $suObj->getList('supplier_id, name', array(), 0, -1); $brObj = app::get('ome')->model('branch'); $row = $brObj->getList('branch_id, name', array('type' => 'main', 'b_type' => 1), 0, -1); $poObj = app::get('purchase')->model('po'); $data = $poObj->dump($po_id, '*', array('po_items' => array('*'))); //当前供应商 $supplier_detail = $suObj->dump($data['supplier_id'], 'supplier_id,name,arrive_days'); //获取设置的采购方式 $po_type = app::get('ome')->getConf('purchase.po_type'); if (!$po_type) { $po_type = 'credit'; } $this->pagedata['po_type'] = $po_type; //获取操作员管辖仓库 $is_super = kernel::single('desktop_user')->is_super(); if (!$is_super) { $iostockObj = kernel::single('console_iostockdata'); $branch_list = $iostockObj->getBranchByUser(); } $this->pagedata['branch_list'] = $branch_list; $is_super = 1; $this->pagedata['is_super'] = $is_super; $diff_time = $data['arrive_time'] - $data['purchase_time']; $data['diff_days'] = floor($diff_time / (24 * 60 * 60)); //print_r($data);die; $this->pagedata['branch_mode'] = 'single'; $this->pagedata['supplier'] = $supp; $this->pagedata['supplier_detail'] = $supplier_detail; $this->pagedata['branch'] = $row; $this->pagedata['po_items'] = $data['po_items']; if($data['po_species'] == '1'){ $this->pagedata['po'] = $data; $this->pagedata['cur_date'] = date('Ymd', time()) . '采购单'; $this->singlepage("admin/purchase/purchase_addsame.html"); }else{ $origin_data = $poObj->dump($data['accos_po_id'], '*', array('po_items' => array('*'))); $this->pagedata['origin_po'] = $origin_data; $branch_info = $brObj->dump($data['branch_id'], 'name,branch_id'); $data['branch_name'] = $branch_info['name']; $this->pagedata['cur_date'] = date('Ymd', time()) . '采购补货单'; $this->pagedata['po'] = $data; $this->singlepage("admin/purchase/purchase_replenishment_addsame.html"); } } /** * doSame * @return mixed 返回值 */ public function doSame() { $this->begin('index.php?app=console&ctl=admin_purchase&act=index'); $at = $_POST['at']; $pr = $_POST['pr']; $type = $_POST['type']; $name = $_POST['purchase_name']; $emergency = $_POST['emergency']; $supplier = $_POST['supplier']; $branch = $_POST['branch']; $price = $_POST['price']; $memo = $_POST['memo']; $_POST['arrive_days'] = intval($_POST['arrive_days']); $arrive = ($_POST['arrive_days'] * 24 * 60 * 60) + time(); $operator = $_POST['operator']; $d_cost = $_POST['d_cost']; $total = 0; if (empty($at) || empty($pr)) { $this->end(false, '采购单中必须有商品', 'index.php?app=console&ctl=admin_purchase&act=add'); } if ($at) { foreach ($at as $k => $a) { if (!is_numeric($a) || $a < 1) { $this->end(false, '采购数量必须为数字且大于0', 'index.php?app=console&ctl=admin_purchase&act=add'); } if (!is_numeric($pr[$k]) || $pr[$k] < 0) { $this->end(false, '单价必须为数字且大于0', 'index.php?app=console&ctl=admin_purchase&act=add'); } $ids[] = $k; $total += $a * $pr[$k]; } } if ($type == 'credit') { if ($_POST['price'] == '') { $price = 0; } } if ($branch == '') { $this->end(false, '请选择仓库', 'index.php?app=console&ctl=admin_purchase&act=add'); } if ($price != '' && !is_numeric($price)) { $this->end(false, '预付款必须为数字', 'index.php?app=console&ctl=admin_purchase&act=add'); } if ($price > $total) { $this->end(false, '预付款金额不得大于商品总额', 'index.php?app=console&ctl=admin_purchase&act=add'); } //判断供应商是否存在 $oSupplier = app::get('purchase')->model('supplier'); $supplier = $oSupplier->dump(array('name' => $supplier), 'supplier_id'); if (!$supplier['supplier_id']) { $this->end(false, '输入的供应商不存在!', 'index.php?app=console&ctl=admin_purchase&act=add'); } $supplier = $_POST['supplier_id']; if ($arrive == '') { $this->end(false, '请输入预计到货天数', 'index.php?app=console&ctl=admin_purchase&act=add'); } $poObj = app::get('purchase')->model('po'); $po_bn = $poObj->gen_id(); $data['po_bn'] = $po_bn; $data['supplier_id'] = $supplier; $data['operator'] = $operator; //kernel::single('desktop_user')->get_name(); $data['po_type'] = $type; $data['name'] = $name; $data['emergency'] = $emergency; $data['purchase_time'] = time(); $data['branch_id'] = $branch; $data['arrive_time'] = $arrive; $data['deposit'] = $type == 'cash' ? 0 : $price; $data['deposit_balance'] = $type == 'cash' ? 0 : $price; $data['amount'] = $type == 'cash' ? bcadd($total, $d_cost, 3) : $total; $data['delivery_cost'] = $d_cost; $data['product_cost'] = $total; if ($memo) { $op_name = kernel::single('desktop_user')->get_login_name(); $newmemo = array(); $newmemo[] = array('op_name' => $op_name, 'op_time' => date('Y-m-d H:i', time()), 'op_content' => $memo); } $data['memo'] = serialize($newmemo); $rs = $poObj->save($data); if ($rs) { $po_id = $data['po_id']; $po_itemObj = app::get('purchase')->model('po_items'); $basicMaterialLib = kernel::single('material_basic_material'); if ($ids) { foreach ($ids as $i) { //插入采购单详情 $p = $basicMaterialLib->getBasicMaterialExt($i); $row['barcode'] = $p['barcode']; $row['po_id'] = $po_id; $row['product_id'] = $i; $row['num'] = $at[$i]; $row['in_num'] = 0; $row['out_num'] = 0; $row['price'] = $pr[$i]; $row['status'] = '1'; $row['bn'] = $p['material_bn']; $row['name'] = $p['material_name']; $row['spec_info'] = $p['spec_info']; $row['purchasing_price'] = $p['purchasing_price']; $po_itemObj->save($row); $row = null; } } //--生成采购单日志记录 $payment_log = $type == 'cash' ? '现款' : '预付款'; $log_msg = '生成了编号为:' . $po_bn . '的采购单'; $opObj = app::get('ome')->model('operation_log'); $opObj->write_log('purchase_create@purchase', $po_id, $log_msg); $this->end(true, '已完成'); } $this->end(true, '未完成', 'index.php?app=console&ctl=admin_purchase&act=add'); } /** * 根据条码查询商品详情 */ public function getProduct() { $basicMaterialSelect = kernel::single('material_basic_select'); $basicMaterialBarcode = kernel::single('material_basic_material_barcode'); $pro_barcode = trim($_POST['barcode']); $supplier_id = $_POST['supplier_id']; //基础物料关联条码 if ($pro_barcode) { //查询条形码对应的bm_id $bm_ids = $basicMaterialBarcode->getBmidListByBarcode($pro_barcode); if (empty($bm_ids)) { return ''; } $filter = array('bm_id' => $bm_ids); $data = $basicMaterialSelect->getlist_ext('bm_id, material_bn, material_name, visibled, retail_price, cost, specifications', $filter); if (!empty($data)) { foreach ($data as $k => $item) { $item['num'] = 1; if ($supplier_id > 0) { $item['price'] = app::get('purchase')->model('po')->getPurchsePriceBySupplierId($supplier_id, $item['product_id'], 'desc'); if (!$item['price']) { $item['price'] = 0; } } else { $item['price'] = $item['cost']; } #查询关联的条形码 $item['barcode'] = $basicMaterialBarcode->getBarcodeById($item['product_id']); $rows[] = $item; } echo json_encode($rows); } } } /** * 入库确认 * */ public function purchaseConfirm($po_id) { $poObj = app::get('purchase')->model('po'); $eoObj = app::get('purchase')->model('eo'); $suObj = app::get('purchase')->model('supplier'); $brObj = app::get('ome')->model('branch'); $po_itemsObj = app::get('purchase')->model('po_items'); $po_items = $po_itemsObj->getList('*', array('po_id' => $po_id, 'defective_num|than' => '0'), 0, -1); $po = array(); $po['po_id'] = $po_id; $po['po_items'] = $po_items; $this->pagedata['po'] = $po; $this->singlepage('admin/purchase/purchase_confirm.html'); } /** * 执行采购入库确认 */ public function doPurchaseconfirm() { $this->begin(); $po_id = $_POST['po_id']; $Opo = app::get('purchase')->model('po'); $iostockObj = kernel::single('console_iostockdata'); $aRow = $Opo->dump($po_id, '*', array('po_items' => array('defective_num,num,bn,product_id,price,name'))); if ($aRow['defective_status'] != '1') { $this->end(false, '此单据已确认或无需确认!'); } $damagedbranch = $iostockObj->getDamagedbranch($aRow['branch_id']); if (empty($damagedbranch)) { $this->end(false, $aRow['bn'] . '有不良品,但未设置主仓对应的残仓'); } $iostock_data = array(); foreach ($aRow['po_items'] as $items) { if ($items['defective_num'] > 0) { $items_data[] = array( 'nums' => $items['defective_num'], 'bn' => $items['bn'], 'price' => $items['price'], 'product_id' => $items['product_id'], 'purchase_num' => $items['num'], 'product_name' => $items['name'], ); } } $iostock_data['items'] = $items_data; if (count($items_data) > 0) { $result = kernel::single('console_receipt_purchase')->save_eo($po_id, 'defective', $iostock_data); if ($result) { #更新确认状态 $io_update_data = array( 'defective_status' => '2', ); $Opo->update($io_update_data, array('po_id' => $po_id)); $this->end(true, '确认成功'); } else { $this->end(false, '确认失败'); } } else { $this->end(false, '没有需要确认的货品!'); } } /** * 差异查看 */ public function difference($po_id) { $poObj = app::get('purchase')->model('po'); $eoObj = app::get('purchase')->model('eo'); $suObj = app::get('purchase')->model('supplier'); $brObj = app::get('ome')->model('branch'); $po = $poObj->dump($po_id, '*', array('po_items' => array('*'))); $eos = $eoObj->getList('eo_id,eo_bn,entry_time', array('po_id' => $po_id), 0, -1); $total_num = 0; if ($po['po_items']) { foreach ($po['po_items'] as $k => $v) { $total_num += $v['num']; } } $su = $suObj->dump($po['supplier_id'], 'name'); $br = $brObj->dump($po['branch_id'], 'name'); $po['branch_name'] = $br['name']; $po['supplier_name'] = $su['name']; $po['total_num'] = $total_num; $po['memo'] = unserialize($po['memo']); $this->pagedata['po'] = $po; $this->pagedata['eo'] = count($eos); $this->pagedata['emslist'] = $eos; $this->pagedata['count'] = count($eos); //物流费用计算 $this->pagedata['delivery_cost'] = count($eos) * $po['delivery_cost']; $this->singlepage('admin/purchase/purchase_difference.html'); } /* * 供应商查找 */ public function getSupplier() { $name = $_GET['name']; if ($name) { $supplier = app::get('purchase')->model('supplier'); $data = $supplier->getSupplier($name); echo "window.autocompleter_json=" . json_encode($data); } } /* * 供应商查找 by id */ /** * 获取SupplierById * @return mixed 返回结果 */ public function getSupplierById() { $supplier_id = $_POST['id']; if ($supplier_id) { $supplier = app::get('purchase')->model('supplier'); $data = $supplier->dump(array('supplier_id' => $supplier_id), 'supplier_id,name'); //echo json_encode($data); echo "{id:'" . $data['supplier_id'] . "',name:'" . $data['name'] . "'}"; } } /** * doRefund * @return mixed 返回值 */ public function doRefund() { $po_id = $_POST['po_id']; $memo = $_POST['memo']; if (!$_POST['memo_flag']) { $memo = ''; } $operator = $_POST['operator']; $this->begin('index.php?app=console&ctl=admin_purchase&act=index'); if (empty($po_id)) { $this->end(false, '操作出错,请重新操作'); } if ($operator == '') { $this->end(false, '操作出错,请重新操作'); } $poObj = app::get('purchase')->model('po'); $po = $poObj->dump($po_id, '*', array('po_items' => array('*'))); #查看状态是否已审核 $check_status = $po['check_status']; if ($po['eo_status'] < 3) { //TODO 一期为取消所有未入库的商品,以后会通过POST数据进行入库取消 //生成退货单与退货明细 $po_itemObj = app::get('purchase')->model('po_items'); $returnObj = app::get('purchase')->model('returned_purchase'); $paymentObj = app::get('purchase')->model('purchase_payments'); $refundObj = app::get('purchase')->model('purchase_refunds'); $rp_itemObj = app::get('purchase')->model('returned_purchase_items'); $return_flag = false; //无任何操作时,不生成退款单标志 $pay = $paymentObj->dump(array('po_id' => $po_id), '*'); if ($po['eo_status'] == '1' && $pay['statement_status'] != '2') { //没有入库并且没有结算付款单 $return_flag = true; if ($pay['payment_id']) { $paym['payment_id'] = $pay['payment_id']; $paym['statement_status'] = '3'; $paymentObj->save($paym); } } //如果采购单已入库或者付款单已结算,生成退货单与退款单 $return['supplier_id'] = $po['supplier_id']; $return['operator'] = $operator; //kernel::single('desktop_user')->get_name(); $return['po_type'] = $po['po_type']; $return['purchase_time'] = $po['purchase_time']; $return['returned_time'] = time(); $return['branch_id'] = $po['branch_id']; $return['arrive_time'] = $po['arrive_time']; $return['amount'] = 0; $return['rp_type'] = 'po'; $return['object_id'] = $po_id; $rp_id = $returnObj->createReturnPurchase($return); //生成退货单 $po_items = $po['po_items']; //$poObj->getPoItemsByPoId($po_id); $money = 0; if ($po_items) { foreach ($po_items as $item) { $num = $item['num'] - $item['in_num'] - $item['out_num']; $num = $num < 0 ? 0 : $num; if (($item['status'] == '1' || $item['status'] == '2') && $num != 0) { //判断此商品是否可以取消入库 $row['rp_id'] = $rp_id; $row['product_id'] = $item['product_id']; $row['num'] = $num; $row['price'] = $item['price']; $money += $item['price'] * $num; $row['bn'] = $item['bn']; $row['name'] = $item['name']; $row['spec_info'] = $item['spec_info']; $rp_itemObj->save($row); $row = null; $r['item_id'] = $item['item_id']; $r['out_num'] = $item['out_num'] + $num; $r['status'] = ($r['out_num'] + $item['in_num']) >= $item['num'] ? '3' : $item['status']; $po_itemObj->save($r); $r = null; } } } //取消在途 $storeManageLib = kernel::single('ome_store_manage'); $storeManageLib->loadBranch(array('branch_id' => $po['branch_id'])); $params = array(); $params['node_type'] = 'deleteArriveStore'; $params['params'] = array( 'obj_id' => $po['po_id'], 'branch_id' => $po['branch_id'], 'obj_type' => 'purchase', ); $err_msg = ''; $storeManageLib->processBranchStore($params, $err_msg); $data['rp_id'] = $rp_id; $data['amount'] = $money; $data['product_cost'] = $money; $returnObj->save($data); //更新退货单 //日志备注 $log_msg = ''; $log_msg .= '
生成了一张编号为:' . $return['rp_bn'] . '的退货单'; if ($return_flag == false) { //生成退款单 $refund['add_time'] = time(); $refund['po_type'] = $po['po_type']; $refund['delivery_cost'] = 0; $refund['type'] = 'po'; $refund['rp_id'] = $rp_id; $refund['supplier_id'] = $po['supplier_id']; if ($po['po_type'] == 'cash') { $refund['refund'] = $money; $refund['product_cost'] = $money; } elseif ($po['po_type'] == 'credit' && $po['deposit_balance'] != 0) { $refund['refund'] = $po['deposit_balance']; $refund['product_cost'] = 0; } $refund_id = $refundObj->createRefund($refund); $poo['amount'] = $po['amount'] - $money; $poo['product_cost'] = $po['product_cost'] - $money; $poo['deposit_balance'] = 0; } else { $poo['amount'] = 0; $poo['product_cost'] = 0; } $poo['po_id'] = $po_id; if ($_POST['memo']) { $op_name = $operator; $oldmemo = unserialize($po['memo']); $memo = array(); if ($oldmemo) { foreach ($oldmemo as $k => $v) { $memo[] = $v; } } $memo[] = array('op_name' => $op_name, 'op_time' => date('Y-m-d H:i', time()), 'op_content' => htmlspecialchars($_POST['memo'])); $poo['memo'] = serialize($memo); } if ($po['po_status'] == '1') { $poo['po_status'] = '2'; //入库取消 } if ($po['eo_status'] == '2') { $poo['eo_status'] = '3'; //已入库 } elseif ($po['eo_status'] == '1' || $po['eo_status'] == '0') { $poo['eo_status'] = '4'; //未入库 } $poObj->save($poo); //--采购单入库取消日志记录 if ($refund_id) { $refund_bn = $refundObj->dump($refund_id, 'refund_bn'); $log_msg = '
生成了一张编号为:' . $refund_bn['refund_bn'] . '的退款单'; } $log_msg2 = '对采购单编号为:' . $po['po_bn'] . '进行了入库取消
'; $opObj = app::get('ome')->model('operation_log'); $opObj->write_log('purchase_cancel@purchase', $po_id, $log_msg2 . $log_msg); $this->end(true, '入库取消已完成'); } else { $this->end(false, '此采购单已完成入库,请走采购退货流程'); } } /** * 检测是否可以取消 * */ public function checkCancel($po_id) { $poObj = app::get('purchase')->model('po'); $po = $poObj->dump($po_id, '*', array('po_items' => array('*'))); if ($po['check_status'] == '2') { #已审核,需要请求第三方 if ($po['eo_status'] == '2' || $po['eo_status'] == '3' || $po['eo_status'] == '4') { $result = array('rsp' => 'fail', 'err_msg' => '单据所在状态不允许此次操作'); } else { $po_bn = $po['po_bn']; $purchaseObj = kernel::single('console_event_trigger_purchase'); $branch_id = $po['branch_id']; $data = array( 'io_type' => 'PURCHASE', 'io_bn' => $po_bn, 'branch_id' => $branch_id, 'out_iso_bn' => $po['out_iso_bn'], ); $result = $purchaseObj->cancel($data, true); } } else { $result = array('rsp' => 'succ'); } echo json_encode($result); } /** * 单据发送至第三方. * @param * @return * @access public * @author sunjing@shopex.cn */ public function batch_sync() { // $this->begin(''); $ids = $_POST['po_id']; //check if(empty($ids)){ $this->splash('error', null, '请选择需要操作的记录!'); } if($_POST['isSelectedAll'] == '_ALL_'){ $this->splash('error', null, '不能使用全选功能,请选择需要操作的记录!'); } $poObj = app::get('purchase')->model('po'); $po_list = $poObj->getList('po_id', array('po_id'=>$ids, 'check_status' => array('2'), 'po_status' => array('1'), 'eo_status' => array('0', '1'))); //已审核单据 if (!empty($po_list)) { foreach ($po_list as $po_id) { kernel::single('console_event_trigger_purchase')->create(array('po_id' => $po_id), false); } } $this->splash('success', null, '命令已经被成功发送!!'); } /** * 基础物料列表弹窗数据获取方法 * * @param Void * @return String */ public function findMaterial($supplier_id = null) { #供应商频道 if ($supplier_id) { //根据供应商商品 $oSupplierGoods = app::get('purchase')->model('supplier_goods'); $supplier_goods = $oSupplierGoods->getSupplierGoods($supplier_id); $base_filter['bm_id'] = $supplier_goods['bm_id']; } //添加补货采购单,默认带入原采购单商品 if(!empty($_GET['po_id'])){ $oPo = app::get('purchase')->model('po'); $po_items = $oPo->getPoItemByPoId($_GET['po_id']); $product_ids = array_column($po_items,'product_id'); $base_filter['bm_id'] = $product_ids; // pr($product_ids,1); } //只能选择可见的物料作为组合的明细内容 $base_filter['visibled'] = 1; if ($_GET['type'] == 1) { $base_filter['type'] = 1; }elseif ($_GET['type'] == 4) { $base_filter['type'] = 4; } $params = array( 'title' => '基础物料列表', 'use_buildin_new_dialog' => false, 'use_buildin_set_tag' => false, 'use_buildin_recycle' => false, 'use_buildin_export' => false, 'use_buildin_import' => false, 'use_buildin_filter' => true, 'base_filter' => $base_filter, ); $this->finder('material_mdl_basic_material', $params); } /** * iostockConfirm * @param mixed $po_id ID * @return mixed 返回值 */ public function iostockConfirm($po_id) { $poObj = app::get('purchase')->model('po'); $eoObj = app::get('purchase')->model('eo'); $suObj = app::get('purchase')->model('supplier'); $brObj = app::get('ome')->model('branch'); $po_itemsObj = app::get('purchase')->model('po_items'); $po_items = $po_itemsObj->getList('*', array('po_id' => $po_id), 0, -1); $po = array(); $po['po_id'] = $po_id; $po['po_items'] = $po_items; $this->pagedata['po'] = $po; $this->singlepage('admin/purchase/iostock_confirm.html'); } /** * doIostockconfirm * @return mixed 返回值 */ public function doIostockconfirm() { $this->begin(); $po_id = $_POST['po_id']; $poObj = app::get('purchase')->model('po'); $iostockObj = kernel::single('console_iostockdata'); $oProducts = app::get('ome')->model("products"); $aRow = $poObj->dump($po_id, '*', array('po_items' => array('in_num,defective_num,num,bn,product_id,price,name'))); if ($aRow['po_status'] == '5') { $this->end(false, '单据已经完成无须确认!'); } $_inner_key = sprintf("purchase_%s", $po_id); $aData = cachecore::fetch($_inner_key); if ($aData === false) { cachecore::store($_inner_key, 'purchase', 5); } else { $this->end(false, '此单据已在确认中!'); } $iostock_data = array(); foreach ($aRow['po_items'] as $items) { if ($items['in_num'] > 0) { $items_data[] = array( 'nums' => $items['in_num'], 'bn' => $items['bn'], 'price' => $items['price'], 'product_id' => $items['product_id'], 'purchase_num' => $items['num'], 'product_name' => $items['name'], 'effective_num' => $items['in_num'], ); } } $iostock_data['items'] = $items_data; if (count($items_data) > 0) { $result = kernel::single('console_receipt_purchase')->save_eo($po_id, 'normal', $iostock_data); if ($result) { $oldmemo = $aRow['memo']; if (!$oldmemo) { $oldmemo = unserialize($oldmemo); } $memo = serialize($oldmemo . '入库确认'); $poObj->update(array('eo_status' => '3', 'po_status' => '4'), array('po_id' => $po_id)); $purchaseObj = kernel::single('console_receipt_purchase'); if ($purchaseObj->checkExist($aRow['po_bn'])) { $purchaseObj->cleanArriveStore($items_data, 'FINISH'); } $this->end(true, '确认成功'); } else { $this->end(false, '确认失败'); } } else { $this->end(false, '没有需要确认的货品!'); } } /* * 采购单查询 by id */ function getPoBnById(){ $po_id = $_POST['id']; if ($po_id){ $poObj = app::get('purchase')->model('po'); $data = $poObj->dump(array('po_id'=>$po_id), 'po_bn'); //echo json_encode($data); echo "{id:'".$po_id."',name:'".$data['po_bn']."'}"; } } /** * 获取POById * @return mixed 返回结果 */ public function getPOById(){ $po_id = $_POST['id']; if ($po_id){ $poObj = app::get('purchase')->model('po'); $data = $poObj->dump($po_id,'po_id',array('po_items'=>array('*'))); $this->splash('success',null,'成功','',$data); } } }