创建版本
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
<?php namespace Gdoo\Order\Controllers;
|
||||
|
||||
use DB;
|
||||
use Request;
|
||||
use Auth;
|
||||
use Validator;
|
||||
|
||||
use Gdoo\Model\Form;
|
||||
use Gdoo\Model\Grid;
|
||||
|
||||
use Gdoo\User\Models\User;
|
||||
use Gdoo\Order\Models\Logistics;
|
||||
|
||||
use Gdoo\Index\Controllers\DefaultController;
|
||||
|
||||
class LogisticsController extends DefaultController
|
||||
{
|
||||
public $permission = ['dialog'];
|
||||
|
||||
public function indexAction()
|
||||
{
|
||||
$header = Grid::header([
|
||||
'code' => 'logistics',
|
||||
'referer' => 1,
|
||||
'search' => ['by' => ''],
|
||||
'trash_btn' => 0,
|
||||
]);
|
||||
|
||||
$cols = $header['cols'];
|
||||
|
||||
$cols['actions']['options'] = [[
|
||||
'name' => '编辑',
|
||||
'action' => 'edit',
|
||||
'display' => $this->access['edit'],
|
||||
]];
|
||||
|
||||
$search = $header['search_form'];
|
||||
$query = $search['query'];
|
||||
|
||||
if (Request::method() == 'POST') {
|
||||
$model = DB::table($header['table'])->setBy($header);
|
||||
foreach ($header['join'] as $join) {
|
||||
$model->leftJoin($join[0], $join[1], $join[2], $join[3]);
|
||||
}
|
||||
$model->orderBy($header['sort'], $header['order']);
|
||||
|
||||
foreach ($search['where'] as $where) {
|
||||
if ($where['active']) {
|
||||
$model->search($where);
|
||||
}
|
||||
}
|
||||
|
||||
$model->select($header['select']);
|
||||
$rows = $model->paginate($query['limit'])->appends($query);
|
||||
$items = Grid::dataFilters($rows, $header);
|
||||
return $items->toJson();
|
||||
}
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = Logistics::$tabs;
|
||||
$header['bys'] = Logistics::$bys;
|
||||
$header['js'] = Grid::js($header);
|
||||
|
||||
return $this->display([
|
||||
'header' => $header,
|
||||
]);
|
||||
}
|
||||
|
||||
// 新建客户联系人
|
||||
public function createAction($action = 'edit')
|
||||
{
|
||||
$id = (int)Request::get('id');
|
||||
$form = Form::make(['code' => 'logistics', 'id' => $id, 'action' => $action]);
|
||||
return $this->display([
|
||||
'form' => $form,
|
||||
], 'create');
|
||||
}
|
||||
|
||||
// 创建客户联系人
|
||||
public function editAction()
|
||||
{
|
||||
return $this->createAction();
|
||||
}
|
||||
|
||||
// 创建客户联系人
|
||||
public function showAction()
|
||||
{
|
||||
return $this->createAction('show');
|
||||
}
|
||||
|
||||
// 删除
|
||||
public function deleteAction()
|
||||
{
|
||||
if (Request::method() == 'POST') {
|
||||
$ids = Request::get('id');
|
||||
return Form::remove(['code' => 'logistics', 'ids' => $ids]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 弹出层信息
|
||||
*/
|
||||
public function dialogAction()
|
||||
{
|
||||
$search = search_form([
|
||||
'advanced' => '',
|
||||
'prefix' => '',
|
||||
'offset' => '',
|
||||
'sort' => '',
|
||||
'order' => '',
|
||||
'limit' => '',
|
||||
], [
|
||||
['text','logistics.name','名称'],
|
||||
]);
|
||||
$query = $search['query'];
|
||||
|
||||
if (Request::method() == 'POST') {
|
||||
$model = DB::table('logistics');
|
||||
// 排序方式
|
||||
if ($query['sort'] && $query['order']) {
|
||||
$model->orderBy('logistics.'.$query['sort'], $query['order']);
|
||||
}
|
||||
|
||||
foreach ($search['where'] as $where) {
|
||||
if ($where['active']) {
|
||||
$model->search($where);
|
||||
}
|
||||
}
|
||||
|
||||
if ($query['q']) {
|
||||
$model->where('logistics.name', 'like', '%'.$query['q'].'%');
|
||||
}
|
||||
|
||||
$model->selectRaw("logistics.*, logistics.name as text");
|
||||
|
||||
if ($query['limit']) {
|
||||
$rows = $model->paginate($query['limit']);
|
||||
} else {
|
||||
$rows['total'] = $model->count();
|
||||
$rows['data'] = $model->get();
|
||||
}
|
||||
return response()->json($rows);
|
||||
}
|
||||
|
||||
return $this->render([
|
||||
'search' => $search,
|
||||
'query' => $query,
|
||||
]);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,407 @@
|
||||
<?php namespace Gdoo\Order\Controllers;
|
||||
|
||||
use DB;
|
||||
use Request;
|
||||
use Auth;
|
||||
use Cache;
|
||||
|
||||
use Gdoo\Customer\Models\Customer;
|
||||
use Gdoo\Product\Models\Product;
|
||||
use Gdoo\Product\Models\ProductCategory;
|
||||
use Gdoo\Stock\Models\Warehouse;
|
||||
use Gdoo\Order\Models\CustomerOrder;
|
||||
use Gdoo\Stock\Models\Stock;
|
||||
|
||||
use Gdoo\Produce\Services\ProduceService;
|
||||
|
||||
use Gdoo\Index\Controllers\DefaultController;
|
||||
|
||||
class PlanController extends DefaultController
|
||||
{
|
||||
public $permission = [
|
||||
'producePlan',
|
||||
];
|
||||
|
||||
/**
|
||||
* 生产计划总表
|
||||
*/
|
||||
public function indexAction()
|
||||
{
|
||||
// 开始天
|
||||
$sdate = date('Y-m-d', strtotime("-1 day"));
|
||||
// 结束天
|
||||
$edate = date('Y-m-d', strtotime("+2 day"));
|
||||
|
||||
$search = search_form([], [[
|
||||
'form_type' => 'date2',
|
||||
'field' => 'date',
|
||||
'name' => '计划日期',
|
||||
'value' => [$sdate, $edate]
|
||||
],[
|
||||
'form_type' =>'select',
|
||||
'field' => 'type',
|
||||
'name' => '内销/外贸',
|
||||
'options' => [['id'=>1, 'name'=> '内销'], ['id'=>2, 'name'=> '外贸']]
|
||||
],[
|
||||
'form_type' =>'dialog',
|
||||
'field' => 'warehouse_id',
|
||||
'name' => '仓库',
|
||||
'options' => ['url' => 'stock/warehouse/dialog', 'query' => []]
|
||||
],[
|
||||
'form_type' =>'dialog',
|
||||
'field' => 'category_id',
|
||||
'name' => '产品类别',
|
||||
'options' => ['url' => 'product/category/dialog', 'query' => []]
|
||||
],
|
||||
], 'model');
|
||||
|
||||
$query = [];
|
||||
|
||||
if (Request::method() == 'POST') {
|
||||
foreach($search['where'] as $where) {
|
||||
if ($where['active']) {
|
||||
$query[$where['field']] = $where['search'];
|
||||
}
|
||||
}
|
||||
|
||||
if ($query['date']) {
|
||||
$sdate = $query['date'][0];
|
||||
$edate = $query['date'][1];
|
||||
}
|
||||
$rows = ProduceService::getPlanDetail($sdate, $edate, $query['warehouse_id'], $query['category_id'], $query['type']);
|
||||
$json = ['data' => $rows, 'status' => true];
|
||||
return response()->json($json);
|
||||
}
|
||||
|
||||
$header = [
|
||||
'table' => 'produce_data',
|
||||
'master_table' => 'produce_data',
|
||||
'buttons' => [],
|
||||
'search_form' => $search,
|
||||
'simple_search_form' => 0,
|
||||
];
|
||||
|
||||
$header['left_buttons'] = [
|
||||
['name' => '导出', 'color' => 'default', 'icon' => 'fa-mail-forward', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
|
||||
return $this->display([
|
||||
'search' => $search,
|
||||
'header' => $header,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 外销进度表
|
||||
*/
|
||||
public function export_saleAction()
|
||||
{
|
||||
// 开始天
|
||||
$sdate = date('Y-m-01');
|
||||
// 结束天
|
||||
$edate = date('Y-m-d');
|
||||
|
||||
$options = option('flow.status');
|
||||
|
||||
$search = search_form([], [[
|
||||
'form_type' => 'date2',
|
||||
'field' => 'mm.created_dt',
|
||||
'name' => '订单日期',
|
||||
'value' => [$sdate, $edate]
|
||||
],[
|
||||
'form_type' => 'text',
|
||||
'field' => 'mm.sn',
|
||||
'name' => '单据编号',
|
||||
],[
|
||||
'form_type' =>'dialog',
|
||||
'field' => 'mm.product_id',
|
||||
'name' => '产品名称',
|
||||
'options' => ['url' => 'product/product/dialog', 'query' => []]
|
||||
],[
|
||||
'form_type' =>'dialog',
|
||||
'field' => 'mm.customer_id',
|
||||
'name' => '客户',
|
||||
'options' => ['url' => 'customer/customer/dialog', 'query' => []]
|
||||
],[
|
||||
'form_type' =>'select',
|
||||
'field' => 'mm.status',
|
||||
'name' => '状态',
|
||||
'options' => $options
|
||||
],
|
||||
], 'model');
|
||||
|
||||
$query = $search['query'];
|
||||
|
||||
if (Request::method() == 'POST') {
|
||||
$rows = [];
|
||||
|
||||
if ($query['filter'] == 1) {
|
||||
|
||||
$sql = "mm.status,
|
||||
mm.id,
|
||||
mm.sn,
|
||||
mm.created_at,
|
||||
mm.created_dt,
|
||||
mm.customer_id,
|
||||
mm.customer_name,
|
||||
mm.customer_code,
|
||||
mm.product_id,
|
||||
mm.product_code,
|
||||
mm.product_name,
|
||||
mm.product_spec,
|
||||
mm.quantity,
|
||||
mm.batch_sn,
|
||||
pp.plan_num,
|
||||
r.storage_num
|
||||
FROM (SELECT m.status,
|
||||
m.id,
|
||||
m.sn,
|
||||
m.created_at,
|
||||
".sql_year_month_day('m.created_at', 'ts')." AS created_dt,
|
||||
m.customer_id,
|
||||
c.name AS customer_name,
|
||||
c.code AS customer_code,
|
||||
d.product_id,
|
||||
p.code AS product_code,
|
||||
p.name AS product_name,
|
||||
p.spec AS product_spec,
|
||||
d.quantity,
|
||||
d.batch_sn
|
||||
FROM customer_order_data d
|
||||
LEFT JOIN product p ON p.id = d.product_id
|
||||
LEFT JOIN customer_order m ON m.id = d.order_id
|
||||
LEFT JOIN customer c ON c.id = m.customer_id
|
||||
WHERE m.type_id = 2) mm
|
||||
|
||||
LEFT JOIN (SELECT produce_plan_data.batch_sn,
|
||||
produce_plan_data.product_id,
|
||||
sum(isnull(produce_plan_data.plan_num, 0)) AS plan_num
|
||||
FROM produce_plan_data
|
||||
WHERE produce_plan_data.batch_sn IS NOT NULL AND produce_plan_data.plan_num IS NOT NULL
|
||||
GROUP BY produce_plan_data.product_id, produce_plan_data.batch_sn) pp ON mm.product_id = pp.product_id AND mm.batch_sn = pp.batch_sn
|
||||
|
||||
LEFT JOIN (SELECT stock_record10_data.product_id,
|
||||
stock_record10_data.batch_sn,
|
||||
sum(isnull(stock_record10_data.quantity, 0)) AS storage_num
|
||||
FROM stock_record10_data
|
||||
GROUP BY stock_record10_data.product_id, stock_record10_data.batch_sn) r ON mm.product_id = r.product_id AND mm.batch_sn = r.batch_sn
|
||||
";
|
||||
|
||||
$model = DB::query()->selectRaw($sql)
|
||||
->orderBy('created_at', 'desc');
|
||||
|
||||
foreach ($search['where'] as $where) {
|
||||
if ($where['active']) {
|
||||
$model->search($where);
|
||||
}
|
||||
}
|
||||
|
||||
$rows = $model->get();
|
||||
|
||||
$options = $options->pluck('name', 'id');
|
||||
$rows->transform(function($item) use($options) {
|
||||
$item['status'] = $options[$item['status']];
|
||||
return $item;
|
||||
});
|
||||
}
|
||||
$json = ['data' => $rows, 'status' => true];
|
||||
return response()->json($json);
|
||||
}
|
||||
|
||||
$search['table'] = 'produce_plan';
|
||||
return $this->display([
|
||||
'search' => $search,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生产计划
|
||||
*/
|
||||
public function produceAction()
|
||||
{
|
||||
// 开始天
|
||||
$sdate = date('Y-m-d', strtotime("-1 day"));
|
||||
// 结束天
|
||||
$edate = date('Y-m-d', strtotime("+2 day"));
|
||||
|
||||
$search = search_form([], [[
|
||||
'form_type' => 'date2',
|
||||
'field' => 'date',
|
||||
'name' => '计划日期',
|
||||
'value' => [$sdate, $edate]
|
||||
],[
|
||||
'form_type' =>'select',
|
||||
'field' => 'type',
|
||||
'name' => '内销/外贸',
|
||||
'options' => [['id'=>1, 'name'=> '内销'], ['id'=>2, 'name'=> '外贸']]
|
||||
],[
|
||||
'form_type' =>'dialog',
|
||||
'field' => 'category_id',
|
||||
'name' => '产品类别',
|
||||
'options' => ['url' => 'product/category/dialog', 'query' => []]
|
||||
],
|
||||
], 'model');
|
||||
|
||||
$query = [];
|
||||
|
||||
if (Request::method() == 'POST') {
|
||||
foreach($search['where'] as $where) {
|
||||
if ($where['active']) {
|
||||
$query[$where['field']] = $where['search'];
|
||||
}
|
||||
}
|
||||
|
||||
if ($query['date']) {
|
||||
$sdate = $query['date'][0];
|
||||
$edate = $query['date'][1];
|
||||
}
|
||||
|
||||
$dates = array_reverse(date_range($sdate, $edate));
|
||||
$columns = [];
|
||||
|
||||
// 创建计划主表
|
||||
foreach ($dates as $produce_dt) {
|
||||
if ($produce_dt) {
|
||||
|
||||
$produce = DB::table('produce_data')
|
||||
->where('date', $produce_dt)
|
||||
->first();
|
||||
|
||||
$editable = false;
|
||||
$btn = '';
|
||||
|
||||
if ($produce['status'] == 1) {
|
||||
$btn = ' <a href="javascript:;" class="btn btn-default btn-xs disabled">已提交</a>';
|
||||
} else {
|
||||
if ($this->access['produce_save']) {
|
||||
$btn .= ' <a href="javascript:;" data-toggle="produce_data" data-id="'.$produce_dt.'" data-action="save" class="btn btn-default btn-xs">保存</a>';
|
||||
$editable = true;
|
||||
}
|
||||
if ($this->access['produce_submit']) {
|
||||
$btn .= ' <a href="javascript:;" data-toggle="produce_data" data-id="'.$produce_dt.'" data-action="submit" class="btn btn-default btn-xs">提交</a>';
|
||||
}
|
||||
}
|
||||
|
||||
$_produce_dt = str_replace('-', '_', $produce_dt);
|
||||
$columns[] = [
|
||||
'headerName' => $produce_dt.$btn,
|
||||
'cellRenderer' => 'htmlCellRenderer',
|
||||
'children' => [
|
||||
['cellClass' => 'text-right', 'headerName' => '发货计划', 'width' => 60, 'cellRenderer' => 'wfhjh', 'field' => 'wfhjh_num_'.$_produce_dt, 'type' => 'number', 'numberOptions' => ['places' => 0, 'default' => ''], 'calcFooter' => 'sum'],
|
||||
['cellClass' => 'text-right', 'headerName' => '营销计划', 'width' => 60, 'field' => 'sale_plan_num_'.$_produce_dt, 'type' => 'number', 'numberOptions' => ['places' => 0, 'default' => ''], 'calcFooter' => 'sum', 'editable'=> $editable],
|
||||
['cellClass' => 'text-right', 'headerName' => '生产计划', 'width' => 60, 'field' => 'produce_plan_num_'.$_produce_dt, 'type' => 'number', 'numberOptions' => ['places' => 0, 'default' => ''], 'calcFooter' => 'sum'],
|
||||
['cellClass' => 'text-right', 'headerName' => '计划变更', 'width' => 60, 'field' => 'produce_bg_num_'.$_produce_dt, 'type' => 'number', 'numberOptions' => ['places' => 0, 'default' => ''], 'calcFooter' => 'sum'],
|
||||
['cellClass' => 'text-right', 'headerName' => '成品入库', 'width' => 60, 'field' => 'rk_num_'.$_produce_dt, 'type' => 'number', 'numberOptions' => ['places' => 0, 'default' => ''], 'calcFooter' => 'sum'],
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
$rows = ProduceService::getPlanDetail($sdate, $edate, 0, $query['category_id'], $query['type']);
|
||||
$json = ['columns' => $columns, 'data' => $rows, 'status' => true];
|
||||
return response()->json($json);
|
||||
}
|
||||
|
||||
$header = [
|
||||
'table' => 'produce_data',
|
||||
'master_table' => 'produce_data',
|
||||
'buttons' => [],
|
||||
'search_form' => $search,
|
||||
'simple_search_form' => 0,
|
||||
];
|
||||
|
||||
$header['left_buttons'] = [
|
||||
['name' => '导出', 'color' => 'default', 'icon' => 'fa-mail-forward', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
|
||||
return $this->display([
|
||||
'search' => $search,
|
||||
'header' => $header,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取发货计划明细
|
||||
*/
|
||||
public function producePlanAction()
|
||||
{
|
||||
$query = Request::all();
|
||||
if (Request::method() == 'POST') {
|
||||
|
||||
$sql = "d.product_id, SUM(isnull(d.delivery_quantity,0) - isnull(i.Num,0) - isnull(r.Num,0)) as fhjh_num, m.pay_dt,
|
||||
m.plan_delivery_dt,m.export_country,c.name as customer_name,m.sn
|
||||
FROM customer_order_data AS d
|
||||
left JOIN customer_order AS m ON m.id = d.order_id
|
||||
left JOIN customer as c ON m.customer_id = c.id
|
||||
LEFT JOIN (select dd.sale_data_id,SUM(dd.quantity) Num
|
||||
from stock_delivery_data dd,stock_delivery mm
|
||||
where mm.id = dd.delivery_id
|
||||
GROUP BY dd.sale_data_id
|
||||
) as i ON i.sale_data_id = d.id
|
||||
LEFT JOIN (select dd.sale_data_id, SUM(dd.quantity) Num
|
||||
from stock_allocation_data dd, stock_allocation mm
|
||||
where mm.id = dd.allocation_id
|
||||
GROUP BY dd.sale_data_id
|
||||
) as r ON r.sale_data_id = d.id
|
||||
";
|
||||
|
||||
$date = str_replace('_', '-', $query['date']);
|
||||
$model = DB::query()->selectRaw($sql);
|
||||
$model->whereRaw('ISNULL(d.use_close, 0) = 0 and m.status > 0')
|
||||
->where('plan_delivery_dt', $date)
|
||||
->where('product_id', $query['product_id'])
|
||||
->havingRaw('isnull(SUM(d.delivery_quantity),0) - isnull(i.Num,0) - isnull(r.Num,0) <> 0')
|
||||
->groupBy(DB::raw('m.sn, d.product_id, d.delivery_quantity, i.Num, r.Num, m.pay_dt, m.plan_delivery_dt, m.export_country, c.name, m.sn'));
|
||||
|
||||
$rows = $model->get();
|
||||
|
||||
return ['data' => $rows];
|
||||
}
|
||||
return $this->render([
|
||||
'query' => $query,
|
||||
]);
|
||||
}
|
||||
|
||||
// 保存生产计划
|
||||
public function produce_saveAction()
|
||||
{
|
||||
if (Request::method() == 'POST') {
|
||||
$gets = Request::all();
|
||||
$date = $gets['date'];
|
||||
foreach ($gets['rows'] as $row) {
|
||||
|
||||
$has = DB::table('produce_data')
|
||||
->where('product_id', $row['product_id'])
|
||||
->where('date', $date)
|
||||
->first();
|
||||
|
||||
if (empty($has)) {
|
||||
$row['date'] = $date;
|
||||
DB::table('produce_data')->insert($row);
|
||||
} else {
|
||||
if ($has['quantity'] > 0) {
|
||||
DB::table('produce_data')->where('id', $has['id'])->update($row);
|
||||
} else {
|
||||
// 数量如果不大于0就删除
|
||||
DB::table('produce_data')->where('id', $has['id'])->delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
return $this->json('营销计划保存成功。', true);
|
||||
}
|
||||
}
|
||||
|
||||
// 提交生产计划
|
||||
public function produce_submitAction()
|
||||
{
|
||||
if (Request::method() == 'POST') {
|
||||
$gets = Request::all();
|
||||
$count = DB::table('produce_data')->where('date', $gets['date'])->get();
|
||||
if ($count > 0) {
|
||||
DB::table('produce_data')->where('date', $gets['date'])->update(['status' => 1]);
|
||||
return $this->json('营销计划提交成功。', true);
|
||||
} else {
|
||||
return $this->json('营销计划为空不能提交。', true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,299 @@
|
||||
<?php namespace Gdoo\Order\Controllers;
|
||||
|
||||
use DB;
|
||||
use Request;
|
||||
use Validator;
|
||||
|
||||
use Gdoo\User\Models\User;
|
||||
use Gdoo\Order\Models\SampleApply;
|
||||
use Gdoo\Order\Models\SampleApplyProduct;
|
||||
|
||||
use Gdoo\Model\Grid;
|
||||
use Gdoo\Model\Form;
|
||||
|
||||
use Gdoo\Order\Services\OrderService;
|
||||
|
||||
use Gdoo\Index\Controllers\WorkflowController;
|
||||
|
||||
class SampleApplyController extends WorkflowController
|
||||
{
|
||||
public $permission = ['dialog', 'serviceDelivery'];
|
||||
|
||||
// 列表
|
||||
public function indexAction()
|
||||
{
|
||||
$header = Grid::header([
|
||||
'code' => 'sample_apply',
|
||||
'referer' => 1,
|
||||
'search' => ['by' => ''],
|
||||
]);
|
||||
|
||||
$cols = $header['cols'];
|
||||
|
||||
$cols = $header['cols'];
|
||||
|
||||
// 自定义列
|
||||
$customFields = [
|
||||
'quantity' => [
|
||||
'headerName' => '数量',
|
||||
'field' => 'quantity',
|
||||
'calcFooter' => 'sum',
|
||||
'width' => 80,
|
||||
'suppressMenu' => true,
|
||||
'type' => 'number',
|
||||
'cellStyle' => ['text-align' => 'right'],
|
||||
],
|
||||
'money' => [
|
||||
'headerName' => '金额',
|
||||
'field' => 'money',
|
||||
'calcFooter' => 'sum',
|
||||
'width' => 80,
|
||||
'suppressMenu' => true,
|
||||
'type' => 'number',
|
||||
'cellStyle' => ['text-align' => 'right'],
|
||||
],
|
||||
];
|
||||
|
||||
$cols = Grid::addColumns($cols, 'master_region_id_name', $customFields);
|
||||
|
||||
$cols['actions']['options'] = [[
|
||||
'name' => '显示',
|
||||
'action' => 'show',
|
||||
'display' => $this->access['show'],
|
||||
]];
|
||||
|
||||
$search = $header['search_form'];
|
||||
$query = $search['query'];
|
||||
|
||||
if (Request::method() == 'POST') {
|
||||
$model = DB::table($header['table'])->setBy($header);
|
||||
foreach ($header['join'] as $join) {
|
||||
$model->leftJoin($join[0], $join[1], $join[2], $join[3]);
|
||||
}
|
||||
$model->orderBy($header['sort'], $header['order']);
|
||||
|
||||
foreach ($search['where'] as $where) {
|
||||
if ($where['active']) {
|
||||
$model->search($where);
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->access['index'] <> 4) {
|
||||
// 这里需要包括创建者权限
|
||||
$authorise = User::authoriseAccess();
|
||||
$model->whereIn('sample_apply.created_id', $authorise);
|
||||
}
|
||||
|
||||
$model->select($header['select']);
|
||||
|
||||
// 发货统计
|
||||
$model->leftJoin(DB::raw('(select SUM(ISNULL(d.money, 0)) money, SUM(ISNULL(d.quantity, 0)) quantity, d.sample_id
|
||||
FROM sample_apply_data as d
|
||||
GROUP BY d.sample_id
|
||||
) sad
|
||||
'), 'sample_apply.id', '=', 'sad.sample_id');
|
||||
$model->addSelect(DB::raw('sad.*'));
|
||||
|
||||
$rows = $model->paginate($query['limit'])->appends($query);
|
||||
$items = Grid::dataFilters($rows, $header);
|
||||
return $items->toJson();
|
||||
}
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['right_buttons'] = [
|
||||
['name' => '关闭', 'color' => 'default', 'icon' => 'fa-lock', 'action' => 'close', 'display' => $this->access['close']],
|
||||
];
|
||||
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = SampleApply::$tabs;
|
||||
$header['bys'] = SampleApply::$bys;
|
||||
$header['js'] = Grid::js($header);
|
||||
|
||||
return $this->display([
|
||||
'header' => $header,
|
||||
]);
|
||||
}
|
||||
|
||||
// 明细列表
|
||||
public function detailAction()
|
||||
{
|
||||
$header = Grid::header([
|
||||
'code' => 'sample_apply',
|
||||
'referer' => 1,
|
||||
'template_id' => 79,
|
||||
'search' => ['by' => ''],
|
||||
]);
|
||||
|
||||
$cols = $header['cols'];
|
||||
|
||||
$cols['actions']['options'] = [[
|
||||
'name' => '显示',
|
||||
'action' => 'show',
|
||||
'display' => $this->access['show'],
|
||||
]];
|
||||
|
||||
$search = $header['search_form'];
|
||||
$query = $search['query'];
|
||||
|
||||
if (Request::method() == 'POST') {
|
||||
$model = DB::table($header['table'])->setBy($header);
|
||||
foreach ($header['join'] as $join) {
|
||||
$model->leftJoin($join[0], $join[1], $join[2], $join[3]);
|
||||
}
|
||||
$model->orderBy($header['sort'], $header['order']);
|
||||
|
||||
foreach ($search['where'] as $where) {
|
||||
if ($where['active']) {
|
||||
$model->search($where);
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->access['index'] <> 4) {
|
||||
// 这里需要包括创建者权限
|
||||
$authorise = User::authoriseAccess();
|
||||
$model->whereIn('sample_apply.created_id', $authorise);
|
||||
}
|
||||
|
||||
$model->select($header['select']);
|
||||
$rows = $model->paginate($query['limit'])->appends($query);
|
||||
$items = Grid::dataFilters($rows, $header);
|
||||
return $items->toJson();
|
||||
}
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['right_buttons'] = [
|
||||
['name' => '关闭', 'color' => 'default', 'icon' => 'fa-lock', 'action' => 'close', 'display' => $this->access['close']],
|
||||
];
|
||||
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = SampleApply::$tabs2;
|
||||
$header['bys'] = SampleApply::$bys;
|
||||
$header['js'] = Grid::js($header);
|
||||
|
||||
return $this->display([
|
||||
'header' => $header,
|
||||
]);
|
||||
}
|
||||
|
||||
// 新建
|
||||
public function createAction($action = 'edit')
|
||||
{
|
||||
$id = (int) Request::get('id');
|
||||
$header['action'] = $action;
|
||||
$header['code'] = 'sample_apply';
|
||||
$header['id'] = $id;
|
||||
|
||||
$form = Form::make($header);
|
||||
$tpl = $action == 'print' ? 'print' : 'create';
|
||||
return $this->display([
|
||||
'form' => $form,
|
||||
], $tpl);
|
||||
}
|
||||
|
||||
// 编辑
|
||||
public function editAction()
|
||||
{
|
||||
return $this->createAction();
|
||||
}
|
||||
|
||||
// 审核
|
||||
public function auditAction()
|
||||
{
|
||||
return $this->createAction('audit');
|
||||
}
|
||||
|
||||
// 显示
|
||||
public function showAction()
|
||||
{
|
||||
return $this->createAction('show');
|
||||
}
|
||||
|
||||
// 打印
|
||||
public function printAction()
|
||||
{
|
||||
$this->layout = 'layouts.print2';
|
||||
print_prince($this->createAction('print'));
|
||||
}
|
||||
|
||||
// 关闭
|
||||
public function closeAction()
|
||||
{
|
||||
$gets = Request::all();
|
||||
if (Request::method() == 'POST') {
|
||||
$rows = SampleApplyProduct::whereIn('id', $gets['ids'])->get();
|
||||
foreach($rows as $row) {
|
||||
$row->use_close = $row->use_close == 1 ? 0 : 1;
|
||||
$row->save();
|
||||
}
|
||||
return $this->json('恭喜你,操作成功。', url_referer('index'));
|
||||
}
|
||||
return $this->render([
|
||||
'gets' => $gets,
|
||||
]);
|
||||
}
|
||||
|
||||
// 样品出库
|
||||
public function serviceDeliveryAction()
|
||||
{
|
||||
$header = Grid::header([
|
||||
'code' => 'sample_apply',
|
||||
'prefix' => '',
|
||||
]);
|
||||
$search = $header['search_form'];
|
||||
$query = $search['query'];
|
||||
|
||||
if (Request::method() == 'POST') {
|
||||
|
||||
if ($query['master']) {
|
||||
|
||||
$model = DB::table('sample_apply')
|
||||
->leftJoin('department', 'department.id', '=', 'sample_apply.department_id')
|
||||
->leftJoin('customer_region', 'customer_region.id', '=', 'sample_apply.region_id');
|
||||
$model->orderBy('sample_apply.id', 'desc');
|
||||
|
||||
foreach ($search['where'] as $where) {
|
||||
if ($where['active']) {
|
||||
$model->search($where);
|
||||
}
|
||||
}
|
||||
|
||||
$model->whereExists(function($q) {
|
||||
$q->selectRaw('1 FROM('.OrderService::getSampleSelectDetailSql().') as sad')->whereRaw('sad.sample_id = sample_apply.id');
|
||||
});
|
||||
$model->selectRaw('
|
||||
sample_apply.*,
|
||||
department.name as department_name,
|
||||
customer_region.name as region_name
|
||||
');
|
||||
$rows = $model->get();
|
||||
|
||||
} else {
|
||||
$model = DB::query()->selectRaw('* FROM('.OrderService::getSampleSelectDetailSql().') as a');
|
||||
$rows = $model->whereIn('sample_id', (array)$query['ids'])->get(['*', 'sample_data_id as id'])->toArray();
|
||||
}
|
||||
return $this->json($rows, true);
|
||||
}
|
||||
|
||||
return $this->render([
|
||||
'search' => $search,
|
||||
'query' => $query,
|
||||
]);
|
||||
}
|
||||
|
||||
// 删除
|
||||
public function deleteAction()
|
||||
{
|
||||
if (Request::method() == 'POST') {
|
||||
$ids = Request::get('id');
|
||||
return Form::remove(['code' => 'sample_apply', 'ids' => $ids]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
<?php namespace Gdoo\Order\Controllers;
|
||||
|
||||
use DB;
|
||||
use Request;
|
||||
use Validator;
|
||||
|
||||
use Gdoo\Model\Grid;
|
||||
use Gdoo\Model\Form;
|
||||
|
||||
use Gdoo\Order\Models\CustomerOrderType;
|
||||
|
||||
use Gdoo\Index\Controllers\DefaultController;
|
||||
|
||||
class TypeController extends DefaultController
|
||||
{
|
||||
public $permission = ['dialog'];
|
||||
|
||||
public function indexAction()
|
||||
{
|
||||
$header = Grid::header([
|
||||
'code' => 'customer_order_type',
|
||||
'referer' => 1,
|
||||
'search' => ['by' => ''],
|
||||
'trash_btn' => 0,
|
||||
]);
|
||||
|
||||
$cols = $header['cols'];
|
||||
|
||||
$cols['actions']['options'] = [[
|
||||
'name' => '编辑',
|
||||
'action' => 'edit',
|
||||
'display' => $this->access['edit'],
|
||||
]];
|
||||
|
||||
$search = $header['search_form'];
|
||||
$query = $search['query'];
|
||||
|
||||
if (Request::method() == 'POST') {
|
||||
$model = DB::table($header['table'])->setBy($header);
|
||||
foreach ($header['join'] as $join) {
|
||||
$model->leftJoin($join[0], $join[1], $join[2], $join[3]);
|
||||
}
|
||||
$model->orderBy($header['sort'], $header['order'])
|
||||
->orderBy('id', 'desc');
|
||||
|
||||
foreach ($search['where'] as $where) {
|
||||
if ($where['active']) {
|
||||
$model->search($where);
|
||||
}
|
||||
}
|
||||
|
||||
$model->select($header['select']);
|
||||
$rows = $model->paginate($query['limit'])->appends($query);
|
||||
$items = Grid::dataFilters($rows, $header);
|
||||
return $items->toJson();
|
||||
}
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = CustomerOrderType::$tabs;
|
||||
$header['bys'] = CustomerOrderType::$bys;
|
||||
$header['js'] = Grid::js($header);
|
||||
|
||||
return $this->display([
|
||||
'header' => $header,
|
||||
]);
|
||||
}
|
||||
|
||||
// 新建客户联系人
|
||||
public function createAction()
|
||||
{
|
||||
$id = (int)Request::get('id');
|
||||
$form = Form::make(['code' => 'customer_order_type', 'id' => $id]);
|
||||
return $this->render([
|
||||
'form' => $form,
|
||||
], 'create');
|
||||
}
|
||||
|
||||
// 创建客户联系人
|
||||
public function editAction()
|
||||
{
|
||||
return $this->createAction();
|
||||
}
|
||||
|
||||
/**
|
||||
* 弹出层信息
|
||||
*/
|
||||
public function dialogAction()
|
||||
{
|
||||
$header = Grid::header([
|
||||
'code' => 'customer_order_type',
|
||||
]);
|
||||
$search = $header['search_form'];
|
||||
$query = $search['query'];
|
||||
|
||||
if (Request::method() == 'POST') {
|
||||
$model = CustomerOrderType::query();
|
||||
foreach ($header['join'] as $join) {
|
||||
$model->leftJoin($join[0], $join[1], $join[2], $join[3]);
|
||||
}
|
||||
$model->where('customer_order_type.status', 1)
|
||||
->orderBy($header['sort'], $header['order']);
|
||||
|
||||
foreach ($search['where'] as $where) {
|
||||
if ($where['active']) {
|
||||
$model->search($where);
|
||||
}
|
||||
}
|
||||
|
||||
$model->select($header['select']);
|
||||
|
||||
$rows = $model->paginate($query['limit']);
|
||||
$items = Grid::dataFilters($rows, $header, function($item) {
|
||||
$item['text'] = $item['name'];
|
||||
return $item;
|
||||
});
|
||||
return response()->json($items);
|
||||
}
|
||||
$query['form_id'] = $query['jqgrid'] == '' ? $query['id'] : $query['jqgrid'];
|
||||
return $this->render([
|
||||
'search' => $search,
|
||||
'query' => $query,
|
||||
]);
|
||||
}
|
||||
|
||||
// 删除
|
||||
public function deleteAction()
|
||||
{
|
||||
if (Request::method() == 'POST') {
|
||||
$ids = Request::get('id');
|
||||
return Form::remove(['code' => 'customer_order_type', 'ids' => $ids]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,276 @@
|
||||
<?php namespace Gdoo\Order\Controllers;
|
||||
|
||||
use DB;
|
||||
use Request;
|
||||
use Auth;
|
||||
|
||||
use Gdoo\Index\Controllers\DefaultController;
|
||||
|
||||
class WidgetController extends DefaultController
|
||||
{
|
||||
public $permission = ['index', 'goods'];
|
||||
|
||||
public function indexAction()
|
||||
{
|
||||
if (Request::method() == 'POST') {
|
||||
|
||||
$region = regionCustomer();
|
||||
|
||||
$ym = date('Y-m');
|
||||
$ymd = date('Y-m-d');
|
||||
|
||||
// 本日收到 []个客户[]张订单,[]件货。
|
||||
$model = DB::table('customer_order')
|
||||
->leftJoin('customer_order_data', 'customer_order_data.order_id', '=', 'customer_order.id')
|
||||
->leftJoin('product', 'product.id', '=', 'customer_order_data.product_id')
|
||||
->leftJoin('customer', 'customer.id', '=', 'customer_order.customer_id')
|
||||
->whereRaw('product.id <> 20226 and isnull(product.product_type, 0) = 1');
|
||||
|
||||
$model->whereRaw(sql_year_month_day('customer_order.created_at', 'ts').'=?', [$ymd]);
|
||||
|
||||
$model->selectRaw('
|
||||
COUNT(DISTINCT customer_order.id) AS count,
|
||||
COUNT(DISTINCT customer_order.customer_id) AS customer_count,
|
||||
SUM(customer_order_data.delivery_quantity) AS quantity,
|
||||
sum(isnull(customer_order_data.money, 0) - isnull(customer_order_data.other_money, 0)) money
|
||||
');
|
||||
|
||||
if ($region['authorise']) {
|
||||
foreach ($region['whereIn'] as $key => $where) {
|
||||
$model->whereIn($key, $where);
|
||||
}
|
||||
}
|
||||
|
||||
$res = $model->first();
|
||||
$rows[] = ['id' => 2, 'title' => '本日收到 <span class="red">'.number_format($res['customer_count']).'</span> 个客户 <span class="red">'.number_format($res['count']).'</span> 张订单,<span class="red">'.number_format($res['quantity']).'</span> 件,<span class="red">'.number_format($res['money']).'</span> 元'];
|
||||
|
||||
// 本月收到 []个客户[]张订单,[]件货。
|
||||
$model = DB::table('customer_order')
|
||||
->leftJoin('customer_order_data', 'customer_order_data.order_id', '=', 'customer_order.id')
|
||||
->leftJoin('product', 'product.id', '=', 'customer_order_data.product_id')
|
||||
->leftJoin('customer', 'customer.id', '=', 'customer_order.customer_id');
|
||||
|
||||
$model->whereRaw('product.id <> 20226 and isnull(product.product_type, 0) = 1');
|
||||
|
||||
$model->whereRaw(sql_year_month('customer_order.created_at', 'ts').'=?', [$ym]);
|
||||
|
||||
$model->selectRaw('
|
||||
COUNT(DISTINCT customer_order.id) AS count,
|
||||
COUNT(DISTINCT customer_order.customer_id) AS customer_count,
|
||||
SUM(customer_order_data.delivery_quantity) AS quantity,
|
||||
sum(isnull(customer_order_data.money, 0) - isnull(customer_order_data.other_money, 0)) money
|
||||
');
|
||||
|
||||
if ($region['authorise']) {
|
||||
foreach ($region['whereIn'] as $key => $where) {
|
||||
$model->whereIn($key, $where);
|
||||
}
|
||||
}
|
||||
$res = $model->first();
|
||||
$rows[] = ['id' => 2, 'title' => '本月收到 <span class="red">'.number_format($res['customer_count']).'</span> 个客户 <span class="red">'.number_format($res['count']).'</span> 张订单,<span class="red">'.number_format($res['quantity']).'</span> 件,<span class="red">'.number_format($res['money']).'</span> 元'];
|
||||
|
||||
// 本月收到的订单中已发出[]张订单,[]件货
|
||||
$model = DB::table('customer_order')
|
||||
->leftJoin('customer_order_data', 'customer_order_data.order_id', '=', 'customer_order.id')
|
||||
->leftJoin('product', 'product.id', '=', 'customer_order_data.product_id')
|
||||
->leftJoin('customer', 'customer.id', '=', 'customer_order.customer_id');
|
||||
|
||||
$model->whereRaw('product.id <> 20226 and isnull(product.product_type, 0) = 1');
|
||||
$model->whereRaw(sql_year_month('customer_order.created_at', 'ts').'=?', [$ym]);
|
||||
|
||||
$model->leftJoin(DB::raw("(
|
||||
select
|
||||
SUM(ISNULL(d.quantity, 0)) yf_num,
|
||||
sum(isnull(d.money, 0) - isnull(d.other_money, 0)) yf_money,
|
||||
d.sale_data_id,
|
||||
d.sale_id
|
||||
FROM stock_delivery_data as d
|
||||
left join stock_delivery as m on m.id = d.delivery_id
|
||||
GROUP BY d.sale_id, d.sale_data_id
|
||||
) sdd
|
||||
"), 'customer_order_data.id', '=', 'sdd.sale_data_id');
|
||||
$model->where('sdd.yf_num', '>', 0);
|
||||
|
||||
if ($region['authorise']) {
|
||||
foreach ($region['whereIn'] as $key => $where) {
|
||||
$model->whereIn($key, $where);
|
||||
}
|
||||
}
|
||||
$model->selectRaw('
|
||||
COUNT(DISTINCT customer_order.id) AS count,
|
||||
COUNT(DISTINCT sdd.sale_id) AS count,
|
||||
SUM(sdd.yf_num) AS quantity,
|
||||
sum(sdd.yf_money) as money
|
||||
');
|
||||
$res = $model->first();
|
||||
$rows[] = ['title' => '本月收到的订单中已发出 <span class="red">'.number_format($res['count']).'</span> 张订单,<span class="red">'.number_format($res['quantity']).'</span> 件,<span class="red">'.number_format($res['money']).'</span> 元'];
|
||||
|
||||
// 上月订单本月发出[]张,[]件货。
|
||||
$model = DB::table('customer_order')
|
||||
->leftJoin('customer_order_data', 'customer_order_data.order_id', '=', 'customer_order.id')
|
||||
->leftJoin('product', 'product.id', '=', 'customer_order_data.product_id')
|
||||
->leftJoin('customer', 'customer.id', '=', 'customer_order.customer_id')
|
||||
->whereRaw('isnull(product.product_type, 0) = 1');
|
||||
|
||||
$model->whereRaw(sql_year_month('customer_order.created_at', 'ts').'=?', [date("Y-m", strtotime("-1 month"))]);
|
||||
|
||||
$model->leftJoin(DB::raw("(
|
||||
select
|
||||
SUM(ISNULL(d.quantity, 0)) yf_num,
|
||||
sum(isnull(d.money, 0) - isnull(d.other_money, 0)) yf_money,
|
||||
d.sale_data_id,
|
||||
d.sale_id
|
||||
FROM stock_delivery_data as d
|
||||
left join stock_delivery as m on m.id = d.delivery_id
|
||||
where ".sql_year_month('m.invoice_dt')." = '$ym'
|
||||
GROUP BY d.sale_id, d.sale_data_id
|
||||
) sdd
|
||||
"), 'customer_order_data.id', '=', 'sdd.sale_data_id');
|
||||
$model->where('sdd.yf_num', '>', 0)
|
||||
->selectRaw('COUNT(DISTINCT sdd.sale_id) AS count, SUM(sdd.yf_num) AS quantity, sum(sdd.yf_money) as money');
|
||||
|
||||
if ($region['authorise']) {
|
||||
foreach ($region['whereIn'] as $key => $where) {
|
||||
$model->whereIn($key, $where);
|
||||
}
|
||||
}
|
||||
$res = $model->first();
|
||||
$rows[] = ['title' => '上月订单本月发出 <span class="red">'.number_format($res['count']).'</span> 张订单,<span class="red">'.number_format($res['quantity']).' </span>件,<span class="red">'.number_format($res['money']).'</span> 元'];
|
||||
|
||||
// 本月共发出件和金额
|
||||
$delivery = DB::table('stock_delivery')
|
||||
->leftJoin('stock_delivery_data', 'stock_delivery_data.delivery_id', '=', 'stock_delivery.id')
|
||||
->leftJoin('product', 'product.id', '=', 'stock_delivery_data.product_id')
|
||||
->leftJoin('customer', 'customer.id', '=', 'stock_delivery.customer_id');
|
||||
$delivery->whereRaw('stock_delivery_data.product_id <> 20226 and isnull(product.product_type, 0) = 1');
|
||||
$delivery->whereRaw(sql_year_month('stock_delivery.invoice_dt').'=?', [$ym]);
|
||||
$delivery->groupBy('product.category_id', 'stock_delivery.invoice_dt')
|
||||
->selectRaw('
|
||||
stock_delivery.invoice_dt,
|
||||
product.category_id,
|
||||
COUNT(DISTINCT stock_delivery.id) AS count,
|
||||
SUM(stock_delivery_data.quantity) AS quantity,
|
||||
sum(isnull(stock_delivery_data.money, 0) - isnull(stock_delivery_data.other_money, 0)) money
|
||||
');
|
||||
// 本月退货件和金额
|
||||
$cancel = DB::table('stock_cancel')
|
||||
->leftJoin('stock_cancel_data', 'stock_cancel_data.cancel_id', '=', 'stock_cancel.id')
|
||||
->leftJoin('product', 'product.id', '=', 'stock_cancel_data.product_id')
|
||||
->leftJoin('customer', 'customer.id', '=', 'stock_cancel.customer_id');
|
||||
$cancel->whereRaw('stock_cancel_data.product_id <> 20226 and isnull(product.product_type, 0) = 1');
|
||||
$cancel->whereRaw(sql_year_month('stock_cancel.invoice_dt').'=?', [$ym]);
|
||||
$cancel->groupBy('product.category_id', 'stock_cancel.invoice_dt')
|
||||
->selectRaw('
|
||||
stock_cancel.invoice_dt,
|
||||
product.category_id,
|
||||
COUNT(DISTINCT stock_cancel.id) AS count,
|
||||
SUM(stock_cancel_data.quantity) AS quantity,
|
||||
sum(isnull(stock_cancel_data.money, 0) - isnull(stock_cancel_data.other_money, 0)) money
|
||||
');
|
||||
if ($region['authorise']) {
|
||||
foreach ($region['whereIn'] as $key => $where) {
|
||||
$delivery->whereIn($key, $where);
|
||||
$cancel->whereIn($key, $where);
|
||||
}
|
||||
}
|
||||
$res = $delivery->unionAll($cancel)->get();
|
||||
$rows[] = ['title' => '本月共发出 <span class="red">'.number_format($res->sum('count')).'</span> 张发货单,<span class="red">'.number_format($res->sum('quantity')).' </span>件,<span class="red">'.number_format($res->sum('money')).'</span> 元'];
|
||||
|
||||
// 本月直营共发出件和金额
|
||||
$direct = DB::table('stock_direct')
|
||||
->leftJoin('stock_direct_data', 'stock_direct_data.direct_id', '=', 'stock_direct.id')
|
||||
->leftJoin('product', 'product.id', '=', 'stock_direct_data.product_id')
|
||||
->leftJoin('customer', 'customer.id', '=', 'stock_direct.customer_id');
|
||||
$direct->whereRaw('stock_direct_data.product_id <> 20226 and isnull(product.product_type, 0) = 1');
|
||||
$direct->whereRaw(sql_year_month('stock_direct.invoice_dt').'=?', [$ym]);
|
||||
$direct->selectRaw('
|
||||
COUNT(DISTINCT stock_direct.id) AS count,
|
||||
SUM(stock_direct_data.quantity) AS quantity,
|
||||
sum(isnull(stock_direct_data.money, 0) - isnull(stock_direct_data.other_money, 0)) money
|
||||
');
|
||||
if ($region['authorise']) {
|
||||
foreach ($region['whereIn'] as $key => $where) {
|
||||
$direct->whereIn($key, $where);
|
||||
}
|
||||
}
|
||||
$res = $direct->get();
|
||||
$rows[] = ['title' => '本月直营共发出 <span class="red">'.number_format($res->sum('count')).'</span> 张发货单,<span class="red">'.number_format($res->sum('quantity')).' </span>件,<span class="red">'.number_format($res->sum('money')).'</span> 元'];
|
||||
|
||||
/*
|
||||
// 订单审核状态。
|
||||
$model = DB::table('customer_order')
|
||||
->leftJoin('customer', 'customer.id', '=', 'customer_order.customer_id')
|
||||
->selectRaw('sum(l.xshj_num) AS xshj_num, sum(l.sqjl_num) AS sqjl_num');
|
||||
|
||||
// 销售会计审核日期
|
||||
$model->leftJoin(DB::raw("(select
|
||||
m.data_id,
|
||||
sum(case when d.run_name = '销售会计' then 1 else 0 end) as xshj_num,
|
||||
sum(case when d.run_name = '省区经理' then 1 else 0 end) as sqjl_num
|
||||
FROM model_run_log as d left join model_run as m on d.run_id = m.id where m.bill_id = 23 and d.updated_id = 0 and d.[option] = 1
|
||||
GROUP BY m.data_id
|
||||
) as l
|
||||
"), 'l.data_id', '=', 'customer_order.id');
|
||||
|
||||
if ($region['authorise']) {
|
||||
foreach ($region['whereIn'] as $key => $where) {
|
||||
$model->whereIn($key, $where);
|
||||
}
|
||||
}
|
||||
$res = $model->first();
|
||||
$rows[] = ['title' => '订单待审核:销售会计<span class="red">'. $res['xshj_num'].'</span>张,省区经理<span class="red">'.$res['sqjl_num'].'</span>张'];
|
||||
*/
|
||||
|
||||
/*
|
||||
// 目前在途[]件。
|
||||
$model = DB::table('customer_order')
|
||||
->leftJoin('customer_order_data', 'customer_order_data.order_id', '=', 'customer_order.id')
|
||||
->leftJoin('customer', 'customer.id', '=', 'customer_order.customer_id')
|
||||
->whereRaw('FROM_UNIXTIME(customer_order.created_at,"%Y") BETWEEN '.$lastYear.' AND '.$nowYear)
|
||||
->where('customer_order.delivery_time', '>', 0)
|
||||
->where('customer_order.arrival_time', 0)
|
||||
->selectRaw('SUM(customer_order_data.amount) AS amount');
|
||||
|
||||
if ($region['authorise']) {
|
||||
foreach ($region['whereIn'] as $key => $where) {
|
||||
$model->whereIn($key, $where);
|
||||
}
|
||||
}
|
||||
$res = $model->first();
|
||||
$rows[] = ['title' => '目前在途订单 <span class="red">'.(int)$res['amount'].'</span> 件'];
|
||||
*/
|
||||
|
||||
$json['total'] = sizeof($rows);
|
||||
$json['data'] = $rows;
|
||||
return response()->json($json);
|
||||
}
|
||||
return $this->render();
|
||||
}
|
||||
|
||||
/**
|
||||
* 明日预计到货列表
|
||||
*/
|
||||
public function goodsAction()
|
||||
{
|
||||
if (Request::method() == 'POST') {
|
||||
|
||||
$region = regionCustomer();
|
||||
// 昨天
|
||||
$lastDay = date("Y-m-d", strtotime("+1 day"));
|
||||
$model = DB::table('stock_delivery')
|
||||
->leftJoin('customer', 'customer.id', '=', 'stock_delivery.customer_id')
|
||||
->whereRaw('stock_delivery.freight_arrival_date = ? and stock_delivery.freight_arrival_date IS NOT NULL', [$lastDay]);
|
||||
if ($region['authorise']) {
|
||||
foreach ($region['whereIn'] as $key => $where) {
|
||||
$model->whereIn($key, $where);
|
||||
}
|
||||
}
|
||||
$rows = $model->selectRaw('stock_delivery.id,stock_delivery.sn,customer.name,stock_delivery.freight_arrival_date')
|
||||
->get();
|
||||
$json['total'] = $rows->count();
|
||||
$json['data'] = $rows;
|
||||
return response()->json($json);
|
||||
}
|
||||
return $this->render();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php namespace Gdoo\Order\Hooks;
|
||||
|
||||
use DB;
|
||||
use Exception;
|
||||
|
||||
class CancelHook
|
||||
{
|
||||
public function onBeforeForm($params) {
|
||||
return $params;
|
||||
}
|
||||
|
||||
public function onAfterForm($params) {
|
||||
return $params;
|
||||
}
|
||||
|
||||
public function onBeforeStore($params) {
|
||||
return $params;
|
||||
}
|
||||
|
||||
public function onAfterStore($params) {
|
||||
return $params;
|
||||
}
|
||||
|
||||
public function onBeforeDelete($params) {
|
||||
return $params;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php namespace Gdoo\Order\Hooks;
|
||||
|
||||
class OrderDataHook
|
||||
{
|
||||
public function onBeforeForm($params) {
|
||||
return $params;
|
||||
}
|
||||
|
||||
public function onQueryForm($params) {
|
||||
$q = $params['q'];
|
||||
$q->leftJoin('customer_order_type as cot', 'cot.id', '=', 'customer_order_data.type_id')
|
||||
->orderBy('cot.sort', 'asc')
|
||||
->orderBy('product_id_product.code', 'asc')
|
||||
->orderBy('customer_order_data.id', 'asc');
|
||||
|
||||
$params['q'] = $q;
|
||||
return $params;
|
||||
}
|
||||
|
||||
public function onAfterForm($arguments) {
|
||||
return $arguments;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,228 @@
|
||||
<?php namespace Gdoo\Order\Hooks;
|
||||
|
||||
use DB;
|
||||
use Exception;
|
||||
use Gdoo\Order\Models\CustomerOrder;
|
||||
|
||||
class OrderHook
|
||||
{
|
||||
public function onBeforeForm($params) {
|
||||
$permission = $params['permission'];
|
||||
$data = $permission['customer_order_data'];
|
||||
|
||||
// 是客户不能编辑产品类型
|
||||
$role_ids = [2, 83, 84, 85];
|
||||
if (in_array(auth()->user()->role_id, $role_ids)) {
|
||||
// 不能编辑类型
|
||||
unset($data['type_id']);
|
||||
// 不能编辑价格
|
||||
unset($data['price']);
|
||||
// 不编辑实发数量
|
||||
unset($data['delivery_quantity']);
|
||||
}
|
||||
|
||||
$permission['customer_order_data'] = $data;
|
||||
$params['permission'] = $permission;
|
||||
return $params;
|
||||
}
|
||||
|
||||
public function onAfterForm($params) {
|
||||
$options = $params['options'];
|
||||
if ($options['action'] == 'print') {
|
||||
return $params;
|
||||
}
|
||||
$tpls = $params['tpls'];
|
||||
//$tpls[0]['tpl'] = $tpls[0]['tpl'].view('order/bank');
|
||||
$params['tpls'] = $tpls;
|
||||
return $params;
|
||||
}
|
||||
|
||||
public function onBeforeStore($params) {
|
||||
|
||||
$master = $params['master'];
|
||||
|
||||
// 只限制内销和直营
|
||||
if (in_array($master['type_id'], [1, 3])) {
|
||||
// 客户和区域经理和业务员限制下单数和倍数
|
||||
$role_ids = [2, 83, 84];
|
||||
|
||||
// 成品数量
|
||||
$product_quantity = $product_money = 0;
|
||||
|
||||
if (in_array(auth()->user()->role_id, $role_ids)) {
|
||||
|
||||
$_product_ids = DB::table('product')
|
||||
->whereRaw('product_type = 1')
|
||||
->pluck('id', 'id')->toArray();
|
||||
|
||||
$quantitys = [];
|
||||
$product_ids = [];
|
||||
foreach($params['datas'] as $i => $datas) {
|
||||
if ($datas['table'] == 'customer_order_data') {
|
||||
foreach($datas['data'] as $j => $row) {
|
||||
$quantitys[$row['product_id']][] = $row['quantity'];
|
||||
$product_ids[] = $row['product_id'];
|
||||
|
||||
// 获取产成品数量
|
||||
if (isset($_product_ids[$row['product_id']])) {
|
||||
if ($row['type_id'] == 1) {
|
||||
$product_quantity += $row['quantity'];
|
||||
$product_money += $row['money'];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$products = DB::table('product')
|
||||
->whereIn('id', $product_ids)
|
||||
->whereRaw('scale_quantity > 0 or mini_quantity > 0')
|
||||
->get()->keyBy('id');
|
||||
|
||||
foreach($quantitys as $_product_id => $_products) {
|
||||
$product = $products[$_product_id];
|
||||
foreach($_products as $_quantity) {
|
||||
// 检查倍数
|
||||
if ($product['scale_quantity'] > 0) {
|
||||
$has = $_quantity % $product['scale_quantity'];
|
||||
if ($has > 0) {
|
||||
abort_error($product['name'].' - '.$product['spec'].' 下单数量必须是['.$product['scale_quantity'].']的倍数');
|
||||
}
|
||||
}
|
||||
// 检查最低下单数
|
||||
if ($product['mini_quantity'] > 0) {
|
||||
if ($_quantity < $product['mini_quantity']) {
|
||||
abort_error($product['name'].' - '.$product['spec'].' 最低下单数不能小于['.$product['mini_quantity'].']');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$params['master'] = $master;
|
||||
|
||||
$fee = 0;
|
||||
$amount = 0;
|
||||
|
||||
foreach($params['datas'] as $i => $datas) {
|
||||
if ($datas['table'] == 'customer_order_data') {
|
||||
|
||||
foreach($datas['data'] as $j => $row) {
|
||||
|
||||
// 产品类型是赠品
|
||||
if ($row['type_id'] == 2) {
|
||||
if (empty($row['promotion_sn'])) {
|
||||
abort_error('赠品必须有编号。');
|
||||
}
|
||||
// 赠品修改客户促销开票单位
|
||||
if ($row['fee_src_id'] > 0) {
|
||||
// 检查赠品是否在其他订单里已经使用过了
|
||||
$count = DB::table('customer_order_data')
|
||||
->where('order_id', '<>', $row['order_id'])
|
||||
->where('fee_src_id', $row['fee_src_id'])
|
||||
->count('id');
|
||||
if ($count == 0) {
|
||||
DB::table('promotion')->where('id', $row['fee_src_id'])->update([
|
||||
'tax_id' => $master['tax_id'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 是外贸订单检查生产批号
|
||||
if ($master['type_id'] == 2) {
|
||||
$row = get_batch_sn($row);
|
||||
if (empty($row['batch_sn'])) {
|
||||
abort_error('外贸订单必须填写生产批号。');
|
||||
}
|
||||
}
|
||||
|
||||
// 判断费用比例
|
||||
$money = floatval($row['money']);
|
||||
if ($row['product_code'] == '99001') {
|
||||
$fee += $money;
|
||||
} else {
|
||||
$amount += $money;
|
||||
}
|
||||
|
||||
$datas['data'][$j] = $row;
|
||||
}
|
||||
$params['datas'][$i] = $datas;
|
||||
}
|
||||
}
|
||||
|
||||
// 费用不能大于20%
|
||||
/*
|
||||
$feeAmount = $amount * 0.2;
|
||||
if (abs($fee) > $feeAmount) {
|
||||
abort_error('费用金额不能大于'.$feeAmount);
|
||||
}
|
||||
*/
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
/**
|
||||
* 回退流程
|
||||
*/
|
||||
public function onBeforeReturn($params) {
|
||||
return $params;
|
||||
}
|
||||
|
||||
public function onAfterStore($params) {
|
||||
foreach($params['datas'] as $datas) {
|
||||
if ($datas['table'] == 'customer_order_data') {
|
||||
foreach($datas['data'] as $row) {
|
||||
// 计算费用使用情况
|
||||
if ($row['fee_data_id'] > 0) {
|
||||
$use_money = DB::table('customer_order_data')->where('fee_data_id', $row['fee_data_id'])->sum('money');
|
||||
$cost = DB::table('customer_cost_data')->where('id', $row['fee_data_id'])->first();
|
||||
$cost['use_money'] = abs($use_money);
|
||||
$cost['remain_money'] = $cost['money'] - $cost['use_money'];
|
||||
DB::table('customer_cost_data')->where('id', $row['fee_data_id'])->update($cost);
|
||||
}
|
||||
}
|
||||
|
||||
// 费用删除时重新计算使用
|
||||
foreach($datas['deleteds'] as $row) {
|
||||
// 计算费用使用情况
|
||||
if ($row['fee_data_id'] > 0) {
|
||||
$use_money = DB::table('customer_order_data')->where('fee_data_id', $row['fee_data_id'])->sum('money');
|
||||
$cost = DB::table('customer_cost_data')->where('id', $row['fee_data_id'])->first();
|
||||
$cost['use_money'] = abs($use_money);
|
||||
$cost['remain_money'] = $cost['money'] - $cost['use_money'];
|
||||
DB::table('customer_cost_data')->where('id', $row['fee_data_id'])->update($cost);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return $params;
|
||||
}
|
||||
|
||||
public function onBeforeDelete($params) {
|
||||
return $params;
|
||||
}
|
||||
|
||||
public function onAfterDelete($params) {
|
||||
|
||||
foreach($params['datas'] as $datas) {
|
||||
if ($datas['table'] == 'customer_order_data') {
|
||||
foreach($datas['data'] as $row) {
|
||||
// 计算费用使用情况
|
||||
if ($row['fee_data_id'] > 0) {
|
||||
$use_money = DB::table('customer_order_data')->where('fee_data_id', $row['fee_data_id'])->sum('money');
|
||||
$cost = DB::table('customer_cost_data')->where('id', $row['fee_data_id'])->first();
|
||||
$cost['use_money'] = abs($use_money);
|
||||
$cost['remain_money'] = $cost['money'] - $cost['use_money'];
|
||||
DB::table('customer_cost_data')->where('id', $row['fee_data_id'])->update($cost);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $params;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php namespace Gdoo\Order\Models;
|
||||
|
||||
use Gdoo\Index\Models\BaseModel;
|
||||
|
||||
class CancelOrder extends BaseModel
|
||||
{
|
||||
protected $table = 'cancel_order';
|
||||
|
||||
public static $tabs = [
|
||||
'name' => 'tab',
|
||||
'items' => [
|
||||
['url' => 'order/cancel/index', 'name' => '客户退货', 'value' => 'index'],
|
||||
]
|
||||
];
|
||||
|
||||
public static $todo_tabs = [
|
||||
'name' => 'tab',
|
||||
'items' => [
|
||||
['url' => 'order/cancel/todo', 'name' => '待办中', 'value' => 'todo'],
|
||||
['url' => 'order/cancel/todo', 'name' => '已办理', 'value' => 'trans'],
|
||||
['url' => 'order/cancel/todo', 'name' => '已结束', 'value' => 'done'],
|
||||
]
|
||||
];
|
||||
|
||||
public static $bys = [
|
||||
'name' => 'by',
|
||||
'items' => [
|
||||
['value' => '', 'name' => '全部'],
|
||||
['value' => 'divider'],
|
||||
['value' => 'day', 'name' => '今日创建'],
|
||||
['value' => 'week', 'name' => '本周创建'],
|
||||
['value' => 'month', 'name' => '本月创建'],
|
||||
]
|
||||
];
|
||||
|
||||
public function datas()
|
||||
{
|
||||
return $this->hasMany('Gdoo\Order\Models\CustomerOrderData');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php namespace Gdoo\Order\Models;
|
||||
|
||||
use Gdoo\Index\Models\BaseModel;
|
||||
|
||||
class CancelOrderData extends BaseModel
|
||||
{
|
||||
protected $table = 'cancel_order_data';
|
||||
|
||||
public function datas()
|
||||
{
|
||||
return $this->hasMany('Gdoo\Order\Models\CancelOrderData');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php namespace Gdoo\Order\Models;
|
||||
|
||||
use Gdoo\Index\Models\BaseModel;
|
||||
|
||||
class CustomerDelivery extends BaseModel
|
||||
{
|
||||
protected $table = 'customer_delivery';
|
||||
|
||||
public static $tabs = [
|
||||
'name' => 'tab',
|
||||
'items' => [
|
||||
['url' => 'order/delivery/index', 'name' => '客户发货', 'value' => 'index'],
|
||||
]
|
||||
];
|
||||
|
||||
public static $todo_tabs = [
|
||||
'name' => 'tab',
|
||||
'items' => [
|
||||
['url' => 'order/delivery/todo', 'name' => '待办中', 'value' => 'todo'],
|
||||
['url' => 'order/delivery/todo', 'name' => '已办理', 'value' => 'trans'],
|
||||
['url' => 'order/delivery/todo', 'name' => '已结束', 'value' => 'done'],
|
||||
]
|
||||
];
|
||||
|
||||
public static $bys = [
|
||||
'name' => 'by',
|
||||
'items' => [
|
||||
['value' => '', 'name' => '全部'],
|
||||
['value' => 'divider'],
|
||||
['value' => 'day', 'name' => '今日创建'],
|
||||
['value' => 'week', 'name' => '本周创建'],
|
||||
['value' => 'month', 'name' => '本月创建'],
|
||||
]
|
||||
];
|
||||
|
||||
public function promotions()
|
||||
{
|
||||
return $this->hasMany('Gdoo\Promotion\Models\Promotion', 'customer_id', 'customer_id');
|
||||
}
|
||||
|
||||
public function approachs()
|
||||
{
|
||||
return $this->hasMany('Gdoo\Approach\Models\Approach', 'customer_id', 'customer_id');
|
||||
}
|
||||
|
||||
public function datas()
|
||||
{
|
||||
return $this->hasMany('Gdoo\Order\Models\CustomerOrderData');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
<?php namespace Gdoo\Order\Models;
|
||||
|
||||
use DB;
|
||||
use Gdoo\Index\Models\BaseModel;
|
||||
|
||||
use Gdoo\CustomerCost\Models\CostData;
|
||||
|
||||
class CustomerOrder extends BaseModel
|
||||
{
|
||||
protected $table = 'customer_order';
|
||||
|
||||
public static $tabs = [
|
||||
'name' => 'tab',
|
||||
'items' => [
|
||||
['url' => 'order/order/index', 'name' => '销售订单', 'value' => 'order.index'],
|
||||
]
|
||||
];
|
||||
|
||||
public static $tabs2 = [
|
||||
'name' => 'tab',
|
||||
'items' => [
|
||||
['url' => 'order/order/detail', 'name' => '销售订单明细', 'value' => 'order.detail'],
|
||||
]
|
||||
];
|
||||
|
||||
public static $tabs3 = [
|
||||
'name' => 'tab',
|
||||
'items' => [
|
||||
['url' => 'order/order/delivery', 'name' => '发货计划', 'value' => 'delivery'],
|
||||
]
|
||||
];
|
||||
|
||||
public static $bys = [
|
||||
'name' => 'by',
|
||||
'items' => [
|
||||
['value' => '', 'name' => '全部'],
|
||||
['value' => 'divider'],
|
||||
['value' => 'day', 'name' => '今日创建'],
|
||||
['value' => 'week', 'name' => '本周创建'],
|
||||
['value' => 'month', 'name' => '本月创建'],
|
||||
]
|
||||
];
|
||||
|
||||
public function promotions()
|
||||
{
|
||||
return $this->hasMany('Gdoo\Promotion\Models\Promotion', 'customer_id', 'customer_id');
|
||||
}
|
||||
|
||||
public function approachs()
|
||||
{
|
||||
return $this->hasMany('Gdoo\Approach\Models\Approach', 'customer_id', 'customer_id');
|
||||
}
|
||||
|
||||
public function datas()
|
||||
{
|
||||
return $this->hasMany('Gdoo\Order\Models\CustomerOrderData');
|
||||
}
|
||||
|
||||
public function scopeDialog($q, $value)
|
||||
{
|
||||
return $q->whereIn('id', $value)->pluck('sn', 'id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php namespace Gdoo\Order\Models;
|
||||
|
||||
use Gdoo\Index\Models\BaseModel;
|
||||
|
||||
class CustomerOrderData extends BaseModel
|
||||
{
|
||||
protected $table = 'customer_order_data';
|
||||
|
||||
public function product()
|
||||
{
|
||||
return $this->belongsTo('Gdoo\Product\Models\Product');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php namespace Gdoo\Order\Models;
|
||||
|
||||
use Gdoo\Index\Models\BaseModel;
|
||||
|
||||
class CustomerOrderType extends BaseModel
|
||||
{
|
||||
protected $table = 'customer_order_type';
|
||||
|
||||
public static $tabs = [
|
||||
'name' => 'tab',
|
||||
'items' => [
|
||||
['value' => 'type.index', 'url' => 'order/type/index', 'name' => '订单类型'],
|
||||
]
|
||||
];
|
||||
|
||||
public static $bys = [
|
||||
'name' => 'by',
|
||||
'items' => [
|
||||
['value' => '', 'name' => '全部'],
|
||||
['value' => 'divider'],
|
||||
['value' => 'day', 'name' => '今日创建'],
|
||||
['value' => 'week', 'name' => '本周创建'],
|
||||
['value' => 'month', 'name' => '本月创建'],
|
||||
]
|
||||
];
|
||||
|
||||
public function scopeDialog($q, $value)
|
||||
{
|
||||
return $q->whereIn('id', $value)->pluck('name', 'id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php namespace Gdoo\Order\Models;
|
||||
|
||||
use Gdoo\Index\Models\BaseModel;
|
||||
|
||||
class Logistics extends BaseModel
|
||||
{
|
||||
protected $table = 'logistics';
|
||||
|
||||
public static $tabs = [
|
||||
'name' => 'tab',
|
||||
'items' => [
|
||||
['value' => 'logistics.index', 'url' => 'order/logistics/index', 'name' => '物流公司'],
|
||||
]
|
||||
];
|
||||
|
||||
public static $bys = [
|
||||
'name' => 'by',
|
||||
'items' => [
|
||||
['value' => '', 'name' => '全部'],
|
||||
['value' => 'divider'],
|
||||
['value' => 'day', 'name' => '今日创建'],
|
||||
['value' => 'week', 'name' => '本周创建'],
|
||||
['value' => 'month', 'name' => '本月创建'],
|
||||
]
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php namespace Gdoo\Order\Models;
|
||||
|
||||
use Gdoo\Index\Models\BaseModel;
|
||||
|
||||
class OrderTransport extends BaseModel
|
||||
{
|
||||
protected $table = 'order_transport';
|
||||
|
||||
public function datas()
|
||||
{
|
||||
return $this->hasMany('Gdoo\Order\Models\OrderData', 'order_id', 'order_id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php namespace Gdoo\Order\Models;
|
||||
|
||||
use Gdoo\Index\Models\BaseModel;
|
||||
|
||||
class SampleApply extends BaseModel
|
||||
{
|
||||
protected $table = 'sample_apply';
|
||||
|
||||
public static $tabs = [
|
||||
'name' => 'tab',
|
||||
'items' => [
|
||||
['url' => 'order/sampleApply/index', 'name' => '样品申请', 'value' => 'index'],
|
||||
]
|
||||
];
|
||||
|
||||
public static $tabs2 = [
|
||||
'name' => 'tab',
|
||||
'items' => [
|
||||
['url' => 'order/sampleApply/detail', 'name' => '样品申请明细', 'value' => 'detail'],
|
||||
]
|
||||
];
|
||||
|
||||
public static $bys = [
|
||||
'name' => 'by',
|
||||
'items' => [
|
||||
['value' => '', 'name' => '全部'],
|
||||
['value' => 'divider'],
|
||||
['value' => 'day', 'name' => '今日创建'],
|
||||
['value' => 'week', 'name' => '本周创建'],
|
||||
['value' => 'month', 'name' => '本月创建'],
|
||||
]
|
||||
];
|
||||
|
||||
public function datas()
|
||||
{
|
||||
return $this->hasMany('Gdoo\Order\Models\CustomerOrderData');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php namespace Gdoo\Order\Models;
|
||||
|
||||
use Gdoo\Index\Models\BaseModel;
|
||||
|
||||
class SampleApplyData extends BaseModel
|
||||
{
|
||||
protected $table = 'sample_apply_data';
|
||||
}
|
||||
@@ -0,0 +1,353 @@
|
||||
<?php namespace Gdoo\Order\Services;
|
||||
|
||||
use DB;
|
||||
use Gdoo\Index\Services\BadgeService;
|
||||
use Gdoo\Stock\Services\StockService;
|
||||
|
||||
class OrderService
|
||||
{
|
||||
/**
|
||||
* 获取待审订单
|
||||
*/
|
||||
public static function getBadge()
|
||||
{
|
||||
return BadgeService::getModelTodo('customer_order');
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取为使用的促销id
|
||||
*
|
||||
*/
|
||||
public static function getSaleOrderDataSql()
|
||||
{
|
||||
return "SELECT f.sn AS delivery_sn,
|
||||
f.invoice_dt AS delivery_date,
|
||||
sd.id AS sale_data_id,
|
||||
sd.order_id,
|
||||
sd.order_id AS sale_id,
|
||||
sd.product_id,
|
||||
p.name AS product_name,
|
||||
p.barcode AS product_barcode,
|
||||
p.spec AS product_spec,
|
||||
p.unit_id,
|
||||
p.product_type,
|
||||
p.material_type,
|
||||
u.name AS product_unit,
|
||||
sd.quantity,
|
||||
sd.delivery_quantity,
|
||||
sd.price,
|
||||
sd.money,
|
||||
p.code AS product_code,
|
||||
isnull(r.quantity, 0) AS stock_quantity,
|
||||
sd.weight,
|
||||
(sd.weight * sd.delivery_quantity) AS total_weight,
|
||||
isnull(sd.use_close, 0) AS use_close,
|
||||
sm.customer_id,
|
||||
c.type_id AS customer_type_id,
|
||||
c.is_direct,
|
||||
c.is_allocate,
|
||||
CASE WHEN isnull(sd.use_close, 0) = 0 THEN '否' ELSE '是' END AS use_close_name,
|
||||
isnull(sd.delivery_quantity, 0) - isnull(f.quantity, 0) AS wf_num,
|
||||
f.quantity AS yf_num,
|
||||
sd.type_id,
|
||||
cot.name AS type_id_name,
|
||||
sd.customer_stock,
|
||||
sd.other_money,
|
||||
p.is_special,
|
||||
pc.code AS category_code,
|
||||
p.barcode,
|
||||
isnull(sd.money, 0) + isnull(sd.other_money, 0) AS hj_money,
|
||||
sd.remark,
|
||||
u.code AS unit_code,
|
||||
CASE WHEN sd.type_id <= 1 THEN 1 ELSE CASE WHEN sd.type_id = 2 THEN 2 ELSE CASE WHEN sd.type_id = 3 THEN 3 ELSE 4 END END END AS cstcode,
|
||||
sd.batch_sn,
|
||||
sd.batch_date,
|
||||
sd.fee_data_id,
|
||||
sd.fee_src_id,
|
||||
sd.fee_src_type_id,
|
||||
sd.fee_src_sn,
|
||||
sd.promotion_sn,
|
||||
sd.promotion_data_id,
|
||||
sd.fee_category_id,
|
||||
bt.name AS fee_category_id_name,
|
||||
sd.customer_stock_dt
|
||||
FROM customer_order_data sd
|
||||
LEFT JOIN customer_order sm ON sm.id = sd.order_id
|
||||
LEFT JOIN customer_order_type cot ON cot.id = sd.type_id
|
||||
LEFT JOIN product p ON p.id = sd.product_id
|
||||
LEFT JOIN product_category pc ON pc.id = p.category_id
|
||||
LEFT JOIN product_unit u ON u.id = p.unit_id
|
||||
LEFT JOIN customer c ON sm.customer_id = c.id
|
||||
|
||||
LEFT JOIN (SELECT sum(isnull(ky_num, 0)) AS quantity, product_id
|
||||
FROM (".StockService::getStockSelectSql().") ss
|
||||
GROUP BY product_id
|
||||
) r ON sd.product_id = r.product_id
|
||||
|
||||
LEFT JOIN (SELECT sum(d.quantity) AS quantity,d.sale_data_id, min(m.invoice_dt) AS invoice_dt, min(m.sn) AS sn
|
||||
FROM stock_delivery_data d
|
||||
JOIN stock_delivery m ON d.delivery_id = m.id
|
||||
WHERE m.status = 1
|
||||
GROUP BY d.sale_data_id
|
||||
) f ON sd.id = f.sale_data_id
|
||||
|
||||
LEFT JOIN customer_cost_category bt ON sd.fee_category_id = bt.id";
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取为使用的促销id
|
||||
*
|
||||
*/
|
||||
public static function getSaleOrderSelectDetailNotDeliverySql()
|
||||
{
|
||||
return "SELECT d.sale_id,
|
||||
d.sale_data_id,
|
||||
d.product_id,
|
||||
d.quantity AS num,
|
||||
(d.quantity - d.delivery_quantity) - isnull(yf.yf_num, 0) AS wf_num,
|
||||
d.delivery_quantity + isnull(yf.yf_num, 0) AS yf_num,
|
||||
d.price,
|
||||
CASE WHEN isnull(d.type_id, 0) = 2 THEN '1' ELSE '0' END AS is_gift,
|
||||
d.batch_sn,
|
||||
d.batch_date,
|
||||
d.promotion_sn,
|
||||
d.promotion_data_id,
|
||||
d.remark,
|
||||
d.product_code,
|
||||
d.product_spec,
|
||||
d.product_name,
|
||||
d.product_barcode,
|
||||
d.product_unit,
|
||||
d.weight,
|
||||
d.total_weight,
|
||||
d.fee_data_id,
|
||||
d.fee_src_id,
|
||||
d.fee_src_type_id,
|
||||
d.fee_src_sn,
|
||||
d.fee_category_id,
|
||||
d.fee_category_id_name,
|
||||
d.type_id,
|
||||
d.type_id_name
|
||||
FROM (".static::getSaleOrderDataSql().") d
|
||||
LEFT JOIN (SELECT dd.ref_sale_data_id, dd.product_id, sum(dd.quantity) AS yf_num
|
||||
FROM customer_order_data dd
|
||||
GROUP BY dd.ref_sale_data_id, dd.product_id
|
||||
) yf ON d.sale_data_id = yf.ref_sale_data_id AND d.product_id = yf.product_id
|
||||
|
||||
WHERE (d.quantity - d.delivery_quantity) - isnull(yf.yf_num, 0) > 0 AND isnull(d.use_close, 0) = 0";
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取为使用的促销id
|
||||
*
|
||||
*/
|
||||
public static function getSaleOrderSelectDetailSql()
|
||||
{
|
||||
return "
|
||||
SELECT isnull(temp.wf_num, 0) * isnull(temp.weight, 0) AS total_weight,
|
||||
temp.*
|
||||
FROM (
|
||||
SELECT isnull(d.delivery_quantity, 0) AS quantity,
|
||||
isnull(sdd.quantity, 0) AS yf_num,
|
||||
isnull(sdd.bs, 0) AS yf_bs,
|
||||
isnull(d.delivery_quantity, 0) - isnull(sdd.quantity, 0) AS wf_num,
|
||||
isnull(e.ky_num, 0) AS ky_num,
|
||||
d.product_id,
|
||||
d.sale_id,
|
||||
d.sale_data_id,
|
||||
d.type_id,
|
||||
d.type_id_name,
|
||||
d.other_money,
|
||||
d.price,
|
||||
d.money,
|
||||
m.sn AS sale_sn,
|
||||
CASE WHEN (isnull(d.type_id, 0) = 2) THEN '1' ELSE '0' END AS is_gift,
|
||||
d.batch_sn,
|
||||
d.batch_date,
|
||||
d.fee_data_id,
|
||||
d.fee_src_id,
|
||||
d.fee_src_type_id,
|
||||
d.fee_src_sn,
|
||||
d.fee_category_id,
|
||||
d.fee_category_id_name,
|
||||
d.promotion_sn,
|
||||
d.promotion_data_id,
|
||||
d.product_name,
|
||||
d.product_spec,
|
||||
d.product_code,
|
||||
d.product_unit,
|
||||
d.product_barcode,
|
||||
d.material_type,
|
||||
d.weight
|
||||
FROM (".static::getSaleOrderDataSql().") d
|
||||
LEFT JOIN customer_order m ON d.order_id = m.id
|
||||
|
||||
LEFT JOIN (SELECT sum(isnull(quantity, 0)) AS quantity, count(*) AS bs, product_id, sale_data_id
|
||||
FROM stock_delivery_data
|
||||
GROUP BY sale_data_id, product_id
|
||||
) sdd ON d.sale_data_id = sdd.sale_data_id
|
||||
|
||||
LEFT JOIN (SELECT product_id, sum(isnull(ky_num, 0)) AS ky_num
|
||||
FROM (".StockService::getStockSelectSql().") ss
|
||||
WHERE (warehouse_name like '%成品%' OR warehouse_code = '07') AND warehouse_code <> '25'
|
||||
GROUP BY product_id
|
||||
) e ON d.product_id = e.product_id
|
||||
|
||||
WHERE isnull(d.use_close, 0) = 0 AND (isnull(d.is_allocate, 0) = 0 OR (isnull(d.is_allocate, 0) = 1 AND isnull(d.material_type, 0) > 0))
|
||||
) temp
|
||||
WHERE isnull(temp.wf_num, 0) > 0 OR (isnull(temp.yf_bs, 0) = 0 AND temp.product_code like '99%')";
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取为使用的促销id
|
||||
*
|
||||
*/
|
||||
public static function getSaleOrderSelectDetailReqSql()
|
||||
{
|
||||
return "
|
||||
SELECT isnull(temp.wf_num, 0) * isnull(temp.weight, 0) AS total_weight,
|
||||
temp.quantity,
|
||||
temp.yf_num,
|
||||
temp.yf_bs,
|
||||
temp.wf_num,
|
||||
temp.ky_num,
|
||||
temp.product_id,
|
||||
temp.sale_id,
|
||||
temp.sale_data_id,
|
||||
temp.type_id,
|
||||
temp.type_id_name,
|
||||
temp.other_money,
|
||||
temp.price,
|
||||
temp.money,
|
||||
temp.sale_sn,
|
||||
temp.is_gift,
|
||||
temp.batch_sn,
|
||||
temp.batch_date,
|
||||
temp.fee_data_id,
|
||||
temp.fee_src_id,
|
||||
temp.fee_src_type_id,
|
||||
temp.fee_src_sn,
|
||||
temp.fee_category_id,
|
||||
temp.fee_category_id_name,
|
||||
temp.promotion_sn,
|
||||
temp.promotion_data_id,
|
||||
temp.product_name,
|
||||
temp.product_spec,
|
||||
temp.product_code,
|
||||
temp.product_unit,
|
||||
temp.product_barcode,
|
||||
temp.product_type,
|
||||
temp.material_type,
|
||||
temp.weight
|
||||
FROM (SELECT isnull(d.delivery_quantity, 0) AS quantity,
|
||||
isnull(sdd.quantity, 0) AS yf_num,
|
||||
isnull(sdd.bs, 0) AS yf_bs,
|
||||
isnull(d.delivery_quantity, 0) - isnull(sdd.quantity, 0) AS wf_num,
|
||||
isnull(e.ky_num, 0) AS ky_num,
|
||||
d.product_id,
|
||||
d.sale_id,
|
||||
d.sale_data_id,
|
||||
d.type_id,
|
||||
d.type_id_name,
|
||||
d.other_money,
|
||||
d.price,
|
||||
d.money,
|
||||
m.sn AS sale_sn,
|
||||
CASE WHEN (isnull(d.type_id, 0) = 2) THEN '1' ELSE '0' END AS is_gift,
|
||||
d.batch_sn,
|
||||
d.batch_date,
|
||||
d.fee_data_id,
|
||||
d.fee_src_id,
|
||||
d.fee_src_type_id,
|
||||
d.fee_src_sn,
|
||||
d.fee_category_id,
|
||||
d.fee_category_id_name,
|
||||
d.promotion_sn,
|
||||
d.promotion_data_id,
|
||||
d.product_name,
|
||||
d.product_spec,
|
||||
d.product_code,
|
||||
d.product_unit,
|
||||
d.product_barcode,
|
||||
d.product_type,
|
||||
d.material_type,
|
||||
d.weight
|
||||
FROM (".static::getSaleOrderDataSql().") d
|
||||
LEFT JOIN customer_order m ON d.order_id = m.id
|
||||
LEFT JOIN (SELECT sum(isnull(quantity, 0)) AS quantity,
|
||||
count(*) AS bs,
|
||||
product_id,
|
||||
sale_data_id
|
||||
FROM stock_allocation_data
|
||||
GROUP BY sale_data_id, product_id
|
||||
) sdd ON d.sale_data_id = sdd.sale_data_id
|
||||
|
||||
LEFT JOIN (SELECT product_id,
|
||||
sum(isnull(ky_num, (0)::numeric)) AS ky_num
|
||||
FROM (".StockService::getStockSelectSql().") ss
|
||||
WHERE (warehouse_name like '%成品%') AND warehouse_code <> '25'
|
||||
GROUP BY product_id
|
||||
) e ON d.product_id = e.product_id
|
||||
|
||||
WHERE isnull(d.use_close, 0) = 0 AND isnull(d.is_allocate, 0) = 1
|
||||
) temp
|
||||
WHERE isnull(temp.wf_num, 0) > 0";
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取为使用的促销id
|
||||
*
|
||||
*/
|
||||
public static function getSampleSelectDetailSql()
|
||||
{
|
||||
return "
|
||||
SELECT temp.quantity,
|
||||
temp.yc_num,
|
||||
temp.wc_num,
|
||||
temp.ky_num,
|
||||
temp.product_id,
|
||||
temp.sample_id,
|
||||
temp.sample_data_id,
|
||||
temp.price,
|
||||
temp.money,
|
||||
temp.sample_sn,
|
||||
temp.use_close,
|
||||
isnull(p.weight, 0) AS weight,
|
||||
p.name AS product_name,
|
||||
p.code AS product_code,
|
||||
pc.code AS category_code,
|
||||
p.spec AS product_spec,
|
||||
pu.name AS product_unit,
|
||||
isnull(temp.wc_num, 0) * isnull(p.weight, 0) AS total_weight
|
||||
FROM (SELECT isnull(d.quantity, 0) AS quantity,
|
||||
isnull(srd.quantity, 0) AS yc_num,
|
||||
isnull(d.quantity, 0) - isnull(srd.quantity, 0) AS wc_num,
|
||||
isnull(e.ky_num, 0) AS ky_num,
|
||||
d.product_id,
|
||||
d.sample_id,
|
||||
d.id AS sample_data_id,
|
||||
d.price,
|
||||
d.money,
|
||||
m.sn AS sample_sn,
|
||||
d.use_close
|
||||
FROM sample_apply_data d
|
||||
LEFT JOIN sample_apply m ON m.id = d.sample_id
|
||||
LEFT JOIN (SELECT sum(isnull(quantity, 0)) AS quantity,product_id,sample_data_id
|
||||
FROM stock_record09_data
|
||||
WHERE sample_data_id <> 0
|
||||
GROUP BY sample_data_id, product_id
|
||||
) srd ON d.id = srd.sample_data_id
|
||||
|
||||
LEFT JOIN (SELECT product_id,sum(isnull(ky_num, 0)) AS ky_num
|
||||
FROM (".StockService::getStockSelectSql().") ss
|
||||
GROUP BY product_id
|
||||
) e ON d.product_id = e.product_id
|
||||
|
||||
WHERE m.status = 1
|
||||
) temp
|
||||
LEFT JOIN product p ON temp.product_id = p.id
|
||||
LEFT JOIN product_unit pu ON p.unit_id = pu.id
|
||||
LEFT JOIN product_category pc ON pc.id = p.category_id
|
||||
WHERE isnull(temp.wc_num, 0) > 0";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,282 @@
|
||||
<?php
|
||||
return [
|
||||
"name" => "销售订单",
|
||||
"version" => "1.0",
|
||||
"description" => "订单管理,销售支持,生产计划,订单类型,订单发货。",
|
||||
'dialogs' => [
|
||||
'customer_order' => [
|
||||
'name' => '客户订单',
|
||||
'model' => 'Gdoo\Order\Models\CustomerOrder::Dialog',
|
||||
'url' => 'order/order/dialog',
|
||||
],
|
||||
'customer_order_type' => [
|
||||
'name' => '客户订单类型',
|
||||
'model' => 'Gdoo\Order\Models\CustomerOrderType::Dialog',
|
||||
'url' => 'order/type/dialog',
|
||||
],
|
||||
'logistics' => [
|
||||
'name' => '物流供应商',
|
||||
'model' => 'Gdoo\Order\Models\Logistics::Dialog',
|
||||
'url' => 'order/logistics/dialog',
|
||||
],
|
||||
],
|
||||
"listens" => [
|
||||
'customer_order' => 'Gdoo\Order\Hooks\OrderHook',
|
||||
'customer_order_data' => 'Gdoo\Order\Hooks\OrderDataHook',
|
||||
],
|
||||
'badges' => [
|
||||
'order_order_index' => 'Gdoo\Order\Services\OrderService::getBadge',
|
||||
],
|
||||
'widgets' => [
|
||||
'widget_order_index' => [
|
||||
'name' => '订单统计',
|
||||
'type' => 1,
|
||||
'url' => 'order/widget/index',
|
||||
'more_url' => 'order/order/index',
|
||||
],
|
||||
'widget_order_goods' => [
|
||||
'name' => '明日预计到货',
|
||||
'type' => 1,
|
||||
'url' => 'order/widget/goods',
|
||||
'more_url' => 'order/order/delivery',
|
||||
],
|
||||
],
|
||||
"controllers" => [
|
||||
"order" => [
|
||||
"name" => "客户订单",
|
||||
"actions" => [
|
||||
"index" => [
|
||||
"name" => "列表"
|
||||
],
|
||||
"detail" => [
|
||||
"name" => "明细列表"
|
||||
],
|
||||
'delivery' => [
|
||||
"name" => "发货计划"
|
||||
],
|
||||
'deliveryPlan' => [
|
||||
"name" => "修改预计发货日期"
|
||||
],
|
||||
"audit" => [
|
||||
"name" => "审核"
|
||||
],
|
||||
"recall" => [
|
||||
"name" => "撤回"
|
||||
],
|
||||
"abort" => [
|
||||
"name" => "弃审"
|
||||
],
|
||||
"show" => [
|
||||
"name" => "显示"
|
||||
],
|
||||
"create" => [
|
||||
"name" => "新建"
|
||||
],
|
||||
"edit" => [
|
||||
"name" => "编辑"
|
||||
],
|
||||
"print" => [
|
||||
"name" => "打印"
|
||||
],
|
||||
"delete" => [
|
||||
"name" => "删除"
|
||||
],
|
||||
'logisticsPlan' => [
|
||||
"name" => "修改物流信息",
|
||||
],
|
||||
'deliveryEdit' => [
|
||||
"name" => "修改运费支付方式",
|
||||
],
|
||||
'closeRow' => [
|
||||
"name" => "关闭行(恢复)",
|
||||
],
|
||||
'closeAllRow' => [
|
||||
"name" => "关闭所有行(恢复)",
|
||||
],
|
||||
'batchEdit' => [
|
||||
"name" => "批量编辑",
|
||||
],
|
||||
]
|
||||
],
|
||||
"cancel" => [
|
||||
"name" => "订单退货",
|
||||
"actions" => [
|
||||
"index" => [
|
||||
"name" => "列表"
|
||||
],
|
||||
"audit" => [
|
||||
"name" => "审核"
|
||||
],
|
||||
"recall" => [
|
||||
"name" => "撤回"
|
||||
],
|
||||
"abort" => [
|
||||
"name" => "弃审"
|
||||
],
|
||||
"show" => [
|
||||
"name" => "显示"
|
||||
],
|
||||
"create" => [
|
||||
"name" => "新建"
|
||||
],
|
||||
"edit" => [
|
||||
"name" => "编辑"
|
||||
],
|
||||
"print" => [
|
||||
"name" => "打印"
|
||||
],
|
||||
"delete" => [
|
||||
"name" => "删除"
|
||||
]
|
||||
]
|
||||
],
|
||||
"sampleApply" => [
|
||||
"name" => "样品申请",
|
||||
"actions" => [
|
||||
"index" => [
|
||||
"name" => "列表"
|
||||
],
|
||||
"detail" => [
|
||||
"name" => "明细列表"
|
||||
],
|
||||
"audit" => [
|
||||
"name" => "审核"
|
||||
],
|
||||
"recall" => [
|
||||
"name" => "撤回"
|
||||
],
|
||||
"abort" => [
|
||||
"name" => "弃审"
|
||||
],
|
||||
"show" => [
|
||||
"name" => "显示"
|
||||
],
|
||||
"create" => [
|
||||
"name" => "新建"
|
||||
],
|
||||
"edit" => [
|
||||
"name" => "编辑"
|
||||
],
|
||||
"close" => [
|
||||
"name" => "关闭"
|
||||
],
|
||||
"print" => [
|
||||
"name" => "打印"
|
||||
],
|
||||
"delete" => [
|
||||
"name" => "删除"
|
||||
]
|
||||
]
|
||||
],
|
||||
"plan" => [
|
||||
"name" => "生产计划",
|
||||
"actions" => [
|
||||
"index" => [
|
||||
"name" => "生产计划总表"
|
||||
],
|
||||
"produce" => [
|
||||
"name" => "生产计划(营销)"
|
||||
],
|
||||
"export_sale" => [
|
||||
"name" => "外销生产进度表"
|
||||
],
|
||||
"produce_save" => [
|
||||
"name" => "保存生产计划"
|
||||
],
|
||||
"produce_submit" => [
|
||||
"name" => "提交生产计划"
|
||||
]
|
||||
]
|
||||
],
|
||||
"type" => [
|
||||
"name" => "订单类型",
|
||||
"actions" => [
|
||||
"index" => [
|
||||
"name" => "列表"
|
||||
],
|
||||
"create" => [
|
||||
"name" => "新建"
|
||||
],
|
||||
"edit" => [
|
||||
"name" => "编辑"
|
||||
],
|
||||
"delete" => [
|
||||
"name" => "删除"
|
||||
]
|
||||
]
|
||||
],
|
||||
"logistics" => [
|
||||
"name" => "物流公司",
|
||||
"actions" => [
|
||||
"index" => [
|
||||
"name" => "列表",
|
||||
],
|
||||
"create" => [
|
||||
"name" => "创建",
|
||||
],
|
||||
"edit" => [
|
||||
"name" => "编辑",
|
||||
],
|
||||
"show" => [
|
||||
"name" => "显示",
|
||||
],
|
||||
"delete" => [
|
||||
"name" => "删除",
|
||||
],
|
||||
]
|
||||
],
|
||||
"report" => [
|
||||
"name" => "客户订单报表",
|
||||
"actions" => [
|
||||
"index" => [
|
||||
"name" => "总订单报表"
|
||||
],
|
||||
"category" => [
|
||||
"name" => "品类报表"
|
||||
],
|
||||
"single" => [
|
||||
"name" => "单品报表"
|
||||
],
|
||||
"increase" => [
|
||||
"name" => "单品涨跌报表"
|
||||
],
|
||||
"clientsort" => [
|
||||
"name" => "客户涨跌报表"
|
||||
],
|
||||
"city" => [
|
||||
"name" => "城市报表"
|
||||
],
|
||||
"citydata" => [
|
||||
"name" => "城市数据报表"
|
||||
],
|
||||
"client" => [
|
||||
"name" => "单品客户报表"
|
||||
],
|
||||
"clientdata" => [
|
||||
"name" => "单品数据客户报表"
|
||||
],
|
||||
"ranking" => [
|
||||
"name" => "客户销售排行报表"
|
||||
],
|
||||
"promotion" => [
|
||||
"name" => "促销分类报表"
|
||||
],
|
||||
"clienttype" => [
|
||||
"name" => "客户销售类型报表"
|
||||
],
|
||||
"newclient" => [
|
||||
"name" => "新客户报表"
|
||||
],
|
||||
"receivable" => [
|
||||
"name" => "客户回款报表"
|
||||
],
|
||||
"billingtype" => [
|
||||
"name" => "开票类型订单分析"
|
||||
],
|
||||
"stockmonth" => [
|
||||
"name" => "三个月未进货客户报表"
|
||||
],
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
@@ -0,0 +1,14 @@
|
||||
<div class="form-panel">
|
||||
<div class="form-panel-header">
|
||||
<div class="pull-right">>
|
||||
</div>
|
||||
{{$form['btn']}}
|
||||
</div>
|
||||
<div class="form-panel-body">
|
||||
<form class="form-horizontal form-controller" method="post" id="{{$form['table']}}" name="{{$form['table']}}">
|
||||
<div class="panel">
|
||||
{{$form['tpl']}}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,153 @@
|
||||
<div class="padder">
|
||||
|
||||
<div class="m-t-sm m-b-sm">
|
||||
<form id="search-form" name="mysearch" class="form-inline" method="get">
|
||||
@include('searchForm')
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<table id="logistics-dialog">
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-field="state" data-checkbox="true"></th>
|
||||
<th data-field="name" data-sortable="true" data-align="left">公司名称</th>
|
||||
<th data-field="legal" data-width="200" data-sortable="true" data-align="center">法人代表</th>
|
||||
<th data-field="id" data-width="60" data-sortable="true" data-align="center">ID</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
function statusFormatter(value) {
|
||||
if(value == 0) {
|
||||
return '<span style="color:red">停用</span>';
|
||||
}
|
||||
if(value == 1) {
|
||||
return '正常';
|
||||
}
|
||||
}
|
||||
|
||||
(function($) {
|
||||
|
||||
var $table = $('#logistics-dialog');
|
||||
var params = {{json_encode($query)}};
|
||||
var sid = params.prefix == 1 ? 'sid' : 'id';
|
||||
|
||||
var selected = {};
|
||||
|
||||
function getSelected()
|
||||
{
|
||||
selected = {};
|
||||
|
||||
var id = $('#'+params.id).val();
|
||||
var text = $('#'+params.id+'_text').val();
|
||||
|
||||
if(id == '') {
|
||||
return;
|
||||
}
|
||||
|
||||
id = id.split(',');
|
||||
text = text.split(',');
|
||||
for (var i = 0; i < id.length; i++) {
|
||||
selected[id[i]] = text[i];
|
||||
}
|
||||
}
|
||||
|
||||
function setSelected() {
|
||||
|
||||
var id = [];
|
||||
var text = [];
|
||||
|
||||
$.each(selected, function(k, v) {
|
||||
id.push(k);
|
||||
text.push(v);
|
||||
})
|
||||
|
||||
$('#'+params.id).val(id.join(','));
|
||||
$('#'+params.id+'_text').val(text.join(','));
|
||||
}
|
||||
|
||||
function setRow(row)
|
||||
{
|
||||
if(params.multi == 0) {
|
||||
selected = {};
|
||||
}
|
||||
selected[row[sid]] = row.name;
|
||||
setSelected();
|
||||
}
|
||||
|
||||
function unsetRow(row)
|
||||
{
|
||||
$.each(selected, function(id) {
|
||||
if(id == row[sid]) {
|
||||
delete selected[id];
|
||||
}
|
||||
});
|
||||
setSelected();
|
||||
}
|
||||
|
||||
$table.bootstrapTable({
|
||||
iconSize: 'sm',
|
||||
singleSelect: params.multi == 1 ? 0 : 1,
|
||||
clickToSelect: true,
|
||||
method: 'post',
|
||||
url: '{{url()}}',
|
||||
height: 380,
|
||||
sidePagination: 'server',
|
||||
pagination: true,
|
||||
onLoadSuccess: function(res) {
|
||||
|
||||
getSelected();
|
||||
|
||||
$.each(selected, function(j) {
|
||||
for (var i = 0; i < res.data.length; i++) {
|
||||
if(res.data[i][sid] == j) {
|
||||
$table.bootstrapTable('check', i);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
onDblClickRow: function(row) {
|
||||
setRow(row);
|
||||
$('#modal-dialog-user').dialog('close');
|
||||
},
|
||||
onCheck: function(row) {
|
||||
setRow(row);
|
||||
},
|
||||
onUncheck: function(row) {
|
||||
unsetRow(row);
|
||||
},
|
||||
onCheckAll: function(rows) {
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
setRow(rows[i]);
|
||||
}
|
||||
},
|
||||
onUncheckAll: function(rows) {
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
unsetRow(rows[i]);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var data = {{json_encode($search['forms'])}};
|
||||
var search = $('#search-form').searchForm({
|
||||
data: data,
|
||||
init: function(e) {
|
||||
var self = this;
|
||||
}
|
||||
});
|
||||
|
||||
search.find('#search-submit').on('click', function() {
|
||||
var params = search.serializeArray();
|
||||
$.map(params, function(row) {
|
||||
data[row.name] = row.value;
|
||||
});
|
||||
$table.bootstrapTable('refresh', {
|
||||
url:app.url('order/logistics/dialog', data)
|
||||
});
|
||||
return false;
|
||||
});
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,59 @@
|
||||
{{$header["js"]}}
|
||||
|
||||
<div class="panel no-border" id="{{$header['table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
action.dialogType = 'layer';
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.edit(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
// 读取数据
|
||||
options.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
});
|
||||
config.grid = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,33 @@
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<tr>
|
||||
<td colspan="4" align="left">
|
||||
<strong>尊敬的客户!请将货款汇至以下您最方便的银行账户!如有疑问请致电:028-38296666 028-36888888</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
① 收款单位: 眉山市爱客网络科技有限公司<br />
|
||||
开 户 行: 中国工商银行眉山分行营业部<br />
|
||||
帐 号: 0000 0000 0000 0000
|
||||
</td>
|
||||
<td>
|
||||
② 收款单位: 眉山市爱客网络科技有限公司<br />
|
||||
开户行: 中国农业银行眉山分行营业部<br />
|
||||
帐 号: 0000 0000 0000 0000
|
||||
</td>
|
||||
<td>
|
||||
③ 收款单位:眉山市爱客网络科技有限公司<br />
|
||||
开户行:中国建设银行眉山财富中心支行<br />
|
||||
帐 号: 0000 0000 0000 0000
|
||||
</td>
|
||||
<td>
|
||||
④ 收款单位:眉山市爱客网络科技有限公司<br />
|
||||
开户行:中国农业发展银行眉山市分行<br />
|
||||
帐 号: 0000 0000 0000 0000
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,435 @@
|
||||
<?php extract($form); ?>
|
||||
<div class="form-panel">
|
||||
<div class="form-panel-header">
|
||||
<div class="pull-right">
|
||||
</div>
|
||||
{{$btn}}
|
||||
|
||||
@if(is_customer())
|
||||
@else
|
||||
<a href="javascript:promotionDialog();" class="btn btn-sm btn-default">
|
||||
促销
|
||||
<span class="badge badge-sm bg-danger" id="promotion_count">0</span>
|
||||
</a>
|
||||
|
||||
<a href="javascript:costDialog();" class="btn btn-sm btn-default">
|
||||
费用
|
||||
<span class="badge badge-sm bg-danger" id="cost_count">0</span>
|
||||
</a>
|
||||
|
||||
<a href="javascript:orderDialog();" class="btn btn-sm btn-default">
|
||||
未发货订单
|
||||
</a>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
|
||||
<div class="form-panel-body panel-form-{{$action}}">
|
||||
<form class="form-horizontal form-controller" method="post" id="{{$table}}" name="{{$table}}">
|
||||
|
||||
{{$tpl}}
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var form_action = '{{$action}}';
|
||||
(function ($) {
|
||||
|
||||
function get_customer_id() {
|
||||
var customer_id = $('#customer_order_customer_id').val();
|
||||
return customer_id;
|
||||
}
|
||||
|
||||
$('#customer_order_tax_id').on('change', function() {
|
||||
serviceCustomerMoney(this.value);
|
||||
})
|
||||
|
||||
if (form_action == 'show') {
|
||||
$('#balance_money').text('');
|
||||
$('#lock_money').text('');
|
||||
} else {
|
||||
$('#customer_order_lock_money').val('');
|
||||
$('#customer_order_balance_money').val('');
|
||||
}
|
||||
|
||||
function serviceCustomerMoney(tax_id) {
|
||||
$.get(app.url('order/order/serviceCustomerMoney'), {tax_id: tax_id}, function (res) {
|
||||
if (form_action == 'show') {
|
||||
$('#lock_money').text(res.lockMoney);
|
||||
$('#balance_money').text(res.accMoney);
|
||||
} else {
|
||||
$('#customer_order_lock_money').val(res.lockMoney);
|
||||
$('#customer_order_balance_money').val(res.accMoney);
|
||||
}
|
||||
}, 'json');
|
||||
}
|
||||
|
||||
function get_cost_count(id) {
|
||||
$.get(app.url('promotion/promotion/useCount'), {customer_id: id}, function (res) {
|
||||
$('#promotion_count').text(res.data);
|
||||
}, 'json');
|
||||
$.get(app.url('customerCost/cost/useCount'), {customer_id: id}, function (res) {
|
||||
$('#cost_count').text(res.data);
|
||||
}, 'json');
|
||||
}
|
||||
|
||||
function get_customer_tax(customer_id, tax_id) {
|
||||
$.post(app.url('customer/tax/dialog'), {customer_id: customer_id}, function (res) {
|
||||
var html = '<option value=""> - </option>';
|
||||
$.each(res.data, function (i, row) {
|
||||
var selected = tax_id == row.id ? 'selected="selected"' : '';
|
||||
html += '<option value="' + row.id + '" ' + selected + '>' + row.name + '</option>';
|
||||
});
|
||||
$('#customer_order_tax_id').html(html);
|
||||
}, 'json');
|
||||
}
|
||||
|
||||
var grid = null;
|
||||
var customer_id = get_customer_id();
|
||||
if (customer_id > 0) {
|
||||
var tax_id = "{{$row['tax_id']}}";
|
||||
get_customer_tax(customer_id, tax_id);
|
||||
serviceCustomerMoney(tax_id);
|
||||
get_cost_count(customer_id);
|
||||
}
|
||||
|
||||
gdoo.event.set('customer_order.customer_id', {
|
||||
query(params) {
|
||||
},
|
||||
onSelect(row) {
|
||||
if (row.id) {
|
||||
$('#customer_order_type_id').val(row.type_id);
|
||||
$('#customer_order_type_id_select').val(row.type_id);
|
||||
$('#customer_region_region_id').val(row.region_id);
|
||||
$('#customer_region_region_id_text').val(row.region_id_name || '');
|
||||
$('#customer_order_warehouse_contact').val(row.warehouse_contact);
|
||||
$('#customer_order_warehouse_phone').val(row.warehouse_phone);
|
||||
$('#customer_order_warehouse_tel').val(row.warehouse_tel);
|
||||
var $option = $('<option selected>'+ row.warehouse_address + '</option>').val(row.warehouse_address);
|
||||
$('#customer_order_warehouse_address').html($option).trigger('change');
|
||||
get_cost_count(row.id);
|
||||
get_customer_tax(row.id);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 子表对话框
|
||||
gdoo.event.set('customer_order_data.product_id', {
|
||||
open(params) {
|
||||
params.url = 'product/product/serviceCustomer';
|
||||
},
|
||||
query(query) {
|
||||
var customer_id = get_customer_id();
|
||||
query.customer_id = customer_id;
|
||||
},
|
||||
onSelect(row, selected) {
|
||||
if (row.product_code == '99001') {
|
||||
row.type_id_name = '费用';
|
||||
row.type_id = 5;
|
||||
} else {
|
||||
row.type_id_name = '普通';
|
||||
row.type_id = 1;
|
||||
}
|
||||
row.price = selected.price;
|
||||
row.weight = selected.weight;
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
// 选择收货地址
|
||||
gdoo.event.set('customer_order.warehouse_address', {
|
||||
init(params) {
|
||||
params.ajax.url = app.url('customer/delivery-address/dialog');
|
||||
params.resultCache = false;
|
||||
},
|
||||
query(query) {
|
||||
query.field_0 = 'customer_delivery_address.address';
|
||||
query.customer_id = get_customer_id();
|
||||
},
|
||||
onSelect(row) {
|
||||
if (row.id) {
|
||||
if (row.id.indexOf('draft_') == 0) {
|
||||
return true;
|
||||
}
|
||||
$('#customer_order_warehouse_address').val(row.address);
|
||||
$('#customer_order_warehouse_contact').val(row.name);
|
||||
$('#customer_order_warehouse_phone').val(row.phone);
|
||||
$('#customer_order_warehouse_tel').val(row.tel);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// grid初始化事件
|
||||
gdoo.event.set('grid.customer_order_data', {
|
||||
ready(me) {
|
||||
grid = me;
|
||||
grid.dataKey = 'product_id';
|
||||
},
|
||||
onSaveBefore(rows) {
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
var row = rows[i];
|
||||
var quantity = toNumber(row.delivery_quantity);
|
||||
var price = toNumber(row.price);
|
||||
var money = toNumber(row.money).toFixed(2);
|
||||
var other_money = toNumber(row.other_money).toFixed(2);
|
||||
var new_money = (quantity * price).toFixed(2);
|
||||
if (quantity > 0 && price > 0) {
|
||||
if (new_money != money) {
|
||||
toastrError(row.product_name + ' 实发数量 * 单价不等于金额');
|
||||
return false;
|
||||
}
|
||||
if (other_money > 0) {
|
||||
if (other_money != money) {
|
||||
toastrError(row.product_name + '其他金额不等于金额');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
editable: {
|
||||
product_name(params) {
|
||||
var data = params.data;
|
||||
// 费用不能编辑产品
|
||||
if (data.product_code == '99001') {
|
||||
return false;
|
||||
}
|
||||
var customer_id = get_customer_id();
|
||||
if (customer_id.trim() == '') {
|
||||
toastrError('请先选择客户');
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
price(params) {
|
||||
var type_id = $('#customer_order_type_id').val();
|
||||
if (type_id == 2) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
money(params) {
|
||||
var data = params.data;
|
||||
if (data.product_code == '99001') {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
quantity(params) {
|
||||
var data = params.data;
|
||||
if (data.type_id == 1 || data.type_id == 2) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
delivery_quantity(params) {
|
||||
if (params.colDef._editable) {
|
||||
var data = params.data;
|
||||
if (data.type_id == 1 || data.type_id == 2) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var promotionDialog = function () {
|
||||
var customer_id = get_customer_id();
|
||||
if (customer_id.trim() == '') {
|
||||
toastrError('请先选择客户');
|
||||
return;
|
||||
}
|
||||
|
||||
var buttons = [{
|
||||
text: "取消",
|
||||
'class': "btn-default",
|
||||
click: function () {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
}];
|
||||
|
||||
if (form_action == 'show') {
|
||||
} else {
|
||||
buttons.push({
|
||||
text: '提交',
|
||||
'class': 'btn-info',
|
||||
click: function () {
|
||||
var masters = $ref_promotion.api.getSelectedRows();
|
||||
var master = masters[0];
|
||||
if (master['status'] == 1) {
|
||||
var rows = $ref_promotion_data.api.getSelectedRows();
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
var row = rows[i];
|
||||
row.quantity = row.wsy_num;
|
||||
row.delivery_quantity = row.quantity;
|
||||
row.total_weight = row.quantity * row.weight;
|
||||
row.other_money = row.money;
|
||||
grid.api.memoryStore.create(row);
|
||||
}
|
||||
grid.generatePinnedBottomData();
|
||||
$(this).dialog('close');
|
||||
} else {
|
||||
toastrError('促销申请未生效无法使用。');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$.dialog({
|
||||
title: '促销列表',
|
||||
url: '{{url("promotion/promotion/serviceSaleOrder")}}?customer_id=' + customer_id,
|
||||
dialogClass: 'modal-lg',
|
||||
buttons: buttons
|
||||
});
|
||||
}
|
||||
|
||||
var costDialog = function () {
|
||||
var customer_id = get_customer_id();
|
||||
if (customer_id.trim() == '') {
|
||||
toastrError('请先选择客户');
|
||||
return;
|
||||
}
|
||||
|
||||
var buttons = [{
|
||||
text: "取消",
|
||||
'class': "btn-default",
|
||||
click: function () {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
}];
|
||||
|
||||
if (form_action == 'show') {
|
||||
} else {
|
||||
buttons.push({
|
||||
text: "提交",
|
||||
'class': "btn-info",
|
||||
click: function () {
|
||||
var cost_money = 0, product_money = 0;
|
||||
grid.api.forEachNode(function(node) {
|
||||
var money = parseFloat(node.data.money) || 0;
|
||||
// 费用是负数
|
||||
if (node.data.money < 0) {
|
||||
cost_money += money;
|
||||
} else {
|
||||
product_money += money;
|
||||
}
|
||||
});
|
||||
|
||||
// 费用必须低于订单金额的20%
|
||||
cost_money = cost_money + (product_money * 0.2);
|
||||
var rows = $ref_customer_cost.api.getSelectedRows();
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
var row = rows[i];
|
||||
// 费比大于0
|
||||
if (cost_money > 0) {
|
||||
// 剩余的费比小于费用
|
||||
if (cost_money < row.money) {
|
||||
// 计算剩余的费比可以使用多少费用
|
||||
var money = row.money - (row.money - cost_money);
|
||||
} else {
|
||||
var money = row.money;
|
||||
}
|
||||
// 减少费比
|
||||
cost_money = cost_money - row.money;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
// 金额保留小数两位
|
||||
money = Math.round(money * 100)/100;
|
||||
row.money = 0 - money;
|
||||
grid.api.memoryStore.create(row);
|
||||
}
|
||||
grid.generatePinnedBottomData();
|
||||
$(this).dialog('close');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$.dialog({
|
||||
title: '费用列表',
|
||||
url: '{{url("customerCost/cost/serviceSaleOrder")}}?customer_id=' + customer_id,
|
||||
dialogClass: 'modal-lg',
|
||||
buttons: buttons
|
||||
});
|
||||
}
|
||||
|
||||
var orderDialog = function () {
|
||||
var buttons = [{
|
||||
text: "取消",
|
||||
'class': "btn-default",
|
||||
click: function () {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
}];
|
||||
|
||||
if (form_action == 'show') {
|
||||
var customer_name = "{{$row['customer']['name']}}";
|
||||
} else {
|
||||
var customer_name = $('#customer_order_customer_id_text').val();
|
||||
buttons.push({
|
||||
text: '提交',
|
||||
'class': 'btn-info',
|
||||
click: function () {
|
||||
var row = $ref_customer_order.api.getSelectedRows()[0];
|
||||
if (row) {
|
||||
$('#customer_order_customer_id').val(row.customer_id);
|
||||
$('#customer_order_customer_id_text').val(row.customer_name);
|
||||
|
||||
$('#customer_order_tax_type').val(row.tax_type);
|
||||
get_customer_tax(row.customer_id, row.tax_id);
|
||||
|
||||
$('#customer_order_type_id').val(row.type_id);
|
||||
$('#customer_order_type_id_select').val(row.type_id);
|
||||
|
||||
$('#customer_order_found_contact').val(row.found_contact);
|
||||
$('#customer_order_found_phone').val(row.found_phone);
|
||||
|
||||
$('#customer_order_remark').val(row.remark);
|
||||
|
||||
$('#customer_order_warehouse_contact').val(row.warehouse_contact);
|
||||
$('#customer_order_warehouse_phone').val(row.warehouse_phone);
|
||||
$('#customer_order_warehouse_tel').val(row.warehouse_tel);
|
||||
var $option = $('<option selected>'+ row.warehouse_address + '</option>').val(row.warehouse_address);
|
||||
$('#customer_order_warehouse_address').html($option).trigger('change');
|
||||
}
|
||||
|
||||
var rows = $ref_customer_order_data.api.getSelectedRows();
|
||||
grid.api.setRowData([]);
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
var row = rows[i];
|
||||
row.ref_sale_id = row.sale_id;
|
||||
row.ref_sale_data_id = row.id;
|
||||
row.quantity = row.wf_num;
|
||||
row.delivery_quantity = row.wf_num;
|
||||
grid.api.memoryStore.create(row);
|
||||
}
|
||||
grid.generatePinnedBottomData();
|
||||
$(this).dialog('close');
|
||||
}
|
||||
});
|
||||
}
|
||||
$.dialog({
|
||||
title: '未发货订单',
|
||||
url: '{{url("order/order/serviceNotDelivery")}}?field_0=customer.name&condition_0=like&search_0=' + customer_name,
|
||||
dialogClass: 'modal-lg',
|
||||
buttons: buttons
|
||||
});
|
||||
}
|
||||
|
||||
window.orderDialog = orderDialog;
|
||||
window.costDialog = costDialog;
|
||||
window.promotionDialog = promotionDialog;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@@ -0,0 +1,153 @@
|
||||
{{$header["js"]}}
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
action.dialogType = 'layer';
|
||||
|
||||
action.logisticsPlan = function() {
|
||||
var me = this;
|
||||
var grid = config.grid;
|
||||
var rows = grid.api.getSelectedRows();
|
||||
if (rows.length > 0) {
|
||||
var ids = [];
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
ids.push(rows[i].master_id);
|
||||
}
|
||||
formDialog({
|
||||
title: '修改物流信息',
|
||||
url: app.url('order/order/logisticsPlan', {ids: ids.join(',')}),
|
||||
storeUrl: app.url('order/order/logisticsPlan'),
|
||||
id: 'logistics_plan',
|
||||
dialogClass:'modal-md',
|
||||
success: function(res) {
|
||||
grid.remoteData();
|
||||
toastrSuccess(res.data);
|
||||
$(this).dialog("close");
|
||||
},
|
||||
error: function(res) {
|
||||
toastrError(res.data);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
toastrError('至少选择一条数据。');
|
||||
}
|
||||
}
|
||||
|
||||
action.deliveryEdit = function() {
|
||||
var me = this;
|
||||
var grid = config.grid;
|
||||
var rows = grid.api.getSelectedRows();
|
||||
if (rows.length == 1) {
|
||||
var row = rows[0];
|
||||
formDialog({
|
||||
title: '修改运费支付方式',
|
||||
url: app.url('order/order/deliveryEdit', {id: row.master_id}),
|
||||
storeUrl: app.url('order/order/deliveryEdit'),
|
||||
id: 'delivery_edit',
|
||||
dialogClass:'modal-md',
|
||||
success: function(res) {
|
||||
toastrSuccess(res.data);
|
||||
$(this).dialog("close");
|
||||
window.open(app.url('order/order/print', {id: row.master_id, template_id: 121}), "_blank");
|
||||
},
|
||||
error: function(res) {
|
||||
toastrError(res.data);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
toastrError('只能选择一条数据。');
|
||||
}
|
||||
}
|
||||
|
||||
action.deliveryPlan = function() {
|
||||
var me = this;
|
||||
var grid = config.grid;
|
||||
var rows = grid.api.getSelectedRows();
|
||||
if (rows.length == 1) {
|
||||
var data = rows[0];
|
||||
var url = app.url('order/order/deliveryPlan', {id: data.master_id, date: data.master_plan_delivery_dt});
|
||||
formDialog({
|
||||
title: '修改计划发货日期',
|
||||
url: url,
|
||||
storeUrl: url,
|
||||
id: me.table,
|
||||
dialogClass: 'modal-lg',
|
||||
onSubmit: function() {
|
||||
var me = this;
|
||||
var form = $('#plan_delivery_date').serialize();
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
$.post(app.url('order/order/deliveryPlanDate'), form, function(res) {
|
||||
if (res.status) {
|
||||
grid.remoteData();
|
||||
$(me).dialog('close');
|
||||
toastrSuccess(res.data);
|
||||
} else {
|
||||
toastrError(res.data);
|
||||
}
|
||||
}).complete(function() {
|
||||
layer.close(loading);
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
toastrError('只能修改一条数据。');
|
||||
}
|
||||
}
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.autoColumnsToFit = false;
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.show(params.data, 'order_order_show_delivery', '销售订单(发货)');
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
// 读取数据
|
||||
options.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
});
|
||||
config.grid = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,9 @@
|
||||
<div class="wrapper-xs">
|
||||
<form class="form-horizontal" id="delivery_edit" method="post">
|
||||
<div class="form-group m-b-none">
|
||||
<div class="col-sm-3 control-label">运费付款方式</div>
|
||||
<div class="col-sm-9 control-text"><input type="text" class="form-control input-sm" autocomplete="off" value="{{$gets['freight_pay_text']}}" id="freight_pay_text" name="delivery[freight_pay_text]"></div>
|
||||
</div>
|
||||
<input name="id" value="{{$gets['id']}}" type="hidden">
|
||||
</form>
|
||||
</div>
|
||||
@@ -0,0 +1,62 @@
|
||||
<div class="wrapper-xs">
|
||||
<form class="search-inline-form form-inline" id="plan_delivery_date" method="get">
|
||||
计划日期 <input name="date" id="plan_delivery_dt" value="{{$query['date']}}" type="text" autocomplete="off" data-toggle="date" class="form-control input-sm">
|
||||
<input name="id" value="{{$query['id']}}" type="hidden">
|
||||
<a id="plan_delivery_submit" class="btn btn-sm btn-default">
|
||||
<i class="fa fa-search"></i> 筛选</a>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id="dialog-delivery_plan" class="ag-theme-balham" style="width:100%;height:380px;"></div>
|
||||
|
||||
<script>
|
||||
|
||||
(function ($) {
|
||||
var params = JSON.parse('{{json_encode($query)}}');
|
||||
var multiple = params.multi == 0 ? false : true;
|
||||
var grid = new agGridOptions();
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = params;
|
||||
grid.rowSelection = multiple ? 'multiple' : 'single';
|
||||
grid.suppressRowClickSelection = true;
|
||||
grid.defaultColDef.sortable = false;
|
||||
grid.defaultColDef.filter = false;
|
||||
grid.defaultColDef.suppressMenu = true;
|
||||
grid.defaultColDef.suppressNavigable = true;
|
||||
grid.columnDefs = [
|
||||
{cellClass:'text-left', field: 'product_name', headerName: '产品名称', minWidth: 140},
|
||||
{cellClass:'text-center', field: 'product_spec', headerName: '规格型号', width: 140},
|
||||
{cellClass:'text-right', type: 'number', field: 'num', headerName: '订单数量', width: 120},
|
||||
{cellClass:'text-right', type: 'number', field: 'product_num', headerName: '订单可用量', width: 120},
|
||||
{cellClass:'text-right', type: 'number', field: 'need_num', headerName: '差额', width: 100},
|
||||
{cellClass:'text-right', type: 'number', field: 'day1', headerName: '今天生产', width: 120},
|
||||
{cellClass:'text-right', type: 'number', field: 'day2', headerName: '明天生产', width: 120},
|
||||
{cellClass:'text-right', type: 'number', field: 'day3', headerName: '后天生产', width: 120}
|
||||
];
|
||||
|
||||
grid.defaultColDef.cellStyle = function(params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
var style = {};
|
||||
var value = params.value || 0;
|
||||
var field = params.colDef.field;
|
||||
if (field == "NeedNum" && value > 0) {
|
||||
style = {'color':'red'};
|
||||
}
|
||||
return style;
|
||||
};
|
||||
|
||||
var gridDiv = document.querySelector("#dialog-delivery_plan");
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData();
|
||||
|
||||
$('#plan_delivery_submit').on('click', function() {
|
||||
var v = $('#plan_delivery_dt').val();
|
||||
grid.remoteData({date: v});
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,62 @@
|
||||
{{$header["js"]}}
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
(function ($) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
action.dialogType = 'layer';
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.autoColumnsToFit = false;
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.show(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
// 读取数据
|
||||
options.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
});
|
||||
config.grid = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,125 @@
|
||||
<div class="wrapper-xs">
|
||||
<form id="dialog-{{$search['query']['id']}}-search-form" class="form-inline" method="get">
|
||||
@include('searchForm3')
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id="dialog-{{$search['query']['id']}}" class="ag-theme-balham" style="width:100%;height:380px;"></div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
var search = JSON.parse('{{json_encode($search)}}');
|
||||
var params = search.query;
|
||||
|
||||
var option = gdoo.formKey(params);
|
||||
var event = gdoo.event.get(option.key);
|
||||
event.trigger('query', params);
|
||||
|
||||
var sid = params.prefix == 1 ? 'sid' : 'id';
|
||||
var multiple = params.multi == 0 ? false : true;
|
||||
var grid = new agGridOptions();
|
||||
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = params;
|
||||
grid.rowSelection = multiple ? 'multiple' : 'single';
|
||||
grid.suppressRowClickSelection = true;
|
||||
grid.columnDefs = [
|
||||
{suppressMenu: true, cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: multiple, suppressSizeToFit: true, sortable: false, width: 40},
|
||||
{suppressMenu: true, cellClass:'text-center', field: 'sn', headerName: '单据编号', minWidth: 160},
|
||||
{suppressMenu: true, cellClass:'text-center', sortable: false, field: 'created_at', headerName: '单据日期', width: 140},
|
||||
{suppressMenu: true, cellClass:'text-center', field: 'customer_code', headerName: '客户编号', width: 120},
|
||||
{suppressMenu: true, cellClass:'text-left', field: 'customer_id_name', headerName: '客户名称', width: 220},
|
||||
{suppressMenu: true, cellClass:'text-right', field: 'total_money', headerName: '订单金额', width: 120},
|
||||
{suppressMenu: true, cellClass:'text-center', field: 'id', headerName: 'ID', width: 80}
|
||||
];
|
||||
|
||||
grid.onRowClicked = function(row) {
|
||||
var selected = row.node.isSelected();
|
||||
if (selected === false) {
|
||||
row.node.setSelected(true, true);
|
||||
}
|
||||
};
|
||||
|
||||
grid.onRowDoubleClicked = function (row) {
|
||||
var ret = writeSelected();
|
||||
if (ret == true) {
|
||||
$('#gdoo-dialog-' + params.dialog_index).dialog('close');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 初始化选择
|
||||
*/
|
||||
function initSelected() {
|
||||
if (params.is_grid) {
|
||||
} else {
|
||||
var rows = {};
|
||||
var id = $('#'+option.id).val();
|
||||
if (id) {
|
||||
var ids = id.split(',');
|
||||
for (var i = 0; i < ids.length; i++) {
|
||||
rows[ids[i]] = ids[i];
|
||||
}
|
||||
}
|
||||
grid.api.forEachNode(function(node) {
|
||||
var key = node.data[sid];
|
||||
if (rows[key] != undefined) {
|
||||
node.setSelected(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 写入选中
|
||||
*/
|
||||
function writeSelected() {
|
||||
var rows = grid.api.getSelectedRows();
|
||||
if (params.is_grid) {
|
||||
var list = gdoo.forms[params.form_id];
|
||||
list.api.dialogSelected(params);
|
||||
} else {
|
||||
var id = [];
|
||||
var text = [];
|
||||
$.each(rows, function(k, row) {
|
||||
id.push(row[sid]);
|
||||
text.push(row.name);
|
||||
});
|
||||
$('#'+option.id).val(id.join(','));
|
||||
$('#'+option.id+'_text').val(text.join(','));
|
||||
|
||||
if (event.exist('onSelect')) {
|
||||
return event.trigger('onSelect', multiple ? rows : rows[0]);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
grid.writeSelected = writeSelected;
|
||||
gdoo.dialogs[option.id] = grid;
|
||||
|
||||
var gridDiv = document.querySelector("#dialog-{{$search['query']['id']}}");
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData({page: 1});
|
||||
|
||||
// 数据载入成功
|
||||
grid.remoteSuccessed = function() {
|
||||
initSelected();
|
||||
}
|
||||
|
||||
var data = search.forms;
|
||||
var search = $("#dialog-{{$search['query']['id']}}-search-form").searchForm({
|
||||
data: data
|
||||
});
|
||||
search.find('#search-submit').on('click', function() {
|
||||
var params = search.serializeArray();
|
||||
$.map(params, function(row) {
|
||||
data[row.name] = row.value;
|
||||
});
|
||||
grid.remoteData(data);
|
||||
return false;
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,61 @@
|
||||
{{$header["js"]}}
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
action.dialogType = 'layer';
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.autoColumnsToFit = false;
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.show(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
// 读取数据
|
||||
options.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
});
|
||||
config.grid = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,59 @@
|
||||
<div class="wrapper-xs">
|
||||
<form class="form-horizontal" id="logistics_plan" method="post">
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-3 control-label">预计发货日期</div>
|
||||
<div class="col-sm-9 control-text"><input id="plan_delivery_dt" name="delivery[plan_delivery_dt]" type="text" autocomplete="off" data-toggle="date" class="form-control input-sm"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-3 control-label">短途承运人</div>
|
||||
<div class="col-sm-9 control-text">
|
||||
<select type="text" class="input-required form-control input-sm" autocomplete="off" id="freight_short_logistics_id" name="delivery[freight_short_logistics_id]"></select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-3 control-label">短途车牌号</div>
|
||||
<div class="col-sm-9 control-text"><input type="text" class="form-control input-sm" autocomplete="off" id="freight_short_car" name="delivery[freight_short_car]"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-3 control-label">物流公司</div>
|
||||
<div class="col-sm-9 control-text">
|
||||
<select type="text" class="input-required form-control input-sm" autocomplete="off" id="freight_logistics_id" name="delivery[freight_logistics_id]"></select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group m-b-none">
|
||||
<div class="col-sm-3 control-label">物流联系电话</div>
|
||||
<div class="col-sm-9 control-text"><input type="text" class="form-control input-sm" autocomplete="off" id="freight_logistics_phone" name="delivery[freight_logistics_phone]"></div>
|
||||
</div>
|
||||
|
||||
<input name="ids" value="{{$gets['ids']}}" type="hidden">
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
// 选择短途运输人
|
||||
var short_logistics_id = $("#freight_short_logistics_id").select2Field({
|
||||
placeholder:"请选择短途承运人",width:"100%",allowClear:true,search_key:'logistics',multiple:0,ajaxParams:{select2:"true"},ajax:{url:"/order/logistics/dialog"}
|
||||
});
|
||||
short_logistics_id.on('select2:select', function(e) {
|
||||
var row = e.params.data;
|
||||
$('#freight_short_car').val(row.short_car_sn);
|
||||
});
|
||||
|
||||
// 选择物流公司
|
||||
var logistics_id = $("#freight_logistics_id").select2Field({
|
||||
placeholder:"物流公司",width:"100%",allowClear:true,search_key:'logistics',multiple:0,ajaxParams:{select2:"true"},ajax:{url:"/order/logistics/dialog"}
|
||||
});
|
||||
logistics_id.on('select2:select', function(e) {
|
||||
var row = e.params.data;
|
||||
console.log(row);
|
||||
$('#freight_logistics_phone').val(row.short_car_sn);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1 @@
|
||||
{{$form['tpl']}}
|
||||
@@ -0,0 +1,188 @@
|
||||
<table class="table no-border">
|
||||
<tr>
|
||||
<td width="70%">客户名称:{{$master['tax_name']}}</td>
|
||||
<td width="30%">发货日期:{{$master['plan_delivery_dt']}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>运费付款方式:{{$master['freight_pay_text']}}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>联 系 人:{{$master['warehouse_contact']}}</td>
|
||||
<td>收货人手机:{{$master['warehouse_phone']}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>收货地址:{{$master['warehouse_address']}}</td>
|
||||
<td>座机电话:{{$master['warehouse_tel']}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>备注:{{$master['remark']}}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br><br>
|
||||
|
||||
<table class="table no-border">
|
||||
<tr>
|
||||
<td width="34%">产品</td>
|
||||
<td width="33%">库管员:</td>
|
||||
<td width="33%">发货员:</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<?php $products = $rows->where('product_type', '>', 0); ?>
|
||||
@if($products->count())
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<td align="center">产品名称</td>
|
||||
<td align="center">规格型号</td>
|
||||
<td align="center">单位</td>
|
||||
<td align="center">数量</td>
|
||||
<td align="center">重量</td>
|
||||
<td align="center">备注</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($products as $row)
|
||||
<tr>
|
||||
<td align="center">
|
||||
{{$row['product_name']}}
|
||||
</td>
|
||||
<td align="center">
|
||||
{{$row['product_spec']}}
|
||||
</td>
|
||||
<td align="center">
|
||||
{{$row['product_unit']}}
|
||||
</td>
|
||||
<td align="right">
|
||||
@number($row['delivery_quantity'], 2)
|
||||
</td>
|
||||
<td align="right">
|
||||
@number($row['total_weight'], 2)
|
||||
</td>
|
||||
<td>
|
||||
{{$row['remark']}}
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
|
||||
<tr>
|
||||
<td align="center">合计</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td align="right">@number($products->sum('delivery_quantity'), 2)</td>
|
||||
<td align="right">@number((intval($products->sum('total_weight') / 100)) * 100, 2)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
@endif
|
||||
|
||||
<?php $materiels = $rows->where('material_type', '>', 0); ?>
|
||||
@if($materiels->count())
|
||||
<table class="table no-border">
|
||||
<tr>
|
||||
<td width="34%">物料</td>
|
||||
<td width="33%">库管员:</td>
|
||||
<td width="33%">发货员:</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<td align="center">产品名称</td>
|
||||
<td align="center">规格型号</td>
|
||||
<td align="center">单位</td>
|
||||
<td align="center">数量</td>
|
||||
<td align="center">重量</td>
|
||||
<td align="center">备注</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($materiels as $row)
|
||||
<tr>
|
||||
<td align="center">
|
||||
{{$row['product_name']}}
|
||||
</td>
|
||||
<td align="center">
|
||||
{{$row['product_spec']}}
|
||||
</td>
|
||||
<td align="center">
|
||||
{{$row['product_unit']}}
|
||||
</td>
|
||||
<td align="right">
|
||||
@number($row['delivery_quantity'], 2)
|
||||
</td>
|
||||
<td align="right">
|
||||
@number($row['total_weight'], 2)
|
||||
</td>
|
||||
<td>
|
||||
{{$row['remark']}}
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
|
||||
<tr>
|
||||
<td align="center">合计</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td align="right">@number($materiels->sum('delivery_quantity'), 2)</td>
|
||||
<td align="right">@number($materiels->sum('total_weight'), 2)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
@endif
|
||||
|
||||
<table class="table">
|
||||
<tr>
|
||||
<td width="10%">特别说明</td>
|
||||
<td width="90%">
|
||||
收货时请按我司《随货单》点货验收。货物如有缺失或者破损,请与承运方协调,采取现场赔付,如协调无法达成一致意见,请第一时间告知我司并向承运方索取有效货物异常证明(贵司收货人与承运方双方签字认可的货物运单)回单至我司028-38296888并确认收到。
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>回执单(客户填写)</td>
|
||||
<td><p style="padding-top:0;">
|
||||
1、
|
||||
年
|
||||
月
|
||||
日收到产品
|
||||
件,配件 件;
|
||||
</p>
|
||||
<p style="padding-top:0;">
|
||||
2、货品情况:<label class="checkbox-inline i-checks i-checks-sm"><i></i>完好</label>
|
||||
|
||||
<label class="checkbox-inline i-checks i-checks-sm"><i></i>缺失</label>
|
||||
|
||||
<label class="checkbox-inline i-checks i-checks-sm"><i></i>破损</label>
|
||||
</p>
|
||||
<p style="padding-top:0;">
|
||||
3、赔付与否:<label class="checkbox-inline i-checks i-checks-sm"><i></i>不需赔付</label>
|
||||
|
||||
<label class="checkbox-inline i-checks i-checks-sm"><i></i>需要赔付</label>
|
||||
</p>
|
||||
<p style="padding-top:0;">
|
||||
4、赔付要求:
|
||||
</p>
|
||||
<p style="padding-top:0;">
|
||||
您对我司此次配送服务是否满意:
|
||||
<label class="checkbox-inline i-checks i-checks-sm"><i></i>满意</label>
|
||||
|
||||
<label class="checkbox-inline i-checks i-checks-sm"><i></i>不满意</label>
|
||||
</p>
|
||||
<p style="padding-top:0;">
|
||||
贵司经办人签字(加盖贵司印章):
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">注:请您务必完整填写此表,签收时必须填写收到日期,否则视同在规定时间内已送达客户(此单回执,我司结账单以此单为准),谢谢合作!</td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -0,0 +1,122 @@
|
||||
<style>
|
||||
.modal-body { overflow:hidden; }
|
||||
</style>
|
||||
|
||||
<div class="wrapper-xs">
|
||||
<div id="dialog-customer_order-toolbar">
|
||||
<form id="dialog-customer_order-search-form" name="dialog_customer_order_search_form" class="search-inline-form form-inline" method="get">
|
||||
@include('searchForm3')
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="ref_customer_order" class="ag-theme-balham" style="width:100%;height:200px;"></div>
|
||||
|
||||
<div class="m-t-xs">
|
||||
<div id="ref_customer_order_data" class="ag-theme-balham" style="width:100%;height:240px;"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var $ref_customer_order = null;
|
||||
var $ref_customer_order_data = null;
|
||||
var params = JSON.parse('{{json_encode($query)}}');
|
||||
(function($) {
|
||||
params['master'] = 1;
|
||||
var mGridDiv = document.querySelector("#ref_customer_order");
|
||||
var mGrid = new agGridOptions();
|
||||
mGrid.remoteDataUrl = '{{url()}}';
|
||||
mGrid.remoteParams = params;
|
||||
mGrid.rowMultiSelectWithClick = false;
|
||||
mGrid.rowSelection = 'multiple';
|
||||
mGrid.autoColumnsToFit = false;
|
||||
mGrid.defaultColDef.suppressMenu = true;
|
||||
mGrid.defaultColDef.sortable = false;
|
||||
mGrid.columnDefs = [
|
||||
{cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: true, suppressSizeToFit: true, width: 40},
|
||||
{cellClass:'text-center', field: 'sn', headerName: '订单编号', minWidth: 160},
|
||||
{cellClass:'text-center', field: 'created_at', type: 'datetime', headerName: '单据日期', width: 120},
|
||||
{cellClass:'text-center', field: 'customer_code', headerName: '客户编码', width: 120},
|
||||
{field:'customer_name', headerName: '客户名称', width: 120},
|
||||
{field:'warehouse_contact', headerName: '收货人', width: 120},
|
||||
{field:'warehouse_phone', headerName: '收货人电话', width: 120},
|
||||
{field:'warehouse_address', headerName: '收货地址', width: 220},
|
||||
{cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
|
||||
];
|
||||
|
||||
mGrid.onSelectionChanged = function() {
|
||||
var rows = mGrid.api.getSelectedRows();
|
||||
var ids = [];
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
ids.push(rows[i].id);
|
||||
}
|
||||
params.ids = ids;
|
||||
sGrid.remoteData(params);
|
||||
};
|
||||
new agGrid.Grid(mGridDiv, mGrid);
|
||||
// 读取数据
|
||||
mGrid.remoteData();
|
||||
$ref_customer_order = mGrid;
|
||||
params['master'] = 0;
|
||||
var sGridDiv = document.querySelector("#ref_customer_order_data");
|
||||
var sGrid = new agGridOptions();
|
||||
sGrid.remoteDataUrl = '{{url()}}';
|
||||
sGrid.remoteParams = params;
|
||||
sGrid.rowMultiSelectWithClick = true;
|
||||
sGrid.suppressRowClickSelection = true;
|
||||
sGrid.rowSelection = 'multiple';
|
||||
sGrid.autoColumnsToFit = false;
|
||||
sGrid.defaultColDef.suppressMenu = true;
|
||||
sGrid.defaultColDef.sortable = false;
|
||||
sGrid.getRowClass = function(params) {
|
||||
var data = params.data;
|
||||
params.node.setSelected(true);
|
||||
if (data.current_stock < data.quantity) {
|
||||
return 'ag-row-warn';
|
||||
}
|
||||
};
|
||||
sGrid.columnDefs = [
|
||||
{cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: true, suppressSizeToFit: true, width: 40},
|
||||
{cellClass:'text-center', field: 'product_code', headerName: '存货编码', width: 100},
|
||||
{field: 'product_name', headerName: '商品名称', minWidth: 180},
|
||||
{cellClass:'text-center', field: 'product_spec', headerName: '商品规格', width: 140},
|
||||
{cellClass:'text-center', field: 'unit_name', headerName: '计量单位', width: 80},
|
||||
{cellClass:'text-center', field: 'current_stock', headerName: '现存量', width: 80},
|
||||
{cellClass:'text-right', field: 'total_quantity', headerName: '订单数量', width: 80},
|
||||
{cellClass:'text-right', field: 'use_quantity', headerName: '已发数量', width: 80},
|
||||
{cellClass:'text-right', field: 'quantity', headerName: '未发数量', width: 80},
|
||||
{cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
|
||||
];
|
||||
|
||||
sGrid.onRowClicked = function(row) {
|
||||
var selected = row.node.isSelected();
|
||||
if (selected === false) {
|
||||
row.node.setSelected(true, true);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(sGridDiv, sGrid);
|
||||
// 读取数据
|
||||
sGrid.remoteData();
|
||||
$ref_customer_order_data = sGrid;
|
||||
|
||||
var data = JSON.parse('{{json_encode($search["forms"])}}');
|
||||
var search = $('#dialog-customer_order-search-form').searchForm({
|
||||
data: data,
|
||||
init: function(e) {}
|
||||
});
|
||||
|
||||
search.find('#search-submit').on('click', function() {
|
||||
var query = search.serializeArray();
|
||||
$.map(query, function(row) {
|
||||
params[row.name] = row.value;
|
||||
});
|
||||
|
||||
params['master'] = 1;
|
||||
mGrid.remoteData(params);
|
||||
|
||||
params['master'] = 0;
|
||||
sGrid.remoteData(params);
|
||||
return false;
|
||||
});
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,119 @@
|
||||
<style>
|
||||
.modal-body { overflow:hidden; }
|
||||
</style>
|
||||
|
||||
<div class="wrapper-xs">
|
||||
<div id="dialog-cancel_order-toolbar">
|
||||
<form id="dialog-cancel_order-search-form" name="dialog_cancel_order_search_form" class="search-inline-form form-inline" method="get">
|
||||
@include('searchForm3')
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="ref_cancel_order" class="ag-theme-balham" style="width:100%;height:200px;"></div>
|
||||
|
||||
<div class="m-t-xs">
|
||||
<div id="ref_cancel_order_data" class="ag-theme-balham" style="width:100%;height:240px;"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var $ref_cancel_order = null;
|
||||
var $ref_cancel_order_data = null;
|
||||
var params = JSON.parse('{{json_encode($query)}}');
|
||||
(function($) {
|
||||
params['master'] = 1;
|
||||
var mGridDiv = document.querySelector("#ref_cancel_order");
|
||||
var mGrid = new agGridOptions();
|
||||
mGrid.remoteDataUrl = '{{url()}}';
|
||||
mGrid.remoteParams = params;
|
||||
mGrid.rowMultiSelectWithClick = false;
|
||||
mGrid.rowSelection = 'multiple';
|
||||
mGrid.autoColumnsToFit = false;
|
||||
mGrid.defaultColDef.suppressMenu = true;
|
||||
mGrid.defaultColDef.sortable = false;
|
||||
mGrid.columnDefs = [
|
||||
{cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: true, suppressSizeToFit: true, width: 40},
|
||||
{cellClass:'text-center', field: 'sn', headerName: '订单编号', minWidth: 160},
|
||||
{cellClass:'text-center', field: 'created_at', type: 'datetime', headerName: '单据日期', width: 120},
|
||||
{cellClass:'text-center', field: 'customer_code', headerName: '客户编码', width: 120},
|
||||
{field:'customer_name', headerName: '客户名称', width: 120},
|
||||
{field:'warehouse_contact', headerName: '收货人', width: 120},
|
||||
{field:'warehouse_phone', headerName: '收货人电话', width: 120},
|
||||
{field:'warehouse_address', headerName: '收货地址', width: 220},
|
||||
{cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
|
||||
];
|
||||
|
||||
mGrid.onSelectionChanged = function() {
|
||||
var rows = mGrid.api.getSelectedRows();
|
||||
var ids = [];
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
ids.push(rows[i].id);
|
||||
}
|
||||
params.ids = ids;
|
||||
sGrid.remoteData(params);
|
||||
};
|
||||
new agGrid.Grid(mGridDiv, mGrid);
|
||||
// 读取数据
|
||||
mGrid.remoteData();
|
||||
$ref_customer_order = mGrid;
|
||||
params['master'] = 0;
|
||||
var sGridDiv = document.querySelector("#ref_cancel_order_data");
|
||||
var sGrid = new agGridOptions();
|
||||
sGrid.remoteDataUrl = '{{url()}}';
|
||||
sGrid.remoteParams = params;
|
||||
sGrid.rowMultiSelectWithClick = true;
|
||||
sGrid.suppressRowClickSelection = true;
|
||||
sGrid.rowSelection = 'multiple';
|
||||
sGrid.autoColumnsToFit = false;
|
||||
sGrid.defaultColDef.suppressMenu = true;
|
||||
sGrid.defaultColDef.sortable = false;
|
||||
sGrid.getRowClass = function(params) {
|
||||
var data = params.data;
|
||||
params.node.setSelected(true);
|
||||
};
|
||||
sGrid.columnDefs = [
|
||||
{cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: true, suppressSizeToFit: true, width: 40},
|
||||
{cellClass:'text-center', field: 'product_code', headerName: '存货编码', width: 100},
|
||||
{field: 'product_name', headerName: '商品名称', minWidth: 180},
|
||||
{cellClass:'text-center', field: 'product_spec', headerName: '商品规格', width: 140},
|
||||
{cellClass:'text-center', field: 'product_unit', headerName: '计量单位', width: 80},
|
||||
{cellClass:'text-right', field: '_ky_num', type:'number', headerName: '现存量', width: 80},
|
||||
{cellClass:'text-right', field: 'quantity', type:'number', headerName: '订单数量', width: 80},
|
||||
{cellClass:'text-right', field: '_yf_num',type:'number', headerName: '已发数量', width: 80},
|
||||
{cellClass:'text-right', field: '_wf_num', type:'number', headerName: '未发数量', width: 80},
|
||||
{cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
|
||||
];
|
||||
|
||||
sGrid.onRowClicked = function(row) {
|
||||
var selected = row.node.isSelected();
|
||||
if (selected === false) {
|
||||
row.node.setSelected(true, true);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(sGridDiv, sGrid);
|
||||
// 读取数据
|
||||
sGrid.remoteData();
|
||||
$ref_customer_order_data = sGrid;
|
||||
|
||||
var data = JSON.parse('{{json_encode($search["forms"])}}');
|
||||
var search = $('#dialog-cancel_order-search-form').searchForm({
|
||||
data: data,
|
||||
init: function(e) {}
|
||||
});
|
||||
|
||||
search.find('#search-submit').on('click', function() {
|
||||
var query = search.serializeArray();
|
||||
$.map(query, function(row) {
|
||||
params[row.name] = row.value;
|
||||
});
|
||||
|
||||
params['master'] = 1;
|
||||
mGrid.remoteData(params);
|
||||
|
||||
params['master'] = 0;
|
||||
sGrid.remoteData(params);
|
||||
return false;
|
||||
});
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,128 @@
|
||||
<style>
|
||||
.modal-body { overflow:hidden; }
|
||||
</style>
|
||||
|
||||
<div class="wrapper-xs">
|
||||
<div id="dialog-customer_order-toolbar">
|
||||
<form id="dialog-customer_order-search-form" name="dialog_customer_order_search_form" class="search-inline-form form-inline" method="get">
|
||||
@include('searchForm3')
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="ref_customer_order" class="ag-theme-balham" style="width:100%;height:200px;"></div>
|
||||
|
||||
<div class="m-t-xs">
|
||||
<div id="ref_customer_order_data" class="ag-theme-balham" style="width:100%;height:240px;"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var $ref_customer_order = null;
|
||||
var $ref_customer_order_data = null;
|
||||
var params = JSON.parse('{{json_encode($query)}}');
|
||||
(function($) {
|
||||
params['master'] = 1;
|
||||
var mGridDiv = document.querySelector("#ref_customer_order");
|
||||
var mGrid = new agGridOptions();
|
||||
mGrid.remoteDataUrl = '{{url()}}';
|
||||
mGrid.remoteParams = params;
|
||||
mGrid.rowMultiSelectWithClick = false;
|
||||
mGrid.rowSelection = 'multiple';
|
||||
mGrid.autoColumnsToFit = false;
|
||||
mGrid.defaultColDef.suppressMenu = true;
|
||||
mGrid.defaultColDef.sortable = false;
|
||||
mGrid.columnDefs = [
|
||||
{cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: true, suppressSizeToFit: true, width: 40},
|
||||
{cellClass:'text-center', field: 'sn', headerName: '订单编号', minWidth: 160},
|
||||
{cellClass:'text-center', field: 'created_at', type: 'datetime', headerName: '单据日期', width: 120},
|
||||
{cellClass:'text-center', field: 'plan_delivery_dt', headerName: '预计发货日期', width: 120},
|
||||
{cellClass:'text-center', field: 'customer_code', headerName: '客户编码', width: 120},
|
||||
{field:'customer_name', headerName: '所属客户', width: 120},
|
||||
{field:'tax_name', headerName: '开票名称', width: 120},
|
||||
{field:'warehouse_contact', headerName: '收货人', width: 120},
|
||||
{field:'warehouse_phone', headerName: '收货人电话', width: 120},
|
||||
{field:'warehouse_address', headerName: '收货地址', width: 220},
|
||||
{cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
|
||||
];
|
||||
|
||||
mGrid.onSelectionChanged = function() {
|
||||
var rows = mGrid.api.getSelectedRows();
|
||||
var ids = [];
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
ids.push(rows[i].id);
|
||||
}
|
||||
params.ids = ids;
|
||||
sGrid.remoteData(params);
|
||||
};
|
||||
new agGrid.Grid(mGridDiv, mGrid);
|
||||
// 读取数据
|
||||
mGrid.remoteData();
|
||||
$ref_customer_order = mGrid;
|
||||
params['master'] = 0;
|
||||
var sGridDiv = document.querySelector("#ref_customer_order_data");
|
||||
var sGrid = new agGridOptions();
|
||||
sGrid.remoteDataUrl = '{{url()}}';
|
||||
sGrid.remoteParams = params;
|
||||
sGrid.rowMultiSelectWithClick = true;
|
||||
sGrid.suppressRowClickSelection = true;
|
||||
sGrid.rowSelection = 'multiple';
|
||||
sGrid.autoColumnsToFit = false;
|
||||
sGrid.defaultColDef.suppressMenu = true;
|
||||
sGrid.defaultColDef.sortable = false;
|
||||
sGrid.getRowClass = function(params) {
|
||||
var data = params.data;
|
||||
params.node.setSelected(true);
|
||||
if (data.product_code == '99001') {
|
||||
return;
|
||||
}
|
||||
if (toNumber(data.ky_num) < toNumber(data.wf_num)) {
|
||||
return 'ag-row-warn';
|
||||
}
|
||||
};
|
||||
sGrid.columnDefs = [
|
||||
{cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: true, suppressSizeToFit: true, width: 40},
|
||||
{cellClass:'text-center', type: 'sn', headerName: '序号', width: 40},
|
||||
{cellClass:'text-center', field: 'product_code', headerName: '存货编码', width: 100},
|
||||
{field: 'product_name', headerName: '商品名称', width: 180},
|
||||
{cellClass:'text-center', field: 'product_spec', headerName: '商品规格', width: 120},
|
||||
{cellClass:'text-center', field: 'product_unit', headerName: '计量单位', width: 80},
|
||||
{cellClass:'text-right', field: 'ky_num', type:'number', headerName: '现存量', width: 80, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'quantity', type:'number', headerName: '订单数量', width: 80, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'yf_num',type:'number', headerName: '已发数量', width: 80, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'wf_num', type:'number', headerName: '未发数量', width: 80, calcFooter: 'sum'},
|
||||
{cellClass:'text-center', field: 'id', headerName: 'ID', width: 70}
|
||||
];
|
||||
|
||||
sGrid.onRowClicked = function(row) {
|
||||
var selected = row.node.isSelected();
|
||||
if (selected === false) {
|
||||
row.node.setSelected(true, true);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(sGridDiv, sGrid);
|
||||
// 读取数据
|
||||
sGrid.remoteData();
|
||||
$ref_customer_order_data = sGrid;
|
||||
|
||||
var data = JSON.parse('{{json_encode($search["forms"])}}');
|
||||
var search = $('#dialog-customer_order-search-form').searchForm({
|
||||
data: data,
|
||||
init: function(e) {}
|
||||
});
|
||||
|
||||
search.find('#search-submit').on('click', function() {
|
||||
var query = search.serializeArray();
|
||||
$.map(query, function(row) {
|
||||
params[row.name] = row.value;
|
||||
});
|
||||
|
||||
params['master'] = 1;
|
||||
mGrid.remoteData(params);
|
||||
|
||||
params['master'] = 0;
|
||||
sGrid.remoteData(params);
|
||||
return false;
|
||||
});
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,117 @@
|
||||
<style>
|
||||
.modal-body { overflow:hidden; }
|
||||
</style>
|
||||
|
||||
<div class="wrapper-xs">
|
||||
<div id="dialog-customer_order-toolbar">
|
||||
<form id="dialog-customer_order-search-form" name="dialog_customer_order_search_form" class="search-inline-form form-inline" method="get">
|
||||
@include('searchForm3')
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="ref_customer_order" class="ag-theme-balham" style="width:100%;height:200px;"></div>
|
||||
|
||||
<div class="m-t-xs">
|
||||
<div id="ref_customer_order_data" class="ag-theme-balham" style="width:100%;height:240px;"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var $ref_customer_order = null;
|
||||
var $ref_customer_order_data = null;
|
||||
var params = JSON.parse('{{json_encode($query)}}');
|
||||
(function($) {
|
||||
params['master'] = 1;
|
||||
var mGridDiv = document.querySelector("#ref_customer_order");
|
||||
var mGrid = new agGridOptions();
|
||||
mGrid.remoteDataUrl = '{{url()}}';
|
||||
mGrid.remoteParams = params;
|
||||
mGrid.rowMultiSelectWithClick = false;
|
||||
mGrid.rowSelection = 'multiple';
|
||||
mGrid.autoColumnsToFit = false;
|
||||
mGrid.defaultColDef.suppressMenu = true;
|
||||
mGrid.defaultColDef.sortable = false;
|
||||
mGrid.columnDefs = [
|
||||
{cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: true, suppressSizeToFit: true, width: 40},
|
||||
{cellClass:'text-center', field: 'sn', headerName: '订单编号', minWidth: 160},
|
||||
{cellClass:'text-center', field: 'created_at', type: 'datetime', headerName: '单据日期', width: 120},
|
||||
{cellClass:'text-center', field: 'customer_code', headerName: '客户编码', width: 120},
|
||||
{field:'customer_name', headerName: '客户名称', width: 120},
|
||||
{field:'warehouse_contact', headerName: '收货人', width: 120},
|
||||
{field:'warehouse_phone', headerName: '收货人电话', width: 120},
|
||||
{field:'warehouse_address', headerName: '收货地址', width: 220},
|
||||
{cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
|
||||
];
|
||||
|
||||
mGrid.onSelectionChanged = function() {
|
||||
var rows = mGrid.api.getSelectedRows();
|
||||
var ids = [];
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
ids.push(rows[i].id);
|
||||
}
|
||||
params.ids = ids;
|
||||
sGrid.remoteData(params);
|
||||
};
|
||||
new agGrid.Grid(mGridDiv, mGrid);
|
||||
// 读取数据
|
||||
mGrid.remoteData();
|
||||
$ref_customer_order = mGrid;
|
||||
params['master'] = 0;
|
||||
var sGridDiv = document.querySelector("#ref_customer_order_data");
|
||||
var sGrid = new agGridOptions();
|
||||
sGrid.remoteDataUrl = '{{url()}}';
|
||||
sGrid.remoteParams = params;
|
||||
sGrid.rowMultiSelectWithClick = true;
|
||||
sGrid.suppressRowClickSelection = true;
|
||||
sGrid.rowSelection = 'multiple';
|
||||
sGrid.autoColumnsToFit = false;
|
||||
sGrid.defaultColDef.suppressMenu = true;
|
||||
sGrid.defaultColDef.sortable = false;
|
||||
sGrid.getRowClass = function(params) {
|
||||
params.node.setSelected(true);
|
||||
};
|
||||
sGrid.columnDefs = [
|
||||
{cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: true, suppressSizeToFit: true, width: 40},
|
||||
{cellClass:'text-center', field: 'product_code', headerName: '存货编码', width: 100},
|
||||
{field: 'product_name', headerName: '商品名称', minWidth: 180},
|
||||
{cellClass:'text-center', field: 'product_spec', headerName: '商品规格', width: 140},
|
||||
{cellClass:'text-center', field: 'product_unit', headerName: '计量单位', width: 80},
|
||||
{cellClass:'text-right', field: 'num', type:'number', headerName: '订单数量', width: 80},
|
||||
{cellClass:'text-right', field: 'yf_num',type:'number', headerName: '已发数量', width: 80},
|
||||
{cellClass:'text-right', field: 'wf_num', type:'number', headerName: '未发数量', width: 80},
|
||||
{cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
|
||||
];
|
||||
|
||||
sGrid.onRowClicked = function(row) {
|
||||
var selected = row.node.isSelected();
|
||||
if (selected === false) {
|
||||
row.node.setSelected(true, true);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(sGridDiv, sGrid);
|
||||
// 读取数据
|
||||
sGrid.remoteData();
|
||||
$ref_customer_order_data = sGrid;
|
||||
|
||||
var data = JSON.parse('{{json_encode($search["forms"])}}');
|
||||
var search = $('#dialog-customer_order-search-form').searchForm({
|
||||
data: data,
|
||||
init: function(e) {}
|
||||
});
|
||||
|
||||
search.find('#search-submit').on('click', function() {
|
||||
var query = search.serializeArray();
|
||||
$.map(query, function(row) {
|
||||
params[row.name] = row.value;
|
||||
});
|
||||
|
||||
params['master'] = 1;
|
||||
mGrid.remoteData(params);
|
||||
|
||||
params['master'] = 0;
|
||||
sGrid.remoteData(params);
|
||||
return false;
|
||||
});
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,174 @@
|
||||
<div class="wrapper-xs">
|
||||
<form id="dialog-{{$search['query']['id']}}-search-form" class="form-inline" method="get">
|
||||
@include('searchForm6')
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id="dialog-{{$search['query']['id']}}" class="ag-theme-balham" style="width:100%;height:200px;"></div>
|
||||
<div class="m-t-xs">
|
||||
<div id="promotion_customer_order_data" class="ag-theme-balham" style="width:100%;height:240px;"></div>
|
||||
</div>
|
||||
|
||||
<div class="clearfix"></div>
|
||||
|
||||
<script>
|
||||
var $promotion_customer_order = null;
|
||||
var $promotion_customer_order_data = null;
|
||||
(function ($) {
|
||||
var search = JSON.parse('{{json_encode($search)}}');
|
||||
var params = search.query;
|
||||
|
||||
var option = gdoo.formKey(params);
|
||||
var event = gdoo.event.get(option.key);
|
||||
event.trigger('query', params);
|
||||
|
||||
var sid = params.prefix == 1 ? 'sid' : 'id';
|
||||
var multiple = params.multi == 0 ? false : true;
|
||||
var mGrid = new agGridOptions();
|
||||
|
||||
params['master'] = 1;
|
||||
mGrid.remoteDataUrl = '{{url()}}';
|
||||
mGrid.remoteParams = params;
|
||||
mGrid.rowSelection = multiple ? 'multiple' : 'single';
|
||||
mGrid.suppressRowClickSelection = true;
|
||||
mGrid.columnDefs = [
|
||||
{suppressMenu: true, cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: multiple, suppressSizeToFit: true, sortable: false, width: 40},
|
||||
{suppressMenu: true, cellClass:'text-center', field: 'sn', headerName: '单据编号', minWidth: 160},
|
||||
{suppressMenu: true, cellClass:'text-center', sortable: false, type: 'datetime', field: 'created_at', headerName: '单据日期', width: 140},
|
||||
{suppressMenu: true, cellClass:'text-center', field: 'customer_code', headerName: '客户编号', width: 120},
|
||||
{suppressMenu: true, cellClass:'text-left', field: 'customer_name', headerName: '客户名称', width: 220},
|
||||
{suppressMenu: true, cellClass:'text-right', field: 'total_money', headerName: '订单金额', width: 120},
|
||||
{suppressMenu: true, cellClass:'text-center', field: 'id', headerName: 'ID', width: 80}
|
||||
];
|
||||
|
||||
mGrid.onRowClicked = function(row) {
|
||||
var selected = row.node.isSelected();
|
||||
if (selected === false) {
|
||||
row.node.setSelected(true, true);
|
||||
}
|
||||
var rows = mGrid.api.getSelectedRows();
|
||||
var ids = [];
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
ids.push(rows[i].id);
|
||||
}
|
||||
params.ids = ids;
|
||||
sGrid.remoteData(params);
|
||||
};
|
||||
|
||||
mGrid.onRowDoubleClicked = function (row) {
|
||||
var ret = writeSelected();
|
||||
if (ret == true) {
|
||||
$('#gdoo-dialog-' + params.dialog_index).dialog('close');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 初始化选择
|
||||
*/
|
||||
function initSelected() {
|
||||
if (params.is_grid) {
|
||||
} else {
|
||||
var rows = {};
|
||||
var id = $('#'+option.id).val();
|
||||
if (id) {
|
||||
var ids = id.split(',');
|
||||
for (var i = 0; i < ids.length; i++) {
|
||||
rows[ids[i]] = ids[i];
|
||||
}
|
||||
}
|
||||
mGrid.api.forEachNode(function(node) {
|
||||
var key = node.data[sid];
|
||||
if (rows[key] != undefined) {
|
||||
node.setSelected(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 写入选中
|
||||
*/
|
||||
function writeSelected() {
|
||||
var rows = mGrid.api.getSelectedRows();
|
||||
if (params.is_grid) {
|
||||
var list = gdoo.forms[params.form_id];
|
||||
list.api.dialogSelected(params);
|
||||
} else {
|
||||
var id = [];
|
||||
var text = [];
|
||||
$.each(rows, function(k, row) {
|
||||
id.push(row[sid]);
|
||||
text.push(row.name);
|
||||
});
|
||||
$('#'+option.id).val(id.join(','));
|
||||
$('#'+option.id+'_text').val(text.join(','));
|
||||
|
||||
if (event.exist('onSelect')) {
|
||||
return event.trigger('onSelect', multiple ? rows : rows[0]);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
mGrid.writeSelected = writeSelected;
|
||||
gdoo.dialogs[option.id] = mGrid;
|
||||
|
||||
var gridDiv = document.querySelector("#dialog-{{$search['query']['id']}}");
|
||||
new agGrid.Grid(gridDiv, mGrid);
|
||||
// 读取数据
|
||||
mGrid.remoteData();
|
||||
// 数据载入成功
|
||||
mGrid.remoteSuccessed = function() {
|
||||
initSelected();
|
||||
}
|
||||
|
||||
params['master'] = 0;
|
||||
var sGridDiv = document.querySelector("#promotion_customer_order_data");
|
||||
var sGrid = new agGridOptions();
|
||||
sGrid.remoteDataUrl = '{{url()}}';
|
||||
sGrid.remoteParams = params;
|
||||
sGrid.rowMultiSelectWithClick = true;
|
||||
sGrid.rowSelection = 'multiple';
|
||||
sGrid.autoColumnsToFit = false;
|
||||
sGrid.defaultColDef.suppressMenu = true;
|
||||
sGrid.defaultColDef.sortable = false;
|
||||
sGrid.getRowClass = function(params) {
|
||||
var data = params.data;
|
||||
params.node.setSelected(true);
|
||||
};
|
||||
sGrid.columnDefs = [
|
||||
{cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: true, suppressSizeToFit: true, width: 40},
|
||||
{cellClass:'text-center', field: 'product_code', headerName: '存货编码', width: 100},
|
||||
{field: 'product_name', headerName: '商品名称', minWidth: 180},
|
||||
{cellClass:'text-center', field: 'product_spec', headerName: '商品规格', width: 140},
|
||||
{cellClass:'text-center', field: 'product_barcode', headerName: '商品条码', width: 100},
|
||||
{cellClass:'text-center', field: 'product_unit', headerName: '计量单位', width: 80},
|
||||
{cellClass:'text-right', field: 'quantity', headerName: '数量', width: 80},
|
||||
{cellClass:'text-right', field: 'price', headerName: '单价(元)', width: 80},
|
||||
{cellClass:'text-right', field: 'money', headerName: '金额(元)', width: 80},
|
||||
{cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
|
||||
];
|
||||
new agGrid.Grid(sGridDiv, sGrid);
|
||||
// 读取数据
|
||||
sGrid.remoteData();
|
||||
$promotion_customer_order_data = sGrid;
|
||||
|
||||
var data = search.forms;
|
||||
var search = $("#dialog-{{$search['query']['id']}}-search-form").searchForm({
|
||||
data: data,
|
||||
init: function(e) {}
|
||||
});
|
||||
search.find('#search-submit').on('click', function() {
|
||||
var query = search.serializeArray();
|
||||
$.map(query, function(row) {
|
||||
params[row.name] = row.value;
|
||||
});
|
||||
params['master'] = 1;
|
||||
mGrid.remoteData(params);
|
||||
|
||||
params['master'] = 0;
|
||||
sGrid.remoteData(params);
|
||||
return false;
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,110 @@
|
||||
<div class="panel b-a" id="{{$search['table']}}-controller">
|
||||
|
||||
<div class="wrapper-sm">
|
||||
@include('searchForm7')
|
||||
<a class="btn btn-sm btn-default" data-toggle="{{$search['table']}}" data-action="filter"><i class="fa fa-search"></i> 筛选</a>
|
||||
<a class="btn btn-sm btn-default" data-toggle="{{$search['table']}}" data-action="export"><i class="fa fa-share"></i> 导出</a>
|
||||
</div>
|
||||
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$search['table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
var searchOpen = false;
|
||||
var table = '{{$search["table"]}}';
|
||||
var search = JSON.parse('{{json_encode($search)}}');
|
||||
var columns = [];
|
||||
var params = search.query;
|
||||
var grid = new agGridOptions();
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = params;
|
||||
|
||||
grid.defaultColDef.suppressMenu = true;
|
||||
grid.defaultColDef.filter = false;
|
||||
grid.singleClickEdit = true;
|
||||
grid.rowSelection = 'single';
|
||||
grid.suppressCellSelection = false;
|
||||
grid.columnDefs = [
|
||||
{cellClass:'text-center', field: 'sn', type: 'sn', headerName: '序号', width: 50},
|
||||
{cellClass:'text-center', field: 'status', headerName: '状态', width: 100},
|
||||
{cellClass:'text-center', field: 'sn', headerName: '订单编码', width: 100},
|
||||
{cellClass:'text-center', field: 'created_dt', headerName: '订单日期', width: 80},
|
||||
{cellClass:'text-center', field: 'customer_name', headerName: '客户名称', width: 160},
|
||||
{cellClass:'text-center', field: 'product_code', headerName: '产品编码', width: 80},
|
||||
{cellClass:'text-left', field: 'product_name', headerName: '产品名称', width: 160},
|
||||
{cellClass:'text-center', field: 'product_spec', headerName: '规格型号', width: 100},
|
||||
{cellClass:'text-center', field: 'batch_sn', headerName: '生产批号', width: 100},
|
||||
|
||||
{cellClass:'text-right', field: 'quantity', headerName: '订单数量', width: 70, type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'plan_num', headerName: '已生产数量', width: 70,type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'storage_num', headerName: '已入库数量', width: 70, type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
];
|
||||
|
||||
var gridDiv = document.querySelector("#{{$search['table']}}-grid");
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
gridDiv.style.height = getPanelHeight(12);
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData();
|
||||
|
||||
var search = $('#' + table + '-search-form-advanced').searchForm({
|
||||
data: search.forms,
|
||||
advanced: true,
|
||||
});
|
||||
|
||||
gdoo.grids[table] = {grid: grid};
|
||||
|
||||
var action = new gridAction(table, '外销生产进度表');
|
||||
var panel = $('#' + table + '-controller');
|
||||
|
||||
// 过滤数据
|
||||
var searchBox = function() {
|
||||
$(search).dialog({
|
||||
title: '筛选条件',
|
||||
modalClass: 'no-padder',
|
||||
buttons: [{
|
||||
text: "取消",
|
||||
'class': "btn-default",
|
||||
click: function() {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
},{
|
||||
text: "确定",
|
||||
'class': "btn-info",
|
||||
click: function() {
|
||||
var data = search.serializeArray();
|
||||
var params = {};
|
||||
search.queryType = 'advanced';
|
||||
$.map(data, function(row) {
|
||||
params[row.name] = row.value;
|
||||
});
|
||||
params['filter'] = 1;
|
||||
grid.remoteData(params);
|
||||
$(this).dialog("close");
|
||||
return false;
|
||||
}
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
panel.on('click', '[data-toggle="' + table + '"]', function() {
|
||||
var data = $(this).data();
|
||||
if (data.action == 'filter') {
|
||||
searchBox();
|
||||
}
|
||||
|
||||
if (data.action == 'export') {
|
||||
action.export(data, '外销生产进度表');
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if (searchOpen == false) {
|
||||
searchBox();
|
||||
}
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,108 @@
|
||||
<div class="panel b-a" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
var search = JSON.parse('{{json_encode($header["search_form"])}}');
|
||||
var columns = [];
|
||||
var params = search.query;
|
||||
var grid = new agGridOptions();
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = params;
|
||||
|
||||
grid.defaultColDef.suppressMenu = true;
|
||||
//grid.defaultColDef.sortable = false;
|
||||
grid.defaultColDef.filter = false;
|
||||
// grid.autoColumnsToFit = false;
|
||||
grid.singleClickEdit = true;
|
||||
grid.rowSelection = 'single';
|
||||
grid.suppressCellSelection = false;
|
||||
grid.columnDefs = [
|
||||
{cellClass:'text-center', field: 'sn', type: 'sn', headerName: '序号', width: 50},
|
||||
{cellClass:'text-center', field: 'product_code', headerName: '产品编码', width: 100},
|
||||
{cellClass:'text-left', field: 'product_name_spec', headerName: '产品名称', width: 160},
|
||||
{cellClass:'text-center', field: 'ProductBatsch', headerName: '生产批次', width: 100},
|
||||
{cellClass:'text-right', field: 'kc_num', headerName: '当前库存', width: 70, type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'dphz_num', headerName: '单品汇总', width: 70,type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'xqzc_num', headerName: '需求总差', width: 70, type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'yhk_num', headerName: '已回款数', width: 70, type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'kfzc_num', headerName: '打款差额', width: 70, type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'kfjh_num', headerName: '计划差额', width: 70, type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'waitin_num', headerName: '待入库', width: 60, type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'syfh_num', headerName: '上月发货量', width: 70, type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
];
|
||||
|
||||
grid.defaultColDef.cellStyle = function(params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
var style = {};
|
||||
var value = params.value || 0;
|
||||
var field = params.colDef.field;
|
||||
if ((field.indexOf('produce_plan_num') === 0 || field == "xqzc_num" || field == "kfzc_num" || field == "kfjh_num") && value > 0) {
|
||||
style = {'color':'red'};
|
||||
}
|
||||
return style;
|
||||
};
|
||||
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
gridDiv.style.height = getPanelHeight(12);
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData();
|
||||
|
||||
var search_advanced = $('#' + table + '-search-form-advanced').searchForm({
|
||||
data: search.forms,
|
||||
advanced: true,
|
||||
});
|
||||
|
||||
gdoo.grids[table] = {grid: grid};
|
||||
|
||||
var action = new gridAction(table, '生产计划总表');
|
||||
var panel = $('#' + table + '-controller');
|
||||
|
||||
panel.on('click', '[data-toggle="' + table + '"]', function() {
|
||||
var data = $(this).data();
|
||||
if (data.action == 'filter') {
|
||||
// 过滤数据
|
||||
$('#' + table + '-search-form-advanced').dialog({
|
||||
title: '条件筛选',
|
||||
modalClass: 'no-padder',
|
||||
buttons: [{
|
||||
text: "取消",
|
||||
'class': "btn-default",
|
||||
click: function() {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
},{
|
||||
text: "确定",
|
||||
'class': "btn-info",
|
||||
click: function() {
|
||||
var query = search_advanced.serializeArray();
|
||||
params = {};
|
||||
$.map(query, function(row) {
|
||||
params[row.name] = row.value;
|
||||
});
|
||||
grid.remoteData(params);
|
||||
$(this).dialog("close");
|
||||
return false;
|
||||
}
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
if (data.action == 'export') {
|
||||
action.export(data, '生产计划总表');
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,219 @@
|
||||
<div class="panel b-a" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
var search = JSON.parse('{{json_encode($header["search_form"])}}');
|
||||
var columns = [];
|
||||
var params = search.query;
|
||||
var grid = new agGridOptions();
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = params;
|
||||
|
||||
grid.defaultColDef.suppressMenu = true;
|
||||
grid.defaultColDef.sortable = false;
|
||||
grid.defaultColDef.filter = false;
|
||||
grid.autoColumnsToFit = false;
|
||||
grid.singleClickEdit = true;
|
||||
grid.rowSelection = 'single';
|
||||
grid.suppressCellSelection = false;
|
||||
grid.columnDefs = [];
|
||||
|
||||
grid.defaultColDef.cellStyle = function(params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
var style = {};
|
||||
var value = params.value || 0;
|
||||
var field = params.colDef.field;
|
||||
if ((field.indexOf('produce_plan_num') === 0 || field == "xqzc_num" || field == "kfzc_num" || field == "kfjh_num") && value > 0) {
|
||||
style = {'color':'red'};
|
||||
}
|
||||
return style;
|
||||
};
|
||||
|
||||
grid.components['wfhjh'] = function(params) {
|
||||
if (params.node.rowPinned) {
|
||||
return params.value;
|
||||
}
|
||||
if (params.value) {
|
||||
let v = parseFloat(params.value);
|
||||
return '<a href="javascript:;" data-toggle="produce_data" data-id="'+ params.data.id + '" data-field="'+ params.colDef.field +'" data-product_id="'+ params.data.product_id +'" data-action="wfhjh">'+ (v > 0 ? v : '') +'</a>';
|
||||
}
|
||||
return params.value;
|
||||
};
|
||||
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
gridDiv.style.height = getPanelHeight(12);
|
||||
|
||||
function setColumns(res) {
|
||||
var columnDefs = [
|
||||
{cellClass:'text-center', field: 'sn', type: 'sn', headerName: '序号', width: 50, pinned:'left'},
|
||||
{cellClass:'text-left', field: 'product_name_spec', headerName: '产品名称', width: 160, pinned:'left'},
|
||||
{cellClass:'text-right', field: 'kc_num', headerName: '当前库存', width: 70, pinned:'left', type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'dphz_num', headerName: '单品汇总', width: 70, pinned:'left', type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'xqzc_num', headerName: '需求总差', width: 70, pinned:'left', type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'yhk_num', headerName: '已回款数', width: 70, pinned:'left', type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'kfzc_num', headerName: '打款差额', width: 70, pinned:'left', type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'kfjh_num', headerName: '计划差额', width: 70, pinned:'left', type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
{cellClass:'text-right', field: 'waitin_num', headerName: '待入库', width: 60, pinned:'left', type:'number', numberOptions: {places:0}, calcFooter: 'sum'},
|
||||
];
|
||||
for(var i=0; i < res.columns.length;i++) {
|
||||
columnDefs.push(res.columns[i]);
|
||||
}
|
||||
columnDefs.push({cellClass:'text-right', field: 'syfh_num', headerName: '上月发货量', width: 70, type:'number', numberOptions: {places:0}, calcFooter: 'sum'});
|
||||
columnDefs.push({cellClass:'text-center', field: 'product_code', headerName: '产品编码', width: 100});
|
||||
grid.columnDefs = columnDefs;
|
||||
grid.api.setColumnDefs(columnDefs);
|
||||
}
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData(null, function(res) {
|
||||
setColumns(res);
|
||||
});
|
||||
|
||||
var search_advanced = $('#' + table + '-search-form-advanced').searchForm({
|
||||
data: search.forms,
|
||||
advanced: true,
|
||||
});
|
||||
|
||||
gdoo.grids[table] = {grid: grid};
|
||||
|
||||
var action = new gridAction(table, '生产计划');
|
||||
var panel = $('#' + table + '-controller');
|
||||
|
||||
var producePlan = function() {
|
||||
var me = this;
|
||||
var rows = grid.api.getSelectedRows();
|
||||
if (rows.length == 1) {
|
||||
var data = rows[0];
|
||||
var url = app.url('order/plan/producePlan', {id: data.master_id, date: data.master_plan_delivery_dt});
|
||||
viewDialog({
|
||||
title: '修改计划发货日期',
|
||||
url: url,
|
||||
storeUrl: url,
|
||||
id: me.table,
|
||||
dialogClass: 'modal-md',
|
||||
onSubmit: function() {
|
||||
var me = this;
|
||||
var form = $('#plan_delivery_date').serialize();
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
$.post(app.url('order/order/deliveryPlanDate'), form, function(res) {
|
||||
if (res.status) {
|
||||
grid.remoteData();
|
||||
$(me).dialog('close');
|
||||
toastrSuccess(res.data);
|
||||
} else {
|
||||
toastrError(res.data);
|
||||
}
|
||||
}).complete(function() {
|
||||
layer.close(loading);
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
toastrError('只能修改一条数据。');
|
||||
}
|
||||
}
|
||||
|
||||
panel.on('click', '[data-toggle="' + table + '"]', function() {
|
||||
var data = $(this).data();
|
||||
|
||||
if (data.action == 'wfhjh') {
|
||||
var date = data.field.split('_num_')[1];
|
||||
var url = app.url('order/plan/producePlan', {product_id: data.product_id, date: date});
|
||||
viewDialog({
|
||||
title: '发货计划',
|
||||
url: url,
|
||||
id: table,
|
||||
dialogClass: 'modal-md'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (data.action == 'filter') {
|
||||
// 过滤数据
|
||||
$('#' + table + '-search-form-advanced').dialog({
|
||||
title: '条件筛选',
|
||||
modalClass: 'no-padder',
|
||||
buttons: [{
|
||||
text: "取消",
|
||||
'class': "btn-default",
|
||||
click: function() {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
},{
|
||||
text: "确定",
|
||||
'class': "btn-info",
|
||||
click: function() {
|
||||
var query = search_advanced.serializeArray();
|
||||
params = {};
|
||||
$.map(query, function(row) {
|
||||
params[row.name] = row.value;
|
||||
});
|
||||
grid.remoteData(params, function(res) {
|
||||
setColumns(res);
|
||||
});
|
||||
$(this).dialog("close");
|
||||
return false;
|
||||
}
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
if (data.action == 'save') {
|
||||
var rows = [];
|
||||
var date = data.id;
|
||||
var key = 'sale_plan_num_' + date;
|
||||
grid.api.stopEditing();
|
||||
grid.api.forEachLeafNode(function(node, index) {
|
||||
var row = node.data;
|
||||
if (row[key] !== null) {
|
||||
rows.push({product_id: row.id, quantity: row[key]});
|
||||
}
|
||||
});
|
||||
|
||||
if (rows.length == 0) {
|
||||
toastrError(date + '营销计划不能为空。');
|
||||
return;
|
||||
}
|
||||
$.post("{{url('produce_save')}}", {date: date, rows: rows}, function(res) {
|
||||
toastrSuccess(res.data);
|
||||
grid.remoteData(params, function(res) {
|
||||
setColumns(res);
|
||||
});
|
||||
});
|
||||
}
|
||||
if (data.action == 'submit') {
|
||||
var rows = [];
|
||||
var date = data.id;
|
||||
grid.api.stopEditing();
|
||||
$.messager.confirm('提交' + date + '营销计划', '请确认是否提交,本操作不可逆?', function(btn) {
|
||||
if (btn) {
|
||||
$.post("{{url('produce_submit')}}", {date: date}, function(res) {
|
||||
toastrSuccess(res.data);
|
||||
grid.remoteData(params, function(res) {
|
||||
setColumns(res);
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (data.action == 'export') {
|
||||
action.export(data, '生产计划(营销)');
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,44 @@
|
||||
<div id="dialog-delivery_plan" class="ag-theme-balham" style="width:100%;height:380px;"></div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
var params = JSON.parse('{{json_encode($query)}}');
|
||||
var multiple = params.multi == 0 ? false : true;
|
||||
var grid = new agGridOptions();
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = params;
|
||||
grid.rowSelection = multiple ? 'multiple' : 'single';
|
||||
grid.suppressRowClickSelection = true;
|
||||
grid.defaultColDef.sortable = false;
|
||||
grid.defaultColDef.filter = false;
|
||||
grid.defaultColDef.suppressMenu = true;
|
||||
grid.defaultColDef.suppressNavigable = true;
|
||||
grid.columnDefs = [
|
||||
{cellClass:'text-left', field: 'customer_name', headerName: '客户名称', minWidth: 140},
|
||||
{cellClass:'text-center', field: 'sn', headerName: '订单号', width: 140},
|
||||
{cellClass:'text-right', type: 'number', field: 'fhjh_num', headerName: '数量', width: 80},
|
||||
{cellClass:'text-center', field: 'pay_dt', headerName: '打款日期', width: 100},
|
||||
{cellClass:'text-left', field: 'export_country', headerName: '出口国家', width: 100},
|
||||
];
|
||||
|
||||
grid.defaultColDef.cellStyle1 = function(params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
var style = {};
|
||||
var value = params.value || 0;
|
||||
var field = params.colDef.field;
|
||||
if (field == "NeedNum" && value > 0) {
|
||||
style = {'color':'red'};
|
||||
}
|
||||
return style;
|
||||
};
|
||||
|
||||
var gridDiv = document.querySelector("#dialog-delivery_plan");
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData();
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,187 @@
|
||||
<div class="panel">
|
||||
|
||||
<div class="wrapper-sm b-b b-light">
|
||||
|
||||
<form class="form-inline" id="myquery" name="myquery" action="{{url()}}" method="get">
|
||||
|
||||
<div class="pull-right">
|
||||
<a class="btn btn-default btn-sm" onclick="LocalTableExport('report_category', '品类销售');"><i class="fa fa-mail-forward"></i> 导出</a>
|
||||
</div>
|
||||
|
||||
@if(Auth::user()->role->code != 'c001')
|
||||
@include('report/select')
|
||||
@endif
|
||||
<button type="submit" class="btn btn-default btn-sm"><i class="fa fa-search"></i> 搜索</button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="{{$asset_url}}/vendor/highcharts/highcharts.min.js" type="text/javascript"></script>
|
||||
<script type="text/javascript">
|
||||
var data = {{$json}};
|
||||
$(function() {
|
||||
|
||||
Highcharts.getOptions().colors = Highcharts.map(Highcharts.getOptions().colors, function(color) {
|
||||
return {
|
||||
radialGradient: {cx:0.9,cy:0.9,r: 0.9},
|
||||
stops: [
|
||||
[0, color],
|
||||
[1, Highcharts.Color(color).brighten(-0.1).get('rgb')] // darken
|
||||
]
|
||||
};
|
||||
});
|
||||
|
||||
$.each(data.pie,function(year)
|
||||
{
|
||||
var piediv = "<div id='container_pie_"+year+"' style='height:300px;'></div>";
|
||||
var columndiv = "<div id='container_column_"+year+"' style='height:300px;'></div>";
|
||||
$('#container_pie').append(piediv);
|
||||
$('#container_column').append(columndiv);
|
||||
pie(year);
|
||||
column(year);
|
||||
});
|
||||
});
|
||||
|
||||
function pie(year)
|
||||
{
|
||||
$('#container_pie_'+year).highcharts({
|
||||
chart: {
|
||||
plotBackgroundColor: null,
|
||||
plotBorderWidth: null,
|
||||
plotShadow: false
|
||||
},
|
||||
title: {
|
||||
text: year+'年品类构成分析(金额)'
|
||||
},
|
||||
tooltip: {
|
||||
pointFormat: '{series.name}: <b>{point.y}¥</b>'
|
||||
},
|
||||
plotOptions: {
|
||||
pie: {
|
||||
allowPointSelect: true,
|
||||
cursor: 'pointer',
|
||||
dataLabels: {
|
||||
enabled: true,
|
||||
format: '<b>{point.name}</b>: {point.percentage:.1f} %'
|
||||
}
|
||||
}
|
||||
},
|
||||
series: [{
|
||||
type: 'pie',
|
||||
name: '金额',
|
||||
data: data.pie[year]
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
function column(year)
|
||||
{
|
||||
$('#container_column_'+year).highcharts({
|
||||
chart: {
|
||||
type: 'column'
|
||||
},
|
||||
title: {
|
||||
text: year+'年品类销售额柱体分析(金额)'
|
||||
},
|
||||
xAxis: {
|
||||
categories: data.column.categories
|
||||
},
|
||||
yAxis: {
|
||||
allowDecimals: false,
|
||||
min: 0,
|
||||
title: {
|
||||
text: '类别'
|
||||
}
|
||||
},
|
||||
tooltip: {
|
||||
formatter: function() {
|
||||
return '<b>'+ this.x +'</b><br/>'+
|
||||
this.series.name +': '+ this.y +'<br/>'+
|
||||
'合计: '+ this.point.stackTotal;
|
||||
}
|
||||
},
|
||||
plotOptions: {
|
||||
column: {
|
||||
stacking: 'normal'
|
||||
}
|
||||
},
|
||||
series:data.column.series[year]
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<table class="table table-bordered" id="report_category">
|
||||
<tr>
|
||||
<th align="center" style="width:100px;">品类编码</th>
|
||||
<th align="left">品类名称</th>
|
||||
<th align="right">本年度销售累计金额</th>
|
||||
<th align="right">去年同期销售累计金额</th>
|
||||
<th align="right">去年同期占比(%)</th>
|
||||
</tr>
|
||||
@foreach($product_categorys as $k => $category)
|
||||
|
||||
@if($category['level'] > 1 && $category['level'] < 10)
|
||||
<?php $v = $percentData[$now_year][$k]; ?>
|
||||
@if($product_categorys[$k]['code'])
|
||||
<tr>
|
||||
<td align="center">
|
||||
{{$product_categorys[$k]['code']}}
|
||||
</td>
|
||||
<td align="left">
|
||||
@if($product_categorys[$k]['level'] > 2)
|
||||
|
||||
@endif
|
||||
{{$product_categorys[$k]['name']}}
|
||||
</td>
|
||||
<td align="right">
|
||||
@if($select['role'] == 'client')
|
||||
{{number_format($v / $percentData['sum'][$now_year] * 100, 2)}}%
|
||||
@else
|
||||
{{number_format($v, 2)}}
|
||||
@endif
|
||||
</td>
|
||||
<td align="right">
|
||||
@if($select['role'] == 'client')
|
||||
{{number_format($percentData[$last_year][$k] / $percentData['sum'][$last_year] * 100, 2)}}%
|
||||
@else
|
||||
{{number_format($percentData[$last_year][$k], 2)}}
|
||||
@endif
|
||||
</td>
|
||||
<td align="right">
|
||||
@if($percentage[$k] > 0)
|
||||
{{$percentage[$k]}}%
|
||||
@else
|
||||
0%
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endif
|
||||
|
||||
@endforeach
|
||||
|
||||
<tr>
|
||||
<td align="left"></td>
|
||||
<td align="left">同期年度累计金额</td>
|
||||
<td align="right">{{number_format($percentData['sum'][$now_year],2)}}</td>
|
||||
<td align="right">{{number_format($percentData['sum'][$last_year],2)}}</td>
|
||||
<td align="right">{{number_format($percentage['total'],2)}}%</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="panel">
|
||||
<table class="table">
|
||||
<tr>
|
||||
<td id="container_pie"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="panel">
|
||||
<table class="table">
|
||||
<tr>
|
||||
<td id="container_column"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
@@ -0,0 +1,133 @@
|
||||
<div class="panel">
|
||||
|
||||
<div class="wrapper-sm">
|
||||
<form class="form-inline" id="myquery" name="myquery" action="{{url()}}" method="get">
|
||||
|
||||
<div class="pull-right">
|
||||
<a class="btn btn-default btn-sm" onclick="LocalTableExport('report_export', '地区品类销售');"><i class="fa fa-mail-forward"></i> 导出</a>
|
||||
</div>
|
||||
|
||||
@if(Auth::user()->role->code != 'c001')
|
||||
@include('report/select')
|
||||
@endif
|
||||
<button type="submit" class="btn btn-default btn-sm"><i class="fa fa-search"></i> 筛选</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered" id="report_export">
|
||||
<tr>
|
||||
<th style="white-space:nowrap">
|
||||
销售团队
|
||||
</th>
|
||||
|
||||
@foreach($categorys as $k => $v)
|
||||
@if($v['parent_id'] == 226)
|
||||
<th nowrap="true">{{$v['name']}}</th>
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
<th>总销售额</th>
|
||||
<th>促销费比</th>
|
||||
<th>消费促销</th>
|
||||
<th>渠道促销</th>
|
||||
<th>经销促销</th>
|
||||
</tr>
|
||||
|
||||
@foreach($now_year_single['money'] as $key => $value)
|
||||
<tr>
|
||||
<td rowspan="3" align="center" style="white-space:nowrap;vertical-align:middle;">
|
||||
{{$regions[$key]}}
|
||||
<a class="option" href="{{url('citydata')}}?circle_id={{$key}}&year={{$now_year}}">
|
||||
[月销]
|
||||
</a>
|
||||
</td>
|
||||
|
||||
@foreach($categorys as $k => $v)
|
||||
@if($v['parent_id'] == 226)
|
||||
<td align="right">
|
||||
{{(int)$value[$k]}}
|
||||
</td>
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
<td style="vertical-align:middle;" align="right">{{$now_year_single['totalcost'][$key]}}</td>
|
||||
|
||||
<td rowspan="3" style="vertical-align:middle;" align="center">
|
||||
@if($promotions['all'][$key])
|
||||
{{:$c = ($promotions['all'][$key]/$now_year_single['totalcost'][$key])}}
|
||||
{{number_format($c*100, 2)}}%
|
||||
@else
|
||||
0.00%
|
||||
@endif
|
||||
</td>
|
||||
|
||||
{{:$ps = $promotions[$key]}}
|
||||
<td rowspan="3" style="vertical-align:middle;" align="right">
|
||||
{{$ps[1] > 0 ? $ps[1] : 0}}
|
||||
</td>
|
||||
<td rowspan="3" style="vertical-align:middle;" align="right">
|
||||
{{$ps[2] > 0 ? $ps[2] : 0}}
|
||||
</td>
|
||||
<td rowspan="3" style="vertical-align:middle;" align="right">
|
||||
{{$ps[3] > 0 ? $ps[3] : 0}}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
@foreach($categorys as $category_id => $category)
|
||||
@if($category['parent_id'] == 226)
|
||||
<td align="right" title="去年同期增长率" nowrap="true">
|
||||
<?php $scale = $oldscale[$key][$category_id]; ?>
|
||||
@if($scale == 0)
|
||||
去年无
|
||||
@elseif($scale > 0)
|
||||
<span style="color:green">{{number_format($scale * 100, 2)}}%</span>
|
||||
@else
|
||||
<span style="color:red">{{number_format($scale * 100, 2)}}%</span>
|
||||
@endif
|
||||
</td>
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
<?php
|
||||
$_year = $now_year_single['totalcost'][$key] - $old_year_single['totalcost'][$key];
|
||||
if ($old_year_single['totalcost'][$key]) {
|
||||
$_total = number_format($_year / $old_year_single['totalcost'][$key] * 100, 2);
|
||||
} else {
|
||||
$_total = 0;
|
||||
}
|
||||
?>
|
||||
<td style="vertical-align:middle;" align="right">
|
||||
@if($_total > 0)
|
||||
{{$_total}}%
|
||||
@else
|
||||
<span style="color:red">{{$_total}}%</span>
|
||||
@endif
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
@foreach($categorys as $k => $v)
|
||||
@if($v['parent_id'] == 226)
|
||||
<td align="right" title="占区域该品类百分比">
|
||||
@if($value[$v['id']] > 0)
|
||||
{{number_format(($value[$v['id']] / $now_year_single['cat'][$v['id']]) * 100, 2)}}%
|
||||
@endif
|
||||
</td>
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
<td style="vertical-align:middle;" align="right"></td>
|
||||
|
||||
</tr>
|
||||
|
||||
@endforeach
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,77 @@
|
||||
<div class="panel">
|
||||
|
||||
<table class="table">
|
||||
<tr>
|
||||
<td><div class='title'>{{$year}}年 ({{$circle['name']}}) 客户圈月份销售分析</div></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="panel">
|
||||
|
||||
<table class="table table-bordered">
|
||||
<tr>
|
||||
<th>月份</th>
|
||||
|
||||
@if(count($categorys)) @foreach($categorys as $k => $v)
|
||||
<th>{{$k}}</th>
|
||||
@endforeach @endif
|
||||
|
||||
<th>总销售额</th>
|
||||
<th>促销费比</th>
|
||||
|
||||
<th>消费促销</th>
|
||||
<th>渠道促销</th>
|
||||
<th>经销促销</th>
|
||||
|
||||
@if(count($single['money'])) @foreach($single['money'] as $key => $value)
|
||||
<tr>
|
||||
<td rowspan="2" width="40" align="center" style="vertical-align:middle;color:#66CC00;font-weight:bold;background:#FFFFE9">{{$key}}月</td>
|
||||
|
||||
@if(count($categorys)) @foreach($categorys as $k => $v)
|
||||
<td align="right">
|
||||
{{$value[$v] > 0 ? $value[$v] : 0}}
|
||||
</td>
|
||||
@endforeach @endif
|
||||
|
||||
|
||||
<td rowspan="2" align="right" style="vertical-align:middle;color:#666;background:#FFFFE9">{{$single['cat'][$key]}}</td>
|
||||
|
||||
<td rowspan="2" style="vertical-align:middle;" align="right">
|
||||
@if($single['cat'][$key])
|
||||
{{:$c = ($promotions['month1'][$key]/$single['cat'][$key])}}
|
||||
{{number_format($c*100, 2)}}%
|
||||
@else
|
||||
0.00%
|
||||
@endif
|
||||
</td>
|
||||
|
||||
|
||||
{{:$promotion = $promotions['month'][$key]}}
|
||||
<td rowspan="2" style="vertical-align:middle;" align="right">
|
||||
{{$promotion[1] > 0 ? $promotion[1] : 0}}
|
||||
</td>
|
||||
<td rowspan="2" style="vertical-align:middle;" align="right">
|
||||
{{$promotion[2] > 0 ? $promotion[2] : 0}}
|
||||
</td>
|
||||
<td rowspan="2" style="vertical-align:middle;" align="right">
|
||||
{{$promotion[3] > 0 ? $promotion[3] : 0}}
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
@if(count($categorys)) @foreach($categorys as $k => $v)
|
||||
<td align="right">
|
||||
{{:$pl = $value[$v]/$single['cat'][$key]}}
|
||||
{{$_pl = number_format($pl*100, 2)}}%
|
||||
</td>
|
||||
@endforeach @endif
|
||||
</tr>
|
||||
|
||||
@endforeach @endif
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,63 @@
|
||||
<div class="panel">
|
||||
|
||||
<div class="wrapper-sm b-b b-light">
|
||||
<div class="text-md">{{$year_id}}年度发生交易客户数[{{count((array)$single['customer'])}}]</div>
|
||||
</div>
|
||||
|
||||
<div class="wrapper-sm b-b b-light">
|
||||
|
||||
<form class="form-inline" id="myquery" name="myquery" action="{{url()}}" method="get">
|
||||
|
||||
<div class="pull-right">
|
||||
<a class="btn btn-default btn-sm" onclick="LocalTableExport('report_export', '客户单品交易');"><i class="fa fa-mail-forward"></i> 导出</a>
|
||||
</div>
|
||||
|
||||
@if(Auth::user()->role->code != 'c001')
|
||||
@include('report/select')
|
||||
|
||||
@endif
|
||||
<select class="form-control input-sm" id='year' name='year' data-toggle="redirect" data-url="{{$query}}">
|
||||
@foreach($years as $v)
|
||||
<option value="{{$v}}" @if($select['query']['year']==$v) selected @endif>{{$v}}年</option>
|
||||
@endforeach
|
||||
</select>
|
||||
|
||||
<select class="form-control input-sm" id='category_id' name='category_id' data-toggle="redirect" data-url="{{$query}}">
|
||||
<option value="0">全部品类</option>
|
||||
@foreach($categorys as $k => $v)
|
||||
@if($v['layer_level'] == 1)
|
||||
<option value="{{$v['id']}}" @if($select['query']['category_id'] == $v['id']) selected @endif>{{$v['name']}}</option>
|
||||
@endif
|
||||
@endforeach
|
||||
</select>
|
||||
|
||||
<button type="submit" class="btn btn-default btn-sm"><i class="fa fa-search"></i> 搜索</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<table class="table table-bordered" id="report_export">
|
||||
<tr>
|
||||
<th>品类</th>
|
||||
<th>单品</th>
|
||||
|
||||
<th>总销售家数</th>
|
||||
|
||||
@foreach($months as $k => $v)
|
||||
<th>{{$v}}月</th>
|
||||
@endforeach
|
||||
|
||||
@foreach($single['sum'] as $k => $v)
|
||||
<tr>
|
||||
<td align="center">{{$single['category'][$k]}}</td>
|
||||
<td align="left"><a href="{{url('clientdata')}}?aspect_id={{$select['select']['aspect_id']}}®ion_id={{$select['select']['region_id']}}&circle_id={{$select['select']['circle_id']}}&client_id={{$select['select']['client_id']}}&product_id={{$k}}&year={{$year}}">[查]</a> {{$single['product'][$k]['product_name']}} - {{$single['product'][$k]['product_spec']}}</td>
|
||||
<td align="right">{{sizeof($single['all'][$k])}}</td>
|
||||
@foreach($months as $v2)
|
||||
<td align="right">
|
||||
{{:$sum = sizeof($v[$v2])}}
|
||||
@if($sum>0) {{$sum}} @else <span style="color:#ccc;">0</span> @endif
|
||||
</td>
|
||||
@endforeach
|
||||
</tr>
|
||||
@endforeach
|
||||
</table>
|
||||
</div>
|
||||
@@ -0,0 +1,65 @@
|
||||
<div class="panel">
|
||||
|
||||
<div class="wrapper b-b b-light">
|
||||
<div class='h5'>{{$single['cat']}} * ({{$single['name']}} - {{$single['spec']}}) - {{$year}}年度({{$month}}月)未进货经销商列表</div>
|
||||
</div>
|
||||
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th width="40">序号</th>
|
||||
<th width="100">区域</th>
|
||||
<th width="100">客户圈</th>
|
||||
<th width="280">客户名称</th>
|
||||
<th align="left">单品</th>
|
||||
</tr>
|
||||
@if(count($clients))
|
||||
<?php $i = 0; ?>
|
||||
@foreach($clients as $key => $value)
|
||||
@if(empty($notpurchase[$key]))
|
||||
<tr>
|
||||
<td align="center">{{$i + 1}}</td>
|
||||
<td align="center">{{$value['area']}}</td>
|
||||
<td align="center">{{$value['circle_name']}}</td>
|
||||
<td align="left">{{$value['client_id']}}</td>
|
||||
<td align="left">{{$single['name']}} - {{$single['spec']}}</td>
|
||||
</tr>
|
||||
@endif
|
||||
<?php $i++; ?>
|
||||
@endforeach
|
||||
@endif
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="panel">
|
||||
|
||||
<div class="wrapper b-b b-light">
|
||||
<div class='h5'>{{$single['cat']}} * ({{$single['name']}} - {{$single['spec']}}) - {{$year}}度年经销商销售分析</div>
|
||||
</div>
|
||||
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th width="40">序号</th>
|
||||
<th width="100">区域</th>
|
||||
<th width="100">客户圈</th>
|
||||
<th width="280">客户名称</th>
|
||||
<th align="left">单品</th>
|
||||
<th width="100">金额</th>
|
||||
</tr>
|
||||
<?php $i = 0; ?>
|
||||
@if(count($single['all']))
|
||||
@foreach($single['all'] as $key => $value)
|
||||
<tr>
|
||||
<td align="center">{{$i + 1}}</td>
|
||||
<td align="center">{{$clients[$key]['area']}}</td>
|
||||
<td align="center">{{$clients[$key]['circle_name']}}</td>
|
||||
<td align="left">{{$clients[$key]['client_id']}}</td>
|
||||
<td align="left">{{$single['name']}} - {{$single['spec']}}</td>
|
||||
<td align="right">{{$value}}</td>
|
||||
</tr>
|
||||
<?php $i++; ?>
|
||||
@endforeach
|
||||
@endif
|
||||
</table>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,128 @@
|
||||
<div class="panel">
|
||||
|
||||
<div class="wrapper-sm b-b b-light">
|
||||
|
||||
<form class="form-inline" id="myquery" name="myquery" action="{{url()}}" method="get">
|
||||
|
||||
@if(Auth::user()->role->code != 'c001')
|
||||
@include('report/select')
|
||||
@endif
|
||||
|
||||
<select class="form-control input-sm" id='category_id' name='category_id' data-toggle="redirect" data-url="{{$query}}">
|
||||
@foreach($product_categorys as $k => $v)
|
||||
<option value="{{$v['id']}}" @if($select['query']['category_id'] == $v['id']) selected @endif>{{$v['layer_space']}}{{$v['name']}}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<button type="submit" class="btn btn-default btn-sm"><i class="fa fa-search"></i> 筛选</button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="{{$asset_url}}/vendor/highcharts/highcharts.min.js" type="text/javascript"></script>
|
||||
<script type="text/javascript">
|
||||
var data = {{$json}};
|
||||
$(function () {
|
||||
$('#container').highcharts({
|
||||
title: {
|
||||
text: '历史年度销售分析',
|
||||
x: -20 //center
|
||||
},
|
||||
subtitle: {
|
||||
text: 'Historical Annual Sales Analysis',
|
||||
x: -20
|
||||
},
|
||||
xAxis: {
|
||||
categories: data.categories
|
||||
},
|
||||
yAxis: {
|
||||
title: {
|
||||
text: '销售汇总'
|
||||
},
|
||||
plotLines: [{
|
||||
value: 0,
|
||||
width: 1,
|
||||
color: '#808080'
|
||||
}]
|
||||
},
|
||||
tooltip: {
|
||||
valueSuffix: '¥'
|
||||
},
|
||||
legend: {
|
||||
//layout: 'vertical',
|
||||
//align: 'right',
|
||||
//verticalAlign: 'middle',
|
||||
//borderWidth: 0,
|
||||
useHTML:true,
|
||||
labelFormatter: function() {
|
||||
return this.name + '<br/><span style="font-size:10px;color:#666666;">合计: '+ data.total[this.name] +'¥</span>';
|
||||
//return '<div class="' + this.name + '-arrow"></div><span style="font-family: \'Advent Pro\', sans-serif; font-size:16px">' + this.name +'</span><br/><span style="font-size:10px; color:#ababaa">(合计: 12345)</span>';
|
||||
}
|
||||
},
|
||||
plotOptions: {
|
||||
line: {
|
||||
dataLabels: {
|
||||
enabled: true
|
||||
},
|
||||
//enableMouseTracking: false
|
||||
}
|
||||
},
|
||||
total: data.total,
|
||||
series: data.series
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<table class="table">
|
||||
<tr>
|
||||
<td>
|
||||
<div id="container" style="height:320px"></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
@if(Auth::user()->role->code != 'c001')
|
||||
|
||||
<div class="panel">
|
||||
<table class="table">
|
||||
<tr height="24">
|
||||
<th align="center">本年促销计算费比(占比)</th>
|
||||
<th align="center">消费促销(金额)</th>
|
||||
<th align="center">渠道促销(金额)</th>
|
||||
<th align="center">经营促销(金额)</th>
|
||||
<th align="center">本年批复促销已兑现金额</th>
|
||||
</tr>
|
||||
|
||||
<tr height="24">
|
||||
<td align="center">{{$assess}}</td>
|
||||
<td align="center">{{number_format($promotion['cat'][1],2)}}</td>
|
||||
<td align="center">{{number_format($promotion['cat'][2],2)}}</td>
|
||||
<td align="center">{{number_format($promotion['cat'][3],2)}}</td>
|
||||
<td align="center">{{number_format($promotion_honor, 2)}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
<div class="panel">
|
||||
<table class="table">
|
||||
<tr height="24">
|
||||
@foreach($product_categorys as $category)
|
||||
@if($category['parent_id'] == 0)
|
||||
<th align="center">{{$category['name']}}</th>
|
||||
@endif
|
||||
@endforeach
|
||||
</tr>
|
||||
<tr height="24">
|
||||
@foreach($product_categorys as $category)
|
||||
@if($category['parent_id']==0)
|
||||
<td align="center">{{$cat_salesdata_ret[$category['id']]}}</td>
|
||||
@endif
|
||||
@endforeach
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
-->
|
||||
|
||||
@endif
|
||||
@@ -0,0 +1,52 @@
|
||||
<div class="panel">
|
||||
|
||||
<div class="wrapper-sm b-b b-light">
|
||||
|
||||
<form class="form-inline" id="myquery" name="myquery" action="{{url()}}" method="get">
|
||||
|
||||
<div class="pull-right">
|
||||
<a class="btn btn-default btn-sm" onclick="LocalTableExport('report_newclient', '本年新客户');"><i class="fa fa-mail-forward"></i> 导出</a>
|
||||
</div>
|
||||
|
||||
@if(Auth::user()->role->code != 'c001')
|
||||
@include('report/select')
|
||||
@endif
|
||||
<button type="submit" class="btn btn-default btn-sm"><i class="fa fa-search"></i> 筛选</button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<table class="table table-bordered" id="report_newclient">
|
||||
<tr>
|
||||
<th align="center" width="100">序号</th>
|
||||
<th align="center">客户编码</th>
|
||||
<th align="left">客户名称</th>
|
||||
<th align="center" width="120">客户类型</th>
|
||||
<th align="center" width="120">发货金额</th>
|
||||
</tr>
|
||||
<?php $total_sum_money = 0; $i = 1; ?>
|
||||
@foreach($list[$nowYear] as $k => $v)
|
||||
<?php
|
||||
$customer = $customers[$k];
|
||||
$money_sum = $list[$nowYear][$k];
|
||||
?>
|
||||
@if(empty($list[$lastYear][$k]))
|
||||
<tr>
|
||||
<td align="center">{{$i}}</td>
|
||||
<td align="center">{{$customer['customer_code']}}</td>
|
||||
<td align="left">{{$customer['customer_name']}}</td>
|
||||
<td align="center">{{$customer_type[$customer['grade_id']]['name']}}</td>
|
||||
<td align="right">@number($money_sum, 2)</td>
|
||||
</tr>
|
||||
<?php $total_sum_money += $money_sum; $i++; ?>
|
||||
@endif
|
||||
@endforeach
|
||||
<tr>
|
||||
<th align="center">合计</th>
|
||||
<th align="left"></th>
|
||||
<th align="left"></th>
|
||||
<th align="center"></th>
|
||||
<th align="right">@number($total_sum_money, 2)</th>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
@@ -0,0 +1,28 @@
|
||||
<div class="panel">
|
||||
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th>步骤</th>
|
||||
<th>开始时间</th>
|
||||
<th>结束时间</th>
|
||||
<th>促销对象</th>
|
||||
<th>促销目标</th>
|
||||
<th>促销类别</th>
|
||||
<th>促销单品</th>
|
||||
<th>促销方法</th>
|
||||
<th>我司支持方式</th>
|
||||
<th>兑现凭据</th>
|
||||
<th>预估费用</th>
|
||||
<th>实际兑现费用</th>
|
||||
|
||||
@foreach($promotions as $key => $value)
|
||||
<tr>
|
||||
@foreach($value as $k => $v)
|
||||
<td align="left">{{$v}}</td>
|
||||
@endforeach
|
||||
</tr>
|
||||
@endforeach
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,315 @@
|
||||
<style>
|
||||
.red_text td,
|
||||
.red_text td span { color:red; }
|
||||
</style>
|
||||
|
||||
<div class="panel">
|
||||
|
||||
<div class="wrapper-sm b-b b-light">
|
||||
<div title="今天是本年第{{$days}}天" class="text-md">{{$now_year}}年经销商销售排行</div>
|
||||
</div>
|
||||
|
||||
<div class="wrapper-sm b-b b-light">
|
||||
|
||||
<form class="form-inline" id="myquery" name="myquery" action="{{url()}}" method="get">
|
||||
|
||||
<div class="pull-right">
|
||||
<a class="btn btn-default btn-sm" onclick="LocalTableExport('report_ranking', '销售排名');"><i class="fa fa-mail-forward"></i> 导出</a>
|
||||
</div>
|
||||
|
||||
@if(Auth::user()->role->code != 'c001')
|
||||
@include('report/select')
|
||||
|
||||
@endif
|
||||
客户
|
||||
<input class="form-control input-sm" value="{{$select['query']['customer_name']}}" name="customer_name">
|
||||
|
||||
<select class="form-control input-sm" id='tag' name='tag' data-toggle="redirect" data-url="{{$query}}">
|
||||
<option value="city_id" @if($select['query']['tag']=='city_id') selected @endif>城市模式</option>
|
||||
<option value="customer_id" @if($select['query']['tag']=='customer_id') selected @endif>客户模式</option>
|
||||
</select>
|
||||
<button type="submit" class="btn btn-default btn-sm"><i class="fa fa-search"></i> 搜索</button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<table class="table table-bordered" id="report_ranking">
|
||||
<tr>
|
||||
<th width="80">排行</th>
|
||||
@if($select['query']['tag'] == 'customer_id')
|
||||
<th style="white-space:nowrap;">销售团队</th>
|
||||
<th style="white-space:nowrap;">负责人</th>
|
||||
@endif
|
||||
@if($select['query']['tag']=='city_id')
|
||||
<th align="center" style="white-space:nowrap;">省份</th>
|
||||
<th align="center" style="white-space:nowrap;">城市</th>
|
||||
@else
|
||||
<th align="center" style="white-space:nowrap;">客户编码</th>
|
||||
<th align="center" style="white-space:nowrap;">客户名称</th>
|
||||
<th align="center" style="white-space:nowrap;">销售等级</th>
|
||||
@endif
|
||||
</th>
|
||||
<th style="white-space:nowrap;">比去年同期增长率</th>
|
||||
<th style="white-space:nowrap;">比去年同期增长额</th>
|
||||
<th style="white-space:nowrap;">总销售额</th>
|
||||
<th style="white-space:nowrap;">销售额占区域比</th>
|
||||
<th style="white-space:nowrap;">增长额总销售贡献比</th>
|
||||
<th style="white-space:nowrap;">增长贡献率</th>
|
||||
@foreach($categorys['name'] as $category)
|
||||
<th align="center" style="white-space:nowrap;">{{$category['name']}}</th>
|
||||
@endforeach
|
||||
|
||||
<?php
|
||||
$this_year_data = $single[$now_year];
|
||||
if ($this_year_data) {
|
||||
arsort($this_year_data);
|
||||
}
|
||||
$last_year_data = $single[$last_year];
|
||||
$i = 0;
|
||||
$total = [];
|
||||
|
||||
$growth = [
|
||||
// 今年比去年同期增加额求和
|
||||
'a' => [],
|
||||
// 今年比去年同期增加额正数求和
|
||||
'b' => [],
|
||||
// 今年比去年同期增加额负数求和
|
||||
'c' => []
|
||||
];
|
||||
|
||||
foreach((array)$this_year_data as $k => $v) {
|
||||
$res = $v - $last_year_data[$k];
|
||||
$growth['a'][$k] += $res;
|
||||
// 正数求和
|
||||
if($res > 0) {
|
||||
$growth['b'][$k] += $res;
|
||||
}
|
||||
// 负数求和
|
||||
if($res < 0) {
|
||||
$growth['c'][$k] += $res;
|
||||
}
|
||||
}
|
||||
|
||||
$this_year_sum = array_sum((array)$this_year_data);
|
||||
$last_year_sum = array_sum((array)$last_year_data);
|
||||
$growth_a = array_sum($growth['a']);
|
||||
$growth_b = array_sum($growth['b']);
|
||||
$growth_c = array_sum($growth['c']);
|
||||
|
||||
?>
|
||||
|
||||
@foreach($this_year_data as $k => $v)
|
||||
|
||||
<?php
|
||||
$i++;
|
||||
$total['all'] += $this_year_data[$k];
|
||||
?>
|
||||
|
||||
<tr class="@if(($v - $last_year_data[$k]) < 0) red_text @endif">
|
||||
<td align="center">{{$i}}</td>
|
||||
|
||||
@if($select['query']['tag'] == 'customer_id')
|
||||
<td align="center">{{$regions[$single['info'][$k]['region_id']]['name']}}</td>
|
||||
<td align="center">{{get_user($regions[$single['info'][$k]['region_id']]['owner_user_id'], 'name')}}</td>
|
||||
@endif
|
||||
|
||||
@if($select['query']['tag'] == 'city_id')
|
||||
<td align="center">
|
||||
{{$single['info'][$k]['province_name']}}
|
||||
</td>
|
||||
<td align="center">
|
||||
{{$single['info'][$k]['city_name']}}
|
||||
</td>
|
||||
@else
|
||||
<td align="center">
|
||||
{{$single['info'][$k]['customer_code']}}
|
||||
</td>
|
||||
<td align="left">
|
||||
<!-- 客户类型 -->
|
||||
<?php
|
||||
$post = $single['info'][$k]['grade_id'];
|
||||
// 今年合计
|
||||
$now_year_money = $this_year_data[$k];
|
||||
$grade = $now_year_money / $days;
|
||||
$post_type = '';
|
||||
if ($post == 1) {
|
||||
if ($grade > 32877) {
|
||||
$post_type = '军';
|
||||
} elseif ($grade > 16438) {
|
||||
$post_type = '师';
|
||||
} elseif ($grade > 6575) {
|
||||
$post_type = '旅';
|
||||
} elseif ($grade > 3288) {
|
||||
$post_type = '团';
|
||||
} elseif ($grade > 1643) {
|
||||
$post_type = '营';
|
||||
} elseif ($grade > 657) {
|
||||
$post_type = '连';
|
||||
} else {
|
||||
$post_type = '问题';
|
||||
}
|
||||
} else if($post == 2) {
|
||||
if ($grade > 3288) {
|
||||
$post_type = '大队';
|
||||
} elseif ($grade > 1643) {
|
||||
$post_type = '中队';
|
||||
} elseif ($grade > 657) {
|
||||
$post_type = '小队';
|
||||
} elseif ($grade > 328) {
|
||||
$post_type = '分队';
|
||||
} else {
|
||||
$post_type = '问题';
|
||||
}
|
||||
}
|
||||
?>
|
||||
{{$single['info'][$k]['customer_name']}}
|
||||
</td>
|
||||
<td align="center">
|
||||
{{$post_type}}
|
||||
</td>
|
||||
@endif
|
||||
|
||||
<td align="right" title="去年累计: {{(int)$last_year_data[$k]}} - 今年累计: {{(int)$this_year_data[$k]}}">
|
||||
@if($last_year_data[$k] > 0)
|
||||
<span @if(($v / $last_year_data[$k] - 1) < 0) style="color:red;" @endif>
|
||||
<?php
|
||||
$last_year_pre = number_format(($v / $last_year_data[$k] - 1) * 100, 2);
|
||||
?>
|
||||
{{$last_year_pre}}%
|
||||
</span>
|
||||
@else
|
||||
去年同期无
|
||||
@endif
|
||||
</td>
|
||||
|
||||
<td align="right" title="去年累计: {{(int)$last_year_data[$k]}} - 今年累计: {{(int)$this_year_data[$k]}}">
|
||||
<span @if($growth['a'][$k] < 0) style="color:red;" @endif>
|
||||
{{number_format($growth['a'][$k], 2)}}
|
||||
</span>
|
||||
</td>
|
||||
|
||||
<td align="right">{{number_format($this_year_data[$k], 2)}}</td>
|
||||
|
||||
<td align="center">{{number_format(($v / array_sum($this_year_data) * 100), 2)}}%</td>
|
||||
|
||||
<td align="center">{{number_format(($growth['a'][$k] / array_sum($this_year_data) * 100), 2)}}%</td>
|
||||
|
||||
<td align="center">
|
||||
<?php
|
||||
if ($growth['a'][$k] > 0) {
|
||||
echo number_format(($growth['a'][$k] / $growth_b) * 100, 2);
|
||||
} else {
|
||||
echo '-'.number_format(($growth['a'][$k] / $growth_c) * 100, 2);
|
||||
}
|
||||
?>%
|
||||
</td>
|
||||
|
||||
<?php $category_money = $categorys['money'][$now_year][$k]; ?>
|
||||
@foreach($categorys['name'] as $category)
|
||||
<td align="right">{{number_format($category_money[$category['id']],2)}}</td>
|
||||
<?php $total[$category['id']] += $category_money[$category['id']]; ?>
|
||||
@endforeach
|
||||
</tr>
|
||||
@endforeach
|
||||
<tr>
|
||||
<th align="center">净值合计</th>
|
||||
<th align="center"></th>
|
||||
|
||||
@if($select['query']['tag'] == 'customer_id')
|
||||
<th align="center"></th>
|
||||
<th align="center"></th>
|
||||
<th align="center"></th>
|
||||
@endif
|
||||
|
||||
<th align="center"></th>
|
||||
<th align="right">
|
||||
<?php
|
||||
$v2 = $this_year_sum - $last_year_sum;
|
||||
if ($last_year_sum > 0) {
|
||||
$pre = number_format(($v2 / $last_year_sum) * 100, 2);
|
||||
}
|
||||
?>
|
||||
<span @if($pre < 0) style="color:red;" @endif>{{$pre}}%</span>
|
||||
</th>
|
||||
|
||||
<th align="right">
|
||||
{{number_format($growth_a, 2)}}
|
||||
</th>
|
||||
|
||||
<th align="right">{{number_format($total['all'], 2)}}</th>
|
||||
|
||||
<th align="center"></th>
|
||||
<th align="center"></th>
|
||||
<th align="center"></th>
|
||||
@foreach($categorys['name'] as $category)
|
||||
<th align="right">{{number_format($total[$category['id']],2)}}</th>
|
||||
@endforeach
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="center">增长合计</th>
|
||||
<th align="center"></th>
|
||||
|
||||
@if($select['query']['tag'] == 'customer_id')
|
||||
<th align="center"></th>
|
||||
<th align="center"></th>
|
||||
<th align="center"></th>
|
||||
@endif
|
||||
|
||||
<th align="center"></th>
|
||||
<th align="right">
|
||||
<?php
|
||||
if ($last_year_sum > 0) {
|
||||
$pre = number_format(($growth_b / $last_year_sum) * 100, 2);
|
||||
}
|
||||
?>
|
||||
<span @if($pre < 0) style="color:red;" @endif>{{$pre}}%</span>
|
||||
</th>
|
||||
<th align="right">
|
||||
{{number_format($growth_b, 2)}}
|
||||
</th>
|
||||
<th align="center"></th>
|
||||
|
||||
|
||||
<th align="right"></th>
|
||||
<th align="center"></th>
|
||||
<th align="center"></th>
|
||||
@foreach($categorys['name'] as $category)
|
||||
<th align="right"></th>
|
||||
@endforeach
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th align="center">下降合计</th>
|
||||
<th align="center"></th>
|
||||
|
||||
@if($select['query']['tag'] == 'customer_id')
|
||||
<th align="center"></th>
|
||||
<th align="center"></th>
|
||||
<th align="center"></th>
|
||||
@endif
|
||||
|
||||
<th align="center"></th>
|
||||
<th align="right">
|
||||
<?php
|
||||
if ($last_year_sum > 0) {
|
||||
$pre = number_format(($growth_c / $last_year_sum) * 100, 2);
|
||||
}
|
||||
?>
|
||||
<span @if($pre < 0) style="color:red;" @endif>{{$pre}}%</span>
|
||||
</th>
|
||||
<th align="right">
|
||||
{{number_format($growth_c, 2)}}
|
||||
</th>
|
||||
<th align="center"></th>
|
||||
<th align="center"></th>
|
||||
<th align="center"></th>
|
||||
|
||||
<th align="right"></th>
|
||||
@foreach($categorys['name'] as $category)
|
||||
<th align="right"></th>
|
||||
@endforeach
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,45 @@
|
||||
<div class="panel">
|
||||
|
||||
<div class="wrapper b-b b-light">
|
||||
@if(Auth::user()->role->name != 'client')
|
||||
<form class="form-inline" id="myquery" name="myquery" action="{{url()}}" method="get">
|
||||
|
||||
@include('data/select')
|
||||
|
||||
<div class="form-group">
|
||||
年份<input type="text" id="year" name="year" onclick="datePicker({dateFmt:'yyyy'});" value="{{$select['select']['year']}}" class="form-control input-sm">
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-default btn-sm">过滤</button>
|
||||
</form>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th align="left">客户名称</th>
|
||||
<th align="center">客户代码</th>
|
||||
@for($i=1; $i <= 12; $i++)
|
||||
<th align="right">{{$i}}月(¥)</th>
|
||||
@endfor
|
||||
<th align="right">合计(¥)</th>
|
||||
</tr>
|
||||
|
||||
@foreach($rows as $row)
|
||||
<tr>
|
||||
<td align="left">{{$row['customer_name']}}</td>
|
||||
<td align="center">{{$row['customer_code']}}</td>
|
||||
@for($i=1; $i <= 12; $i++)
|
||||
<td align="right">
|
||||
<div style="color:green;" title="月任务">@number($row['task'][$i] * 10000)</div>
|
||||
<div title="客户回款金额">@number($row['money'][$i])</div>
|
||||
</td>
|
||||
@endfor
|
||||
<td align="right">
|
||||
<div style="color:green;" title="月任务">@number(array_sum($row['task']) * 10000)</div>
|
||||
<div>@number(array_sum($row['money']))</div>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</table>
|
||||
</div>
|
||||
@@ -0,0 +1,56 @@
|
||||
<select class="form-control input-sm" id='region1_id' name='region1_id' data-toggle="redirect" data-url="{{$query}}">
|
||||
<option value="0">大区</option>
|
||||
@if(count($select['region1']))
|
||||
@foreach($select['region1'] as $k => $v)
|
||||
<option value="{{$v['id']}}" @if($select['query']['region1_id']==$v['id']) selected @endif>{{$v['name']}}</option>
|
||||
@endforeach
|
||||
@endif
|
||||
</select>
|
||||
|
||||
<select class="form-control input-sm" id='region2_id' name='region2_id' data-toggle="redirect" data-url="{{$query}}">
|
||||
<option value="0">省区</option>
|
||||
@if(count($select['region2']))
|
||||
@foreach($select['region2'] as $k => $v)
|
||||
<option value="{{$v['id']}}" @if($select['query']['region2_id']==$v['id']) selected @endif>{{$v['name']}}</option>
|
||||
@endforeach
|
||||
@endif
|
||||
</select>
|
||||
|
||||
<select class="form-control input-sm" id='region3_id' name='region3_id' data-toggle="redirect" data-url="{{$query}}">
|
||||
<option value="0">区域</option>
|
||||
@if(count($select['region3']))
|
||||
@foreach($select['region3'] as $k => $v)
|
||||
<option value="{{$v['id']}}" @if($select['query']['region3_id']==$v['id']) selected @endif>{{$v['name']}}</option>
|
||||
@endforeach
|
||||
@endif
|
||||
</select>
|
||||
|
||||
<select class="form-control input-sm" id='customer_id' name='customer_id' data-toggle="redirect" data-url="{{$query}}">
|
||||
<option value="0">客户</option>
|
||||
@if(count($select['customer']))
|
||||
@foreach($select['customer'] as $k => $v)
|
||||
<option value="{{$v['id']}}" @if($v['status'] == 0) style="color:#f00;" @endif @if($select['query']['customer_id'] == $v['id']) selected @endif>{{$v['customer_name']}}</option>
|
||||
@endforeach
|
||||
@endif
|
||||
</select>
|
||||
|
||||
@if(isset($select['query']['customer_type']))
|
||||
<select class="form-control input-sm" id='customer_type' name='customer_type' data-toggle="redirect" data-url="{{$query}}">
|
||||
<option value="0">客户类型</option>
|
||||
@if(count($customer_type))
|
||||
@foreach($customer_type as $k => $v)
|
||||
<option value="{{$v['id']}}" @if($select['query']['customer_type'] == $v['id']) selected @endif>{{$v['name']}}</option>
|
||||
@endforeach
|
||||
@endif
|
||||
</select>
|
||||
@endif
|
||||
|
||||
@if($select['query']['date1'])
|
||||
|
||||
日期
|
||||
<input class="form-control input-sm" data-toggle="date" value="{{$select['query']['date1']}}" size="13" name="date1" id="date1">
|
||||
@endif
|
||||
@if($select['query']['date2'])
|
||||
-
|
||||
<input class="form-control input-sm" data-toggle="date" value="{{$select['query']['date2']}}" size="13" name="date2" id="date2">
|
||||
@endif
|
||||
@@ -0,0 +1,90 @@
|
||||
<div class="panel">
|
||||
|
||||
<div class="wrapper-sm b-b">
|
||||
<div class="text-md">{{$select['select']['year']}}年单品销售排名(占比)</div>
|
||||
</div>
|
||||
|
||||
<div class="wrapper-sm b-b">
|
||||
|
||||
<form class="form-inline" id="myquery" name="myquery" action="{{url()}}" method="get">
|
||||
|
||||
<div class="pull-right">
|
||||
<a class="btn btn-default btn-sm" onclick="LocalTableExport('report_single', '单品销售排名');"><i class="fa fa-mail-forward"></i> 导出</a>
|
||||
</div>
|
||||
|
||||
@if(Auth::user()->role->code != 'c001')
|
||||
@include('report/select')
|
||||
|
||||
@endif
|
||||
|
||||
<select class="form-control input-sm" id='category_id' name='category_id' data-toggle="redirect" rel="{{$query}}">
|
||||
@foreach($categorys as $k => $v)
|
||||
@if($v['layer_level'] == 1)
|
||||
<option value="{{$v['id']}}" @if($select['select']['category_id'] == $v['id']) selected @endif>{{$v['name']}}</option>
|
||||
@endif
|
||||
@endforeach
|
||||
</select>
|
||||
|
||||
年份
|
||||
<input type="text" id="year" name="year" onclick="datePicker({dateFmt:'yyyy'});" value="{{$select['select']['year']}}" class="form-control input-sm">
|
||||
|
||||
<button type="submit" class="btn btn-default btn-sm">筛选</button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
{{:$months = range(1,12)}}
|
||||
@foreach($single['year'] as $year => $total)
|
||||
|
||||
{{:arsort($total['money'])}}
|
||||
|
||||
<table class="table table-bordered" id="report_single">
|
||||
|
||||
<tr>
|
||||
<th align="center">产品名称</th>
|
||||
@if(count($months))
|
||||
@foreach($months as $month)
|
||||
<th align="center">
|
||||
{{$month}}月
|
||||
</th>
|
||||
@endforeach
|
||||
@endif
|
||||
<th align="center">合计</th>
|
||||
</tr>
|
||||
|
||||
@foreach($total['money'] as $key => $product)
|
||||
|
||||
{{:$total = array_sum((array)$product)}}
|
||||
<tr>
|
||||
<td>
|
||||
{{$single['name'][$key]}} - {{$single['spec'][$key]}}
|
||||
</td>
|
||||
|
||||
@foreach($months as $month)
|
||||
<td align="right">
|
||||
<div title="金额">{{(int)$single['money'][$year][$key][$month]}}</div>
|
||||
<div title="件数">{{(int)$single['amount'][$year][$key][$month]}}</div>
|
||||
<div style="color:green;" title="该单品本月/本年的占比">
|
||||
@if($single['money'][$year][$key][$month] > 0)
|
||||
{{number_format(($single['money'][$year][$key][$month]/$total)*100,2)}}%
|
||||
@endif
|
||||
</div>
|
||||
</td>
|
||||
@endforeach
|
||||
|
||||
<th align="right">
|
||||
<div title="金额">{{$total}}</div>
|
||||
<div title="件数">{{(int)array_sum($single['amount'][$year][$key])}}</div>
|
||||
<div style="color:red;" title="本年单品/品类的占比">
|
||||
@if($total > 0)
|
||||
{{number_format(($total/$single['money2'][$year])*100,2)}}%
|
||||
@endif
|
||||
</div>
|
||||
</th>
|
||||
</tr>
|
||||
@endforeach
|
||||
</table>
|
||||
|
||||
@endforeach
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,42 @@
|
||||
<div class="panel">
|
||||
|
||||
<div class="wrapper-sm b-b b-light">
|
||||
<form class="form-inline" id="myquery" name="myquery" action="{{url()}}" method="get">
|
||||
|
||||
<div class="pull-right">
|
||||
<a class="btn btn-default btn-sm" onclick="LocalTableExport('report_export', '三个月未进货客户');"><i class="fa fa-mail-forward"></i> 导出</a>
|
||||
</div>
|
||||
|
||||
@if(Auth::user()->role->code != 'c001')
|
||||
@include('report/select')
|
||||
@endif
|
||||
<button type="submit" class="btn btn-default btn-sm"><i class="fa fa-search"></i> 搜索</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<table class="table" id="report_export">
|
||||
<tr>
|
||||
<th align="center" width="60">序号</th>
|
||||
<th align="left" width="100">客户编码</th>
|
||||
<th align="left">客户名称</th>
|
||||
<th align="center" width="100">客户类型</th>
|
||||
<th align="right" width="200">去年金额</th>
|
||||
<th align="right" width="200">今年金额</th>
|
||||
</tr>
|
||||
|
||||
<?php $n = 1; ?>
|
||||
@if(count($rows))
|
||||
@foreach($rows as $row)
|
||||
<tr>
|
||||
<td align="center">{{$n}}</td>
|
||||
<td align="center">{{$row['code']}}</td>
|
||||
<td align="left">{{$row['name']}}</td>
|
||||
<td align="center">{{$customer_type[$row['type_id']]['name']}}</td>
|
||||
<td align="right">@number($data[$year1][$row['id']], 2)</td>
|
||||
<td align="right">@number($data[$year2][$row['id']], 2)</td>
|
||||
</tr>
|
||||
<?php $n++; ?>
|
||||
@endforeach
|
||||
@endif
|
||||
</table>
|
||||
</div>
|
||||
@@ -0,0 +1,37 @@
|
||||
<div class="form-panel">
|
||||
<div class="form-panel-header">
|
||||
<div class="pull-right">
|
||||
</div>
|
||||
{{$form['btn']}}
|
||||
</div>
|
||||
<div class="form-panel-body panel-form-{{$form['action']}}">
|
||||
<form class="form-horizontal form-controller" method="post" id="{{$form['table']}}" name="{{$form['table']}}">
|
||||
{{$form['tpl']}}
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var table = '{{$form["table"]}}';
|
||||
// grid初始化事件
|
||||
gdoo.event.set('grid.sample_apply_data', {
|
||||
ready(me) {
|
||||
me.dataKey = 'product_id';
|
||||
},
|
||||
editable: {
|
||||
product_name(params) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 子表对话框
|
||||
gdoo.event.set('sample_apply_data.product_id', {
|
||||
query(query) {
|
||||
},
|
||||
onSelect(row, selectedRow) {
|
||||
row.price = selectedRow.price1;
|
||||
return true;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,80 @@
|
||||
{{$header["js"]}}
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
action.dialogType = 'layer';
|
||||
|
||||
// 关闭使用
|
||||
action.close = function(data) {
|
||||
var me = this;
|
||||
var grid = config.grid;
|
||||
var rows = grid.api.getSelectedRows();
|
||||
var ids = [];
|
||||
if (rows.length > 0) {
|
||||
rows.forEach(function(row) {
|
||||
ids.push(row.id);
|
||||
});
|
||||
$.post(app.url('order/sample-apply/close'), {ids: ids}, function(res) {
|
||||
toastrSuccess(res.data);
|
||||
grid.remoteData();
|
||||
});
|
||||
} else {
|
||||
toastrError('最少选择一行记录。');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.autoColumnsToFit = false;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.show(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
// 读取数据
|
||||
options.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
});
|
||||
config.grid = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,80 @@
|
||||
{{$header["js"]}}
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
action.dialogType = 'layer';
|
||||
|
||||
// 关闭使用
|
||||
action.close = function(data) {
|
||||
var me = this;
|
||||
var grid = config.grid;
|
||||
var rows = grid.api.getSelectedRows();
|
||||
var ids = [];
|
||||
if (rows.length > 0) {
|
||||
rows.forEach(function(row) {
|
||||
ids.push(row.id);
|
||||
});
|
||||
$.post(app.url('order/sample-apply/close'), {ids: ids}, function(res) {
|
||||
toastrSuccess(res.data);
|
||||
grid.remoteData();
|
||||
});
|
||||
} else {
|
||||
toastrError('最少选择一行记录。');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.autoColumnsToFit = false;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.show(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
// 读取数据
|
||||
options.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
});
|
||||
config.grid = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1 @@
|
||||
{{$form['tpl']}}
|
||||
@@ -0,0 +1,116 @@
|
||||
<style>
|
||||
.modal-body { overflow:hidden; }
|
||||
</style>
|
||||
|
||||
<div class="wrapper-xs">
|
||||
<div id="dialog-sample_apply-toolbar">
|
||||
<form id="dialog-sample_apply-search-form" name="dialog_sample_apply_search_form" class="search-inline-form form-inline" method="get">
|
||||
@include('searchForm3')
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="ref_sample_apply" class="ag-theme-balham" style="width:100%;height:140px;"></div>
|
||||
|
||||
<div class="m-t-xs">
|
||||
<div id="ref_sample_apply_data" class="ag-theme-balham" style="width:100%;height:240px;"></div>
|
||||
</div>
|
||||
<script>
|
||||
var $ref_sample_apply = null;
|
||||
var $ref_sample_apply_data = null;
|
||||
var params = JSON.parse('{{json_encode($query)}}');
|
||||
(function($) {
|
||||
params['master'] = 1;
|
||||
var mGridDiv = document.querySelector("#ref_sample_apply");
|
||||
var mGrid = new agGridOptions();
|
||||
mGrid.remoteDataUrl = '{{url()}}';
|
||||
mGrid.remoteParams = params;
|
||||
mGrid.rowMultiSelectWithClick = false;
|
||||
mGrid.rowSelection = 'multiple';
|
||||
mGrid.autoColumnsToFit = false;
|
||||
mGrid.defaultColDef.suppressMenu = true;
|
||||
mGrid.defaultColDef.sortable = false;
|
||||
mGrid.columnDefs = [
|
||||
{cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: true, suppressSizeToFit: true, width: 40},
|
||||
{cellClass:'text-center', field: 'sn', headerName: '单据编号', minWidth: 160},
|
||||
{cellClass:'text-center', field: 'created_at', headerName: '单据日期', width: 120},
|
||||
{cellClass:'text-center', field: 'region_name', headerName: '区域', width: 100},
|
||||
{cellClass:'text-center', field: 'department_name', headerName: '部门', width: 120},
|
||||
{cellClass:'text-center', field:'freight_type_name', headerName: '样品送达方式', width: 120},
|
||||
{field:'customer_name', headerName: '随货客户', width: 160},
|
||||
{field:'freight_address', headerName: '邮寄地址', width: 160},
|
||||
{cellClass:'text-center', field:'contact', headerName: '联系人', width: 100},
|
||||
{cellClass:'text-center', field:'contact_phone', headerName: '联系电话', width: 140},
|
||||
{cellClass:'text-center', field:'purpose', headerName: '样品用途', width: 180},
|
||||
{cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
|
||||
];
|
||||
|
||||
mGrid.onSelectionChanged = function() {
|
||||
var rows = mGrid.api.getSelectedRows();
|
||||
var ids = [];
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
ids.push(rows[i].id);
|
||||
}
|
||||
params.ids = ids;
|
||||
sGrid.remoteData(params);
|
||||
};
|
||||
new agGrid.Grid(mGridDiv, mGrid);
|
||||
// 读取数据
|
||||
mGrid.remoteData();
|
||||
$ref_sample_apply = mGrid;
|
||||
|
||||
params['master'] = 0;
|
||||
var sGridDiv = document.querySelector("#ref_sample_apply_data");
|
||||
var sGrid = new agGridOptions();
|
||||
sGrid.remoteDataUrl = '{{url()}}';
|
||||
sGrid.remoteParams = params;
|
||||
sGrid.rowMultiSelectWithClick = true;
|
||||
sGrid.rowSelection = 'multiple';
|
||||
sGrid.autoColumnsToFit = false;
|
||||
sGrid.defaultColDef.suppressMenu = true;
|
||||
sGrid.defaultColDef.sortable = false;
|
||||
sGrid.getRowClass = function(params) {
|
||||
var data = params.data;
|
||||
params.node.setSelected(true);
|
||||
if (toNumber(data.ky_num) < toNumber(data.wc_num)) {
|
||||
return 'ag-row-warn';
|
||||
}
|
||||
};
|
||||
sGrid.columnDefs = [
|
||||
{cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: true, suppressSizeToFit: true, width: 40},
|
||||
{cellClass:'text-center', field: 'product_code', headerName: '存货编码', width: 100},
|
||||
{field: 'product_name', headerName: '商品名称', minWidth: 180},
|
||||
{cellClass:'text-center', field: 'product_spec', headerName: '商品规格', width: 140},
|
||||
{cellClass:'text-center', field: 'product_unit', headerName: '计量单位', width: 80},
|
||||
{cellClass:'text-right', field: 'ky_num', type:'number', headerName: '现存量', width: 80},
|
||||
{cellClass:'text-right', field: 'quantity', type:'number', headerName: '申请数量', width: 80},
|
||||
{cellClass:'text-right', field: 'yc_num', type:'number', headerName: '已发数量', width: 80},
|
||||
{cellClass:'text-right', field: 'wc_num', type:'number', headerName: '未发数量', width: 80},
|
||||
{cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
|
||||
];
|
||||
new agGrid.Grid(sGridDiv, sGrid);
|
||||
// 读取数据
|
||||
sGrid.remoteData();
|
||||
$ref_sample_apply_data = sGrid;
|
||||
|
||||
var data = JSON.parse('{{json_encode($search["forms"])}}');
|
||||
var search = $('#dialog-sample_apply-search-form').searchForm({
|
||||
data: data,
|
||||
init:function(e) {}
|
||||
});
|
||||
|
||||
search.find('#search-submit').on('click', function() {
|
||||
var query = search.serializeArray();
|
||||
$.map(query, function(row) {
|
||||
params[row.name] = row.value;
|
||||
});
|
||||
|
||||
params['master'] = 1;
|
||||
mGrid.remoteData(params);
|
||||
|
||||
params['master'] = 0;
|
||||
sGrid.remoteData(params);
|
||||
return false;
|
||||
});
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,3 @@
|
||||
<form class="form-horizontal form-controller" method="post" id="customer_order_type" name="customer_order_type">
|
||||
{{$form['tpl']}}
|
||||
</form>
|
||||
@@ -0,0 +1,130 @@
|
||||
<div class="wrapper-sm" style="padding-bottom:0;">
|
||||
|
||||
<div id="{{$query['form_id']}}-dialog-toolbar">
|
||||
<form id="{{$query['form_id']}}-dialog-search-form" name="{{$query['form_id']}}_dialog_search_form" class="form-inline" method="get">
|
||||
@include('searchForm3')
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="m-t-sm dialog-jqgrid">
|
||||
<table id="{{$query['form_id']}}-dialog"></table>
|
||||
<div id="{{$query['form_id']}}-dialog-page" class="m-r-sm"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function($) {
|
||||
window.productDialog = {};
|
||||
var params = {{json_encode($query)}};
|
||||
var $table = $("#{{$query['form_id']}}-dialog");
|
||||
|
||||
var model = [
|
||||
{name: "name", index:'name', label: '名称', minWidth: 220, align: 'left'},
|
||||
{name: "type", index:'type', label: '是否收费', width: 120, align: 'center'},
|
||||
{name: "id", index:'id', label: 'ID', width: 60, align: 'center'}
|
||||
];
|
||||
|
||||
$table.jqGrid({
|
||||
caption: '',
|
||||
datatype: 'json',
|
||||
mtype: 'POST',
|
||||
url: app.url('order/type/dialog'),
|
||||
colModel: model,
|
||||
rowNum: 25,
|
||||
multiboxonly: params.multi == 0 ? true : false,
|
||||
multiselect: true,
|
||||
viewrecords: true,
|
||||
rownumbers: false,
|
||||
height: 320,
|
||||
footerrow: false,
|
||||
postData: params,
|
||||
tableType: 'dialog',
|
||||
pager: '#{{$query["form_id"]}}-dialog-page',
|
||||
gridComplete: function() {
|
||||
// 单选时禁用全选按钮
|
||||
if (params.multi == 0) {
|
||||
$("#cb_" + this.p.id).prop('disabled', true);
|
||||
}
|
||||
$(this).jqGrid('setColsWidth');
|
||||
},
|
||||
loadComplete: function(res) {
|
||||
|
||||
var me = $(this);
|
||||
me.jqGrid('initPagination', res);
|
||||
|
||||
if($.isFunction(window.productDialog.setSelecteds)) {
|
||||
window.productDialog.setSelecteds.call($table);
|
||||
} else {
|
||||
// 设置默认选中
|
||||
window.productDialog.setDefaultSelecteds();
|
||||
}
|
||||
|
||||
},
|
||||
// 双击选中
|
||||
ondblClickRow: function(id) {
|
||||
if(params.multi == 1) {
|
||||
$table.jqGrid('setSelection', id);
|
||||
}
|
||||
if($.isFunction(window.productDialog.getSelecteds)) {
|
||||
window.productDialog.getSelecteds.call($table);
|
||||
} else {
|
||||
window.productDialog.getDefaultSelecteds();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
window.productDialog.setDefaultSelecteds = function(res) {
|
||||
var ids = $('#'+params.id).val() || '';
|
||||
ids = ids.split(',');
|
||||
$.each(ids, function(k, v) {
|
||||
if(v) {
|
||||
$table.jqGrid('setSelection', v);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
window.productDialog.getDefaultSelecteds = function(dialog) {
|
||||
var rows = $table.jqGrid('getSelections');
|
||||
if(params.multi == 0) {
|
||||
if(rows.length > 1) {
|
||||
toastrError('只能选择一项。');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
var id = [], text = [];
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
id.push(rows[i].id);
|
||||
text.push(rows[i].name);
|
||||
}
|
||||
|
||||
// 会写数据
|
||||
$('#'+params.id).val(id.join(','));
|
||||
$('#'+params.id+'_text').val(text.join(','));
|
||||
|
||||
// 关闭窗口
|
||||
$(dialog).dialog("close");
|
||||
return true;
|
||||
}
|
||||
|
||||
var data = {{json_encode($search['forms'])}};
|
||||
var search = $('#{{$query["form_id"]}}-dialog-search-form').searchForm({
|
||||
data: data,
|
||||
init:function(e) {}
|
||||
});
|
||||
|
||||
search.find('#search-submit').on('click', function() {
|
||||
var query = search.serializeArray();
|
||||
$.map(query, function(row) {
|
||||
params[row.name] = row.value;
|
||||
});
|
||||
|
||||
$table.jqGrid('setGridParam', {
|
||||
postData: params,
|
||||
page: 1
|
||||
}).trigger('reloadGrid');
|
||||
return false;
|
||||
});
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@@ -0,0 +1,57 @@
|
||||
{{$header["js"]}}
|
||||
|
||||
<div class="panel no-border" id="{{$header['table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.id > 0) {
|
||||
action.edit(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
// 读取数据
|
||||
options.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
});
|
||||
config.grid = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,38 @@
|
||||
<div class="wrapper-sm p-t-none">
|
||||
<div class="list-jqgrid">
|
||||
<div id="order-goods-widget" class="ag-theme-balham" style="width:100%;height:200px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function ($) {
|
||||
function datetimeFormatter(params) {
|
||||
return format_datetime(params.value);
|
||||
}
|
||||
var gridDiv = document.querySelector("#order-goods-widget");
|
||||
var options = new agGridOptions();
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = {};
|
||||
var columnDefs = [
|
||||
{suppressMenu: true, type:'sn', cellClass:'text-center', headerName: '序号', width: 60},
|
||||
{suppressMenu: true, field: "sn", headerName: '编号', width: 160},
|
||||
{suppressMenu: true, sortable: false, field: "name", headerName: '客户', width: 160},
|
||||
{suppressMenu: true, sortable: false, field: "freight_arrival_date", headerName: '预计到货日期', width: 140},
|
||||
];
|
||||
options.columnDefs = columnDefs;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.id > 0) {
|
||||
top.addTab('stock/delivery/show?id=' + params.data.id, 'stock_delivery_show', '发货单');
|
||||
}
|
||||
};
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
// 读取数据
|
||||
options.remoteData({page: 1});
|
||||
gdoo.widgets['order_widget_goods'] = options;
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,31 @@
|
||||
<style>
|
||||
#order-index-widget .ag-header-cell-label {
|
||||
justify-content: left !important;
|
||||
}
|
||||
</style>
|
||||
<div class="wrapper-sm p-t-none">
|
||||
<div class="list-jqgrid">
|
||||
<div id="order-index-widget" class="ag-theme-balham" style="width:100%;height:200px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function ($) {
|
||||
var gridDiv = document.querySelector("#order-index-widget");
|
||||
var options = new agGridOptions();
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = {};
|
||||
var columnDefs = [{
|
||||
field: 'title',
|
||||
cellClass:'text-left',
|
||||
cellRenderer: 'htmlCellRenderer',
|
||||
headerName: '统计',
|
||||
suppressMenu: true,
|
||||
minWidth: 160
|
||||
}];
|
||||
options.columnDefs = columnDefs;
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
// 读取数据
|
||||
options.remoteData({page: 1});
|
||||
gdoo.widgets['order_widget_index'] = options;
|
||||
})(jQuery);
|
||||
</script>
|
||||
Reference in New Issue
Block a user