diff --git a/addons/project_sms/__init__.py b/addons/project_sms/__init__.py
new file mode 100644
index 00000000000..dc5e6b693d1
--- /dev/null
+++ b/addons/project_sms/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import models
diff --git a/addons/project_sms/__manifest__.py b/addons/project_sms/__manifest__.py
new file mode 100644
index 00000000000..3862d9dc16e
--- /dev/null
+++ b/addons/project_sms/__manifest__.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+{
+ 'name': "Project - SMS",
+ 'summary': 'Send text messages when project/task stage move',
+ 'description': "Send text messages when project/task stage move",
+ 'category': 'Hidden',
+ 'version': '1.0',
+ 'depends': ['project', 'sms'],
+ 'data': [
+ 'views/project_stage_views.xml',
+ 'views/project_task_type_views.xml',
+ 'security/ir.model.access.csv',
+ 'security/project_sms_security.xml',
+ ],
+ 'application': False,
+ 'auto_install': True,
+ 'license': 'LGPL-3',
+}
diff --git a/addons/project_sms/models/__init__.py b/addons/project_sms/models/__init__.py
new file mode 100644
index 00000000000..e3234323c64
--- /dev/null
+++ b/addons/project_sms/models/__init__.py
@@ -0,0 +1,7 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import project_task_type
+from . import project_task
+from . import project_stage
+from . import project
diff --git a/addons/project_sms/models/project.py b/addons/project_sms/models/project.py
new file mode 100644
index 00000000000..b5ca63698a2
--- /dev/null
+++ b/addons/project_sms/models/project.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, models
+
+
+class ProjectProject(models.Model):
+ _inherit = "project.project"
+
+ def _send_sms(self):
+ for project in self:
+ if project.partner_id and project.stage_id and project.stage_id.sms_template_id:
+ project._message_sms_with_template(template=project.stage_id.sms_template_id, partner_ids=project.partner_id.ids)
+
+ @api.model_create_multi
+ def create(self, vals_list):
+ projects = super().create(vals_list)
+ projects._send_sms()
+ return projects
+
+ def write(self, vals):
+ res = super().write(vals)
+ if 'stage_id' in vals:
+ self._send_sms()
+ return res
diff --git a/addons/project_sms/models/project_stage.py b/addons/project_sms/models/project_stage.py
new file mode 100644
index 00000000000..67a3e3ee27d
--- /dev/null
+++ b/addons/project_sms/models/project_stage.py
@@ -0,0 +1,11 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models
+
+
+class ProjectProjectStage(models.Model):
+ _inherit = 'project.project.stage'
+
+ sms_template_id = fields.Many2one('sms.template', string="SMS Template",
+ domain=[('model', '=', 'project.project')], help="Template used to render SMS reminder content.")
diff --git a/addons/project_sms/models/project_task.py b/addons/project_sms/models/project_task.py
new file mode 100644
index 00000000000..ff7e4d7b096
--- /dev/null
+++ b/addons/project_sms/models/project_task.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, models
+
+
+class ProjectTask(models.Model):
+ _inherit = "project.task"
+
+ def _send_sms(self):
+ for task in self:
+ if task.partner_id and task.stage_id and task.stage_id.sms_template_id:
+ task._message_sms_with_template(template=task.stage_id.sms_template_id, partner_ids=task.partner_id.ids)
+
+ @api.model_create_multi
+ def create(self, vals_list):
+ tasks = super().create(vals_list)
+ tasks._send_sms()
+ return tasks
+
+ def write(self, vals):
+ res = super().write(vals)
+ if 'stage_id' in vals:
+ self._send_sms()
+ return res
diff --git a/addons/project_sms/models/project_task_type.py b/addons/project_sms/models/project_task_type.py
new file mode 100644
index 00000000000..55f0de0af41
--- /dev/null
+++ b/addons/project_sms/models/project_task_type.py
@@ -0,0 +1,11 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models
+
+
+class ProjectTaskType(models.Model):
+ _inherit = "project.task.type"
+
+ sms_template_id = fields.Many2one('sms.template', string="SMS Template",
+ domain=[('model', '=', 'project.task')], help="Template used to render SMS reminder content.")
diff --git a/addons/project_sms/security/ir.model.access.csv b/addons/project_sms/security/ir.model.access.csv
new file mode 100644
index 00000000000..cac3c45a4ad
--- /dev/null
+++ b/addons/project_sms/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_sms_template_project_manager,access.sms.template.project.manager,sms.model_sms_template,project.group_project_manager,1,1,1,1
diff --git a/addons/project_sms/security/project_sms_security.xml b/addons/project_sms/security/project_sms_security.xml
new file mode 100644
index 00000000000..75dd456ffc5
--- /dev/null
+++ b/addons/project_sms/security/project_sms_security.xml
@@ -0,0 +1,10 @@
+
+
+
+ SMS Template: project manager CUD on project/task
+
+
+ [('model_id.model', 'in', ('project.task.type', 'project.project.stage'))]
+
+
+
diff --git a/addons/project_sms/views/project_stage_views.xml b/addons/project_sms/views/project_stage_views.xml
new file mode 100644
index 00000000000..3658a8aa1a3
--- /dev/null
+++ b/addons/project_sms/views/project_stage_views.xml
@@ -0,0 +1,36 @@
+
+
+
+ project.project.stage.view.tree.inherit.project.sms
+ project.project.stage
+
+
+
+
+
+
+
+
+
+ project.project.stage.view.form.inherit.project.sms
+ project.project.stage
+
+
+
+
+
+
+
+
+
+ project.project.stage.view.search.inherit.project.sms
+ project.project.stage
+
+
+
+
+
+
+
+
+
diff --git a/addons/project_sms/views/project_task_type_views.xml b/addons/project_sms/views/project_task_type_views.xml
new file mode 100644
index 00000000000..391f945d69b
--- /dev/null
+++ b/addons/project_sms/views/project_task_type_views.xml
@@ -0,0 +1,37 @@
+
+
+
+
+ project.task.type.view.form.inherit.project.sms
+ project.task.type
+
+
+
+
+
+
+
+
+
+ project.task.type.view.tree.inherit.project.sms
+ project.task.type
+
+
+
+
+
+
+
+
+
+ project.task.type.view.search.inherit.project.sms
+ project.task.type
+
+
+
+
+
+
+
+
+