diff --git a/login_user_detail/README.rst b/login_user_detail/README.rst new file mode 100755 index 000000000..a3673fe3c --- /dev/null +++ b/login_user_detail/README.rst @@ -0,0 +1,54 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--1-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +User Log Details +================ + +This module developed to record login details of user. + +Installation +============ + +Just select it from available modules to install it, there is no need to extra installations. + +Configuration +============= + +Nothing to configure. + +Company +------- +* `Cybrosys Techno Solutions `__ + +Credits +------- +* Developer: + Saritha @ cybrosys + Muhammad P @ cybrosys + Noorjahan P @ cybrosys + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com +* Website : https://cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit `Our Website `__ + +Further information +=================== +HTML Description: ``__ + + + diff --git a/login_user_detail/__init__.py b/login_user_detail/__init__.py new file mode 100755 index 000000000..4d63b6757 --- /dev/null +++ b/login_user_detail/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Your Name (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# + +from . import models diff --git a/login_user_detail/__manifest__.py b/login_user_detail/__manifest__.py new file mode 100755 index 000000000..bb313c8a0 --- /dev/null +++ b/login_user_detail/__manifest__.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies(). +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# + +{ + 'name': "User Log Details", + 'version': '15.0.1.0.0', + 'summary': """Login User Details & IP Address""", + 'description': """This module records login information of user""", + 'author': "Cybrosys Techno Solutions ", + 'company': "Cybrosys Techno Solutions ", + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'category': 'Tools', + 'depends': ['base'], + 'license': 'AGPL-3', + 'data': [ + 'security/ir.model.access.csv', + 'views/login_user_views.xml'], + 'demo': [], + 'images': ['static/description/banner.png'], + 'installable': True, + 'auto_install': False, +} diff --git a/login_user_detail/doc/RELEASE_NOTES.md b/login_user_detail/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..0b7af7918 --- /dev/null +++ b/login_user_detail/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 08.10.2020 +#### Version 15.0.1.0.0 +#### ADD +- Initial Commit for login_user_details \ No newline at end of file diff --git a/login_user_detail/models/__init__.py b/login_user_detail/models/__init__.py new file mode 100755 index 000000000..52c913351 --- /dev/null +++ b/login_user_detail/models/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Your Name (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# + +from . import login_user_details diff --git a/login_user_detail/models/login_user_details.py b/login_user_detail/models/login_user_details.py new file mode 100755 index 000000000..6e0670a06 --- /dev/null +++ b/login_user_detail/models/login_user_details.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Your Name (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# + +import logging +from itertools import chain +from odoo.http import request +from odoo import models, fields, api + +_logger = logging.getLogger(__name__) +USER_PRIVATE_FIELDS = ['password'] +concat = chain.from_iterable + + +class LoginUserDetail(models.Model): + _inherit = 'res.users' + + @api.model + def _check_credentials(self, password, user_agent_env): + result = super(LoginUserDetail, self)._check_credentials(password, user_agent_env) + ip_address = request.httprequest.environ['REMOTE_ADDR'] + vals = {'name': self.name, + 'ip_address': ip_address + } + self.env['login.detail'].sudo().create(vals) + return result + + +class LoginUpdate(models.Model): + _name = 'login.detail' + _description = 'Login Details' + + name = fields.Char(string="User Name") + date_time = fields.Datetime(string="Login Date And Time", default=lambda self: fields.datetime.now()) + ip_address = fields.Char(string="IP Address") diff --git a/login_user_detail/security/ir.model.access.csv b/login_user_detail/security/ir.model.access.csv new file mode 100755 index 000000000..7935bc9e7 --- /dev/null +++ b/login_user_detail/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_login_user_detail,login_user_detail_login_detail,model_login_detail,,1,1,1,1 diff --git a/login_user_detail/static/description/assets/icons/check.png b/login_user_detail/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/login_user_detail/static/description/assets/icons/check.png differ diff --git a/login_user_detail/static/description/assets/icons/chevron.png b/login_user_detail/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/login_user_detail/static/description/assets/icons/chevron.png differ diff --git a/login_user_detail/static/description/assets/icons/cogs.png b/login_user_detail/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/login_user_detail/static/description/assets/icons/cogs.png differ diff --git a/login_user_detail/static/description/assets/icons/consultation.png b/login_user_detail/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/login_user_detail/static/description/assets/icons/consultation.png differ diff --git a/login_user_detail/static/description/assets/icons/ecom-black.png b/login_user_detail/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/login_user_detail/static/description/assets/icons/ecom-black.png differ diff --git a/login_user_detail/static/description/assets/icons/education-black.png b/login_user_detail/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/login_user_detail/static/description/assets/icons/education-black.png differ diff --git a/login_user_detail/static/description/assets/icons/hotel-black.png b/login_user_detail/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/login_user_detail/static/description/assets/icons/hotel-black.png differ diff --git a/login_user_detail/static/description/assets/icons/license.png b/login_user_detail/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/login_user_detail/static/description/assets/icons/license.png differ diff --git a/login_user_detail/static/description/assets/icons/lifebuoy.png b/login_user_detail/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/login_user_detail/static/description/assets/icons/lifebuoy.png differ diff --git a/login_user_detail/static/description/assets/icons/manufacturing-black.png b/login_user_detail/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/login_user_detail/static/description/assets/icons/manufacturing-black.png differ diff --git a/login_user_detail/static/description/assets/icons/pos-black.png b/login_user_detail/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/login_user_detail/static/description/assets/icons/pos-black.png differ diff --git a/login_user_detail/static/description/assets/icons/puzzle.png b/login_user_detail/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/login_user_detail/static/description/assets/icons/puzzle.png differ diff --git a/login_user_detail/static/description/assets/icons/restaurant-black.png b/login_user_detail/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/login_user_detail/static/description/assets/icons/restaurant-black.png differ diff --git a/login_user_detail/static/description/assets/icons/service-black.png b/login_user_detail/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/login_user_detail/static/description/assets/icons/service-black.png differ diff --git a/login_user_detail/static/description/assets/icons/trading-black.png b/login_user_detail/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/login_user_detail/static/description/assets/icons/trading-black.png differ diff --git a/login_user_detail/static/description/assets/icons/training.png b/login_user_detail/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/login_user_detail/static/description/assets/icons/training.png differ diff --git a/login_user_detail/static/description/assets/icons/update.png b/login_user_detail/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/login_user_detail/static/description/assets/icons/update.png differ diff --git a/login_user_detail/static/description/assets/icons/user.png b/login_user_detail/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/login_user_detail/static/description/assets/icons/user.png differ diff --git a/login_user_detail/static/description/assets/icons/wrench.png b/login_user_detail/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/login_user_detail/static/description/assets/icons/wrench.png differ diff --git a/login_user_detail/static/description/assets/modules/approval_image.png b/login_user_detail/static/description/assets/modules/approval_image.png new file mode 100644 index 000000000..84fe94e80 Binary files /dev/null and b/login_user_detail/static/description/assets/modules/approval_image.png differ diff --git a/login_user_detail/static/description/assets/modules/dynamic_image.png b/login_user_detail/static/description/assets/modules/dynamic_image.png new file mode 100644 index 000000000..f55c47e0f Binary files /dev/null and b/login_user_detail/static/description/assets/modules/dynamic_image.png differ diff --git a/login_user_detail/static/description/assets/modules/list_view_image.png b/login_user_detail/static/description/assets/modules/list_view_image.png new file mode 100644 index 000000000..510d36ae9 Binary files /dev/null and b/login_user_detail/static/description/assets/modules/list_view_image.png differ diff --git a/login_user_detail/static/description/assets/modules/multiple_ref_image.png b/login_user_detail/static/description/assets/modules/multiple_ref_image.png new file mode 100644 index 000000000..3fe90e552 Binary files /dev/null and b/login_user_detail/static/description/assets/modules/multiple_ref_image.png differ diff --git a/login_user_detail/static/description/assets/modules/print_image.png b/login_user_detail/static/description/assets/modules/print_image.png new file mode 100644 index 000000000..b470725a1 Binary files /dev/null and b/login_user_detail/static/description/assets/modules/print_image.png differ diff --git a/login_user_detail/static/description/assets/modules/product_return_image.png b/login_user_detail/static/description/assets/modules/product_return_image.png new file mode 100644 index 000000000..3afc14722 Binary files /dev/null and b/login_user_detail/static/description/assets/modules/product_return_image.png differ diff --git a/login_user_detail/static/description/assets/screenshots/hero.png b/login_user_detail/static/description/assets/screenshots/hero.png new file mode 100644 index 000000000..3145df18a Binary files /dev/null and b/login_user_detail/static/description/assets/screenshots/hero.png differ diff --git a/login_user_detail/static/description/assets/screenshots/screenshot1.png b/login_user_detail/static/description/assets/screenshots/screenshot1.png new file mode 100644 index 000000000..4d7002e2c Binary files /dev/null and b/login_user_detail/static/description/assets/screenshots/screenshot1.png differ diff --git a/login_user_detail/static/description/banner.png b/login_user_detail/static/description/banner.png new file mode 100644 index 000000000..4fbe85ac1 Binary files /dev/null and b/login_user_detail/static/description/banner.png differ diff --git a/login_user_detail/static/description/cybro_logo.png b/login_user_detail/static/description/cybro_logo.png new file mode 100755 index 000000000..bb309114c Binary files /dev/null and b/login_user_detail/static/description/cybro_logo.png differ diff --git a/login_user_detail/static/description/cybrosys-login-user-details.png b/login_user_detail/static/description/cybrosys-login-user-details.png new file mode 100755 index 000000000..38477eeed Binary files /dev/null and b/login_user_detail/static/description/cybrosys-login-user-details.png differ diff --git a/login_user_detail/static/description/icon.png b/login_user_detail/static/description/icon.png new file mode 100644 index 000000000..850496cd0 Binary files /dev/null and b/login_user_detail/static/description/icon.png differ diff --git a/login_user_detail/static/description/index.html b/login_user_detail/static/description/index.html new file mode 100644 index 000000000..4db4af36c --- /dev/null +++ b/login_user_detail/static/description/index.html @@ -0,0 +1,524 @@ +
+
+
+

+ User Log Details

+

+ User Log Details, Record login date, IP Address of login user. +

+ +
+
+ + + + +
+
+

+ Overview +

+
+ +
+

+ User Log Details, Record login date,IP Address of login user. +

+ +
+
+ +
+
+

+ Features +

+
+ +
+
+ +
+
+

+ User Log Details

+

+ View user log details, login date & IP address.

+
+
+
+ +
+
+

+ Screenshots +

+
+ +
+

+ Login Details

+

+ View login details such as user name, IP address, date and time.

+ +
+ +
+ + +
+
+

Suggested Products

+
+ + +
+
+ + + +
+
+
+

Our Services

+
+
+ +
+
+ +
+
+ Odoo + Customization
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Support
+
+ + +
+
+ +
+
+ Hire + Odoo + Developer
+
+ +
+
+ +
+
+ Odoo + Integration
+
+ +
+
+ +
+
+ Odoo + Migration
+
+ + +
+
+ +
+
+ Odoo + Consultancy
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+
+ + + +
+
+
+

Our Industries

+
+
+ +
+
+ +
+ Trading +
+

+ Easily procure + and + sell your products

+
+
+ +
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+ +
+
+ +
+ Education +
+

+ A platform for + educational management

+
+
+ +
+
+ +
+ Manufacturing +
+

+ Plan, track and + schedule your operations

+
+
+ +
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+ +
+
+ +
+ Service Management +
+

+ Keep track of + services and invoice

+
+
+ +
+
+ +
+ Restaurant +
+

+ Run your bar or + restaurant methodically

+
+
+ +
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+ +
+
+ + + + + +
+
+
+

Need Help?

+
+
+
+ + +
+ +
+ + +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+ + +
\ No newline at end of file diff --git a/login_user_detail/static/description/login.png b/login_user_detail/static/description/login.png new file mode 100755 index 000000000..38477eeed Binary files /dev/null and b/login_user_detail/static/description/login.png differ diff --git a/login_user_detail/views/login_user_views.xml b/login_user_detail/views/login_user_views.xml new file mode 100755 index 000000000..1b49d4f1c --- /dev/null +++ b/login_user_detail/views/login_user_views.xml @@ -0,0 +1,42 @@ + + + + + Login User Details + login.detail + +
+ + + + + + + +
+
+
+ + + Login User Details + login.detail + + + + + + + + + + + Login User Details + login.detail + tree,form + + + + +
+
\ No newline at end of file diff --git a/mobile_service_shop/README.rst b/mobile_service_shop/README.rst new file mode 100644 index 000000000..94afe0acf --- /dev/null +++ b/mobile_service_shop/README.rst @@ -0,0 +1,34 @@ +Mobile Service Management +========================= +Module for mobile service shop daily activities + +Configuration +============= +* No additional configurations needed + +Company +------- +* `Cybrosys Techno Solutions `__ + +Credits +------- +* Developers: Milind Mohan @ Cybrosys, odoo@cybrosys.com + Mohammed Shahil M P @cybrosys, odoo@cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit `Our Website `__ + +Further information +=================== +HTML Description: ``__ + diff --git a/mobile_service_shop/__init__.py b/mobile_service_shop/__init__.py new file mode 100644 index 000000000..52d4e9e57 --- /dev/null +++ b/mobile_service_shop/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) +# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# + +from . import models +from . import wizard diff --git a/mobile_service_shop/__manifest__.py b/mobile_service_shop/__manifest__.py new file mode 100644 index 000000000..8e6c1951a --- /dev/null +++ b/mobile_service_shop/__manifest__.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) +# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) +# Noorjahan @ Cybrosys, (odoo@cybrosys.com) +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +{ + 'name': 'Mobile Service Management', + 'version': '15.0.1.0.0', + 'summary': 'Module for managing mobile service shop daily activities.', + 'category': 'Industries', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'depends': ['base', 'stock_account', 'mail', 'product', 'account'], + 'data': ['security/security.xml', + 'security/ir.model.access.csv', + 'views/mobile_service_views.xml', + 'views/product_template.xml', + 'views/terms_and_condition.xml', + 'views/complaint_template.xml', + 'views/complaint_type.xml', + 'views/brand_models.xml', + 'views/brand.xml', + 'wizard/mobile_create_invoice_views.xml', + 'reports/mobile_service_ticket.xml', + 'reports/service_ticket_template.xml', + 'data/mobile_service_data.xml', + 'data/mobile_service_email_template.xml'], + 'images': ['static/description/banner.png'], + 'assets': { + 'web.assets_backend': [ + 'mobile_service_shop/static/src/css/mobile_service.css', + ], + }, + 'installable': True, + 'application': True, + 'auto_install': False, + 'license': 'LGPL-3', +} \ No newline at end of file diff --git a/mobile_service_shop/data/mobile_service_data.xml b/mobile_service_shop/data/mobile_service_data.xml new file mode 100644 index 000000000..f4b1fa2b5 --- /dev/null +++ b/mobile_service_shop/data/mobile_service_data.xml @@ -0,0 +1,23 @@ + + + + + + Mobile Service + sale + SERV + TRUE + + + Mobile Service Charge + service + + + + Mobile Service Advance + service + + + + + \ No newline at end of file diff --git a/mobile_service_shop/data/mobile_service_email_template.xml b/mobile_service_shop/data/mobile_service_email_template.xml new file mode 100644 index 000000000..99e7894a4 --- /dev/null +++ b/mobile_service_shop/data/mobile_service_email_template.xml @@ -0,0 +1,24 @@ + + + + + + + Service Status Email + + ${(object.user_id.email |safe} + ${object.person_name.email |safe} + Ref ${object.name or 'n/a' } + + ${object.person_name.lang} + Dear ${object.person_name.name},

+

Your service request for ${object.brand_name.brand_name or 'n/a' } (${object.model_name.mobile_brand_models or 'n/a' }) with reference no ${object.name or 'n/a' } has been processed to ${object.service_state or 'n/a' } stage.

+

If you have any questions, please let us know.

+

Best regards,

]]> +
+
+ +
+ +
\ No newline at end of file diff --git a/mobile_service_shop/doc/RELEASE_NOTES.md b/mobile_service_shop/doc/RELEASE_NOTES.md new file mode 100755 index 000000000..f8d2bd427 --- /dev/null +++ b/mobile_service_shop/doc/RELEASE_NOTES.md @@ -0,0 +1,7 @@ +## Module + +#### 05.10.2020 +#### Version 15.0.1.0.0 +#### ADD + +Initial Commit. \ No newline at end of file diff --git a/mobile_service_shop/models/__init__.py b/mobile_service_shop/models/__init__.py new file mode 100644 index 000000000..be71dbc02 --- /dev/null +++ b/mobile_service_shop/models/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) +# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import mobile_service +from . import service_ticket +from . import product_order_line +from . import product \ No newline at end of file diff --git a/mobile_service_shop/models/mobile_service.py b/mobile_service_shop/models/mobile_service.py new file mode 100644 index 000000000..ac4745ce6 --- /dev/null +++ b/mobile_service_shop/models/mobile_service.py @@ -0,0 +1,402 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) +# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +############################################################################# +from datetime import datetime, date, timedelta +from odoo import models, fields, api, _ +from odoo.exceptions import Warning, UserError +import pytz + + +class MobileServiceShop(models.Model): + _name = 'mobile.service' + _rec_name = 'name' + _inherit = ['mail.thread', 'mail.activity.mixin'] + + name = fields.Char(string='Service Number', copy=False, default="New") + person_name = fields.Many2one('res.partner', string="Customer Name", required=True) + contact_no = fields.Char(related='person_name.mobile', string="Contact Number") + email_id = fields.Char(related='person_name.email', string="Email") + + street = fields.Char(related='person_name.street', string="Address") + street2 = fields.Char(related='person_name.street2', string="Address") + city = fields.Char(related='person_name.city', string="Address") + state_id = fields.Many2one(related='person_name.state_id', string="Address") + zip = fields.Char(related='person_name.zip', string="Address") + country_id = fields.Many2one(related='person_name.country_id', string="Address") + + brand_name = fields.Many2one('mobile.brand', string="Mobile Brand") + is_in_warranty = fields.Boolean( + 'In Warranty', default=False, + help="Specify if the product is in warranty.") + + warranty_number = fields.Char(string="Warranty No ", help="warranty details") + + re_repair = fields.Boolean( + 'Re-repair', default=False, + help="Re-repairing.") + + imei_no = fields.Char(string="IMEI Number") + + model_name = fields.Many2one('brand.model', string="Model", domain="[('mobile_brand_name','=',brand_name)]") + image_medium = fields.Binary(related='model_name.image_medium', store=True, attachment=True) + date_request = fields.Date(string="Requested date", default=fields.Date.context_today) + return_date = fields.Date(string="Return date", required=True) + technician_name = fields.Many2one('res.users', string="Technician Name", + default=lambda self: self.env.user, required=True) + service_state = fields.Selection([('draft', 'Draft'), ('assigned', 'Assigned'), + ('completed', 'Completed'), ('returned', 'Returned'), + ('not_solved', 'Not solved')], + string='Service Status', default='draft', track_visibility='always') + + complaints_tree = fields.One2many('mobile.complaint.tree', 'complaint_id', string='Complaints Tree') + + product_order_line = fields.One2many('product.order.line', 'product_order_id', string='Parts Order Lines') + + internal_notes = fields.Text(string="Internal notes") + invoice_count = fields.Integer(compute='_invoice_count', string='# Invoice', copy=False) + invoice_ids = fields.Many2many("account.move", string='Invoices', compute="_get_invoiced", readonly=True, + copy=False) + + first_payment_inv = fields.Many2one('account.move', copy=False) + + first_invoice_created = fields.Boolean(string="First Invoice Created", invisible=True, copy=False) + + journal_type = fields.Many2one('account.journal', 'Journal', invisible=True, + default=lambda self: self.env['account.journal'].search([('code', '=', 'SERV')])) + + company_id = fields.Many2one('res.company', 'Company', + default=lambda self: self.env['res.company']._company_default_get('mobile.service')) + + @api.model + def _default_picking_transfer(self): + type_obj = self.env['stock.picking.type'] + company_id = self.env.context.get('company_id') or self.env.user.company_id.id + types = type_obj.search([('code', '=', 'outgoing'), ('warehouse_id.company_id', '=', company_id)], limit=1) + if not types: + types = type_obj.search([('code', '=', 'outgoing'), ('warehouse_id', '=', False)]) + return types[:4] + + stock_picking_id = fields.Many2one('stock.picking', string="Picking Id") + + picking_transfer_id = fields.Many2one('stock.picking.type', 'Deliver To', required=True, + default=_default_picking_transfer, + help="This will determine picking type of outgoing shipment") + + picking_count = fields.Integer() + + @api.onchange('return_date') + def check_date(self): + if self.return_date != False: + return_date_string = datetime.strptime(str(self.return_date), "%Y-%m-%d") + request_date_string = datetime.strptime(str(self.date_request), "%Y-%m-%d") + if return_date_string < request_date_string: + raise UserError("Return date should be greater than requested date") + + def approve(self): + self.service_state = 'assigned' + + def complete(self): + self.service_state = 'completed' + + def return_to(self): + self.service_state = 'returned' + + def not_solved(self): + self.service_state = 'not_solved' + + def action_send_mail(self): + ''' + This function opens a window to compose an email, with the edi sale template message loaded by default + ''' + self.ensure_one() + ir_model_data = self.env['ir.model.data'] + try: + template_id = ir_model_data._xmlid_lookup('mobile_service_shop.email_template_mobile_service')[2] + except ValueError: + template_id = False + try: + compose_form_id = ir_model_data._xmlid_lookup('mail.email_compose_message_wizard_form')[2] + except ValueError: + compose_form_id = False + ctx = { + 'default_model': 'mobile.service', + 'default_res_id': self.ids[0], + 'default_use_template': bool(template_id), + 'default_template_id': template_id, + 'default_composition_mode': 'comment', + } + return { + 'name': _('Compose Email'), + 'type': 'ir.actions.act_window', + 'view_mode': 'form', + 'res_model': 'mail.compose.message', + 'views': [(compose_form_id, 'form')], + 'view_id': compose_form_id, + 'target': 'new', + 'context': ctx, + } + + def return_advance(self): + inv_obj = self.env['account.move'].search([('invoice_origin', '=', self.name)]) + inv_ids = [] + for each in inv_obj: + inv_ids.append(each.id) + view_id = self.env.ref('account.view_move_form').id + if inv_ids: + if len(inv_ids) <= 1: + value = { + 'view_mode': 'form', + 'res_model': 'account.move', + 'view_id': view_id, + 'type': 'ir.actions.act_window', + 'name': 'Invoice', + 'res_id': inv_ids and inv_ids[0] + } + else: + value = { + 'domain': str([('id', 'in', inv_ids)]), + 'view_mode': 'tree,form', + 'res_model': 'account.move', + 'view_id': False, + 'type': 'ir.actions.act_window', + 'name': 'Invoice', + 'res_id': inv_ids + } + + return value + else: + raise UserError("No invoice created") + + def _invoice_count(self): + invoice_ids = self.env['account.move'].search([('invoice_origin', '=', self.name)]) + self.invoice_count = len(invoice_ids) + + @api.model + def create(self, vals): + print(self.env.user.company_id) + if 'company_id' in vals: + vals['name'] = self.env['ir.sequence'].with_context(force_company=self.env.user.company_id.id).next_by_code( + 'mobile.service') or _('New') + else: + vals['name'] = self.env['ir.sequence'].next_by_code('mobile.service') or _('New') + vals['service_state'] = 'draft' + return super(MobileServiceShop, self).create(vals) + + def unlink(self): + for i in self: + if i.service_state != 'draft': + raise UserError(_('You cannot delete an assigned service request')) + return super(MobileServiceShop, self).unlink() + + def action_invoice_create_wizard(self): + + return { + 'name': _('Create Invoice'), + 'view_mode': 'form', + 'res_model': 'mobile.invoice', + 'type': 'ir.actions.act_window', + 'target': 'new' + } + + def action_post_stock(self): + flag = 0 + for order in self.product_order_line: + if order.product_uom_qty > order.qty_stock_move: + flag = 1 + pick = { + 'picking_type_id': self.picking_transfer_id.id, + 'partner_id': self.person_name.id, + 'origin': self.name, + 'location_dest_id': self.person_name.property_stock_customer.id, + 'location_id': self.picking_transfer_id.default_location_src_id.id, + } + + picking = self.env['stock.picking'].create(pick) + self.stock_picking_id = picking.id + self.picking_count = len(picking) + moves = order.filtered( + lambda r: r.product_id.type in ['product', 'consu'])._create_stock_moves_transfer(picking) + move_ids = moves._action_confirm() + move_ids._action_assign() + if order.product_uom_qty < order.qty_stock_move: + raise UserError(_('Used quantity is less than quantity stock move posted. ')) + if flag != 1: + raise UserError(_('Nothing to post stock move')) + if flag != 1: + raise UserError(_('Nothing to post stock move')) + + def action_view_invoice(self): + self.ensure_one() + ctx = dict( + create=False, + ) + action = { + 'name': _("Invoices"), + 'type': 'ir.actions.act_window', + 'res_model': 'account.move', + 'target': 'current', + 'context': ctx + } + invoice_ids = self.env['account.move'].search([('invoice_origin', '=', self.name)]) + inv_ids = [] + for each in invoice_ids: + inv_ids.append(each.id) + if len(invoice_ids) == 1: + invoice = inv_ids and inv_ids[0] + action['res_id'] = invoice + action['view_mode'] = 'form' + action['views'] = [ + (self.env.ref('account.view_move_form').id, 'form')] + else: + + action['view_mode'] = 'tree,form' + action['domain'] = [('id', 'in', inv_ids)] + return action + # inv_obj = self.env['account.move'].search([('invoice_origin', '=', self.name)]) + # inv_ids = [] + # for each in inv_obj: + # inv_ids.append(each.id) + # view_id = self.env.ref('account.view_move_form').id + # ctx = dict( + # create=False, + # ) + # if inv_ids: + # if len(inv_ids) <= 1: + # value = { + # 'view_mode': 'form', + # 'res_model': 'account.move', + # 'view_id': view_id, + # 'type': 'ir.actions.act_window', + # 'name': 'Invoice', + # 'context': ctx, + # 'res_id': inv_ids and inv_ids[0] + # } + # else: + # value = { + # 'domain': str([('id', 'in', inv_ids)]), + # 'view_mode': 'tree,form', + # 'res_model': 'account.move', + # 'view_id': False, + # 'type': 'ir.actions.act_window', + # 'context': ctx, + # 'name': 'Invoice', + # 'res_id': inv_ids + # } + # + # return value + + def get_ticket(self): + self.ensure_one() + user = self.env['res.users'].browse(self.env.uid) + if user.tz: + tz = pytz.timezone(user.tz) + time = pytz.utc.localize(datetime.now()).astimezone(tz) + date_today = time.strftime("%Y-%m-%d %H:%M %p") + else: + date_today = datetime.strftime(datetime.now(), "%Y-%m-%d %I:%M:%S %p") + complaint_text = "" + description_text = "" + complaint_id = self.env['mobile.complaint.tree'].search([('complaint_id', '=', self.id)]) + if complaint_id: + for obj in complaint_id: + complaint = obj.complaint_type_tree + description = obj.description_tree + complaint_text = complaint.complaint_type + ", " + complaint_text + if description.description: + description_text = description.description + ", " + description_text + else: + for obj in complaint_id: + complaint = obj.complaint_type_tree + complaint_text = complaint.complaint_type + ", " + complaint_text + data = { + 'ids': self.ids, + 'model': self._name, + 'date_today': date_today, + 'date_request': self.date_request, + 'date_return': self.return_date, + 'sev_id': self.name, + 'warranty': self.is_in_warranty, + 'customer_name': self.person_name.name, + 'imei_no': self.imei_no, + 'technician': self.technician_name.name, + 'complaint_types': complaint_text, + 'complaint_description': description_text, + 'mobile_brand': self.brand_name.brand_name, + 'model_name': self.model_name.mobile_brand_models, + + } + return self.env.ref('mobile_service_shop.mobile_service_ticket').report_action(self, data=data) + + +class MobileBrand(models.Model): + _name = 'mobile.brand' + _rec_name = 'brand_name' + + brand_name = fields.Char(string="Mobile Brand", required=True) + + +class MobileComplaintType(models.Model): + _name = 'mobile.complaint' + _rec_name = 'complaint_type' + + complaint_type = fields.Char(string="Complaint Type", required=True) + + +class MobileComplaintTypeTemplate(models.Model): + _name = 'mobile.complaint.description' + _rec_name = 'description' + + complaint_type_template = fields.Many2one('mobile.complaint', string="Complaint Type Template", required=True) + description = fields.Text(string="Complaint Description") + + +class MobileComplaintTree(models.Model): + _name = 'mobile.complaint.tree' + _rec_name = 'complaint_type_tree' + + complaint_id = fields.Many2one('mobile.service') + + complaint_type_tree = fields.Many2one('mobile.complaint', string="Category", required=True) + description_tree = fields.Many2one('mobile.complaint.description', string="Description", + domain="[('complaint_type_template','=',complaint_type_tree)]") + + +class MobileBrandModels(models.Model): + _name = 'brand.model' + _rec_name = 'mobile_brand_models' + + mobile_brand_name = fields.Many2one('mobile.brand', string="Mobile Brand", required=True) + mobile_brand_models = fields.Char(string="Model Name", required=True) + image_medium = fields.Binary(string='image', store=True, attachment=True) + + +class MobileServiceTermsAndConditions(models.Model): + _name = 'terms.conditions' + _rec_name = 'terms_id' + + terms_id = fields.Char(String="Terms and condition", compute="_find_id") + terms_conditions = fields.Text(string="Terms and Conditions") + + def _find_id(self): + self.terms_id = self.id or '' + + diff --git a/mobile_service_shop/models/product.py b/mobile_service_shop/models/product.py new file mode 100644 index 000000000..ca57029fe --- /dev/null +++ b/mobile_service_shop/models/product.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) +# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import models, fields, api, _ + + +class ProductProduct(models.Model): + _inherit = 'product.template' + + is_a_parts = fields.Boolean( + 'Is a Mobile Part', default=False, + help="Specify if the product is a mobile part or not.") + + brand_name = fields.Many2one('mobile.brand', String="Brand", help="Select a mobile brand for the part") + model_name = fields.Many2one('brand.model', String="Model Name", domain="[('mobile_brand_name','=',brand_name)]", + help="Select a model for the part") + model_colour = fields.Char(string="Colour", help="colour for the part") + extra_descriptions = fields.Text(string="Note") \ No newline at end of file diff --git a/mobile_service_shop/models/product_order_line.py b/mobile_service_shop/models/product_order_line.py new file mode 100644 index 000000000..33be7d3f5 --- /dev/null +++ b/mobile_service_shop/models/product_order_line.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) +# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import models, fields, api, _ + + +class ProductOrderLine(models.Model): + + _name = 'product.order.line' + + product_order_id = fields.Many2one('mobile.service') + + product_id = fields.Many2one('product.product', string='Product', + domain="[('is_a_parts','=', True)]", required=True) + product_uom_qty = fields.Float(string='Used Quantity', default=1.0, required=True) + price_unit = fields.Float(string='Unit Price', default=0.0, required=True) + qty_invoiced = fields.Float(string='Invoiced qty', readonly=True) + qty_stock_move = fields.Float(string='Stock Move Posted Qty', readonly=True) + part_price = fields.Char(compute='_compute_amount', string='Price', readonly=True, store=True) + product_uom = fields.Char(string='Unit of Measure', required=True) + + @api.onchange('product_id') + def change_prod(self): + self.ensure_one() + if self.product_id: + product_template_obj = self.product_id.product_tmpl_id + self.price_unit = product_template_obj.list_price + self.product_uom = product_template_obj.uom_id.name + + @api.depends('product_uom_qty', 'product_id') + def _compute_amount(self): + """ + Compute the amount + """ + for line in self: + price = line.price_unit * line.product_uom_qty + + line.update({ + 'part_price': price, + }) + + def _create_stock_moves_transfer(self, picking): + moves = self.env['stock.move'] + done = self.env['stock.move'].browse() + if self.product_id.product_tmpl_id.type != 'service': + price_unit = self.price_unit + template = { + 'name': self.product_id.product_tmpl_id.name or '', + 'product_id': self.product_id.id, + 'product_uom': self.product_id.product_tmpl_id.uom_id.id, + 'location_id': picking.picking_type_id.default_location_src_id.id, + 'location_dest_id': self.product_order_id.person_name.property_stock_customer.id, + 'picking_id': picking.id, + 'move_dest_ids': False, + 'state': 'draft', + 'company_id': self.product_order_id.company_id.id, + 'price_unit': price_unit, + 'picking_type_id': picking.picking_type_id.id, + 'route_ids': 1 and [ + (6, 0, [x.id for x in self.env['stock.location.route'].search([('id', 'in', (2, 3))])])] or [], + 'warehouse_id': picking.picking_type_id.warehouse_id.id, + } + qty = self.product_uom_qty - self.qty_stock_move + print(qty) + diff_quantity = qty + tmp = template.copy() + tmp.update({ + 'product_uom_qty': diff_quantity, + }) + template['product_uom_qty'] = diff_quantity + done += moves.create(template) + self.qty_stock_move = self.qty_stock_move + qty + return done \ No newline at end of file diff --git a/mobile_service_shop/models/service_ticket.py b/mobile_service_shop/models/service_ticket.py new file mode 100755 index 000000000..cb224f9eb --- /dev/null +++ b/mobile_service_shop/models/service_ticket.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) +# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import models, api + + +class StockMoveReport(models.AbstractModel): + + _name = 'report.mobile_service_shop.mobile_service_ticket_template' + + @api.model + def _get_report_values(self, docids, data): + terms = self.env['terms.conditions'].search([]) + return { + 'date_today': data['date_today'], + 'date_request': data['date_request'], + 'date_return': data['date_return'], + 'sev_id': data['sev_id'], + 'imei_no': data['imei_no'], + 'technician': data['technician'], + 'complaint_types': data['complaint_types'], + 'complaint_description': data['complaint_description'], + 'mobile_brand': data['mobile_brand'], + 'model_name': data['model_name'], + 'customer_name': data['customer_name'], + 'warranty': data['warranty'], + 'terms': terms, + } diff --git a/mobile_service_shop/reports/mobile_service_ticket.xml b/mobile_service_shop/reports/mobile_service_ticket.xml new file mode 100644 index 000000000..5a9f0cc4d --- /dev/null +++ b/mobile_service_shop/reports/mobile_service_ticket.xml @@ -0,0 +1,12 @@ + + + + + Mobile Service Ticket + mobile.service + qweb-pdf + mobile_service_shop.mobile_service_ticket_template + mobile_service_shop.mobile_service_ticket_template + + + \ No newline at end of file diff --git a/mobile_service_shop/reports/service_ticket_template.xml b/mobile_service_shop/reports/service_ticket_template.xml new file mode 100644 index 000000000..484091d2f --- /dev/null +++ b/mobile_service_shop/reports/service_ticket_template.xml @@ -0,0 +1,83 @@ + + + + + \ No newline at end of file diff --git a/mobile_service_shop/security/ir.model.access.csv b/mobile_service_shop/security/ir.model.access.csv new file mode 100644 index 000000000..ca693432e --- /dev/null +++ b/mobile_service_shop/security/ir.model.access.csv @@ -0,0 +1,15 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_mobile_service_shop_mobile_service_shop,access.mobile_service_shop.mobile_service_shop,model_mobile_service,mobile_service_group_executer,1,1,0,0 +access_mobile_service_shop_mobile_service_shop11,access.mobile_service_shop.mobile_service_shop11,model_mobile_complaint,mobile_service_group_executer,1,0,0,0 +access_mobile_service_shop_mobile_service_shop22,access.mobile_service_shop.mobile_service_shop22,model_mobile_service,mobile_service_group_manager,1,1,1,1 +access_mobile_service_shop_mobile_service_shop33,access.mobile_service_shop.mobile_service_shop33,model_mobile_brand,mobile_service_group_manager,1,1,1,1 +access_mobile_service_shop_mobile_service_shop44,access.mobile_service_shop.mobile_service_shop44,model_brand_model,mobile_service_group_manager,1,1,1,1 +access_mobile_service_shop_mobile_service_shop66,access.mobile_service_shop.mobile_service_shop66,model_mobile_complaint,mobile_service_group_manager,1,1,1,1 +access_mobile_service_shop_mobile_service_shop88,access.mobile_service_shop.mobile_service_shop88,model_product_template,mobile_service_group_manager,1,1,1,1 +access_mobile_service_shop_mobile_service_shop99,access.mobile_service_shop.mobile_service_shop99,model_mobile_complaint_tree,mobile_service_group_executer,1,1,1,0 +access_mobile_service_shop_mobile_service_shop111,access.mobile_service_shop.mobile_service_shop111,model_mobile_complaint_description,mobile_service_group_manager,1,1,1,1 +access_mobile_service_shop_mobile_service_shop112,access.mobile_service_shop.mobile_service_shop112,model_terms_conditions,mobile_service_group_manager,1,1,1,1 +access_mobile_service_shop_mobile_service_shop113,access.mobile_service_shop.mobile_service_shop113,model_mobile_complaint_tree,mobile_service_group_manager,1,1,1,1 +access_mobile_service_shop_mobile_service_shop114,access.mobile_service_shop.mobile_service_shop114,model_mobile_complaint_description,mobile_service_group_executer,1,1,0,0 +access_mobile_service_shop_mobile_service_shop115,access.mobile_service_shop.mobile_service_shop115,model_product_order_line,mobile_service_group_executer,1,1,1,1 +access_mobile_service_shop_mobile_service_shop116,access.mobile_service_shop.mobile_service_shop116,model_mobile_invoice,mobile_service_group_manager,1,1,1,1 diff --git a/mobile_service_shop/security/security.xml b/mobile_service_shop/security/security.xml new file mode 100644 index 000000000..c52e40263 --- /dev/null +++ b/mobile_service_shop/security/security.xml @@ -0,0 +1,36 @@ + + + + + Mobile Service + 5 + + + + Mobile Technician + + + + + + Manager + + + + + + + Mobile Service rule + + [('technician_name','=',user.id),('service_state','!=','draft'), ('company_id','=',user.company_id.id)] + + + + + Mobile Service Manager rule + + [('company_id','=',user.company_id.id)] + + + + \ No newline at end of file diff --git a/mobile_service_shop/static/description/assets/icons/check.png b/mobile_service_shop/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/check.png differ diff --git a/mobile_service_shop/static/description/assets/icons/chevron.png b/mobile_service_shop/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/chevron.png differ diff --git a/mobile_service_shop/static/description/assets/icons/cogs.png b/mobile_service_shop/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/cogs.png differ diff --git a/mobile_service_shop/static/description/assets/icons/consultation.png b/mobile_service_shop/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/consultation.png differ diff --git a/mobile_service_shop/static/description/assets/icons/ecom-black.png b/mobile_service_shop/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/ecom-black.png differ diff --git a/mobile_service_shop/static/description/assets/icons/education-black.png b/mobile_service_shop/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/education-black.png differ diff --git a/mobile_service_shop/static/description/assets/icons/hotel-black.png b/mobile_service_shop/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/hotel-black.png differ diff --git a/mobile_service_shop/static/description/assets/icons/license.png b/mobile_service_shop/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/license.png differ diff --git a/mobile_service_shop/static/description/assets/icons/lifebuoy.png b/mobile_service_shop/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/lifebuoy.png differ diff --git a/mobile_service_shop/static/description/assets/icons/logo.png b/mobile_service_shop/static/description/assets/icons/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/logo.png differ diff --git a/mobile_service_shop/static/description/assets/icons/manufacturing-black.png b/mobile_service_shop/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/manufacturing-black.png differ diff --git a/mobile_service_shop/static/description/assets/icons/pos-black.png b/mobile_service_shop/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/pos-black.png differ diff --git a/mobile_service_shop/static/description/assets/icons/puzzle.png b/mobile_service_shop/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/puzzle.png differ diff --git a/mobile_service_shop/static/description/assets/icons/restaurant-black.png b/mobile_service_shop/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/restaurant-black.png differ diff --git a/mobile_service_shop/static/description/assets/icons/service-black.png b/mobile_service_shop/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/service-black.png differ diff --git a/mobile_service_shop/static/description/assets/icons/trading-black.png b/mobile_service_shop/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/trading-black.png differ diff --git a/mobile_service_shop/static/description/assets/icons/training.png b/mobile_service_shop/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/training.png differ diff --git a/mobile_service_shop/static/description/assets/icons/update.png b/mobile_service_shop/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/update.png differ diff --git a/mobile_service_shop/static/description/assets/icons/user.png b/mobile_service_shop/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/user.png differ diff --git a/mobile_service_shop/static/description/assets/icons/wrench.png b/mobile_service_shop/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/mobile_service_shop/static/description/assets/icons/wrench.png differ diff --git a/mobile_service_shop/static/description/assets/modules/approval_image.png b/mobile_service_shop/static/description/assets/modules/approval_image.png new file mode 100644 index 000000000..84fe94e80 Binary files /dev/null and b/mobile_service_shop/static/description/assets/modules/approval_image.png differ diff --git a/mobile_service_shop/static/description/assets/modules/budget_image.png b/mobile_service_shop/static/description/assets/modules/budget_image.png new file mode 100644 index 000000000..fe6aa6fe4 Binary files /dev/null and b/mobile_service_shop/static/description/assets/modules/budget_image.png differ diff --git a/mobile_service_shop/static/description/assets/modules/export_image.png b/mobile_service_shop/static/description/assets/modules/export_image.png new file mode 100644 index 000000000..4e4ea0e51 Binary files /dev/null and b/mobile_service_shop/static/description/assets/modules/export_image.png differ diff --git a/mobile_service_shop/static/description/assets/modules/magento_image.png b/mobile_service_shop/static/description/assets/modules/magento_image.png new file mode 100644 index 000000000..39de0820f Binary files /dev/null and b/mobile_service_shop/static/description/assets/modules/magento_image.png differ diff --git a/mobile_service_shop/static/description/assets/modules/mobile_service_shop_pro.png b/mobile_service_shop/static/description/assets/modules/mobile_service_shop_pro.png new file mode 100644 index 000000000..68d11114c Binary files /dev/null and b/mobile_service_shop/static/description/assets/modules/mobile_service_shop_pro.png differ diff --git a/mobile_service_shop/static/description/assets/modules/pos_image.png b/mobile_service_shop/static/description/assets/modules/pos_image.png new file mode 100644 index 000000000..c5932894b Binary files /dev/null and b/mobile_service_shop/static/description/assets/modules/pos_image.png differ diff --git a/mobile_service_shop/static/description/assets/modules/shopify_image.png b/mobile_service_shop/static/description/assets/modules/shopify_image.png new file mode 100644 index 000000000..c6d92c16d Binary files /dev/null and b/mobile_service_shop/static/description/assets/modules/shopify_image.png differ diff --git a/mobile_service_shop/static/description/assets/screenshots/hero.png b/mobile_service_shop/static/description/assets/screenshots/hero.png new file mode 100644 index 000000000..7730fad19 Binary files /dev/null and b/mobile_service_shop/static/description/assets/screenshots/hero.png differ diff --git a/mobile_service_shop/static/description/assets/screenshots/mobile-1.png b/mobile_service_shop/static/description/assets/screenshots/mobile-1.png new file mode 100644 index 000000000..469ee94d3 Binary files /dev/null and b/mobile_service_shop/static/description/assets/screenshots/mobile-1.png differ diff --git a/mobile_service_shop/static/description/assets/screenshots/mobile-10.png b/mobile_service_shop/static/description/assets/screenshots/mobile-10.png new file mode 100644 index 000000000..2faeca8d8 Binary files /dev/null and b/mobile_service_shop/static/description/assets/screenshots/mobile-10.png differ diff --git a/mobile_service_shop/static/description/assets/screenshots/mobile-11.png b/mobile_service_shop/static/description/assets/screenshots/mobile-11.png new file mode 100644 index 000000000..eabd6ee18 Binary files /dev/null and b/mobile_service_shop/static/description/assets/screenshots/mobile-11.png differ diff --git a/mobile_service_shop/static/description/assets/screenshots/mobile-2.png b/mobile_service_shop/static/description/assets/screenshots/mobile-2.png new file mode 100644 index 000000000..23a105fab Binary files /dev/null and b/mobile_service_shop/static/description/assets/screenshots/mobile-2.png differ diff --git a/mobile_service_shop/static/description/assets/screenshots/mobile-3.png b/mobile_service_shop/static/description/assets/screenshots/mobile-3.png new file mode 100644 index 000000000..3fa818856 Binary files /dev/null and b/mobile_service_shop/static/description/assets/screenshots/mobile-3.png differ diff --git a/mobile_service_shop/static/description/assets/screenshots/mobile-4.png b/mobile_service_shop/static/description/assets/screenshots/mobile-4.png new file mode 100644 index 000000000..91fb01252 Binary files /dev/null and b/mobile_service_shop/static/description/assets/screenshots/mobile-4.png differ diff --git a/mobile_service_shop/static/description/assets/screenshots/mobile-5.png b/mobile_service_shop/static/description/assets/screenshots/mobile-5.png new file mode 100644 index 000000000..13107ee2a Binary files /dev/null and b/mobile_service_shop/static/description/assets/screenshots/mobile-5.png differ diff --git a/mobile_service_shop/static/description/assets/screenshots/mobile-6.png b/mobile_service_shop/static/description/assets/screenshots/mobile-6.png new file mode 100644 index 000000000..c20cd8e85 Binary files /dev/null and b/mobile_service_shop/static/description/assets/screenshots/mobile-6.png differ diff --git a/mobile_service_shop/static/description/assets/screenshots/mobile-7.png b/mobile_service_shop/static/description/assets/screenshots/mobile-7.png new file mode 100644 index 000000000..e954257fd Binary files /dev/null and b/mobile_service_shop/static/description/assets/screenshots/mobile-7.png differ diff --git a/mobile_service_shop/static/description/assets/screenshots/mobile-8.png b/mobile_service_shop/static/description/assets/screenshots/mobile-8.png new file mode 100644 index 000000000..77c1c6c85 Binary files /dev/null and b/mobile_service_shop/static/description/assets/screenshots/mobile-8.png differ diff --git a/mobile_service_shop/static/description/assets/screenshots/mobile-9.png b/mobile_service_shop/static/description/assets/screenshots/mobile-9.png new file mode 100644 index 000000000..417ea27ea Binary files /dev/null and b/mobile_service_shop/static/description/assets/screenshots/mobile-9.png differ diff --git a/mobile_service_shop/static/description/banner.png b/mobile_service_shop/static/description/banner.png new file mode 100644 index 000000000..0ab0bc2db Binary files /dev/null and b/mobile_service_shop/static/description/banner.png differ diff --git a/mobile_service_shop/static/description/icon.png b/mobile_service_shop/static/description/icon.png new file mode 100644 index 000000000..f55332537 Binary files /dev/null and b/mobile_service_shop/static/description/icon.png differ diff --git a/mobile_service_shop/static/description/index.html b/mobile_service_shop/static/description/index.html new file mode 100644 index 000000000..d94e5a146 --- /dev/null +++ b/mobile_service_shop/static/description/index.html @@ -0,0 +1,849 @@ +
+
+
+
+ +
+
+
+ Community +
+
+ Enterprise +
+ +
+
+
+
+ +
+
+
+

+ Mobile Service Management

+

+ This module helps in managing mobile service shop daily activities. +

+ +
+
+ + + + +
+
+

+ Overview +

+
+ +
+

+ This module is exclusively designed for the mobile service shop for managing their daily activities + inside the service center. The module comes integrated with accounting and inventory modules + maximizing the efficiency. It comes embedded with features such as adding complaint templates, + making it a much user-friendly application. The module also helps in generating service tickets in + the workplace.

+ +
+
+
+
+

+ Access Rights +

+
+ +
+
+ +
+
+

+ Manager

+

+ Manager has the complete access over the mobile shop management.

+
+ +
+
+
+ +
+
+

+ Mobile Technician

+

+ Mobile Technician can read and write service requests and also update the parts usage.

+
+ +
+
+ + +
+
+

+ Features +

+
+ +
+
+ +
+
+

+ Service request creation.

+ +
+
+
+
+ +
+
+

+ Assigning service request to technicians

+ +
+
+ +
+
+ +
+
+

+ Mobile service ticket generation

+ +
+
+ +
+
+ +
+
+

+ Tracking the service status

+ +
+
+ +
+
+ +
+
+

+ Integrated with accounting and sales module

+ +
+
+ +
+
+ +
+
+

+ Multi-level access rights

+ +
+
+ +
+
+ +
+
+

+ Mobile complaint templates

+ +
+
+ +
+
+ +
+
+

+ Invoice for parts usage and service charges

+ +
+
+
+
+ +
+
+

+ Email notifications to customer

+ +
+
+
+
+ +
+
+

+ Parts inventory

+ +
+
+ +
+
+ +
+
+

+ Flexible for further customization

+ +
+
+ + + +
+ +
+
+

+ Screenshots +

+
+
+

+ Mobile Service Shop

+

+ When you install the module, an extra menu named Mobile Service is created. Here you can see the + service requests and thereafter configure your mobile service shop.

+ +
+ +
+

+ Mobile Service -> Service Request -> Create

+

+ This is the service request creation form. Service request can be created according to the device + brand and model. One can assign the technician, service request, provide with warranty details, + customer details, IMEI no, request and return dates etc. +

+ +
+ +
+

+ Generating tickets for service request.

+

+ Here you can create tickets for service requests by using the 'Print Ticket' button. +

+ +
+ + +
+

+ Mobile parts inventory

+

+ Here you see the mobile parts used for service processing. +

+ +
+ + +
+

+ Invoice for service requests

+

+ Here you can create invoices for service requests. +

+ +
+ + +
+

+ Post Stock moves

+

+ No need to create stock moves for parts usage manually. 'Post Stock Moves' will generate stock for + the parts usage. +

+ +
+ +
+

+ Email Notification

+

+ The system will send email notification to the customer for each stage in the service request. + Note:- You should configure outgoing and incoming e-mail settings from your Odoo for email service +

+ +
+ +
+

+ Brands Configuration

+

+ Create mobile brands which is used in service request creation. Mobile Service -> Configuration -> + Brands +

+ +
+ +
+

+ Models Configuration

+

+ You can also create models for different mobile brands from. Mobile Service -> Configuration -> + Models +

+ +
+ + +
+

+ Complaint Types

+

+ + You can create different complaint types from. Mobile Service -> Configuration -> Complaint Types +

+ +
+ + +
+

+ Complaint Templates

+

+ Complaint Templates can be created from. Mobile Service -> Configuration -> Complaint Templates +

+ +
+ + +
+ + +
+
+

Suggested Products

+
+ + +
+
+ + + +
+
+
+

Our Services

+
+
+ +
+
+ +
+
+ Odoo + Customization
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Support
+
+ + +
+
+ +
+
+ Hire + Odoo + Developer
+
+ +
+
+ +
+
+ Odoo + Integration
+
+ +
+
+ +
+
+ Odoo + Migration
+
+ + +
+
+ +
+
+ Odoo + Consultancy
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+
+ + + +
+
+
+

Our Industries

+
+
+ +
+
+ +
+ Trading +
+

+ Easily procure + and + sell your products

+
+
+ +
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+ +
+
+ +
+ Education +
+

+ A platform for + educational management

+
+
+ +
+
+ +
+ Manufacturing +
+

+ Plan, track and + schedule your operations

+
+
+ +
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+ +
+
+ +
+ Service Management +
+

+ Keep track of + services and invoice

+
+
+ +
+
+ +
+ Restaurant +
+

+ Run your bar or + restaurant methodically

+
+
+ +
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+ +
+
+ + + + + +
+
+
+

Need Help?

+
+
+
+ + +
+ +
+ +
+ +
+ WhatsApp +
+
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+ + +
\ No newline at end of file diff --git a/mobile_service_shop/static/src/css/mobile_service.css b/mobile_service_shop/static/src/css/mobile_service.css new file mode 100644 index 000000000..1b5313714 --- /dev/null +++ b/mobile_service_shop/static/src/css/mobile_service.css @@ -0,0 +1,6 @@ +.Your_custom_class { + height: 80px; width: 80px; overflow:hidden; +} +.openerp .oe_form .oe_form_field_image img { + max-width:80px; max-height: 80px; +} \ No newline at end of file diff --git a/mobile_service_shop/views/brand.xml b/mobile_service_shop/views/brand.xml new file mode 100644 index 000000000..0c1792256 --- /dev/null +++ b/mobile_service_shop/views/brand.xml @@ -0,0 +1,45 @@ + + + + + mobile.brand.form + mobile.brand + +
+ + + + + + + +
+
+
+ + + mobile.brand.tree + mobile.brand + + + + + + + + + Brand + mobile.brand + tree,form + + +

+ Click to Create a New Record. +

+
+
+ + +
+
\ No newline at end of file diff --git a/mobile_service_shop/views/brand_models.xml b/mobile_service_shop/views/brand_models.xml new file mode 100644 index 000000000..59ece8bf5 --- /dev/null +++ b/mobile_service_shop/views/brand_models.xml @@ -0,0 +1,82 @@ + + + + + mobile.brand.model.form + brand.model + +
+ + + + + + + + + +
+
+
+ + + mobile.service.kanban + brand.model + + + + + + + +
+
+ Product +
+
+ + + +
+
+
    +
  • model:
  • +
+
+
+ + + + + + + + + mobile.brand.model.tree + brand.model + + + + + + + + + + + + Models + brand.model + kanban,tree,form + +

+ Click to Create a New Record. +

+
+
+ + + + \ No newline at end of file diff --git a/mobile_service_shop/views/complaint_template.xml b/mobile_service_shop/views/complaint_template.xml new file mode 100644 index 000000000..22a5383b7 --- /dev/null +++ b/mobile_service_shop/views/complaint_template.xml @@ -0,0 +1,45 @@ + + + + + mobile.complaint.template.form + mobile.complaint.description + +
+ + + + + + +
+
+
+ + + mobile.complaint.type.tree + mobile.complaint.description + + + + + + + + + + Complaint Types + mobile.complaint.description + tree,form + + +

+ Click to Create a New Record. +

+
+
+ + +
+
\ No newline at end of file diff --git a/mobile_service_shop/views/complaint_type.xml b/mobile_service_shop/views/complaint_type.xml new file mode 100644 index 000000000..1a3815bf1 --- /dev/null +++ b/mobile_service_shop/views/complaint_type.xml @@ -0,0 +1,47 @@ + + + + + mobile.complaint.type.form + mobile.complaint + +
+ + + + + + + +
+
+
+ + + mobile.complaint.type.tree + mobile.complaint + + + + + + + + + Complaint Types + mobile.complaint + tree,form + + +

+ Click to Create a New Record. +

+
+ +
+ + +
+
\ No newline at end of file diff --git a/mobile_service_shop/views/mobile_service_views.xml b/mobile_service_shop/views/mobile_service_views.xml new file mode 100644 index 000000000..ca7c11630 --- /dev/null +++ b/mobile_service_shop/views/mobile_service_views.xml @@ -0,0 +1,298 @@ + + + + + Service Code + mobile.service + SERV/ + + + + + + service.request.search1 + mobile.service + + + + + + + + + + + + + + + + + + + + + + + + mobile.service.request.form + mobile.service + +
+
+
+ +
+ +
+
+

+ +

+
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+
+
+ + +
+ +
+
+ + + mobile.service.kanban + mobile.service + + + + + + +
+
+ +
+
+
+ + + +
+
+ +
+ +
+
+
+
+
+
+
+
+
+ + + mobile.service.graph + mobile.service + + + + + + + + + mobile.service.request.tree + mobile.service + + + + + + + + + + + + + + + + + + Service Request + mobile.service + tree,form,kanban,pivot,graph + + + +

+ Click to Create a New Record. +

+
+
+ + + + + + + + + + + +
+
\ No newline at end of file diff --git a/mobile_service_shop/views/product_template.xml b/mobile_service_shop/views/product_template.xml new file mode 100644 index 000000000..910d49767 --- /dev/null +++ b/mobile_service_shop/views/product_template.xml @@ -0,0 +1,83 @@ + + + + + + product.parts.form.view + product.template + + + + + + + + + + + + + + + + + + + + + + + + + + product.template.product.kanban + product.product + + + + + + + + + + + + + product.template.product.kanban + product.template + + + + + + + + + + + + + + Products + ir.actions.act_window + product.product + kanban,tree,form + {"search_default_consumable":1, 'default_type': 'product'} + [('is_a_parts', '=', True)] + +

+ Click to define a new product. +

+
+
+ + + + +
+
\ No newline at end of file diff --git a/mobile_service_shop/views/terms_and_condition.xml b/mobile_service_shop/views/terms_and_condition.xml new file mode 100644 index 000000000..59c42d9b4 --- /dev/null +++ b/mobile_service_shop/views/terms_and_condition.xml @@ -0,0 +1,44 @@ + + + + + mobile.terms.and.conditions.form + terms.conditions + +
+ + + + + +
+
+
+ + + mobile.terms.and.conditions.tree + terms.conditions + + + + + + + + + Terms and Conditions + terms.conditions + tree,form + + +

+ Click to Create a New Record. +

+
+
+ + +
+
\ No newline at end of file diff --git a/mobile_service_shop/wizard/__init__.py b/mobile_service_shop/wizard/__init__.py new file mode 100644 index 000000000..b42d7c3d2 --- /dev/null +++ b/mobile_service_shop/wizard/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) +# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import mobile_create_invoice + diff --git a/mobile_service_shop/wizard/mobile_create_invoice.py b/mobile_service_shop/wizard/mobile_create_invoice.py new file mode 100644 index 000000000..2e6881296 --- /dev/null +++ b/mobile_service_shop/wizard/mobile_create_invoice.py @@ -0,0 +1,157 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) +# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import api, fields, models, _ +from odoo.exceptions import Warning, UserError +from odoo.exceptions import UserError, ValidationError + + +class MobileServiceInvoice(models.Model): + + _name = 'mobile.invoice' + + advance_payment_method = fields.Selection([('advance', 'Advance'), ('full_amount', 'Full amount')], + string='Invoice method', default='advance') + amount = fields.Integer(string='Amount') + number = fields.Char(string='Service Id') + + def action_invoice_create(self): + active_id = self._context.get('active_id') + service_id = self.env['mobile.service'].search([('id', '=', active_id)]) + if not service_id.env['product.product'].search([("name", "=", "Mobile Service Advance")]): + vals = self._prepare_advance_product() + self.env['product.product'].create(vals) + + if not service_id.env['product.product'].search([("name", "=", "Mobile Service Charge")]): + vals1 = self._prepare_service_product() + self.env['product.product'].create(vals1) + + service_id.first_invoice_created = True + inv_obj = self.env['account.move'] + inv_line_obj = self.env['account.move.line'] + supplier = service_id.person_name + inv_data = { + 'move_type': 'out_invoice', + 'ref': supplier.name, + 'partner_id': supplier.id, + 'currency_id': service_id.company_id.currency_id.id, + 'journal_id': service_id.journal_type.id, + 'invoice_origin': service_id.name, + 'company_id': service_id.company_id.id, + } + inv_id = inv_obj.create(inv_data) + service_id.first_payment_inv = inv_id.id + self.number = service_id.name + if self.advance_payment_method != 'advance': + product_id = service_id.env['product.product'].search([("name", "=", "Mobile Service Charge")]) + else: + product_id = service_id.env['product.product'].search([("name", "=", "Mobile Service Advance")]) + + if product_id.property_account_income_id.id: + income_account = product_id.property_account_income_id.id + elif product_id.categ_id.property_account_income_categ_id.id: + income_account = product_id.categ_id.property_account_income_categ_id.id + else: + raise UserError('Please define income account for this product: "%s" (id:%d).' % + (product_id.name, product_id.id)) + flag = 0 + if self.amount: + flag = 1 + inv_line_data = [(0, 0, { + 'name': product_id.name, + 'price_unit': self.amount, + 'quantity': 1, + 'credit': self.amount, + 'debit': 0, + 'account_id': income_account, + 'product_id': product_id.id, + 'move_id': inv_id.id, + })] + inv_id.write({ + 'invoice_line_ids': inv_line_data}) + inv_id._recompute_payment_terms_lines() + + sale_order_product = self.env['product.order.line'].search([('product_order_id', '=', service_id.name)]) + for line_data in sale_order_product: + qty = line_data.product_uom_qty - line_data.qty_invoiced + if line_data.product_uom_qty < line_data.qty_invoiced: + raise UserError(_('Used quantity is less than invoiced quantity')) + uom_id = line_data.product_id.product_tmpl_id.uom_id + if qty > 0: + flag = 1 + price = line_data.product_id.list_price + inv_line_data = [(0, 0, { + 'name': line_data.product_id.name, + 'price_unit': price, + 'quantity': qty, + 'product_uom_id': uom_id.id, + 'credit': price, + 'debit': 0, + 'account_id': income_account, + 'product_id': line_data.product_id.id, + 'move_id': inv_id.id, + })] + inv_id.write({ + 'invoice_line_ids': inv_line_data}) + line_data.qty_invoiced = line_data.qty_invoiced + qty + inv_id._recompute_payment_terms_lines() + + inv_id.post() + if flag != 1: + raise UserError(_('Nothing to create invoice')) + imd = service_id.env['ir.model.data'] + action = self.env.ref('account.action_move_out_invoice_type') + list_view_id = imd._xmlid_to_res_id('account.view_move_tree') + form_view_id = imd._xmlid_to_res_id('account.view_move_form') + result = { + 'name': action.name, + 'help': action.help, + 'type': 'ir.actions.act_window', + 'views': [[list_view_id, 'tree'], [form_view_id, 'form'], [False, 'graph'], [False, 'kanban'], + [False, 'calendar'], [False, 'pivot']], + 'target': action.target, + 'context': action.context, + 'res_model': 'account.move', + } + if len(inv_id) > 1: + result['domain'] = "[('id','in',%s)]" % inv_id.ids + elif len(inv_id) == 1: + result['views'] = [(form_view_id, 'form')] + result['res_id'] = inv_id.ids[0] + else: + result = {'type': 'ir.actions.act_window_close'} + return result + + def _prepare_advance_product(self): + return { + 'name': 'Mobile Service Advance', + 'type': 'service', + 'invoice_policy': 'order', + 'company_id': False, + } + + def _prepare_service_product(self): + return { + 'name': 'Mobile Service Charge', + 'type': 'service', + 'invoice_policy': 'order', + 'company_id': False, + } diff --git a/mobile_service_shop/wizard/mobile_create_invoice_views.xml b/mobile_service_shop/wizard/mobile_create_invoice_views.xml new file mode 100644 index 000000000..612c8e3d8 --- /dev/null +++ b/mobile_service_shop/wizard/mobile_create_invoice_views.xml @@ -0,0 +1,37 @@ + + + Create Invoice + mobile.invoice + +
+

+ Invoices will be created in draft so that you can review + them before validation. +

+ + + +
+
+
+
+
+ + + + Create Invoice + ir.actions.act_window + mobile.invoice + form + new + + +
diff --git a/product_barcode/README.rst b/product_barcode/README.rst new file mode 100644 index 000000000..4727885b9 --- /dev/null +++ b/product_barcode/README.rst @@ -0,0 +1,47 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +Product Barcode Generator +========================= + +Generates EAN13 Standard Barcode for Product. +Also, introduces a new feature to print product variant price and name on the product label. + +Configuration +============= +* No additional configurations needed + +Company +------- +* `Cybrosys Techno Solutions `__ + +Credits +------- +* Developer: Sreejith P @ cybrosys, Contact: odoo@cybrosys.com + Niyas Raphy @cybrosys, Contact: odoo@cybrosys.com + Version 13: Nimisha Murali@cybrosys,Contact: odoo@cybrosys.com + Version 14: Naveen V @cybrosys, Contact: odoo@cybrosys.com + Version 15: Noorjahan V @cybrosys, Contact: odoo@cybrosys.com + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com +* Website : https://cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit `Our Website `__ + +Further information +=================== +HTML Description: ``__ diff --git a/product_barcode/__init__.py b/product_barcode/__init__.py new file mode 100644 index 000000000..63c68c069 --- /dev/null +++ b/product_barcode/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies(). +# Author: Niyas Raphy and Sreejith P (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# + +from . import models diff --git a/product_barcode/__manifest__.py b/product_barcode/__manifest__.py new file mode 100644 index 000000000..f83a44dba --- /dev/null +++ b/product_barcode/__manifest__.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2021-TODAY Cybrosys Technologies(). +# Author: Niyas Raphy and Sreejith P (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# + +{ + 'name': 'Product Barcode Generator', + 'version': '15.0.1.0.0', + 'summary': 'Generates EAN13 Standard Barcode for Product.', + 'live_test_url': 'https://www.youtube.com/watch?v=0BrFcOEkWu4&feature=youtu.be', + 'category': 'Inventory', + 'author': 'Cybrosys Techno solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'depends': ['stock', 'product'], + 'data': [ + 'views/product_label.xml', + ], + 'images': ['static/description/banner.png'], + 'license': 'AGPL-3', + 'installable': True, + 'application': False, + 'auto_install': False, +} diff --git a/product_barcode/doc/RELEASE_NOTES.md b/product_barcode/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..163ca80e8 --- /dev/null +++ b/product_barcode/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 10.08.2020 +#### Version 15.0.1.0.0 +##### ADD +- Initial Commit \ No newline at end of file diff --git a/product_barcode/models/__init__.py b/product_barcode/models/__init__.py new file mode 100644 index 000000000..ea3d20c59 --- /dev/null +++ b/product_barcode/models/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies(). +# Author: Niyas Raphy and Sreejith P (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import product_form diff --git a/product_barcode/models/product_form.py b/product_barcode/models/product_form.py new file mode 100644 index 000000000..3b88c6a9e --- /dev/null +++ b/product_barcode/models/product_form.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies(). +# Author: Niyas Raphy and Sreejith P (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# + +import math +import re +from odoo import api, models + + +class ProductAutoBarcode(models.Model): + _inherit = 'product.product' + + @api.model + def create(self, vals): + res = super(ProductAutoBarcode, self).create(vals) + ean = generate_ean(str(res.id)) + res.barcode = ean + return res + + +def ean_checksum(eancode): + """returns the checksum of an ean string of length 13, returns -1 if + the string has the wrong length""" + if len(eancode) != 13: + return -1 + oddsum = 0 + evensum = 0 + eanvalue = eancode + reversevalue = eanvalue[::-1] + finalean = reversevalue[1:] + + for i in range(len(finalean)): + if i % 2 == 0: + oddsum += int(finalean[i]) + else: + evensum += int(finalean[i]) + total = (oddsum * 3) + evensum + + check = int(10 - math.ceil(total % 10.0)) % 10 + return check + + +def check_ean(eancode): + """returns True if eancode is a valid ean13 string, or null""" + if not eancode: + return True + if len(eancode) != 13: + return False + try: + int(eancode) + except: + return False + return ean_checksum(eancode) == int(eancode[-1]) + + +def generate_ean(ean): + """Creates and returns a valid ean13 from an invalid one""" + if not ean: + return "0000000000000" + ean = re.sub("[A-Za-z]", "0", ean) + ean = re.sub("[^0-9]", "", ean) + ean = ean[:13] + if len(ean) < 13: + ean = ean + '0' * (13 - len(ean)) + return ean[:-1] + str(ean_checksum(ean)) + + +class ProductTemplateAutoBarcode(models.Model): + _inherit = 'product.template' + + @api.model + def create(self, vals_list): + templates = super(ProductTemplateAutoBarcode, self).create(vals_list) + ean = generate_ean(str(templates.id)) + templates.barcode = ean + return templates + + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/product_barcode/static/description/assets/icons/check.png b/product_barcode/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/product_barcode/static/description/assets/icons/check.png differ diff --git a/product_barcode/static/description/assets/icons/chevron.png b/product_barcode/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/product_barcode/static/description/assets/icons/chevron.png differ diff --git a/product_barcode/static/description/assets/icons/cogs.png b/product_barcode/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/product_barcode/static/description/assets/icons/cogs.png differ diff --git a/product_barcode/static/description/assets/icons/consultation.png b/product_barcode/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/product_barcode/static/description/assets/icons/consultation.png differ diff --git a/product_barcode/static/description/assets/icons/ecom-black.png b/product_barcode/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/product_barcode/static/description/assets/icons/ecom-black.png differ diff --git a/product_barcode/static/description/assets/icons/education-black.png b/product_barcode/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/product_barcode/static/description/assets/icons/education-black.png differ diff --git a/product_barcode/static/description/assets/icons/hotel-black.png b/product_barcode/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/product_barcode/static/description/assets/icons/hotel-black.png differ diff --git a/product_barcode/static/description/assets/icons/license.png b/product_barcode/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/product_barcode/static/description/assets/icons/license.png differ diff --git a/product_barcode/static/description/assets/icons/lifebuoy.png b/product_barcode/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/product_barcode/static/description/assets/icons/lifebuoy.png differ diff --git a/product_barcode/static/description/assets/icons/manufacturing-black.png b/product_barcode/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/product_barcode/static/description/assets/icons/manufacturing-black.png differ diff --git a/product_barcode/static/description/assets/icons/pos-black.png b/product_barcode/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/product_barcode/static/description/assets/icons/pos-black.png differ diff --git a/product_barcode/static/description/assets/icons/puzzle.png b/product_barcode/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/product_barcode/static/description/assets/icons/puzzle.png differ diff --git a/product_barcode/static/description/assets/icons/restaurant-black.png b/product_barcode/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/product_barcode/static/description/assets/icons/restaurant-black.png differ diff --git a/product_barcode/static/description/assets/icons/service-black.png b/product_barcode/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/product_barcode/static/description/assets/icons/service-black.png differ diff --git a/product_barcode/static/description/assets/icons/trading-black.png b/product_barcode/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/product_barcode/static/description/assets/icons/trading-black.png differ diff --git a/product_barcode/static/description/assets/icons/training.png b/product_barcode/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/product_barcode/static/description/assets/icons/training.png differ diff --git a/product_barcode/static/description/assets/icons/update.png b/product_barcode/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/product_barcode/static/description/assets/icons/update.png differ diff --git a/product_barcode/static/description/assets/icons/user.png b/product_barcode/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/product_barcode/static/description/assets/icons/user.png differ diff --git a/product_barcode/static/description/assets/icons/wrench.png b/product_barcode/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/product_barcode/static/description/assets/icons/wrench.png differ diff --git a/product_barcode/static/description/assets/modules/approval_image.png b/product_barcode/static/description/assets/modules/approval_image.png new file mode 100644 index 000000000..84fe94e80 Binary files /dev/null and b/product_barcode/static/description/assets/modules/approval_image.png differ diff --git a/product_barcode/static/description/assets/modules/beauty_image.png b/product_barcode/static/description/assets/modules/beauty_image.png new file mode 100644 index 000000000..a428db2e1 Binary files /dev/null and b/product_barcode/static/description/assets/modules/beauty_image.png differ diff --git a/product_barcode/static/description/assets/modules/budget_image.png b/product_barcode/static/description/assets/modules/budget_image.png new file mode 100644 index 000000000..fe6aa6fe4 Binary files /dev/null and b/product_barcode/static/description/assets/modules/budget_image.png differ diff --git a/product_barcode/static/description/assets/modules/export_image.png b/product_barcode/static/description/assets/modules/export_image.png new file mode 100644 index 000000000..4e4ea0e51 Binary files /dev/null and b/product_barcode/static/description/assets/modules/export_image.png differ diff --git a/product_barcode/static/description/assets/modules/magento_image.png b/product_barcode/static/description/assets/modules/magento_image.png new file mode 100644 index 000000000..39de0820f Binary files /dev/null and b/product_barcode/static/description/assets/modules/magento_image.png differ diff --git a/product_barcode/static/description/assets/modules/pos_order_image.png b/product_barcode/static/description/assets/modules/pos_order_image.png new file mode 100644 index 000000000..1217263a6 Binary files /dev/null and b/product_barcode/static/description/assets/modules/pos_order_image.png differ diff --git a/product_barcode/static/description/assets/screenshots/hero.gif b/product_barcode/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..faee183b3 Binary files /dev/null and b/product_barcode/static/description/assets/screenshots/hero.gif differ diff --git a/product_barcode/static/description/assets/screenshots/screenshot1.gif b/product_barcode/static/description/assets/screenshots/screenshot1.gif new file mode 100644 index 000000000..6ad77ddae Binary files /dev/null and b/product_barcode/static/description/assets/screenshots/screenshot1.gif differ diff --git a/product_barcode/static/description/assets/screenshots/screenshot2.png b/product_barcode/static/description/assets/screenshots/screenshot2.png new file mode 100644 index 000000000..a4cc02de3 Binary files /dev/null and b/product_barcode/static/description/assets/screenshots/screenshot2.png differ diff --git a/product_barcode/static/description/banner.png b/product_barcode/static/description/banner.png new file mode 100644 index 000000000..cfb5be33c Binary files /dev/null and b/product_barcode/static/description/banner.png differ diff --git a/product_barcode/static/description/barcode_generate_product.gif b/product_barcode/static/description/barcode_generate_product.gif new file mode 100644 index 000000000..6ad77ddae Binary files /dev/null and b/product_barcode/static/description/barcode_generate_product.gif differ diff --git a/product_barcode/static/description/cybro_logo.png b/product_barcode/static/description/cybro_logo.png new file mode 100644 index 000000000..bb309114c Binary files /dev/null and b/product_barcode/static/description/cybro_logo.png differ diff --git a/product_barcode/static/description/icon.png b/product_barcode/static/description/icon.png new file mode 100644 index 000000000..8267abba5 Binary files /dev/null and b/product_barcode/static/description/icon.png differ diff --git a/product_barcode/static/description/index.html b/product_barcode/static/description/index.html new file mode 100644 index 000000000..90364e5b8 --- /dev/null +++ b/product_barcode/static/description/index.html @@ -0,0 +1,564 @@ +
+
+
+

+ Product Barcode Generator

+

+ Generates EAN13 Standard Barcode for Product +

+ +
+
+ + + + +
+
+

+ Overview +

+
+ +
+

+ The module automatically generates EAN13 standard barcode for each product while you create it. The + module also introduces a new feature to print product variant price on the product label. Presently + Odoo doesn't have these features.

+ +
+
+ +
+
+

+ Features +

+
+ +
+
+ +
+
+

+ Automatic Barcode Generation

+

+ Generates Barcode Automatically.

+
+
+ +
+
+ +
+
+

+ Print Variant Price

+

+ Print Variant Price on Product Labels.

+
+
+ +
+
+ +
+
+

+ Print Variant Name

+

+ Print Variant Name on Product Labels.

+
+
+ +
+ +
+
+

+ Screenshots +

+
+ +
+

+ Create a Product

+ + +
+ +
+

+ Product Labels

+

+ Variant name on label, Variant sale price on label. +

+ + +
+ +
+ + +
+
+

Suggested Products

+
+ + +
+
+ + + +
+
+
+

Our Services

+
+
+ +
+
+ +
+
+ Odoo + Customization
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Support
+
+ + +
+
+ +
+
+ Hire + Odoo + Developer
+
+ +
+
+ +
+
+ Odoo + Integration
+
+ +
+
+ +
+
+ Odoo + Migration
+
+ + +
+
+ +
+
+ Odoo + Consultancy
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+
+ + + +
+
+
+

Our Industries

+
+
+ +
+
+ +
+ Trading +
+

+ Easily procure + and + sell your products

+
+
+ +
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+ +
+
+ +
+ Education +
+

+ A platform for + educational management

+
+
+ +
+
+ +
+ Manufacturing +
+

+ Plan, track and + schedule your operations

+
+
+ +
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+ +
+
+ +
+ Service Management +
+

+ Keep track of + services and invoice

+
+
+ +
+
+ +
+ Restaurant +
+

+ Run your bar or + restaurant methodically

+
+
+ +
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+ +
+
+ + + + + +
+
+
+

Need Help?

+
+
+
+ + +
+ +
+ + +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+ + +
\ No newline at end of file diff --git a/product_barcode/static/description/product_label.png b/product_barcode/static/description/product_label.png new file mode 100644 index 000000000..8a27d6916 Binary files /dev/null and b/product_barcode/static/description/product_label.png differ diff --git a/product_barcode/views/product_label.xml b/product_barcode/views/product_label.xml new file mode 100644 index 000000000..054156e71 --- /dev/null +++ b/product_barcode/views/product_label.xml @@ -0,0 +1,50 @@ + + + + + + + + + diff --git a/user_login_alert/README.rst b/user_login_alert/README.rst new file mode 100644 index 000000000..a21a755e5 --- /dev/null +++ b/user_login_alert/README.rst @@ -0,0 +1,35 @@ +User Login Alert v15 +==================== + +This module will help to send the notification to users on successful login to his account. + + +Working +======= +if user is continuously using the same system the user will be notified only once. If he changes +the browser or the OS from same system he will receive the mail. + +If user logged from another system and if he come back to his original system, for the first time +he will receive the email +Configuration +============= +For the working of this module, the outgoing mail configuration has to be configured . The Email will be send +to Users related partners Email ID. If the Email ID for the related partner of the user is not given, +then the notification mail will not send. + +Also install the "httpagentparser" python package, sudo pip install httpagentparser + +Credits +======= +Cybrosys Techno Solutions +Author + Niyas Raphy(v11) + Akshay Babu(v12) + Muhammad P(v14) + Noorjahan P(v15) + + + +------ + +* Cybrosys Techno Solutions diff --git a/user_login_alert/__init__.py b/user_login_alert/__init__.py new file mode 100644 index 000000000..eea9191ae --- /dev/null +++ b/user_login_alert/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Niyas Raphy(v11) and Akshay Babu(v12)()(odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import controllers +from . import models diff --git a/user_login_alert/__manifest__.py b/user_login_alert/__manifest__.py new file mode 100644 index 000000000..e4da49a51 --- /dev/null +++ b/user_login_alert/__manifest__.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2021-TODAY Cybrosys Technologies(). +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +{ + 'name': 'User Login Alert', + 'summary': """Secure your Odoo account by alerts at right time. If any successful login to your + account happens, an alert mail will be send to you with the browser and IP details.""", + 'version': '15.0.1.0.0', + 'description': """Secure your Odoo account by alerts at right time. If any successful login to your + account happens, an alert mail will be send to you with the browser and IP details, Odoo 15, Odoo15""", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'category': 'Tools', + 'depends': ['base', 'mail'], + 'license': 'AGPL-3', + 'data': [ + 'security/notification_group.xml', + 'views/logged_details_view.xml', + ], + 'images': ['static/description/banner.png'], + 'installable': True, + 'auto_install': False, + 'external_dependencies': { + 'python': ['httpagentparser'], + }, +} + diff --git a/user_login_alert/controllers/__init__.py b/user_login_alert/controllers/__init__.py new file mode 100644 index 000000000..ea03d5885 --- /dev/null +++ b/user_login_alert/controllers/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Niyas Raphy(v11) and Akshay Babu(v12)()(odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import main diff --git a/user_login_alert/controllers/main.py b/user_login_alert/controllers/main.py new file mode 100644 index 000000000..a971763ad --- /dev/null +++ b/user_login_alert/controllers/main.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Niyas Raphy(v11) and Akshay Babu(v12)()(odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +try: + import httpagentparser +except ImportError: + pass +from time import gmtime, strftime +from odoo.addons.web.controllers import main +from odoo.http import request +from odoo.exceptions import Warning +import odoo +import odoo.modules.registry +from odoo.tools.translate import _ +from odoo import http + + +class Home(main.Home): + + @http.route('/web/login', type='http', auth="public") + def web_login(self, redirect=None, **kw): + main.ensure_db() + request.params['login_success'] = False + if request.httprequest.method == 'GET' and redirect and request.session.uid: + return request.redirect(redirect) + + if not request.uid: + request.uid = odoo.SUPERUSER_ID + + values = request.params.copy() + try: + values['databases'] = http.db_list() + except odoo.exceptions.AccessDenied: + values['databases'] = None + if request.httprequest.method == 'POST': + old_uid = request.uid + uid = request.session.authenticate(request.session.db, request.params['login'], request.params['password']) + if uid is not False: + user_rec = request.env['res.users'].sudo().search([('id', '=', uid)]) + if user_rec.partner_id.email and user_rec.has_group('user_login_alert.receive_login_notification'): + send_mail = 0 + agent = request.httprequest.environ.get('HTTP_USER_AGENT') + agent_details = httpagentparser.detect(agent) + user_os = agent_details['os']['name'] + browser_name = agent_details['browser']['name'] + ip_address = request.httprequest.environ['REMOTE_ADDR'] + if user_rec.last_logged_ip and user_rec.last_logged_browser and user_rec.last_logged_os: + if user_rec.last_logged_ip != ip_address or user_rec.last_logged_browser != browser_name or user_rec.last_logged_os != user_os: + send_mail = 1 + user_rec.last_logged_ip = ip_address + user_rec.last_logged_browser = browser_name + user_rec.last_logged_os = user_os + else: + send_mail = 0 + else: + send_mail = 1 + user_rec.last_logged_ip = ip_address + user_rec.last_logged_browser = browser_name + user_rec.last_logged_os = user_os + if send_mail == 1: + email_to = user_rec.partner_id.email + current_date_time = strftime("%Y-%m-%d %H:%M:%S", gmtime()) + message_body = 'Hi ' + user_rec.name + ' , Your account has been ' \ + 'accessed successfully. The details of the ' \ + 'system from which the account is accessed ...,' + message_body += '' + message_body += '' \ + '' \ + ''\ + '' \ + '' \ + ''\ + '' \ + '' \ + '' + message_body += '
' + 'OS' + '' + user_os + '
' + 'Browser' + '' + browser_name + '
' + 'IP Address' + '' + ip_address + '
' + message_body += 'Thank you' + template_obj = request.env['mail.mail'] + template_data = { + 'subject': 'Login Alert : ' + current_date_time, + 'body_html': message_body, + 'email_from': request.env.user.company_id.email, + 'email_to': email_to + } + template_id = template_obj.create(template_data) + template_obj.send(template_id) + request.params['login_success'] = True + if not redirect: + redirect = '/web' + return request.redirect(self._login_redirect(uid, redirect=redirect)) + request.uid = old_uid + values['error'] = _("Wrong login/password") + return request.render('web.login', values) diff --git a/user_login_alert/doc/RELEASE_NOTES.md b/user_login_alert/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..013b45ef5 --- /dev/null +++ b/user_login_alert/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 08.10.2020 +#### Version 15.0.1.0.0 +#### ADD +Migration Of User Login Alert diff --git a/user_login_alert/models/__init__.py b/user_login_alert/models/__init__.py new file mode 100644 index 000000000..fb826fd79 --- /dev/null +++ b/user_login_alert/models/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Niyas Raphy(v11) and Akshay Babu(v12)()(odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import logged_details diff --git a/user_login_alert/models/logged_details.py b/user_login_alert/models/logged_details.py new file mode 100644 index 000000000..356d7a8a1 --- /dev/null +++ b/user_login_alert/models/logged_details.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Niyas Raphy(v11) and Akshay Babu(v12)()(odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import models, fields + + +class ResUsersInherit(models.Model): + _inherit = 'res.users' + + last_logged_ip = fields.Char(string='IP') + last_logged_browser = fields.Char(string='Browser') + last_logged_os = fields.Char(string='OS') diff --git a/user_login_alert/requirements.txt b/user_login_alert/requirements.txt new file mode 100644 index 000000000..55e961707 --- /dev/null +++ b/user_login_alert/requirements.txt @@ -0,0 +1 @@ +httpagentparser==1.8.1 \ No newline at end of file diff --git a/user_login_alert/security/notification_group.xml b/user_login_alert/security/notification_group.xml new file mode 100644 index 000000000..5867cb807 --- /dev/null +++ b/user_login_alert/security/notification_group.xml @@ -0,0 +1,8 @@ + + + + + Receive Login Notification + + + \ No newline at end of file diff --git a/user_login_alert/static/description/assets/icons/check.png b/user_login_alert/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/user_login_alert/static/description/assets/icons/check.png differ diff --git a/user_login_alert/static/description/assets/icons/chevron.png b/user_login_alert/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/user_login_alert/static/description/assets/icons/chevron.png differ diff --git a/user_login_alert/static/description/assets/icons/cogs.png b/user_login_alert/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/user_login_alert/static/description/assets/icons/cogs.png differ diff --git a/user_login_alert/static/description/assets/icons/consultation.png b/user_login_alert/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/user_login_alert/static/description/assets/icons/consultation.png differ diff --git a/user_login_alert/static/description/assets/icons/ecom-black.png b/user_login_alert/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/user_login_alert/static/description/assets/icons/ecom-black.png differ diff --git a/user_login_alert/static/description/assets/icons/education-black.png b/user_login_alert/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/user_login_alert/static/description/assets/icons/education-black.png differ diff --git a/user_login_alert/static/description/assets/icons/hotel-black.png b/user_login_alert/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/user_login_alert/static/description/assets/icons/hotel-black.png differ diff --git a/user_login_alert/static/description/assets/icons/license.png b/user_login_alert/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/user_login_alert/static/description/assets/icons/license.png differ diff --git a/user_login_alert/static/description/assets/icons/lifebuoy.png b/user_login_alert/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/user_login_alert/static/description/assets/icons/lifebuoy.png differ diff --git a/user_login_alert/static/description/assets/icons/logo.png b/user_login_alert/static/description/assets/icons/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/user_login_alert/static/description/assets/icons/logo.png differ diff --git a/user_login_alert/static/description/assets/icons/manufacturing-black.png b/user_login_alert/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/user_login_alert/static/description/assets/icons/manufacturing-black.png differ diff --git a/user_login_alert/static/description/assets/icons/pos-black.png b/user_login_alert/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/user_login_alert/static/description/assets/icons/pos-black.png differ diff --git a/user_login_alert/static/description/assets/icons/puzzle.png b/user_login_alert/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/user_login_alert/static/description/assets/icons/puzzle.png differ diff --git a/user_login_alert/static/description/assets/icons/restaurant-black.png b/user_login_alert/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/user_login_alert/static/description/assets/icons/restaurant-black.png differ diff --git a/user_login_alert/static/description/assets/icons/service-black.png b/user_login_alert/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/user_login_alert/static/description/assets/icons/service-black.png differ diff --git a/user_login_alert/static/description/assets/icons/trading-black.png b/user_login_alert/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/user_login_alert/static/description/assets/icons/trading-black.png differ diff --git a/user_login_alert/static/description/assets/icons/training.png b/user_login_alert/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/user_login_alert/static/description/assets/icons/training.png differ diff --git a/user_login_alert/static/description/assets/icons/update.png b/user_login_alert/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/user_login_alert/static/description/assets/icons/update.png differ diff --git a/user_login_alert/static/description/assets/icons/user.png b/user_login_alert/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/user_login_alert/static/description/assets/icons/user.png differ diff --git a/user_login_alert/static/description/assets/icons/wrench.png b/user_login_alert/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/user_login_alert/static/description/assets/icons/wrench.png differ diff --git a/user_login_alert/static/description/assets/modules/approval_image.png b/user_login_alert/static/description/assets/modules/approval_image.png new file mode 100644 index 000000000..84fe94e80 Binary files /dev/null and b/user_login_alert/static/description/assets/modules/approval_image.png differ diff --git a/user_login_alert/static/description/assets/modules/budget_image.png b/user_login_alert/static/description/assets/modules/budget_image.png new file mode 100644 index 000000000..fe6aa6fe4 Binary files /dev/null and b/user_login_alert/static/description/assets/modules/budget_image.png differ diff --git a/user_login_alert/static/description/assets/modules/export_image.png b/user_login_alert/static/description/assets/modules/export_image.png new file mode 100644 index 000000000..4e4ea0e51 Binary files /dev/null and b/user_login_alert/static/description/assets/modules/export_image.png differ diff --git a/user_login_alert/static/description/assets/modules/magento_image.png b/user_login_alert/static/description/assets/modules/magento_image.png new file mode 100644 index 000000000..39de0820f Binary files /dev/null and b/user_login_alert/static/description/assets/modules/magento_image.png differ diff --git a/user_login_alert/static/description/assets/modules/pos_image.png b/user_login_alert/static/description/assets/modules/pos_image.png new file mode 100644 index 000000000..c5932894b Binary files /dev/null and b/user_login_alert/static/description/assets/modules/pos_image.png differ diff --git a/user_login_alert/static/description/assets/modules/shopify_image.png b/user_login_alert/static/description/assets/modules/shopify_image.png new file mode 100644 index 000000000..c6d92c16d Binary files /dev/null and b/user_login_alert/static/description/assets/modules/shopify_image.png differ diff --git a/user_login_alert/static/description/assets/screenshots/hero.png b/user_login_alert/static/description/assets/screenshots/hero.png new file mode 100644 index 000000000..e3d60238f Binary files /dev/null and b/user_login_alert/static/description/assets/screenshots/hero.png differ diff --git a/user_login_alert/static/description/assets/screenshots/screenshot-01.png b/user_login_alert/static/description/assets/screenshots/screenshot-01.png new file mode 100644 index 000000000..4cc3c4acb Binary files /dev/null and b/user_login_alert/static/description/assets/screenshots/screenshot-01.png differ diff --git a/user_login_alert/static/description/assets/screenshots/screenshot-02.png b/user_login_alert/static/description/assets/screenshots/screenshot-02.png new file mode 100644 index 000000000..bf30fafa3 Binary files /dev/null and b/user_login_alert/static/description/assets/screenshots/screenshot-02.png differ diff --git a/user_login_alert/static/description/banner.png b/user_login_alert/static/description/banner.png new file mode 100644 index 000000000..72464b121 Binary files /dev/null and b/user_login_alert/static/description/banner.png differ diff --git a/user_login_alert/static/description/icon.png b/user_login_alert/static/description/icon.png new file mode 100644 index 000000000..9fc1a8f67 Binary files /dev/null and b/user_login_alert/static/description/icon.png differ diff --git a/user_login_alert/static/description/index.html b/user_login_alert/static/description/index.html new file mode 100644 index 000000000..92485bc96 --- /dev/null +++ b/user_login_alert/static/description/index.html @@ -0,0 +1,609 @@ + +
+
+
+
+ +
+
+
+ Community +
+
+ Enterprise +
+ +
+
+
+
+ +
+
+
+

+ User Login Alert

+

+ User Will Be Notified On Successful Login +

+ +
+
+ + + +
+
+

+ Overview +

+
+ +
+

+ This module will send a notification email to the users email. The notification email contains the IP of the system, browser name and OS from which the account is accessed.

+ +
+
+ + +
+
+

+ Features +

+
+ +
+
+ +
+
+

+ Community & Enterprise Support

+

+ Available in Odoo 15.0 Community and Enterprise.

+
+
+
+
+ +
+
+

+ E-mail Notification

+

+ Email notification on Log in. +

+
+
+ +
+
+ +
+
+

+ Details

+

+ Details of the system that accessed the account. +

+
+
+ +
+
+ +
+
+

+ Information in Notification Email

+

+ IP, OS and browser as well as log in time will be there in the notification email.

+
+
+ +
+
+ +
+
+

+ User Group

+

+ User will receive notification only if user exist in group receive login notification. +

+
+
+ +
+ +
+
+

+ Screenshots +

+
+
+

+ E-mail On Successful Login +

+

+ User receives e-mail on successful login.

+ +
+ +
+

+ Adding user to the login notification group

+

+ User will receive notification only if he is added in this group. +

+ +
+ +
+ + +
+
+

Suggested Products

+
+ + +
+
+ + + +
+
+
+

Our Services

+
+
+ +
+
+ +
+
+ Odoo + Customization
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Support
+
+ + +
+
+ +
+
+ Hire + Odoo + Developer
+
+ +
+
+ +
+
+ Odoo + Integration
+
+ +
+
+ +
+
+ Odoo + Migration
+
+ + +
+
+ +
+
+ Odoo + Consultancy
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+
+ + + +
+
+
+

Our Industries

+
+
+ +
+
+ +
+ Trading +
+

+ Easily procure + and + sell your products

+
+
+ +
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+ +
+
+ +
+ Education +
+

+ A platform for + educational management

+
+
+ +
+
+ +
+ Manufacturing +
+

+ Plan, track and + schedule your operations

+
+
+ +
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+ +
+
+ +
+ Service Management +
+

+ Keep track of + services and invoice

+
+
+ +
+
+ +
+ Restaurant +
+

+ Run your bar or + restaurant methodically

+
+
+ +
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+ +
+
+ + + + + +
+
+
+

Need Help?

+
+
+
+ + +
+ +
+ +
+ +
+ WhatsApp +
+
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+ + +
\ No newline at end of file diff --git a/user_login_alert/views/logged_details_view.xml b/user_login_alert/views/logged_details_view.xml new file mode 100644 index 000000000..cf8b3c27a --- /dev/null +++ b/user_login_alert/views/logged_details_view.xml @@ -0,0 +1,25 @@ + + + + + res.users + res.users + + + + + + + + + + + + + + + + + + +