Symfony网校edusoho发票申请插件二次开发-附代码 InvoicePlugin

插件测试站 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 修复:导出发票申请记录,不显示收件人。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
EduSoho开源网校平台系统源码是一套PHP版开源网校代码建站系统,而且免费提供给非商业用途的用户使用。EduSoho开源网校平台系统所在的阔知网络是一家专注在线教育平台系统研发与教育运营服务的互联网企业,其研发的开源网校系统提供了基础的功能,包括直播、录播、考试题库等多项功能,用户可以实现根据不同的用户给予不同的权限,观看第三方的视频内容,需要的用户可以下载安装使用,体验一下EduSoho开源网校系统的各项功能。 Edusoho开源网校系统功能特点 1、独创学习引擎,打造互动式课堂 EduSoho独创的学习引擎,开发了一对一直播、大班直播、点播课程、音频课程、作业、考试等12种教学手段,让教育机构按需打造个性化的教学模式。 2、题库系统,智能化开展考试测评 EduSoho独立研发的在线题库平台是针对试题管理、智能组卷、在线做题、课后作业、模拟考试的需求所提供的整体的解决方案。 3、移动端学习,把学校装进口袋 配套阔知学堂APP、专为微信端优化的微网校和小程序,满足学员碎片化学习需求,随时随地在线学习。 4、云视频 专为在线教育研发的视频技术-TLP2.0专利技术,加密传输,动态解密播放,实现了盗版溯源等。 5、微信营销平台,实现网校快速引流 微营销工具、微网校和小程序,无缝对接网校微信公众号和社群,打造网校微信运营生态,轻松实现快速引流。 6、智能营销系统,招生转化率翻倍 从定位目标客户到促销成交,多种工具帮助网校打通招生转化路径,从招生到课程营销,营收增长80%。 7、网校管理ERP,让你轻松掌握运营管理 可视化图表结合面板式管理后台,让网校的管理轻松高效。 EduSoho开源网校平台系统源码截图 相关阅读 在线教育,如何选择合适的视频“云”服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linlinlove2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值