InvoiceController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. <?php
  2. namespace App\Admin\Controllers\Company;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Invoice;
  5. use App\Models\InvoiceCategory;
  6. use App\Models\Order;
  7. use App\Services\Common\PmsService;
  8. use Encore\Admin\Auth\Permission;
  9. use Encore\Admin\Controllers\HasResourceActions;
  10. use Encore\Admin\Facades\Admin;
  11. use Encore\Admin\Form;
  12. use Encore\Admin\Grid;
  13. use Encore\Admin\Layout\Content;
  14. use Encore\Admin\Show;
  15. class InvoiceController extends Controller
  16. {
  17. use HasResourceActions;
  18. protected $pmsService;
  19. /**
  20. * InvoiceController constructor.
  21. * @param $pmsService
  22. */
  23. public function __construct(PmsService $pmsService)
  24. {
  25. $this->pmsService = $pmsService;
  26. }
  27. /**
  28. * Index interface.
  29. *
  30. * @param Content $content
  31. * @return Content
  32. */
  33. public function index(Content $content)
  34. {
  35. return $content
  36. ->header('发票列表')
  37. ->description('列表')
  38. ->body($this->grid());
  39. }
  40. /**
  41. * Show interface.
  42. *
  43. * @param mixed $id
  44. * @param Content $content
  45. * @return Content
  46. */
  47. public function show($id, Content $content)
  48. {
  49. return $content
  50. ->header('Detail')
  51. ->description('description')
  52. ->body($this->detail($id));
  53. }
  54. /**
  55. * Edit interface.
  56. *
  57. * @param mixed $id
  58. * @param Content $content
  59. * @return Content
  60. */
  61. public function edit($id, Content $content)
  62. {
  63. return $content
  64. ->header('修改')
  65. ->description('description')
  66. ->body($this->editForm()->edit($id));
  67. }
  68. /**
  69. * Create interface.
  70. *
  71. * @param Content $content
  72. * @return Content
  73. */
  74. public function create(Content $content)
  75. {
  76. return $content
  77. ->header('Create')
  78. ->description('description')
  79. ->body($this->form());
  80. }
  81. /**
  82. * Make a grid builder.
  83. *
  84. * @return Grid
  85. */
  86. protected function grid()
  87. {
  88. Permission::check('invoice_manager_index');
  89. $grid = new Grid(new Invoice);
  90. $grid->model()->when(get_subsite_id()>0, function ($querys) {
  91. $querys->whereHas('companys', function ($query) {
  92. $query->where('subsite_id', get_subsite_id());
  93. });
  94. })->orderByRaw('audit asc, created_at desc');
  95. $grid->cid('服务名称')->display(function ($cid) {
  96. $list = InvoiceCategory::list()->pluck('categoryname', 'id');
  97. foreach ($list as $key => $value) {
  98. if ($cid == $key) {
  99. return $value;
  100. }
  101. }
  102. });
  103. $grid->audit('处理状态')->display(function ($audit) {
  104. switch ($audit) {
  105. case 0:
  106. return "<span style='color:green'>未开票</span>";
  107. break;
  108. case 1:
  109. return "<span style='color:#55acee'>已开票</span>";
  110. break;
  111. case 2:
  112. return "<span style='color:red'>取消</span>";
  113. break;
  114. }
  115. });
  116. $grid->title('发票抬头')->display(function ($title) {
  117. switch ($title) {
  118. case 1:
  119. return "企业";
  120. break;
  121. case 2:
  122. return "个人";
  123. break;
  124. }
  125. });
  126. $grid->oid('订单号');
  127. $grid->order_num('金额')->display(function ($order_num){
  128. return Order::where('id',$order_num)->value('amount');
  129. });
  130. $grid->organization('单位名称');
  131. $grid->addressee('收件人');
  132. $grid->mobile('收件人电话');
  133. $grid->address('邮寄地址');
  134. $grid->postcode('邮编');
  135. $grid->actions(function ($actions) {
  136. if (Admin::user()->can('invoice_manager_index_edit')) {
  137. $actions->disableEdit(false);
  138. }
  139. if (Admin::user()->can('invoice_manager_index_delete')) {
  140. $actions->disableDelete(false);
  141. }
  142. });
  143. $grid->filter(function ($filter) {
  144. $filter->column(1/2, function ($filter) {
  145. $filter->where(function ($query) {
  146. $query->whereHas('companys', function ($query) {
  147. $query->where('companyname', 'like', "%{$this->input}%");
  148. });
  149. }, '公司名称');
  150. $filter->like('addressee', '收件人');
  151. $filter->equal('uid', '会员ID');
  152. $filter->between('created_at', '添加时间')->datetime();
  153. });
  154. $filter->column(1/2, function ($filter) {
  155. $filter->equal('audit', '处理状态')->select([0=>'未开票',1=>'已开票',2=>'取消']);
  156. $filter->equal('title', '发票抬头')->select(['1'=>'企业','2'=>'个人']);
  157. $filter->equal('cid', '发票内容')->select(
  158. InvoiceCategory::list()->pluck('categoryname', 'id')
  159. );
  160. });
  161. });
  162. return $grid;
  163. }
  164. /**
  165. * Make a show builder.
  166. *
  167. * @param mixed $id
  168. * @return Show
  169. */
  170. protected function detail($id)
  171. {
  172. $show = new Show(Invoice::findOrFail($id));
  173. $show->cid('服务名称')->as(function ($cid) {
  174. $list = InvoiceCategory::list()->pluck('categoryname', 'id');
  175. foreach ($list as $key => $value) {
  176. if ($cid == $key) {
  177. return $value;
  178. }
  179. }
  180. });
  181. $show->audit('处理状态')->as(function ($audit) {
  182. switch ($audit) {
  183. case 0:
  184. return "未开票";
  185. break;
  186. case 1:
  187. return "已开票";
  188. break;
  189. case 2:
  190. return "取消";
  191. break;
  192. }
  193. });
  194. $show->title('发票抬头')->as(function ($title) {
  195. switch ($title) {
  196. case 1:
  197. return "企业";
  198. break;
  199. case 2:
  200. return "个人";
  201. break;
  202. }
  203. });
  204. $show->organization('单位名称');
  205. $show->addressee('收件人');
  206. $show->deposit_bank('开户行');
  207. $show->account('开户账号');
  208. $show->mobile('收件人电话');
  209. $show->address('邮寄地址');
  210. $show->postcode('邮编');
  211. return $show;
  212. }
  213. /**
  214. * Make a form builder.
  215. *
  216. * @return Form
  217. */
  218. protected function form()
  219. {
  220. $form = new Form(new Invoice);
  221. $form->display('ID');
  222. $form->display('Created at');
  223. $form->display('Updated at');
  224. return $form;
  225. }
  226. protected function editForm()
  227. {
  228. Permission::check('invoice_manager_index_edit');
  229. $form = new Form(new Invoice);
  230. $form->html("<h4>订单信息</h4>");
  231. $form->display('orders.is_pay', '支付状态')->with(function ($is_pay) {
  232. switch ($is_pay) {
  233. case 3:
  234. return "已取消";
  235. break;
  236. case 1:
  237. return '待支付';
  238. break;
  239. case 2:
  240. return '已支付';
  241. break;
  242. }
  243. });
  244. $form->display('orders.uid', '申请充值会员');
  245. $form->display('orders.amount', '订单金额');
  246. $form->display('orders.pay_amount', '现金支付金额');
  247. $form->display('orders.pay_points', '积分支付额');
  248. $form->display('orders.order_type', '订单类型')->with(function ($order_type) {
  249. $arr = [
  250. 1=>"套餐升级",
  251. 2=>"充值积分",
  252. 3=>"简历置顶",
  253. 4=>"醒目标签",
  254. 5=>"简历模板",
  255. 6=>"简历包",
  256. 7=>"短信包",
  257. 8=>"职位置顶",
  258. 9=>"职位紧急",
  259. 10=>"企业模板",
  260. 12=>"预约刷新职位",
  261. 13=>"职位刷新",
  262. 14=>"简历下载"
  263. ];
  264. foreach ($arr as $key => $val) {
  265. if ($key == $order_type) {
  266. return $val;
  267. }
  268. }
  269. });
  270. $form->display('orders.payment_cn', '支付方式');
  271. $form->display('orders.oid', '订单号');
  272. $form->display('orders.created_at', '申请时间');
  273. $form->display('orders.payment_time', '支付时间')->with(function ($payment_time) {
  274. return date('Y-m-d H:i:s', $payment_time);
  275. });
  276. $form->display('orders.notes', '备注');
  277. $form->html("<h4>发票信息</h4>");
  278. $form->display('cid', '发票内容')->with(function ($cid) {
  279. $list = InvoiceCategory::list()->pluck('categoryname', 'id');
  280. foreach ($list as $key => $value) {
  281. if ($cid == $key) {
  282. return $value;
  283. }
  284. }
  285. });
  286. $form->display('organization', '发票抬头');
  287. $form->display('addressee', '收件人');
  288. $form->display('deposit_bank', '开户行');
  289. $form->display('account', '开户账号');
  290. $form->display('tax_number', '信用代码证号');
  291. $form->display('mobile', '手机号');
  292. $form->display('address', '邮寄地址');
  293. $form->display('postcode', '邮寄地址');
  294. $form->radio('audit', '审核状态')->options([1=>'已开票', 2=>'取消', 0=>'未开票'])->attribute('class', 'audit');
  295. $form->text('reason', '取消原因')->attribute('id', 'reason');
  296. $js = <<<EOT
  297. $('.audit').on('ifCreated',function(){
  298. if(true == $(this).is(':checked')){
  299. var audit = $(this).val();
  300. if(audit == 2){
  301. $('#reason').closest(".form-group").css('display','block');
  302. }else{
  303. $('#reason').closest(".form-group").css('display','none');
  304. }
  305. }
  306. });
  307. $('.audit').on('ifChecked', function(){
  308. var audit = $(this).val();
  309. if(audit == 2){
  310. $('#reason').closest(".form-group").css('display','block');
  311. }else{
  312. $('#reason').closest(".form-group").css('display','none');
  313. }
  314. });
  315. EOT;
  316. Admin::script($js);
  317. $form->saved(function (Form $form) {
  318. $audit = $form->audit;
  319. $reason = $form->reason?$form->reason:'无';
  320. $html = '发票状态为:';
  321. switch ($audit) {
  322. case 1:
  323. $html .= "已开票";
  324. break;
  325. case 2:
  326. $html .= "取消";
  327. break;
  328. case 0:
  329. $html .= "未开票";
  330. break;
  331. }
  332. $insert_data = array(
  333. 'utype' => 1,
  334. 'msgtype' => 1,
  335. 'msgfromuid' => admin::user()->id,
  336. 'msgfrom' => admin::user()->username,
  337. 'msgtoname' =>getCompanyName($form->model()->orders->uid)->companyname,
  338. 'msgtouid' => $form->model()->orders->uid,
  339. 'message' => $html.',【备注】'.$reason,
  340. 'new' => 1,
  341. 'created_at' =>date('Y-m-d H:i:s', time()),
  342. 'updated_at' =>date('Y-m-d H:i:s', time()),
  343. );
  344. $this->pmsService->addBatchPms($insert_data);
  345. });
  346. return $form;
  347. }
  348. public function update($id)
  349. {
  350. Permission::check('invoice_manager_index_edit');
  351. return $this->editForm()->update($id);
  352. }
  353. }