Files
OMS/app/inventorydepth/controller/regulation.php
2026-01-04 19:08:31 +08:00

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';
}
}