计算员工完成的任务和总价 python odoo

count employee finished task and the total price python odoo

所以我需要 excel 文件来计算有多少员工完成了他的特定任务(在本例中为洗车)。我想在 Python 中将特定车辆在包裹中清洗的总价格合计。这是我的 excel 文件

的代码
    import base64
    import io
    from odoo import models


    class InvoiceXlsx(models.AbstractModel):
        _name = 'report.car_wash.report_invoice_xlsx'
        _inherit = 'report.report_xlsx.abstract'

        def generate_xlsx_report(self, workbook, data, invoice):

            sheet = workbook.add_worksheet('')
            bold = workbook.add_format({'bold': True, 'border': 2, 'bg_color': '#FFC900', 
            'align': 'center'})
            border = workbook.add_format({'border': 1})

            sheet.set_column('C:C', 20)
            sheet.set_column('D:D', 20)
            sheet.set_column('E:E', 20)
            sheet.set_column('I:I', 20)
            sheet.set_column('J:J', 20)
            sheet.set_column('K:K', 20)

            row = 2
            col = 2
            total = 0
            vehicle_washed = 0
            total_earned = 0

            sheet.write(row, col, "Vehicle Type", bold)
            sheet.write(row, col + 1, "Package", bold)
            sheet.write(row, col + 2, 'Order Time', bold)
            sheet.write(row, col + 3, "Washer", bold)
            sheet.write(row, col + 4, 'Price', bold)
            sheet.write(row, col + 6, "Washer", bold)
            sheet.write(row, col + 7, "Total Vehicle Washed", bold)
            sheet.write(row, col + 8, "Total Earned", bold)

            invoices = self.env['order.transaction'].browse(data['invoices'])
            for invoice in invoices:
                row += 1

                sheet.write(row, col, invoice.vehicle_id.car_type, border)
                sheet.write(row, col + 1, invoice.package_id.package, border)
                sheet.write(row, col + 2, invoice.order_id.order_time, border)
                sheet.write(row, col + 3, invoice.employee_id.employee_name, border)
                sheet.write(row, col + 4, invoice.price, border)
                sheet.write(row, col + 6, invoice.employee_id.employee_name, border)
                total += invoice.price
                vehicle_washed = invoice.employee_id.employee_name 
                # total_earned = len(vehicle_washed) * invoice.price

            sheet.write(row + 1, col + 4, total, border)
            sheet.write(row, col + 7, vehicle_washed, border)
            sheet.write(row, col + 8, total_earned, border)   

这是当前 excel 文件:

我想从 excel 文件中得到的是清洗器不应该重复,清洗的车辆总数应该计算左侧员工清洗的次数 table(例如:sicuci = 2, radi = 1) and total earned is price * total vehicle washed, 在这种情况下,sicuci 为 110,radi 为 55.

一种方法是在电子表格中添加公式,然后Excel计算总计和其他信息。这样做的有用函数是 'SUM()'、'COUNTIF()' 和 'SUMIF()',尽管还有其他方法可以做到这一点。这是您的代码的电子表格数据编写部分的修改版本。我已经添加了一个 dict 来跟踪独特的员工,但根据您的模型,可能有更简洁的方法来做到这一点。

employees = {}
for invoice in invoices:
    row += 1

    sheet.write(row, col, invoice.vehicle_id.car_type, border)
    sheet.write(row, col + 1, invoice.package_id.package, border)
    sheet.write(row, col + 2, invoice.order_id.order_time, border)
    sheet.write(row, col + 3, invoice.employee_id.employee_name, border)
    sheet.write(row, col + 4, invoice.price, border)

    # Track unique employees.
    employees[invoice.employee_id.employee_name] = True

# Write the price summary.
last_row = row + 1
sheet.write(last_row, col + 4, f'=SUM(G4:G{last_row})', border)

# Write the employee summaries.
row = 3
for employee in employees.keys():
    sheet.write(row, 8, employee, border)
    sheet.write(row, 9, f'=COUNTIF($F:$F${last_row},I{row + 1})', border)
    sheet.write(row, 10, f'=SUMIF($F:$F${last_row},I{row + 1},$G:$G${last_row})', border)

    row += 1

输出:

由于您使用的是 LibreOffice,因此您可能必须强制重新计算公式。