Files
OMS/app/warehouse/controller/admin/iostockorder.php
2026-01-04 19:08:31 +08:00

414 lines
16 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.
*/
/*
* 转仓单
* 20180525 by wangjianjun
*/
class warehouse_ctl_admin_iostockorder extends desktop_controller{
function index(){
$params = array(
'actions' => array(
array(
'label'=>'新建',
'href'=>'index.php?app=warehouse&ctl=admin_iostockorder&act=iostock_add&p[0]=1',
'target'=>'_blank'
),
array('label' => '重新推送',
'submit' => 'index.php?app=warehouse&ctl=admin_iostockorder&act=batch_sync',
'confirm' => '你确定要对勾选的单据重新推送吗?',
'target' => 'refresh'),
),
'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'=>false,
'orderBy' => 'iso_id 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){
$oIso = app::get('warehouse')->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';
}
}
$this->finder('warehouse_mdl_iso', $params);
}
//新建页面展示
function iostock_add($io){
$order_label = '转仓单';
$suObj = app::get('purchase')->model('supplier');
$brObj = app::get('ome')->model('branch');
$row = $brObj->getList('branch_id, name',array('b_type'=>1),0,-1);
$this->pagedata['io'] = $io; //按原有入库单业务逻辑 这里写死1 无需走上面的获取branch_list的代码
$this->pagedata['is_super'] = 1; //按原有入库单业务逻辑 这里写死1 无需走上面的获取branch_list的代码
$this->pagedata['supplier'] = $suObj->getList('supplier_id, name','',0,-1);
$this->pagedata['operator'] = kernel::single('desktop_user')->get_name();
$this->pagedata['branch'] = $row;
$this->pagedata['cur_date'] = date('Ymd',time()).$order_label;
$iostock_types = kernel::single('taoguaniostockorder_iostockorder')->get_create_iso_type($io);
//这里目前只要转仓入库的类型
foreach ($iostock_types as $key_it => $value_it){
if($key_it == 1000){
$this->pagedata['iostock_types'][$key_it] = $value_it;
}
}
#外部仓库列表
$oExtrabranch = app::get('ome')->model('extrabranch');
$extrabranch = $oExtrabranch->getlist('branch_id,name','',0,-1);
$this->pagedata['extrabranch'] = $extrabranch;
$this->singlepage("admin/iostock/instock_add.html");
}
//执行新建
function do_save_iostockorder(){
$this->begin();
$_POST['iso_price'] = $_POST['iso_price'] ? $_POST['iso_price'] : 0;
if(!$_POST['bn']) {
$this->end(false, '请先选择入库商品!.');
}
if(!$_POST['supplier_id']) {
$this->end(false, '请先选择供应商!.');
}
//判断类型是否是残损
$branch_id = $_POST['branch'];
$branch_detail = kernel::single('console_iostockdata')->getBranchByid($branch_id);
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.');
}
$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_warehouse_iostockorder($_POST,$msg);
if ($iso_id){
$this->end(true, '保存完成');
}else {
$this->end(false, '保存失败', '', array('msg'=>$msg));
}
}
//取消展示页面
function cancel($iso_id){
$isoObj = app::get('warehouse')->model('iso');
#库存状态判断
$iso = $isoObj->dump($iso_id,'iso_bn,iso_id,type_id');
$title = '转仓入库';
$this->pagedata['iso'] = $iso;
$this->pagedata['io'] = 1;
$this->pagedata['title'] = $title;
$this->display("admin/iostock/stock_cancel.html");
}
//执行取消
function doCancel(){
$this->begin();
$iso_id = $_POST['iso_id'];
$isoObj = app::get('warehouse')->model('iso');
$iso = $isoObj->dump($iso_id,'iso_status');
if ($iso['iso_status']>1){
$this->end(false,'取消失败!');
}else{
$isoObj->update(array('iso_status'=>4),array('iso_id'=>$iso_id));
$this->end(true,'成功');
}
}
//确认是否可以取消
function checkCancel($iso_id){
$isoObj = app::get('warehouse')->model('iso');
$iso = $isoObj->dump($iso_id,'iso_bn,iso_id,type_id,branch_id,check_status,iso_status,out_iso_bn');
if ($iso['check_status'] == '2'){ //已审
if ($iso['iso_status']>1) {
$result = array('rsp'=>'fail','err_msg'=>'单据所在状态不允许此次操作');
}else{
$data = array(
'io_type'=>'DIRECT',
'io_bn'=>$iso['iso_bn'],
'out_iso_bn'=>$iso['out_iso_bn'],
'branch_id'=>$iso['branch_id']
);
$result = kernel::single('console_event_trigger_warehousestockin')->cancel($data, true);
}
}else{ //未审
$result = array('rsp'=>'succ');
}
echo json_encode($result);
}
//审核展示页面
/**
* 检查
* @param mixed $iso_id ID
* @return mixed 返回验证结果
*/
public function check($iso_id){
$basicMaterialBarcode = kernel::single('material_basic_material_barcode');
$isoObj = app::get('warehouse')->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('*')));
$extrabranch = $oExtrabranch->dump($iso['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'];
$this->pagedata['iso'] = $iso;
$this->pagedata['io'] = 1;
$this->pagedata['amount'] = $iso['product_cost'] + $iso['iso_price'];
$this->singlepage('admin/iostock/stock_check.html');
}
//审核
/**
* doCheck
* @return mixed 返回值
*/
public function doCheck(){
$this->begin();
#更新单据审核状态
$iso_id = intval( $_POST['iso_id'] );
$isoObj = app::get('warehouse')->model('iso');
#库存状态判断
$iso = $isoObj->dump($iso_id,'check_status');
if ($iso['check_status']!='1'){
$this->end(false,'此单据已审核!');
}
$iso_data = array('check_status'=>'2');
$result = $isoObj->update($iso_data,array('iso_id'=>$iso_id));
if ($result){
kernel::single('console_event_trigger_warehousestockin')->create(array('iso_id'=>$iso_id),false);
$this->end(true,'审核成功');
}else{
$this->end(false, '审核失败');
}
}
//出入库单残损确认
function doDefective($iso_id){
$iso_itemsObj = app::get('warehouse')->model('iso_items_simple');
$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');
}
//残损确认
function doDefectiveconfirm(){
$this->begin("index.php?app=warehouse&ctl=admin_iostockorder");
$iso_id = intval($_POST['iso_id']);
$oIso = app::get('warehouse')->model("iso");
$oIsoItems = app::get('warehouse')->model("iso_items_simple");
$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,'此单据已确认或无需确认!');
}
$damagedbranch = $iostockObj->getDamagedbranch($iso['branch_id']);
if( empty($damagedbranch) ){
$this->end(false,$item['bn'].'有不良品,但未设置主仓对应的残仓');
}
$branch_id = $damagedbranch['branch_id'];
#查询是否有不良品
$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_items = $oIsoItems->getList('bn,price,defective_num,iso_items_simple_id',array('iso_id'=>$iso_id));
$items_data = array();
foreach($iso_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_simple_id']
);
}
}
if (count($items)>0){
$iostock_data['items'] = $items;
$result = kernel::single('console_iostockorder')->confirm_iostockorder($iostock_data,'50',$msg);
if($result){
#更新确认状态
$io_update_data = array(
'defective_status'=>'2',
);
$oIso->update($io_update_data,array('iso_id'=>$iso_id));
$this->end(true,'成功');
}else{
$this->end(false,'残损确认失败!');
}
}else{
$this->end(false,'没有可确认的货品');
}
}
//差异查看确认
function difference($iso_id){
$isoObj = app::get('warehouse')->model('iso');
$iso = $isoObj->dump($iso_id,'*');
$stockObj = kernel::single('console_receipt_stock');
//获取差异数据
$sql = 'SELECT i.nums,i.normal_num,i.defective_num,i.bn, p.material_name AS name FROM sdb_warehouse_iso_items_simple as i
LEFT JOIN sdb_material_basic_material as p ON i.bn=p.material_bn
WHERE i.iso_id='.$iso_id.' AND (i.normal_num!=i.nums OR i.defective_num>0)';
$iso['iso_items'] = $isoObj->db->select($sql);
$this->pagedata['iso'] = $iso;
$this->singlepage('admin/iostock/stock_difference.html');
}
//编辑展示页面(暂留)
function iostock_edit($iso_id){
$order_label = '转仓单';
//获取出入库单信息
$isoObj = app::get('warehouse')->model('iso');
$data = $isoObj->dump($iso_id, '*', array('iso_items' => array('*')));
echo "<pre>";
var_dump($data);
exit;
$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'];
//获取出入库类型信息
$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");
}
/**
* batch_sync
* @return mixed 返回值
*/
public function batch_sync(){
// $this->begin('');
$ids = $_POST['iso_id'];
$isoObj = app::get('warehouse')->model('iso');
if (!empty($ids)) {
foreach ($ids as $iso_id) {
$iso = $isoObj->dump(array('iso_id'=>$iso_id,'check_status'=>'2'),'iso_id');
if ($iso){
kernel::single('console_event_trigger_warehousestockin')->create(array('iso_id'=>$iso_id),false);
}
}
}
$this->splash('success', null, '命令已经被成功发送!!');
}
}
?>