mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-22 18:35:35 +08:00
730 lines
30 KiB
PHP
730 lines
30 KiB
PHP
<?php
|
||
/**
|
||
* Copyright 2012-2026 ShopeX (https://www.shopex.cn)
|
||
*
|
||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
* you may not use this file except in compliance with the License.
|
||
* You may obtain a copy of the License at
|
||
*
|
||
* http://www.apache.org/licenses/LICENSE-2.0
|
||
*
|
||
* Unless required by applicable law or agreed to in writing, software
|
||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
* See the License for the specific language governing permissions and
|
||
* limitations under the License.
|
||
*/
|
||
|
||
class wms_ctl_admin_iostockorder extends desktop_controller{
|
||
var $name = "出入库管理";
|
||
var $workground = "wms_center";
|
||
|
||
/**
|
||
* index
|
||
* @return mixed 返回值
|
||
*/
|
||
public function index() {}
|
||
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;');
|
||
}
|
||
|
||
$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'=>'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();
|
||
$branch_ids = kernel::single('wms_branch')->getBranchwmsByUser($is_super);
|
||
#if (!$is_super){
|
||
#$branch_ids = $oBranch->getBranchByUser(true);
|
||
if ($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;
|
||
$params['base_filter']['confirm'] = 'N';
|
||
$params['base_filter']['check_status'] = '2';
|
||
$this->finder('taoguaniostockorder_mdl_iso', $params);
|
||
}
|
||
/**
|
||
*
|
||
* 其他入库列表
|
||
*/
|
||
function other_iostock(){
|
||
$io = $_GET['io'];
|
||
if($io){
|
||
$title = '其他入库';
|
||
$this->name = "入库管理";
|
||
}else{
|
||
$title = '其他出库';
|
||
$this->name = "出库管理";
|
||
}
|
||
|
||
$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'=>'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();
|
||
$is_super = kernel::single('desktop_user')->is_super();
|
||
$branch_ids = kernel::single('wms_branch')->getBranchwmsByUser($is_super);
|
||
#if (!$is_super){
|
||
#$branch_ids = $oBranch->getBranchByUser(true);
|
||
if ($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'] = kernel::single('wms_iostockorder')->get_create_iso_type($io,true);
|
||
$params['base_filter']['confirm'] = 'N';
|
||
$params['base_filter']['check_status'] = '2';
|
||
$this->finder('taoguaniostockorder_mdl_iso', $params);
|
||
}
|
||
|
||
|
||
|
||
function iostockorder_confirm($iso_id,$io)
|
||
{
|
||
$basicMaterialBarcode = kernel::single('material_basic_material_barcode');
|
||
$libBranchProductPos = kernel::single('ome_branch_product_pos');
|
||
$basicMStorageLifeLib = kernel::single('material_storagelife');
|
||
|
||
$oIso = app::get('taoguaniostockorder')->model("iso");
|
||
$oIsoItems = app::get('taoguaniostockorder')->model("iso_items");
|
||
|
||
$count = count($oIsoItems->getList('*',array('iso_id'=>$iso_id), 0, -1));
|
||
$iso_items = $oIsoItems->getList('*',array('iso_id'=>$iso_id));
|
||
$iso = $oIso->dump($iso_id,'branch_id,supplier_id,type_id');
|
||
foreach($iso_items as $k=>$v)
|
||
{
|
||
$barcode_val = $basicMaterialBarcode->getBarcodeById($v['product_id']);
|
||
|
||
$iso_items[$k]['barcode'] = $barcode_val;
|
||
$assign = $libBranchProductPos->get_pos($v['product_id'],$iso['branch_id']);
|
||
if(empty($assign)){
|
||
$iso_items[$k]['is_new']="true";
|
||
}else{
|
||
$iso_items[$k]['is_new']="false";
|
||
}
|
||
$iso_items[$k]['spec_info'] = $v['spec_info'];
|
||
$iso_items[$k]['entry_num'] = (isset($v['in_num']) ? $v['nums'] - $v['in_num'] : $v['nums']);#可调拨数量
|
||
$iso_items[$k]['in_num'] = intval($v['in_num']);#保质期_已入库数量
|
||
|
||
//[开启]保质期监控
|
||
$get_material_conf = $basicMStorageLifeLib->checkStorageLifeById($v['product_id']);
|
||
if($get_material_conf)
|
||
{
|
||
$iso_items[$k]['use_expire'] = 1;
|
||
}
|
||
}
|
||
|
||
$this->pagedata['operator'] = kernel::single('desktop_user')->get_name();
|
||
$this->pagedata['iso_items'] = $iso_items;
|
||
$this->pagedata['iso_id'] = $iso_id;
|
||
$this->pagedata['count']=$count;
|
||
$this->pagedata['branch_id']=$iso['branch_id'];
|
||
$this->pagedata['type_id'] = $iso['type_id'];
|
||
$this->pagedata['io'] = $io;
|
||
if($io){
|
||
$this->singlepage("admin/iostock/instock_confirm.html");
|
||
}else{
|
||
$this->singlepage("admin/iostock/outstock_confirm.html");
|
||
}
|
||
|
||
}
|
||
|
||
/**
|
||
* 出入库确认
|
||
*/
|
||
function save_iso_confirm(){
|
||
$this->begin('index.php?app=wms&ctl=admin_iostockorder');
|
||
$oIsoItems = app::get('taoguaniostockorder')->model("iso_items");
|
||
$oIso = app::get('taoguaniostockorder')->model("iso");
|
||
$oBranch_pos = app::get('ome')->model("branch_pos");
|
||
|
||
$entry_num = $_POST['entry_num'];
|
||
$iso_id = $_POST['iso_id'];
|
||
$ids = $_POST['ids'];
|
||
$branch_id = $_POST['branch_id'];
|
||
$msg = '';
|
||
|
||
$Iso = $oIso->dump(array('iso_id'=>$iso_id),'confirm,type_id,iso_bn');
|
||
if ($Iso['type_id']=='5' || $Iso['type_id']=='50'){
|
||
$branch_detail = kernel::single('wms_iostockdata')->getBranchByid($branch_id);
|
||
if ($branch_detail['type']!='damaged'){
|
||
$this->end(false, '出入库类型为残损入库,仓库必须为残仓');
|
||
}
|
||
}
|
||
|
||
$iso_items = $oIsoItems->getList('*',array('iso_id'=>$iso_id));
|
||
|
||
$io = $_POST['io'];
|
||
|
||
#关联保质期物料
|
||
$basicMaterialObj = app::get('material')->model('basic_material');
|
||
$basicMaterialConf = app::get('material')->model('basic_material_conf');
|
||
$basicMReceiptStorageLifeLib = kernel::single('material_receipt_storagelife');
|
||
$basicMStorageLifeLib = kernel::single('material_storagelife');
|
||
|
||
$expire_bm_ids = $_POST['is_expire_bn'];
|
||
$expire_bm_arr = $_POST['expire_bm_info'];
|
||
$back_url = 'index.php?app=wms&ctl=admin_iostockorder&act=iostockorder_confirm&p[0]='.$iso_id.'&p[1]='.$io;
|
||
|
||
if($io){
|
||
$label = '入库';
|
||
|
||
//有保质期物料数据处理
|
||
$all_expire_bm_arr = array();
|
||
$has_expire_bn = false;
|
||
if($expire_bm_ids){
|
||
$has_expire_bn = true;
|
||
if($expire_bm_arr){
|
||
foreach($expire_bm_arr as $expire_bm){
|
||
$tmp_expire_bm_arr = array();
|
||
$tmp_expire_bm_arr = json_decode($expire_bm,true);
|
||
if($tmp_expire_bm_arr){
|
||
foreach($tmp_expire_bm_arr as $k => $tmp_expire_bm){
|
||
//如果保质期已存在,判断是否有效状态可操作
|
||
$storageLifeInfo = $basicMStorageLifeLib->getStorageLifeBatch($branch_id, $tmp_expire_bm['bm_id'], $tmp_expire_bm['expire_bn']);
|
||
if($storageLifeInfo){
|
||
if($storageLifeInfo['status'] == 2){
|
||
$this->end(false, '保质期条码已被关闭停用:'.$tmp_expire_bm['expire_bn'], $back_url);
|
||
}
|
||
}
|
||
|
||
$basicMInfo = $basicMaterialObj->dump(array('bm_id'=>$tmp_expire_bm['bm_id']), 'bm_id, material_name, material_bn,material_bn_crc32');
|
||
$basicMaterialConfInfo = $basicMaterialConf->dump(array('bm_id'=>$tmp_expire_bm['bm_id']), 'warn_day,quit_day');
|
||
//数组格式化批次货品的具体每个批次
|
||
$all_expire_bm_arr[] = array_merge($tmp_expire_bm,$basicMInfo,$basicMaterialConfInfo,array('branch_id'=>$branch_id,'bill_id'=>$iso_id,'bill_bn'=>$Iso['iso_bn'],'bill_type'=>$Iso['type_id'],'bill_io_type'=>1));
|
||
$all_expire_ids[] = $basicMInfo['bm_id'];
|
||
$all_expire_bn_ids[$basicMInfo['bm_id']] = $basicMInfo['material_bn'];
|
||
//重新计算批次货品的入库数量总数
|
||
if(isset($entry_num[$tmp_expire_bm['iso_items_id']])){
|
||
$entry_num[$tmp_expire_bm['iso_items_id']] += $tmp_expire_bm['in_num'];
|
||
}else{
|
||
$entry_num[$tmp_expire_bm['iso_items_id']] = $tmp_expire_bm['in_num'];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
foreach($iso_items as $k => $iso_item){
|
||
if(!isset($entry_num[$iso_item['iso_items_id']]) || $iso_item['nums'] != $entry_num[$iso_item['iso_items_id']]){
|
||
$this->end(false, '物料:'.$iso_item['product_name'].'的调拨入库数量与要求入库数量不符', $back_url);
|
||
}
|
||
}
|
||
|
||
if(empty($all_expire_ids))
|
||
{
|
||
$this->end(false, '保质期信息没有录入', $back_url);
|
||
}
|
||
|
||
foreach((array)$expire_bm_ids as $bm_id){
|
||
if(!in_array($bm_id,$all_expire_ids)){
|
||
$this->end(false, '物料:'.$all_expire_bn_ids[$bm_id].'的保质期信息没有录入', $back_url);
|
||
}
|
||
}
|
||
}
|
||
}else{
|
||
$label = '出库';
|
||
|
||
//有保质期物料数据处理
|
||
$all_expire_bm_arr = array();
|
||
$has_expire_bn = false;
|
||
if($expire_bm_ids)
|
||
{
|
||
$has_expire_bn = true;
|
||
if($expire_bm_arr){
|
||
foreach($expire_bm_arr as $expire_bm){
|
||
$tmp_expire_bm_arr = array();
|
||
$tmp_expire_bm_arr = json_decode($expire_bm,true);
|
||
if($tmp_expire_bm_arr){
|
||
foreach($tmp_expire_bm_arr as $k => $tmp_expire_bm)
|
||
{
|
||
$basicMInfo = $basicMaterialObj->dump(array('bm_id'=>$tmp_expire_bm['bm_id']), 'bm_id, material_name, material_bn,material_bn_crc32');
|
||
$all_expire_ids[] = $basicMInfo['bm_id'];
|
||
$all_expire_bn_ids[$basicMInfo['bm_id']] = $basicMInfo['material_bn'];
|
||
|
||
#查询保质期条码是否有效
|
||
$storageLifeInfo = $basicMStorageLifeLib->checkStorageListBatchExist($branch_id, $tmp_expire_bm['bm_id'], $tmp_expire_bm['expire_bn'], $msg);
|
||
if($storageLifeInfo == false)
|
||
{
|
||
$this->end(false, $msg, $back_url);
|
||
}
|
||
|
||
if($storageLifeInfo['balance_num'] < $tmp_expire_bm['out_num'])
|
||
{
|
||
$this->end(false, '保质期条码:'. $tmp_expire_bm['expire_bn'] .'输入的出库数量大于有效数量', $back_url);
|
||
}
|
||
|
||
#采购入库流水单据信息
|
||
$all_expire_bm_arr[] = array(
|
||
'branch_id' => $storageLifeInfo['branch_id'],
|
||
'bm_id' => $storageLifeInfo['bm_id'],
|
||
'expire_bn' => $storageLifeInfo['expire_bn'],
|
||
'difference_num' => $tmp_expire_bm['out_num'],
|
||
'bill_id' => $iso_id,
|
||
'bill_bn' => $Iso['iso_bn'],
|
||
'bill_type' => $Iso['type_id'],
|
||
'bill_io_type' => $Iso['type_id'],
|
||
);
|
||
|
||
#重新计算批次货品的入库数量总数
|
||
if(isset($entry_num[$tmp_expire_bm['iso_items_id']])){
|
||
$entry_num[$tmp_expire_bm['iso_items_id']] += $tmp_expire_bm['out_num'];
|
||
}else{
|
||
$entry_num[$tmp_expire_bm['iso_items_id']] = $tmp_expire_bm['out_num'];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
foreach($iso_items as $k => $iso_item){
|
||
if(!isset($entry_num[$iso_item['iso_items_id']]) || $iso_item['nums'] != $entry_num[$iso_item['iso_items_id']]){
|
||
$this->end(false, '物料:'.$iso_item['product_name'].'的调拨出库数量与要求出库数量不符', $back_url);
|
||
}
|
||
}
|
||
|
||
if(empty($all_expire_ids))
|
||
{
|
||
$this->end(false, '没有关联保质期条码', $back_url);
|
||
}
|
||
|
||
foreach((array)$expire_bm_ids as $bm_id){
|
||
if(!in_array($bm_id,$all_expire_ids)){
|
||
$this->end(false, '物料:'.$all_expire_bn_ids[$bm_id].'没有关联保质期条码', $back_url);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if($Iso['confirm']=='Y'){
|
||
$this->end(false, '此单据已确认!', $back_url);
|
||
}
|
||
if (empty($ids)){
|
||
$this->end(false, '请选择需要'.$label.'的商品', $back_url);
|
||
}
|
||
|
||
$ret = array();
|
||
$error_bn = array();
|
||
$oBranchProduct = app::get('ome')->model('branch_product');
|
||
foreach ($ids as $k=>$id) {
|
||
if ($entry_num[$id] <= 0){
|
||
$this->end(false, ''.$label.'量必须大于0', $back_url);
|
||
}
|
||
|
||
if($io == '0'){
|
||
$aRow = $oBranchProduct->dump(array('product_id'=>$_POST['product_ids'][$id], 'branch_id'=>$_POST['branch_id']),'store,store_freeze');
|
||
if($entry_num[$id] > ($aRow['store'])){
|
||
$this->end(false, '出库数量不可大于库存数量.');
|
||
}
|
||
}
|
||
}
|
||
$iso_items = $oIsoItems->getList('*',array('iso_id'=>$iso_id));
|
||
foreach($iso_items as $ik=>$iv){
|
||
if(app::get('taoguaninventory')->is_installed()){
|
||
$check_inventory = kernel::single('taoguaninventory_inventorylist')->checkproductoper($iv['product_id'],$branch_id);
|
||
|
||
if(!$check_inventory){
|
||
$this->end(false, '此商品正在盘点中,不可以出入库操作!', $back_url);
|
||
}
|
||
}
|
||
}
|
||
|
||
$err_msg = [];
|
||
//保质期信息保存
|
||
if($has_expire_bn)
|
||
{
|
||
if($io == '0')
|
||
{
|
||
$is_save = $basicMReceiptStorageLifeLib->update($all_expire_bm_arr, $err_msg);
|
||
}
|
||
else
|
||
{
|
||
$is_save = $basicMReceiptStorageLifeLib->generate($all_expire_bm_arr, $err_msg);
|
||
}
|
||
}
|
||
|
||
if(($has_expire_bn && $is_save) || !$has_expire_bn)
|
||
{
|
||
//事件触发,通知oms出入库
|
||
$type_id = $_POST['type_id'];
|
||
if($io){#入
|
||
kernel::single('wms_event_trigger_otherinstorage')->inStorage(array('iso_id'=>$iso_id, 'items'=>array()), true);
|
||
}else{
|
||
kernel::single('wms_event_trigger_otheroutstorage')->outStorage(array('iso_id'=>$iso_id), true);
|
||
}
|
||
|
||
$this->end(true, $label.'完成');
|
||
}else{
|
||
$error_msg = is_array($err_msg) ? implode('!',$err_msg) : '批次信息保存失败';
|
||
$this->end(false, $error_msg, $back_url);
|
||
}
|
||
}
|
||
|
||
/**
|
||
*
|
||
* 出入库单查询
|
||
*/
|
||
function search_iostockorder(){
|
||
$io = $_GET['io'];
|
||
switch ($io){
|
||
case '1':
|
||
$this->base_filter = array();
|
||
$this->title = '入库单查询';
|
||
$confirm_label = '入库单确认';
|
||
break;
|
||
case '0':
|
||
$this->base_filter = array();
|
||
$this->title = '出库单查询';
|
||
$confirm_label = '出库单确认';
|
||
break;
|
||
}
|
||
|
||
$this->base_filter['confirm'] = 'Y';
|
||
if($_POST['type_id']) {
|
||
$this->base_filter['type_id'] = intval($_POST['type_id']);
|
||
}else{
|
||
$this->base_filter['type_id'] = kernel::single('taoguaniostockorder_iostockorder')->get_iso_type($io,true);
|
||
}
|
||
|
||
$this->finder('taoguaniostockorder_mdl_iso',array(
|
||
'title' => $this->title,
|
||
'actions' => array(
|
||
// array('label'=>$confirm_label,'submit'=>'index.php?app=ome&ctl=admin_order&act=dispatching','target'=>'dialog::{width:400,height:200,title:\'订单分派\'}'),
|
||
),
|
||
'base_filter' => $this->base_filter,
|
||
'use_buildin_new_dialog' => false,
|
||
'use_buildin_set_tag'=>false,
|
||
'use_buildin_recycle'=>false,
|
||
'use_buildin_export'=>true,
|
||
'use_buildin_import'=>false,
|
||
'use_buildin_filter'=>true,
|
||
'finder_cols'=>'name,iso_bn,oper,operator,original_bn,create_time,type_id',
|
||
//'finder_aliasname'=>$finder_aliasname,
|
||
//'finder_cols'=>$finder_cols,
|
||
));
|
||
}
|
||
|
||
/*------------------------------------------------------ */
|
||
//-- [调拨入库]编辑基础物料保质期条码
|
||
/*------------------------------------------------------ */
|
||
function storage_life_instock()
|
||
{
|
||
$iso_id = $_POST['iso_id'];
|
||
$bm_id = $_POST['bm_id'];
|
||
$has_expire_bm_info = $_POST['has_expire_bm_info'] ? $_POST['has_expire_bm_info'] : 1;
|
||
if(empty($iso_id) || empty($bm_id))
|
||
{
|
||
die('无效操作,请检查!');
|
||
}
|
||
|
||
$oIso = app::get('taoguaniostockorder')->model("iso");
|
||
$oIsoItems = app::get('taoguaniostockorder')->model("iso_items");
|
||
$basicMaterialObj = app::get('material')->model('basic_material');#基础物料
|
||
$basicMStorageLifeLib = kernel::single('material_storagelife');
|
||
$basicMaterialStorageLifeObj = app::get('material')->model('basic_material_storage_life');
|
||
|
||
#出入库单信息
|
||
$iso = $oIso->dump($iso_id,'branch_id,supplier_id,type_id');
|
||
|
||
#出入库单信息明细
|
||
$iso_item = $oIsoItems->dump(array('iso_id'=>$iso_id, 'product_id'=>$bm_id), 'iso_items_id, iso_id, bn, nums');
|
||
if(empty($iso_item))
|
||
{
|
||
die('没有找到对应的出入库单信息');
|
||
}
|
||
|
||
#保质期配置信息
|
||
$material_conf = $basicMStorageLifeLib->getStorageLifeInfoById($bm_id);
|
||
if(!$material_conf)
|
||
{
|
||
die('没有找到对应的基础物料保质期配置信息!');
|
||
}
|
||
|
||
$row = $basicMaterialObj->dump(array('bm_id'=>$bm_id), 'bm_id, material_name, material_bn');
|
||
if(empty($row))
|
||
{
|
||
die('没有找到对应的基础物料');
|
||
}
|
||
|
||
#已有保质期批次号[排除已过期的]
|
||
$filter = array('branch_id'=>$iso['branch_id'], 'bm_id'=>$bm_id, 'expiring_date|than'=>time());
|
||
$storageLifeInfo = $basicMaterialStorageLifeObj->getList('bmsl_id', $filter);
|
||
$this->pagedata['exist_expire'] = ($storageLifeInfo ? 'true' : 'false');#标记
|
||
|
||
$this->pagedata['has_expire_bm_info'] = $has_expire_bm_info;
|
||
$this->pagedata['iso_item'] = $iso_item;
|
||
$this->pagedata['time_from'] = date('Y-m-d', time());
|
||
$this->pagedata['item'] = $row;
|
||
$this->pagedata['material_conf'] = $material_conf;
|
||
$this->page('admin/iostock/storage_life_instock.html');
|
||
}
|
||
|
||
/*------------------------------------------------------ */
|
||
//-- [关联保质期]JSON组织数据
|
||
/*------------------------------------------------------ */
|
||
function do_storage_life_instock()
|
||
{
|
||
$iso_id = $_POST['iso_id'];
|
||
$bm_id = $_POST['bm_id'];
|
||
$iso_items_id = $_POST['iso_items_id'];
|
||
|
||
$expire_barcode = $_POST['expire_barcode'];
|
||
$expire_num = $_POST['expire_num'];
|
||
$production_date = $_POST['production_date'];
|
||
$date_type = $_POST['date_type'];
|
||
$guarantee_period = $_POST['guarantee_period'];
|
||
$expiring_date = $_POST['expiring_date'];
|
||
|
||
#检测重复的保质期条码
|
||
$unique_arr = array_unique($expire_barcode);
|
||
$repeat_arr = array_diff_assoc($expire_barcode, $unique_arr);
|
||
if($repeat_arr)
|
||
{
|
||
die(json_encode(array('code' => 'FAIL', 'msg' => '存在多个重复的条码,code:'. implode(',', $repeat_arr))));
|
||
}
|
||
|
||
//生成保质期数据内容字符串
|
||
$save_data = array();
|
||
$count = 0;
|
||
foreach ($expire_barcode as $key => $val)
|
||
{
|
||
$save_data[$key]['iso_items_id'] = $iso_items_id;
|
||
$save_data[$key]['bm_id'] = $bm_id;
|
||
$save_data[$key]['expire_bn'] = $val;#物料保质期编码
|
||
$save_data[$key]['in_num'] = $expire_num[$key];#入库数量
|
||
|
||
$save_data[$key]['production_date'] = $production_date[$key];#生产日期
|
||
$save_data[$key]['date_type'] = $date_type[$key];
|
||
$save_data[$key]['guarantee_period'] = $guarantee_period[$key];#保质期
|
||
$save_data[$key]['expiring_date'] = $date_type[$key] == 'date' ? $expiring_date[$key] : '';#过期日期
|
||
$count +=$save_data[$key]['in_num'];
|
||
}
|
||
|
||
$msg = json_encode($save_data);
|
||
echo json_encode(array('code' => 'SUCC', 'msg' => $msg, 'count'=>$count));
|
||
}
|
||
|
||
/*------------------------------------------------------ */
|
||
//-- [调拨出库]绑定基础物料保质期条码
|
||
/*------------------------------------------------------ */
|
||
function bind_storage_life()
|
||
{
|
||
|
||
$iso_id = $_POST['iso_id'];
|
||
$bm_id = $_POST['bm_id'];
|
||
$has_expire_bm_info = $_POST['has_expire_bm_info'] ? $_POST['has_expire_bm_info'] : 1;
|
||
if(empty($iso_id) || empty($bm_id))
|
||
{
|
||
die('无效操作,请检查!');
|
||
}
|
||
|
||
|
||
$oIsoItems = app::get('taoguaniostockorder')->model("iso_items");
|
||
$basicMaterialObj = app::get('material')->model('basic_material');#基础物料
|
||
$basicMStorageLifeLib = kernel::single('material_storagelife');
|
||
|
||
#出入库单信息明细
|
||
$iso_item = $oIsoItems->dump(array('iso_id'=>$iso_id, 'product_id'=>$bm_id), 'iso_items_id, iso_id, bn, nums');
|
||
if(empty($iso_item))
|
||
{
|
||
die('没有找到对应的出入库单信息');
|
||
}
|
||
|
||
#基础物料保质期开关
|
||
$material_conf = $basicMStorageLifeLib->checkStorageLifeById($bm_id);
|
||
if(!$material_conf)
|
||
{
|
||
die('基础物料保质期开关未开启!');
|
||
}
|
||
|
||
$row = $basicMaterialObj->dump(array('bm_id'=>$bm_id), 'bm_id, material_name, material_bn');
|
||
if(empty($row))
|
||
{
|
||
die('没有找到对应的基础物料');
|
||
}
|
||
|
||
$this->pagedata['has_expire_bm_info'] = $has_expire_bm_info;
|
||
$this->pagedata['iso_item'] = $iso_item;
|
||
$this->pagedata['time_from'] = date('Y-m-d', time());
|
||
$this->pagedata['item'] = $row;
|
||
$this->page('admin/iostock/bind_storage_life_outstock.html');
|
||
}
|
||
|
||
//根据保质期条码检查是否存在有效
|
||
function checkExpireBn()
|
||
{
|
||
$iso_id = $_POST['iso_id'];
|
||
$bm_id = $_POST['bm_id'];
|
||
$expire_bn = $_POST['expire_bn'];
|
||
$out_num = $_POST['out_num'];
|
||
$msg = '';
|
||
|
||
if(empty($expire_bn) || empty($bm_id) || empty($iso_id) || empty($out_num))
|
||
{
|
||
die('empty');
|
||
}
|
||
|
||
$codebaseLib= kernel::single('material_codebase');
|
||
$res = $codebaseLib->checkBmHasThisStorageListBn($bm_id, $expire_bn);
|
||
|
||
//检查保质期条码明细
|
||
if($res)
|
||
{
|
||
$oIso = app::get('taoguaniostockorder')->model('iso');
|
||
$iso_row = $oIso->dump(array('iso_id'=>$iso_id), 'branch_id');
|
||
|
||
$basicMStorageLifeLib = kernel::single('material_storagelife');
|
||
$expire_bn_row = $basicMStorageLifeLib->checkStorageListBatchExist($iso_row['branch_id'], $bm_id, $expire_bn, $msg);
|
||
if($expire_bn_row == false)
|
||
{
|
||
die('fail');
|
||
}
|
||
|
||
if($expire_bn_row['balance_num'] < $out_num)
|
||
{
|
||
die('error_num');
|
||
}
|
||
}
|
||
|
||
echo $res;
|
||
}
|
||
|
||
#绑定关联保质期条码明细
|
||
function do_bind_storage_life()
|
||
{
|
||
$iso_id = $_POST['iso_id'];
|
||
$bm_id = $_POST['bm_id'];
|
||
$iso_items_id = $_POST['iso_items_id'];
|
||
|
||
$expire_barcode = $_POST['expire_barcode'];
|
||
$expire_num = $_POST['expire_num'];
|
||
|
||
#检测重复的保质期条码
|
||
$unique_arr = array_unique($expire_barcode);
|
||
$repeat_arr = array_diff_assoc($expire_barcode, $unique_arr);
|
||
if($repeat_arr)
|
||
{
|
||
die(json_encode(array('code' => 'FAIL', 'msg' => '存在多个重复的条码,code:'. implode(',', $repeat_arr))));
|
||
}
|
||
|
||
//生成保质期数据内容字符串
|
||
$save_data = array();
|
||
$count = 0;
|
||
foreach ($expire_barcode as $key => $val)
|
||
{
|
||
$save_data[$key]['iso_items_id'] = $iso_items_id;
|
||
$save_data[$key]['bm_id'] = $bm_id;
|
||
|
||
$save_data[$key]['expire_bn'] = $val;
|
||
$save_data[$key]['out_num'] = $expire_num[$key];
|
||
$count +=$save_data[$key]['out_num'];
|
||
|
||
}
|
||
|
||
$msg = json_encode($save_data);
|
||
echo json_encode(array('code' => 'SUCC', 'msg' => $msg, 'count'=>$count));
|
||
}
|
||
|
||
/*
|
||
* 检查保质期物料是否存在
|
||
*/
|
||
function isExistExpireBn()
|
||
{
|
||
$iso_id = $_POST['iso_id'];
|
||
$bm_id = $_POST['bm_id'];
|
||
$expire_bn = $_POST['expire_bn'];
|
||
$date_type_list = array(1=>'day', 'month', 'year', 'date');
|
||
|
||
if(empty($iso_id) || empty($bm_id) || empty($expire_bn))
|
||
{
|
||
echo json_encode(array('code' => 'error', 'msg' => '无效操作'));
|
||
exit;
|
||
}
|
||
|
||
$oIso = app::get('taoguaniostockorder')->model('iso');
|
||
$basicMaterialStorageLifeObj = app::get('material')->model('basic_material_storage_life');
|
||
|
||
#采购信息
|
||
$iso_row = $oIso->dump(array('iso_id'=>$iso_id), 'branch_id');
|
||
|
||
#保质期批次号
|
||
$filter = array('branch_id'=>$iso_row['branch_id'], 'bm_id'=>$bm_id, 'expire_bn'=>$expire_bn);
|
||
$row = $basicMaterialStorageLifeObj->dump($filter, 'bmsl_id, guarantee_period, production_date, expiring_date, date_type');
|
||
if(empty($row))
|
||
{
|
||
echo json_encode(array('code' => 'error', 'msg' => '没有相关保质期批次号'));
|
||
exit;
|
||
}
|
||
elseif($row['expiring_date'] < time())
|
||
{
|
||
echo json_encode(array('code' => 'error', 'msg' => '保质期批次号已经过期'));
|
||
exit;
|
||
}
|
||
|
||
$data = array('code' => 'SUCC', 'production_date'=>date('Y-m-d', $row['production_date']));
|
||
$data['date_type'] = $date_type_list[$row['date_type']];
|
||
$data['guarantee_period'] = $row['guarantee_period'];
|
||
$data['expire_bn'] = $row['expire_bn'];
|
||
|
||
echo json_encode($data);
|
||
exit;
|
||
}
|
||
}
|
||
?>
|