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

[ADD] fieldservice_mobile #1258

Open
wants to merge 1 commit into
base: 18.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions fieldservice_mobile/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3

====================
Field Service Mobile
====================

This module is manage FSM mobile stages based on configuration.

Configuration
=============

To configure this module, you need to:

* Go to Field Service > Configuration > Stages.
* Check Display in Mobile for display stage in FSM Mobile.
* Check Display in Odoo for display stage in Odoo FSM Order.
* Select a server action based on Stages.

* Manage domain on Automated Actions based on Stage sequence.

For Example:- If the Started stage sequence is 6.

* Go to Settings > Automated Actions > FSM Order Started Stage Update > Apply on > [["stage_id.sequence","=",6]]

Features on the mobile application will be visible depending on the groups set on this model.

Usage
=============
1) Navigate to the "Field Service" application
2) Under menu item "Configuration", select "FSM Mobile Features"
3) Select Installed Modules for FSM Mobile Dynamic Menu and it's records
4) Select a feature and add/remove groups

Credits
=======

* Open Source Integrators <https://opensourceintegrators.com>
* Serpent Consulting Services Pvt. Ltd. <[email protected]>

Contributors
~~~~~~~~~~~~

* Wolfgang Hall <[email protected]>
* Sandip Mangukiya <[email protected]>
* Serpent Consulting Services Pvt. Ltd. <[email protected]>
* Ammar Officewala <[email protected]>
3 changes: 3 additions & 0 deletions fieldservice_mobile/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from . import models
36 changes: 36 additions & 0 deletions fieldservice_mobile/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Copyright (C) 2020 Open Source Integrators
# Copyright (C) 2020 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

{
"name": "Field Service - Mobile",
"summary": "Field Service Mobile Backend Support.",
"license": "AGPL-3",
"version": "18.0.1.0.0",
"category": "Field Service",
"author": "Open Source Integrators, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/field-service",
"depends": [
"fieldservice_stage_server_action",
"stock",
"analytic",
"maintenance",
"fieldservice_vehicle",
"fieldservice_sale",
],
"data": [
"security/ir_rule.xml",
"security/ir.model.access.csv",
"security/fieldservice_mobile_security.xml",
"data/base_automation.xml",
"data/feature_line.xml",
"data/feature_mapping.xml",
"views/res_config_settings.xml",
"views/fsm_stage_view.xml",
"views/fsm_order_view.xml",
"views/mobile_feature_mapping.xml",
"views/mobile_feature_line.xml",
],
"development_status": "Beta",
"maintainers": ["wolfhall"],
}
87 changes: 87 additions & 0 deletions fieldservice_mobile/data/base_automation.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
<odoo>
<record id="fsm_order_started_stage_update" model="base.automation">
<field name="name">FSM Order Started Stage Update</field>
<field name="model_id" ref="fieldservice.model_fsm_order" />
<field name="trigger">on_write</field>
<field name="active" eval="True" />
<field name="filter_domain">[["stage_id.sequence","=",6]]</field>
<field name="state">code</field>
<field name="code">for rec in records:
stage_rec = env['fsm.stage.history'].search([('order_id', '=', rec.id)], order='id desc', limit=1)
call_it = False
if not stage_rec:
call_it = True
if stage_rec.stage_id != rec.stage_id:
call_it = True
if call_it and rec.stage_id.action_id:
rec.write(
{'date_start': datetime.datetime.now(),
'fsm_stage_history_ids': [(0, 0, {'start_datetime': datetime.datetime.now(), 'stage_id': rec.stage_id.id, 'duration': 0.0, 'total_duration': 0.0
})]})</field>
</record>

<record id="fsm_order_break_stage_update" model="base.automation">
<field name="name">FSM Order Break Stage Update</field>
<field name="model_id" ref="fieldservice.model_fsm_order" />
<field name="trigger">on_write</field>
<field name="active" eval="True" />
<field name="filter_domain">[["stage_id.sequence","=",7]]</field>
<field name="state">code</field>
<field name="code">for rec in records:
stage_rec = env['fsm.stage.history'].search([('order_id', '=', rec.id)], order='id desc', limit=1)
call_it = False
if not stage_rec:
call_it = True
if stage_rec.stage_id != rec.stage_id:
call_it = True
if call_it and rec.stage_id.action_id:
delta = datetime.datetime.now() - stage_rec.start_datetime
duration = round((delta.total_seconds() / 3600), 2)
rec.write(
{'fsm_stage_history_ids': [(0, 0, {'start_datetime': datetime.datetime.now(), 'stage_id': rec.stage_id.id, 'duration': duration, 'total_duration': round((duration + stage_rec.total_duration), 2)
})]})</field>
</record>

<record id="fsm_order_resume_stage_update" model="base.automation">
<field name="name">FSM Order Resume Stage Update</field>
<field name="model_id" ref="fieldservice.model_fsm_order" />
<field name="trigger">on_write</field>
<field name="active" eval="True" />
<field name="filter_domain">[["stage_id.sequence","=", 8]]</field>
<field name="state">code</field>
<field name="code">for rec in records:
stage_rec = env['fsm.stage.history'].search([('order_id', '=', rec.id)], order='id desc', limit=1)
call_it = False
if not stage_rec:
call_it = True
if stage_rec.stage_id != rec.stage_id:
call_it = True
if call_it and rec.stage_id.action_id:
rec.write(
{'fsm_stage_history_ids': [(0, 0, {'start_datetime': datetime.datetime.now(), 'stage_id': rec.stage_id.id, 'duration': 0.0, 'total_duration': round((rec.duration + stage_rec.total_duration), 2)
})]})</field>
</record>

<record id="fsm_order_completed_stage_update" model="base.automation">
<field name="name">FSM Order Completed Stage Update</field>
<field name="model_id" ref="fieldservice.model_fsm_order" />
<field name="trigger">on_write</field>
<field name="active" eval="True" />
<field name="filter_domain">[["stage_id.sequence","=",9]]</field>
<field name="state">code</field>
<field name="code">for rec in records:
stage_rec = env['fsm.stage.history'].search([('order_id', '=', rec.id)], order='id desc', limit=1)
call_it = False
if not stage_rec:
call_it = True
if stage_rec.stage_id != rec.stage_id:
call_it = True
if call_it and rec.stage_id.action_id:
delta = datetime.datetime.now() - stage_rec.start_datetime
duration = round((delta.total_seconds() / 3600), 2)
rec.write(
{'date_end': datetime.datetime.now(),
'fsm_stage_history_ids': [(0, 0, {'start_datetime': datetime.datetime.now(), 'stage_id': rec.stage_id.id, 'duration': duration, 'total_duration': round((duration + stage_rec.total_duration), 2)
})]})</field>
</record>
</odoo>
107 changes: 107 additions & 0 deletions fieldservice_mobile/data/feature_line.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
<odoo noupdate="1">
<!-- Feature Records -->
<record id="fsm_feature_location" model="fsm.mobile.feature.line">
<field name="name">Location</field>
<field name="code">LOC</field>
<field
name="group_ids"
eval='[(6, 0, [ref("fieldservice.group_fsm_manager")])]'
/>
</record>
<record id="fsm_feature_contact" model="fsm.mobile.feature.line">
<field name="name">Contact</field>
<field name="code">CON</field>
<field
name="group_ids"
eval='[(6, 0, [ref("fieldservice.group_fsm_manager")])]'
/>
</record>
<record id="fsm_feature_notes" model="fsm.mobile.feature.line">
<field name="name">Notes</field>
<field name="code">NOT</field>
<field
name="group_ids"
eval='[(6, 0, [ref("fieldservice.group_fsm_manager")])]'
/>
</record>
<record id="fsm_feature_chatter" model="fsm.mobile.feature.line">
<field name="name">Chatter</field>
<field name="code">CHA</field>
<field
name="group_ids"
eval='[(6, 0, [ref("fieldservice.group_fsm_manager")])]'
/>
</record>
<record id="fsm_feature_documents" model="fsm.mobile.feature.line">
<field name="name">Documents</field>
<field name="code">DOC</field>
<field
name="group_ids"
eval='[(6, 0, [ref("fieldservice.group_fsm_manager")])]'
/>
</record>
<record id="fsm_feature_picture" model="fsm.mobile.feature.line">
<field name="name">Pictures</field>
<field name="code">PIC</field>
<field
name="group_ids"
eval='[(6, 0, [ref("fieldservice.group_fsm_manager")])]'
/>
</record>
<record id="fsm_feature_timesheet" model="fsm.mobile.feature.line">
<field name="name">Timesheets</field>
<field name="code">TIM</field>
<field
name="group_ids"
eval='[(6, 0, [ref("fieldservice.group_fsm_manager")])]'
/>
</record>
<record id="fsm_feature_signature" model="fsm.mobile.feature.line">
<field name="name">Signature</field>
<field name="code">SIG</field>
<field
name="group_ids"
eval='[(6, 0, [ref("fieldservice.group_fsm_manager")])]'
/>
</record>
<record id="fsm_feature_equipment" model="fsm.mobile.feature.line">
<field name="name">Equipment</field>
<field name="code">EQU</field>
<field
name="group_ids"
eval='[(6, 0, [ref("fieldservice.group_fsm_manager")])]'
/>
</record>
<record id="fsm_feature_pickup_delivery" model="fsm.mobile.feature.line">
<field name="name">Pickup/Delivery</field>
<field name="code">DEL</field>
<field
name="group_ids"
eval='[(6, 0, [ref("fieldservice.group_fsm_manager")])]'
/>
</record>
<record id="fsm_feature_sale_order_line" model="fsm.mobile.feature.line">
<field name="name">Sale Order Lines</field>
<field name="code">SOL</field>
<field
name="group_ids"
eval='[(6, 0, [ref("fieldservice.group_fsm_manager")])]'
/>
</record>
<record id="fsm_feature_durations" model="fsm.mobile.feature.line">
<field name="name">Durations</field>
<field name="code">DUR</field>
<field
name="group_ids"
eval='[(6, 0, [ref("fieldservice.group_fsm_manager")])]'
/>
</record>
<record id="fsm_feature_stock_request" model="fsm.mobile.feature.line">
<field name="name">Stock Requests</field>
<field name="code">STO</field>
<field
name="group_ids"
eval='[(6, 0, [ref("fieldservice.group_fsm_manager")])]'
/>
</record>
</odoo>
28 changes: 28 additions & 0 deletions fieldservice_mobile/data/feature_mapping.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<odoo noupdate="1">
<!-- FSM Mobile Feature Mapping Record -->
<record id="fsm_feature_default_mapping" model="fsm.mobile.feature.mapping">
<field name="name">Default FSM Mobile Feature Mapping</field>
<field
name="installed_module_ids"
eval='[(6, 0, [ref("base.module_fieldservice"),
ref("base.module_fieldservice_stage_server_action"),
ref("base.module_fieldservice_mobile")])]'
/>
<field
name="feature_line_ids"
eval='[(6, 0, [ref("fieldservice_mobile.fsm_feature_location"),
ref("fieldservice_mobile.fsm_feature_contact"),
ref("fieldservice_mobile.fsm_feature_notes"),
ref("fieldservice_mobile.fsm_feature_chatter"),
ref("fieldservice_mobile.fsm_feature_documents"),
ref("fieldservice_mobile.fsm_feature_picture"),
ref("fieldservice_mobile.fsm_feature_timesheet"),
ref("fieldservice_mobile.fsm_feature_signature"),
ref("fieldservice_mobile.fsm_feature_equipment"),
ref("fieldservice_mobile.fsm_feature_pickup_delivery"),
ref("fieldservice_mobile.fsm_feature_sale_order_line"),
ref("fieldservice_mobile.fsm_feature_durations"),
ref("fieldservice_mobile.fsm_feature_stock_request")])]'
/>
</record>
</odoo>
10 changes: 10 additions & 0 deletions fieldservice_mobile/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from . import fsm_stage
from . import fsm_order
from . import fsm_stage_history
from . import res_config_settings
from . import res_users
from . import ir_attachment
from . import fsm_mobile_feature_mapping
from . import fsm_mobile_feature_line
15 changes: 15 additions & 0 deletions fieldservice_mobile/models/fsm_mobile_feature_line.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Copyright (C) 2022 Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).


from odoo import fields, models


class FSMMobileFeatureLine(models.Model):
_name = "fsm.mobile.feature.line"
_description = "FSM Mobile Feature Line"

feature_id = fields.Many2one("fsm.mobile.feature.mapping", string="Feature Mapping")
name = fields.Char(string="Feature Name")
group_ids = fields.Many2many("res.groups", string="Groups")
code = fields.Char()
Loading
Loading