Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[15.0] Forward Ports from 14.0 #1133

Merged
merged 10 commits into from
Dec 12, 2023
50 changes: 30 additions & 20 deletions fieldservice/models/fsm_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ def _track_subtype(self, init_values):
group_expand="_read_group_stage_ids",
default=lambda self: self._default_stage_id(),
)
is_closed = fields.Boolean(
"Is closed",
related="stage_id.is_closed",
)
priority = fields.Selection(
fsm_stage.AVAILABLE_PRIORITIES,
index=True,
Expand Down Expand Up @@ -121,6 +125,31 @@ def _track_subtype(self, init_values):
default=lambda self: self.env.company,
help="Company related to this order",
)

def _calc_request_late(self, vals):
if vals.get("request_early", False):
early = fields.Datetime.from_string(vals.get("request_early"))
else:
early = datetime.now()

if vals.get("priority") == "0":
vals["request_late"] = early + timedelta(
hours=self.env.company.fsm_order_request_late_lowest
)
elif vals.get("priority") == "1":
vals["request_late"] = early + timedelta(
hours=self.env.company.fsm_order_request_late_low
)
elif vals.get("priority") == "2":
vals["request_late"] = early + timedelta(
hours=self.env.company.fsm_order_request_late_medium
)
elif vals.get("priority") == "3":
vals["request_late"] = early + timedelta(
hours=self.env.company.fsm_order_request_late_high
)
return vals

request_late = fields.Datetime(string="Latest Request Date")
description = fields.Text()

Expand Down Expand Up @@ -221,25 +250,7 @@ def create(self, vals):
vals["name"] = self.env["ir.sequence"].next_by_code("fsm.order") or _("New")
self._calc_scheduled_dates(vals)
if not vals.get("request_late"):
if vals.get("priority") == "0":
if vals.get("request_early"):
vals["request_late"] = fields.Datetime.from_string(
vals.get("request_early")
) + timedelta(days=3)
else:
vals["request_late"] = datetime.now() + timedelta(days=3)
elif vals.get("request_early") and vals.get("priority") == "1":
vals["request_late"] = fields.Datetime.from_string(
vals.get("request_early")
) + timedelta(days=2)
elif vals.get("request_early") and vals.get("priority") == "2":
vals["request_late"] = fields.Datetime.from_string(
vals.get("request_early")
) + timedelta(days=1)
elif vals.get("request_early") and vals.get("priority") == "3":
vals["request_late"] = fields.Datetime.from_string(
vals.get("request_early")
) + timedelta(hours=8)
vals = self._calc_request_late(vals)
return super().create(vals)

is_button = fields.Boolean(default=False)
Expand Down Expand Up @@ -272,7 +283,6 @@ def _calc_scheduled_dates(self, vals):
or vals.get("scheduled_date_start")
or vals.get("scheduled_date_end")
):

if vals.get("scheduled_date_start") and vals.get("scheduled_date_end"):
new_date_start = fields.Datetime.from_string(
vals.get("scheduled_date_start", False)
Expand Down
6 changes: 5 additions & 1 deletion fieldservice/models/fsm_person_calendar_filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@ class FSMPersonCalendarFilter(models.Model):
_description = "FSM Person Calendar Filter"

user_id = fields.Many2one(
"res.users", "Me", required=True, default=lambda self: self.env.user
"res.users",
"Me",
required=True,
default=lambda self: self.env.user,
ondelete="cascade",
)
fsm_person_id = fields.Many2one("fsm.person", "FSM Worker", required=True)
active = fields.Boolean(default=True)
Expand Down
8 changes: 4 additions & 4 deletions fieldservice/models/fsm_stage.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ def _default_team_ids(self):
],
"Type",
required=True,
default="order",
)
company_id = fields.Many2one(
"res.company",
Expand Down Expand Up @@ -83,10 +84,9 @@ def get_color_information(self):
def create(self, vals):
stages = self.search([])
for stage in stages:
if (
stage.stage_type == vals["stage_type"]
and stage.sequence == vals["sequence"]
):
if stage.stage_type == vals.get(
"stage_type"
) and stage.sequence == vals.get("sequence"):
raise ValidationError(
_(
"Cannot create FSM Stage because "
Expand Down
16 changes: 16 additions & 0 deletions fieldservice/models/res_company.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,19 @@ class ResCompany(models.Model):
string="Auto-populate Equipments on Order based on Location"
)
search_on_complete_name = fields.Boolean(string="Search Location By Hierarchy")

fsm_order_request_late_lowest = fields.Float(
string="Hours of Buffer for Lowest Priority FS Orders",
default=72,
)
fsm_order_request_late_low = fields.Float(
string="Hours of Buffer for Low Priority FS Orders",
default=48,
)
fsm_order_request_late_medium = fields.Float(
string="Hours of Buffer for Medium Priority FS Orders",
default=24,
)
fsm_order_request_late_high = fields.Float(
string="Hours of Buffer for High Priority FS Orders", default=8
)
20 changes: 20 additions & 0 deletions fieldservice/models/res_config_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,26 @@ class ResConfigSettings(models.TransientModel):
related="company_id.search_on_complete_name",
readonly=False,
)
fsm_order_request_late_lowest = fields.Float(
string="Hours of Buffer for Lowest Priority FS Orders",
related="company_id.fsm_order_request_late_lowest",
readonly=False,
)
fsm_order_request_late_low = fields.Float(
string="Hours of Buffer for Low Priority FS Orders",
related="company_id.fsm_order_request_late_low",
readonly=False,
)
fsm_order_request_late_medium = fields.Float(
string="Hours of Buffer for Medium Priority FS Orders",
related="company_id.fsm_order_request_late_medium",
readonly=False,
)
fsm_order_request_late_high = fields.Float(
string="Hours of Buffer for High Priority FS Orders",
related="company_id.fsm_order_request_late_high",
readonly=False,
)

# Dependencies
@api.onchange("group_fsm_equipment")
Expand Down
1 change: 1 addition & 0 deletions fieldservice/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@
* `Tecnativa <https://www.tecnativa.com>`_:

* Víctor Martínez
* Alex Comba <alex.comba@agilebg.com>
24 changes: 12 additions & 12 deletions fieldservice/security/ir.model.access.csv
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_fsm_stage_fsm_user,fsm.stage.user,model_fsm_stage,fieldservice.group_fsm_user,1,0,0,0
access_fsm_stage_fsm_user,fsm.stage.user,model_fsm_stage,fieldservice.group_fsm_user_own,1,0,0,0
access_fsm_stage_fsm_manager,fsm.stage.manager,model_fsm_stage,fieldservice.group_fsm_manager,1,1,1,1
access_fsm_tag_fsm_user,fsm.tag.user,model_fsm_tag,fieldservice.group_fsm_user,1,0,0,0
access_fsm_tag_fsm_user,fsm.tag.user,model_fsm_tag,fieldservice.group_fsm_user_own,1,0,0,0
access_fsm_tag_fsm_manager,fsm.tag.manager,model_fsm_tag,fieldservice.group_fsm_manager,1,1,1,1
access_fsm_person_user,fsm.person.user,model_fsm_person,fieldservice.group_fsm_user,1,1,0,0
access_fsm_person_user,fsm.person.user,model_fsm_person,fieldservice.group_fsm_user_own,1,1,0,0
access_fsm_person_manager,fsm.person.manager,model_fsm_person,fieldservice.group_fsm_manager,1,1,1,1
access_fsm_location_user,fsm.location.user,model_fsm_location,fieldservice.group_fsm_user,1,1,0,0
access_fsm_location_user,fsm.location.user,model_fsm_location,fieldservice.group_fsm_user_own,1,1,0,0
access_fsm_location_dispatcher,fsm.location.dispatcher,model_fsm_location,fieldservice.group_fsm_dispatcher,1,1,1,0
access_fsm_order_user,fsm.order.user,model_fsm_order,fieldservice.group_fsm_user,1,1,0,0
access_fsm_order_user,fsm.order.user,model_fsm_order,fieldservice.group_fsm_user_own,1,1,0,0
access_fsm_order_dispatcher,fsm.order.dispatcher,model_fsm_order,fieldservice.group_fsm_dispatcher,1,1,1,1
access_fsm_equipment_fsm_user,fsm.equipment.user,model_fsm_equipment,fieldservice.group_fsm_user,1,0,0,0
access_fsm_equipment_fsm_user,fsm.equipment.user,model_fsm_equipment,fieldservice.group_fsm_user_own,1,0,0,0
access_fsm_equipment_fsm_manager,fsm.equipment.manager,model_fsm_equipment,fieldservice.group_fsm_manager,1,1,1,1
access_fsm_category_user,fsm.category.user,model_fsm_category,fieldservice.group_fsm_user,1,0,0,0
access_fsm_category_user,fsm.category.user,model_fsm_category,fieldservice.group_fsm_user_own,1,0,0,0
access_fsm_category_manager,fsm.category.manager,model_fsm_category,fieldservice.group_fsm_manager,1,1,1,1
access_fsm_template_user,fsm.template.user,model_fsm_template,fieldservice.group_fsm_user,1,0,0,0
access_fsm_template_user,fsm.template.user,model_fsm_template,fieldservice.group_fsm_user_own,1,0,0,0
access_fsm_template_manager,fsm.template.manager,model_fsm_template,fieldservice.group_fsm_manager,1,1,1,1
access_fsm_team_user,fsm.team.user,model_fsm_team,fieldservice.group_fsm_user,1,0,0,0
access_fsm_team_user,fsm.team.user,model_fsm_team,fieldservice.group_fsm_user_own,1,0,0,0
access_fsm_team_manager,fsm.team.manager,model_fsm_team,fieldservice.group_fsm_manager,1,1,1,1
access_fsm_location_person_user,fsm.location.person.user,model_fsm_location_person,fieldservice.group_fsm_user,1,1,0,0
access_fsm_location_person_user,fsm.location.person.user,model_fsm_location_person,fieldservice.group_fsm_user_own,1,1,0,0
access_fsm_location_person_manager,fsm.location.person.manager,model_fsm_location_person,fieldservice.group_fsm_manager,1,1,1,1
access_fsm_order_type_user,fsm.order.type.user,model_fsm_order_type,fieldservice.group_fsm_user,1,1,0,0
access_fsm_order_type_user,fsm.order.type.user,model_fsm_order_type,fieldservice.group_fsm_user_own,1,1,0,0
access_fsm_order_type_manager,fsm.order.type.manager,model_fsm_order_type,fieldservice.group_fsm_manager,1,1,1,1
access_fsm_calendar_filter,fsm.calendar.filter.user,model_fsm_person_calendar_filter,fieldservice.group_fsm_user,1,1,1,1
access_fsm_calendar_filter,fsm.calendar.filter.user,model_fsm_person_calendar_filter,fieldservice.group_fsm_user_own,1,1,1,1
access_fsm_wizard,access_fsm_wizard,model_fsm_wizard,fieldservice.group_fsm_dispatcher,1,1,1,0
17 changes: 17 additions & 0 deletions fieldservice/security/ir_rule.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,23 @@
name="domain_force"
>['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>

<record id="fsm_order_own_rule" model="ir.rule">
<field name="name">FSM Orders Entry (only own)</field>
<field name="model_id" ref="model_fsm_order" />
<field
name="domain_force"
>['|',('person_id.user_ids','=',user.id),('person_id','=',False)]</field>
<field name="groups" eval="[(4, ref('fieldservice.group_fsm_user_own'))]" />
</record>

<record id="fsm_order_user" model="ir.rule">
<field name="name">FSM Orders Entry</field>
<field name="model_id" ref="model_fsm_order" />
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('fieldservice.group_fsm_user'))]" />
</record>

<record id="fsm_template_comp_rule" model="ir.rule">
<field name="name">FSM Templates Entry</field>
<field name="model_id" ref="model_fsm_template" />
Expand Down
11 changes: 10 additions & 1 deletion fieldservice/security/res_groups.xml
Original file line number Diff line number Diff line change
@@ -1,9 +1,18 @@
<odoo>
<!-- FSM groups -->
<record id="group_fsm_user_own" model="res.groups">
<field name="name">User (only own documents)</field>
<field name="category_id" ref="fsm" />
<field name="implied_ids" eval="[(4, ref('base.group_user'))]" />
</record>

<record id="group_fsm_user" model="res.groups">
<field name="name">User</field>
<field name="category_id" ref="fsm" />
<field name="implied_ids" eval="[(4, ref('base.group_user'))]" />
<field
name="implied_ids"
eval="[(4, ref('fieldservice.group_fsm_user_own'))]"
/>
</record>
<record id="group_fsm_dispatcher" model="res.groups">
<field name="name">Dispatcher</field>
Expand Down
13 changes: 9 additions & 4 deletions fieldservice/views/fsm_location.xml
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,11 @@
<group id="main-left">
<field name="id" invisible="1" />
<field name="fsm_parent_id" domain="[('id', '!=', id)]" />
<field
name="partner_id"
groups="base.group_no_one"
readonly="1"
/>
<field name="owner_id" />
<field
name="contact_id"
Expand Down Expand Up @@ -162,10 +167,10 @@
<field name="notes" nolabel="1" widget="html" />
</group>
<notebook>
<page string="Directions">
<page string="Directions" name="directions">
<field name="direction" nolabel="1" widget="html" />
</page>
<page string="Territory">
<page string="Territory" name="territory">
<group id="territory">
<group id="territory-left">
<field name="territory_id" />
Expand All @@ -181,7 +186,7 @@
</group>
</group>
</page>
<page string="Preferred Workers">
<page string="Preferred Workers" name="preferred_workers">
<field name="person_ids" nolabel="1">
<tree editable="bottom">
<field name="sequence" widget="handle" />
Expand All @@ -191,7 +196,7 @@
</tree>
</field>
</page>
<page string="Others" id="others-page">
<page string="Others" id="others-page" name="others">
<group id="others">
<group id="others-left" />
<group id="others-right" />
Expand Down
9 changes: 5 additions & 4 deletions fieldservice/views/fsm_order.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
string="Complete"
class="oe_highlight"
type="object"
groups="fieldservice.group_fsm_user"
groups="fieldservice.group_fsm_user_own"
attrs="{'invisible': [('stage_id', 'in', (%(fieldservice.fsm_stage_completed)d, %(fieldservice.fsm_stage_cancelled)d))]}"
/>
<field name="is_button" invisible="1" />
Expand Down Expand Up @@ -291,7 +291,7 @@
</div>
<div class="oe_kanban_bottom_right">
<img
t-att-src="kanban_image('person', 'image_small', record.person_id.name)"
t-att-src="kanban_image('fsm.person', 'image_128', record.person_id.raw_value)"
t-att-title="record.person_id.name"
t-att-alt="record.person_id.name"
width="24"
Expand Down Expand Up @@ -430,15 +430,16 @@
color="stage_id"
>
<field name="name" />
<field name="stage_id" />
<field name="stage_id" filters="1" />
<field name="location_id" />
<field name="phone" />
<field
name="person_id"
write_model="fsm.person.calendar.filter"
write_field="fsm_person_id"
avatar_field="image_small"
avatar_field="image_128"
/>
<field name="team_id" filters="1" />
<field name="person_phone" />
<field name="city" />
<field name="state_name" />
Expand Down
5 changes: 5 additions & 0 deletions fieldservice/views/fsm_person.xml
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,11 @@
</h1>
<group>
<group>
<field
name="partner_id"
groups="base.group_no_one"
readonly="1"
/>
<field
name="category_ids"
widget="many2many_tags"
Expand Down
2 changes: 1 addition & 1 deletion fieldservice/views/menu.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
id="root"
name="Field Service"
sequence="10"
groups="group_fsm_user"
groups="group_fsm_user_own"
web_icon="fieldservice,static/description/icon.png"
/>
<menuitem id="dashboard" name="Dashboard" sequence="10" parent="root" />
Expand Down
Loading
Loading