summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/sales_target.py
blob: c31a44704fd68dcc7fe864dea70415012827a8e2 (plain)
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