Browse Source

Aug 24 : [ADD] Initial Commit 'user_weather_notification'

pull/275/head
RisvanaCybro 2 years ago
parent
commit
233ce289c8
  1. 46
      user_weather_notification/README.rst
  2. 23
      user_weather_notification/__init__.py
  3. 50
      user_weather_notification/__manifest__.py
  4. 22
      user_weather_notification/controllers/__init__.py
  5. 72
      user_weather_notification/controllers/user_weather_notification.py
  6. 6
      user_weather_notification/doc/RELEASE_NOTES.md
  7. 22
      user_weather_notification/models/__init__.py
  8. 67
      user_weather_notification/models/res_users.py
  9. BIN
      user_weather_notification/static/description/assets/icons/cogs.png
  10. BIN
      user_weather_notification/static/description/assets/icons/consultation.png
  11. BIN
      user_weather_notification/static/description/assets/icons/ecom-black.png
  12. BIN
      user_weather_notification/static/description/assets/icons/education-black.png
  13. BIN
      user_weather_notification/static/description/assets/icons/hotel-black.png
  14. BIN
      user_weather_notification/static/description/assets/icons/insta_feed_snippet_icon.png
  15. BIN
      user_weather_notification/static/description/assets/icons/license.png
  16. BIN
      user_weather_notification/static/description/assets/icons/lifebuoy.png
  17. BIN
      user_weather_notification/static/description/assets/icons/logo.png
  18. BIN
      user_weather_notification/static/description/assets/icons/manufacturing-black.png
  19. BIN
      user_weather_notification/static/description/assets/icons/pos-black.png
  20. BIN
      user_weather_notification/static/description/assets/icons/puzzle.png
  21. BIN
      user_weather_notification/static/description/assets/icons/restaurant-black.png
  22. BIN
      user_weather_notification/static/description/assets/icons/service-black.png
  23. BIN
      user_weather_notification/static/description/assets/icons/trading-black.png
  24. BIN
      user_weather_notification/static/description/assets/icons/training.png
  25. BIN
      user_weather_notification/static/description/assets/icons/update.png
  26. BIN
      user_weather_notification/static/description/assets/icons/user.png
  27. BIN
      user_weather_notification/static/description/assets/icons/wrench.png
  28. BIN
      user_weather_notification/static/description/assets/misc/categories.png
  29. BIN
      user_weather_notification/static/description/assets/misc/check-box.png
  30. BIN
      user_weather_notification/static/description/assets/misc/compass.png
  31. BIN
      user_weather_notification/static/description/assets/misc/corporate.png
  32. BIN
      user_weather_notification/static/description/assets/misc/customer-support.png
  33. BIN
      user_weather_notification/static/description/assets/misc/cybrosys-logo.png
  34. BIN
      user_weather_notification/static/description/assets/misc/features.png
  35. BIN
      user_weather_notification/static/description/assets/misc/logo.png
  36. BIN
      user_weather_notification/static/description/assets/misc/pictures.png
  37. BIN
      user_weather_notification/static/description/assets/misc/pie-chart.png
  38. BIN
      user_weather_notification/static/description/assets/misc/right-arrow.png
  39. BIN
      user_weather_notification/static/description/assets/misc/star.png
  40. BIN
      user_weather_notification/static/description/assets/misc/support.png
  41. BIN
      user_weather_notification/static/description/assets/misc/whatsapp.png
  42. BIN
      user_weather_notification/static/description/assets/modules/1.png
  43. BIN
      user_weather_notification/static/description/assets/modules/2.png
  44. BIN
      user_weather_notification/static/description/assets/modules/3.png
  45. BIN
      user_weather_notification/static/description/assets/modules/4.png
  46. BIN
      user_weather_notification/static/description/assets/modules/5.png
  47. BIN
      user_weather_notification/static/description/assets/modules/6.gif
  48. BIN
      user_weather_notification/static/description/assets/screenshots/1.png
  49. BIN
      user_weather_notification/static/description/assets/screenshots/2.png
  50. BIN
      user_weather_notification/static/description/assets/screenshots/3.png
  51. BIN
      user_weather_notification/static/description/assets/screenshots/4.png
  52. BIN
      user_weather_notification/static/description/assets/screenshots/5.png
  53. BIN
      user_weather_notification/static/description/assets/screenshots/6.png
  54. BIN
      user_weather_notification/static/description/assets/screenshots/7.png
  55. BIN
      user_weather_notification/static/description/assets/screenshots/hero.gif
  56. BIN
      user_weather_notification/static/description/banner.png
  57. BIN
      user_weather_notification/static/description/icon.png
  58. 550
      user_weather_notification/static/description/index.html
  59. BIN
      user_weather_notification/static/src/img/weather_card.jpg
  60. 49
      user_weather_notification/static/src/js/weather_notification.js
  61. 11
      user_weather_notification/static/src/scss/weather.scss
  62. 52
      user_weather_notification/static/src/xml/weather_notification_templates.xml
  63. 13
      user_weather_notification/views/assets.xml
  64. 26
      user_weather_notification/views/res_users_views.xml

46
user_weather_notification/README.rst

@ -0,0 +1,46 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
User Weather Notification
=========================
A weather notification app providing users with timely weather updates and alerts.
Configuration
=============
- Required OpenWeatherMap API.
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
-------
General Public License, Version 3 (AGPL v3).
(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
Credits
-------
Developer: (V14) Mohamed Muzammil VP, 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 <https://cybrosys.com/>`__
Further information
===================
HTML Description: `<static/description/index.html>`__

23
user_weather_notification/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Mohamed Muzammil VP (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 <http://www.gnu.org/licenses/>.
#
################################################################################
from . import controllers
from . import models

50
user_weather_notification/__manifest__.py

@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Mohamed Muzammil VP (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 <http://www.gnu.org/licenses/>.
#
################################################################################
{
'name': 'User Weather Notification',
'version': '14.0.1.0.0',
'category': 'Extra Tools',
'summary': """A weather notification app providing users with timely
weather updates and alerts.""",
'description': """Users can see Weather Notification by using
OpenWeatherMap API""",
'author': "Cybrosys Techno Solutions",
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': "https://www.cybrosys.com",
'depends': ['web'],
'data': [
'views/res_users_views.xml',
'views/assets.xml',
],
'qweb': [
'static/src/xml/weather_notification_templates.xml',
],
'external_dependencies': {
'python': ['geocoder'],
},
'images': ['static/description/banner.png'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

22
user_weather_notification/controllers/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Mohamed Muzammil VP (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 <http://www.gnu.org/licenses/>.
#
################################################################################
from . import user_weather_notification

72
user_weather_notification/controllers/user_weather_notification.py

@ -0,0 +1,72 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Mohamed Muzammil VP (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 <http://www.gnu.org/licenses/>.
#
###############################################################################
import geocoder
import requests
from requests.exceptions import ConnectionError, Timeout
from odoo import http
from odoo.http import request
class WeatherNotification(http.Controller):
"""Class defined to fetch weather details based on location"""
@http.route('/weather/notification/check', type='json', auth="public",
methods=['POST'])
def weather_notification(self):
"""Controller for fetching weather data"""
try:
if request.env.user.location_set == 'auto' \
and request.env.user.api_key:
if geocoder.ip('me').status_code == 200:
lat = round(geocoder.ip('me').latlng[0], 2)
lng = round(geocoder.ip('me').latlng[1], 2)
url = f'https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lng}&appid={request.env.user.api_key}'
try:
# Set timeout to 5 seconds
response = requests.get(url, timeout=5)
if response.status_code == 200:
return response.json()
else:
return {'data': False}
except Timeout:
return {'data': False, 'message': 'Request timed out.'}
else:
return {'data': False,
'message': 'Failed to get location data.'}
elif request.env.user.location_set == 'manual' \
and request.env.user.api_key:
url = f'https://api.openweathermap.org/data/2.5/weather?q={request.env.user.city}&appid={request.env.user.api_key}'
try:
# Set timeout to 5 seconds
response = requests.get(url, timeout=5)
if response.status_code == 200:
return response.json()
else:
return {'data': False}
except Timeout:
return {'data': False, 'message': 'Request timed out.'}
except ConnectionError:
return {'data': False,
'message': 'No internet connection. '
'Please check your internet connectivity.'}
else:
return {'data': False}

6
user_weather_notification/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <user_weather_notification>
#### 11.08.2023
#### Version 14.0.1.0.0
#### ADD
- Initial commit for User Weather Notification

22
user_weather_notification/models/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Mohamed Muzammil VP (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 <http://www.gnu.org/licenses/>.
#
################################################################################
from . import res_users

67
user_weather_notification/models/res_users.py

@ -0,0 +1,67 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Mohamed Muzammil VP (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 <http://www.gnu.org/licenses/>.
#
################################################################################
import requests
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
class ResUsers(models.Model):
"""Inherit the res.users model to add custom fields and methods"""
_inherit = "res.users"
api_key = fields.Char(string='API Key', help="API key from OpenWeatherMap")
location_set = fields.Selection(
selection=[('auto', 'Use Browser Location'),
('manual', 'Manual Location')],
string="Set Location", default='auto',
help="Use Browser Location: Fetching data based on browsers location,"
"Manual Location:Need to specify the city in the city field")
city = fields.Char(string='City',
help="Enter the city name to find weather")
@api.constrains('city')
def _check_city(self):
"""Constraints to check if the city is valid or not"""
try:
for rec in self:
if rec.api_key:
url = f'https://api.openweathermap.org/data/2.5/weather?q={rec.city}&appid={rec.api_key}'
try:
# Set timeout to 5 seconds
response = requests.get(url, timeout=5)
response_json = response.json()
if response_json['cod'] != 200:
raise ValidationError(_(response_json['message']))
except requests.Timeout:
raise ValidationError(
_('API request timed out. Please check your '
'internet connection or try again later.'))
except requests.exceptions.ConnectionError:
raise ValidationError(
_('Please check your internet connection or try again later.'))
@api.constrains('city', 'location_set')
def validation_of_city(self):
"""The city name should be required if the location is set to
manual."""
if self.location_set == 'manual' and self.city is False:
raise ValidationError(_('Please Enter a city name'))

BIN
user_weather_notification/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
user_weather_notification/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
user_weather_notification/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
user_weather_notification/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
user_weather_notification/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
user_weather_notification/static/description/assets/icons/insta_feed_snippet_icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
user_weather_notification/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
user_weather_notification/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
user_weather_notification/static/description/assets/icons/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
user_weather_notification/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
user_weather_notification/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
user_weather_notification/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
user_weather_notification/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
user_weather_notification/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
user_weather_notification/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
user_weather_notification/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
user_weather_notification/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
user_weather_notification/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
user_weather_notification/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
user_weather_notification/static/description/assets/misc/categories.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
user_weather_notification/static/description/assets/misc/check-box.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
user_weather_notification/static/description/assets/misc/compass.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
user_weather_notification/static/description/assets/misc/corporate.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
user_weather_notification/static/description/assets/misc/customer-support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
user_weather_notification/static/description/assets/misc/cybrosys-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
user_weather_notification/static/description/assets/misc/features.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

BIN
user_weather_notification/static/description/assets/misc/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
user_weather_notification/static/description/assets/misc/pictures.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
user_weather_notification/static/description/assets/misc/pie-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
user_weather_notification/static/description/assets/misc/right-arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

BIN
user_weather_notification/static/description/assets/misc/star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
user_weather_notification/static/description/assets/misc/support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
user_weather_notification/static/description/assets/misc/whatsapp.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
user_weather_notification/static/description/assets/modules/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
user_weather_notification/static/description/assets/modules/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
user_weather_notification/static/description/assets/modules/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
user_weather_notification/static/description/assets/modules/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
user_weather_notification/static/description/assets/modules/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
user_weather_notification/static/description/assets/modules/6.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
user_weather_notification/static/description/assets/screenshots/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

BIN
user_weather_notification/static/description/assets/screenshots/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

BIN
user_weather_notification/static/description/assets/screenshots/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

BIN
user_weather_notification/static/description/assets/screenshots/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

BIN
user_weather_notification/static/description/assets/screenshots/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

BIN
user_weather_notification/static/description/assets/screenshots/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

BIN
user_weather_notification/static/description/assets/screenshots/7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

BIN
user_weather_notification/static/description/assets/screenshots/hero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

BIN
user_weather_notification/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
user_weather_notification/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

550
user_weather_notification/static/description/index.html

@ -0,0 +1,550 @@
<div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div class="d-flex align-items-center justify-content-between"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42" style="width: 42px; height: 42px;" />
<div>
<div
style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div
style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
<div
style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Odoo.sh
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
User Weather Notification</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">A Weather Notification App Providing Users with Timely Weather Updates and Alerts.</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif" class="img-responsive"
style="width: 100%; margin-left: auto; margin-right: auto;" />
</div>
</div>
</div>
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/compass.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Explore This
Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn
more about this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36" />
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
features of this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36" />
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
screenshots for this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36" />
</div>
</a>
</div>
</div>
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pie-chart.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Overview
</h2>
</div>
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4">
As we know, many industries are depend on weather conditions like manufacturing, Event Management,
Construction etc. So we believe our concept of weather module can be used in these industries to
understand and plan their works according to the weather condition. This module is a starter to think
and explore the opportunity to bring the advanced features in Odoo.
</div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/features.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Features
</h2>
</div>
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center" style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2" />
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Support in Desktop.</span>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center" style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2" />
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">The user will get the weather notification</span>
</div>
</div>
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="screenshots">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pictures.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Screenshots
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Click Weather Settings
</h3>
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
User can easily find the weather report from a single click. Summary of the weather conditions is
displayed on the weather board. The user will easily get weather updates, state of climate and current
temperature etc.</p>
<img src="assets/screenshots/1.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Configuration
</h3>
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
User must provide an API Key for OpenWeatherMap and select "Use Browser Location" or "Manual Location" from Set Location field.
</p>
<img src="assets/screenshots/2.png" class="img-thumbnail">
</div>
<div>
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">See the Weather details.
</h3>
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">After Filling the fields given user can see the weather details by clicking the Weather icon.
</p>
<img src="assets/screenshots/3.png" class="img-thumbnail">
</div>
<div>
<img src="assets/screenshots/4.png" class="img-thumbnail">
</div>
<div>
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">If the entered city name is wrong.
</h3>
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">After choosing the Set Location field as "Manual Location" and entered city name was wrong then error pop-up shows.
</p>
<img src="assets/screenshots/5.png" class="img-thumbnail">
</div>
<div>
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">If the Network Connection is lost.
</h3>
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
</p>
<img src="assets/screenshots/7.png" class="img-thumbnail">
</div>
<div>
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Required OpenWeatherMap API.
</h3>
<img src="assets/screenshots/6.png" class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- SUGGESTED PRODUCTS -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/categories.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Suggested
Products
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner">
<div class="carousel-item active" style="min-height:0px">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/whatsapp_redirect/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/1.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/export_stockinfo_xls/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/2.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/inventory_barcode_scanning/#" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/3.png">
</div>
</a>
</div>
</div>
<div class="carousel-item" style="min-height:0px">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/login_user_detail/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/4.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/odoo_dynamic_dashboard/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/5.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/hr_zk_attendance/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/6.gif">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev" style="width:35px; color:#000"> <span
class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span>
</a> <a class="carousel-control-next" href="#demo1" data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span>
</a>
</div>
</div>
</div>
<!-- END OF SUGGESTED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/star.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our Services
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</div>
<!--END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/corporate.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our
Industries
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/trading-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easily procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/education-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
A platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Plan, track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Mobile
friendly,
awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/service-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Keep track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Run your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</div>
<!--END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Support
</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48" width="48" style="width: 42px; height: 42px;" />
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need help? Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
odoo@cybrosys.com</p>
</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52" width="52" style="width: 52px; height: 52px;" />
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">+91 86068
27707</p>
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="assets/misc/logo.png" width="144" height="31" style="width:144px; height: 31px; margin-top: 40px;" />
</div>
</div>
</div>
<!-- END OF SUPPORT -->

BIN
user_weather_notification/static/src/img/weather_card.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

49
user_weather_notification/static/src/js/weather_notification.js

@ -0,0 +1,49 @@
odoo.define('user_weather_notification.weather_card', function (require) {
"use strict";
var SystrayMenu = require('web.SystrayMenu');
var Widget = require('web.Widget');
var rpc = require('web.rpc');
/**
* Extends Widget and adds the template for the weather card.
*/
var ActionMenu = Widget.extend({
template: 'user_weather_notification.UserMenuS',
events: {
'click #get-weather': 'OnClickGetWeather',
},
/**
* Hides the card when the widget starts.
*/
start: function () {
var self = this;
self.$('.card').hide();
},
/**
* Toggles the visibility of the weather card.
*/
OnClickGetWeather: async function () {
var self = this;
if (self.$(".card").is(":visible")) {
self.$('.card').hide();
} else {
self.$('.card').show();
// Take the data from the controller and show it
rpc.query({
route: "/weather/notification/check",
}).then(function (result) {
if (result.data == false) {
self.$("#description").text('Configure Settings');
} else {
self.$("#title").text(result.name);
self.$("#text").text(result.weather[0].main);
var temp = Math.floor(result.main.temp - 273);
self.$("#temperature").text(temp + "°C");
self.$("#description").text(result.weather[0].description);
}
});
}
}
});
SystrayMenu.Items.push(ActionMenu);
return ActionMenu;
});

11
user_weather_notification/static/src/scss/weather.scss

@ -0,0 +1,11 @@
.card {
display:block;
position:absolute;
top: 40px;
width: 250px;
right:-100px;
height: 210px;
}
.img{
width: 248px;
}

52
user_weather_notification/static/src/xml/weather_notification_templates.xml

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates>
<!--Card to show the weather details-->
<t t-name="user_weather_notification.details" content="width=device-width">
<div class="content">
<div class="card dropdown-menu dropdown-menu-right">
<div>
<img class="img"
src="user_weather_notification/static/src/img/weather_card.jpg"/>
<div class="card-img-overlay"
style="height:110px;">
<h3 class="card-title text-white m-b-0 dl"
id="title"/>
<small class="card-text text-white font-light"
id="text"/>
</div>
<div class="card-body weather-small">
<div class="row">
<div class="col-8 b-r align-self-center">
<div class="d-flex">
<div>
<h1 class="font-light text-info m-b-0"
id="temperature"/>
<small>
<span id="description"/>
</small>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</t>
<!--Icon in systray-->
<t t-name="user_weather_notification.UserMenuS">
<li class="new_icon">
<label class="my_icon" id='get-weather'>
<div class="icon_div">
<div class="toggle-icon">
<i class="fa fa-cloud" id="fa-icon"
style="color:white; padding-top:16px" role="button"
aria-expanded="true" aria-haspopup="true"
title="Weather"/>
<t t-call="user_weather_notification.details"/>
</div>
</div>
</label>
</li>
</t>
</templates>

13
user_weather_notification/views/assets.xml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Connecting js and scss file-->
<template id="assets_backend" name="assets"
inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<link rel="stylesheet"
href="/user_weather_notification/static/src/scss/weather.scss"/>
<script type="text/javascript"
src="/user_weather_notification/static/src/js/weather_notification.js"/>
</xpath>
</template>
</odoo>

26
user_weather_notification/views/res_users_views.xml

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Adding views in res.users to add fields for API key, location, and city -->
<record id="view_users_form" model="ir.ui.view">
<field name="name">res.users.view.form.inherit.user.weather.notification</field>
<field name="model">res.users</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.view_users_form"/>
<field name="arch" type="xml">
<!-- Inserting a new page after the 'references' page -->
<xpath expr="//page[@name='references']" position="after">
<page string="Weather Settings">
<group>
<!-- Field for API key -->
<field name="api_key"/>
<!-- Field for location setting -->
<field name="location_set"/>
<!-- Field for city (visible only if location_set is 'manual') -->
<field name="city"
attrs="{'invisible': [('location_set', '!=', 'manual')]}"/>
</group>
</page>
</xpath>
</field>
</record>
</odoo>
Loading…
Cancel
Save