Files
OMS/app/ome/lib/finder/order/reservation.php
chenping 61783b7d01 1. 【新增】售后单售后原因类型支持搜索
2. 【新增】手工创建订单折扣可输入正数

3. 【优化】盘点申请单确认

4. 【修复】采购退货单模拟出库失败问题

5. 【新增】订单金额客户实付与结算金额

6. 【优化】仓库发货统计报表物料名称显示

7. 【优化】自有仓储虚拟发货逻辑

8. 【修复】基础物料分类管理问题
2026-04-01 11:59:17 +08:00

449 lines
17 KiB
PHP

<?php
/**
* 待预约订单finder
*
* @author wangbiao@shopex.cn
* @version 2025.06.20
*/
class ome_finder_order_reservation
{
static $_reSellerNameList = array();
private $_appName = 'ome';
public $addon_cols = 'id,order_id,custom_reserved_status,ship_status,seller_id';
public $column_edit = '操作';
public $column_edit_width = 120;
public $column_edit_order = 1;
public function column_edit($row)
{
$finder_id = $_GET['_finder']['finder_id'];
$id = $row[$this->col_prefix.'id'];
$url = 'index.php?app=%s&ctl=admin_order_reservation&act=apply&p[0]=%s&finder_id=%s';
$url = sprintf($url, $this->_appName, $id, $finder_id);
// order
$orderInfo = app::get('ome')->model('orders')->dump($row[$this->col_prefix.'order_id'], 'order_id,order_bn,status,pay_status,process_status,ship_status');
// 订单付款状态不是:已支付、部分退款
if(!in_array($orderInfo['pay_status'], ['1','3','4'])){
return '';
}elseif(!in_array($orderInfo['status'], ['active'])){
return '';
}elseif(!in_array($orderInfo['process_status'], ['unconfirmed','confirmed'])){
return '';
}elseif(!in_array($orderInfo['ship_status'], ['0'])){
return '';
}
// button
$button = '';
if(in_array($row[$this->col_prefix.'custom_reserved_status'], ['0'])){
$button .= '<a href="'. $url .'" target="dialog::{width:650,height:500,title:\'预约订单号:'. $orderInfo['order_bn'] .'\'}">预约</a>';
}elseif(in_array($row[$this->col_prefix.'custom_reserved_status'], ['1']) && $row[$this->col_prefix.'ship_status'] == '0'){
$button .= '<a href="'. $url .'" target="dialog::{width:900,height:700,title:\'重新预约订单号:'. $orderInfo['order_bn'] .'\'}">重新预约</a>';
}elseif(in_array($row[$this->col_prefix.'custom_reserved_status'], ['3']) && $row[$this->col_prefix.'ship_status'] == '0'){
$button .= '<a href="'. $url .'" target="dialog::{width:900,height:700,title:\'重新预约订单号:'. $orderInfo['order_bn'] .'\'}">重新预约</a>';
}
return $button;
}
var $detail_basic = '基本信息';
public function detail_basic($id)
{
$render = app::get($this->_appName)->render();
$orderMdl = app::get('ome')->model('orders');
$objExtendMdl = app::get('ome')->model('order_objects_extend');
$reservationMdl = app::get('ome')->model('order_reservation');
//post
if($_POST){
die('请到订单栏目里操作,这里不允许提交数据!');
}
//order
$reservationInfo = $reservationMdl->dump(array('id'=>$id), '*');
$order_id = $reservationInfo['order_id'];
//detail
$order_detail = $orderMdl->dump($order_id,"*",array("order_items"=>array("*")));
//订单object层商品定制信息
$tempList = $objExtendMdl->getList('*', array('order_id'=>$order_id), 0, -1, 'obj_id DESC');
$itemList = [];
if($tempList){
foreach ($tempList as $tempKey => $tempVal)
{
$obj_order_id = $tempVal['order_id'];
if(empty($tempVal['customization'])){
continue;
}
$customInfo = json_decode($tempVal['customization'], true);
if(empty($customInfo['items'])){
continue;
}
$itemList = array_merge($itemList, $customInfo['items']);
}
}
//销售价权限验证
$showSalePrice = true;
if (!kernel::single('desktop_user')->has_permission('sale_price')) {
$showSalePrice = false;
}
// 判断是否加密
$order_detail['is_encrypt'] = kernel::single('ome_security_router', $order_detail['shop_type'])->show_encrypt($order_detail, 'order');
$order_detail['mark_text'] = kernel::single('ome_func')->format_memo($order_detail['mark_text']);
$order_detail['custom_mark'] = kernel::single('ome_func')->format_memo($order_detail['custom_mark']);
$render->pagedata['total_amount'] = floatval($order_detail['total_amount']);
$render->pagedata['payed'] = floatval($order_detail['payed']);
//$render->pagedata['is_hied_receiver_copy'] = true;
$render->pagedata['show_sale_price'] = $showSalePrice;
$render->pagedata['total_amount'] = floatval($order_detail['total_amount']);
$render->pagedata['payed'] = floatval($order_detail['payed']);
$render->pagedata['order'] = $order_detail;
$render->pagedata['itemList'] = $itemList;
return $render->fetch('admin/order/detail_basic.html');
}
var $detail_reserved = '预约信息';
public function detail_reserved($id)
{
$render = app::get($this->_appName)->render();
$orderMdl = app::get('ome')->model('orders');
$reservationMdl = app::get('ome')->model('order_reservation');
//order
$reservationInfo = $reservationMdl->dump(array('id'=>$id), '*');
$order_id = $reservationInfo['order_id'];
//detail
$orderInfo = $orderMdl->dump($order_id, '*');
// items
$item_list = $orderMdl->getItemList($order_id, true);
if(empty($item_list)){
die('没有订单商品明细...');
}
$item_list = ome_order_func::add_getItemList_colum($item_list);
ome_order_func::order_sdf_extend($item_list);
// items
$orderObjectList = [];
$orderItemList = [];
foreach ($item_list as $objType => $objTypeVal)
{
foreach ($objTypeVal as $objKey => $ObjVal)
{
$obj_id = $ObjVal['obj_id'];
// merge
$orderObjectList[$obj_id] = $ObjVal;
// items
foreach ($ObjVal['order_items'] as $itemKey => $itemVal)
{
$item_id = $itemVal['item_id'];
$quantity = $itemVal['quantity'];
// 可预约的数量
$itemVal['item_quantity'] = $quantity - $itemVal['split_num'];
// merge
$orderItemList[$item_id] = $itemVal;
}
}
}
// 商品预约信息
$reservationItems = [];
if($reservationInfo['reservation_items']){
$reservationItems = json_decode($reservationInfo['reservation_items'], true);
// format
foreach ($reservationItems as $reKey => $reVal)
{
$order_item_id = $reVal['order_item_id'];
$orderItemInfo = (isset($orderItemList[$order_item_id]) ? $orderItemList[$order_item_id] : []);
$obj_id = $orderItemInfo['obj_id'];
$prodcut_name = $orderItemInfo['name'];
$sap_reserved_times = $orderItemInfo['sap_reserved_times'];
$reservationItems[$reKey]['goods_bn'] = $orderObjectList[$obj_id]['bn'];
$reservationItems[$reKey]['product_name'] = $prodcut_name;
$reservationItems[$reKey]['sap_reserved_times'] = $sap_reserved_times;
}
}
$render->pagedata['order'] = $orderInfo;
$render->pagedata['data'] = $reservationInfo;
$render->pagedata['reservationItems'] = $reservationItems;
return $render->fetch('admin/order/detail_reserved.html');
}
var $detail_goods = '订单明细';
public function detail_goods($id)
{
$render = app::get('ome')->render();
$orderMdl = app::get('ome')->model('orders');
$reservationMdl = app::get('ome')->model('order_reservation');
// order
$reservationInfo = $reservationMdl->dump(array('id'=>$id), '*');
$order_id = $reservationInfo['order_id'];
$orders = $orderMdl->getRow(array('order_id'=>$order_id),'order_id,shop_type,order_source,process_status');
$is_consign = false;
//detail
$item_list = $orderMdl->getItemList($order_id,true);
if(empty($item_list)){
die('没有订单商品明细...');
}
$item_list = ome_order_func::add_getItemList_colum($item_list);
ome_order_func::order_sdf_extend($item_list);
//是否超级管理员
$isSuper = kernel::single('desktop_user')->is_super();
//平台订单金额明细
$couponList = array();
if($orders['shop_type'] == 'luban' && $isSuper){
$couponMdl = app::get('ome')->model('order_coupon');
$couponList = $couponMdl->getList('*', array('order_id'=>$order_id));
if($couponList){
$oidList = array();
foreach ($item_list as $obj_type => $objects){
foreach ($objects as $obj_id => $items){
$oid = $items['oid'];
$oidList[$oid]['bn'] = $items['bn'];
}
}
foreach ($couponList as $key => $val){
$oid = $val['oid'];
$couponList[$key]['material_bn'] = $oidList[$oid]['bn'];
}
}
}
$psRows = app::get('ome')->model('order_platformsplit')->getList('split_oid, bn', ['order_id'=>$order_id]);
$split_oid = [];
foreach ($psRows as $key => $value) {
$split_oid[$value['split_oid']][] = $value['bn'];
}
//销售价权限判断
$showSalePrice = true;
if (!kernel::single('desktop_user')->has_permission('sale_price')) {
$showSalePrice = false;
}
//check
$is_host = false;
$lucky_flag = false;
$is_hold_time = false;
$is_presale_status = false;
foreach ($item_list as $obj_type => $objects)
{
foreach ($objects as $obj_id => $objInfo)
{
//author_id
if ($objInfo['author_id']) {
$is_host = true;
}
//presale_status
if ($objInfo['presale_status'] == 1) {
$is_presale_status = true;
}
//obj_type
if ($objInfo['obj_type'] == 'lkb') {
$lucky_flag = true;
}
//estimate_con_time
if ($objInfo['estimate_con_time'] > 1) {
$is_hold_time = true;
}
}
}
$render->pagedata['is_host'] = $is_host;
$render->pagedata['lucky_flag'] = $lucky_flag;
$render->pagedata['is_hold_time'] = $is_hold_time;
$render->pagedata['is_presale_status'] = $is_presale_status;
$render->pagedata['show_sale_price'] = $showSalePrice;
$render->pagedata['order'] = $orders;
$render->pagedata['couponList'] = $couponList;
$render->pagedata['maxHoldTime'] = kernel::single('omeauto_auto_hold')->getMaxHoldTime();
$render->pagedata['is_consign'] = ($is_consign > 0)?true:false;
$render->pagedata['configlist'] = array();
$render->pagedata['item_list'] = $item_list;
$render->pagedata['shop_type'] = $orders['shop_type'];
$render->pagedata['split_oid'] = $split_oid;
$render->pagedata['object_alias'] = $orderMdl->getOrderObjectAlias($order_id);
return $render->fetch('admin/order/detail_goods.html');
}
var $detail_mark = '商家备注';
public function detail_mark($id)
{
$render = app::get('ome')->render();
$oOrders = app::get('ome')->model('orders');
$reservationMdl = app::get('ome')->model('order_reservation');
// order
$reservationInfo = $reservationMdl->dump(array('id'=>$id), '*');
$order_id = $reservationInfo['order_id'];
if($_POST){
die('禁止提交数据!');
}
$order_detail = $oOrders->dump($order_id);
$render->pagedata['base_dir'] = kernel::base_url();
$order_detail['mark_text'] = unserialize($order_detail['mark_text']);
if ($order_detail['mark_text'])
foreach ($order_detail['mark_text'] as $k=>$v){
if (!strstr($v['op_time'], "-")){
$v['op_time'] = date('Y-m-d H:i:s',$v['op_time']);
$order_detail['mark_text'][$k]['op_time'] = $v['op_time'];
}
}
$order_detail['custom_mark'] = unserialize($order_detail['custom_mark']);
if ($order_detail['custom_mark'])
foreach ($order_detail['custom_mark'] as $k=>$v){
if (!strstr($v['op_time'], "-")){
$v['op_time'] = date('Y-m-d H:i:s',$v['op_time']);
$order_detail['custom_mark'][$k]['op_time'] = $v['op_time'];
}
}
$order_detail['mark_type_arr'] = ome_order_func::order_mark_type();
$render->pagedata['order'] = $order_detail;
//常用备注
$commonRemarks = ['需发货质检', '需优先回传物流单', '指定物流', '指定不能用默认物流'];
$render->pagedata['commonRemarks'] = $commonRemarks;
$render->pagedata['is_prohibit_submit'] = 'true';
return $render->fetch('admin/order/detail_mark.html');
}
var $detail_custom_mark = '客户备注';
var $detail_custom_mark_width = 100;
public function detail_custom_mark($id)
{
$render = app::get('ome')->render();
$oOrders = app::get('ome')->model('orders');
$reservationMdl = app::get('ome')->model('order_reservation');
// order
$reservationInfo = $reservationMdl->dump(array('id'=>$id), '*');
$order_id = $reservationInfo['order_id'];
if($_POST){
die('禁止提交数据...');
}
$order_detail = $oOrders->dump($order_id);
$render->pagedata['base_dir'] = kernel::base_url();
$order_detail['custom_mark'] = unserialize($order_detail['custom_mark']);
if ($order_detail['custom_mark'])
foreach ($order_detail['custom_mark'] as $k=>$v){
if (!strstr($v['op_time'], "-")){
$v['op_time'] = date('Y-m-d H:i:s',$v['op_time']);
$order_detail['custom_mark'][$k]['op_time'] = $v['op_time'];
}
}
$render->pagedata['order'] = $order_detail;
$render->pagedata['is_prohibit_submit'] = 'true';
return $render->fetch('admin/order/detail_custom_mark.html');
}
// 销售人员名称
var $column_seller_name = '销售人员名称';
var $column_seller_name_width = 180;
var $column_seller_name_order = 42;
public function column_seller_name($row, $list)
{
//load
$this->_getSellerNameList($list);
$seller_id = $row[$this->col_prefix .'seller_id'];
$seller_name = isset(self::$_reSellerNameList[$seller_id]) ? self::$_reSellerNameList[$seller_id]['seller_name'] : '';
return $seller_name;
}
/**
* 批量获取销售人员名称
*
* @param $list
* @return boolean
*/
private function _getSellerNameList($list)
{
//check
if(self::$_reSellerNameList){
return true;
}
$sellerMdl = app::get('material')->model('seller');
// seller_id
$sellerIds = array_column($list, 'seller_id');
if(empty($sellerIds)){
$sellerIds = array_column($list, $this->col_prefix .'seller_id');
}
//items
$itemList = $sellerMdl->getList('id,seller_code,seller_name', array('id'=>$sellerIds));
if(empty($itemList)){
return false;
}
self::$_reSellerNameList = array_column($itemList, null, 'id');
return true;
}
/**
* 订单操作记录
* @param int $order_id
* @return string
*/
var $detail_history = '操作日志';
public function detail_history($id)
{
$render = app::get('ome')->render();
$operLogMdl = app::get('ome')->model('operation_log');
/* 本订单日志 */
$historyList = $operLogMdl->read_log(array('obj_id'=>$id, 'obj_type'=>'order_reservation@ome'), 0, -1);
$render->pagedata['logList'] = $historyList;
return $render->fetch('admin/common/detail_log.html');
}
}