wushaodong 3 anni fa
parent
commit
8424452649

+ 2 - 0
apps/finance/urls.py

@@ -16,4 +16,6 @@ urlpatterns = (
     url(r'^finance_income/data/$', finance_income_list),
     url(r'^finance_income/data/$', finance_income_list),
     url(r'^finance_income/save/$', finance_income_save),
     url(r'^finance_income/save/$', finance_income_save),
     url(r'^finance_income/check/$', finance_income_check),
     url(r'^finance_income/check/$', finance_income_check),
+
+    url(r'^finance_income/bank_data/$', finance_bank_data),
 )
 )

+ 45 - 1
apps/finance/views.py

@@ -13,7 +13,7 @@ from apps.finance.filters import FinanceCategoryFilter, FinancePurposeFilter, Fi
 from apps.finance.models import FinanceCategory, FinancePurpose, dbFinanceIncome
 from apps.finance.models import FinanceCategory, FinancePurpose, dbFinanceIncome
 from apps.finance.serializers import FinanceCategorySerializer, FinancePurposeSerializer, FinanceIncomeSerializer
 from apps.finance.serializers import FinanceCategorySerializer, FinancePurposeSerializer, FinanceIncomeSerializer
 from apps.account.decorators import token_required, permission_required
 from apps.account.decorators import token_required, permission_required
-from apps.foundation.models import BizLog
+from apps.foundation.models import BizLog, Option
 
 
 from libs.http import JSONResponse, JSONError, DataGridJSONResponse
 from libs.http import JSONResponse, JSONError, DataGridJSONResponse
 from libs import utils
 from libs import utils
@@ -184,3 +184,47 @@ def finance_income_check(request):
         traceback.print_exc()
         traceback.print_exc()
         return JSONError(u'保存失败!')
         return JSONError(u'保存失败!')
     return JSONResponse({})
     return JSONResponse({})
+
+@csrf_exempt
+@permission_required('finance.view_finance_income')
+def finance_bank_data(request):
+    create_time = request.GET.get('create_time')
+    end_time = request.GET.get('end_time')
+    data = []
+    more = {
+        'qichu_yue': 0,
+        'benqi_shouru': 0,
+        'benqi_fachu': 0,
+        'qimo_yue': 0,
+    }
+    rows = dbFinanceIncome.objects.filter(check_status=settings.PASS)
+    accounts = Option.objects.filter(type=Option.PAYMENT_ACCOUNT, enabled=True)
+    for account in accounts:
+        qichu_yue = rows.filter(create_time__lt=create_time, account=account).aggregate(amount=Sum('amount'))['amount']
+        benqi_shouru = rows.filter(Q(create_time__gte=create_time,create_time__lte=end_time,account=account,),
+                                   Q(type=dbFinanceIncome.SALE_ENTRY_PAY,) | Q(purpose__type=FinancePurpose.PAY,)
+                                   ).aggregate(amount=Sum('amount'))['amount']
+
+        benqi_fachu = rows.filter(create_time__gte=create_time,create_time__lte=end_time,account=account,
+                                   ).exclude(Q(type=dbFinanceIncome.SALE_ENTRY_PAY) | Q( purpose__type=FinancePurpose.PAY,)).aggregate(amount=Sum('amount'))['amount']
+        qimo_yue = rows.filter(create_time__lte=end_time, account=account).aggregate(amount=Sum('amount'))['amount']
+
+        more['qichu_yue'] += qichu_yue or 0
+        more['benqi_shouru'] += benqi_shouru or 0
+        more['benqi_fachu'] += benqi_fachu or 0
+        more['qimo_yue'] += qimo_yue or 0
+        item = {
+            'name':account.name,
+            'qichu_yue':Formater.formatAmountShow(qichu_yue),
+            'benqi_shouru':Formater.formatAmountShow(benqi_shouru),
+            'benqi_fachu':Formater.formatAmountShow(benqi_fachu),
+            'qimo_yue':Formater.formatAmountShow(qimo_yue),
+        }
+        data.append(item)
+    more = {
+        'qichu_yue': Formater.formatAmountShow(more['qichu_yue']),
+        'benqi_shouru': Formater.formatAmountShow(more['benqi_shouru']),
+        'benqi_fachu': Formater.formatAmountShow(more['benqi_fachu']),
+        'qimo_yue': Formater.formatAmountShow(more['qimo_yue']),
+    }
+    return DataGridJSONResponse(data, len(data), more)

+ 1 - 1
uis/views/goods/goods.html

@@ -236,4 +236,4 @@
         });
         });
     </script>
     </script>
 </body>
 </body>
-</html>
+</html>

+ 3 - 0
uis/views/index.html

@@ -253,6 +253,9 @@
                 <dd data-name="nav" data-permission="finance.view_finance_income">
                 <dd data-name="nav" data-permission="finance.view_finance_income">
                   <a lay-href="statistics/finance_index.html">收支管理</a>
                   <a lay-href="statistics/finance_index.html">收支管理</a>
                 </dd>
                 </dd>
+                <dd data-name="nav" data-permission="finance.view_finance_income">
+                  <a lay-href="statistics/bank_index.html">银行总账</a>
+                </dd>
               </dl>
               </dl>
             </li>
             </li>
             <li data-name="set" class="layui-nav-item">
             <li data-name="set" class="layui-nav-item">

+ 240 - 0
uis/views/statistics/bank_index.html

@@ -0,0 +1,240 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>银行总账</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+          content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
+    <style type="text/css">
+        .LAY-btns .layui-nav {
+            padding-left: 0;
+            padding-right: 10px;
+            top: -4px;
+            margin: 0 10px;
+            border: 0;
+            background-color: #009688;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-item {
+            line-height: 30px;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child {
+            top: 34px;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-bar {
+            display: none;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a {
+            color: #333;
+            background-color: #fff;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a:hover {
+            background-color: #f2f2f2;
+            color: #000;
+        }
+
+        .seach_items {
+            float: right;
+            margin-left: 10px;
+        }
+
+    </style>
+</head>
+<body>
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body" pad15>
+            <div class="layui-row layui-col-space15">
+                <div class="layui-col-md12">
+                    <div class="LAY-btns" style="margin-bottom: 10px;">
+                        <form class="layui-form seach_items" lay-filter="query-form-element">
+                            <div class="seach_items">
+                                <button class="layui-btn" lay-submit lay-filter="query-form-element"><i
+                                        class="layui-icon layui-icon-search"></i>查询
+                                </button>
+                            </div>
+
+                            <div class="seach_items">
+                                <input type="text" class="layui-input" autocomplete="off" name="end_time"
+                                       id="end_time" placeholder="终止时间">
+                            </div>
+
+                            <div class="seach_items" style="margin-top: 5px;">
+                                终止时间:
+                            </div>
+                            <div class="seach_items">
+                                <input type="text" class="layui-input" autocomplete="off" name="create_time"
+                                       id="create_time" placeholder="开始时间">
+                            </div>
+                            <div class="seach_items" style="margin-top: 5px;">
+                                开始时间:
+                            </div>
+                        </form>
+                        <div style="clear: both;"></div>
+                    </div>
+                    <table class="layui-hide" id="datagrid" lay-filter="datagrid-operate"></table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script src="../../layuiadmin/layui/layui.js?t=1"></script>
+<script>
+    var _params = '';
+    layui.config({
+        base: '../../../layuiadmin/' //静态资源所在路径
+    }).extend({
+        index: 'lib/index', //主入口模块
+        utils: 'utils'
+    }).use(['index', 'table', 'laydate', 'form', 'utils'], function () {
+        var $ = layui.$;
+        var table = layui.table
+            , form = layui.form
+            , laydate = layui.laydate;
+        var date = new Date();
+        var create_time = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + '01'
+        var end_time = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate()
+        laydate.render({
+            elem: '#create_time'
+            , value: create_time
+
+        });
+        laydate.render({
+            elem: '#end_time'
+            , value: end_time
+
+        });
+        table.render({
+            elem: '#datagrid'
+            , url: '/finance/finance_income/bank_data/'
+            , cols: [[
+                {field: 'name', title: '银行账户', width: 150}
+                , {field: 'qichu_yue', title: '期初余额', width: 150}
+                , {field: 'benqi_shouru', title: '本期收入', width: 150}
+                , {field: 'benqi_fachu', title: '本期发出', width: 150}
+                , {field: 'qimo_yue', title: '期末余额', width: 150}
+            ]]
+            , totalRow: true
+            , height: 'full-104'
+            , where: {create_time: create_time, end_time: end_time}
+            , parseData: function (res) {
+                var cols = this.cols[0];
+                for (var i in cols) {
+                    if (cols[i].field == 'qichu_yue') {
+                        cols[i].totalRowText = res.more.qichu_yue;
+                    }
+                    else if (cols[i].field == 'benqi_shouru') {
+                        cols[i].totalRowText = res.more.benqi_shouru;
+                    }
+                    else if (cols[i].field == 'benqi_fachu') {
+                        cols[i].totalRowText = res.more.benqi_fachu;
+                    }
+                    else if (cols[i].field == 'qimo_yue') {
+                        cols[i].totalRowText = res.more.qimo_yue;
+                    }
+                }
+                return {
+                    "code": res.code, //解析接口状态
+                    "count": res.count, //解析数据长度
+                    "data": res.data //解析数据列表
+                };
+            }
+            , done: function () {
+                layui.index.removeNoPermButtons();
+            }
+        });
+
+        //监听工具条
+        table.on('tool(datagrid-operate)', function (obj) {
+            var data = obj.data;
+            if (obj.event === 'edit') {
+                table.editdata = data;
+                if (data.check_status === 1) {
+                    layer.msg('入库单已审核,无法修改!');
+                    return;
+                }
+                layer.open({
+                    type: 2,
+                    title: '修改',
+                    shadeClose: false,
+                    area: ['50%', '60%'],
+                    btn: ['保存', '取消'],
+                    yes: function (index, dom) {
+                        layui.onSubmitChild = function (data) {
+                            layer.close(index);
+                            table.reload('datagrid', {});
+                        };
+                        layui.submitChild();
+                    },
+                    btn2: function (index, layero) {
+                        layer.close(index);//关闭当前按钮
+                    },
+                    content: 'finance_edit.html?id=' + data.id
+                });
+            } else if (obj.event === 'check') {
+                layer.confirm('确定要审核吗?', function (index) {
+
+                    layer.close(index);
+                    layui.admin.req({
+                        url: '/finance/finance_income/check/?check_status=1&id=' + data.id
+                        , done: function (res) {
+                            table.reload('datagrid', {});
+                        }
+                    });
+                });
+            } else if (obj.event === 'checkout') {
+                layer.confirm('确定要撤销审核吗?', function (index) {
+                    layer.close(index);
+                    layui.admin.req({
+                        url: '/finance/finance_income/check/?check_status=0&id=' + data.id
+                        , done: function (res) {
+                            table.reload('datagrid', {});
+                        }
+                    });
+                });
+            }
+        });
+
+        $('#btn_add').on('click', function () {
+            layer.open({
+                type: 2,
+                title: '添加',
+                area: ['40%', '65%'],
+                btn: ['保存', '取消'],
+                yes: function (index, dom) {
+                    layui.onSubmitChild = function (data) {
+                        layer.close(index);
+                        table.reload('datagrid', {});
+                    };
+                    layui.submitChild();
+                },
+                btn2: function (index, layero) {
+                    layer.close(index);//关闭当前按钮
+                },
+                content: 'finance_edit.html'
+            });
+        });
+
+        form.on('submit(query-form-element)', function (data) {
+            //layer.msg(JSON.stringify(data.field));
+            _params = data.field;
+            table.reload('datagrid', {
+                where: data.field,
+                page: {curr: 1}
+            });
+            layer.closeAll();
+            return false
+        });
+    })
+</script>
+</body>
+</html>

+ 1 - 1
uis/views/statistics/finance_index.html

@@ -164,7 +164,7 @@
             if (obj.event === 'edit') {
             if (obj.event === 'edit') {
                 table.editdata = data;
                 table.editdata = data;
                 if (data.check_status === 1) {
                 if (data.check_status === 1) {
-                    layer.msg('入库单已审核,无法修改!');
+                    layer.msg('收支单已审核,无法修改!');
                     return;
                     return;
                 }
                 }
                 layer.open({
                 layer.open({