插件测试站 http://all.zkdygl.com/course/4
<?php
namespace InvoicePlugin\Controller\AdminV2;
use AppBundle\Common\Paginator;
use AppBundle\Controller\AdminV2\BaseController;
use Biz\System\Service\SettingService;
use Biz\User\Service\UserService;
use Codeages\Biz\Invoice\Service\InvoiceService;
use Codeages\Biz\Order\Service\OrderService;
use Codeages\Biz\Pay\Service\AccountService;
use Codeages\Biz\Pay\Service\PayService;
use Symfony\Component\HttpFoundation\Request;
use AppBundle\Common\ArrayToolkit;
class InvoiceController extends BaseController
{
public function indexAction(Request $request)
{
$conditions = $request->query->all();
if (!empty($conditions['nickname'])) {
$nickname = $conditions['nickname'];
$userCount = $this->getUserService()->countUsers(array('nickname' => $nickname));
$users = $this->getUserService()->searchUsers(
array('nickname' => $nickname),
array('createdTime' => 'DESC'),
0,
$userCount
);
$userIds = ArrayToolkit::column($users, 'id');
unset($conditions['nickname']);
$conditions['userIds'] = !empty($userIds) ? ArrayToolkit::column($users, 'id') : array(-1);
}
$paginator = new Paginator(
$request,
$this->getInvoiceService()->countInvoices($conditions),
20
);
$invoices = $this->getInvoiceService()->searchInvoices(
$conditions,
array('created_time' => 'DESC'),
$paginator->getOffsetCount(),
$paginator->getPerPageCount()
);
$userIds = ArrayToolkit::column($invoices, 'user_id');
$userIds = array_merge($userIds, ArrayToolkit::column($invoices, 'review_user_id'));
$users = $this->getUserService()->findUsersByIds($userIds);
return $this->render('InvoicePlugin:admin-v2/invoice:index.html.twig', array(
'invoices' => $invoices,
'paginator' => $paginator,
'users' => $users,
));
}
public function invoiceAction(Request $request, $id, $type)
{
$invoice = $this->getInvoiceService()->getInvoice($id);
if (empty($invoice)) {
throw $this->createNotFoundException('invoice not found');
}
$view = ($type == 'electronic') ? 'InvoicePlugin:admin-v2/invoice:electronic-invoice-modal.html.twig' : 'InvoicePlugin:admin-v2/invoice:paper-invoice-modal.html.twig';
if ($request->getMethod() == 'POST') {
$fields = $request->request->all();
$this->getInvoiceService()->finishInvoice($id, $fields);
return $this->createJsonResponse(true);
}
return $this->render($view, array(
'invoice' => $invoice,
'type' => $type,
));
}
public function showDetailAction(Request $request, $id)
{
$invoice = $this->getInvoiceService()->getInvoice($id);
if (empty($invoice)) {
throw $this->createNotFoundException('invoice not found');
}
$condition = array('invoice_sn' => $invoice['sn']);
$paginator = new Paginator(
$request,
$this->getPayService()->countTrades($condition),
5
);
$paymentTrades = $this->getPayService()->searchTrades(
$condition,
array('created_time' => 'DESC'),
$paginator->getOffsetCount(),
$paginator->getPerPageCount()
);
$cashConditions = array(
'amount_type' => 'coin',
'trade_sns' => ArrayToolkit::column($paymentTrades, 'trade_sn'),
'except_user_id' => 0,
'created_time_GTE' => 0,
'created_time_LTE' => time()
);
$cashes = $this->getAccountService()->searchCashflows($cashConditions, array('id' => 'DESC'), 0, PHP_INT_MAX);
$cashes = ArrayToolkit::index($cashes, 'trade_sn');
foreach ($paymentTrades as &$paymentTrade) {
$paymentTrade['cash_flow'] = isset($cashes[$paymentTrade['trade_sn']]) ? $cashes[$paymentTrade['trade_sn']] : array();
}
return $this->render('InvoicePlugin:admin-v2/invoice:detail-modal.html.twig', array(
'invoice' => $invoice,
'paymentTrades' => $paymentTrades,
'paginator' => $paginator,
));
}
public function settingAction(Request $request)
{
$default = array(
'enabled' => 0,
'types' => array('electronic'),
'time_limit' => 0,
'freight_type' => 'cash',
'free_freight_money' => 0,
'content' => '',
);
$invoice = $this->getSettingService()->get('invoice', $default);
if ('POST' == $request->getMethod()) {
$invoice = $request->request->all();
$this->getSettingService()->set('invoice', $invoice);
$this->setFlashMessage('success', 'site.save.success');
}
return $this->render('InvoicePlugin:admin-v2/invoice:setting.html.twig', array(
'invoice' => $invoice,
));
}
/**
* @return SettingService
*/
protected function getSettingService()
{
return $this->createService('System:SettingService');
}
/**
* @return InvoiceService
*/
protected function getInvoiceService()
{
return $this->createService('Invoice:InvoiceService');
}
/**
* @return OrderService
*/
protected function getOrderService()
{
return $this->createService('Order:OrderService');
}
/**
* @return UserService
*/
protected function getUserService()
{
return $this->createService('User:UserService');
}
/**
* @return PayService
*/
protected function getPayService()
{
return $this->createService('Pay:PayService');
}
/**
* @return AccountService
*/
protected function getAccountService()
{
return $this->createService('Pay:AccountService');
}
}
应用介绍
支持电子普通发票、纸质普通发票、专项发票三种发票类型,可由网校自定义选择提供。学员可在账户中心选择要开票的订单以及发票类型,填写发票信息提交后,由网校管理员审核并进行开票,支持网校管理员批量导出发票申请信息。
更新简介
1.1.4 (2020-02-18)
修复:部分情况下,学员填写信息完毕之后点击提交,信息全部丢失
1.1.3 (2020-01-16)
修复:部分情况下,学员申请开票报错
1.1.2 (2019-12-27) 修复: 修复已知BUG
1.1.1 (2019-12-25)
修复:某些情况下,批量处理功能导入文件时无法导入的问题
优化:适配新后台
1.0.7 (2019-11-07)
优化:申请普通发票时,新增联系方式字段;
优化:发票申请被拒后,会重新出现在用户的开票订单中;
1.0.6 (2019-10-24)
优化:导出发票申请记录时,支持导出商品明细;
修复:旧版微网校中,点击发票申请无反应;
1.0.5 (2019-09-05)
优化:优化收件地址文案
优化:联系方式支持固定电话
1.0.4 (2018-12-27)
优化:导出的开票信息里,优化【地址】为【收件地址】
发票插件V1.0.3 修复:导出发票申请记录,不显示收件人。