mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-31 05:25:32 +08:00
267 lines
11 KiB
PHP
267 lines
11 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.
|
|
*/
|
|
/**
|
|
* @Author: xueding@shopex.cn
|
|
* @Date: 2023/1/29
|
|
* @Describe: pos 其他出入库lib类型
|
|
*/
|
|
class pos_iso
|
|
{
|
|
/**
|
|
* 创建pos 其他出入库单据
|
|
* @Author: xueding
|
|
* @Vsersion: 2023/1/29 下午1:27
|
|
* @param $data
|
|
* @return array
|
|
*/
|
|
|
|
public function create($data)
|
|
{
|
|
$isoMdl = app::get('pos')->model('iso');
|
|
$isoItemsMdl = app::get('pos')->model('iso_items');
|
|
$isoItems = $data['iso_items'];
|
|
if ($data && $isoItems) {
|
|
unset($data['iso_items']);
|
|
if (!$data['iso_id']) {
|
|
$isoId = $isoMdl->insert($data);
|
|
} else {
|
|
$isoId = $data['iso_id'];
|
|
}
|
|
if ($isoId) {
|
|
foreach ($isoItems as $key => $val) {
|
|
$val['iso_id'] = $isoId;
|
|
$itemsRes = $isoItemsMdl->insert($val);
|
|
}
|
|
if ($itemsRes) {
|
|
return [true, '创建成功'];
|
|
} else {
|
|
return [false, '创建库存变动出入库明细失败'];
|
|
}
|
|
}
|
|
}
|
|
return [false, '创建库存变动出入库明细失败'];
|
|
}
|
|
|
|
/**
|
|
* 导入出入库单据
|
|
* @Author: xueding
|
|
* @Vsersion: 2023/1/29 下午7:28
|
|
* @param $import_file
|
|
* @param int $io
|
|
* @return mixed
|
|
*/
|
|
public function doImport($import_file, $io = 0)
|
|
{
|
|
return kernel::single('omecsv_phpoffice')->import($import_file, function ($line, $buffer, $post) use ($io) {
|
|
static $title;
|
|
|
|
$tmpTitle = $this->getTitle($io);
|
|
if ($line == 1) {
|
|
return [true];
|
|
}
|
|
|
|
if ($line == 2) {
|
|
$title = $buffer;
|
|
|
|
// 验证模板是否正确
|
|
if (array_filter($title) != array_values($tmpTitle)) {
|
|
return [false, '导入模板不正确'];
|
|
}
|
|
return [true];
|
|
}
|
|
|
|
$row = array_combine(array_keys($tmpTitle), $buffer);
|
|
|
|
// 数据验证
|
|
foreach ($row as $k => $v) {
|
|
if ('*' == mb_substr($tmpTitle[$k], 0,1) && !$v) {
|
|
return [false, sprintf('%s必填', $tmpTitle[$k])];
|
|
}
|
|
}
|
|
|
|
$data = [
|
|
'iso_bn' => $row['iso_bn'],
|
|
'stock_unit' => $row['stock_unit'],
|
|
'created' => kernel::single('ome_func')->date2time($row['created']),
|
|
'salesman' => $row['salesman'],
|
|
'remark' => $row['remark'],
|
|
'iso_type' => $io,
|
|
];
|
|
$posIsoInfo = app::get('pos')->model('iso')->db_dump(['iso_bn' => $row['iso_bn']], 'iso_id');
|
|
if ($posIsoInfo) {
|
|
$data['iso_id'] = $posIsoInfo['iso_id'];
|
|
}
|
|
// todo.XueDing: stock_unit 门店判断是否存在
|
|
$branchBn = $row['branch_bn'];
|
|
$branchInfo = app::get('ome')->model('branch')->db_dump(['branch_bn' => $branchBn], 'branch_id');
|
|
if (!$branchInfo) {
|
|
return [false, '未找到对应仓库信息'];
|
|
}
|
|
$db = kernel::database();
|
|
$sql = "SELECT m.bm_id,m.material_name,me.retail_price FROM sdb_material_basic_material AS m,sdb_material_basic_material_ext AS me WHERE m.bm_id = me.bm_id AND m.material_bn = '" . $row['goods_bn'] . "'";
|
|
$materialInfo = $db->selectrow($sql);
|
|
if (!$materialInfo) {
|
|
return [false, '未找到对应商品物料信息编码:' . $row['goods_bn']];
|
|
}
|
|
|
|
$data['branch_id'] = $branchInfo['branch_id'];
|
|
$stockItems = [
|
|
'goods_bn' => $row['goods_bn'],
|
|
'specifications' => $row['specifications'],
|
|
'goods_attr' => $row['goods_attr'],
|
|
'storage_code' => $row['storage_code'],
|
|
'basic_calc_unit' => $row['basic_calc_unit'],
|
|
'plan_qty' => $row['plan_qty'],
|
|
'actual_qty' => $row['actual_qty'],
|
|
'assist_calc_unit' => $row['assist_calc_unit'],
|
|
'plan_qty_assist' => $row['plan_qty_assist'],
|
|
'actual_qty_assist' => $row['actual_qty_assist'],
|
|
'item_remark' => $row['item_remark'],
|
|
'batch_code' => $row['batch_code'],
|
|
'product_date' => $row['product_date'],
|
|
'expire_date' => $row['expire_date'],
|
|
'bm_id' => $materialInfo['bm_id'],
|
|
'product_id' => $materialInfo['bm_id'],
|
|
'goods_name' => $materialInfo['material_name'],
|
|
'price' => $materialInfo['retail_price'],
|
|
];
|
|
$data['iso_items'][] = $stockItems;
|
|
|
|
return $this->create($data);
|
|
}, $_POST);
|
|
}
|
|
|
|
/**
|
|
* 创建iso单据
|
|
* @Author: xueding
|
|
* @Vsersion: 2023/1/29 下午7:29
|
|
*/
|
|
public function createIostock()
|
|
{
|
|
$isoMdl = app::get('pos')->model('iso');
|
|
$isoItemsMdl = app::get('pos')->model('iso_items');
|
|
$isoList = $isoMdl->getList('*', ['create_iso_status' => '0']);
|
|
$isoIds = array_column($isoList, 'iso_id');
|
|
$isoItemsList = $isoItemsMdl->getList('*', ['iso_id' => $isoIds]);
|
|
$isoItemsList = ome_func::filter_by_value($isoItemsList, 'iso_id');
|
|
$iostockorder_instance = kernel::single('console_iostockorder');
|
|
$op = kernel::single('ome_func')->getDesktopUser();
|
|
foreach ($isoList as $key => $val) {
|
|
$msg = '创建单据成功';
|
|
$ioTitle = '入库单';
|
|
$typeId = ome_iostock::DIRECT_STORAGE;
|
|
if (!$val['iso_type']) {
|
|
$ioTitle = '出库单';
|
|
$typeId = ome_iostock::DIRECT_LIBRARAY;
|
|
}
|
|
$isoItem = $isoItemsList[$val['iso_id']];
|
|
if ($isoItem) {
|
|
foreach ($isoItem as $v) {
|
|
$products[$v['product_id']] = [
|
|
'bn' => $v['goods_bn'],
|
|
'name' => $v['goods_name'],
|
|
'nums' => $v['actual_qty'],
|
|
'unit' => $v['specifications'],
|
|
'price' => $v['price'],
|
|
];
|
|
}
|
|
}
|
|
$data = array(
|
|
'iostockorder_name' => date('Ymd') . '库存变动其他' . $ioTitle,
|
|
'supplier' => '',
|
|
'supplier_id' => 0,
|
|
'branch' => $val['branch_id'],
|
|
'type_id' => $typeId,
|
|
'iso_price' => 0,
|
|
'memo' => (string)$val['remark'],
|
|
'operator' => $op['op_name'],
|
|
'original_bn' => $val['iso_bn'],
|
|
'original_id' => $val['iso_id'],
|
|
'products' => $products,
|
|
'appropriation_no' => '',
|
|
'bill_type' => 'normal',
|
|
'check' => 'Y',
|
|
'confirm' => 'Y',
|
|
);
|
|
$IoRes = $iostockorder_instance->save_iostockorder($data, $msg);
|
|
if ($IoRes) {
|
|
$isoMdl->update(['create_iso_status' => '1']);
|
|
} else {
|
|
$isoMdl->update(['create_iso_status' => '2', 'create_iso_msg' => $msg]);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取Title
|
|
* @param mixed $iso_type iso_type
|
|
* @return mixed 返回结果
|
|
*/
|
|
public function getTitle($iso_type = '0')
|
|
{
|
|
$stockIn = [
|
|
'iso_bn' => '单据编码',
|
|
'stock_unit' => '*入库单位编码',
|
|
'created' => '单据日期',
|
|
'salesman' => '业务员编码',
|
|
'remark' => '备注',
|
|
'goods_bn' => '*商品编码',
|
|
'specifications' => '规格编码',
|
|
'goods_attr' => '规格属性',
|
|
'branch_bn' => '*仓库编码',
|
|
'storage_code' => '库位',
|
|
'basic_calc_unit' => '基本计量单位',
|
|
'plan_qty' => '*应收数量(基本单位)',
|
|
'actual_qty' => '*实收数量(基本单位)',
|
|
'assist_calc_unit' => '辅助计量单位',
|
|
'plan_qty_assist' => '*应收数量(辅助单位)',
|
|
'actual_qty_assist' => '*实收数量(辅助单位)',
|
|
'batch_code' => '批次号',
|
|
'product_date' => '生产日期',
|
|
'expire_date' => '有效期至',
|
|
'item_remark' => '明细行备注',
|
|
];
|
|
|
|
$stockOut = [
|
|
'iso_bn' => '单据编码',
|
|
'stock_unit' => '*出库单位',
|
|
'created' => '*单据日期',
|
|
'salesman' => '*业务员',
|
|
'remark' => '备注',
|
|
'goods_bn' => '*商品编码',
|
|
'specifications' => '规格编码',
|
|
'goods_attr' => '规格属性',
|
|
'branch_bn' => '*出库仓库',
|
|
'storage_code' => '库位',
|
|
'basic_calc_unit' => '基本计量单位',
|
|
'actual_qty' => '*出库数量(基本单位)',
|
|
'assist_calc_unit' => '辅助计量单位',
|
|
'actual_qty_assist' => '出库数量(辅助单位)',
|
|
'batch_code' => '批次号',
|
|
'product_date' => '生产日期',
|
|
'expire_date' => '有效期至',
|
|
'item_remark' => '明细行备注',
|
|
];
|
|
if ($iso_type == '1') {
|
|
return $stockIn;
|
|
} elseif ($iso_type == '0') {
|
|
return $stockOut;
|
|
} else {
|
|
return array();
|
|
}
|
|
}
|
|
} |