Files
OMS/app/iostock/model/damaged.php
2026-01-04 19:08:31 +08:00

321 lines
14 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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 iostock_mdl_damaged extends iostock_mdl_iostock{
function exportTemplate($filter){
foreach ($this->io_title($filter) as $v){
$title[] = kernel::single('base_charset')->utf2local($v);
}
return $title;
}
function io_title( $filter, $ioType='csv' ){
switch( $filter ){
case 'iostock':
$this->oSchema['csv'][$filter] = array(
'*:出入库单号' => 'iostock_id',
'*:仓库编号' => 'branch_id',
'*:出入库单号' => 'iostock_bn',
'*:出入库类型' => 'type_id',
'*:原始单据id' => 'original_id',
'*:原始单据号' => 'original_bn',
'*:供应商编号' => 'supplier_id',
'*:供应商名称' => 'supplier_name',
'*:货号' => 'bn',
'*:出入库价格' => 'iostock_price',
'*:数量' => 'nums',
'*:税率' => 'cost_tax',
'*:经手人' => 'oper',
'*:出入库时间' => 'create_time',
'*:操作人员' => 'operator',
'*:结算方式' => 'settle_method',
'*:结算状态' => 'settle_status',
'*:结算人' => 'settle_operator',
'*:结算时间' => 'settle_time',
'*:结算数量' => 'settle_num',
'*:结算单号' => 'settlement_bn',
'*:结算金额' => 'settlement_money',
'*:备注' => 'memo',
'*:原始单据明细id' => 'original_item_id',
);
break;
case 'main':
$this->oSchema['csv'][$filter] = array(
'*:调出仓库编号' =>'',
'*:调入仓库编号' =>'',
'*:残损申请单号' =>'',
'*:经手人' =>'',
'*:备注' => '',
);
break;
case 'item':
$this->oSchema['csv'][$filter] = array(
'*:货号' =>'',
'*:残损数量' =>'',
'*:残损单价' =>'',
);
break;
}
$this->ioTitle[$ioType][$filter] = array_keys( $this->oSchema[$ioType][$filter] );
return $this->ioTitle[$ioType][$filter];
}
//判断是否为本操作所需的csv文件
function check_csv($title){
$arrFrom = array_flip(array_filter(array_flip($title)));
$this->io_title('main');
//$this->io_title('item');
$arrFieldsAll = array_merge($this->oSchema['csv']['main'],$this->oSchema['csv']['item']);
$arrResult = array_diff_key($arrFrom,$arrFieldsAll);
return empty($arrResult) ? true : false;
}
function prepared_import_csv(){
$this->iostock_same_name = array();
$this->iostock_same_name_db = array();
$this->branch = app::get('ome')->model('branch');
$this->products = app::get('material')->model('basic_material');
$this->productsStock = app::get('material')->model('basic_material_stock');
$this->iostock = app::get('ome')->model('iostock');
$this->ioObj->cacheTime = time();
$this->a = 0;
}
function prepared_import_csv_row($row,$title,&$tmpl,&$mark,&$newObjFlag,&$msg){
$action = $this->direction;
if (empty($row)){
return true;
}
$mark = false;
$fileData = $this->im_data;
if( !$fileData ) $fileData = array();
if( substr($row[0],0,1) == '*' ){
$titleRs = array_flip($row);
$mark = 'title';
if(!$this->check_csv($titleRs)){
$msg['error'] = "导入的csv文件字段与本操作所需不符请使用正确的csv文件。";
}
return $titleRs;
}else{
//去除空行
if(!count(array_filter($row))){
return false;
}
if( $row[0] ){
if(array_key_exists('*:调出仓库编号',$title)){
//校验仓库号.
$num = $this->a++;
if($num > 0){
$msg['error'] = "主信息必须是唯一,请重新维护导入信息";
return false;
}
$branch = $this->branch->dump(array('branch_bn'=>$row[0]),'*');
$branch1 = $this->branch->dump(array('branch_bn'=>$row[1]),'*');
if(!$branch){
$msg['error'] = "仓库".$row[0]."不存在,请重新维护导入信息";
return false;
}else{
$branch_id = $this->branch->getList('branch_id',array('branch_bn'=>$row[0]));
$row[0] = $branch_id[0]['branch_id'];
}
if(!$branch1){
$msg['error'] = "仓库".$row[1]."不存在,请重新维护输入信息";
return false;
}else{
$branch_id = $this->branch->getList('branch_id',array('branch_bn'=>$row[1]));
$row[1] = $branch_id[0]['branch_id'];
}
if(!is_string($row[0])){
$msg['error'] = "仓库编号必须为字符串";
return false;
}
if(!is_string($row[1])){
$msg['error'] = "调入仓库编号必须为字符串";
return false;
}
if(!is_string($row[2])){
$msg['error'] = "残损申请号必须为字符串";
return false;
}
if(!is_string($row[3])){
$msg['error'] = "经手人名称必须为字符串";
return false;
}
if(!is_string($row[4])){
$msg['error'] = "备注必须为字符串";
return false;
}
$fileData[$row[0]]['iostock']['contents'][] = $row;
}else{
//校验货号
$products = $this->products->dump(array('material_bn'=>$row[0]),'*');
if($products == ''){
$msg['error'] = "货号".$row[0]."商品不存在,请重新维护导入信息";
return false;
}
if(!is_string($row[0])){
$msg['error'] = "货号必须为字符串";
return false;
}
if(!is_numeric($row[1])){
$msg['error'] = "残损数量必须为数字";
return false;
}
if(intval($row[1])!=$row[1]){
$msg['error'] = "残损数量必须为整数";
return false;
}
if(!is_numeric($row[2])){
$msg['error'] = "残损单价必须为数字";
return false;
}
$store = $this->productsStock->getList('store',array('bm_id'=>$products['bm_id']),0,1);
if($row[1] > $store[0]['store']){
$msg['error'] = "货品库存不够出库,请重新维护导入信息";
return false;
}
$fileData[$row[0]]['iostock']['contents'][] = $row;
}
$this->im_data = $fileData;
}else{
$msg['error'] = "调出仓库编号和货号不能为空,请重新维护数据";
return false;
}
}
return null;
}
function prepared_import_csv_obj($data,$mark,$goodsTmpl,&$msg = ''){
return null;
}
function finish_import_csv(){
$data = $this->im_data;
unset($this->im_data);
$iostock = kernel::service('ome.iostock');
$type1 = ome_iostock::DAMAGED_LIBRARY;//出库
$type2 = ome_iostock::DAMAGED_STORAGE;//入库
$io1 = 0;
$io2 = 1;
$iostock_bn1 = $iostock->get_iostock_bn($type1);
$iostock_bn2 = $iostock->get_iostock_bn($type2);
$operator = kernel::single('desktop_user')->get_name();
$objTitle = array_flip( $this->io_title('iostock') );
$pSchema = $this->oSchema['csv']['iostock'];
$sdfArray = array();
$sdfArray[$pSchema['*:仓库编号']] = '';
$sdfArray[$pSchema['*:出入库单号']] = '';//
$sdfArray[$pSchema['*:出入库类型']] = '';//
$sdfArray[$pSchema['*:原始单据id']] = '';
$sdfArray[$pSchema['*:原始单据号']] = '';
$sdfArray[$pSchema['*:供应商编号']] = '';
$sdfArray[$pSchema['*:供应商名称']] = '';
$sdfArray[$pSchema['*:货号']] = '';
$sdfArray[$pSchema['*:出入库价格']] = '';
$sdfArray[$pSchema['*:数量']] = '';
$sdfArray[$pSchema['*:税率']] = 0;
$sdfArray[$pSchema['*:经手人']] = '';
$sdfArray[$pSchema['*:出入库时间']] = time();
$sdfArray[$pSchema['*:操作人员']] = $operator;
$sdfArray[$pSchema['*:结算方式']] = '0';
$sdfArray[$pSchema['*:结算状态']] = 0;
$sdfArray[$pSchema['*:结算人']] = '';
$sdfArray[$pSchema['*:结算时间']] = '';
$sdfArray[$pSchema['*:结算数量']] = 0;
$sdfArray[$pSchema['*:结算单号']] = '';
$sdfArray[$pSchema['*:结算金额']] = 0;
$sdfArray[$pSchema['*:备注']] = '';
$sdfArray[$pSchema['*:原始单据明细id']] = '';
$newArray = $sdfArray;
$this->num = 0;
foreach ($data as $k => $aPi){
$branch = $this->branch->dump(array('branch_id'=>$k),'*');
$num = $this->num++;
if($num < 1){
//主数组
foreach($aPi['iostock']['contents'] as $ad => $name ){
$sdfArray[$pSchema['*:仓库编号']] = $name[0];
$sdfArray[$pSchema['*:原始单据号']] = $name[2];
$sdfArray[$pSchema['*:经手人']] = $name[3];
$sdfArray[$pSchema['*:备注']] = $name[4];
$newArray[$pSchema['*:仓库编号']] = $name[1];
$newArray[$pSchema['*:原始单据号']] = $iostock_bn1;
$newArray[$pSchema['*:经手人']] = $name[3];
$newArray[$pSchema['*:备注']] = $name[4];
}
}else{
//子数组
foreach($aPi['iostock']['contents'] as $bn => $s){
$sdfArray[$pSchema['*:货号']] = $s[0];
$sdfArray[$pSchema['*:数量']] = $s[1];
$sdfArray[$pSchema['*:出入库价格']] = $s[2];
$Array1[] = $sdfArray;
$newArray[$pSchema['*:货号']] = $s[0];
$newArray[$pSchema['*:数量']] = $s[1];
$newArray[$pSchema['*:出入库价格']] = $s[2];
$Array2[] = $newArray;
}
}
}
kernel::single('base_controller')->begin();
if(! $iostock->set($iostock_bn1,$Array1,$type1,$msg,$io1)){
kernel::single('base_controller')->end(false,app::get('base')->_('残损出库操作失败'));
if($msg == ''){
return null;
}else{
$msg_arr = implode('\n',$msg);
header("content-type:text ml; charset=utf-8");
echo "<script>top.MessageBox.error(\"上传失败\");alert(\"".$msg_arr."\");if(parent.$('import_form').getParent('.dialog'))parent.$('import_form').getParent('.dialog').retrieve('instance').close();if(parent.window.finderGroup&&parent.window.finderGroup['".$_GET['finder_id']."'])parent.window.finderGroup['".$_GET['finder_id']."'].refresh();</script>";
exit;
}
}else{
$_SESSION['bn1'] = $iostock_bn1;
}
if(! $iostock->set($iostock_bn2,$Array2,$type2,$msg,$io2)){
kernel::single('base_controller')->end(false,app::get('base')->_('残损入库操作失败'));
if($msg == ''){
return null;
}else{
$msg_arr = implode('\n',$msg);
header("content-type:text ml; charset=utf-8");
echo "<script>top.MessageBox.error(\"上传失败\");alert(\"".$msg_arr."\");if(parent.$('import_form').getParent('.dialog'))parent.$('import_form').getParent('.dialog').retrieve('instance').close();if(parent.window.finderGroup&&parent.window.finderGroup['".$_GET['finder_id']."'])parent.window.finderGroup['".$_GET['finder_id']."'].refresh();</script>";
exit;
}
}else{
$_SESSION['bn2'] = $iostock_bn2;
}
kernel::single('base_controller')->end(true,app::get('base')->_('成功'));
return null;
}
}