mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-22 18:35:35 +08:00
1553 lines
63 KiB
PHP
1553 lines
63 KiB
PHP
<?php
|
||
/**
|
||
* Copyright © ShopeX (http://www.shopex.cn). All rights reserved.
|
||
* See LICENSE file for license details.
|
||
*/
|
||
|
||
class console_ctl_admin_iostockorder extends desktop_controller
|
||
{
|
||
public $name = "出入库计划";
|
||
public $workground = "console_purchasecenter";
|
||
|
||
/**
|
||
* index
|
||
* @return mixed 返回值
|
||
*/
|
||
public function index() {}
|
||
/**
|
||
*
|
||
* 其他入库列表
|
||
*/
|
||
public function other_iostock()
|
||
{
|
||
$io = $_GET['io'];
|
||
if ($io) {
|
||
$title = '入库单';
|
||
} else {
|
||
$title = '出库单';
|
||
}
|
||
|
||
$params = array(
|
||
'actions' => array(
|
||
array(
|
||
'label' => '新建',
|
||
'href' => 'index.php?app=console&ctl=admin_iostockorder&act=iostock_add&p[0]=other&p[1]=' . $io,
|
||
'target' => '_blank',
|
||
),
|
||
array('label' => app::get('taoguaniostockorder')->_('导出模板'), 'href' => 'index.php?app=console&ctl=admin_iostockorder&act=exportTemplate&p[1]=' . $io, 'target' => '_blank'),
|
||
array('label' => '推送单据至WMS',
|
||
'submit' => 'index.php?app=console&ctl=admin_iostockorder&act=batch_sync&io=' . $io,
|
||
'confirm' => '你确定要对勾选的单子发送至仓储吗?',
|
||
'target' => 'refresh'),
|
||
array('label' => '批量审核',
|
||
'submit' => 'index.php?app=console&ctl=admin_iostockorder&act=batch_check&io=' . $io,
|
||
'confirm' => '你确定要对勾选的单子批量审核吗?',
|
||
'target' => 'refresh'),
|
||
array(
|
||
'label' => sprintf('%s导入',$title),
|
||
'href' => sprintf('%s&act=displayImportIso&io=%s', $this->url,$io),
|
||
'target' => sprintf('dialog::{width:760,height:300,title:\'%s导入\'}',$title),
|
||
),
|
||
),
|
||
'title' => $title,
|
||
'use_buildin_new_dialog' => false,
|
||
'use_buildin_set_tag' => false,
|
||
'use_buildin_recycle' => true,
|
||
'use_buildin_export' => true,
|
||
'use_buildin_import' => false,
|
||
'use_buildin_importxls' => true,
|
||
'use_buildin_filter' => true,
|
||
'finder_cols' => 'column_edit,column_confirm,name,iso_bn,oper,operator,original_bn,create_time,type_id',
|
||
);
|
||
/* 获取操作员管辖仓库 */
|
||
$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|in'] = $branch_ids;
|
||
} else {
|
||
$params['base_filter']['iso_id'] = 'false';
|
||
}
|
||
}
|
||
|
||
$iostock_type = kernel::single('taoguaniostockorder_iostockorder')->get_create_iso_type($io, true);
|
||
|
||
if ($_POST['type_id'] && in_array($_POST['type_id'], $iostock_type)) {
|
||
$params['base_filter']['type_id'] = $_POST['type_id'];
|
||
|
||
} else {
|
||
$params['base_filter']['type_id'] = $iostock_type;
|
||
}
|
||
|
||
#$params['base_filter']['confirm'] = 'N';
|
||
//$this->workground = "console_purchasecenter";
|
||
$this->finder('taoguaniostockorder_mdl_iso', $params);
|
||
}
|
||
|
||
/**
|
||
* allocate_iostock
|
||
* @return mixed 返回值
|
||
*/
|
||
public function allocate_iostock()
|
||
{
|
||
$io = $_GET['io'];
|
||
$iostock_instance = kernel::single('siso_receipt_iostock');
|
||
|
||
if ($io) {
|
||
$title = '调拨入库';
|
||
eval('$type=' . get_class($iostock_instance) . '::ALLOC_STORAGE;');
|
||
} else {
|
||
$title = '调拨出库';
|
||
eval('$type=' . get_class($iostock_instance) . '::ALLOC_LIBRARY;');
|
||
}
|
||
$actions = array();
|
||
$actions[] = array('label' => '推送单据至WMS',
|
||
'submit' => 'index.php?app=console&ctl=admin_iostockorder&act=batch_sync&io=' . $io,
|
||
'confirm' => '你确定要对勾选的单子发送至仓储吗?',
|
||
'target' => 'refresh');
|
||
$params = array(
|
||
'title' => $title,
|
||
'use_buildin_new_dialog' => false,
|
||
'use_buildin_set_tag' => false,
|
||
'use_buildin_recycle' => true,
|
||
'use_buildin_export' => false,
|
||
'use_buildin_import' => false,
|
||
'use_buildin_filter' => true,
|
||
'actions' => $actions,
|
||
'finder_cols' => 'column_edit,column_confirm,name,iso_bn,oper,operator,original_bn,create_time,type_id',
|
||
);
|
||
/* 获取操作员管辖仓库 */
|
||
$oBranch = app::get('ome')->model('branch');
|
||
$is_super = kernel::single('desktop_user')->is_super();
|
||
if (!$is_super) {
|
||
$branch_ids = $oBranch->getBranchByUser(true);
|
||
$params['base_filter']['branch_id|in'] = $branch_ids ?: [0];
|
||
}
|
||
|
||
$params['base_filter']['type_id'] = $type;
|
||
//$params['base_filter']['iso_status'] = array('1','2');
|
||
#$params['base_filter']['confirm'] = 'N';
|
||
$this->workground = "console_purchasecenter";
|
||
$this->finder('taoguaniostockorder_mdl_iso', $params);
|
||
}
|
||
|
||
/**
|
||
* iostock_add
|
||
* @param mixed $type type
|
||
* @param mixed $io io
|
||
* @return mixed 返回值
|
||
*/
|
||
public function iostock_add($type, $io)
|
||
{
|
||
if ($io) {
|
||
$order_label = '入库单';
|
||
} else {
|
||
$order_label = '出库单';
|
||
|
||
#过滤o2o门店虚拟物流公司
|
||
$oDly_corp = app::get('ome')->model('dly_corp');
|
||
$dly_corp = $oDly_corp->getlist('*', array('disabled' => 'false', 'd_type' => '1'));
|
||
$this->pagedata['dly_corp'] = $dly_corp;
|
||
}
|
||
|
||
$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',['is_ctrl_store'=>'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;
|
||
$operator = kernel::single('desktop_user')->get_name();
|
||
$this->pagedata['operator'] = $operator;
|
||
|
||
$this->pagedata['branch'] = $row;
|
||
$this->pagedata['branchid'] = $branch_id;
|
||
$this->pagedata['cur_date'] = date('Ymd', time()) . $order_label;
|
||
$this->pagedata['io'] = $io;
|
||
$this->pagedata['iostock_types'] = kernel::single('taoguaniostockorder_iostockorder')->get_create_iso_type($io);
|
||
//出入库计划-入库单新建:移除type_id 11 作为选调拨入库取消 择项 此出入库类型为取消调拨入库时系统生成
|
||
unset($this->pagedata['iostock_types'][11]);
|
||
|
||
#外部仓库列表
|
||
$oExtrabranch = app::get('ome')->model('extrabranch');
|
||
$extrabranch = $oExtrabranch->getlist('branch_id,name', '', 0, -1);
|
||
$this->pagedata['extrabranch'] = $extrabranch;
|
||
if ($io) {
|
||
$this->singlepage("admin/iostock/instock_add.html");
|
||
} else {
|
||
$this->singlepage("admin/iostock/outstock_add.html");
|
||
}
|
||
}
|
||
|
||
/**
|
||
* iostock_edit
|
||
* @param mixed $iso_id ID
|
||
* @param mixed $io io
|
||
* @param mixed $act act
|
||
* @return mixed 返回值
|
||
*/
|
||
public function iostock_edit($iso_id, $io, $act)
|
||
{
|
||
$order_label = $io ? '入库单' : '出库单';
|
||
|
||
//获取出入库单信息
|
||
$isoObj = app::get('taoguaniostockorder')->model('iso');
|
||
$data = $isoObj->dump($iso_id, '*', array('iso_items' => array('*')));
|
||
$productIds = array();
|
||
//总和
|
||
$product_cost = 0;
|
||
foreach ($data['iso_items'] as $k => $v) {
|
||
$productIds[] = $v['product_id'];
|
||
$total_num += $v['nums'];
|
||
$product_cost += sprintf('%.3f', $v['nums'] * $v['price']);
|
||
}
|
||
$data['total_num'] = $total_num;
|
||
$data['items'] = implode('-', $productIds);
|
||
$data['product_cost'] = $product_cost;
|
||
//获取仓库信息
|
||
$branchObj = app::get('ome')->model('branch');
|
||
$branch = $branchObj->dump(array('branch_id' => $data['branch_id']), 'branch_id, name');
|
||
$data['branch_name'] = $branch['name'];
|
||
$data['bill_type_name'] = $isoObj->modifier_bill_type($data['bill_type'], [0=>$data], $data);
|
||
|
||
//获取出入库类型信息
|
||
$iostockTypeObj = app::get('ome')->model('iostock_type');
|
||
$iotype = $iostockTypeObj->dump(array('type_id' => $data['type_id']), 'type_name');
|
||
$data['type_name'] = $iotype['type_name'];
|
||
|
||
$operator = kernel::single('desktop_user')->get_name();
|
||
$data['oper'] = $data['oper'] ? $data['oper'] : $operator;
|
||
#外部仓库列表
|
||
$oExtrabranch = app::get('ome')->model('extrabranch');
|
||
$extrabranch = $oExtrabranch->getlist('branch_id,name', '', 0, -1);
|
||
$this->pagedata['extrabranch'] = $extrabranch;
|
||
#
|
||
$oDly_corp = app::get('ome')->model('dly_corp');
|
||
$dly_corp = $oDly_corp->getlist('*', array('disabled' => 'false'));
|
||
$this->pagedata['dly_corp'] = $dly_corp;
|
||
$this->pagedata['io'] = $io;
|
||
$this->pagedata['act'] = $act;
|
||
$this->pagedata['iso'] = $data;
|
||
$this->pagedata['order_label'] = $order_label;
|
||
$this->pagedata['act_status'] = trim($_GET['act_status']);
|
||
$this->singlepage("admin/iostock/instock_edit.html");
|
||
}
|
||
|
||
/**
|
||
* 获取EditProducts
|
||
* @param mixed $iso_id ID
|
||
* @return mixed 返回结果
|
||
*/
|
||
public function getEditProducts($iso_id)
|
||
{
|
||
if ($iso_id == '') {
|
||
$iso_id = $_POST['p[0]'];
|
||
}
|
||
|
||
$basicMaterialSelect = kernel::single('material_basic_select');
|
||
$basicMaterialBarcode = kernel::single('material_basic_material_barcode');
|
||
|
||
$isoItemObj = app::get('taoguaniostockorder')->model('iso_items');
|
||
$rows = array();
|
||
$items = $isoItemObj->getList('*', array('iso_id' => $iso_id), 0, -1);
|
||
if ($items) {
|
||
$product_ids = array();
|
||
foreach ($items as $k => $v) {
|
||
$product_ids[] = $v['product_id'];
|
||
$items[$k]['name'] = $v['product_name'];
|
||
$items[$k]['num'] = $v['nums'];
|
||
$items[$k]['barcode'] = &$product[$v['product_id']]['barcode'];
|
||
$items[$k]['visibility'] = &$product[$v['product_id']]['visibility'];
|
||
$items[$k]['spec_info'] = &$product[$v['product_id']]['spec_info'];
|
||
#新建调拨单时,如果开启固定成本,price就是商品价格;如果没有开启,则是0
|
||
$items[$k]['price'] = $v['price'];
|
||
}
|
||
if ($product_ids) {
|
||
$plist = $basicMaterialSelect->getlist_ext('bm_id,visibled,specifications', array('bm_id' => $product_ids));
|
||
foreach ($plist as $value) {
|
||
$product[$value['product_id']]['visibility'] = ($value['visibility'] == 1 ? 'true' : 'false');
|
||
$product[$value['product_id']]['spec_info'] = $value['specifications'];
|
||
|
||
#查询关联的条形码
|
||
$product[$value['product_id']]['barcode'] = $basicMaterialBarcode->getBarcodeById($value['product_id']);
|
||
}
|
||
}
|
||
}
|
||
$rows = $items;
|
||
echo json_encode($rows);
|
||
}
|
||
|
||
/**
|
||
* do_edit_iostock
|
||
* @return mixed 返回值
|
||
*/
|
||
public function do_edit_iostock()
|
||
{
|
||
|
||
$this->begin('index.php?app=console&ctl=admin_iostockorder&act=' . $_POST['io_act'] . '&io=' . $_POST['io']);
|
||
$data = $_POST;
|
||
$data['old_items'] = explode('-', $data['old_items']);
|
||
|
||
//出入库明细信息
|
||
$branchProductObj = app::get('ome')->model('branch_product');
|
||
$isoItemObj = app::get('taoguaniostockorder')->model('iso_items');
|
||
$product_cost = 0;
|
||
$iso_items = array();
|
||
$productIds = array();
|
||
$appropriation_items = array();
|
||
$itemsList = $isoItemObj->getList('*',['iso_id'=>$data['iso_id']]);
|
||
|
||
$branchLib = kernel::single('ome_store_manage');
|
||
$branchLib->loadBranch(array('branch_id' => $data['branch']));
|
||
|
||
foreach ($data['bn'] as $product_id => $bn) {
|
||
if ($data['at'][$product_id] == 0) {
|
||
$this->end(false, '库存数量不能为0.');
|
||
}
|
||
|
||
if ($data['io'] == '0') {
|
||
//获取单仓库-单个基础物料中的可用库存
|
||
$params = array(
|
||
'node_type' => 'getAvailableStore',
|
||
'params' => array(
|
||
'branch_id' => $data['branch'],
|
||
'product_id' => $product_id,
|
||
),
|
||
);
|
||
$usable_store = $branchLib->processBranchStore($params, $err_msg);
|
||
|
||
if ($data['at'][$product_id] > $usable_store) {
|
||
$this->end(false, '货号:' . $bn . '出库数不可大于库存数' . $usable_store);
|
||
}
|
||
}
|
||
|
||
$iso_items[$product_id] = array(
|
||
'iso_id' => $data['iso_id'],
|
||
'iso_bn' => $data['iso_bn'],
|
||
'product_id' => $product_id,
|
||
'bn' => $bn,
|
||
'product_name' => $data['product_name'][$product_id],
|
||
'unit' => $data['unit'][$product_id],
|
||
'nums' => $data['at'][$product_id],
|
||
'price' => $data['pr'][$product_id],
|
||
);
|
||
|
||
$item = array();
|
||
$item = $isoItemObj->dump(array('product_id' => $product_id, 'iso_id' => $data['iso_id']), 'iso_items_id');
|
||
if ($item['iso_items_id'] > 0) {
|
||
$iso_items[$product_id]['iso_items_id'] = $item['iso_items_id'];
|
||
}
|
||
|
||
$product_cost += $data['at'][$product_id] * $data['pr'][$product_id];
|
||
$productIds[] = $product_id;
|
||
|
||
$appropriation_items[$product_id] = array(
|
||
'product_id' => $product_id,
|
||
'bn' => $bn,
|
||
'product_name' => $data['product_name'][$product_id],
|
||
'num' => $data['at'][$product_id],
|
||
);
|
||
}
|
||
|
||
//出入库主单信息
|
||
$operator = kernel::single('desktop_user')->get_name();
|
||
$operator = $operator ? $operator : 'system';
|
||
$iostockorder_data = array(
|
||
'iso_id' => $data['iso_id'],
|
||
'name' => $data['iostockorder_name'],
|
||
'iso_price' => $data['iso_price'],
|
||
'oper' => $data['operator'],
|
||
'operator' => $operator,
|
||
'product_cost' => $product_cost,
|
||
'memo' => $data['memo'],
|
||
'iso_items' => $iso_items,
|
||
'extrabranch_id' => $data['extrabranch_id'],
|
||
'extra_ship_name' => $data['extra_ship_name'],
|
||
'extra_ship_area' => $data['extra_ship_area'],
|
||
'extra_ship_addr' => $data['extra_ship_addr'],
|
||
'extra_ship_zip' => $data['extra_ship_zip'],
|
||
'extra_ship_tel' => $data['extra_ship_tel'],
|
||
'extra_ship_mobile' => $data['extra_ship_mobile'],
|
||
'extra_ship_email' => $data['extra_ship_email'],
|
||
'cost_type' => $data['cost_type'],
|
||
'cost_department' => $data['cost_department'],
|
||
'business_bn' => $data['business_bn'],
|
||
);
|
||
if (is_numeric($data['corp_id'])) {
|
||
$iostockorder_data['corp_id'] = $data['corp_id'];
|
||
}
|
||
$isoObj = app::get('taoguaniostockorder')->model('iso');
|
||
|
||
$type = kernel::single('ome_iostock')->get_iostock_types();
|
||
$log_msg = '编辑'.$type[$_POST['type_id']]['info'];
|
||
$opObj = app::get('ome')->model('operation_log');
|
||
|
||
if ($isoObj->save($iostockorder_data)) {
|
||
$delFilter = $delIds = array();
|
||
$delIds = array_diff($data['old_items'], $productIds);
|
||
$delIds = array_values($delIds);
|
||
foreach ($delIds as $key => $val) {
|
||
if (!$val) {
|
||
unset($delIds[$key]);
|
||
}
|
||
}
|
||
if (is_array($delIds) && count($delIds) > 0) {
|
||
$delFilter['iso_id'] = $data['iso_id'];
|
||
$delFilter['product_id'] = $delIds;
|
||
$isoItemObj->delete($delFilter);
|
||
}
|
||
|
||
#更新调拨单明细
|
||
if ($data['act_status'] == 'allocate_iostock') {
|
||
//当是调拔出库时才更新调拔单
|
||
$isodata = $isoObj->dump(array('iso_id' => $data['iso_id']), 'original_id');
|
||
$filter = array('appropriation_id' => $isodata['original_id']);
|
||
|
||
$apprItemObj = app::get('taoguanallocate')->model('appropriation_items');
|
||
$apprItems = $apprItemObj->dump($filter, 'from_branch_id,to_branch_id,from_pos_id,to_pos_id');
|
||
$apprItemObj->delete($filter);
|
||
|
||
foreach ($appropriation_items as $k => $v) {
|
||
$appropriation_items[$k]['appropriation_id'] = $isodata['original_id'];
|
||
$appropriation_items[$k]['from_branch_id'] = $apprItems['from_branch_id'];
|
||
$appropriation_items[$k]['from_pos_id'] = $apprItems['from_pos_id'];
|
||
$appropriation_items[$k]['to_pos_id'] = $apprItems['to_pos_id'];
|
||
$appropriation_items[$k]['to_branch_id'] = $apprItems['to_branch_id'];
|
||
$apprItemObj->save($appropriation_items[$k]);
|
||
}
|
||
}
|
||
|
||
|
||
$memo = ['title' => $log_msg, 'memo' =>$itemsList];
|
||
$opObj->write_log('edit_iostock@taoguaniostockorder', $data['iso_id'], json_encode($memo));
|
||
$this->end(true, '保存完成');
|
||
} else {
|
||
$opObj->write_log('edit_iostock@taoguaniostockorder', $data['iso_id'], $log_msg.':失败');
|
||
$this->end(false, '保存失败');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* do_save_iostockorder
|
||
* @return mixed 返回值
|
||
*/
|
||
public function do_save_iostockorder()
|
||
{
|
||
$libBranchProduct = kernel::single('ome_branch_product');
|
||
|
||
$this->begin("index.php?app=console&ctl=admin_iostockorder");
|
||
|
||
$_POST['iso_price'] = $_POST['iso_price'] ? $_POST['iso_price'] : 0;
|
||
$oBranchProduct = app::get('ome')->model('branch_product');
|
||
|
||
$basicMaterialObj = app::get('material')->model('basic_material');
|
||
|
||
if (!$_POST['bn']) {
|
||
$this->end(false, '请先选择入库商品!.');
|
||
}
|
||
//判断类型是否是残损
|
||
$branch_id = $_POST['branch'];
|
||
$branch_detail = kernel::single('console_iostockdata')->getBranchByid($branch_id);
|
||
if ($_POST['type_id'] == '50' || $_POST['type_id'] == '5') {
|
||
|
||
if ($branch_detail['type'] != 'damaged') {
|
||
$this->end(false, '出入库类型为残损出入库,仓库必须为残仓!');
|
||
}
|
||
} else {
|
||
if ($branch_detail['type'] == 'damaged') {
|
||
$this->end(false, '出入库类型不为残损出入库,不可以选择残仓!');
|
||
}
|
||
}
|
||
$products = array();
|
||
foreach ($_POST['bn'] as $product_id => $bn)
|
||
{
|
||
//过滤空格和全角空格
|
||
$bn = str_replace(array("\r\n", "\r", "\n", ' ', ' ', "\t"), '', $bn);
|
||
|
||
if ($_POST['at'][$product_id] == 0) {
|
||
$this->end(false, '库存数量不能为0.');
|
||
}
|
||
|
||
if ($_POST['io'] == '0') {
|
||
#获取单仓库-单个基础物料中的可用库存
|
||
$usable_store = $libBranchProduct->get_available_store($_POST['branch'], $product_id);
|
||
|
||
if ($_POST['at'][$product_id] > $usable_store) {
|
||
$pInfo = array();
|
||
|
||
#基础物料
|
||
$pInfo = $basicMaterialObj->dump(array('bm_id' => $product_id), 'material_bn');
|
||
|
||
$this->end(false, '货号:' . $pInfo['material_bn'] . '出库数不可大于库存数' . $usable_store);
|
||
}
|
||
}
|
||
|
||
$products[$product_id] = array('bn' => $bn,
|
||
'nums' => $_POST['at'][$product_id],
|
||
'unit' => $_POST['unit'][$product_id],
|
||
'name' => $_POST['product_name'][$product_id],
|
||
'price' => $_POST['pr'][$product_id],
|
||
);
|
||
}
|
||
$_POST['products'] = $products;
|
||
$iso_id = kernel::single('console_iostockorder')->save_iostockorder($_POST, $msg);
|
||
|
||
|
||
$type = kernel::single('ome_iostock')->get_iostock_types();
|
||
$log_msg = sprintf('新建%s:%s', $type[$_POST['type_id']]['info'], $iso_id ? '成功' : $msg);
|
||
app::get('ome')->model('operation_log')->write_log('create_iostock@taoguaniostockorder', $iso_id, $log_msg);
|
||
if ($iso_id) {
|
||
|
||
$this->end(true, '保存完成');
|
||
} else {
|
||
|
||
$this->end(false, '保存失败', '', array('msg' => $msg));
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取ProductStore
|
||
* @return mixed 返回结果
|
||
*/
|
||
public function getProductStore()
|
||
{
|
||
$libBranchProduct = kernel::single('ome_branch_product');
|
||
|
||
$product_id = $_POST['pid'];
|
||
$branch_id = $_POST['bid'];
|
||
|
||
if ($product_id > 0 && $branch_id > 0) {
|
||
//获取单仓库-单个基础物料中的可用库存
|
||
$usable_store = $libBranchProduct->get_available_store($branch_id, $product_id);
|
||
|
||
echo json_encode(array('result' => 'true', 'store' => $usable_store));
|
||
}
|
||
}
|
||
/**
|
||
* 出入库单残损确认
|
||
*/
|
||
public function doDefective($iso_id, $io)
|
||
{
|
||
|
||
$iso_itemsObj = app::get('taoguaniostockorder')->model('iso_items');
|
||
$iso_items = $iso_itemsObj->getlist('*', array('iso_id' => $iso_id, 'defective_num|than' => '0'), 0, -1);
|
||
$iso = array();
|
||
$iso['iso_id'] = $iso_id;
|
||
$iso['iso_items'] = $iso_items;
|
||
$this->pagedata['iso'] = $iso;
|
||
$this->singlepage('admin/iostock/stock_defective.html');
|
||
}
|
||
|
||
/**
|
||
* 残损确认
|
||
*/
|
||
public function doDefectiveconfirm()
|
||
{
|
||
$this->begin("index.php?app=console&ctl=admin_iostockorder");
|
||
|
||
$iso_id = intval($_POST['iso_id']);
|
||
$oIso = app::get('taoguaniostockorder')->model("iso");
|
||
$iostockObj = kernel::single('console_iostockdata');
|
||
$iso = $oIso->dump(array('iso_id' => $iso_id), 'branch_id,iso_bn,type_id,iso_id,supplier_id,supplier_name,cost_tax,oper,create_time,operator,defective_status');
|
||
if ($iso['defective_status'] != '1') {
|
||
$this->end(false, '此单据已确认或无需确认!');
|
||
}
|
||
if (!in_array($iso['type_id'], array('5', '50'))) {
|
||
$damagedbranch = $iostockObj->getDamagedbranch($iso['branch_id']);
|
||
if (empty($damagedbranch)) {
|
||
$this->end(false, $item['bn'] . '有不良品,但未设置主仓对应的残仓');
|
||
}
|
||
$branch_id = $damagedbranch['branch_id'];
|
||
} else {
|
||
$branch_id = $iso['branch_id'];
|
||
}
|
||
|
||
$io = $_POST['io'];
|
||
#查询是否有不良品
|
||
#
|
||
$iostock_data = array(
|
||
'type_id' => '50',
|
||
'branch_id' => $branch_id,
|
||
'iso_bn' => $iso['iso_bn'],
|
||
'iso_id' => $iso['iso_id'],
|
||
'supplier_id' => $iso['supplier_id'],
|
||
'supplier_name' => $iso['supplier_name'],
|
||
'cost_tax' => $iso['cost_tax'],
|
||
'oper' => $iso['oper'],
|
||
'create_time' => $iso['create_time'],
|
||
'original_bn' => $iso['iso_bn'],
|
||
'original_id' => $iso['iso_id'],
|
||
'orig_type_id' => $iso['type_id'],
|
||
);
|
||
$iso_data = $iostockObj->get_iostockData($iso_id);
|
||
|
||
$oIsoItems = app::get('taoguaniostockorder')->model("iso_items");
|
||
$iso_data['items'] = $oIsoItems->getList('product_id,bn,nums as num,product_name as name,price,defective_num,normal_num,iso_items_id,partcode', array('iso_id' => $iso_id));
|
||
|
||
$items = array();
|
||
foreach ($iso_data['items'] as $item) {
|
||
if ($item['defective_num'] > 0) {
|
||
$items[] = array(
|
||
'bn' => $item['bn'],
|
||
'nums' => $item['defective_num'],
|
||
'price' => $item['price'],
|
||
'iso_items_id' => $item['iso_items_id'],
|
||
);
|
||
}
|
||
|
||
}
|
||
if (count($items) > 0) {
|
||
$iostock_data['items'] = $items;
|
||
$result = kernel::single('console_iostockorder')->confirm_iostockorder($iostock_data, '50', $msg, null);
|
||
if ($result) {
|
||
#更新确认状态
|
||
$io_update_data = array(
|
||
'defective_status' => '2',
|
||
);
|
||
$oIso->update($io_update_data, array('iso_id' => $iso_id));
|
||
app::get('ome')->model('operation_log')->write_log('check_defective@taoguaniostockorder', $iso_id, '残存确认入库完成');
|
||
$this->end(true, '成功');
|
||
} else {
|
||
|
||
$this->end(false, '残损确认失败!');
|
||
}
|
||
|
||
} else {
|
||
$this->end(false, '没有可确认的货品');
|
||
}
|
||
|
||
}
|
||
|
||
/**
|
||
* 差异查看确认
|
||
*/
|
||
public function difference($iso_id, $io)
|
||
{
|
||
|
||
$isoObj = app::get('taoguaniostockorder')->model('iso');
|
||
$suObj = app::get('purchase')->model('supplier');
|
||
$brObj = app::get('ome')->model('branch');
|
||
$iso = $isoObj->dump($iso_id, '*');
|
||
$stockObj = kernel::single('console_receipt_stock');
|
||
$iso['iso_items'] = $stockObj->difference_stock($iso['iso_bn']);
|
||
$total_num = 0;
|
||
if ($iso['iso_items']) {
|
||
foreach ($iso['iso_items'] as $k => $v) {
|
||
$total_num += $v['nums'];
|
||
}
|
||
}
|
||
|
||
$su = $suObj->dump($iso['supplier_id'], 'name');
|
||
$br = $brObj->dump($iso['branch_id'], 'name');
|
||
$iso['iso_id'] = $iso_id;
|
||
$iso['branch_name'] = $br['name'];
|
||
$iso['supplier_name'] = $su['name'];
|
||
$iso['create_time'] = date("Y-m-d", $iso['create_time']);
|
||
$iso['total_num'] = $total_num;
|
||
$iso['memo'] = $iso['memo'];
|
||
$this->pagedata['iso'] = $iso;
|
||
$this->pagedata['io'] = $io;
|
||
|
||
$this->singlepage('admin/iostock/stock_difference.html');
|
||
}
|
||
|
||
#导出模板
|
||
/**
|
||
* exportTemplate
|
||
* @param mixed $p p
|
||
* @return mixed 返回值
|
||
*/
|
||
public function exportTemplate($p)
|
||
{
|
||
if ($p) {
|
||
#入库
|
||
$name = 'RK';
|
||
} else {
|
||
#出库
|
||
$name = 'CK';
|
||
}
|
||
|
||
$obj_iso = app::get('taoguaniostockorder')->model('iso');
|
||
|
||
$row = $obj_iso->exportTemplate($p);
|
||
$data[] = array();
|
||
$lib = kernel::single('omecsv_phpexcel');
|
||
$lib->newExportExcel($data, $name . date('Ymd'), 'xls', $row);
|
||
}
|
||
|
||
/**
|
||
* 审核出入库单据
|
||
*
|
||
*/
|
||
public function check($iso_id, $io, $act)
|
||
{
|
||
$basicMaterialBarcode = kernel::single('material_basic_material_barcode');
|
||
|
||
$isoObj = app::get('taoguaniostockorder')->model('iso');
|
||
$suObj = app::get('purchase')->model('supplier');
|
||
$oExtrabranch = app::get('ome')->model('extrabranch');
|
||
|
||
$brObj = app::get('ome')->model('branch');
|
||
$iso = $isoObj->dump($iso_id, '*', array('iso_items' => array('*')));
|
||
$iso['bill_type_name'] = $isoObj->modifier_bill_type($iso['bill_type'], [0=>$iso], $iso);
|
||
$extrabranch_id = $iso['extrabranch_id'];
|
||
$extrabranch = $oExtrabranch->dump($extrabranch_id, 'name');
|
||
|
||
$total_num = 0;
|
||
if ($iso['iso_items']) {
|
||
foreach ($iso['iso_items'] as $k => $v) {
|
||
$total_num += $v['nums'];
|
||
|
||
#查询关联的条形码
|
||
$iso['iso_items'][$k]['barcode'] = $basicMaterialBarcode->getBarcodeById($v['product_id']);
|
||
}
|
||
}
|
||
|
||
$su = $suObj->dump($iso['supplier_id'], 'name');
|
||
$br = $brObj->dump($iso['branch_id'], 'name');
|
||
$iso['iso_id'] = $iso_id;
|
||
$iso['branch_name'] = $br['name'];
|
||
$iso['supplier_name'] = $su['name'];
|
||
$iso['create_time'] = date("Y-m-d", $iso['create_time']);
|
||
$iso['total_num'] = $total_num;
|
||
$iso['memo'] = $iso['memo'];
|
||
$iso['extrabranch_name'] = $extrabranch['name'];
|
||
list(,$iso['extra_ship_area']) = explode(':', $iso['extra_ship_area']);
|
||
$this->pagedata['iso'] = $iso;
|
||
$this->pagedata['io'] = $io;
|
||
$this->pagedata['act'] = $act;
|
||
$this->pagedata['amount'] = $iso['product_cost'] + $iso['iso_price'];
|
||
$this->singlepage('admin/iostock/stock_check.html');
|
||
|
||
}
|
||
|
||
/**
|
||
* 保存出入库审核单据
|
||
*
|
||
*/
|
||
public function doCheck()
|
||
{
|
||
|
||
//$basicMaterialStock = kernel::single('material_basic_material_stock');
|
||
|
||
$this->begin('index.php?app=console&ctl=admin_iostockorder&act=' . $_POST['io_act'] . '&io=' . $_POST['io']);
|
||
|
||
#更新单据审核状态
|
||
$iso_id = intval($_POST['iso_id']);
|
||
$io = $_POST['io'];
|
||
//检查不能重复操作
|
||
// $cacheKeyName = sprintf("docheck_iso_id_%s", $iso_id);
|
||
// $cacheData = cachecore::fetch($cacheKeyName);
|
||
// if ($cacheData === false) {
|
||
// cachecore::store($cacheKeyName, $iso_id, 60);
|
||
// } else {
|
||
// $this->end(false, '单据号:' . $iso['iso_bn'] . ',一分钟内请不要重复操作!');
|
||
// }
|
||
|
||
list($rs, $rsData) = kernel::single('console_iostockorder')->doCkeck($iso_id, $io);
|
||
$type = kernel::single('ome_iostock')->get_iostock_types();
|
||
$log_msg = sprintf('审核%s:%s', $type[$_POST['type_id']]['info'], $rs ? '成功' : $rsData['msg']);
|
||
app::get('ome')->model('operation_log')->write_log('docheck_iostock@taoguaniostockorder', $iso_id, $log_msg);
|
||
if(!$rs) {
|
||
|
||
$this->end(false, $rsData['msg']);
|
||
}
|
||
|
||
$this->end(true, '审核成功');
|
||
}
|
||
|
||
/**
|
||
* 取消单据
|
||
*/
|
||
public function cancel($iso_id, $io, $type)
|
||
{
|
||
$isoObj = app::get('taoguaniostockorder')->model('iso');
|
||
|
||
#库存状态判断
|
||
$iso = $isoObj->dump($iso_id, 'iso_bn,iso_id,type_id');
|
||
$title = '';
|
||
switch ($iso['type_id']) {
|
||
case '4':
|
||
case '40':
|
||
$io_type = 'ALLCOATE';
|
||
$title .= '调拔单';
|
||
break;
|
||
case '5':
|
||
case '50':
|
||
$io_type = 'DEFECTIVE';
|
||
$title .= '残损';
|
||
break;
|
||
case '7':
|
||
case '70':
|
||
$io_type = 'DIRECT';
|
||
$title .= '直接';
|
||
break;
|
||
default:
|
||
$io_type = 'OTHER';
|
||
$title .= '其它';
|
||
break;
|
||
|
||
}
|
||
if ($io) {
|
||
$method = 'otherstockin';
|
||
$title .= '入库';
|
||
} else {
|
||
$method = 'otherstockout';
|
||
$title .= '出库';
|
||
}
|
||
|
||
$this->pagedata['iso'] = $iso;
|
||
$this->pagedata['io'] = $io;
|
||
$this->pagedata['type'] = $type;
|
||
$this->pagedata['title'] = $title;
|
||
$iso_type_id = $iso['type_id'];
|
||
unset($iso);
|
||
$this->display("admin/iostock/stock_cancel.html");
|
||
}
|
||
|
||
/**
|
||
* 执行取消出入库
|
||
*/
|
||
public function doCancel()
|
||
{
|
||
$this->begin('index.php?app=console&ctl=admin_iostockorder&act=' . $_POST['type'] . '&io=' . $_POST['io']);
|
||
$type = $_POST['type'];
|
||
$iso_id = $_POST['iso_id'];
|
||
$isoObj = app::get('taoguaniostockorder')->model('iso');
|
||
$stockObj = kernel::single('console_receipt_stock');
|
||
$iso = $isoObj->dump($iso_id, 'iso_bn,iso_id,type_id,branch_id,iso_status,check_status,bill_type');
|
||
if ($iso['iso_status'] > 1) {
|
||
$this->end(false, '取消失败!');
|
||
} else {
|
||
$isoObj->update(array('iso_status' => 4), array('iso_id' => $iso_id));
|
||
#如果是已审核,取消冻结库存
|
||
if ($iso['check_status'] == '2') {
|
||
if($_POST['io'] == '0') {
|
||
if ($stockObj->checkExist($iso['iso_bn'])) {
|
||
$stockObj->clear_stockout_store_freeze($iso, 'FINISH');
|
||
}
|
||
}
|
||
if($_POST['io'] == '1') {
|
||
//取消在途
|
||
$storeManageLib = kernel::single('ome_store_manage');
|
||
$storeManageLib->loadBranch(array('branch_id' => $iso['branch_id']));
|
||
$params = array();
|
||
$params['node_type'] = 'deleteArriveStore';
|
||
$params['params'] = array(
|
||
'obj_id' => $iso['iso_id'],
|
||
'branch_id' => $iso['branch_id'],
|
||
'obj_type' => 'iostockorder',
|
||
);
|
||
$storeManageLib->processBranchStore($params, $err_msg);
|
||
if ($iso['bill_type'] == 'vopjitrk') {
|
||
list($res, $msg) = kernel::single('console_vopreturn')->cancelStockin($iso_id);
|
||
if (!$res) {
|
||
$this->end(false, $msg);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$msg = '取消单据';
|
||
if ($_POST['forced_cancel_value'] == '1') {
|
||
$msg = '强制'.$msg;
|
||
}
|
||
app::get('ome')->model('operation_log')->write_log('other_iostock_cancel@console',$iso_id,$msg);
|
||
|
||
$this->end(true, '成功');
|
||
}
|
||
|
||
}
|
||
|
||
/**
|
||
* 确认是否可以取消
|
||
*/
|
||
public function checkCancel($iso_id)
|
||
{
|
||
|
||
$isoObj = app::get('taoguaniostockorder')->model('iso');
|
||
//$iso = $isoObj->dump($iso_id,'iso_bn,iso_id,type_id,branch_id,check_status,iso_status,out_iso_bn');
|
||
$iso = $isoObj->dump($iso_id, 'iso_bn,iso_id,type_id,branch_id,check_status,iso_status,out_iso_bn');
|
||
$iso_status = $iso['iso_status'];
|
||
$io = $_GET['io'];
|
||
$forced_cancel = $_GET['forced_cancel'];
|
||
if ($iso['check_status'] == '2') {
|
||
if ($iso_status > 1) {
|
||
$result = array('rsp' => 'fail', 'err_msg' => '单据所在状态不允许此次操作');
|
||
} else {
|
||
switch ($iso['type_id']) {
|
||
case '4':
|
||
case '40':
|
||
$io_type = 'ALLCOATE';
|
||
break;
|
||
case '5':
|
||
case '50':
|
||
$io_type = 'DEFECTIVE';
|
||
break;
|
||
case '7':
|
||
case '70':
|
||
$io_type = 'DIRECT';
|
||
break;
|
||
default:
|
||
$io_type = 'OTHER';
|
||
break;
|
||
}
|
||
if ($io) {
|
||
$method = 'otherstockin';
|
||
} else {
|
||
$method = 'otherstockout';
|
||
}
|
||
$branch_id = $iso['branch_id'];
|
||
$data = array(
|
||
'io_type' => $io_type,
|
||
'io_bn' => $iso['iso_bn'],
|
||
'out_iso_bn' => $iso['out_iso_bn'],
|
||
'branch_id' => $branch_id,
|
||
);
|
||
|
||
if ($forced_cancel != '1') {
|
||
$result = kernel::single('console_event_trigger_' . $method)->cancel($data, true);
|
||
}else{
|
||
$result = array('rsp' => 'succ');
|
||
}
|
||
}
|
||
|
||
} else {
|
||
$result = array('rsp' => 'succ');
|
||
}
|
||
|
||
echo json_encode($result);
|
||
|
||
}
|
||
|
||
//调拨入库 取消操作 生成入库单 打回原始仓库
|
||
/**
|
||
* cancelIostockin
|
||
* @return mixed 返回值
|
||
*/
|
||
public function cancelIostockin()
|
||
{
|
||
$iso_id = intval($_GET['iso_id']);
|
||
$this->pagedata['cur_date'] = date('Ymd', time()) . "调拨入库取消单";
|
||
$this->pagedata['title'] = "调拔单入库"; //checkCancel时用来撤销原调拨入库单撤销
|
||
$operator = kernel::single('desktop_user')->get_name();
|
||
$this->pagedata['operator'] = $operator;
|
||
$this->pagedata["iso_id"] = $iso_id;
|
||
|
||
//get from_branch_id to_branch_id
|
||
$taoguaniostockorder_iso_obj = app::get('taoguaniostockorder')->model('iso');
|
||
$taoguaniostockorder_isoinfo = $taoguaniostockorder_iso_obj->dump(array('iso_id' => $iso_id), 'iso_id,branch_id,extrabranch_id');
|
||
$from_branch_id = intval($taoguaniostockorder_isoinfo["extrabranch_id"]);
|
||
$to_branch_id = intval($taoguaniostockorder_isoinfo["branch_id"]);
|
||
$branch_ids = array($from_branch_id, $to_branch_id);
|
||
//获取仓库信息
|
||
$branch_obj = app::get('ome')->model('branch');
|
||
$branch_info = $branch_obj->getList("branch_id,name", array('branch_id|in' => $branch_ids));
|
||
foreach ($branch_info as $var_branch_info) {
|
||
if (intval($var_branch_info["branch_id"]) == $from_branch_id) {
|
||
$this->pagedata["from_branch_name"] = $var_branch_info["name"];
|
||
}
|
||
if (intval($var_branch_info["branch_id"]) == $to_branch_id) {
|
||
$this->pagedata["to_branch_name"] = $var_branch_info["name"];
|
||
}
|
||
}
|
||
|
||
//get iso_items
|
||
$taoguaniostockorder_iso_items_obj = app::get('taoguaniostockorder')->model('iso_items');
|
||
$this->pagedata["iso_items"] = $taoguaniostockorder_iso_items_obj->getList("product_id,product_name,bn,nums", array("iso_id" => $iso_id));
|
||
$arr_products_ids = array();
|
||
foreach ($this->pagedata["iso_items"] as $var_iso_item) {
|
||
if (!in_array($var_iso_item["product_id"], $arr_products_ids)) {
|
||
$arr_products_ids[] = $var_iso_item["product_id"];
|
||
}
|
||
}
|
||
|
||
#基础物料
|
||
$basicMaterialLib = kernel::single('material_basic_material');
|
||
$rs_products = $basicMaterialLib->getBasicMaterialByBmids($arr_products_ids);
|
||
|
||
$rl_product_id_infos = array();
|
||
foreach ($rs_products as $var_product) {
|
||
$temp_product_arr = array(
|
||
"spec_info" => $var_product["spec_info"],
|
||
"barcode" => $var_product["barcode"],
|
||
"price" => $var_product["price"],
|
||
);
|
||
$rl_product_id_infos[$var_product["product_id"]] = $temp_product_arr;
|
||
}
|
||
$this->pagedata["total_stockin_number"] = 0;
|
||
$this->pagedata["total_stockin_price"] = 0;
|
||
foreach ($this->pagedata["iso_items"] as &$final_iso_item) {
|
||
$final_iso_item["spec_info"] = $rl_product_id_infos[$final_iso_item["product_id"]]["spec_info"];
|
||
$final_iso_item["barcode"] = $rl_product_id_infos[$final_iso_item["product_id"]]["barcode"];
|
||
$final_iso_item["price"] = $rl_product_id_infos[$final_iso_item["product_id"]]["price"];
|
||
$final_iso_item["total_price"] = sprintf("%.3f", $final_iso_item["price"] * $final_iso_item["nums"]);
|
||
$this->pagedata["total_stockin_number"] += $final_iso_item["nums"];
|
||
$this->pagedata["total_stockin_price"] += $final_iso_item["total_price"];
|
||
}
|
||
unset($final_iso_item);
|
||
$this->pagedata["total_stockin_price"] = sprintf("%.3f", $this->pagedata["total_stockin_price"]);
|
||
$this->singlepage("admin/iostock/instock_appropriation_cancel.html");
|
||
}
|
||
|
||
//生成入库单 打回原始仓库
|
||
/**
|
||
* doCancelIostockin
|
||
* @return mixed 返回值
|
||
*/
|
||
public function doCancelIostockin()
|
||
{
|
||
$this->begin('');
|
||
|
||
if (!$_POST["iostockorder_name"]) {
|
||
$this->end(false, "单据名称不能为空");
|
||
}
|
||
//第三方仓或者自由仓 出库确认后的调拨入库单id
|
||
$iso_id = intval($_POST["iso_id"]);
|
||
|
||
$taoguaniostockorder_iso_obj = app::get('taoguaniostockorder')->model('iso');
|
||
$taoguaniostockorder_iso_items_obj = app::get('taoguaniostockorder')->model('iso_items');
|
||
$info_iso = $taoguaniostockorder_iso_obj->dump(array('iso_id' => $iso_id), "*");
|
||
$info_iso_items = $taoguaniostockorder_iso_items_obj->getList("*,nums as num", array('iso_id' => $iso_id));
|
||
|
||
//更新原入库单为取消状态 iso_status 4
|
||
$iso_status_update = array('iso_status' => '4');
|
||
$taoguaniostockorder_iso_obj->update($iso_status_update, array('iso_id' => $iso_id));
|
||
|
||
foreach ($info_iso_items as $ik => $iv) {
|
||
if (app::get('taoguaninventory')->is_installed()) {
|
||
//检查是否在盘点:传入商品id和目标仓库id
|
||
$check_inventory = kernel::single('taoguaninventory_inventorylist')->checkproductoper($iv['product_id'], $info_iso["extrabranch_id"]);
|
||
if (!$check_inventory) {
|
||
$this->end(false, '此商品正在盘点中,不可以出入库操作!', 'index.php?app=console&ctl=admin_iostockorder&act=cancelIostockin&iso_id=' . $iso_id);
|
||
}
|
||
}
|
||
}
|
||
|
||
//组调拨入库取消类型的单据 插入到出入库计划中的入库单页
|
||
$products_arr = array();
|
||
foreach ($info_iso_items as $var_iso_item) {
|
||
$temp_p = array(
|
||
"bn" => $var_iso_item["bn"],
|
||
"nums" => $var_iso_item["nums"],
|
||
"unit" => $var_iso_item["unit"],
|
||
"name" => $var_iso_item["product_name"],
|
||
"price" => $var_iso_item["price"],
|
||
);
|
||
$products_arr[$var_iso_item["product_id"]] = $temp_p;
|
||
}
|
||
//取消在途
|
||
$storeManageLib = kernel::single('ome_store_manage');
|
||
$storeManageLib->loadBranch(array('branch_id' => $info_iso['branch_id']));
|
||
$params = array();
|
||
$params['node_type'] = 'deleteArriveStore';
|
||
$params['params'] = array(
|
||
'obj_id' => $info_iso['iso_id'],
|
||
'branch_id' => $info_iso['branch_id'],
|
||
'obj_type' => 'iostockorder',
|
||
);
|
||
$storeManageLib->processBranchStore($params, $err_msg);
|
||
$operator = kernel::single('desktop_user')->get_name();
|
||
$operator = $operator ? $operator : 'system';
|
||
$cancel_appropriation = array(
|
||
"io" => 1,
|
||
"iostockorder_name" => $_POST["iostockorder_name"],
|
||
"branch" => $info_iso["extrabranch_id"],
|
||
"type_id" => 11,
|
||
"operator" => $operator,
|
||
"appropriation_no" => $info_iso["appropriation_no"],
|
||
"products" => $products_arr,
|
||
);
|
||
|
||
//新增调拨入库取消类型的单据 可在出入库计划中的入库单页操作
|
||
$cancel_iso_id = kernel::single('console_iostockorder')->save_iostockorder($cancel_appropriation, $msg);
|
||
if ($cancel_iso_id) {
|
||
$this->end(true, '调拨入库取消单据已生成');
|
||
} else {
|
||
|
||
$this->end(false, '调拨入库取消单据未生成', '', array('msg' => $msg));
|
||
}
|
||
|
||
}
|
||
|
||
/**
|
||
* 调拔入库列表
|
||
*
|
||
* @access public
|
||
* @author cyyr24@sina.cn
|
||
*/
|
||
public function allocate_iostocklist()
|
||
{
|
||
$io = $_GET['io'];
|
||
$iostock_instance = kernel::single('siso_receipt_iostock');
|
||
|
||
if ($io) {
|
||
$title = '调拨入库列表';
|
||
eval('$type=' . get_class($iostock_instance) . '::ALLOC_STORAGE;');
|
||
} else {
|
||
$title = '调拨出库列表';
|
||
eval('$type=' . get_class($iostock_instance) . '::ALLOC_LIBRARY;');
|
||
}
|
||
|
||
$params = array(
|
||
'title' => $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,
|
||
'finder_cols' => 'name,iso_bn,oper,operator,original_bn,create_time,type_id',
|
||
);
|
||
/* 获取操作员管辖仓库 */
|
||
$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|in'] = $branch_ids;
|
||
|
||
// $oIso = app::get('taoguaniostockorder')->model('iso');
|
||
// $iso_list = $oIso->getList('iso_id', array('branch_id' => $branch_ids), 0, -1);
|
||
// if ($iso_list) {
|
||
// foreach ($iso_list as $p) {
|
||
// $isolist[] = $p['iso_id'];
|
||
// }
|
||
// }
|
||
// if ($isolist) {
|
||
// $isolist = array_unique($isolist);
|
||
// $params['base_filter']['iso_id'] = $isolist;
|
||
// } else {
|
||
// $params['base_filter']['iso_id'] = 'false';
|
||
// }
|
||
} else {
|
||
$params['base_filter']['iso_id'] = 'false';
|
||
}
|
||
}
|
||
|
||
$params['base_filter']['type_id'] = $type;
|
||
|
||
$this->workground = "console_center";
|
||
$this->finder('taoguaniostockorder_mdl_iso', $params);
|
||
} // end func
|
||
|
||
/**
|
||
* 更多
|
||
* @param type $varname description
|
||
* @return type description
|
||
* @access public
|
||
* @author cyyr24@sina.cn
|
||
*/
|
||
public function more_items($iso_id)
|
||
{
|
||
$basicMaterialObj = app::get('material')->model('basic_material');
|
||
$basicMaterialLib = kernel::single('material_basic_material');
|
||
$basicMaterialBarcode = kernel::single('material_basic_material_barcode');
|
||
|
||
$isoObj = app::get('taoguaniostockorder')->model('iso');
|
||
|
||
$iso = $isoObj->dump($iso_id, 'iso_id', array('iso_items' => array('*')));
|
||
foreach ($iso['iso_items'] as $k => $order_item) {
|
||
$product = $basicMaterialObj->dump(array('bm_id' => $order_item['product_id']), 'bm_id, material_bn, material_name');
|
||
|
||
#查询关联的条形码
|
||
$product['barcode'] = $basicMaterialBarcode->getBarcodeById($order_item['product_id']);
|
||
|
||
$order_item['spec_info'] = $product['spec_info'];
|
||
$order_item['barcode'] = $product['barcode'];
|
||
$iso['iso_items'][$k] = $order_item;
|
||
}
|
||
$finder_id = $_GET['_finder']['finder_id'];
|
||
$appr_id = $_GET['apprid'];
|
||
$render = app::get('console')->render();
|
||
|
||
$itemObj = app::get('console')->model('stockdump_items');
|
||
$omeObj = app::get('ome')->render();
|
||
$page = $_GET['page'] ? $_GET['page'] : 1;
|
||
$pagelimit = 10;
|
||
$offset = ($page - 1) * $pagelimit;
|
||
$sql = "SELECT COUNT(*) FROM `sdb_console_stockdump_items` WHERE stockdump_id =" . $appr_id;
|
||
$tmp = kernel::database()->select($sql);
|
||
$items = $itemObj->getList('*', array('stockdump_id' => $appr_id), $offset, $pagelimit);
|
||
$count = $tmp[0]['COUNT(*)'];
|
||
$total_page = ceil($count / $pagelimit);
|
||
$pager = $this->ui()->pager(array(
|
||
'current' => $page,
|
||
'total' => $total_page,
|
||
'link' => 'index.php?app=console&ctl=admin_stockdump&act=more_items&apprid=' . $appr_id . '&page=%d',
|
||
));
|
||
|
||
if ($items) {
|
||
foreach ($items as $key => $item) {
|
||
//将商品的显示名称改为后台的显示名称
|
||
$product = $basicMaterialObj->dump(array('material_bn' => $items[$key]['bn']), 'bm_id');
|
||
|
||
$product_name = $basicMaterialLib->getBasicMaterialExt($product['bm_id']);
|
||
|
||
$items[$key]['product_name'] = $product_name['material_name'];
|
||
$items[$key]['spec_info'] = $product_name['spec_info'];
|
||
$items[$key]['unit'] = $product_name['unit'];
|
||
}
|
||
}
|
||
|
||
$render->pagedata['items'] = $items;
|
||
$render->pagedata['pager'] = $pager;
|
||
$this->singlepage('admin/stockdump/stockdump_more_item.html');
|
||
}
|
||
|
||
/**
|
||
* 单据发送至第三方.
|
||
* @param
|
||
* @return
|
||
* @access public
|
||
* @author sunjing@shopex.cn
|
||
*/
|
||
public function batch_sync()
|
||
{
|
||
// $this->begin('');
|
||
$isoObj = app::get('taoguaniostockorder')->model('iso');
|
||
$ids = $_POST['iso_id'];
|
||
$isoList = $isoObj->getList('iso_id', array('iso_id' => $ids, 'check_status' => '2', 'iso_status' => array('1')));
|
||
|
||
$io = $_GET['io'];
|
||
foreach ($isoList as $iso) {
|
||
$iso_id = $iso['iso_id'];
|
||
|
||
if ($io == '0') {
|
||
|
||
kernel::single('console_event_trigger_otherstockout')->create(array('iso_id' => $iso_id), false);
|
||
} else {
|
||
#入库
|
||
kernel::single('console_event_trigger_otherstockin')->create(array('iso_id' => $iso_id), false);
|
||
}
|
||
}
|
||
|
||
$this->splash('success', null, '命令已经被成功发送!!');
|
||
}
|
||
|
||
/**
|
||
* batch_check
|
||
* @return mixed 返回值
|
||
*/
|
||
public function batch_check()
|
||
{
|
||
// $this->begin('');
|
||
// kernel::database()->exec('commit');
|
||
$isoObj = app::get('taoguaniostockorder')->model('iso');
|
||
$ids = $_POST['iso_id'];
|
||
$isoList = $isoObj->getList('iso_id', array('iso_id' => $ids, 'check_status' => '1', 'confirm' => 'N', 'iso_status' => '1'));
|
||
|
||
$io = $_GET['io'];
|
||
|
||
if ($io == '1' || $io == '0') {// 等于1是入库单 等于0是出库单
|
||
foreach ($isoList as $iso) {
|
||
$iso_id = $iso['iso_id'];
|
||
$iso_data = array('check_status' => '2');
|
||
$result = $isoObj->update($iso_data, array('iso_id' => $iso_id));
|
||
|
||
if ($io == '1') {
|
||
kernel::single('console_event_trigger_otherstockin')->create(array('iso_id' => $iso_id), false);
|
||
}else{
|
||
kernel::single('console_event_trigger_otherstockout')->create(array('iso_id' => $iso_id), false);
|
||
}
|
||
}
|
||
}
|
||
|
||
$this->splash('success', null, '命令已经被成功发送!');
|
||
|
||
}
|
||
|
||
/**
|
||
* iostockConfirm
|
||
* @param mixed $iso_id ID
|
||
* @param mixed $io io
|
||
* @return mixed 返回值
|
||
*/
|
||
public function iostockConfirm($iso_id, $io)
|
||
{
|
||
$iso_itemsObj = app::get('taoguaniostockorder')->model('iso_items');
|
||
$iso_items = $iso_itemsObj->getlist('*', array('iso_id' => $iso_id), 0, -1);
|
||
$iso = array();
|
||
$iso['iso_id'] = $iso_id;
|
||
$iso['iso_items'] = $iso_items;
|
||
$this->pagedata['iso'] = $iso;
|
||
$this->pagedata['io'] = $io;
|
||
$this->singlepage('admin/iostock/iostock_confirm.html');
|
||
}
|
||
|
||
/**
|
||
* doIostockconfirm
|
||
* @return mixed 返回值
|
||
*/
|
||
public function doIostockconfirm()
|
||
{
|
||
$this->begin("index.php?app=console&ctl=admin_iostockorder");
|
||
|
||
$iso_id = intval($_POST['iso_id']);
|
||
$oIso = app::get('taoguaniostockorder')->model("iso");
|
||
$iostockObj = kernel::single('console_iostockdata');
|
||
$iso = $oIso->dump(array('iso_id' => $iso_id), 'branch_id,iso_bn,type_id,iso_id,supplier_id,supplier_name,cost_tax,oper,create_time,operator,defective_status,iso_status');
|
||
if ($iso['iso_status'] == '3') {
|
||
$this->end(false, '此单据已确认或无需确认!');
|
||
}
|
||
//加缓存时间
|
||
$_inner_key = sprintf("iostock_%s", $iso_id);
|
||
$aData = cachecore::fetch($_inner_key);
|
||
if ($aData === false) {
|
||
cachecore::store($_inner_key, 'iostock', 5);
|
||
} else {
|
||
|
||
$this->end(false, '此单据已在确认中!');
|
||
}
|
||
$branch_id = $iso['branch_id'];
|
||
$io = $_POST['io'];
|
||
$iostock_data = array(
|
||
'type_id' => $iso['type_id'],
|
||
'branch_id' => $branch_id,
|
||
'iso_bn' => $iso['iso_bn'],
|
||
'original_bn' => $iso['iso_bn'],
|
||
'iso_id' => $iso['iso_id'],
|
||
'original_id' => $iso['iso_id'],
|
||
'supplier_id' => $iso['supplier_id'],
|
||
'supplier_name' => $iso['supplier_name'],
|
||
'cost_tax' => $iso['cost_tax'],
|
||
'oper' => $iso['oper'],
|
||
'create_time' => $iso['create_time'],
|
||
);
|
||
$iso_data = $iostockObj->get_iostockData($iso_id);
|
||
$items = array();
|
||
foreach ($iso_data['items'] as $item) {
|
||
if ($item['normal_num'] > 0) {
|
||
$items[] = array(
|
||
'bn' => $item['bn'],
|
||
'nums' => $item['normal_num'],
|
||
'price' => $item['price'],
|
||
'iso_items_id' => $item['iso_items_id'],
|
||
'effective_num' => $item['normal_num'],
|
||
'product_id' => $item['product_id'],
|
||
);
|
||
}
|
||
}
|
||
if (count($items) > 0) {
|
||
$iostock_data['items'] = $items;
|
||
$result = kernel::single('console_iostockorder')->confirm_iostockorder($iostock_data, $iso['type_id'], $msg, null);
|
||
if ($result) {
|
||
#更新确认状态
|
||
$io_update_data = array(
|
||
'iso_status' => '3',
|
||
);
|
||
$oIso->update($io_update_data, array('iso_id' => $iso_id));
|
||
//出库释放冻结
|
||
if ($io == '0') {
|
||
$stockObj = kernel::single('console_receipt_stock');
|
||
if ($stockObj->checkExist($iso['iso_bn'])) {
|
||
$iso['items'] = $items;
|
||
$stockObj->clear_stockout_store_freeze($iso, 'FINISH');
|
||
}
|
||
}
|
||
if ($iso['type_id'] == '40') {
|
||
|
||
kernel::single('console_iostockdata')->allocate_out($iso_id);
|
||
}
|
||
$this->end(true, '成功');
|
||
} else {
|
||
|
||
$this->end(false, '确认失败!');
|
||
}
|
||
|
||
} else {
|
||
$this->end(false, '没有可确认的货品');
|
||
}
|
||
|
||
}
|
||
|
||
/**
|
||
* 添加Same
|
||
* @param mixed $iso_id ID
|
||
* @param mixed $io io
|
||
* @return mixed 返回值
|
||
*/
|
||
public function addSame($iso_id,$io)
|
||
{
|
||
$this->begin('index.php?app=console&ctl=admin_iostockorder&act=other_iostock&io='.$io);
|
||
if (empty($iso_id)) {
|
||
$this->end(false, '操作出错,请重新操作');
|
||
}
|
||
if ($io) {
|
||
$order_label = '入库单';
|
||
} else {
|
||
$order_label = '出库单';
|
||
}
|
||
|
||
//仓库列表
|
||
$brObj = app::get('ome')->model('branch');
|
||
$branchList = $brObj->getList('branch_id, name', array('b_type' => 1), 0, -1);
|
||
//获取操作员管辖仓库
|
||
$is_super = kernel::single('desktop_user')->is_super();
|
||
if (!$is_super) {
|
||
$iostockObj = kernel::single('console_iostockdata');
|
||
$branch_list = $iostockObj->getBranchByUser();
|
||
}
|
||
|
||
//入库类型列表
|
||
$this->pagedata['io'] = $io;
|
||
$this->pagedata['iostock_types'] = kernel::single('taoguaniostockorder_iostockorder')->get_create_iso_type($io);
|
||
unset($this->pagedata['iostock_types'][11]);
|
||
//来源地列表
|
||
$oExtrabranch = app::get('ome')->model('extrabranch');
|
||
$extrabranch = $oExtrabranch->getlist('branch_id,name', '', 0, -1);
|
||
$this->pagedata['extrabranch'] = $extrabranch;
|
||
//仓库等信息
|
||
$isoObj = app::get('taoguaniostockorder')->model('iso');
|
||
$data = $isoObj->dump(array('iso_id' => $iso_id), '*', array('iso_items' => array('*')));
|
||
$data['bill_type_name'] = $isoObj->modifier_bill_type($data['bill_type'], [0=>$data], $data);
|
||
|
||
$this->pagedata['branch_list'] = $branch_list;
|
||
$is_super = 1;
|
||
$this->pagedata['is_super'] = $is_super;
|
||
$this->pagedata['branch'] = $branchList;
|
||
$this->pagedata['iso'] = $data;
|
||
$this->pagedata['cur_date'] = date('Ymd', time()) . $order_label;
|
||
if ($io) {
|
||
//出库单需要物流信息
|
||
$oDly_corp = app::get('ome')->model('dly_corp');
|
||
$this->pagedata['dly_corp'] = $oDly_corp->getlist('*', array('disabled' => 'false'));
|
||
}
|
||
$this->singlepage("admin/iostock/instock_addSame.html");
|
||
|
||
}
|
||
|
||
/**
|
||
* doSame
|
||
* @return mixed 返回值
|
||
*/
|
||
public function doSame()
|
||
{
|
||
$libBranchProduct = kernel::single('ome_branch_product');
|
||
|
||
$this->begin("index.php?app=console&ctl=admin_iostockorder");
|
||
|
||
$_POST['iso_price'] = $_POST['iso_price'] ? $_POST['iso_price'] : 0;
|
||
$oBranchProduct = app::get('ome')->model('branch_product');
|
||
$io = $_POST['io'];
|
||
$basicMaterialObj = app::get('material')->model('basic_material');
|
||
|
||
if (!$_POST['bn']) {
|
||
$this->end(false, '请先选择入库商品!.');
|
||
}
|
||
//判断类型是否是残损
|
||
$branch_id = $_POST['branch'];
|
||
$branch_detail = kernel::single('console_iostockdata')->getBranchByid($branch_id);
|
||
if ($_POST['type_id'] == '50' || $_POST['type_id'] == '5') {
|
||
|
||
if ($branch_detail['type'] != 'damaged') {
|
||
$this->end(false, '出入库类型为残损出入库,仓库必须为残仓!');
|
||
}
|
||
} else {
|
||
if ($branch_detail['type'] == 'damaged') {
|
||
$this->end(false, '出入库类型不为残损出入库,不可以选择残仓!');
|
||
}
|
||
}
|
||
$products = array();
|
||
foreach ($_POST['bn'] as $product_id => $bn) {
|
||
if ($_POST['at'][$product_id] == 0) {
|
||
$this->end(false, '库存数量不能为0.');
|
||
}
|
||
|
||
if ($io == '0') {
|
||
#获取单仓库-单个基础物料中的可用库存
|
||
$usable_store = $libBranchProduct->get_available_store($_POST['branch'], $product_id);
|
||
|
||
if ($_POST['at'][$product_id] > $usable_store) {
|
||
$pInfo = array();
|
||
|
||
#基础物料
|
||
$pInfo = $basicMaterialObj->dump(array('bm_id' => $product_id), 'material_bn');
|
||
|
||
$this->end(false, '货号:' . $pInfo['material_bn'] . '出库数不可大于库存数' . $usable_store);
|
||
}
|
||
}
|
||
|
||
$products[$product_id] = array('bn' => $bn,
|
||
'nums' => $_POST['at'][$product_id],
|
||
'unit' => $_POST['unit'][$product_id],
|
||
'name' => $_POST['product_name'][$product_id],
|
||
'price' => $_POST['pr'][$product_id],
|
||
);
|
||
}
|
||
$_POST['products'] = $products;
|
||
$iso_id = kernel::single('console_iostockorder')->save_iostockorder($_POST, $msg);
|
||
|
||
if ($iso_id) {
|
||
|
||
$this->end(true, '保存完成');
|
||
} else {
|
||
|
||
$this->end(false, '未完成', "index.php?app=console&ctl=admin_iostockorder&act=iostock_add&p[0]=other&p[1]=$io");
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 出入库单明细更新记录展示
|
||
* @param $log_id
|
||
* @date 2024-09-09 2:43 下午
|
||
*/
|
||
public function detailHistory($log_id)
|
||
{
|
||
$basicMaterialSelect = kernel::single('material_basic_select');
|
||
$basicMaterialBarcode = kernel::single('material_basic_material_barcode');
|
||
|
||
$logObj = app::get('ome')->model('operation_log');
|
||
$history = $logObj->db_dump(['log_id' => $log_id]);
|
||
$historyItems = json_decode($history['memo'], true);
|
||
$items = $historyItems['memo'] ?: [];
|
||
if ($items) {
|
||
$product_ids = array();
|
||
foreach ($items as $k => $v) {
|
||
$product_ids[] = $v['product_id'];
|
||
$items[$k]['name'] = $v['product_name'];
|
||
$items[$k]['num'] = $v['nums'];
|
||
$items[$k]['barcode'] = &$product[$v['product_id']]['barcode'];
|
||
$items[$k]['visibility'] = &$product[$v['product_id']]['visibility'];
|
||
$items[$k]['spec_info'] = &$product[$v['product_id']]['spec_info'];
|
||
#新建调拨单时,如果开启固定成本,price就是商品价格;如果没有开启,则是0
|
||
$items[$k]['price'] = $v['price'];
|
||
$items[$k]['count'] = bcmul($v['price'],$v['nums'],3);
|
||
}
|
||
if ($product_ids) {
|
||
$plist = $basicMaterialSelect->getlist_ext('bm_id,visibled,specifications', array('bm_id' => $product_ids));
|
||
foreach ($plist as $value) {
|
||
$product[$value['product_id']]['visibility'] = ($value['visibility'] == 1 ? 'true' : 'false');
|
||
$product[$value['product_id']]['spec_info'] = $value['specifications'];
|
||
|
||
#查询关联的条形码
|
||
$product[$value['product_id']]['barcode'] = $basicMaterialBarcode->getBarcodeById($value['product_id']);
|
||
}
|
||
}
|
||
}
|
||
$this->pagedata['items'] = $items;
|
||
$this->singlepage("admin/iostock/iostock_detail_history.html");
|
||
}
|
||
|
||
/**
|
||
* 出入库单切片导入页面
|
||
* @date 2024-10-11 4:05 下午
|
||
*/
|
||
public function displayImportIso()
|
||
{
|
||
$this->pagedata['type'] = 'iostock';
|
||
$this->pagedata['io'] = $_GET['io'];
|
||
$this->display('admin/iostock/outstock_import.html');
|
||
}
|
||
}
|