创建版本

This commit is contained in:
2021-02-22 12:17:00 +08:00
commit af555f49c3
2332 changed files with 369202 additions and 0 deletions
@@ -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();
}
}
+28
View File
@@ -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;
}
}
+23
View File
@@ -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;
}
}
+228
View File
@@ -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;
}
}
+40
View File
@@ -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');
}
}
+13
View File
@@ -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');
}
}
+63
View File
@@ -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');
}
}
+26
View File
@@ -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' => '本月创建'],
]
];
}
+13
View File
@@ -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');
}
}
+38
View File
@@ -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';
}
+353
View File
@@ -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";
}
}
+282
View File
@@ -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')
+33
View File
@@ -0,0 +1,33 @@
<div class="table-responsive">
<table class="table">
<tr>
<td colspan="4" align="left">
<strong>尊敬的客户!请将货款汇至以下您最方便的银行账户!如有疑问请致电:028-38296666&nbsp;&nbsp;028-36888888</strong>
</td>
</tr>
<tr>
<td>
&nbsp;&nbsp;收款单位: 眉山市爱客网络科技有限公司<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 中国工商银行眉山分行营业部<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: 0000 0000 0000 0000
</td>
<td>
&nbsp;&nbsp;收款单位: 眉山市爱客网络科技有限公司<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开户行: 中国农业银行眉山分行营业部<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: 0000 0000 0000 0000
</td>
<td>
&nbsp;&nbsp;收款单位:眉山市爱客网络科技有限公司<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开户行:中国建设银行眉山财富中心支行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: 0000 0000 0000 0000
</td>
<td>
&nbsp;&nbsp;收款单位:眉山市爱客网络科技有限公司<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开户行:中国农业发展银行眉山市分行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: 0000 0000 0000 0000
</td>
</tr>
</table>
</div>
+435
View File
@@ -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')
+125
View File
@@ -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、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
年&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
月&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
日收到产品&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
件,配件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;件;
</p>
<p style="padding-top:0;">
2、货品情况:<label class="checkbox-inline i-checks i-checks-sm"><i></i>完好</label>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label class="checkbox-inline i-checks i-checks-sm"><i></i>缺失</label>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<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>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<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>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<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>
+108
View File
@@ -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>
+219
View File
@@ -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)
&nbsp;&nbsp;&nbsp;&nbsp;
@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>
+133
View File
@@ -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')
&nbsp;
@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>
&nbsp;
<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']}}&region_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>
+128
View File
@@ -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')
&nbsp;
@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">
&nbsp;年份<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'])
&nbsp;
日期
<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')
&nbsp;
@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>
&nbsp;年份
<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>
+130
View File
@@ -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>
+57
View File
@@ -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>