-
Notifications
You must be signed in to change notification settings - Fork 72
/
agreement_serviceprofile.py
164 lines (149 loc) · 7.2 KB
/
agreement_serviceprofile.py
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# Copyright (C) 2019 Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, models
class AgreementServiceProfile(models.Model):
_inherit = ['agreement.serviceprofile']
@api.model
def create(self, vals):
# If SP is created with a managed equipment
if vals.get('equipment_id', False):
new = self.env['maintenance.equipment'].\
browse(vals.get('equipment_id'))
new._connect('add_service',
serviceprofiles=self)
return super().create(vals)
@api.multi
def write(self, vals):
equip_id = self.get_equip(vals)
# Add Service
# If equipment was empty and now set to managed or stage in draft
if equip_id and (not self.equipment_id or self.
get_next_stage(vals) == 'draft'):
equip_id._connect('add_service', serviceprofiles=self)
self.message_post(body=_('Added Service'))
# Update Service
# If SP is changed but not the managed equipment
# Don't call update if stage_id is all that is changed
if (equip_id and (len(vals) > 1 or 'stage_id' not in vals)):
# If equipment was changed, handle old equipment accordingly
if vals.get('equipment_id', False):
self.equip_changed(vals)
self.equipment_id._connect('update_service',
serviceprofiles=self)
self.message_post(body=_('Updated Service'))
# Activate Service (Provision?)
# If SP state -> In Progress and equipment is managed
if self.get_next_stage(vals) == 'in_progress' and equip_id:
equip_id._connect('activate_service',
serviceprofiles=self)
self.message_post(body=_('Activated Service'))
# Suspend Service
# If SP state -> Suspend and equipment is managed
if self.get_next_stage(vals) == 'suspend' and equip_id:
equip_id._connect('suspend_service',
serviceprofiles=self)
self.message_post(body=_('Suspended Service'))
# Suspend/Remove Service
# If SP state -> Closed or Cancelled and equipment is managed
if self.get_next_stage(vals) in ['close', 'cancel']:
equip_id._connect('suspend_service',
serviceprofiles=self)
equip_id._connect('remove_service',
serviceprofiles=self)
self.message_post(body=_('Suspended Service'))
self.message_post(body=_('Removed Service'))
return super().write(vals)
# This method handles the old equipment if it is changed
def equip_changed(self, vals):
# Was the old Equipment Managed?
if self.equipment_id.managed:
# Is the SP In Progress (or going to be)
if self.get_stage(vals) in ['in_progress', 'to_renew']:
# Suspend
self.equipment_id._connect('suspend_service',
serviceprofiles=self)
self.message_post(body=_('Previous Service Suspended'))
# SP is not In Progress (or going to be)
else:
# Remove
self.equipment_id._connect('remove_service',
serviceprofiles=self)
self.message_post(body=_('Previous Service Removed'))
# This method returns the final equipment on the form
# If there is a managed equipment in vals, use it
# If there is not, check self for managed equipment
# If neither, return False
def get_equip(self, vals):
equip = vals.get('equipment_id', False)
if equip:
equip = self.env['maintenance.equipment'].\
browse(vals.get('equipment_id'))
if equip.managed:
return equip
else:
if self.equipment_id.managed:
return self.equipment_id
return False
# This method returns the appriopriate stage_id
# If there is a stage in vals, use it
# If there is no stage in vals, use the current stage
def get_stage(self, vals):
x = ''
if ((vals.get('stage_id', False) == self.env.
ref('agreement_serviceprofile.servpro_stage_draft').id) or
(not vals.get('stage_id', False) and
self.stage_id.id == self.env.
ref('agreement_serviceprofile.servpro_stage_draft').id)):
x = 'draft'
if ((vals.get('stage_id', False) == self.env.
ref('agreement_serviceprofile.servpro_stage_progress').id) or
(not vals.get('stage_id', False) and
self.stage_id.id == self.env.
ref('agreement_serviceprofile.servpro_stage_progress').id)):
x = 'in_progress'
if ((vals.get('stage_id', False) == self.env.
ref('agreement_serviceprofile.servpro_stage_suspend').id) or
(not vals.get('stage_id', False) and
self.stage_id.id == self.env.
ref('agreement_serviceprofile.servpro_stage_suspend').id)):
x = 'suspend'
if ((vals.get('stage_id', False) == self.env.
ref('agreement_serviceprofile.servpro_stage_renew').id) or
(not vals.get('stage_id', False) and
self.stage_id.id == self.env.
ref('agreement_serviceprofile.servpro_stage_renew').id)):
x = 'to_renew'
if ((vals.get('stage_id', False) == self.env.
ref('agreement_serviceprofile.servpro_stage_close').id) or
(not vals.get('stage_id', False) and
self.stage_id.id == self.env.
ref('agreement_serviceprofile.servpro_stage_close').id)):
x = 'closed'
if ((vals.get('stage_id', False) == self.env.
ref('agreement_serviceprofile.servpro_stage_cancel').id) or
(not vals.get('stage_id', False) and
self.stage_id.id == self.env.
ref('agreement_serviceprofile.servpro_stage_cancel').id)):
x = 'cancel'
return x
# Check to see if the stage is being changed
def get_next_stage(self, vals):
if (vals.get('stage_id', False) == self.env.
ref('agreement_serviceprofile.servpro_stage_draft').id):
return 'draft'
if (vals.get('stage_id', False) == self.env.
ref('agreement_serviceprofile.servpro_stage_progress').id):
return 'in_progress'
if (vals.get('stage_id', False) == self.env.
ref('agreement_serviceprofile.servpro_stage_suspend').id):
return 'suspend'
if (vals.get('stage_id', False) == self.env.
ref('agreement_serviceprofile.servpro_stage_renew').id):
return 'renew'
if (vals.get('stage_id', False) == self.env.
ref('agreement_serviceprofile.servpro_stage_close').id):
return 'close'
if (vals.get('stage_id', False) == self.env.
ref('agreement_serviceprofile.servpro_stage_cancel').id):
return 'cancel'
return False