gdoo/app/Gdoo/Order/Controllers/OrderController.php

1134 lines
41 KiB
PHP

<?php
namespace Gdoo\Order\Controllers;
use DB;
use Request;
use Auth;
use Paginator;
use App\Jobs\SendSms;
use App\Support\Hook;
use Gdoo\Customer\Models\Customer;
use Gdoo\Customer\Models\CustomerTax;
use Gdoo\Customer\Services\CustomerService;
use Gdoo\Product\Models\ProductCategory;
use Gdoo\Product\Models\Warehouse;
use Gdoo\Order\Models\CustomerOrder;
use Gdoo\Product\Models\Stock;
use Gdoo\Index\Models\Notification;
use Gdoo\Index\Services\BadgeService;
use Gdoo\Order\Services\OrderService;
use Gdoo\Produce\Services\ProduceService;
use Gdoo\Model\Grid;
use Gdoo\Model\Form;
use Gdoo\Index\Controllers\WorkflowController;
class OrderController extends WorkflowController
{
public $permission = [
'dialog',
'serviceDelivery',
'serviceNotDelivery',
'servicePromotion',
'deliveryPlan',
'deliveryPlanDate',
'serviceCancelOrder',
'serviceCustomerMoney',
];
public function index()
{
// 客户权限
$region = regionCustomer('customer_id_customer');
$header = Grid::header([
'code' => 'customer_order',
'referer' => 1,
'search' => ['by' => ''],
]);
$search = $header['search_form'];
$query = $search['query'];
$cols = $header['cols'];
// 自定义列
$customFields = [
'delivery_date' => [
'headerName' => '发货日期',
'field' => 'delivery_date',
'calcFooter' => 'sum',
'width' => 100,
'sortable' => false,
'suppressMenu' => true,
'cellStyle' => ['text-align' => 'center'],
],
'zy_num' => [
'headerName' => '直营数量',
'field' => 'zy_num',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'zy_money' => [
'headerName' => '直营金额',
'field' => 'zy_money',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'pt_num' => [
'headerName' => '普通数量',
'field' => 'pt_num',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'pt_money' => [
'headerName' => '普通金额',
'field' => 'pt_money',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'wl_num' => [
'headerName' => '物料数量',
'field' => 'wl_num',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'wl_money' => [
'headerName' => '物料金额',
'field' => 'wl_money',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'zp_num' => [
'headerName' => '赠品数量',
'field' => 'zp_num',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'zp_money' => [
'headerName' => '赠品金额',
'field' => 'zp_money',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'zk_money' => [
'headerName' => '折扣金额',
'field' => 'zk_money',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
/*
'delivery_sn' => [
'headerName' => '发货单号',
'field' => 'delivery_sn',
'calcFooter' => 'sum',
'width' => 140,
'sortable' => false,
'suppressMenu' => true,
'cellStyle' => ['text-align' => 'center'],
],
*/
'yfh_num' => [
'headerName' => '已发数量',
'field' => 'yfh_num',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'wfh_num' => [
'headerName' => '未发数量',
'field' => 'wfh_num',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],'hjzl' => [
'headerName' => '合计重量(kg)',
'field' => 'hjzl',
'calcFooter' => 'sum',
'width' => 100,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
]
];
$cols = Grid::addColumns($cols, 'master_type_id_name', $customFields);
$cols['actions']['options'] = [[
'name' => '显示',
'action' => 'show',
'display' => $this->access['show'],
]];
$header['buttons'] = [
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
];
$header['left_buttons'] = [
['name' => '批量编辑', 'color' => 'default', 'icon' => 'fa-pencil-square-o', 'action' => 'batchEdit', 'display' => $this->access['batchEdit']],
];
$header['cols'] = $cols;
$header['tabs'] = CustomerOrder::$tabs;
$header['bys'] = CustomerOrder::$bys;
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']);
$model->select($header['select']);
// 订单统计
$model->leftJoin(DB::raw("(select
Sum(case when c.type_id = 3 then money else 0 end) as zy_money,
Sum(case when c.type_id = 3 then delivery_quantity else 0 end) as zy_num,
Sum(case when p.material_type > 0 then money else 0 end) as wl_money,
Sum(case when p.material_type > 0 then delivery_quantity else 0 end) as wl_num,
Sum(case when d.type_id = 2 then money else 0 end) as zp_money,
Sum(case when d.type_id = 2 then delivery_quantity else 0 end) as zp_num,
Sum(case when ((p.product_type = 1 and c.type_id <> 3) or p.code = '99001') then money else 0 end) as pt_money,
Sum(case when ((p.product_type = 1 and c.type_id <> 3) or p.code = '99001') then d.delivery_quantity else 0 end) as pt_num,
Sum(case when p.code = '99001' then money else 0 end) as zk_money,
SUM(ISNULL(d.delivery_quantity, 0)) dd_num,
SUM(ISNULL(d.delivery_quantity * p.weight, 0)) hjzl,
d.order_id
FROM customer_order_data as d
LEFT JOIN product as p on p.id = d.product_id
LEFT JOIN customer_order as co on co.id = d.order_id
LEFT JOIN customer as c on c.id = co.customer_id
GROUP BY d.order_id
) cod
"), 'customer_order.id', '=', 'cod.order_id');
$model->addSelect(DB::raw('cod.*'));
// 发货统计
$model->leftJoin(DB::raw('(select max(m.invoice_dt) delivery_date, SUM(ISNULL(d.quantity, 0)) yfh_num, d.sale_id
FROM stock_delivery_data as d
left join stock_delivery m on m.id = d.delivery_id
GROUP BY d.sale_id
) sdd
'), 'customer_order.id', '=', 'sdd.sale_id');
$model->addSelect(DB::raw('sdd.*,cod.dd_num - sdd.yfh_num as wfh_num'));
foreach ($search['where'] as $where) {
if ($where['active']) {
$model->search($where);
}
}
if ($region['authorise']) {
foreach ($region['whereIn'] as $key => $where) {
$model->whereIn($key, $where);
}
}
$rows = $model->paginate($query['limit'])->appends($query);
return Grid::dataFilters($rows, $header);
}
return $this->display([
'header' => $header,
]);
}
/**
* 订单明细列表
*/
public function detail()
{
// 客户权限
$region = regionCustomer('customer_id_customer');
$header = Grid::header([
'code' => 'customer_order',
'referer' => 1,
'template_id' => 52,
'search' => ['by' => ''],
]);
$search = $header['search_form'];
$query = $search['query'];
$cols = $header['cols'];
// 自定义列
$customFields = [
'delivery_date' => [
'headerName' => '发货日期',
'field' => 'delivery_date',
'calcFooter' => 'sum',
'width' => 100,
'sortable' => false,
'suppressMenu' => true,
'cellStyle' => ['text-align' => 'center'],
],
'delivery_sn' => [
'headerName' => '发货单号',
'field' => 'delivery_sn',
'calcFooter' => 'sum',
'width' => 140,
'sortable' => false,
'suppressMenu' => true,
'cellStyle' => ['text-align' => 'center'],
],
'yfh_num' => [
'headerName' => '已发数量',
'field' => 'yfh_num',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'wfh_num' => [
'headerName' => '未发数量',
'field' => 'wfh_num',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
]
];
$cols = Grid::addColumns($cols, 'master_warehouse_contact', $customFields);
$cols['actions']['options'] = [[
'name' => '显示',
'action' => 'show',
'display' => $this->access['show'],
]];
$header['buttons'] = [
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
];
$header['cols'] = $cols;
$header['tabs'] = CustomerOrder::$tabs2;
$header['bys'] = CustomerOrder::$bys;
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->leftJoin(DB::raw('(select m.sn delivery_sn, m.invoice_dt delivery_date, SUM(ISNULL(d.quantity, 0)) yf_num, d.sale_data_id
FROM stock_delivery_data d
left join stock_delivery m on m.id = d.delivery_id
GROUP BY d.sale_data_id, m.sn, m.invoice_dt
) sdd
'), 'customer_order_data.id', '=', 'sdd.sale_data_id');
// 查询调拨单
$model->leftJoin(DB::raw('(select m.sn delivery_sn, m.invoice_dt delivery_date, SUM(ISNULL(d.quantity, 0)) yf_num, d.sale_data_id
FROM stock_allocation_data d
left join stock_allocation m on m.id = d.allocation_id
GROUP BY d.sale_data_id,m.sn,m.invoice_dt
) sad
'), 'customer_order_data.id', '=', 'sad.sale_data_id');
$model->orderBy($header['sort'], $header['order']);
foreach ($search['where'] as $where) {
if ($where['active']) {
$model->search($where);
}
}
if ($region['authorise']) {
foreach ($region['whereIn'] as $key => $where) {
$model->whereIn($key, $where);
}
}
$model->selectRaw('isnull(sdd.delivery_sn, sad.delivery_sn) delivery_sn, isnull(sdd.delivery_date, sad.delivery_date) delivery_date, isnull(sdd.yf_num, 0) + isnull(sad.yf_num, 0) as yfh_num, customer_order_data.delivery_quantity - isnull(sdd.yf_num, 0) - isnull(sad.yf_num, 0) as wfh_num');
$model->addSelect($header['select']);
$rows = $model->paginate($query['limit'])->appends($query);
return Grid::dataFilters($rows, $header);
}
return $this->display([
'header' => $header,
]);
}
/**
* 发货计划
*/
public function delivery()
{
// 客户权限
$region = regionCustomer('customer_id_customer');
$header = Grid::header([
'code' => 'customer_order',
'referer' => 1,
'template_id' => '89',
'search' => ['by' => ''],
]);
$search = $header['search_form'];
$query = $search['query'];
$cols = $header['cols'];
// 自定义列
$customFields = [
'pt_num' => [
'headerName' => '数量',
'field' => 'pt_num',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'pt_money' => [
'headerName' => '金额',
'field' => 'pt_money',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'wl_num' => [
'headerName' => '物料数量',
'field' => 'wl_num',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'wl_money' => [
'headerName' => '物料金额',
'field' => 'wl_money',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'other_money' => [
'headerName' => '其他金额',
'field' => 'other_money',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'total_weight' => [
'headerName' => '重量合计(kg)',
'field' => 'total_weight',
'calcFooter' => 'sum',
'width' => 110,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
/*
'delivery_date' => [
'headerName' => '发货日期',
'field' => 'delivery_date',
'calcFooter' => 'sum',
'width' => 100,
'sortable' => false,
'suppressMenu' => true,
'cellStyle' => ['text-align' => 'center'],
],
'delivery_sn' => [
'headerName' => '发货单号',
'field' => 'delivery_sn',
'calcFooter' => 'sum',
'width' => 140,
'sortable' => false,
'suppressMenu' => true,
'cellStyle' => ['text-align' => 'center'],
],
*/
'yfh_num' => [
'headerName' => '已发数量',
'field' => 'yfh_num',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
],
'wfh_num' => [
'headerName' => '未发数量',
'field' => 'wfh_num',
'calcFooter' => 'sum',
'width' => 80,
'suppressMenu' => true,
'type' => 'number',
'cellStyle' => ['text-align' => 'right'],
]
];
$cols = Grid::addColumns($cols, 'master_warehouse_contact', $customFields);
$cols['actions']['options'] = [[
'name' => '显示',
'action' => 'show',
'display' => $this->access['show'],
]];
$header['buttons'] = [
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
];
$header['left_buttons'] = [
['name' => '修改预计发货日期', 'color' => 'default', 'icon' => 'fa-file-text-o', 'action' => 'deliveryPlan', 'display' => $this->access['deliveryPlan']],
['name' => '修改物流信息', 'color' => 'default', 'action' => 'logisticsPlan', 'display' => $this->access['logisticsPlan']],
['name' => '修改运费支付方式', 'color' => 'default', 'action' => 'deliveryEdit', 'display' => $this->access['deliveryEdit']],
];
$header['cols'] = $cols;
$header['tabs'] = CustomerOrder::$tabs3;
$header['bys'] = CustomerOrder::$bys;
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->select($header['select']);
$model->leftJoin('model_run', 'model_run.data_id', '=', 'customer_order.id')
->where('model_run.bill_id', 23);
// 订单统计
$model->leftJoin(DB::raw("(select
Sum(case when p.material_type > 0 then d.money else 0 end) as wl_money,
Sum(case when p.material_type > 0 then d.delivery_quantity else 0 end) as wl_num,
Sum(case when ISNULL(p.material_type, 0) = 0 then d.delivery_quantity * d.price else 0 end) as pt_money,
Sum(case when ISNULL(p.material_type, 0) = 0 then d.delivery_quantity else 0 end) as pt_num,
Sum(d.other_money) as other_money,
Sum(d.delivery_quantity * p.weight) as total_weight,
SUM(ISNULL(d.delivery_quantity, 0)) dd_num, d.order_id
FROM customer_order_data as d
LEFT JOIN product as p on p.id = d.product_id
LEFT JOIN customer_order as co on co.id = d.order_id
LEFT JOIN customer as c on c.id = co.customer_id
GROUP BY d.order_id
) cod
"), 'customer_order.id', '=', 'cod.order_id');
$model->addSelect(DB::raw('cod.*'));
// 发货统计
$model->leftJoin(DB::raw('(select SUM(ISNULL(d.quantity, 0)) yfh_num, d.sale_id
FROM stock_delivery_data as d
GROUP BY d.sale_id
) sdd
'), 'customer_order.id', '=', 'sdd.sale_id');
$model->addSelect(DB::raw('sdd.*,cod.dd_num - sdd.yfh_num as wfh_num'));
$model->orderByRaw('ISNULL(model_run.actived_at, 0) desc');
$model->orderBy($header['sort'], $header['order']);
foreach ($search['where'] as $where) {
if ($where['active']) {
$model->search($where);
}
}
if ($region['authorise']) {
foreach ($region['whereIn'] as $key => $where) {
$model->whereIn($key, $where);
}
}
$rows = $model->paginate($query['limit'])->appends($query);
return Grid::dataFilters($rows, $header);
}
return $this->display([
'header' => $header,
]);
}
/**
* 获取发货计划明细
*/
public function deliveryPlan()
{
$query = Request::all();
if (Request::method() == 'POST') {
$rows = ProduceService::getPreShipDate($query['id'], $query['date']);
return ['data' => $rows];
}
return $this->render([
'query' => $query,
]);
}
/**
* 修改运费支付方式
*/
public function deliveryEdit()
{
$gets = Request::all();
if (Request::method() == 'POST') {
$id = $gets['id'];
$delivery = $gets['delivery'];
DB::table('customer_order')->where('id', $id)->update($delivery);
return $this->json('修改运费支付方式。', true);
}
$order = DB::table('customer_order')->where('id', $gets['id'])->first();
$gets['freight_pay_text'] = empty($order['freight_pay_text']) ? '回单付,送货' : $order['freight_pay_text'];
return $this->render([
'gets' => $gets,
]);
}
/**
* 修改物流信息
*/
public function logisticsPlan()
{
$gets = Request::all();
if (Request::method() == 'POST') {
$ids = explode(',', $gets['ids']);
$delivery = $gets['delivery'];
$data = [];
if ($delivery['plan_delivery_dt']) {
$data['plan_delivery_dt'] = $delivery['plan_delivery_dt'];
}
if ($delivery['freight_short_logistics_id']) {
$data['freight_short_logistics_id'] = $delivery['freight_short_logistics_id'];
}
if ($delivery['freight_short_car']) {
$data['freight_short_car'] = $delivery['freight_short_car'];
}
DB::table('customer_order')->whereIn('id', $ids)->update($data);
return $this->json('物流信息修改成功。', true);
}
return $this->render([
'gets' => $gets,
]);
}
/**
* 修改发货计划日期
*/
public function deliveryPlanDate()
{
$query = Request::all();
if (Request::method() == 'POST') {
$order = CustomerOrder::find($query['id']);
$order->plan_delivery_dt = $query['date'];
$order->save();
return $this->json('保存数据成功。', true);
}
}
public function create($action = 'edit')
{
$id = (int) Request::get('id');
$header['action'] = $action;
$header['code'] = 'customer_order';
$header['id'] = $id;
// 客户权限
$header['region'] = ['field' => 'customer_id'];
$header['authorise'] = ['action' => 'index', 'field' => 'created_id'];
$header['select'] = '
product_id_product.weight,
product_id_product.weight * customer_order_data.delivery_quantity as total_weight,
customer_order_data.fee_src_id,
customer_order_data.fee_data_id
';
$form = Form::make($header);
$tpl = $action == 'print' ? 'print' : 'create';
return $this->display(['form' => $form], $tpl);
}
public function edit()
{
return $this->create();
}
public function audit()
{
return $this->create('audit');
}
public function show()
{
return $this->create('show');
}
// 批量编辑
public function batchEdit()
{
$gets = Request::all();
if (Request::method() == 'POST') {
$ids = explode(',', $gets['ids']);
DB::table('customer_order')->whereIn('id', $ids)->update([
$gets['field'] => $gets['search_0'],
]);
return $this->json('修改完成。', true);
}
$header = Grid::batchEdit([
'code' => 'customer_order',
'columns' => ['customer_id', 'tax_id'],
]);
return view('batchEdit', [
'gets' => $gets,
'header' => $header
]);
}
public function print()
{
$id = Request::get('id');
$template_id = Request::get('template_id');
$template = DB::table('model_template')->where('id', $template_id)->first();
$print_type = $template['print_type'];
$this->layout = 'layouts.print_'.$print_type;
if ($print_type == 'stiReport') {
$data = OrderService::getPrintData($id);
$print_data = [
'master' => [$data['master']],
'customer_order_data' => $data['rows'],
];
return $this->display([
'template' => $template,
'print_data' => $print_data,
]);
} else {
$print_tpl = view()->exists(Request::controller().'.print.'.$template_id);
if ($print_tpl) {
$data = OrderService::getPrintData($id);
$data['template'] = $template;
$tpl = $this->display($data, 'print/'.$template_id);
} else {
$tpl = $this->create('print');
}
return $print_type == 'pdf' ? print_prince($tpl) : $tpl;
}
}
public function dialog()
{
$header = Grid::header([
'code' => 'customer_order',
'view_type' => 'dialog',
]);
$search = $header['search_form'];
$query = $search['query'];
if (Request::method() == 'POST') {
$model = DB::table($header['table']);
foreach ($header['join'] as $join) {
$model->leftJoin($join[0], $join[1], $join[2], $join[3]);
}
$model->leftJoin('customer_order_data as cod', 'cod.order_id', '=', 'customer_order.id');
$model->where('cod.use_close', 0);
$model->orderBy($header['sort'], $header['order']);
foreach ($search['where'] as $where) {
if ($where['active']) {
$model->search($where);
}
}
// 客户权限
$region = regionCustomer();
if ($region['authorise']) {
foreach ($region['whereIn'] as $key => $where) {
$model->whereIn($key, $where);
}
}
if (isset($query['status'])) {
$model->where('customer_order.status', $query['status']);
}
if (isset($query['customer_id'])) {
$model->where('customer_order.customer_id', $query['customer_id']);
}
$limit = $query['limit'] > 0 ? $query['limit'] : 50;
$header['select'][] = 'sum(cod.money) as total_money';
$header['select'][] = 'customer_id_customer.code as customer_code';
$header['raw_select'][] = 'customer_id_customer.code';
$model->groupBy(DB::raw(join(',', $header['raw_select'])));
$model->selectRaw(join(',', $header['select']));
$rows = $model->paginate();
$items = Grid::dataFilters($rows, $header, function($item) {
$item['text'] = $item['name'];
return $item;
});
return $items;
}
return $this->render([
'search' => $search,
'query' => $query,
]);
}
/**
* 参照到促销申请
*/
public function servicePromotion()
{
$search = search_form([], [
['text','customer.name','客户名称'],
['text','customer.code','客户编码'],
]);
$query = $search['query'];
if (Request::method() == 'POST') {
if ($query['master']) {
$model = DB::table('customer_order as m')
->leftJoin('customer_order_data as d', 'm.id', '=', 'd.order_id')
->leftJoin('product', 'product.id', '=', 'd.product_id')
->leftJoin('customer', 'customer.id', '=', 'm.customer_id');
// 如果促销已经关联了就不显示订单了
// type_id 是否要处理相同的类型
if ($query['type_id'] == 1 || $query['type_id'] == 2) {
$model->whereRaw("m.id not in(select order_id from promotion where isnull(is_close, 0) = 0 and type_id = ? and (order_id is not null and order_id <> ?))", [(int)$query['type_id'], (int)$query['order_id']]);
}
foreach ($search['where'] as $where) {
if ($where['active']) {
$model->search($where);
}
}
if (isset($query['customer_id'])) {
$model->where('m.customer_id', (int)$query['customer_id']);
}
if ($query['type_id'] > 0) {
// 物资促销1 赠品促销2 其他费用3
if ($query['type_id'] == 1) {
$model->where('product.material_type', '>', 0);
}
}
// 客户权限
$region = regionCustomer();
if ($region['authorise']) {
foreach ($region['whereIn'] as $key => $where) {
$model->whereIn($key, $where);
}
}
$model->groupBy(DB::raw('m.id, m.sn, m.created_at, customer.code, customer.name'))
->selectRaw("m.id, m.sn, m.created_at, customer.code customer_code, customer.name customer_name, sum(d.money) as total_money");
$rows = $model->get();
} else {
$model = DB::table('customer_order_data')
->leftJoin('product', 'product.id', '=', 'customer_order_data.product_id')
->leftJoin('customer_order', 'customer_order.id', '=', 'customer_order_data.order_id')
->leftJoin('product_unit', 'product_unit.id', '=', 'product.unit_id')
->leftJoin('customer_order_type', 'customer_order_type.id', '=', 'customer_order_data.type_id')
->whereIn('customer_order.id', (array)$query['ids']);
if (isset($query['customer_id'])) {
$model->where('customer_order.customer_id', (int)$query['customer_id']);
}
if ($query['type_id'] > 0) {
// 物资促销1 赠品促销2 其他费用3
// 物资促销时只显示物料产品
if ($query['type_id'] == 1) {
$model->whereRaw('product.material_type > 0');
}
}
$model->selectRaw("
customer_order_data.*,
customer_order_data.delivery_quantity as quantity,
product.name as product_name,
product.spec as product_spec,
product.code as product_code,
product.barcode as product_barcode,
product.unit_id as unit_id,
product_unit.name as product_unit
");
$rows = $model->get();
}
return ['data' => $rows];
}
return $this->render([
'search' => $search,
'query' => $query,
]);
}
// 发货参照订单
public function serviceDelivery()
{
$date = date("Y-m-d", strtotime("+1 day"));
$search = search_form(
['advanced' => ''], [
['form_type' => 'date', 'name' => '预计发货日期', 'field' => 'customer_order.plan_delivery_dt', 'options' => []],
['form_type' => 'text', 'name' => '订单编号', 'field' => 'customer_order.sn', 'options' => []],
['form_type' => 'text', 'name' => '所属客户', 'field' => 'customer.name', 'options' => []],
['form_type' => 'text', 'name' => '开票名称', 'field' => 'customer_tax.name', 'options' => []],
['form_type' => 'text', 'name' => '客户编码', 'field' => 'customer.code', 'options' => []]
], 'model');
$query = $search['query'];
if (Request::method() == 'POST') {
if ($query['is_direct'] == 1) {
$detail = OrderService::getSaleOrderSelectDetailReqSql();
} else {
$detail = OrderService::getSaleOrderSelectDetailSql();
}
if ($query['master']) {
$model = DB::table('customer_order')
->whereRaw('customer_order.id in (select sale_id from ('.$detail.') b where sale_id = customer_order.id)')
->leftJoin('customer', 'customer.id', '=', 'customer_order.customer_id')
->leftJoin('customer_tax', 'customer_tax.id', '=', 'customer_order.tax_id')
->whereRaw('customer_order.status = 1')
->orderBy('customer_order.id', 'desc');
foreach ($search['where'] as $where) {
if ($where['active']) {
$model->search($where);
}
}
$model->selectRaw('
customer_order.*,
customer.code as customer_code,
customer.name as customer_name,
customer_tax.name as tax_name
');
$rows = $model->get();
} else {
$model = DB::query()->selectRaw('* FROM('.$detail.') as a');
$rows = $model->whereIn('sale_id', (array)$query['ids'])->get(['*', 'sale_data_id as id'])->toArray();
}
return $this->json($rows, true);
}
return $this->render([
'search' => $search,
'query' => $query,
]);
}
// 未发货订单(参照)
public function serviceNotDelivery()
{
$search = search_form(
['advanced' => ''], [
['form_type' => 'text', 'name' => '客户名称', 'field' => 'customer.name', 'options' => []],
['form_type' => 'text', 'name' => '客户编码', 'field' => 'customer.code', 'options' => []],
['form_type' => 'text', 'name' => '订单编码', 'field' => 'customer_order.sn', 'options' => []]
], 'model');
$query = $search['query'];
if (Request::method() == 'POST') {
// 客户权限
$region = regionCustomer();
if ($query['master']) {
$model = DB::table('customer_order')
->whereRaw('exists (select sale_id from ('.OrderService::getSaleOrderSelectDetailNotDeliverySql().') d where customer_order.id = d.sale_id)')
->leftJoin('customer', 'customer.id', '=', 'customer_order.customer_id')
->orderBy('customer_order.id', 'desc');
foreach ($search['where'] as $where) {
if ($where['active']) {
$model->search($where);
}
}
if ($region['authorise']) {
foreach ($region['whereIn'] as $key => $where) {
$model->whereIn($key, $where);
}
}
$model->selectRaw('
customer_order.*,
customer.code as customer_code,
customer.name as customer_name
');
$rows = $model->get();
} else {
$model = DB::query()->selectRaw('* FROM('.OrderService::getSaleOrderSelectDetailNotDeliverySql().') as a');
$rows = $model->whereIn('sale_id', (array)$query['ids'])->get(['*', 'sale_data_id as id'])->toArray();
}
return $this->json($rows, true);
}
return $this->render([
'search' => $search,
'query' => $query,
]);
}
// 订单退货(参照)
public function serviceCancelOrder()
{
$search = search_form(
['advanced' => ''], [
['form_type' => 'text', 'name' => '客户名称', 'field' => 'customer.name', 'options' => []],
['form_type' => 'text', 'name' => '客户编码', 'field' => 'customer.code', 'options' => []]
], 'model');
$query = $search['query'];
if (Request::method() == 'POST') {
if ($query['master']) {
$model = DB::table('customer_order')
->leftJoin('customer', 'customer.id', '=', 'customer_order.customer_id')
->orderBy('customer_order.id', 'desc');
foreach ($search['where'] as $where) {
if ($where['active']) {
$model->search($where);
}
}
$model->selectRaw('
customer_order.*,
customer.code as customer_code,
customer.name as customer_name
');
$rows = $model->get();
} else {
$rows = DB::table('customer_order_data as d')->whereIn('d.order_id', (array)$query['ids'])
->leftJoin('customer_order_type as cot', 'cot.id', '=', 'd.type_id')
->leftJoin('customer_order as m', 'm.id', '=', 'd.order_id')
->leftJoin('product', 'product.id', '=', 'd.product_id')
->leftJoin('product_unit', 'product_unit.id', '=', 'product.unit_id')
->selectRaw('
d.product_id,
d.quantity,
d.price,
d.weight,
d.batch_sn,
d.batch_date,
d.fee_data_id,
d.fee_src_id,
d.fee_src_type_id,
d.fee_src_sn,
d.promotion_sn,
d.promotion_data_id,
d.order_id,
m.sn as sale_sn,
d.type_id,
cot.name as type_id_name,
product.code as product_code,
product.name as product_name,
product.barcode as product_barcode,
product.spec as product_spec,
product_unit.name as product_unit
')
->get();
}
return $this->json($rows, true);
}
return $this->render([
'search' => $search,
'query' => $query,
]);
}
public function serviceCustomerMoney()
{
$tax_id = Request::get('tax_id');
$tax = DB::table('customer_tax')->where('id', $tax_id)->first();
$accMoney = 0;
$freMoney = 0;
$lockMoney = 0;
$avaMoney = 0;
if ($tax) {
// 获取外部接口数据
$a = plugin_sync_api('getAccInfo/code/'.$tax['code']);
$b = CustomerService::getLockMoney($tax['id']);
$accMoney = floatval($a['deARBal']);
$freMoney = floatval($a['iFreMoney']);
$lockMoney = floatval($b[0]['money']);
$avaMoney = floatval($accMoney - $lockMoney);
}
$data = [
'accMoney' => $accMoney,
'freMoney' => $freMoney,
'lockMoney' => $lockMoney,
'avaMoney' => $avaMoney,
];
return $data;
}
public function delete()
{
if (Request::method() == 'POST') {
$id = Request::get('id');
return Form::remove(['code' => 'customer_order', 'ids' => $id]);
}
}
}