You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

228 lines
8.9 KiB

1 year ago
<?php
namespace app\admin\controller\ykjp\sell;
use app\common\controller\Backend;
use think\Db;
/**
*
*
* @icon fa fa-circle-o
*/
class Rfinancial extends Backend {
/**
* Rfinancial模型对象
* @var \app\admin\model\sell\Rfinancial
*/
protected $model = null;
protected $searchFields = "id";
public function _initialize() {
parent::_initialize();
$this->model = new \app\admin\model\ykjp\sell\Rfinancial;
$this->view->assign("statusListList", $this->model->getStatusListList());
}
/**
* 查看
*/
public function index() {
$this->searchFields="customer_name";
return parent::index();
}
/**
* 详情
*/
public function detail() {
$ids = $this->request->param("ids");
if ($ids == "") {
$this->error("fail", "ykjp/sell/Sellreturn/index");
}
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$list = Db::name('ykjp_sell_return')
->where($where)
->where('firmid', $this->auth->firmid)
->where("id", $ids)
->select();
$dModel = new \app\admin\model\ykjp\sell\returnPro;
$strProduct = $dModel->with(['products'])->where("sell_return_id", $ids)->where('products.firmid', $this->auth->firmid)->select();
// halt($strProduct);
$this->assign("detail", $list);
$this->assign("product", $strProduct);
return $this->view->fetch();
}
/**
* 审核
*/
public function approval($ids = null) {
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
//判断通过还是驳回 (pass 通过 reject 驳回)
if ($this->request->param("type") == "yes") { //通过
$time = time();
$data = array("status_list" => 5, "reviewer_id" => $this->auth->id, "updatetime" => $time);
/*
首先修改出库单状态,然后
通过前台传递过来的ids列表查询销售出库单的‘销售单ID’字段和《销售出库单副表》,获取销售出库单副表中的‘出库数量’、‘关联表id’和‘产品ID’字段。
根据获取的字段:
更新销售单表
插入流水表
更新关联表
更新商品表
更新仓库表
更新库区表
*/
//获取 销售退货单的‘销售单ID’字段
$sell_id_arr = Db::name('ykjp_sell_return')->field('sell_id,warehouse_id,partition_id')->where("id", "in", $ids)->where('firmid', $this->auth->firmid)->select();
// 处理结果为列表
for ($i = 0; $i < count($sell_id_arr); $i++) {
if ($i == 0) {
$sell_id_list = $sell_id_arr[$i]['sell_id'];
} else {
$sell_id_list .= ',';
$sell_id_list .= $sell_id_arr[$i]['sell_id'];
}
}
//获取销售退货副表的参数
$wp_arr = Db::name('ykjp_sell_return_p')
->alias('p')
->join('ykjp_sell_return r', 'p.sell_return_id = r.id')
->field('p.nums,p.product_id,r.warehouse_id,r.partition_id')
->where("p.sell_return_id", "in", $ids)
->where('p.firmid', $this->auth->firmid)
->where('r.firmid', $this->auth->firmid)
->select();
// 获取副表的wp_id
for ($i = 0; $i < count($wp_arr); $i++) {
$wp_id = Db::name('ykjp_wp_relationship')
->field('id')
->where('warehouse_id', $wp_arr[$i]['warehouse_id'])
->where('partition_id', $wp_arr[$i]['partition_id'])
->where('product_id', $wp_arr[$i]['product_id'])
->where('firmid', $this->auth->firmid)
->find();
//判断是否存在相应的wp数据
if ($wp_id == null) {
//插入相应的wp数据并赋值wp_id
Db::name('ykjp_wp_relationship')->insert([
'firmid' => $this->auth->firmid,
'product_id' => $wp_arr[$i]['product_id'],
'warehouse_id' => $wp_arr[$i]['warehouse_id'],
'partition_id' => $wp_arr[$i]['partition_id'],
'inventory' => 0,
'freeze' => 0,
'updatetime' => $time,
]);
$wp_id = Db::name('ykjp_wp_relationship')->getLastInsID();
$wp_arr[$i]['wp_id'] = $wp_id;
} else {
//赋值wp_id
$wp_arr[$i]['wp_id'] = $wp_id['id'];
}
}
// 启动事务
Db::startTrans();
try {
//一、更新销售退货单状态
Db::name('ykjp_sell_return')->where("status_list", 3)->where('firmid', $this->auth->firmid)->where("id", "in", $ids)->update($data);
//二、更新销售单状态
Db::name('ykjp_sell')->where("status_list", 8)->where('firmid', $this->auth->firmid)->where("id", "in", $sell_id_list)->update(['status_list' => 9, 'updatetime' => $time]);
//三、
for ($i = 0; $i < count($wp_arr); $i++) {
//插入流水表
Db::name('ykjp_inventory_statement')->insert([
'firmid' => $this->auth->firmid,
'product_id' => $wp_arr[$i]['product_id'],
'warehouse_id' => $wp_arr[$i]['warehouse_id'],
'partition_id' => $wp_arr[$i]['partition_id'],
'number' => $wp_arr[$i]['nums'],
'type' => '销售退货',
'updatetime' => $time,
]);
//更新关联表
Db::name('ykjp_wp_relationship')
->where('firmid', $this->auth->firmid)
->where('id', $wp_arr[$i]['wp_id'])
->update([
'inventory' => Db::raw('inventory+' . $wp_arr[$i]['nums']),
'updatetime' => Db::raw($time),
]);
//更新商品表
Db::name('ykjp_product')
->where('firmid', $this->auth->firmid)
->where('id', $wp_arr[$i]['product_id'])
->update([
'inventory' => Db::raw('inventory+' . $wp_arr[$i]['nums']),
'updatetime' => Db::raw($time),
]);
//更新仓库表
Db::name('ykjp_warehouse')
->where('firmid', $this->auth->firmid)
->where('id', $wp_arr[$i]['warehouse_id'])
->update([
'inventory' => Db::raw('inventory+' . $wp_arr[$i]['nums']),
'updatetime' => Db::raw($time),
]);
// 更新库区表
Db::name('ykjp_partition')
->where('firmid', $this->auth->firmid)
->where('id', $wp_arr[$i]['partition_id'])
->update([
'inventory' => Db::raw('inventory+' . $wp_arr[$i]['nums']),
'updatetime' => Db::raw($time),
]);
}
// 提交事务
Db::commit();
$this->success(null, null, array("result" => "success"));
} catch (PDOException $e) {
Db::rollback();
$this->error('提交失败');
} catch (Exception $e) {
Db::rollback();
$this->error('提交失败');
}
$this->error("提交失败");
} elseif ($this->request->param("type") == "no") { //驳回
$cause = $this->request->param('cause'); //审核失败原因
$data = array("status_list" => 4, "reviewer_id" => $this->auth->id, "updatetime" => time(), 'cause' => $cause);
$update = $this->model
->where("status_list", 3)
->where('firmid', $this->auth->firmid)
->where("id", "in", $ids)
->update($data);
if ($update) {
$this->success(null, null, array("result" => "success"));
}
$this->error("operation fail");
}
$this->error("Illegal operation");
}
}