dtcloud 高效的分类统计与查询 read_group

    @http.route('/sc_ding/search_finance', type='http', auth="none", csrf=False)
    def sc_ding_search_finance(self, model='res.company', id=None, **kw):
        cr, uid, context, pool = request.cr, odoo.SUPERUSER_ID, request.context, request.env
        values = {}
        year = datetime.now().year
        name = []  # 名称
        in_amount = []  # 分类收入
        out_amount = []  # 分分支出
        amount = 0.00  # 预留利润
        #:::所有分类查询出来进行循环



        category = pool['ri.account.category'].sudo().search([('parent_id', '=', False)])

        for line in category:
            name.append(line.name)

            #计算出分类应收应付

            domains = []
            if kw.get('type') == 'month':
                domain = [('month', '=', int(kw.get('month')))]
                domains.append(domain)
            if kw.get('type') == 'week':
                domain = [('week', '=', int(kw.get('week')))]
                domains.append(domain)

            if kw.get('type') == 'year':
                domain = [('year', '=', int(kw.get('year')))]
                domains.append(domain)

            if kw.get('type') == 'quarter':
                domain = [('date', '>=', kw.get('data_start')), ('date', '<=', kw.get('data_end'))]
                domains.append(domain)
            domain = [('category_id', 'in', line.child_id._ids), ('state', '=', '已审核')]
            domains.append(domain)
            domain = expression.AND(domains)
            order_groups = pool['ri.account.line'].sudo().read_group(domain=domain, fields=['amount'],
                                                                     groupby=['type'], orderby="parent_id desc")

            category_in_amount = 0.00
            category_out_amount =0.00

            for group in order_groups:
                if group['type'] == 'in':
                    category_in_amount = category_in_amount + group['amount']
                    amount +=  group['amount']
                elif group['type'] == 'out':
                    category_out_amount = category_out_amount + group['amount']
                    amount = amount - group['amount']

            in_amount.append(category_in_amount/10000)
            out_amount.append(-category_out_amount/10000)

        values['name'] = name
        values['in_amount'] = in_amount
        values['out_amount'] = out_amount
        values['amount'] = amount/10000

        return json.dumps(values)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

中亿丰数字科技集团有限公司

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

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

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

打赏作者

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

抵扣说明:

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

余额充值