1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/sign/report/green_saving_reports.py
2024-12-10 09:04:09 +07:00

55 lines
2.1 KiB
Python

from odoo import api, models
class GreenSavingsReport(models.AbstractModel):
_name = 'report.sign.green_savings_report'
_description = 'Green Savings Report model'
@api.model
def _get_report_values(self, docids, data=None):
sent_or_signed_sign_requests = self.env['sign.request'].sudo().with_context(active_test=False).search([('state', 'in', ['sent', 'signed'])])
sheets_sum = sum([self._sheets_from_sign_request(sign_request) for sign_request in sent_or_signed_sign_requests])
# reference https://c.environmentalpaper.org/
total_kilos_paper = 0.005 * sheets_sum
total_kilos_paper = total_kilos_paper * 0.9 # consider 10% recycled paper
water = total_kilos_paper * 88.578
showers = water / 65
wood = total_kilos_paper * 3.62
trees = (wood * 12) / 1000
carbon = total_kilos_paper * 8.482
gas_fuel = carbon / 8.9
waste = total_kilos_paper * 0.585
cans = (1000 * waste) / 15
energy = total_kilos_paper * 7.913
computer_hours = energy / 0.75
return {
'sheets_sum': sheets_sum,
'total_kilos_paper': round(total_kilos_paper, 2),
'water': round(water, 2),
'showers': round(showers),
'wood': round(wood, 2),
'trees': round(trees),
'carbon': round(carbon, 2),
'gas_fuel': round(gas_fuel, 2),
'waste': round(waste, 2),
'cans': round(cans),
'energy': round(energy, 2),
'computer_hours': round(computer_hours),
'title': 'Green Savings Report'
}
@api.model
def _sheets_from_sign_request(self, sign_request):
signers = sign_request.request_item_ids.partner_id
if sign_request.state == 'sent':
# if sign request is sent, followers didn't receive the request yet. So we only account for signers
return sign_request.template_id.num_pages * len(signers)
# else we count cc_partners and signers
return sign_request.template_id.num_pages * (len(sign_request.cc_partner_ids) + len(signers))