1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
from odoo import fields, models, api
from datetime import datetime, timedelta
import logging
_logger = logging.getLogger(__name__)
class SalesTarget(models.Model):
_name = 'sales.target'
partner_id = fields.Many2one('res.partner', string='Customer')
period = fields.Integer(string='Periode')
omset_last_year = fields.Float(string='Omset Tahun Lalu')
ongoing_omset_odoo = fields.Float(string='Omset Berjalan Odoo', compute='_compute_ongoing_omset')
ongoing_omset_accurate = fields.Float(string='Omset Berjalan Accurate')
ongoing_omset_adempiere = fields.Float(string='Omset Berjalan ADempiere')
ongoing_omset_total = fields.Float(string='Total Omset', compute='_compute_total_omset')
target = fields.Float(string='Target')
ach_per_year = fields.Float(string='Ach/Year%', compute='_compute_achievement')
ach_per_month = fields.Float(string='Ach/Month%', compute='_compute_achievement')
sales_id = fields.Many2one('res.users', string='Salesperson', compute='_compute_partner')
reference = fields.Char(string='Reference', compute='_compute_partner')
def _compute_partner(self):
for sales_target in self:
sales_target.sales_id = sales_target.partner_id.user_id
sales_target.reference = sales_target.partner_id.reference_number
def _compute_achievement(self):
for sales_target in self:
if not sales_target.target or sales_target.target <= 0:
sales_target.ach_per_year = 0
sales_target.ach_per_month = 0
return
current_time = datetime.now()
current_month = current_time.month
sales_target.ach_per_year = sales_target.ongoing_omset_total/sales_target.target*100
sales_target.ach_per_month = sales_target.ongoing_omset_total/((sales_target.target/12)*current_month)
def _compute_total_omset(self):
for target in self:
target.ongoing_omset_total = target.ongoing_omset_odoo + target.ongoing_omset_accurate + target.ongoing_omset_adempiere
def _compute_ongoing_omset(self):
for target in self:
target.ongoing_omset_odoo = 0
if not target.ids:
return True
partners = []
if target.partner_id.parent_id:
parent_id = target.partner_id.parent_id
else:
parent_id = target.partner_id
partners += parent_id.child_ids
partners.append(parent_id)
datefrom = datetime(target.period, 1, 1, 00, 00)
# datefrom = datefrom.strftime('%Y-%m-%d %H:%M:%S')
dateto = datetime(target.period, 12, 31, 23, 59)
# dateto = dateto.strftime('%Y-%m-%d %H:%M:%S')
total_omset = 0
for partner in partners:
domain = [
('partner_id', '=', partner.id),
('state', 'not in', ['draft', 'cancel']),
('move_type', 'in', ('out_invoice', 'out_refund')),
('invoice_date', '>=', datefrom),
('invoice_date', '<=', dateto)
]
invoices = target.env['account.move'].search(domain)
for invoice in invoices:
total_omset += invoice.amount_untaxed
target.ongoing_omset_odoo = total_omset
|