mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-22 10:25:35 +08:00
366 lines
14 KiB
PHP
366 lines
14 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 chenping<chenping@shopex.cn>
|
|
*/
|
|
class inventorydepth_ctl_regulation extends desktop_controller {
|
|
|
|
var $workground = 'resource_center';
|
|
|
|
/**
|
|
* 生成URL
|
|
*
|
|
* @return void
|
|
* @author
|
|
**/
|
|
private function gen_url($params=array(),$full=false)
|
|
{
|
|
$params['app'] = isset($params['app']) ? $params['app'] : $this->app->app_id;
|
|
$params['ctl'] = isset($params['ctl']) ? $params['ctl'] : 'regulation';
|
|
$params['act'] = isset($params['act']) ? $params['act'] : 'index';
|
|
|
|
return kernel::single('desktop_router')->gen_url($params,$full);
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
$params = array(
|
|
'title' => $this->app->_('规则列表'),
|
|
'actions' => array(
|
|
/*
|
|
array(
|
|
'label' => $this->app->_('新建规则'),
|
|
'href' => $this->gen_url(array('act'=>'add')),
|
|
),*/
|
|
array(
|
|
'label' => $this->app->_('新增库存更新规则'),
|
|
'href' => $this->gen_url(array('act'=>'add','p[0]'=>'stock')),
|
|
'target' => '_blank',
|
|
),
|
|
/*
|
|
array(
|
|
'label' => $this->app->_('新增上架规则'),
|
|
'href' => $this->gen_url(array('act'=>'add','p[0]'=>'frame')),
|
|
'target' => '_blank',
|
|
),*/
|
|
array(
|
|
'label' => $this->app->_('启用'),
|
|
'submit' => $this->gen_url(array('act'=>'using')),
|
|
'confirm' => $this->app->_('确定启用选中项?'),
|
|
'target' => 'refresh',
|
|
),
|
|
array(
|
|
'label' => $this->app->_('停用'),
|
|
'submit' => $this->gen_url(array('act'=>'unusing')),
|
|
'confirm' => $this->app->_('确定停用选中项?'),
|
|
'target' => 'refresh',
|
|
)
|
|
),
|
|
'use_buildin_filter' => true,
|
|
'use_buildin_recycle' => true
|
|
);
|
|
$this->finder('inventorydepth_mdl_regulation',$params);
|
|
}
|
|
|
|
/**
|
|
* 库存回写规则
|
|
*
|
|
* @return void
|
|
* @author
|
|
**/
|
|
public function stockIndex()
|
|
{
|
|
$params = array(
|
|
'title' => $this->app->_('库存回写规则'),
|
|
'actions' => array(
|
|
array(
|
|
'label' => $this->app->_('新建'),
|
|
'href' => $this->gen_url(array('act'=>'add','p[0]'=>'stock')),
|
|
'target' => '_blank',
|
|
),
|
|
array(
|
|
'label' => $this->app->_('启用'),
|
|
'submit' => $this->gen_url(array('act'=>'using','p[0]'=>'stockIndex')),
|
|
'confirm' => $this->app->_('确定启用选中项?'),
|
|
'target' => 'refresh',
|
|
),
|
|
array(
|
|
'label' => $this->app->_('停用'),
|
|
'submit' => $this->gen_url(array('act'=>'unusing','p[0]'=>'stockIndex')),
|
|
'confirm' => $this->app->_('确定停用选中项?'),
|
|
'target' => 'refresh',
|
|
)
|
|
),
|
|
'use_buildin_filter' => true,
|
|
'use_buildin_recycle' => true,
|
|
'base_filter' => array('condition'=>'stock','type' => '2'),
|
|
);
|
|
$this->finder('inventorydepth_mdl_regulation',$params);
|
|
}
|
|
|
|
/**
|
|
* 上下架规则
|
|
*
|
|
* @return void
|
|
* @author
|
|
**/
|
|
public function frameIndex()
|
|
{
|
|
$params = array(
|
|
'title' => $this->app->_('上下架规则'),
|
|
'actions' => array(
|
|
array(
|
|
'label' => $this->app->_('新建'),
|
|
'href' => $this->gen_url(array('act'=>'add','p[0]'=>'frame')),
|
|
'target' => '_blank',
|
|
),
|
|
array(
|
|
'label' => $this->app->_('启用'),
|
|
'submit' => $this->gen_url(array('act'=>'using','p[0]'=>'frameIndex')),
|
|
'confirm' => $this->app->_('确定启用选中项?'),
|
|
'target' => 'refresh',
|
|
),
|
|
array(
|
|
'label' => $this->app->_('停用'),
|
|
'submit' => $this->gen_url(array('act'=>'unusing','p[0]'=>'frameIndex')),
|
|
'confirm' => $this->app->_('确定停用选中项?'),
|
|
'target' => 'refresh',
|
|
)
|
|
),
|
|
'use_buildin_filter' => true,
|
|
'use_buildin_recycle' => true,
|
|
'base_filter' => array('condition'=>'frame'),
|
|
);
|
|
$this->finder('inventorydepth_mdl_regulation',$params);
|
|
}
|
|
|
|
function _views() {
|
|
return;
|
|
$sub_menu[0] = array('label' => $this->app->_('全部'),'filter'=>array());
|
|
$sub_menu[1] = array('label' => $this->app->_('更新库存规则列表'), 'filter' => array('condition'=>'stock'), 'optional' => false);
|
|
$sub_menu[2] = array('label' => $this->app->_('商品上下架规则列表'), 'filter' => array('condition'=>'frame'), 'optional' => false);
|
|
|
|
$regulationModel = $this->app->model('regulation');
|
|
foreach ($sub_menu as $key=>$value) {
|
|
$sub_menu[$key]['addon'] = $regulationModel->count($value['filter']);
|
|
$sub_menu[$key]['href'] = $this->gen_url(array('view'=>$key));
|
|
}
|
|
return $sub_menu;
|
|
}
|
|
|
|
/**
|
|
* 规则页面初始参数
|
|
*
|
|
* @return void
|
|
* @author
|
|
**/
|
|
private function options()
|
|
{
|
|
# 规则类型:frame:上下架、stock:更新库存
|
|
$options['condition'] = kernel::single('inventorydepth_regulation')->get_condition('');
|
|
|
|
# 上下架/库存更新对应的模型
|
|
$options['model'] = kernel::single('inventorydepth_regulation')->get_condition_model('');
|
|
|
|
# 逻辑比较符:大于、小于等等
|
|
$options['comparison'] = kernel::single('inventorydepth_math')->get_show_comparison('');
|
|
|
|
# 算数比较符: + 、- 等等
|
|
$options['calculation'] = kernel::single('inventorydepth_math')->get_calculation('');
|
|
|
|
# 上下架对应的参数:upper:上架、lower:下架
|
|
$options['frame'] = kernel::single('inventorydepth_frame')->get_benchmark('');
|
|
|
|
# 几种库存状态:actual_stock:可售库存、release_stock:发布库存等等
|
|
$options['stock'] = kernel::single('inventorydepth_stock',[app::get('inventorydepth'),$_GET['type']])->get_benchmark();
|
|
|
|
# 条件对应的几中库存状态
|
|
$options['obj'] = kernel::single('inventorydepth_stock')->get_benchobj('');
|
|
|
|
# 条件针对货品数
|
|
$options['forsku'] = kernel::single('inventorydepth_frame')->sku_option('');
|
|
|
|
return $options;
|
|
}
|
|
|
|
public function add($condition='stock')
|
|
{
|
|
$this->title = ($condition == 'stock') ? $this->app->_('添加更新库存规则') : $this->app->_('添加更新商品上下架规则');
|
|
|
|
$PG = $this->options();
|
|
|
|
# 伪造一条数据给循环用
|
|
$PG['data']['content']['filters'] = array(1);
|
|
|
|
# 规则类型
|
|
$PG['data']['condition'] = $condition;
|
|
|
|
$this->pagedata = $PG;
|
|
$this->pagedata['title'] = $this->title;
|
|
$this->singlepage('regulation.html');
|
|
}
|
|
|
|
public function save()
|
|
{
|
|
$this->begin();
|
|
$data = kernel::single('inventorydepth_regulation')->check_and_build($_POST,$msg);
|
|
if ($data === false) {
|
|
$this->end(false,$msg);
|
|
}
|
|
|
|
$mark = $this->app->model('regulation')->save($data);
|
|
if ($mark && $_POST['regulation_shop_level'] == 'true') {
|
|
$remote_ip = kernel::single('base_component_request')->get_remote_ip();
|
|
$apply = array(
|
|
'bn' => $_POST['regulation_shop_bn'],
|
|
'heading' => $_POST['regulation_shop_bn'].'规则应用',
|
|
'condition' => $data['condition'],
|
|
'style' => $_POST['style'] ? : 'stock_change',
|
|
'start_time' => time(),
|
|
'end_time' => strtotime('2030-12-12'),
|
|
'shop_id' => $_POST['regulation_shop_id'],
|
|
'using' => 'true',
|
|
'al_exec' => 'false',
|
|
'operator' => 16777215,
|
|
'update_time' => time(),
|
|
'operator_ip' => $remote_ip,
|
|
'regulation_id' => $data['regulation_id'],
|
|
'apply_goods' => '_ALL_',
|
|
'priority' => 10,
|
|
'type' => $data['type'],
|
|
);
|
|
$this->app->model('regulation_apply')->save($apply);
|
|
}
|
|
|
|
$url = $this->gen_url(array('act'=>'index'));
|
|
$msg = $mark ? $this->app->_('保存成功!') : $this->app->_('保存失败!');
|
|
//$js = $mark ? 'javascript:location.href="'.$url.'";' : '';
|
|
$this->end($mark ? true : false,$msg,$js);
|
|
}
|
|
|
|
public function dialogEdit($regulationId) {
|
|
$PG = $this->options();
|
|
|
|
$PG['data'] = $this->app->model('regulation')->select()->columns('*')
|
|
->where('regulation_id=?',$regulationId)
|
|
->instance()->fetch_row();
|
|
|
|
$this->title = ($PG['data']['condition'] == 'stock') ? $this->app->_('修改更新库存规则') : $this->app->_('修改更新商品上下架规则');
|
|
|
|
$PG['regulation_readonly'] = $_GET['regulation_readonly'] ? 'true' : 'false';
|
|
|
|
$this->pagedata = $PG;
|
|
|
|
$this->pagedata['title'] = $this->title;
|
|
$this->display('regulation.html');
|
|
}
|
|
|
|
public function dialogAdd($shop_id,$shop_bn,$condition='stock')
|
|
{
|
|
$this->title = ($condition == 'stock') ? $this->app->_('添加更新库存规则') : $this->app->_('添加更新商品上下架规则');
|
|
|
|
$PG = $this->options();
|
|
|
|
# 伪造一条数据给循环用
|
|
$PG['data']['content']['filters'] = array(1);
|
|
|
|
# 规则类型
|
|
$PG['data']['condition'] = $condition;
|
|
$PG['data']['type'] = $_GET['type'] ? : '1';
|
|
|
|
$PG['regulation_shop_level'] = 'true';
|
|
$PG['regulation_shop_id'] = $shop_id;
|
|
$PG['regulation_shop_bn'] = $shop_bn;
|
|
$PG['regulation_readonly'] = 'false';
|
|
$this->pagedata = $PG;
|
|
$this->pagedata['title'] = $this->title;
|
|
$this->display('regulation.html');
|
|
}
|
|
|
|
public function edit($regulationId)
|
|
{
|
|
$PG = $this->options();
|
|
|
|
$PG['data'] = $this->app->model('regulation')->select()->columns('*')
|
|
->where('regulation_id=?',$regulationId)
|
|
->instance()->fetch_row();
|
|
|
|
$this->title = ($PG['data']['condition'] == 'stock') ? $this->app->_('修改更新库存规则') : $this->app->_('修改更新商品上下架规则');
|
|
|
|
if (empty($PG['data']))
|
|
$this->splash('error', '', $this->app->_('不存在的记录'));
|
|
|
|
$this->pagedata = $PG;
|
|
|
|
$this->pagedata['title'] = $this->title;
|
|
$this->singlepage('regulation.html');
|
|
}
|
|
|
|
public function using($act='stockIndex')
|
|
{
|
|
$this->begin($this->gen_url(array('act'=>$act)));
|
|
$bool = $this->app->model('regulation')->update(array('using'=>'true'),$_POST);
|
|
$msg = $bool ? $this->app->_('启用成功!') : $this->app->_('启用失败!');
|
|
$this->end($bool,$msg);
|
|
}
|
|
|
|
public function unusing($act='frameIndex')
|
|
{
|
|
$this->begin($this->gen_url(array('act'=>$act)));
|
|
$regulation_id = $this->app->model('regulation')->getList('regulation_id',$_POST);
|
|
$rid = array_map('current',$regulation_id);
|
|
$apply = $this->app->model('regulation_apply')->getList('id',array('regulation_id'=>$rid,'using'=>'true'),0,1);
|
|
if ($apply) {
|
|
$this->end(false,'规则对应的应用已经开启,无法停用!');
|
|
}
|
|
|
|
$bool = $this->app->model('regulation')->update(array('using'=>'false'),$_POST);
|
|
$msg = $bool ? $this->app->_('停用成功!') : $this->app->_('停用失败!');
|
|
$this->end($bool,$msg);
|
|
}
|
|
|
|
/** 前台做选择时,做规则描述自动翻译
|
|
*
|
|
* @param string $comparison 逗号分隔的字符串 equal,between,bthan,sthan
|
|
* @param string $increment 逗号分隔的字符串 123,456,789,321
|
|
* @param string $increment_after 逗号分隔的字符串 111,222,333,444
|
|
* @param string $result 执行结果 upper,lower,upper,lower|{销售库存}+10,{实际库存}+3,{销售库存}+6,{销售库存}+1,
|
|
*/
|
|
public function ajax_checkLogic($data = NULL)
|
|
{
|
|
$post = kernel::single('base_component_request')->get_post();
|
|
|
|
$data = $data ? $data : $post;
|
|
|
|
$return = kernel::single('inventorydepth_regulation')->get_description($data);
|
|
echo implode("\n", $return);
|
|
}
|
|
|
|
public function checkFormula()
|
|
{
|
|
$formulaCurrect = kernel::single('inventorydepth_stock',[app::get('inventorydepth'),$_GET['type']])->formulaRun($_POST['result'],null,$msg);
|
|
|
|
if ($formulaCurrect === false)
|
|
echo 'fail';
|
|
else
|
|
echo 'succ';
|
|
}
|
|
}
|